DZYRATYJCDZ37DANB6FDHK7KBOAPJ7QW2TZ6AAQTWIEEICOQ7VDQC (ns edition2022.day7(:require [clojure.string :as str]))(def example "$ cd /\n$ ls\ndir a\n14848514 b.txt\n8504156 c.dat\ndir d\n$ cd a\n$ ls\ndir e\n29116 f\n2557 g\n62596 h.lst\n$ cd e\n$ ls\n584 i\n$ cd ..\n$ cd ..\n$ cd d\n$ ls\n4060174 j\n8033020 d.log\n5626152 d.ext\n7214296 k")(def example-lines (str/split-lines example))(defn add-file [tree command];(println command)(assoc tree (second command) (bigint (Integer/parseInt (first command)))))(defn create-dir-tree [lines tree](if (or (empty? lines) (= "$ cd .." (first lines)))[(rest lines) tree](let [current-line (first lines)other-lines (rest lines)command (str/split current-line #" ")new-args (cond(= "$ cd /" current-line) [other-lines tree](= "ls" (second command)) [other-lines tree](= "dir" (first command)) [other-lines tree](= "cd" (second command)) (let [other-exec (create-dir-tree other-lines {})][(first other-exec)(assoc tree (nth command 2) (second other-exec))]):else [other-lines (add-file tree command)])](recur (first new-args) (second new-args)))))(defn dir-structure [lines](second (create-dir-tree lines {})))(defn dir-name [parent child](str parent \. child))(defn compute-sizes [parent tree](let [files-size (->> (vals tree)(filter #(not (map? %)))(reduce + 0N))dirs (->> (seq tree)(filter #(map? (second %))))sizes (->> dirs(map #(compute-sizes (dir-name parent (first %)) (second %)))(reduce conj {}))parent-size (->> (map first dirs)(map #(dir-name parent %))(select-keys sizes)(vals)(reduce + files-size))](assoc sizes parent parent-size)))(defn sum-with-cap [lines](->> lines(dir-structure)(compute-sizes "/")(vals)(filter #(<= % 100000N))(reduce + 0N)))(defn input-lines [](->> (slurp "resources/day7.in")(str/split-lines)))(defn solution-part1 [](->> (input-lines)(sum-with-cap)))(defn solution-part2 [](let [sizes (->> (input-lines)(dir-structure)(compute-sizes "/"))used-space (sizes "/")free-space (- 70000000N used-space)](->> sizes(vals)(sort)(drop-while #(< (+ % free-space) 30000000N))(first))))(commentexample-lines(create-dir-tree ["14848514 b.txt" "8504156 c.dat"] {})(create-dir-tree ["$ ls" "14848514 b.txt" "8504156 c.dat"] {})(create-dir-tree ["$ ls" "14848514 b.txt" "8504156 c.dat" "dir aaaa"] {})(create-dir-tree ["$ cd /" "$ ls" "14848514 b.txt" "8504156 c.dat" "dir aa"] {})(create-dir-tree ["$ cd /" "$ ls" "14848514 b.txt" "8504156 c.dat" "dir a" "$ cd a" "$ ls" "29116 f"] {})(dir-structure example-lines)(compute-sizes "/" {"a" 10, "b" 20, "c" {"d" 40}})(compute-sizes "/" (dir-structure example-lines))(sum-with-cap example-lines)(solution-part1)(dir-structure (input-lines))(compute-sizes "/" (dir-structure (input-lines)))all-dirs-from-file(count all-dirs-from-file)(count (set all-dirs-from-file))(count (filter #(str/includes? in %) all-dirs-from-file))(count (compute-sizes "/" (dir-structure (input-lines))))(solution-part2))
(ns edition2022.day6)(defn read-in [](seq (slurp "resources/day6.in")))(defn unique? [marker](let [expected-size (count marker)s (set marker)](= expected-size (count s))))(defn find-idx-after-marker [marker-size datastream](->> (partition marker-size 1 datastream)(take-while #(not (unique? %)))(count)(+ marker-size)))(comment(find-idx-after-marker 4 [\a \b \c \d \e])(find-idx-after-marker 4 (seq "bvwbjplbgvbhsrlpgdmjqwftvncz"))(find-idx-after-marker 4 (seq "nppdvjthqldpwncqszvftbrmjlhg"))(unique? [\a \b \c \d])(find-idx-after-marker 4 (read-in))(find-idx-after-marker 14 (read-in))(find-idx-after-marker 14 (seq "mjqjpqmgbljsphdztnvjfqwrcgsmlb")))
$ cd /$ ls150961 cmnwnpwb28669 hhcp.jzddir jssbndir lfrctthp133395 lfrctthp.tlvdir ltwmzdir nmzntmcfdir vhj256180 wbs.vmh257693 zsntdzf$ cd jssbn$ ls89372 dvlbdir lfrctthpdir pjzpjjqdir rbtbtt203148 sppmmj130200 sppmmj.bmmdir tlhttrgs248929 vsbvlr$ cd lfrctthp$ lsdir lfrctthpdir srf165285 vlfc202701 wbs.vmh$ cd lfrctthp$ ls25083 gsb.flc$ cd ..$ cd srf$ ls20386 hcnjd.nsq143480 jjlz.mtqdir rwvdvvsf88782 sbmhf143464 wbs.vmhdir wvhhr$ cd rwvdvvsf$ ls20009 bqz133188 czdm$ cd ..$ cd wvhhr$ ls10445 vrwdvnh.jhf$ cd ..$ cd ..$ cd ..$ cd pjzpjjq$ ls14329 chgbd.zjfdir dvlb212284 pjcdir qlrn225566 rhzgmnb.nhd145766 sppmmj.dzzdir vpltwcs125853 wbs.vmh$ cd dvlb$ lsdir bjfqsbdir fnwsmj154127 gplzm264923 qcp.qvcdir wlhfvwldir wrgqqtsdir zhj$ cd bjfqsb$ lsdir jgltcw$ cd jgltcw$ ls264579 shmqqjf.fwd$ cd ..$ cd ..$ cd fnwsmj$ lsdir lfrctthpdir rddpmj$ cd lfrctthp$ lsdir qdgqdtn198919 qhjbh.fbcdir sgddcfdn$ cd qdgqdtn$ ls230357 lbcgfp.vzq$ cd ..$ cd sgddcfdn$ ls110212 cwjbzd.npbdir lnjln207550 wlvdsjj$ cd lnjln$ ls28970 tdw$ cd ..$ cd ..$ cd ..$ cd rddpmj$ lsdir fhlnmw$ cd fhlnmw$ ls228871 mcgdrzg$ cd ..$ cd ..$ cd ..$ cd wlhfvwl$ lsdir rbwq$ cd rbwq$ ls139444 jdczdlwb66039 mnbq.sdq$ cd ..$ cd ..$ cd wrgqqts$ ls124869 dvlb.cfl$ cd ..$ cd zhj$ lsdir hww192363 lqndir nqv$ cd hww$ ls14681 czhd.bdn232222 fgcfbrs.wqtdir pnsbrd155416 vsw.npv199792 wbs.vmh44877 znpdrr.rmd$ cd pnsbrd$ ls179442 vsbvlr55431 zbhj.wnh$ cd ..$ cd ..$ cd nqv$ ls262693 hnz.czd259429 lptljbzdir rjgbmdir tlhttrgs76496 tlhttrgs.jlv260003 vsbvlr$ cd rjgbm$ ls45885 fgfh.tch42899 lfrctthp.fbc159401 nnmg.tvz144595 trzgtn.scg$ cd ..$ cd tlhttrgs$ lsdir cqtnvzn220458 wbs.vmh$ cd cqtnvzn$ ls49609 czdm$ cd ..$ cd ..$ cd ..$ cd ..$ cd ..$ cd qlrn$ ls150270 bflnzt203988 bgqdir jwgd256702 sppmmjdir wbgvqpc$ cd jwgd$ ls57414 lmlbtpg.wdp$ cd ..$ cd wbgvqpc$ lsdir dvlbdir qfhvjtvdir tpcwhmv$ cd dvlb$ ls118388 hhcp.jzd$ cd ..$ cd qfhvjtv$ ls82966 lfrctthpdir mhbbpdpj139234 wbs.vmh$ cd mhbbpdpj$ lsdir ghrbbh$ cd ghrbbh$ ls24686 tlhttrgs$ cd ..$ cd ..$ cd ..$ cd tpcwhmv$ ls3666 hhcp.jzd$ cd ..$ cd ..$ cd ..$ cd vpltwcs$ lsdir tlhttrgs146745 vsbvlr$ cd tlhttrgs$ lsdir cchd32682 cvbr.rmh209102 mpdpnb96179 wbs.vmh$ cd cchd$ ls126044 wmrv$ cd ..$ cd ..$ cd ..$ cd ..$ cd rbtbtt$ ls169793 hzgdsb.tbsdir wqmvzg$ cd wqmvzg$ lsdir lzbj$ cd lzbj$ lsdir tnhdmqjh$ cd tnhdmqjh$ ls5150 lfrctthp$ cd ..$ cd ..$ cd ..$ cd ..$ cd tlhttrgs$ lsdir zjghthcbdir zmlpwlm$ cd zjghthcb$ lsdir dvlbdir ghzsqrndir hvwjcdir lfrctthp$ cd dvlb$ ls167639 dvlb.fhs70305 qnhgn.mgn$ cd ..$ cd ghzsqrn$ ls74556 dbrtz.lrndir fngzpjmdir mdqbvhrr220711 mrfjpgwjdir sfhqmzhd67424 tlhttrgs.thf202325 vsngvn.ttq$ cd fngzpjm$ lsdir dvlbdir ghzwdw$ cd dvlb$ ls59824 bmvzg184952 lfrctthp51434 qwcttnh.pbs206348 wbs.vmh$ cd ..$ cd ghzwdw$ ls132594 lfrctthp99032 tlhttrgs.cvp$ cd ..$ cd ..$ cd mdqbvhrr$ ls32598 zsfv.qqv$ cd ..$ cd sfhqmzhd$ ls58893 wpmbm$ cd ..$ cd ..$ cd hvwjc$ ls233454 ccpnsjm.cwc72232 lfrctthpdir nchvqtdq248368 ptrlpt.gdf222059 qgjv69105 wbs.vmhdir wnj$ cd nchvqtdq$ ls49931 gjwjq.jrc$ cd ..$ cd wnj$ ls182139 ccpnsjm.cwcdir dvlb72806 hhcp.jzd156378 sppmmj$ cd dvlb$ lsdir cwjbzd$ cd cwjbzd$ lsdir tlhttrgs$ cd tlhttrgs$ ls240264 vdp.wzt$ cd ..$ cd ..$ cd ..$ cd ..$ cd ..$ cd lfrctthp$ ls168164 ccpnsjm.cwc68428 dcmfjn133121 dvlb146217 sppmmj.zjmdir thghdir zzffz$ cd thgh$ lsdir nrntbhdir qlhbf$ cd nrntbh$ ls139964 lfrctthp.brp$ cd ..$ cd qlhbf$ ls115891 vsbvlr$ cd ..$ cd ..$ cd zzffz$ ls170513 tlhttrgs.hsw$ cd ..$ cd ..$ cd ..$ cd zmlpwlm$ ls232644 wvjrtvps.hrb$ cd ..$ cd ..$ cd ..$ cd lfrctthp$ lsdir cwjbzddir dvlb65658 fclf191985 hhcp.jzddir lwqdqmdir mpbdir ndndir rtpwjds185299 smpdir sqhvvsbdir vzhdir zzvnq$ cd cwjbzd$ ls172122 ccpnsjm.cwcdir dfqpqqwdir lfrctthp123102 lfrctthp.cms73991 lqhjcbms207693 mcnwpdir sppmmj114128 tzrrgl$ cd dfqpqqw$ ls67239 dgssm.crldir rjm$ cd rjm$ ls25830 nnwdzf$ cd ..$ cd ..$ cd lfrctthp$ lsdir fqswn241343 jllwj.wjc$ cd fqswn$ ls76154 ccpnsjm.cwcdir dhgghnmdir vpbwj$ cd dhgghnm$ ls36757 jbmlssv.ndpdir sppmmj$ cd sppmmj$ lsdir dsss$ cd dsss$ ls201519 vsbvlr$ cd ..$ cd ..$ cd ..$ cd vpbwj$ ls154042 ccpnsjm.cwcdir tlhttrgs271666 vsbvlr$ cd tlhttrgs$ ls125785 cwjbzd.lqr19315 jdcm.mrz$ cd ..$ cd ..$ cd ..$ cd ..$ cd sppmmj$ lsdir sppmmj$ cd sppmmj$ ls161387 fwh.wtt$ cd ..$ cd ..$ cd ..$ cd dvlb$ lsdir dnqvhtrdir jqpzjdir jvvsgbldir tlhttrgs$ cd dnqvhtr$ lsdir jzmdir phcfgqfsdir sppmmjdir vhrst$ cd jzm$ ls143413 sgsbj.qtrdir smtpdcpf$ cd smtpdcpf$ ls95947 lgzlj$ cd ..$ cd ..$ cd phcfgqfs$ ls257801 hhcp.jzd$ cd ..$ cd sppmmj$ ls230280 ccpnsjm.cwc261954 hhcp.jzddir hmcndir mrhsrrmdir nlqmghjdir rqbtcvfw70788 vsbvlr114344 wbs.vmh225265 wjnf.wrv$ cd hmcn$ ls206476 dvlb214973 lfrctthp$ cd ..$ cd mrhsrrm$ ls126589 wbs.vmh$ cd ..$ cd nlqmghj$ ls113621 mdqvh.flp$ cd ..$ cd rqbtcvfw$ ls259673 wbs.vmh$ cd ..$ cd ..$ cd vhrst$ ls102273 sppmmj$ cd ..$ cd ..$ cd jqpzj$ ls7675 vwls.wjz$ cd ..$ cd jvvsgbl$ ls217539 bgjgtfbv.wcfdir fbvlsdir gtwrhhddir tlhttrgs59720 wbs.vmh$ cd fbvls$ ls146823 ccpnsjm.cwc$ cd ..$ cd gtwrhhd$ ls59762 wbs.vmh$ cd ..$ cd tlhttrgs$ ls7093 ccpnsjm.cwcdir dvlbdir hjclnb$ cd dvlb$ ls62683 trww$ cd ..$ cd hjclnb$ ls245444 bcnlmstj.bsj167166 czdm$ cd ..$ cd ..$ cd ..$ cd tlhttrgs$ ls53060 czdm217177 hzwn$ cd ..$ cd ..$ cd lwqdqm$ lsdir bdgnmfdir dvlb89596 vsbvlr$ cd bdgnmf$ ls146880 wbs.vmh$ cd ..$ cd dvlb$ ls184438 vsbvlr$ cd ..$ cd ..$ cd mpb$ lsdir dvlb$ cd dvlb$ lsdir prqfqf$ cd prqfqf$ lsdir ltmjppj$ cd ltmjppj$ ls241963 bjgzsq.srr$ cd ..$ cd ..$ cd ..$ cd ..$ cd ndn$ ls184702 cnv.vtn52486 dvlbdir hfq52100 hswnvlq.frd$ cd hfq$ lsdir bsjgglbs263904 cwjbzd.sht265639 phpvlfw.jmm178105 wbs.vmh25124 wcq.qct$ cd bsjgglbs$ ls121761 czdm$ cd ..$ cd ..$ cd ..$ cd rtpwjds$ ls117111 qjvrwsfl132235 rwjfdir sdssvrst223399 wjfdgt.ldj$ cd sdssvrst$ ls114380 ccpnsjm.cwc$ cd ..$ cd ..$ cd sqhvvsb$ ls7812 gjhj239114 hhcp.jzddir ldmwm230777 vsbvlr$ cd ldmwm$ ls67855 blcbqb.wpzdir cwjbzd250365 czdm249613 dvlb.mfqdir jdsbt95934 tlhttrgs.wgw$ cd cwjbzd$ ls147822 cwjbzd.lff122632 hhcp.jzddir llcflrdsdir tlhttrgs67326 tvptb.fzldir wtcttdzg$ cd llcflrds$ lsdir cngdgq$ cd cngdgq$ ls235724 lqqcfphg$ cd ..$ cd ..$ cd tlhttrgs$ lsdir cgf67714 csb.hcwdir cwjbzddir jvs119180 lfrctthp.qgmdir ppsmqwndir qqmtjdir qzmpwzvzdir zmsbqrqf$ cd cgf$ lsdir dvlb$ cd dvlb$ ls77864 thff$ cd ..$ cd ..$ cd cwjbzd$ ls208459 ccpnsjm.cwc17127 dtqglmf.zgb$ cd ..$ cd jvs$ ls142337 cwjbzd$ cd ..$ cd ppsmqwn$ ls147277 rmwh$ cd ..$ cd qqmtj$ ls153442 vqld.lsd$ cd ..$ cd qzmpwzvz$ ls223666 cwjbzd.gjl254370 gjc$ cd ..$ cd zmsbqrqf$ ls193665 tjwclf.nzs$ cd ..$ cd ..$ cd wtcttdzg$ ls52882 hhcp.jzd110104 hqwgl.mtb$ cd ..$ cd ..$ cd jdsbt$ ls77115 ccpnsjm.cwc242705 dvlb12624 lfrctthp145552 sppmmj198997 vsbvlr$ cd ..$ cd ..$ cd ..$ cd vzh$ lsdir ccbjg91733 czdm89195 dvlb212167 rvfpbl.rtq224909 tlhttrgs.djt72916 vpznzhs.dcd$ cd ccbjg$ lsdir mcvsbddir sppmmj$ cd mcvsbd$ lsdir cwjbzddir rbsv$ cd cwjbzd$ ls224826 ccpnsjm.cwc$ cd ..$ cd rbsv$ ls164816 lfrctthp$ cd ..$ cd ..$ cd sppmmj$ ls85264 ccpnsjm.cwc104511 dvlb.qgj183533 lfrctthp.zdn98525 wbs.vmh$ cd ..$ cd ..$ cd ..$ cd zzvnq$ ls107390 lfrctthpdir lznpqbrddir pddfg143496 prnjh.sgbdir pvdzdir vnmhs118674 zhnh.mpl$ cd lznpqbrd$ ls157950 dpvcgj.wlwdir dvlb175412 dvlb.qvrdir lfrctthp84587 pmsjdj$ cd dvlb$ ls41223 rwr.nbz$ cd ..$ cd lfrctthp$ ls26056 fqc.fnl28191 lgjlw.vqldir sppmmj262066 wbs.vmh$ cd sppmmj$ ls246742 ccpnsjm.cwc$ cd ..$ cd ..$ cd ..$ cd pddfg$ lsdir cwjbzddir jbw147410 vsbvlr$ cd cwjbzd$ ls197956 jpzb.dcw$ cd ..$ cd jbw$ ls247206 vsbvlr$ cd ..$ cd ..$ cd pvdz$ lsdir jctpqbgw153177 qwcgjttm.lzm94686 vsbvlr$ cd jctpqbgw$ ls190424 qvm$ cd ..$ cd ..$ cd vnmhs$ ls16118 sdhmzhlg.blf$ cd ..$ cd ..$ cd ..$ cd ltwmz$ ls243152 bdmz$ cd ..$ cd nmzntmcf$ lsdir jqcmsdir lrtstsdir lvchpdfdir qpzqpdir qrghdir scwnmrds$ cd jqcms$ ls105562 ccpnsjm.cwc257512 chpr.zvldir cwjbzddir jzqbnpndir ssr117496 tlhttrgs.thg72550 vsbvlr$ cd cwjbzd$ lsdir mwvlhzdndir qrpllg205638 sppmmj.gcz$ cd mwvlhzdn$ ls272658 dvlb.bbw$ cd ..$ cd qrpllg$ ls215810 wbs.vmh$ cd ..$ cd ..$ cd jzqbnpn$ ls112583 sppmmj$ cd ..$ cd ssr$ ls66781 hpfpw.pvn138840 zhwplzd.wrq$ cd ..$ cd ..$ cd lrtsts$ lsdir drtrdnsg41195 dvlb.fgtdir lfrctthp$ cd drtrdnsg$ lsdir gncdir sppmmj$ cd gnc$ ls127922 ccpnsjm.cwc233097 lfrctthp24075 qtglzq$ cd ..$ cd sppmmj$ ls128955 czdm64809 jtjh.nzqdir mdmhdir nbzh126095 wbs.vmhdir wwhbgg$ cd mdmh$ lsdir zvtjfz$ cd zvtjfz$ ls142470 ptp.qbf$ cd ..$ cd ..$ cd nbzh$ ls7112 ccpnsjm.cwc215395 chrtbjf.fwr145865 wld.pdl$ cd ..$ cd wwhbgg$ ls51752 hhcp.jzd$ cd ..$ cd ..$ cd ..$ cd lfrctthp$ ls198780 hhcp.jzd$ cd ..$ cd ..$ cd lvchpdf$ ls108580 hhcp.jzd105301 jpjjhshldir njfmmjdir nswdir sppmmjdir tlhttrgsdir tvsvr$ cd njfmmj$ lsdir bjsvdfrfdir gjgftjdir sppmmj25879 twzprtcf.hgl$ cd bjsvdfrf$ ls77668 vsbvlr$ cd ..$ cd gjgftj$ lsdir mjbw56593 vsbvlr$ cd mjbw$ ls243595 ccpnsjm.cwc$ cd ..$ cd ..$ cd sppmmj$ lsdir qzvwhr$ cd qzvwhr$ lsdir cwjbzd$ cd cwjbzd$ ls262825 wbs.vmh$ cd ..$ cd ..$ cd ..$ cd ..$ cd nsw$ ls210254 rgqpq$ cd ..$ cd sppmmj$ ls55463 cwjbzd.dtt196779 dvlb125377 hgb.qmjdir rdddir tlhttrgs222280 tspzdir zbq$ cd rdd$ ls20045 srmsmr$ cd ..$ cd tlhttrgs$ ls47256 wbs.vmh$ cd ..$ cd zbq$ ls223951 cwjbzd.vrm$ cd ..$ cd ..$ cd tlhttrgs$ ls56808 jvndrcmd.ftldir mjcmhg220385 prh.wtz231575 pzbtlg.fzv11100 sqfr.lzsdir tlhttrgs$ cd mjcmhg$ ls214188 llsfnv.dmc$ cd ..$ cd tlhttrgs$ lsdir qtwsdir sbhswjld$ cd qtws$ ls102462 vjlwzbsg.whn$ cd ..$ cd sbhswjld$ ls159193 dvlb.bqj17424 hhcp.jzd28945 pdwrmgs.lzq38201 rpbllgs.rzndir sppmmj$ cd sppmmj$ ls88100 wbs.vmh$ cd ..$ cd ..$ cd ..$ cd ..$ cd tvsvr$ ls237626 tlhttrgs.mhw$ cd ..$ cd ..$ cd qpzqp$ lsdir ddclns134373 lfrctthp167788 lstwpqbq.wln224743 qcplm14385 vzjj.bzm108204 wbs.vmh$ cd ddclns$ lsdir vprlq$ cd vprlq$ ls137784 ccpnsjm.cwc$ cd ..$ cd ..$ cd ..$ cd qrgh$ ls29875 ccpnsjm.cwc225323 hhcp.jzd135470 tlhttrgs23724 vsbvlr$ cd ..$ cd scwnmrds$ lsdir sppmmj$ cd sppmmj$ lsdir sppmmj$ cd sppmmj$ ls73173 blznf.smd$ cd ..$ cd ..$ cd ..$ cd ..$ cd vhj$ ls221377 cwjbzd.tvv98748 czdm108605 hhcp.jzddir jnmdir lfrctthp11518 lfrctthp.jfl89038 psnfcwpq.zcddir tlhttrgs$ cd jnm$ ls66785 bfwm196636 dssh.rwndir sppmmj140177 tlhttrgs.jlh199730 vsbvlr$ cd sppmmj$ ls101586 ccpnsjm.cwcdir lfrctthp127582 vsbvlr71001 zvrzs$ cd lfrctthp$ ls122902 lfrctthp247157 svmpmrl.tcc$ cd ..$ cd ..$ cd ..$ cd lfrctthp$ ls104555 cwjbzd.hbf56298 pldmc.hjd27639 sppmmj.nmr$ cd ..$ cd tlhttrgs$ ls252680 zsjgqqb
mvwvrwvwbblffmvmhmllmzmqzzbhbnnvrnvnmvvqrqrccpsstvvshvvpvvpddzwwjddfzzgbbzcchrrtzzmfffzqqsjjbfbjfjwffhrhrgrfrsfrsffbwwphwhgwgmgnggzwzhwzzpggnccdbcbssgccqgcgcvgccwffrqfqtqmqppwphhlbblnnwhwfhwhmhzhmmzbmbbjjmcjcggwlgltldttpccjlccbjccvfcvvdbvdvndvvmbmcbmmhphpbhhgjgllmljlqlwlclzlccrvrdvdzvzzzbrbrnbblplrplpsstdtjddgjgjgwjwzwbzwwrhwwbzwbwpwssvgvnnwnvvjqqswwsccwctwtntdndffjzfzmfzmfzmfzzhjzhzssdsgsnggbbqdqlqbllmglgddqppjjtzttlflrrczcmzzsppvfpvffcfrccvvvhjvhvfhfbbwdwrwswqqftfbfcfdfnfpnfflbbcmcqqsqwqqccmwmvwvffvdvlvtvqttnllqslsnllzplldmmzczhzmzzhllpfpqpnnqwwwrzzdpzzhccfvcvclcnnrjrmjrjlrlflqqtpqqdgqghhwdwdttlztttwmmvfmftfptphhddswdsdpdvpvpcpjjnvjvqvhvqqqfgqqgwqgwghwwmmvmvfmvvnvsslcclzlslppztzfzbzllcgllcsllvgvqvtqtsstztwwgjgghnhnhdnnqgnntqqtccdmcmhmpphpmmmbpbptpnnnmnppwlpwwfpwfwmfwfssbspslsflljpppbsspwptpwttfbtfftltvlttdmttllmggfcgfccvwcvczvvgvsgswsrrwppgcpggpgnngfnndrrdjrdrfdfmmjmsmbmmwjjjfzfdfbdbbtgbbcsbccgbbrvvrqrwqwmmhrhhbcbdbvdvzdvdjvvnwntwwdfwwrhrmhhnghhncccfttmpmrrjhhqddrsrvvssmrrgvgdgmmfqqhttspswpwlplpjljcjmjmvmdvvhbvvtqvqccczwwtlllztlzzpnnqznzddqsqvsshrrmccnppgrrjcjpccrvcvnvcncllffvnnbsbhhrmhmzzzhrhchjccgjcjwwhddmfmhhmrrrbccqddmjdmjdjtdjjmttzstsctssvvgghgbbhmhzmmjqqqqjgjfjpffpmpzmzszfzgzcggpmpnnqjqffgpghhszzvlzzdgzggqmggqlllcwwtzwwcfwccpjpggtqgtttzffdpffjzfzddzppprnprpqqbppvjpjzppbzpbzppwzzcnndsdzszbssqwqggnhggnzggpcpnndssghsggmfmrffvddvwvssjmjrmrmnndwdwhdhwwfjfjwjmwwqssmdsmdmssqzzrgzzjttnqnfqfcccvvmsvsvffccdjdccgtgqqjwqqnbqqnhqhrqrmrgmrrzjzrznzllwrlrbbcppctptwtfttlntnltnlnzzhrzhrzrtzzvsvfvjffsbsnbbfpphtptjjmffqgqnggnqnsshffslflggtlggmpggnfgfbgbfbcbbtdbdjqwfggzsfmzflttgdfqchhtjfwlmdnsbvmqcrhsrtwtjlmnlwbvjvqdzswdthbjslqzgmtzfjfcrgbhrrjtzgljbqfrzzqszhddnmzpnbgnflghnflwdmjdhgpnvwvnltcngwggqdznrpdtwsrclwwlfzhnjtpqcgzjqjnhcwbhndwvgrczhzwfjrdvjztdbjshmhrrqctjwpcdnpnvrtggrmhzhdtlntjphcddplgfvvmjzcbbpjbqbjwmnwqgftbmchghwvrlptvnfbffvgtdbtnfzwdmdlgzjbrvffvbrfwgjzzpbpcdzhcjbhfwnmqqwvjvnpgdqdjsmwdmrgfqrwhhqqjpfmvlncfdjchrccwpbptccdchqwvbcqzlhbfgrdzgncbwrzqpfszrcwtmnvbztjlzjlrqqfrnplhnmdjljcpnqssthhmjqrrlwdvsjswdwtfstmbvwhbptjnphjmnllbwffppzmdpchbcwcmgqzfmdqvhcmrvtgtjwlzfpnjnjtfvdhtjlqsdjwrrnflnsqrtfsnbjfdllhqslltsjqzdfqthqjjgrtqjwmlqqlhvszqswmdcbnwqgshpvfjdtvsqjvcnrnvtpfsgqszhtmcdlsqjwmttcqsdlvssrgwhtmtqwmttptnmgzpwzzrbwtsrjhmjpblztgftppcwwrjppvwlvdhwwdlfcdvhwpvhqpwrqsczvlmtghrrvqbphljcmcrfmwltlmnzchzrlbgspdjwfbhrmnfhvjwlgtghcpbfgdvrmwbqbprfvwpzqzrgqbhjtztwhjcjtncmbgjphsgdfvjwjljlwzhsdldqtdvgtzpwtmrbnpvqrmfdwngzqtsdjjztslrwdnfwgbnsjblcjzvmgbqllmdvvvdcvplgbzmhcrpbbjbfzhjgfpmjtrpmgvshzvqhcbcjzfcsvqggjcllcnjlrwqfpzldswzjgzvqwvszhrntnvlcpdcfqhqrtmhbdjqpfblrsbrhdfdwfgbhsnnjpgjvfpssfmhdbdncfrqbzpbttrhfzqnrttltqbvmhglbdpwmdbmgwcdsdsflmcnphwvbbhgqpqmwbdsmqwhcdftdlcfnstlfnzzsjhqzlsdmhpvlcqvhhlpdtzlqzlvbbwhhdsqhntbtpjjvnjlrncfmvnqmzwpldgrbfcfgdtlmrfzcbqfhvhpmsrrlnqwfggwrjsmnpnqhvvcfsfspfrmhwmbpqfhprzsswrczttlczhcqvgqqsnbhhfszqbswgtcjgddhngtcvlwqqmqzntrcwgwjhmhlgclpgtmqnpgwwhnjfdvvjgmqjlzsmwztpsdzrjlshswzljlmdzfqmqbtgtzlsfwqvwrdchjvrdnwdbprfvdvczstvnzfzzfmzbwjhtflbmhlgmfzrdfrqwfbltwqlqrghlprppvlqwggvczdcnmrmblhcfmpzdmqppgwhbbrjlzsvmsfzlrdljftcrdfdgmvrccwszpjmvdnbmfdnsgmgzsdpbrlsqvsmcwwqlwtwbgfvwtsmpqlnhjchnzrpncgtcqgwqrmqmrwsbmdvqcpggpzcjgtrhvnbpprlwfnjlvrgrdjjvncjmmflrpczqnlbqczggssqfcjcrghqlsztpdjpbbfcdjzzdjbljlsczdmrgshdscvhnltrwchjcmjzmjbhldnqzwwpswsnsldcbdcdpdgpjgwrnfbcpjtvzlhvgggldcfqcwwppvltsvsmwzwdgmhnfggtgtwldmrglcvmstgmbgbjhwwhgdhfrbjlwfhjfppdmffblbbzrplhlhqlsrnsthvjtglqntzcncmvhqnlsvvrscrhlncgncjswfgcvgjlwsndzmsbhbdqsggdgrsfqtzwnjpsdlbsqjrrjwwlbptwqpfqwvpsrtrmstddzdbjjlwvfqcpfczpsnmcgbfpbwcpljdhrgsqftbnplccjphwsdbprqfqqfcvtcdznnhrbdqpccphvdgtspmzzdbnslnrvtfrtbhcfzfgmhrttmdpwftvccjbllhqgtmpgwvbdjgtvtfbfnnsfgzqjmrpbcmqhpfbstznbvgtbhnwbbnjfsthdgdrpfdtvrtmgbwzqqpnlltbshjvnhsmqhqwzgbsfqqccfznjtnnzdrgcvwnlffdgvvqzvwhwfswdmqlrsglntzsnwjzgrhhwzzshwsfmlmrbnmrqlptmjgmtqctrmddzghsgtrbbcsmhtcnrzwmvrjmrnmhbjmflrclvlbzwbgmtnmwqgfmbbnnrdvhqcflglvzbmjzjtvnmrbgghnccfrphjshsgtrhfmmghhpwgclfvzfbdccsfrlfwtsjjnhlndpwcjdtlllhcsvwrwsbppqwhfcvnsnrvthrsbgmgjhpmjdndmdqdgzfvbqfmgfjrnrjchstrjprfwfnjqblhjdgsstvtpcsvmpbhggnwzncpjdhrcllcghhprhwhfgsqpfzphrdlcbrccglsb