From 0f38cd6bf002116168c00dd2b0dee1628138ecbf Mon Sep 17 00:00:00 2001
From: a <a@trwnh.com>
Date: Tue, 5 Mar 2024 03:32:18 -0600
Subject: [PATCH] add 2023 stuff oops

---
 2023/01/01.py            |   25 +
 2023/01/input.txt        | 1000 ++++++++++++++++++++++++++++++++++++++
 2023/02/02.py            |   50 ++
 2023/02/input.txt        |  100 ++++
 2023/03/03.py            |   61 +++
 2023/03/input.txt        |  140 ++++++
 2023/04/04.py            |   29 ++
 2023/04/input.txt        |  218 +++++++++
 2023/05/05.incomplete.py |    3 +
 2023/05/input.txt        |  250 ++++++++++
 2023/06/06.py            |   36 ++
 2023/06/input.txt        |    2 +
 2023/07/07.py            |  156 ++++++
 2023/07/input.txt        | 1000 ++++++++++++++++++++++++++++++++++++++
 2023/10/10.incomplete.py |   17 +
 2023/10/input.txt        |  140 ++++++
 2023/15/15.rs            |   15 +
 2023/15/input.txt        |    1 +
 18 files changed, 3243 insertions(+)
 create mode 100644 2023/01/01.py
 create mode 100644 2023/01/input.txt
 create mode 100644 2023/02/02.py
 create mode 100644 2023/02/input.txt
 create mode 100644 2023/03/03.py
 create mode 100644 2023/03/input.txt
 create mode 100644 2023/04/04.py
 create mode 100644 2023/04/input.txt
 create mode 100644 2023/05/05.incomplete.py
 create mode 100644 2023/05/input.txt
 create mode 100644 2023/06/06.py
 create mode 100644 2023/06/input.txt
 create mode 100644 2023/07/07.py
 create mode 100644 2023/07/input.txt
 create mode 100644 2023/10/10.incomplete.py
 create mode 100644 2023/10/input.txt
 create mode 100644 2023/15/15.rs
 create mode 100644 2023/15/input.txt

diff --git a/2023/01/01.py b/2023/01/01.py
new file mode 100644
index 0000000..a2a2f4c
--- /dev/null
+++ b/2023/01/01.py
@@ -0,0 +1,25 @@
+with open("input.txt") as f:
+	lines = f.readlines()
+
+def extract_numbers(line: str) -> int:
+	nums = [c for c in line if c in "1234567890"]
+	return int(nums[0] + nums[-1])
+
+part1 = sum(map(extract_numbers, lines))
+print(part1)
+
+def extract_numbers2(line: str) -> int:
+	# we need to preserve overlaps in both directions
+	line = line.replace("one", "one1one")
+	line = line.replace("two", "two2two")
+	line = line.replace("three", "three3three")
+	line = line.replace("four", "four4four")
+	line = line.replace("five", "five5five")
+	line = line.replace("six", "six6six")
+	line = line.replace("seven", "seven7seven")
+	line = line.replace("eight", "eight8eight")
+	line = line.replace("nine", "nine9nine")
+	return extract_numbers(line)
+
+part2 = sum(map(extract_numbers2, lines))
+print(part2)
\ No newline at end of file
diff --git a/2023/01/input.txt b/2023/01/input.txt
new file mode 100644
index 0000000..36374dd
--- /dev/null
+++ b/2023/01/input.txt
@@ -0,0 +1,1000 @@
+eighttkbtzjz6nineeight
+5knjbxgvhktvfcq89onefive
+hnjcrxeightonejnlvm4hstmcsevensix
+trsdgcxcseven39dpmzs
+oneninesixtwo26
+dppthreeh32twobhrqzks
+1cxklgfbvhsnccfive4
+foursgjsevenseven5five19
+nrrk87
+63ntkjbvcv3ntdcptmvheight78
+7xv3one
+3tzjcrfbvhtqctfmqmdcbjhxln9eightnqbcqztmxcthree
+sevensszlgdrlrhnptonethree3qvrxkbgfxtthree
+3nckzkpkjsvztqkgvm99
+fourthreeonesevencqdv2gnvblhr
+528ksdcbx
+six342
+3twozrfrtljql9eightgcqrgmbzz7dlcr5
+6five2threesevenone65
+4onejrg23sevensxfive
+fourthreecszzvhzfsevensix916
+spqzvdxxjeightninejzbpzone7
+cfivesevensix332lfpcffmld
+ninesevenhrdvmzj24bcxxz6
+khpn3fourvhqmntjxfhsvrlnvc
+bfzxhzftwo2czsrv
+mmblpnnineseven4gtfvqscghfour
+1zjgqlz
+five1ninetjjtfxqpdkgrxtgxrcsevenkfdzlh
+s8twoned
+8fiveone53nineeightthree7
+926xrfcjzvpd7
+3sevenqnzjsqh6fnssjdsbv3nine
+rjbbsevenvzkghzsixsbjchs59
+221fsnxtbstone1
+seven9fourpdseven1four2eight
+two1nine4nine7
+9seven7
+fourcjmdgjsfive2l
+twokvhrdldggn15twoxfivenine
+mmjtldgmvq157hchsnvpbjvrvtvnineeight
+cgzeight3sjmhdcvlnthree5vkgfmx
+8sevenfourgnxdpp62xx5
+jgdk3z7mmkkjkm
+9xrdltttpqznsljbvcdvtz
+62zthreethree6
+sjbxq9ptsvjhpzmxfoureightmdbnlsckfqlqr
+91xrnsbxxsvk6brxfftpttsevencszfhsnrfive
+two9ljdfskpfive
+1seven384
+xbfkhfvlts8dhtnxhxgn93three7one1
+3xkjrnqnqhgcfgjvfmxhghp15
+nine9844
+5onepczqjfcgfrbmtstbqbktphkvqcmbbvhpld
+eightsixhnsbnine1twonevrs
+eightcmbm2zbxsixone34
+five99qccjbklfivevqskhpxzd
+seven9four2kzkjbrp
+ttdbhd4gqzdlqldnm
+9cqcztfourrsfskdjf
+njttzmcrchfd4
+r414tzqnfddrbf
+4tzbfcjksjsn7eightonelvkjzkch
+ls7four
+6eightsixrtkcrcbmqq6eight3nine
+onesix5five7six1
+dvrqseven5ninegqthree4two9
+fourgdkmbrlgc8
+three7nine
+sixqrpzqvxd7xnbkftn5seven
+oneonerbpgk5ljpqh5threevtpkpfxtsv2
+ljttxthreefour3three4gxzgsfm
+sixttjvhdggbk357
+eightlb4
+fourtwo4twonekzb
+8one2cdsnrbfxbsixztcfour1
+ldveight19lg
+seventpd84dscfmxj
+one34flpg6eight76
+cfninepkscscc5
+flqv5v6twooneprlprlkcbk
+qsqlrvmkq5457ninetwosevenm
+xlvvtxgspct4gmrgeight
+hpbbkqthree4gzbq768five
+5dqfsixeightonenine
+seven4nfshmhvgqm4
+rhfgvzxtfckbtmxtt9rqms9one
+3gsgfbrnkhqrjddvlx59four2jfz
+fdl4two
+9sevennine158
+five9eight49
+3mfsixnkxdbpdxqdgfdqnk
+six9fivefive
+fourjdmvlvkrp5seventhreejnqncmktwonev
+8cjfqkkgtzlnine
+3nnsevenjdbjfp1
+ghthree1mhgtklfqdkqthree7seven4
+4mqsstftj
+sixprblqsevendsxvqnk5
+four45one
+dxhvj23188xz4
+dcmnr2
+xfoneightsixnine6fiveseven
+6cxbbxkrxphsix
+5ckkzlzjngvssfx
+223zgb
+six4qsf
+hfxgsfhfhpjlvb329eightone
+9zjkckhxoneightbnj
+xsdp23seven3four7
+8five53eightthreenljbtgcnfive
+fnjn36
+eightkpkxrvssix2lhctc
+6ninebqcksevensevenhk
+2one98rrtlncrxhllbgthreelgvkdf
+sixzdnlfrvvd4
+lltjs8sixqbblmfdhctwo
+6twonclq98sscjn
+six3niners7eightwokjj
+sixeighttwo1onerxrvvbfxxqmxnq9
+conetfpbsrm81sixsgkfqk8six
+jbqs5277
+kjbncjlqthxzlznld89bgqgkxfzpqsptwo
+onefive1
+pchlnspk52one4sgqj
+zd3
+43fsfplhgxtjthree7gs4npllqvll
+eight8sixeightone6onexr
+six6hqltskzpkgbggjktlzlpktdqhzdbnine9
+eightnpfbmfninevgpjsleightxh3mz
+rninenine7nine
+fourbbjnjrbzdvshfeight62
+3hzpfsfsdm
+2vzhjbv6
+27bpninejhbcjrmz7zfqf4
+ppflreightpmztvhvonetnjmrxdd31one
+threeseven7
+srf5hcxvhsmn5five
+onersvqvqgkfiveeightqxgrjgfcqj5ntgdzxp3zxdcmbsjqn
+mcb643fivetwo
+onermbkvmkc9pfvlpdhkzj
+3oneeight64
+qtnptg5two36nine2tprkbtb
+15lbhtcqfnj1qgjk
+eightkzrnlrrnlltdmxlbxfourpbpghtgkb9nvlvsm
+26kmmkz
+jhnldxdtpseven46oneightnb
+4lfftjtbzvppxsix17nxpgvjkxd
+vszsbxdzjfourhlxldrthdzpqg6slnj8four
+nineone2njsfpcb
+5sevenone6five
+jrmdhdvrb53onelgvlkd29seven
+qqqg7eightseven
+sevenm9
+3dfcfcdb9twoqbvxjgt56six
+xq88jjmv83pspctxthree
+38five5
+six7rbrvjb
+eightlvqn335nine
+rgmfflzxzd9hs3foureight5
+qm6qvmrone4
+fournine8
+two688qqdtdfbmzn5
+8joneonefourljvbjntkngtskcgfnszpgxt
+ninethree5pjzcvntl984five
+mfgqzcjbglx7
+ninemxnfcqrbjonek1nineggj
+8dcfkfdtwo
+4cltttbrlzpgzbdbqsevendtwosspqk
+8eight9klmcbninetwozdcznsv
+six85pjqldfbqvclntpnqgv
+1dgprzx53
+4sixthreeh3fjqpggtjzq
+fourone8fiveseven4kgbs7
+seven64npxthreeonefour
+xvntvgxv9twotlgcsbgsix4
+hcqtdzthfour2xvqmnmgrncjt51
+qhlpksvnntjq8
+3rtmfngqccktwovpppqfqdlxmk2
+sixfoureight9tqpdln3eightbjnqfldblnine
+eight2sixthree
+3plpm
+6two3two2
+1cfszpnxgtk5fivefive8one
+lxrdvls2
+sevenfqszrfhone5dxcqsq
+42
+3dmpsix9nhgzhbmknfour19oneightlng
+six2dfglxszbjone
+eightone88
+9hffzxl7five4
+seven8fknjk
+fivefoursevenllljzrvjf7
+eightmsxfkbszh2
+6fiveqhkttbsthreefghn4
+3eight98vsnzbkvzcjfive
+spmzsdztzgcfbhvbzqlv5
+fourtwozlsst9sevenjjmbmqk4
+jtmlgrjcpkone2twockgc5four
+one35five4
+four8tltpxqfour
+57sevenbmhceightbhttrzxfvt
+qlvrrlnxgvjgnine1four2two
+sixoneseven3sevenm
+fivejxfghfp81two
+rkp3zbzfnrrqfour4eight
+eightnine7tpflkbqpz
+28fourlmxlhdzctxkrsix
+2fiveeightnineninexhfourseven7
+mnlrszkr18tfive7l
+3eight639
+gqpbkntddpeight22lxqjqqone
+txxrdbx4bvsfxd
+343nsctfvndmp93four2
+9lqjvtjcrrtthree
+bsffrmtwo2fivesix
+qltdtgl3eighttwo91mjq
+rh4rddsfr
+fourfive7seven
+pbqmx7twoqdk
+6onesixclklzfzsq992
+kzxkxvqzjffourdtm4onefive6xoneightsnl
+k4snine4three39
+sevenone2xcnscqhcdplnonekcxmgt
+seven7ninepmeighthqr8
+xpspdx3twoqpc3881
+5two5four8eightfive
+sevenseven2bcbsf
+1sevenrjstpdxfiveseven
+2zsxfivefivesix43
+eightone5j99nhvbfqhzbvrv5
+onefive35m
+2kfnqftkkcxtskj
+twoeight8
+1one8bzzsmgvj2kmqcnqjrz4
+1one4sixsixbzbcglm
+fiveqqhbmnjgz5ninerlrxkl2seven
+4eight4two1xgkb91fdzgxlp
+nine8onefive5scxlfrf
+gbrqllhnine9
+1fouronesixfiveseven95
+7qjrprpseightshfzfxvn
+2vkbbxfrthreenineeight
+58three4
+lmfsgdzxnqfdbxtjsnp9
+zlbqglfseventprsqvsmt1one9
+fmksmtlc8dvhbtdvpfgdz
+3six1
+mkdthree67jkprftqhdzvjxxftthree8
+bstlpptcfghsrrnine7bz
+5m1qfscxncvkqgtf
+62four16threeoneightg
+twoxlrhpc8n9nine
+q5sixfour
+ninesix2ninepzvxxlpcbxsfpz28hxtccfzmdq
+sevenccq4npgpkkb
+k79four9fp
+ssqptjqvld1pjfdjnkvsevenkjdzks
+2bgpbgqfournine614
+16threeeightwot
+five68jnhzdfqp2qlqbmnjmjdtfbj
+vplnzg4545seven
+two3two
+zcbhzsvc68cnppjpqhfl5
+nine68seventwo8pfzgfzbsh
+onethreethreeknngnmzhpmlnsd7
+46two
+sixhdg748blmlkbdtjbtwobgpzzlhzqrbvl
+2smcthmql84seveneighthnmdkmfg
+5fourrpscd3
+sppzzjbckgsixone1sixfour
+ltkzb3v3ltwo
+four61nineeightdkgtcjfvds
+eightd5nfcvvdxhkkddhb
+four6q7thbpnz
+5rknhshlhgnzz7sixone1six
+327rkthreesixeight
+cnbqtvptwo1qnsevenpzqh
+threeqthreepmhgcqhseven2sevenggmpjcldz
+ninedlvlgnglqf3
+4two993ninetwo
+eightzpfournine72oneseven7
+ninejdfkznz62kflbvgpblcgchpzz
+448
+6rktvxxjpfpqtntbsonefive
+6lngttwodshgtworkvvsrnfhjmvpvvbseven
+eight43gpssneight
+6seven3threefourninesevenrnxx
+three22rblfvqjr1four5six6
+xtdsqqbv43cxxvfpvtwoklhnqgjlkrrg
+threevpvxgddmhl576
+3cxccdsevenmvzhqvpfn3btldbhbmfg
+kklcmgptl931threenineeight
+vj42ntvkrcjtq7sk6
+llsvqthreefive5
+xspgshknq3kpld2lfour6mhzrzvqf
+4bfl38onesix9
+seven1vjzjmcrrvnh
+7sixsevensix
+gqnkgzmvpsnnzcvldlftrzhnpcbq6hzvbqbmnqvsix
+5jvbldxsh
+jrmvplfive7mfpbsmklzfivefivelsm
+8seven5nppxjfjsevenbxrmzmdjnine
+seveneightnrkconeqgjfkxjr532
+m9seven7
+vdn5hdghzvphfour
+cpceightwo3
+sixtdxhninesevenmmzrpdqcp24
+tghjrkhltwojgrcnnbbq1
+cfrqlvsevengkthnsbtwo4twovffpv5six
+two6pcxj4eightgbctk71
+five93nrqpshmxpbdnzssb2
+jnxjdzm2xcfhnzkxxz948twonejv
+sixfive4four5nkdxzvd
+twoqvnxzgcg883fivejgvltjq4
+7mzsqvrxlf6kpfjgvdpvj
+tzhkjn813six7
+5qjbtklseven
+rddmfnjgdlnkx5fourzkxlttqdfourrrjfdd
+qtr2qrrqvhrkvmtqgbkdq
+five56ninesschfzxone
+lkb3
+3zmbbqdqqnineeightlvlfqqxleighttloneightv
+7threetwofive168
+njxgnsqcpnine2
+zthreerfnvvone7
+three4one8
+8ppmjj983seveneight9
+p4
+8tshsgmkb516three6four
+7seven8
+twosixthreenine6three
+gvqz9
+n89ninethreesix8
+ptqrhhvztxsjbxfour81lncqpkjt
+8flvhqljqpmlf6fivenine28
+zhbsl7seightwoczd
+four1pspgxdvtbzdcd7vsbkzmt
+fourj9sdnqtwotwonine3ftzrbzckqk
+1fourkkfnndsdxnklrl
+zpcdvrszc4ggjcpngkqeight
+6twonxhgzcsrgxtwosixvblddxgfmsmqtfcthree
+6pltsptthreefive5jjqtzncslmxrmbv7
+sixfourqfxtfour9onefivehsgdvpmdsfive
+ksevensevenonebdxdxffive5threeeight
+zztvdjzlnqtbrfccctsknppmx5seventhree9
+soneight716
+1fqnntfjhcj2threekmcpzqnbzlqps
+twopcftkx8twofourcsixfour
+8six2sixgxzzhpkv
+four9nine4tgq
+htfmtchrx634four5zsmkmdv
+45dltlvdvv
+dtl848three36
+nine7sixonetwo8vsix
+twobxctmqvdnt96mnljbpxtsptjpznrjctgtwooneightqv
+peightwosixeightseven4
+1seven8ds4five6pone
+zjftdkvpkpfrhzj97nine56
+4sdcdr53beightwocjc
+onezxmtfive7ttbbttjeighttwo
+rlcjone3sixonezvbmzcgpk4eightwotnm
+5ddmcsfzhntpnzntlllthreevqvct
+twoeight9
+tfhmxsbf2foursqrrfourmfrzjffive6
+dhhnlbkjmfourthree6
+dxtkbxjlphpqcbmhpdfpqlmreight775bh
+sixklvmtjgsevennine33qgvplfourb
+gkjmcxsmhtwopkcszlrjd1onesevenseven
+8xxvzzqvzszcn1onevmdfsrrtbbjgeighttgpmhh
+eightpndprhrf7
+three7fpxtxghx
+fivenssevengrrlntzldl87
+484sixjsxcmmtvbftrfive
+t8onesevenvqsfc2k
+sevenoneoneeightsevenfive71
+sevennvnvbtzsnqggrsrgq35sevenfive7
+feightfive12
+twoc846cf
+1mtvlxhhxlsdbphgltlgzpl
+xddrlslrdl9
+fiveqvfjvcqlcfour27
+9fjqp9rrkqbtpv3
+23fqccxsvsix94tkzsqmrhsg
+6lvrsqnz
+9four7hvlfl9
+gbgsnmkrxjxpgnj828
+56grzmb6onekf9six
+87bjn4
+sjdzmqkrlkbsmxzsmn3
+seven91eightsix
+svhfnxzdzqczc2
+vbnz92chjjfqftxfourqzzxseven
+seventwofour5jbqvlmqknbznfbhtonefour
+dqdmntkfsnbmjqxxgmkvm6vqpgpnnreight
+one1431
+1five4
+twoone8thtxlrrdxbone
+qftpltmjd1zpxckthreeeight
+9xg
+pjpdjrkltnrkkmd9five75rdctppdhjtghrffczdx
+mtvbhnpzjfive7nine
+thlzdgxcqvsknczrdslsh7
+eighteight4kkt7four5
+71ninekzfntxtjthreeone3
+gzseven2fssqrgmbj
+52j
+nsv16seven
+stwone1
+twodbqgfivegsrrvxvone3
+jckhqbdlvgbgn7vtx3vggrdm
+ntzftfhfeighteight2
+48eight6
+flzfqonezvskbf1668one6
+sevensix864eightfour3
+dnsdrsxvcxnsevengxrszqxfnd4fmnine
+tjjngfourhdfzpfkh24
+foursmgvlqjxsqmz8ninekthktdhz
+three435
+tkfqhpz8zjmcqbxcb46
+mmvstlmln3kxnkvjcmxtrdxp4seven
+rmfour13vkgnnmbzbzgd
+three6nnbljchmzthreeg
+68onep9five1one2
+rbvzvgmkbmdrnmvone7kqtxtrtbone
+three13six4
+qksfrmvgztsfournnvp66nine
+34three
+11fourpzkmqnfmjqkdgrlgqbsixsixcqtgdggbdx
+nineone2seven4twoninesix
+ninez6qpnnbpmcdhcr
+sixbdbkhgntpsevencpn3
+1fivehvlrzpninemkfbfgtvfivesix3
+7kpeightzlvqsgkfjznpfpfsseven66
+c7hxrgkglfivebfctxk
+5rfdxgshzmnzqscpqzlbnrhbg9strxdthree8kntkhdpdll
+4gfzcjcjsm63fvxpvflv
+nine8526
+6scslfpnrveight1seven5bdllknjj
+seven94hnxddjv26s
+two48seven3four58four
+fourseven1smh5
+1zzdzmbjpjfzlhsvzgxf61gvtnklgx6
+ninefour63
+nine3nrfzn
+gthreeseventwonine1eights
+sdonejzdmtxtpl9onerzztvqr8
+eight15kqnjrggpblhsbdz1
+lkkxnzjrgsixsixthreeeighteight4twonem
+d17two44
+6seveneight1fourthreesevenbdpvg
+cjgchvhq4386five8
+1threefive426rsxmthree8
+sixnztppjtn9twossfjrdkzkrldztfbbv
+threesevenlqrdmvzdcphmqj3four5three
+fivethreepcfxdxmc3vdbprghd5sevenszprlbzrbn
+threethree88xcgdmrcssevenrlflv39
+eightonezchscllpfone9
+zreight6sevennine
+fmrhqrxr7
+sixnlqccjchpxpqg86five5
+sdpxjrxtk4sevenfivetmddbpqgtqffive2
+hrvrgjgvxt7vrsr
+2zj8
+35fourspthreeseven3zgddrmbxmsz
+four8kkxmtsscf
+4six98
+five9four
+four5one7pjbninefourbmss
+4sixsixt138seven
+fourxsevenseveneighthsgmmpdx5
+tonexhgcjxbjn8
+chbkd2183
+six8fivefourglszgngfgqthree
+pghkzrftwo6
+fourpfx572
+62zfvzp
+sixsixnzvtxdgsixzxsgmpz1zvtwo4oneightpg
+425twothreebv4twoxbx
+8nineeight55eightflkpggltsr4spl
+seven45clkrkrxj
+65six594twofive
+4ktvpfjeight
+nnslpmkqc5five5four
+nineonetzmft8jcxqzrk
+fivefivethree99
+2l2
+4mhdj
+3eight7fivejqhvrszgh3
+5four7mbfz8
+one8sevenmltbgqcbq22
+1zgfnfvt9seven
+2lhbfrndhmfiveone
+fivekzgch424zbpgxhtkbjdljxkxvnz
+1vd6vpmzjmnhhn
+vlqcbhskb5onerqbql6
+six3tplqcxthreethreefoureightzldgvgxrthree
+4fourtwo4
+cvznvxbxlszjpxvzbqn7gt2fjtxddzmjv
+kjqthree67twosixfour4nine
+dmjrhflfzslhkjmthreemfgqvzcpm9bcnfbpz
+nfpcsevenone3two58
+eight4kdqczz96five1four
+1mzfour
+57tdcmtmns4
+bdxeightrjvkrddrm3nftmzxlftthree
+2three2kvfourgrtvxmrzgdninecseven
+threemxpfnthree5onehjdxfntvtzlxhr
+8onelqtjpkmtwotwoseven91
+rzhzg1fouronecqkdpfkgdkkftsixhllvphvtjv
+vxgrlptk48one14two
+kqncz3znmkppxs3hlggbmsfj81
+ddrp3
+three8hjdccgthrtbd6lvhnbfivemzh
+twomptzvkqmssix7bjvpsix6nine
+phrdjxmzj3xxkmfour7dsix
+5threeshtmlsjbmfzgdq
+96eight
+three6rqqxgzthreejphvs
+69seven52kmnpbqmjdhtjvxcnlxfgldbs
+veightwozbbcmqrdxv6hxxpdknf
+nxbtwone1vktdvlbbhnfour
+4five864
+2dn1fiveeightthree
+two4twofoureight43
+1eight51
+71fourhjrnqssxqvf
+sevenqxkccdxndfgqhctsfsx6
+xqgsjvdmnb31sixfourtksqshz5
+4ghkqfzxceighteight2eightfiveeightwotf
+ninelsnldgslfxfqfsrc24six
+3seven3ctbf9eightmshd
+mbqpfourfive44sixbnmqrmkgxt
+flgdrvjj4dks
+oneqslfbjgfx8
+jmmssm2
+hjfbzsix1
+bvjdxseven8
+fivenhfccvg9
+four5sevengkvslppponerhlvfms
+b9one
+89znlhgbnkmmxsix3two
+sixsqtjcdfbs87ninejvznvmeightfvst1
+sevenktnzdkcsrzzdqtb9jnbtwotgxsptxcd5
+6mqvbhsddnmb21sixskg8
+threenb2four74five1lcmdzrvq
+ftvone7
+5msevenpdqgzncvzxeight
+foursixpshnbrpm64
+six2twotwordzf
+nine7lbnxsfjtbb1seven4ggt4
+zlnfkkconept36
+9sevenfqlxjmts94xpcxqseven
+foursevenseven15ninedqff1kmzfgvnks
+xktjdhb115
+threeeightcnlpzrb8
+91six
+376kkgmlblrcbthree7jgxvgfcdv
+9xpz3
+rrcvpkgtwo2one6vjfone24
+sevenhfour3three
+pxfvzltqrg9twotwogqdtzbp
+lrgseveneight5pmxvppjdhtwoone
+97six
+four8bjdhpmszdeightprkgone
+mb6lfcdkcn
+8fbvxnjone
+z9vdthreethreesbsrkzgnsxp8
+sevengftjmm1onegqhpninesnr3
+f4fourrbbngrdm37five
+ninerbmdqfvkfx9eightone8eight2
+rxdvclfr714
+oneggchmt2dgh7
+tvbfour9four
+four474fourgmdtm
+nffourpbxtlcs7ninethree3
+bpjlrztwo2sdttcghc
+hfflhmdc18
+4ninepsrmtbqrfeightk3xxxf
+433hdvcggkr1xjcntvtnvsc
+7nine2nine6
+9zctwo
+9vvfjvctgtzpjh7jtdjcrh
+qrtgcd5six31khd5
+fourbjshrq845zg
+ghconeight35jljdqgtg4fjdtxtsfiveone4
+one7kxscgcxnsx
+43threethree54four
+vmninetwo2onetqgblrsgcpfkrreightwokg
+threefour38
+fivesixeights26three
+jtmzzxvmxone2four9jgtxjrvpcthree
+fdqgczkq8sevenvcnhpseven8three88
+7ninezone3
+frj4eighttwobgx1threesjckzsvvxlone
+oneseven2cspzhqfsix4
+ljmnbbcnxffkmdn5
+tmzlnl8oneseven86ninelbrzjgqn
+fthree3seven6sixtwo34
+6two8fivexteight
+89seven5twosix63
+63pzsjcjzvbhseven
+msqvppsgnfbjrjmdrrhbfxrjqdlkpfourjbrjks3dthree
+eight6twoklkdfgvxzteighttctqz
+4gjpfmqs233six
+onefourninenxcnkgfour8rmmrzln
+1sptlpstqb6eightqgfhzzgpgp24
+eightlrjlhqfoureightjvj937
+595oneighthpt
+44five
+two2sevenbtwo
+7fivefivepxonebbrlthreefive
+klxnlfjlsrgjcd7eightninefive
+threeqzpptnzhjnkqfsixpvk3xxlrpl
+mqkhsdtbqqzgjb7149ninesix
+1dbrrvjsx34cbdxhqpzbfhtgpm9three
+3onesix6eight
+five34
+6qcv9nzngtsjv
+9lttthreegttzjstt
+four47
+95onetwoftdzmhsfmhbnblnine
+chcsqhnp72qjdqtjxzc8fourfourfour
+fourfive28
+81eighttwoqdjkmnleightdbmzz
+vzzqpjx8
+qq1six
+qbktqgrjcqq75
+772
+njvnhnzdz6threefivetwonelt
+pcfzzjfhqkxhfpztpv7
+fivemztfourqjrtngrkpcbfc3qq
+bfjhbm6ghtdpsmlvb86eight
+94883
+6onegbxmcqmdfive
+sevenonesixcngsrgcz9
+sevenzhxktd22fourgnr9
+tdxpzvggnlpdxxrcpsp3threexjrldrkmp
+34kjtbsxppmxfoursixlbzgqxbltv
+fivethreezfive2
+7seven1seven
+4fhvxbg58eighteightone
+631gqtwosix
+xqn1chrcjjrqxp4threezjcd
+jtssvppxlnsix49rfvjdzntwoone
+sevencmpmdnczcfdprgfdbjnzzkgnine26
+hkbnggqfk7mfmfsone68sxpdmf
+fourtlhsmksvzg4foursixseven
+pprkj3sixseven
+kzxjpdczxhxckxtgbbtwothreethree5dztmdfrlfivedgcfmmrt
+hjvrdhnckspl5eight3three9
+74two95eightfourdkzzlkxszm
+one7tbfour1cpjtrxsqgvbjtpbcct2
+fivefour4hsix8hjsxrmpqqxnkhmjseven
+nine8fivehvmnxsfour7four75
+sjfrjr2ds
+fivefourqt95vbndnzns665
+sixssbznthreethree6f8lnzcgpprl
+ninepfbpfnflrfnpzhq9
+nh9fvrldpkjmq7six5p
+75zsixnqbhrcbpmddshjfqthtq
+sevennine377fourfrtvpqrseven6
+97eightnine
+52fiveonetrq5
+threehgjqt7rvfsljtzkfour
+tjkxc1
+jthreerqbpzpzmeightntjlrhdmfour2
+fourmgv2three4one
+four91
+9bone
+oneseven1sevenpdvdqhlq
+xlhbqxcpfp7
+twothreefive43
+1ctjmfn9one2
+htfivesixcdkjrjbr45eightseven
+onefour8rrhltfl897
+37ljvmcnjhonevxkqpjk
+3891sevencfgjhh45
+twoone5tbznkdmv1fourpltvnnsvk19
+55bcnzbfggd2
+17zpskbgeight2dx3
+vbdshtdkxllttwo65
+tzvmcmltfphztpplrxjxpbnine3qvktlctfrpxncb
+1sixppzlfvkbnm
+eight1gdvlzrfkc
+four74fivefseven
+hlzlvnjrp9312jxeightnine1
+sixsevenkjpbz5sevencksb2
+9rtvlgdpfnmgzdzcjggsq7sevendxglftncmbninefive
+eight8gxkrbkgcvbxbbxlonefivesevenjnffhjsk
+99twobdmcnfthreevr
+sevenlpjbbthree58
+eightthree32
+14fhxsqshmjbngrhdzvxvvhxgvqnlxnnvrsgsheightninenine
+6twotwo
+kr573eightseven78
+9six18
+2seven8six1qdvf
+ones9three1lcqj2
+sixbfour6gbd
+tfpvtbbjtwormxz6
+49eighttwoonesixeighteight
+fcrhntggdvseventhreeeight9foureightxjxqvtb
+oneone3rnngppxj8fzpsncjmzn
+9fiveonejjdpthreetwo9
+sixsixjzckvmbbszsl1nrrfphj5
+zgjvnttth7sbmtxczggxbbqpzq467
+3mhslltk
+9six16three79three
+fxprlhbm3zljzd49gdsrtt
+6eightoneseveneightfourrfive
+fourfive11six
+6gmrfxnsmnnljf8ninenlctx
+seven5threehninecnhbkgbnvqbsfx
+pxzccjqz8
+xgzpzljnfour7threethrxskjlz9
+fourseveneight292eightone
+5bjpzjseven21four
+xbtf88nine
+6nfjllxh4
+67five4c8
+1qbzdkvmlrzgj3rzqczz4
+mjjzblg3
+x3five
+jrpxsrqgr9hqsddmscmsrsbhkdc63eightxfscd
+6eightsixone
+5dggfbgclz7htvpcx1
+onethree46psdlfpgbsix
+lqbnine978
+7nrrdzfksbtjlnbgfxttzfourstqkd
+mtfptwo9six23hctpbrxtbx
+eightfznvmmp7cllpkggknttwoxbbv
+rggdrlsgcm2hdljxzjhjrfour83
+vhtmhvjdzzkzmzqgr7fourfourfourgzbqqpz
+dfjctmlnkqzzjhhltpvhfmhsixvclfive7vgm9
+nine642sevenseven9mblrhxxktfhdhbcztvx
+4rzrdfmtvlpthree86
+qkdoneighttwo1one3
+dnnvkvpcmn2cltbzc6five59s
+sixsnzpnfplrn38hthhbfive4
+tsrxkzfxcdgckxrgzkmrctqvrngfnvdscnpc6jgszldglnhsg
+vvtfhtgxjbdgznjjzqjjclfg1lvpdcpjsevenseven3
+xrhbrpg8zb8
+4nine5qfxlhmvzsjsbznmklseven
+lffl2six733jtrfrs3
+7nbvpkdpzjtc8qckhbqfsqqgz
+cfljnthreecninedt2xldzbgl5six
+nrggf7four
+hbkpxrxonetwo969fivethreegspmzcfr
+jjpmzlzfvqbvbzqcz2eightninepfqjkjrkfivebzcthgrpqx
+xsccsbmcninefive4kkrvrht
+sgnzzschtwotwofzjt9seven
+8tworpzncglnmninenjmf368
+2one1zjtgllvsone
+7nine4nqqxnvvnsbsevenvddcvfdr
+three117
+shcjhvrfourpthree12
+1zxcxninegpdfrfhzlbzg
+7eight9gkkfbdhplnmjkksbqzp6htmbhg
+sixeight76sixfive
+5twonemt
+three86
+4three52psgzhnlhgvgcsbzbleight5oneightkj
+cnztwone1
+six9sgx
+79clrpmeightninepkh39
+rmfplpsixsixlvrdbqgpljgl5onetwo3
+7ninelznqjxjgtwohhk6five
+1659two7onefive
+rskpnrmfbbghttvklkg773fourczdqeight
+xftwo4
+2nine5ccrgsmfcseven9seven52
+8sixseven
+k33threehgqtljcdqxkl
+hfgdvngttzfivecflmcc31three
+eightninethreensjxxlzhgk9b51x
+ninejktfhnnphkkgm2dms5dpxrbcd
+eight7skzllgxgmkd1three4thhdpsjtvnq
+7ninehhhdngbxjvvxldvbrhzrbvntl2
+pxgsixone75llslx
+31tgrvtvvlbhnshjfgnqc
+knzgkjfckf2sevendfive
+bmxcnznineeight9dvkbngzmxz
+gzqdjfsxq9pbseven
+212
+h3
+9sixfourbrfsfivekttxzhrmdsppps
+3vxtbtrzqzxfhgsksbvqd
+9lbxdjmckrhfgjqlnsrrfzqxktqkrmmjshfnine
+7pjmmxdcffxgspeightgpdcftjtdxjgdrfthree
+t84ninefive4
+fgfour63sevendmtrrc9
+64three
+btjnc3g6f3one
+pm9
+threefourvjmsx5four
+14one2rtcccqc
+jhcckpv84xntpzdn
+rpjrhgddzfvrzpqnfg5twoseven3threehvcmnkreightwotl
+74one
+six4ninesnbxlonesix5three
+kfxjzjone76xppxgddstgfhxphpffrjlone
+sixthreedsdccpqff4
+4951
+zszgqjxbx7
+three4pqqvfzf622
+vc77threetd
+sixlbglxqhn52
+1sgktgvxp
+bdsonekxsevenpgssslcq3fgp7
+pvnxnhdjmndnhthreefive49
+kgvkszsixone4
+3mjvqjpglzhphg67ninehnnine
+one6xvvnvkxp4dfcxv
+eightfour7threesevenp
+7ggdl1
+ztwonethree427ninetnmzntj4
+fttwone258seventwotwo
+75sixseven59
+7kmfzqgjpqkpdhthjlseven674xdgmphfk
+eighttwo6five7
+3eightwoxg
+22434five
+khjmcpzvfpr9
+3rrzqzlrljgcvdnxj6four8six
+63qrgqklszpgthreefkpzx
+574htclbtzfivetwo
+jtwofqfpkflzt9
+xnjzxpmmdln4lzlmlk41
+6jdzjjmz7jt7seven8fourkgttztbsktwoneps
+72s166zpslq5
+3553lhkdcxvhqbddrfdbc5two
+4gktbmone
+fouronefives3qhglmzttwoeightone
+one87rxkkhfrjfrpdjjt485
+one437nine
+119one
+5lseven87nmxxqvhmn
+pphfmcfhxlsevensqdmtvtpvq1
+18eightfivefour
+three98
+4onephzhtq4qc5four
+26zglkpjvz3twoeight
+7mxkdrbpnk29
+ppeight15
+9jnprvtmscsixbbpsixfivecktgvdpf5
+lbftvcngvkvxf5cmmrqljjb471
+eight3knrvtwo
+one6pvbpkqkpdsixbv
+eight2onethree6eight
+5rztcbtfjkb2twoeight39hxppvpxqg
+8threemlllncmfourthree
+vhtsmncssixbmlpggvmlzdxbczgc1fxrgvsbhsrbs
+ninebnpv7575three
+4mthree
+fourtwo1qrbfourjrjmlxjr
+3jbkcsrqznc8
+pcgrxgf4eight54
+seven5mjk
+ninenine6vmcmlxmcrbvq1nine8
+sixone2ninesixrdqfgpxddzthreetcheight
+899lfbzhgn151
+46nineone
+7one2qthree
+nine2hjnfourninesixvblnqbgctwoeight
+qkggsnnthrxnrccbgs583
+351zkxqtmbd9sixthreegjjxt
+zrchlhmqcthreeninesmxz9
+219fivejrxgbjvvcxkjtwoseven
+8threebzzsxdx
+nine249ninefmlhj8rfour
+16zfljhfdcmkthree
+7sixjvdqgpvhmndpmhhzsphceight
+two2zjqc4nfd6732
+41threeseven1fourseven
+296fourgnq7three
+tbzdhbhs7ntshptcgrbkjspjdz
+55qcrmclmcck9
+25mhmtb3dscmjbhgv3four
+bjmhkxsffourhnxkxv1
+jvntlbn5fivegjdcjl
+7gndbbbneight
+357623chktvtfzvf
+169plhsshseven
+nhgsrxcdfktpbzf9vpppxzkznine9
+xrdnlbmtdeightone3threeeighttwo
+bnnqzcfoneeight2hhdfkrrqzt
+342tlmjgtfcnine
+47rvtfqlzgmjlqbqthree
+7gnmxplrjbvfour6
+mcgbldbhlh1eightnine
+two9eightxnpdj61kzcdpnpnpfgsdrbcflh
+6541fourpkdplksnkpvkjxpdnvfttlfdflz
+kfour7
+x4tpbnnvnjlseven
+55nineninesevenzttsztwo9nlcqjq
+1drhjrzsbvpl
+mpknzhj9vmqckrpznqthreesj9
+211zqgpdlmpn
+4jxzrztg5onehnzvdbtcqdtsnkqtdvsd1fournine
+bvcrcz5four4
+4nineninecfhgtdphone9
+zbkjgbshqqkrcb3qmtfmdrdcckcsxshjb2
+1eightrblhbhljvkpshmrxc5
+hjcrrdsvnbqktxrgmq9nqgcztbv
+6lzsixl5one
+twofivesevenfivesixonenine5seven
+fourmldkgnzb8djlsdmjnzxbmmvpf59seven
+8hnfkknnsrhm
+three2krtqmmxqzs4jbrnrtrxzxsllblbkjmthcrlxxkdlh
+mglfmvvnthreefour1
+onehxz4fourhqcfvdlhg
+zrzqdgs5jsttkrone
+sevenrdmhnldsmdnineqfrgjhmhnnqkztxzm7
+63seven
+2seven3mrsltqb17
+fdbtvthmmrb5gbxvcmtwosixt5five
+eightlzglvxfone5five7dlqpmseven5
+dmzdkbfive98onefivehhbljrnz
+eight8ninefour
+24nvmftwofive
+seven3onefourrmgkxtcsfour
+fgpxmqqsfdrk8eight8zhcrzvrzmdxbbfive
+eightonetwo7ninesjsrlr
+rrkrrtnkq941sixone
+threeffspgv3eightfivesix5
+lthnrlgfcnine2scdcvnineseven
+sx86
+cxklrckbz5lsqq28
+5seven298
+933five5cmddfj46
+hrhhs76343
+one3two4fourst4three
+nine3three
+dhtscvgm9foureight81vp
+btpeightpzbtphdlcm8fiverknbrhthreelxndqcv
+one96six45tm
+fourninetkdrvnbznnine22
+vxeightwothree5cd3jcnine
+seven5one4one7ninefive3
+nflkr2dlmtsrkrgkfvsixxvznjbvz3btxkhhqcc
+eightrtz6jslqxsixoneeightnine
+xmvxn5
+tgnlrmjtkjdpbnpmsixbxfnl7sixone
+htwonezcshpqgsix73qlgdqnkjskjthree
+nrlkxq6fnfourseven
+zmrlngjdhc41four4fourptrhddthreenhzv
+n9twogdrzkcsbk8hph6
+436sevens7cnkrrk
+6qkdvkhtwo
+mztkszm39
+fourtwo4mqhjkkdzgffhqfktwonine
+hbthree2hvpbznlgrxfgkthfour8
+34prfzlx4three
+29zzfdvghll9three6
+two83
+one982
+36hhgdf7
+seven6ninednnine9mbtzfm1
+one38
+seventhree5lsjxknqtdsbtxrkone
+eightmfctkbc9jlxgdnchlq9one8nine
+p371b
+9ninejszqsnpkfbthree1h5xscpfzvl
+three9ljd
+fbbv9
+five582
+58dctdbhbninesixczhd
+qp4
+6pfqdeight
+3onethreekqnnlt
+m4fgbmdtwo3
+twodkrmtqs4
+9three6
+six1798nineeightsqpvpsmcbmh
+9qxxmrmbnine3fivefourfive3four
+one7sevenone78ninetwozqps
+973keight9seventwo
+keightwothreethreeh6threeeightlnqdzhlt
+five94
+mqlltnfive8eighttwoqhztggvqqkcxgvgmch
+2kpnsevenfive6
+gtmszpsjmggr3
+pm126one3
+rvcqbtz9zjtndbxlrdcxzf3
+mkninekhmtxzbjpd8threeeight7eight
+5274xm636
+bleightfive9vdddzjdntthreerxtvdslrvbcvf
+9eight4sixdqzrltgpzlpxtcrzxbhmsmdtwothree
+cpneightwofive3fourtwo
+one61threejxbjvsltxzpntpv
+19581
+six2qllhlxhr1foursixz8
+6278teight3three
+8gstxqdngxzlxvnvphlsznr3kknftvzxcqqbrfteightthree
+4jlzjvjfltwo7pv
+7dvt
+blhsm4xcrbrf68ninezvhhtqgphnzxlhl
+9dvjvfourtcthree
+onethreenfkgrvsevenkczctlgkt7
\ No newline at end of file
diff --git a/2023/02/02.py b/2023/02/02.py
new file mode 100644
index 0000000..3fed660
--- /dev/null
+++ b/2023/02/02.py
@@ -0,0 +1,50 @@
+with open("input.txt") as f:
+	lines = f.readlines()
+
+def parse_game(line: str) -> tuple[int, list[dict[str, int]]]:
+	prefix, turns = line.strip("\n").split(": ")
+	game = int(prefix[5:])  # remove "Game ", yielding just the number
+	draw_list = []
+	for turn in turns.split("; "):
+		draws = {}
+		for color in turn.split(", "):
+			v, k = color.split(" ")  # count, then color
+			draws[k] = int(v)  # map color -> count
+		draw_list.append(draws)
+	return (game, draw_list)
+
+part1 = 0
+R = 12
+G = 13
+B = 14
+for line in lines:
+	game, draw_list = parse_game(line)
+	possible = True
+	for draw in draw_list:		
+		red = draw.get("red", 0)
+		green = draw.get("green", 0)
+		blue = draw.get("blue", 0)
+		if red > R or green > G or blue > B:
+			possible = False
+	if possible:
+		part1 += game
+
+print(part1)
+
+part2 = 0
+for line in lines:
+	game, draw_list = parse_game(line)
+	R = 0
+	G = 0
+	B = 0
+	for draw in draw_list:
+		red = draw.get("red", 0)
+		green = draw.get("green", 0)
+		blue = draw.get("blue", 0)
+		R = max(red, R)
+		G = max(green, G)
+		B = max(blue, B)
+	power = R*G*B
+	part2 += power
+
+print(part2)
\ No newline at end of file
diff --git a/2023/02/input.txt b/2023/02/input.txt
new file mode 100644
index 0000000..c30762a
--- /dev/null
+++ b/2023/02/input.txt
@@ -0,0 +1,100 @@
+Game 1: 12 blue, 15 red, 2 green; 17 red, 8 green, 5 blue; 8 red, 17 blue; 9 green, 1 blue, 4 red
+Game 2: 6 red, 6 blue, 2 green; 1 blue, 1 red; 6 green, 1 red, 10 blue
+Game 3: 1 green, 2 blue; 7 blue, 4 green; 2 green, 1 blue; 10 blue, 4 green; 4 blue; 1 green, 7 blue, 1 red
+Game 4: 16 red, 12 blue, 10 green; 15 red, 5 green, 6 blue; 10 green, 15 red, 12 blue
+Game 5: 2 green, 2 red, 9 blue; 1 red, 5 green; 4 green, 12 blue, 1 red; 5 blue, 8 green
+Game 6: 17 blue, 3 green, 4 red; 6 green, 16 blue, 3 red; 2 red, 15 blue
+Game 7: 4 green, 10 red; 1 green, 4 red, 4 blue; 4 blue, 11 red
+Game 8: 8 green, 4 blue; 17 green, 4 red; 10 blue, 5 green, 9 red; 9 green, 8 red, 3 blue; 9 green, 5 red, 2 blue
+Game 9: 4 red, 2 green; 7 blue, 3 red, 3 green; 3 green, 7 blue, 3 red
+Game 10: 3 green, 2 red, 2 blue; 3 green, 11 red, 1 blue; 16 green, 11 red
+Game 11: 2 blue, 18 green; 12 blue, 1 green; 2 green, 6 blue; 1 red, 4 blue, 20 green; 14 blue, 1 red, 4 green
+Game 12: 2 green, 1 blue, 7 red; 11 red, 3 green, 6 blue; 1 red, 2 blue, 3 green; 4 red, 2 green, 5 blue
+Game 13: 4 red, 17 blue, 5 green; 6 blue, 2 green; 12 blue, 4 green, 2 red; 5 green, 9 blue; 5 green, 3 blue, 3 red; 4 green, 1 red, 7 blue
+Game 14: 4 blue, 18 green; 3 blue, 3 red, 13 green; 5 blue, 10 green; 10 green, 2 blue; 1 blue, 14 green; 3 blue, 18 green, 2 red
+Game 15: 1 green, 2 blue, 1 red; 1 green, 2 red, 1 blue; 1 green, 2 red; 1 green, 4 blue, 4 red; 6 blue, 2 red, 1 green; 3 blue, 2 red
+Game 16: 3 green, 2 red; 4 green, 1 red, 8 blue; 5 blue, 9 red, 3 green; 7 blue, 19 green, 18 red
+Game 17: 10 blue, 9 red, 7 green; 16 red, 11 green, 11 blue; 8 blue, 3 green; 12 red, 1 blue, 10 green
+Game 18: 11 green, 11 blue, 5 red; 7 red, 11 green, 13 blue; 5 green, 9 red, 6 blue; 9 red, 16 green, 17 blue
+Game 19: 8 red, 3 green, 16 blue; 13 green, 8 blue; 7 red, 8 green, 1 blue; 13 red, 3 blue, 7 green; 6 green, 14 blue, 13 red; 15 blue, 9 green, 13 red
+Game 20: 1 red, 7 green, 5 blue; 14 green, 4 blue; 10 green, 11 blue, 2 red; 2 red, 3 blue, 1 green; 1 red, 5 blue, 8 green
+Game 21: 10 green, 12 blue, 6 red; 17 blue, 6 red, 6 green; 12 blue, 9 green, 4 red; 5 blue, 3 red, 4 green; 6 green, 7 blue, 5 red
+Game 22: 1 blue, 3 red, 16 green; 4 red, 1 blue, 3 green; 12 green, 1 blue, 2 red; 12 red
+Game 23: 2 red, 6 blue, 1 green; 11 red, 13 blue, 4 green; 8 red, 3 blue, 6 green; 2 green, 8 blue, 2 red; 7 red, 11 blue, 4 green
+Game 24: 4 red, 12 green, 2 blue; 8 blue, 15 red; 1 blue, 10 green, 8 red; 1 green, 2 blue, 6 red; 10 green, 8 blue, 5 red
+Game 25: 2 blue, 11 green; 17 green, 1 red, 2 blue; 2 blue, 3 red, 1 green
+Game 26: 16 blue, 11 green; 4 green; 9 green, 4 blue; 10 green, 5 blue; 1 red, 5 blue, 9 green; 5 green, 5 blue
+Game 27: 10 green, 2 red; 5 blue, 1 red; 6 red, 5 green
+Game 28: 3 red, 5 green, 10 blue; 1 red, 5 green, 2 blue; 6 blue, 2 green, 2 red; 6 red, 9 blue, 1 green; 3 red; 3 red, 2 green, 2 blue
+Game 29: 8 red, 18 blue, 5 green; 1 blue, 8 red, 2 green; 2 red, 4 green, 18 blue; 6 red, 4 green, 7 blue
+Game 30: 1 red, 18 green; 11 green; 4 blue, 5 red, 14 green; 3 green, 8 blue, 2 red
+Game 31: 1 red, 5 blue, 17 green; 7 blue; 10 green, 8 blue, 1 red; 11 green, 4 blue
+Game 32: 5 blue, 15 red, 12 green; 6 red, 8 green, 8 blue; 2 red, 14 green, 3 blue; 4 blue, 15 green; 7 blue, 12 red, 7 green; 2 blue, 9 red, 7 green
+Game 33: 13 red, 2 green; 1 green, 7 red, 15 blue; 1 green, 14 blue, 13 red; 8 red, 2 green; 12 red, 14 blue, 10 green; 8 green, 16 blue, 10 red
+Game 34: 11 green, 9 blue, 2 red; 4 red, 1 green, 8 blue; 4 blue, 7 green, 4 red; 7 blue, 1 red, 8 green; 9 blue, 1 red, 4 green; 2 red, 10 green, 4 blue
+Game 35: 3 red, 9 blue; 11 blue, 3 red, 12 green; 7 green, 10 blue, 2 red
+Game 36: 9 blue, 3 green, 3 red; 5 blue, 1 red, 3 green; 2 green, 6 red; 9 blue, 7 red
+Game 37: 1 red, 7 blue; 4 red, 1 green; 1 green, 9 red, 9 blue
+Game 38: 1 green, 12 red; 4 green, 12 red, 4 blue; 5 green, 10 red; 6 red, 4 green, 3 blue; 4 green, 10 red; 2 green, 5 blue, 4 red
+Game 39: 2 blue; 4 red; 4 red, 5 green, 1 blue
+Game 40: 7 red, 2 green, 17 blue; 12 green, 1 red, 7 blue; 9 green, 2 red, 8 blue
+Game 41: 18 green, 5 red, 4 blue; 20 green, 17 blue, 5 red; 3 red, 7 blue, 7 green; 4 red, 19 green, 18 blue; 20 blue, 20 green
+Game 42: 1 green, 6 blue, 1 red; 5 blue, 1 red, 3 green; 3 green, 7 blue, 1 red
+Game 43: 4 blue, 6 green, 13 red; 16 red, 7 blue, 8 green; 4 green, 16 red
+Game 44: 5 green, 4 red, 13 blue; 4 red, 12 blue, 3 green; 6 green
+Game 45: 1 red, 17 blue, 15 green; 6 red, 3 green, 9 blue; 5 green, 1 blue, 7 red; 6 blue, 4 red, 4 green
+Game 46: 1 blue, 11 red, 1 green; 2 red, 2 green, 1 blue; 4 red, 1 green, 1 blue; 2 blue, 7 red, 3 green; 11 red, 3 green
+Game 47: 2 red, 1 blue; 1 green, 1 red, 1 blue; 5 green, 1 red
+Game 48: 9 blue, 1 red; 1 green, 2 red, 11 blue; 2 red, 6 blue
+Game 49: 5 blue, 7 red, 17 green; 5 red, 4 green, 7 blue; 1 red, 3 blue; 4 red, 12 green, 6 blue; 6 green, 4 blue, 3 red
+Game 50: 11 blue, 12 green, 1 red; 8 green, 7 red, 9 blue; 13 red, 12 blue, 10 green; 5 green, 10 blue, 3 red
+Game 51: 8 blue, 1 red; 5 red, 2 green; 9 blue, 6 red, 4 green; 4 green, 1 red, 13 blue; 15 blue, 3 red, 8 green; 6 red, 1 green, 4 blue
+Game 52: 2 blue, 1 red; 1 red, 4 blue, 5 green; 3 red, 14 blue, 2 green
+Game 53: 8 blue, 10 green, 11 red; 5 red, 4 blue, 19 green; 8 red, 3 blue; 3 red, 3 blue, 2 green; 4 red, 4 green
+Game 54: 3 green, 17 red; 7 green, 13 red, 5 blue; 11 blue, 10 red, 10 green; 3 green, 19 red, 4 blue; 11 green, 6 blue, 19 red; 5 red, 4 blue, 9 green
+Game 55: 3 blue, 4 red; 1 red, 1 blue, 2 green; 4 blue, 2 green, 4 red
+Game 56: 10 red, 3 green, 5 blue; 2 blue, 2 red; 7 red, 3 blue, 2 green
+Game 57: 12 red, 1 blue, 8 green; 1 blue, 3 green, 10 red; 5 green, 8 red
+Game 58: 6 red, 4 green, 2 blue; 7 red, 6 blue, 14 green; 5 blue, 6 red, 2 green; 2 red, 4 blue; 7 blue, 12 green; 7 green, 3 blue, 8 red
+Game 59: 6 red, 5 blue; 5 blue, 1 green; 1 blue, 6 red; 4 blue, 2 red, 1 green; 3 red, 2 blue; 3 blue, 5 red, 1 green
+Game 60: 1 red, 12 green, 2 blue; 4 red, 5 blue; 12 green, 1 red; 5 blue, 13 red, 17 green; 15 green, 1 blue
+Game 61: 10 blue, 18 red; 4 blue, 1 green, 14 red; 4 blue, 2 green; 2 green, 6 red, 10 blue
+Game 62: 2 green, 13 blue, 8 red; 7 green, 5 red, 8 blue; 5 red, 8 blue; 3 red, 5 green, 4 blue; 15 blue, 5 red, 6 green
+Game 63: 6 red, 7 green, 2 blue; 2 red, 6 green; 2 blue, 4 red, 5 green; 1 blue, 2 red, 5 green; 4 red, 8 green; 9 green, 2 red
+Game 64: 4 red, 4 blue; 7 blue, 5 red; 8 green, 5 red, 6 blue; 2 red, 3 blue, 1 green; 7 blue, 9 green, 7 red; 11 green, 2 red, 3 blue
+Game 65: 1 red, 11 green, 9 blue; 2 red, 5 green, 17 blue; 2 red, 3 blue, 6 green; 2 red, 6 green, 14 blue
+Game 66: 7 green, 5 red, 2 blue; 5 red, 7 green, 2 blue; 6 green, 3 blue, 15 red; 8 green, 20 red, 4 blue; 8 red, 8 green, 3 blue; 3 blue, 11 red, 5 green
+Game 67: 2 blue, 2 green; 6 blue, 1 green, 3 red; 3 red, 7 green, 4 blue; 1 red, 1 green, 8 blue
+Game 68: 1 green, 3 red; 2 green, 1 blue, 5 red; 2 red, 2 green, 1 blue; 2 green, 3 red, 1 blue; 6 red, 1 blue
+Game 69: 4 red, 2 green, 3 blue; 14 red; 3 blue; 11 red, 1 green; 13 red, 3 green, 2 blue
+Game 70: 1 green, 1 blue, 6 red; 1 green, 4 red, 1 blue; 6 red, 1 blue
+Game 71: 1 green, 8 blue, 10 red; 6 green, 3 red, 2 blue; 14 red, 3 green; 9 blue, 2 green, 2 red; 7 blue, 5 red, 1 green; 6 green, 5 blue, 10 red
+Game 72: 2 red, 10 blue; 1 red, 7 blue, 4 green; 1 red, 3 green, 6 blue
+Game 73: 6 red, 6 blue, 5 green; 1 blue, 11 green, 7 red; 10 red, 7 blue, 2 green
+Game 74: 4 green, 2 red, 3 blue; 1 red, 6 green; 2 red, 4 blue; 1 blue; 2 blue, 1 green
+Game 75: 10 red, 5 blue, 1 green; 12 blue; 2 green, 11 blue, 9 red; 1 blue, 14 red; 2 red, 2 green, 13 blue
+Game 76: 9 green, 1 blue; 8 green, 2 blue, 7 red; 4 blue, 7 green, 4 red
+Game 77: 14 red, 3 blue, 10 green; 3 blue, 7 green, 2 red; 5 red, 7 green, 3 blue; 14 red, 8 green, 3 blue; 9 green, 5 red; 2 blue, 7 red, 15 green
+Game 78: 5 blue, 9 green, 8 red; 11 green, 9 blue, 4 red; 8 red, 2 blue, 10 green; 3 blue, 7 green
+Game 79: 4 red, 6 blue, 10 green; 2 blue, 17 green, 15 red; 15 red, 6 blue, 14 green
+Game 80: 2 red, 8 green; 6 blue, 6 green; 1 green, 3 red, 8 blue; 5 green, 4 blue, 3 red; 3 blue, 1 red; 7 green, 8 blue, 3 red
+Game 81: 5 blue, 1 red; 10 blue, 7 red, 3 green; 4 green, 1 red, 10 blue; 8 red, 4 blue, 3 green; 11 blue, 9 green, 1 red; 6 red, 10 green
+Game 82: 1 green, 2 blue, 1 red; 2 blue, 1 green, 2 red; 2 red, 8 green; 3 red, 3 blue, 5 green
+Game 83: 3 blue, 4 green, 5 red; 6 blue, 5 red, 5 green; 4 red, 2 blue, 5 green; 2 green, 6 blue, 5 red; 1 red, 2 green
+Game 84: 14 blue, 1 green; 9 green, 3 red, 1 blue; 5 green, 10 blue, 3 red; 9 green; 6 green, 18 blue; 2 red, 8 green
+Game 85: 1 blue, 7 red; 12 green, 7 red, 5 blue; 9 blue, 6 green, 7 red; 10 red, 7 green, 1 blue; 3 green, 6 blue, 7 red; 10 red, 16 blue
+Game 86: 9 red, 10 blue, 2 green; 2 red, 12 blue, 9 green; 11 green, 2 blue, 3 red
+Game 87: 1 blue, 7 red, 9 green; 1 red, 6 blue; 3 blue, 12 green
+Game 88: 1 blue, 4 green; 4 red, 13 blue, 1 green; 7 green, 4 blue, 3 red; 2 blue, 4 green, 5 red; 4 red, 7 green, 10 blue; 1 red, 7 green, 13 blue
+Game 89: 5 blue, 8 red, 1 green; 7 blue, 2 green, 7 red; 2 green, 8 blue, 11 red
+Game 90: 5 blue, 1 green, 11 red; 6 blue, 8 red; 2 red, 3 blue, 4 green; 2 green, 4 blue, 7 red; 3 blue, 8 red; 6 red, 3 blue, 1 green
+Game 91: 2 green, 13 red, 9 blue; 12 blue, 6 green; 14 green, 10 blue, 3 red; 13 blue, 7 green, 5 red; 1 green, 9 blue, 14 red; 10 green, 8 blue, 17 red
+Game 92: 10 green, 3 red, 17 blue; 13 red, 7 green, 15 blue; 9 blue, 8 red, 4 green; 1 blue, 8 red; 9 red, 1 green, 19 blue
+Game 93: 1 blue, 7 green, 4 red; 2 blue, 8 green; 10 red, 10 green, 1 blue; 10 green, 2 blue; 3 red, 3 blue
+Game 94: 5 red, 8 green, 14 blue; 4 red, 7 green, 20 blue; 11 blue, 4 red, 13 green; 18 blue, 1 red, 3 green
+Game 95: 5 red, 8 green, 11 blue; 12 green, 5 blue; 4 blue, 14 green; 7 green, 9 blue, 5 red; 3 red, 4 green, 7 blue; 3 red, 12 blue, 3 green
+Game 96: 10 red, 12 blue, 9 green; 4 green, 8 blue, 4 red; 8 blue, 3 red, 4 green; 6 green, 10 red; 2 blue, 3 green, 15 red; 12 red, 2 green, 2 blue
+Game 97: 13 green, 1 blue; 9 green, 1 red, 1 blue; 6 blue, 10 green; 1 red, 6 blue, 11 green
+Game 98: 2 blue, 14 green, 2 red; 7 green, 1 blue; 1 blue, 1 red, 3 green; 2 red, 1 blue, 15 green; 1 blue, 2 red, 10 green
+Game 99: 3 green, 8 red, 7 blue; 6 red, 13 blue; 12 red, 4 green, 4 blue; 12 red, 8 green, 3 blue; 11 blue, 11 red, 4 green
+Game 100: 2 red, 13 blue, 1 green; 1 green, 12 blue; 1 red, 5 blue, 1 green; 3 blue, 3 red
\ No newline at end of file
diff --git a/2023/03/03.py b/2023/03/03.py
new file mode 100644
index 0000000..5e63a8b
--- /dev/null
+++ b/2023/03/03.py
@@ -0,0 +1,61 @@
+from re import finditer
+from collections import defaultdict
+from math import prod
+
+with open("input.txt") as f:
+	lines = f.read().split("\n")
+
+### part 1
+
+symbols = {
+	(i,j)
+	for i, line in enumerate(lines)
+	for j, c in enumerate(line)
+	if c not in "1234567890."
+}
+
+part_numbers = []
+
+for i, line in enumerate(lines):
+	for match in finditer(r"\d+", line):
+		j1, j2 = match.span()
+		number = int(match[0])
+		window = {
+			(i+x, j+y)
+			for x in (-1, 0, 1)
+			for y in (-1, 0, 1)
+			for j in range(j1, j2)
+		}
+		for _ in window & symbols:
+			part_numbers.append(number)
+
+part1 = sum(part_numbers)
+print(part1)
+
+### part 2
+
+potential_gears = {
+	(i,j)
+	for i, line in enumerate(lines)
+	for j, c in enumerate(line)
+	if c == "*"
+}
+
+parts = defaultdict(list)
+
+for i, line in enumerate(lines):
+	for match in finditer(r"\d+", line):
+		j1, j2 = match.span()
+		number = int(match[0])
+		window = {
+			(i+x, j+y)
+			for x in (-1, 0, 1)
+			for y in (-1, 0, 1)
+			for j in range(j1, j2)
+		}
+		for cell in window & potential_gears:
+			parts[cell].append(number)
+
+gear_ratios = (prod(p) for p in parts.values() if len(p) == 2)
+part2 = sum(gear_ratios)
+print(part2)
\ No newline at end of file
diff --git a/2023/03/input.txt b/2023/03/input.txt
new file mode 100644
index 0000000..886ff17
--- /dev/null
+++ b/2023/03/input.txt
@@ -0,0 +1,140 @@
+.........................3.......................................94...............806....................596.........793...........186......
+.../..........*574.587..*........161......904.......412.........*.................*.................................=.....637.%......*......
+..614..831..33.....*...........@....*398..&.....690*............183.........503..916..790................................*.....256....632...
+.........*.................332..374......................%184...........467..........*....969.632.......26....457......440.........@........
+..........535...541=........*.......696..@..323..................93=.......*.......30......*....*......-........+.222$.......458.817....66..
+....*.......................885.....*...123.=...641...&188..577.......339..688.........287.684..219.........................+...........*...
+...61........397...#386...=........313........-...&............*......*................@.............../.........621+....................169
+..............*.........34..................934..........17..168..320..263.........412.......$......966.....................303.....554.....
+...............353.447.......@.....251............54....*........#.............149....*...871..964.................714.....*....403...*.....
+...805......$......*.......632.....#...+514.944.....*....48..........*133.959.*....814...........-.521...........................*.....398..
+..../.......906.289...238.....................*................772........*...591......260.122......*........309...677...357.....790........
+........#................/.........450.....594.................*.......705............*....&.....676...@954.%....@....&.*...................
+.....310..928...+.............488.*.............790.........286..982.........416*944..103.........................351...519...705...........
+..............872.....+........*..820.....5....*.....529.........*...........................@..884......356*449................*..596......
+...................780......507.........$..*...936.............406...........*560..704....931...+....618..................%243.817...*......
+.386.....937.+904......*.............540...320............702.............118.........*............../.....445.....291.............899......
+........*...........930............*......................&......204...............243....*948.....*..........*...*.......512$..............
+......956....................$..788.487...........894.955..............................479.......709.........57....374................930...
+............/534..260*33..680...............324...*....*......574......219................................................../934.......-....
+..261...........................*813....=...*..........378......&....-..%...198............................885.........666..................
+...*....../........905$......706......281...314...642......701....736.......*.................................*..........*...532............
+..235..400....670.........-........................../......................849...204...197..646...............548.......61.*.........538...
+.............*.............927....340...........641..............................&......*...*.........137..144...............513............
+..400./285...16.......704............*896..836.....*..........738......102.&190..........89.137............*...$582....................&....
+...*.............763...#....541....................629...........*646.............295............368@....&..62........990...@428........955.
+....218...650.....*.........%................269............669...........709.......+..810.............52........447...@.........784........
+.............=.....313.............*........+..........444....*.%.........................-.....225.......684...*.........../107...*........
+..66...643.......................87...770.........=.......@.122.495.......177.....226.974.........*.580..*......921....216*.........724.....
+...*..*....................328.........../...460.325.....................+...........*.........198.....-.316...............912..............
+..882..421.......%766.........*..............................978*..........124.110.......$.....................467..............780.........
+...........732.........531.....439...%...........................230..........*....396..126........................508...........*..........
+............/..........*.............401..69.........$.................630............*.....114.......959...81.............515..664......43.
+......-............491..929.363*.............178..686.....546...................628...4.......%......+..............106...*.........*.......
+...456....154..659...+..........111.*...........-.........*...............66.%...*......%...................583../1.*.....206.......439.....
+...........&...$..........548.......560................431......752......@...574.534....303...843../.................844....................
+.........%.....................320%.......871*.....647..........*....................89.............981.....................................
+.92....832.....194.804.270.992................388..................%..583*..........*......255..730.............................138..121....
+.../................%..../..*.........58.106......*..373.........107......964...52.910.465..*..*........15...@.....*14.=847...........#.....
+......850...503......................*......*....411....*....674...............*...........532.124.......*.471..380.........................
+......*........*...390..641......99...997..688..............-......403...6.....156.....................320................*721..............
+.......471....555..*.....*......*.../................749...........*......*..........92*756................336.....241.581..................
+...................904..762..681..695.&639..903&......*.........753........936...................683-..........921..*......654....7.470.....
+.........16*494.....................................395..112...........=..................601..........+..........*.901.......*....*........
+................45...........77............$..636.........*...@593...670.........*796.270..*.......%..835.501...190......369.618.%..........
+......918..@....*....597...........758..550...$...895...688...................952.....*...761...176........%..............*......261........
+.....*......957.108.....+.....788................&..........221..........-308.....$..567..............562-.............963...833............
+....431.484...............35.+.....476.902.....................$.....495.......137...........880.199.......306+................*..725.......
+..........*..............*.....312...=.....50-...687...274..........................-........%.....*.................*......930...*....349..
+.....197...748.........639........=................*..*.........601*.......19....995..............470.....81.954..684....82......872...*....
+....=................................996........457..208.403........379...=...............193..........61...*...........*....37.........248.
+........155...................%........*.......................................689.211...+..........52*..................969..*....922......
+......*.........151......698.723.....175..10...........&............................*......852.486......442...900....934......60.....+......
+...103.896..142*.................430.....*..........-...743.........346&.................#..*...&........*.............*.........197........
+......................811........*..................813........802.............#333...167...916...856.....590..........658....-....-...563..
+..............838.275...-......529.............718.......502....*.................................*................284.....967..............
+...8....64.......*............................*....870......*.901......606.226...................534........773....*...............*43......
+....*.........57............338*142.......589.525....*...563...................745#......152..............%..*..298..206....................
+.....311.....=............................&.........309........630.....238................*.....345......701............*.....235....541....
+..................288...596...45...............953.............%.................@....379.746......-..%.........937....571...........=......
+161@................&......*.....47.=.........#......586.....&...281............764....*...............903.=810..-............837...........
+............................944..&...650.............&....918.......*..74...............369....437&............................*........777.
+......146...*..................................772*.................52...@......*895.@.......................371.......*76.....282..........
+......*.....278...696...........365....=334........786........879.=..........983.....877......@38........784..*.....255....&................
+.....132.............*.849........*........................%......783...553.................................&..663......297........419.440..
+.977...........839&.......=.393&.77....895*770............636..........................-803..353+......-.......................406*.....*...
+...*.=....376......................................69..........&.....116*949.......................186..295............%.................833
+261...853...*...81........993.191.810...731..........*575......636..................306...........*............129....691....999*.+712......
+...........319...&..........*..*....*....-..903*187....................890....875......@........557............&............................
+...........................840..403.255.............*.......138.........*......../.841..................257........499.........*........%...
+....430.....283.........................897......566.74..11...........705.641...................71*104.*...........*........197.782......290
+.....................605..........401..../....................690....................633...............957........739.......................
+.280*135...706...........709.........*................388..............813............*.....906....%..................606...................
+..............*.=965...............669.......944$..............................288.131.........-.183..594...............*..852..819.........
+.......#513.676......667...............93..........#.....$.......984.............#.....511.....................172.283.323............+426..
+......................%....826........$...........709..91...........*....919..........*......................./....*..........%.............
+....................$.......*....829........656......................400.*....................995.798.203..........107.994.....598.543......
+.........88.../..568.......194......*931.......*654..............*........533....................*.....*................+...................
+............844................491.......642..................839.603.125.....777...96..24.312.........272................671.394.....532...
+........85............/...@........*339..%......914...601.............+........*.....-....*......251.......29.....962.......+........@......
+...969...............916.265....630........791&....*.*..........$.........-166..307.................*........*543.&.............445.........
+..........811.457...................942.........755..944.......108..254...................322.....695....250................86..*........290
+..........+....@............-871.......*....602......................*.......................*........15.=...........274.......637..........
+.....................&810........894-..130...*..........................................315...76.....+...............*.....55...............
+..........................261.................894..582.....................................*............14....%...737.....*.........+.......
+..375.987........803..69.*........&....80#................685.....386.....................602....10.....%......65........932./..742.24......
+.........@.608..*......*........563........630..947.................*..........234...728..........*..........................92..*..........
+.....89.......+.550....43........................*....471......286..517.510....../......*..........966...795............$.........813.......
+.....*...651...............#.../573..569..........239.*..................*...........591.....935..........*...........536...536.............
+.....344.*.............681..90........*........./......43.........../...473.....................=.....679..545.................*843.........
+..........610.72.952..................850.......81.........733......895.....975..........132..........*........+898.......583.........656...
+790=.@179...........*........$...............................&..............@....935.......#...270..621...................#.............*...
+...................618....366...776..................143.......115.../..............*....*.......=...........306.........................369
+..............258................*...97........./967.-........*.....281...%............32.65........43.721.....*...........738...462*.......
+..606........*................713.....*..................513............114..746...............................86.............*......507....
+......402.....200...983...............746...335......938........488.........*......$.649.............................214.......493..........
+........*..............*32.....................*381..*....46.......*..205..16...100....*.444#....&..522........896..*...............411.....
+.......583........./................734..19..........795..*.....219...*.............804.......391......*............881................&....
+..............93....228............%.......*...985........936.......%..........=..+........................361.692................784.......
+.....219.................808..........755..........233............348.......463....147..............162.....*.......464$....................
+.......+....&...876...+....*..461$...$.............*.....550...........456.............826.330.........*997..657.................763........
+..../......143....%...87...............225..160*8.66.......+.....#623..*..................*.......612............709...679*........$........
+.....271..................#.....610.....................................799......*....866.....965...=.456........*.........530......./......
+.........10...#495..508.521.......+......746.........165.........-978.........638.145...*.576*...........*......926.............468...267...
+...........*........*.................&....$...........*...294..............$.........822.................535.........727.351...............
+...671..233.......903....541.....421..760..............299.*..............570..............540.......947.............*....*...802...........
+.....#........920.........*..455*...............942.........953..390..................365.....+.........*..........779...55.......293*......
+.................*........40......50..827........*..............*......................*..&.....-....374..............................80....
+......#...........636.274...............=.......72.............785...+596.............36..59...843............206..+625....%................
+......767.......*......*..........948..............*.345..................#..........................927..861....%........701...........64..
+.242.........476.363...936....347.*.........@.....41...............31...362.447...+902.....538........*.....*......+...........262&.........
+......#.........................&.517..*911..791...................*......................=....187.....926.800...54......108................
+.593..829..............................................166.524=.....................+381........+..*.................468*.............&.....
+..........766*......273...347.........347..........$...............836......436............843=....473..@.....=344...............573.675....
+..............279...%........*...786..........-..100.860..........*........*....421.....................414.................616...#.........
+...322....496............334.648..*....75...520......*......881....87....120....$..............*.............79.............*..........*....
+.....*......*.....................367.............704.............................&..........59.542.........*.......-992..53...811..192.556.
+...308....485...948.......................383*559........282.......15.........298.774.......................377...................*.........
+...............+.......348........................&.809.-.....249.......699../............740..650...584...............801*563..721..470....
+.........343..........................970...324.782................324..*...........380...*...*......*....-.........................*.......
+...627$....*...713#.....799...420........*....*......................*...24..........$..131.......148......245....94*781...%.......302......
+........698.........635.+...............644..593.%......784.....-....644......................409........&.....*...........952..............
+.999.................*............................627.........866..........418..........483*.....$....227...248.665...265.......222...&.....
+...*...............320...396......%......................77........186........*991..................*.................*...232....*....255...
+..363..35...=39............*.......831.......892.........@...=..+........268..................513..373.....875.......48....../....680.......
+.........................259.............374*...............137..482.432...&...276....132........*.....798...&.................16...........
+..669*246.......................491.............+...+..492...........................*.........=..603.@..........849........................
+...............429.220......-......*..........928..304...*......177................741...482.204.........*.........+....=........36.........
+...218..449.......*..........214...620.................827.252..@...689...................*......598..460.473...........341.704../...434....
+......*....*548.....-679.149.................................%......*...371..........998..815...*...................................&.......
+.......403................=.........166............................741.....&........%...........329.............62..............*...........
+..706*......991*738..347.....571...*....983..........+..208...319...............406..................175#......*.................891........
+......392...........*...........*.409.....*........72......*.-.........233.......*...........................478.............256............
+...................559..................-.540..734........6....*.......-......771............398.729.............928#..+....................
+.....603.......472................%...892..............=....314.684.......712............206......+.....657.%..........844.584.456...=......
+......*..........*..#..........801...............738...524.................*........817.......+........*....57.............*..........749...
+648..799........517.999...............#...........$..+.....................742..516*....939=..694...945..................863...480..........
+..........700........................994....314......214....105.............................................#....137............*...522.....
+...153.....*.........685..283................*...151........*....#....232......$.......99.92...863....*.....567.....*.285.....69.....*......
+............205.........*..*..............275....*.........220...644...*....293.........$..%..*....337.91...............*.............963...
+.......................844.32......449..........932....................869....................77......................288...................
\ No newline at end of file
diff --git a/2023/04/04.py b/2023/04/04.py
new file mode 100644
index 0000000..eef14e4
--- /dev/null
+++ b/2023/04/04.py
@@ -0,0 +1,29 @@
+with open("input.txt") as f:
+	lines = f.readlines()
+
+part1 = 0
+
+for line in lines:
+	_, card = line.split(": ")
+	winning, yours = card.split(" | ")
+	winning = {int(n) for n in winning.split()}
+	yours = {int(n) for n in yours.split()}
+	how_many_wins = len(winning & yours)
+	worth = 2 ** (how_many_wins - 1) if how_many_wins >= 1 else 0
+	part1 += worth
+
+print(part1)
+
+cards = [1]*len(lines)
+
+for i, line in enumerate(lines):
+	_, card = line.split(": ")
+	winning, yours = card.split(" | ")
+	winning = {int(n) for n in winning.split()}
+	yours = {int(n) for n in yours.split()}
+	how_many_wins = len(winning & yours)
+	for n in range(i+1, i+1+how_many_wins):
+		cards[n] += 1 * cards[i]
+
+part2 = sum(cards)
+print(part2)
\ No newline at end of file
diff --git a/2023/04/input.txt b/2023/04/input.txt
new file mode 100644
index 0000000..b5b8942
--- /dev/null
+++ b/2023/04/input.txt
@@ -0,0 +1,218 @@
+Card   1:  9 32  7 82 10 36 31 12 85 95 |  7 69 23  9 32 22 47 10 95 14 24 71 57 12 31 59 36 68  2 82 38 80 85 21 92
+Card   2: 16 35 95 22 59 82 76 60 19 88 | 63 91 16 35 26 82 95 51 53 60 94 59 56 73 28 76 12 44 22 62  8  7 19 38 88
+Card   3:  1 88 48 52 70 19 11 78 94 28 | 19 92 70 18 34 78 83  8 82 87  3 97 66 31 63 17 69  4 75 94 52 54 77 24 45
+Card   4: 72 14  2 92 65 62 16 28 55 91 | 73  8 35  4  9 86 83 51 47 53  3  7 15 52 96 54 49 88 85 30  6 59 81 33 99
+Card   5: 60 61 24 41 30 77 94 50 38 75 | 47 93 82 98 96  5  9 53 17  6 10 21  2 91 80  4 14 71 29 69 62  1  7 87 88
+Card   6: 21  4 16 41 58 68 66 22 64 94 | 72 69 60 62 34 21 75 66 38 25 63 17 81 23 71 73 78 64 89 24 26 56 68 79 51
+Card   7: 10 90  4 56 14 26  7 23 57 19 | 62 10 60 51 46 34 23 49 44  8 53 50  2 56 21 81 69 89 87 91 16 63 38 36 22
+Card   8: 36 27 38 47 16 57 96 31 43 76 | 62 99 87 68 76 44 49 63 47 16 58 81 84 48 45 88 64 34 54 42 72 24 26 12 50
+Card   9: 92  9 35  2 26 97 79 88 43 45 | 89 96 62  1 39 98 72 66 28 78 64 68 42 63 15 25 22 60 31 91 69 94 21 81 29
+Card  10: 40 17  3  9 47 23 82 90 13 87 | 51  2 36 85 34 27 11 53 71 38  8 57 58 17 24 20 54 23 31 37 35 70  9 83 99
+Card  11:  2 21  9 53 45 19 91 74 23 25 | 29 26 91 39 58 18 96 53 31 63 46 21 32 54 22 66 17 25 94 74  4 41 77 35 23
+Card  12: 13 84 68 67 99 97 73 49 86 65 | 97 49 35 40 42 80 45 11 94 53 99 29 72 73 23 77 62  3 38 90 83 68 59 20 95
+Card  13: 70  9  7 11 95 46 69 91 22 71 | 30 56 31 90 91 69 17 71 25 46 66  9 62 89 70 98 36 57 45 94 21 40 75 95 24
+Card  14: 54 37 89 14 18  1 60 34  7 80 | 83 98 11 85 50 35 61 29 18 67 33 63 32 92 68 65 95 56 74 96 27 73 81 47 15
+Card  15: 25 82 90 66 50 40 15 43 32 62 | 49 77 96 36 89 70 50 29 26  1 20 71 37 30  9 91  7 52  5 82 51 55 72 38 12
+Card  16: 26 46 79 29 52 10 87 75 45 49 | 52 25  2 42 73 44 58 85 10 37  4 17  8 86 95 65 35 31 16 12 99 51 70 80 45
+Card  17: 17 96 64 38 73 11 32 24 25 65 | 83 37 25 81 59 18  4 15 98 87  2  1  3 60  5 53 67 46  6 20 79 84 95 50 62
+Card  18: 48 50 90 87 40 71 59 61 30 85 | 85 19 13 39 76 55 72 29  5 84 22 91 67 63 74 73 61 90 62 42 30  9 69 87 48
+Card  19:  4 99 93 55 22 37 41 75 32 79 | 95  7 65 50 40 49 42 64 89  1 59 33  9 53 20 44 23 98 60 30 39 12 66 84 45
+Card  20: 14 34 73 91 30 48 35 44 50  8 | 48 33 35 40 65 29  9 42 18 79 43 89 92 68 75 97 87 69 85 80 98 14  6 25 76
+Card  21: 33 15 83 71 94 61 87 54 36 72 | 56 52 83 46 32 99 36 67 12 47 38 13 14  2  7 26 20 63 90 40 37  6 84 42 92
+Card  22: 66 45 79 71 92 57 47 43 62  9 | 45 89  9  5 53 84 80 19 77 61 68 40 98 23 56 36  6 60 93  1 11 49 71 52 29
+Card  23: 29 53 13  4 76 62 25 94 82 98 | 24 45 85 59 41 11 13 78 54 67 74 21 50 75 16 37 63 86 14 26 92 31 57 33 40
+Card  24: 16 66 90 39 24 92 53 76 52 31 | 21  7 57 65 58  2 10 61 35 73 68 95 84 43 12 18 76 71 83 15 82 88 30 55  5
+Card  25:  9 45 17 42 64 93 54 33 77 62 | 35 81 82 18 47 92  2 20 95  1  6 58 40 73 43 37 15 48 23 75 26 13 50 63 79
+Card  26:  1 99 92 73 57 29 18 97 34  5 | 82 89 61  3 95 39 14 98 15 87 45 48 49 60 22 28 65 16  9 58  4 53 38 56 51
+Card  27: 87 45 35 93 62  1 66 91  6  3 | 51 60 96 84 35 91  6 28 32 40  3 57 29 90 73 12 81 89 31 69 97 66 70 36 18
+Card  28: 72 89 51 45 10 21 84 23  6 94 | 26 45 23 13 68 51 89 66 34 99 83 70 44 56 72 57 73 94 30 84 61 80 85 29  6
+Card  29: 58 80 96 47 13 44 71 38 55 54 | 58 35  3 61 81 96 71 44 43 14 36 54 20 69 63 13 75 28 80 18 73 11 38 55 47
+Card  30: 44 17 81 16 13 65 85 60 34 46 | 60 71 72 13 10 51 65 56 34 59 80 75 18 64 35 92 58 50 97 46 81 37 44 16 17
+Card  31: 84 55 99 95 42 83 26 33 43 87 | 78 59 45 26 28 94 63 17  2 73 38 84 96 34 99 19 75 65  8 92 58 20 11 82 57
+Card  32: 57 67 49 76 15 84 27 39 24 14 | 20 15 21 14 67 97 76 19 17 38 23 41 24 32 27 57 26 81 99 49 34 96  9 84 39
+Card  33: 96 76 23 95  5 37  8 62 65 63 | 59 23 67 51 40 68 70 38  8 36 41 53 62 65 96 76 66 57 37  5 46 34 95 19 69
+Card  34: 52 13 90 81 94 62 91 40 53 42 | 82 90 35 13 55 95 93 74 44 70 89 87 62  5 80 22 53 94 21 77 54 20 18 52 40
+Card  35:  1 75 37 64 17 12 57 18 58  3 | 65 74 89 12 72 64 93 23 51 73 44 80 21  7 35 87 42 82 25 53 71 38 79 43 61
+Card  36: 15 49 18 30 20 90 69  3 60 59 | 14 63 53 86  5 62 69 52 21  9 18 48 13 34  2 67 60 55 10 98 15 81 88 83 94
+Card  37: 48 39 43 81 40 59 70 22 62 61 | 48 14 79 26 12 56  3 89 66 17 87  9 43 27 73 23 47  1 18 97 96 65 59 42  6
+Card  38: 35 94 15 31 22 55  8  2 11 45 | 78 53 41 13 37 64 36 90 26 97 16 99 57 54 20 59 82 24 58 81 14 74 95 93 79
+Card  39: 74 25 37  8 53 36 86 68 91 79 | 48 45 24 80 20 49 86 42 47 28 17 22 93 38 35 34 85 21 18 14 97 61 27 41 88
+Card  40: 41 16 26 14 79 27 62 55 80 99 | 52 83  5 38 69 11 89  6 35 58  4 74 99 97 63 30 90 33 46 60 95 59 22 76 40
+Card  41: 57 77 60 66 35  4 13 89 14 40 | 78  4 97 58  9 65 94 44 89 95 80  7 47 59 37 26 19 76 91 18 45  6 56  3 90
+Card  42: 83 19 31 59 78 54 22 16 44 88 | 53 84 90 39 56 29 44 55 58 13 72 80 49  6 28 97 25 18 99 89 40 43 10 33 71
+Card  43: 81 94 73 42 85 45 28 61 88 19 | 84 86 36 44 51 40 82 72 39 57 13 53 87 83 38 76 63 35 47 15  2 95 79 26  1
+Card  44: 78 28 92 59 51 37 61 55 58 98 | 49  6 30 89 61 98 58 78 31 28 48 92 60 56 59 51 29 14 37 63 38 55 24 42 21
+Card  45: 23 59 74  5 81 53  3 93 54 68 | 68 15 38 45 66 61 87 54  3 81 74 43  5 25 59 23 93 78 44 72 53 52 89 97 48
+Card  46: 79 17 74 72 84 44  3 59 66 76 |  3 44 95 84 66 79 62 97 63 48 76 10 75 72  6 17 74 94 80 59 30 12 20 83 87
+Card  47: 98 18 11 52 66 14 68 89 80 19 | 66 67 23 52 80 89 95 44 60 11 55 34 18 59 19 53 98 82 14 38 63 65 90 68 77
+Card  48: 84 64 87 81 54 61 31 57 53 79 | 99 74  9 45 54 14 96 38  7 82  4 17 43 69 62 83 66 81 41 86 55 75 30 10 21
+Card  49: 95  4 89 38 67 71 70 75 35 39 | 39 71 22 80 75 43 35 89 17 38  4 29  7 69 94 63 85  6  5 95 70 58 67 50 68
+Card  50: 18 59  9 34 83 68 80 21 61 78 | 10 96 19 11 74 15 26  8 65 56 35 79 32 44 55 36 94 95 53 86  3 27 88 67 85
+Card  51: 17 79 69 92 39 51 46 81 14 21 | 49 92 48 29 47 74 76 81 69 85 86 98 73 43 24 45 21 84 25 10 17 44  1 31 28
+Card  52: 39 31  1 21  7 27 85 59 35 67 | 84 29 91 89 70  5 94 23 21 65 71 12 26 41 15 11 61 73 14 52 76  9 16 24 75
+Card  53: 93 21  1 18 54 87 35 98  9 48 | 44 30 79 82 23 43 51 46 34 35  9 75 12 60 77 36 27 86 32 47 85 98 87  1 13
+Card  54: 51 95 69 73 66 61  9 28 75 24 | 42 28 87 69 24 19 56 98 57 66 95 73  9 51 61 50 64 75 76 27 86  1 29 30 79
+Card  55: 73 99 56  8 10 97 26 64 52  2 | 79 47 80 89  5 53 37 63 41 48 12 96  1 25 84 70  9 76 58 75 72 31 20 17 46
+Card  56: 71 43  8 50 95  1  2 77 45 81 | 43 85 24 59 46 15 36 81  3 50  9 45 95 77 71 12 65  1 60  2  8  5  7 20 88
+Card  57: 10 76 62 41 58 67 80 39  9 21 | 58 10 42 60 37 27 51  1 25 18 56 23 67 88 62 50 87 80  9 54 41 81 26 21  7
+Card  58: 41 80 74 71 10 63 58 26 38 21 | 63 66 80 65 12 68 72 10 20 91 88 44 11 70 36 71  3 61 74  7 21 41 67 43 38
+Card  59: 41 60 82 94 90  7 76 69 28 95 | 35 69 77  9 81 65 11 90 19 22 36 75 12 52 98 55 92 79 14 67 47 83 39 74 94
+Card  60: 44 82 36 55 94 72 99 70  6 50 | 35 29 95 62 97 11 33 92 19 91 10 54 56 53 98  1 39 16 64 52 73 66 30  4 43
+Card  61: 55 19 82 18 24 91 99 36 54 98 | 68 58 99 51 79  1  7 50  4 28 59  8 19 14 10 40 57 34 60 82 88 47 52 80 54
+Card  62: 14 20 49  2 94 59 33 72 86 34 | 35 33 54 94  5 14  7  6 60 41 40 38 20 26 72 22 49 13 83 98 36  3 51 82 74
+Card  63: 73 78  8 64 52  7 86 30 98 27 | 95  4 48 24 45 72 60 31 25 18 59 90 51 14 50 65  2 16  3 33 94 11 93  6 32
+Card  64: 26 71 76 85 70 80 81 61 58 77 | 87 10 24 38  4 40 42 96 47 63 99  7 20 68 78 66 53 12 46 90 75 59 60 88  5
+Card  65: 26 37 35 44 45 10 13 85  6  8 | 39 80 93 79 60 89 58 96 44 85 59 94 24 23 48 86 22 42  6  5 25 57 43 90 21
+Card  66: 62 45 67 18 36 84 66 90 98 95 |  1 71 68 54 76 48 42 35 19 94 39 69 80 17 41 20 93 59 29 30 15 37 14 12 88
+Card  67: 33 10  5 94 72 86 84 80 19 85 | 76 26 61  3 93 17 74 42 23 16 18  2 14 46  1 38 72 13 28 29 91 21 12  7 48
+Card  68: 70 73  2 79 88 36 35 13 16  6 | 75 47 30  7 89 78 39 69 96 91 19 83 61  4 10 77 81 44 90 50 29 38 32 53 60
+Card  69: 60 20 40 38  6 49  5 85 84 80 | 38 12 59 94 27 15 85 17 65 69 82 36  7 43 47 99  5 87 61 77  4 83 81 90 40
+Card  70: 85 96 73 11 22 33  9 61 37 42 | 27 70 96 74  9 75 60 88 22 86 13 63 37 80 83 73 42 85 17 33 35 82 61 65 11
+Card  71: 41 47 37 52 73 97 77 69  5 45 | 47 95 78 41 74 54  5 88 63 87 34 18 37 85 26 73 52 50 28 77 97 86  1 69 45
+Card  72: 90 88 85 71  5 59 65 52 30 13 |  5 29 68 62 24 12 90 30 85 18 76 25 40 60 77 14 19 33 61 88 70 17 95 73  2
+Card  73: 44 98 60 49 51  9 21 88 87 70 | 63  3 46 65 49 70 44  7 74 88 35 45 17 24 51 60 25  9 98 87 21 10 81 83 61
+Card  74: 31 23 80 11 13 72 63 57 29 70 | 57 28 70 45  3 94  5 80 14 11  2 29 20 47 72 63 10 31 66 19 79 38 74 13 23
+Card  75: 82 54 62  8 30  7 88 20 71 85 | 83 65 74 44 79  3 29 64 51 35 98 56 41 22 27 13 26 34 39 59 24  4 33 14 63
+Card  76: 16 24 87 73 17 71 69 26  4 76 | 59 71 32  3 56 64 24 41 66 26 12 36 87 65 73  4 75 16  8 17 57 69 49 46 76
+Card  77: 98 57 96 56 39 12 69 37 54 65 | 21 48 87 97 29 27 56 31 18 88  7 79 70 35 64 38 91 15 14 43  3 84 20 85 32
+Card  78:  5 62 37 51 73 78 18 64 42 48 | 35 82 85 62 23 66  3 14 19 64 79 18 93 53 69 58 96 63 90 24 41 65 94 40 95
+Card  79:  8 73 46 15 99 29 96 34 59 75 | 48 65 57 99 63 33 37 73 79 28 72 56 34  3 25 75 70 95 58 27 43 30 54  8 87
+Card  80: 91 81 96 55 44 82 31 23 11 74 | 24 51 96 77 40 28 56 44 54 89 78 38 76 74 17 92  3 23 36 63 80 65 55  7 11
+Card  81: 81 77 30 26 93 28 97 10 84 88 | 57 28 36 33 54 11 96 58 18 99 30  1  5 79 12 24 56 93 25 78 10 40 76 84 81
+Card  82: 31 67  3 90 28 76 55  6 29 26 | 75 34 82 73 38 17 67 91 86 40 43 45 42 60 37 63 55 87 93 84 58 78 80 20 11
+Card  83:  8 97 43 88 62 34 68 50 82 71 |  8 68  2 96 85 36 10 14 35 32 73 16 26 29 67 60 37 89 52 98 74 22 78  1 59
+Card  84: 77 97  5 33 12 73 90 57 31 19 | 97 46 48 57  4 10 94 85 59 31 17 60 81 49 62 58 25  8 79 78 50 36 55 51 32
+Card  85: 74 85 97 19 76 99 21 47 20 50 | 50 69 72 39 45 26 13  7 92 21 63 58 84  9 94 53 43 81 89 49 62 32 70 82 10
+Card  86: 81 96 82 76 97 77 40  3 68 98 |  4 26 69 88 43 15 78 64 79 92 62 30 49 89 37 59 95 63 58 98 75 99 80 51  6
+Card  87: 80 73 51 20 41 67 31 66 97 27 | 16 59 75 86 24 83 95 44 85 13 11 77 70 14  2 39 88 89 93 55 52  6 53 94 98
+Card  88: 18 38 66 87 56 25 46 63 37 15 | 86 22 17 96 10 49 80 21 15 77 66  3 20 95 36 87 16 74 46 26 79 76 38 43  6
+Card  89: 51 55 41  3 20 60 99 70 23 43 | 51 81 99 32 50 96 41 53 80 76 43  3 83 65 20 46 70 60 38 35 57 55  7 74 23
+Card  90: 94 19 23 81 44 15 74 73 22 71 | 83 66 54 43 23 55 69 81 85 71 62 96 19 86 78 22 15 58 94 74 44 73 57 17  8
+Card  91: 72 77 21 83 82 75  1 56 99 43 | 42 77 56 90 68 96 39 72 83 97 21 17 66 70 49 43 69 63 82 75 47 99 87 11  1
+Card  92: 62 58 71 78 38 80 52 94 48 92 | 11  7 56  4 77 59 62 49 14 94 52 80 92 64 71 58 13  1 48 12 78  9 17 38 35
+Card  93: 98 45 63 46 48 97 91 29 90 15 | 95 31 41 15 43 80 24 44 75 83 30 87 98 12 27 36 74 16 86 35 33 85 54 94 78
+Card  94: 27 60 36 26 76 65 86 89 10 54 | 80 78 95 36 88 82  6 46 73 58 22 40 12 50 76 14 65 26 70 60 54 17 27 89 93
+Card  95: 18 62 66 98 24 16 80 58 53 97 | 93  9 15 61 51 19 81  8 21 36  6 71 80 13 52 87  5 37 86 75 68 60 97 54 10
+Card  96:  6 55 40 79  3 67 13 96 91 34 | 54 13 63 17 52 72  7 81 82 69  6 91 90 57 14  2  8 74 75 40 96 21  3 38 55
+Card  97: 40 33  3 59  8 88 99 14 41 74 | 99 48 41 35 69 64 18 50  3 96 40  8 36 63 17 90 59 33 49 26 88 93 74 27 14
+Card  98: 63 44 52 11 32 46 62 19 30  6 | 71 51 48 70 82 44  8 60 92 21 77 62 53 95 31 73 80 96 55 34 86 97 76 88  6
+Card  99: 66 46 22 44 94 50 68 59 25 75 | 40 46 56 32 64 89 80 22 60 87 77  9 59 25 75 38 44 48  8 50 94 68 66 72 20
+Card 100: 15  8 13 93 80 58 66 10 76 32 | 58 68 34 54 53 79 69 18 71 33 66 13 92 77 93 40 80 94 76 75 15 10 83  8 70
+Card 101: 22 25 48 97 63 81  7 84 60 43 | 58 91 10 85 59 76 16 36 96 39 42 50 72 34 86 61 67 11 79 27 83 73 98 57 70
+Card 102:  1 35 10 28 59  2 74 45 25 13 | 47 56 90 19 20 95 64 72 88 28 27 18 31  7 55 61 48  2 10 81 70 25 96 73 74
+Card 103: 28  5 31 23 76 83 25 94 35 18 | 10 85 72 18 23 60 17 50 30 76 35 83  8 42 65  4 34 84 28 39  5 98 25 94 92
+Card 104: 32 45 61 94  5 44  3 15 77 87 | 37 15 84 94 19 33 11 51  1 81 16 61 87 68 74 97 62 88  8 98 45 44 92 70 83
+Card 105: 32 89 96 15 67 83  9 64 60 44 | 76 38 75 54 44 67  3 88 89 46 15 40 96 19  7 36 55 64  1 83 78 72 31 18 21
+Card 106: 78  7 12 67 54 29 76 66 17 35 | 53 19 78 86 36 33 84 63 16 43 64 46 31 58 66 11 39 38 76 14 49 94 47 67 56
+Card 107: 95 91 53 27 12 51 29  1 36  9 | 43 70 74 89 52 12 82 97 96  4 45 37 14 68 15 58 63 51 59 34 50 81  3  6 83
+Card 108: 68 79 91 36  9 55 21 81  2 17 | 26 21 63 91 27 45 73 92 29 24 74 57 43 61  4 82 20 50 84 88 54 89 81  8 15
+Card 109: 68 37 88 22 26 53 67 43 62 35 | 24 19 46 44 49  7 17 51 21 81 96 30 59  3 72 99 71 58 22 28 60 52 43 65 86
+Card 110: 95 66 14 29 71 44 35 73 15 63 |  2 87 82 39 55 92 33 98 51 20 16 89 24 12 64  8 85 41 37 77 42 45 22 48 52
+Card 111: 83 21 90 50 91 82 73 19 41 25 | 47 74 77 86 84 33  3 99 30 93 37 98 42 59 24 12 69 36 61 68 55 17 32 53 18
+Card 112: 72 29 25 73 15 93  4 36 78 56 | 35 80 62 12 88 59 30 17 51 76 70 64 21 42 79 31 96 83 63 57  1 68 52 53 75
+Card 113: 39 52 17 98 34  9 72 53 47 51 | 70 72 17 48 83 98 64  9 15 94 57 68 87 14 27 55 40 38 53  8 47 51 16 28 67
+Card 114: 18  1 14 61 17 28 24 34 63  5 | 62 64 68 67  8 88 18 73 28 17 14 34 65 95 47  1 31  5 24 99 61 89 63 42 80
+Card 115: 31 76 94 50 65 52 21 53  5 43 | 93 38 97 35  2 82  1 45 65 50 43 59 21 27 94  5 31 53 61 52 10 76 99 44 47
+Card 116:  2 13 64 10 14 29 33 55 19  6 | 91 68 22 47  5 65 23 64 20 18 70 21 45  1 42 31 59 17 61 58 30 73 81 14  2
+Card 117: 52 22 10 59 25 80 48 28 99 82 | 93 52 25 19 94 80 85 28 46 90 74 65 48 99 22 66 87 49 83 57  3 10 59 78 67
+Card 118: 22 98 56 42 95  5 62 50 26 71 | 42 50 56 98 41 92 71 69 60 22 59 64 62 27 30 26 21 87  2 51 40 89 24 95  5
+Card 119: 25 61 90 69 15  3 33 14 59 21 | 61 30 25 44 18 90 74 64 33 73 51  3 14 60 45 82 23 69 46 59 27 21 49 15  7
+Card 120: 99 83  2 21 85 47 45 34 58 31 | 18 34 47 91 58 97 40 60 71 85 24 45 83 21 10 53 56 99 32 38 77 31  2 79 23
+Card 121: 91 63 88  9 66 25 48 94 44 51 | 42 24 19 83 43  9 25 28 18 88 91 35 63 69 66 55  3 14 54 75 80 51 73 94 44
+Card 122:  4 32 37 25  8 13  3 67 39  5 | 94 99 11  5 93 60 29 37 45 28  3  8 32 66 98 25 36 97 34 96 80 67 63 71 31
+Card 123: 93 89  1 53 15 98 21 26 82 42 | 17 25 40 63 15 21 28 42 30 46 13 53 81 74 93 85 98 57 39 65 60 38 12 36 92
+Card 124: 14 12 90 59 56 54 94 80 51 63 |  5  7 14 33 86 94 34  3 80 25 40 56 90 65 63 59 71 67 54 12 82 66 46 51 44
+Card 125: 52 37 74 28  4 96 92 40  3 64 | 23 44 64 71 22 34 35 17 10 74 93 37 40 42 52 96 53 91 92 70 28  4 75  3 12
+Card 126: 40 70 12 23 61 99 47 96 77 24 | 58 32 96 66 44 21 83 84 43 11 94 13 99 62 87  1 31 10 71 53 39 14 95 97 56
+Card 127:  9 40 39  4 19  3 25 96  5 95 | 86  9 31 25 14 19 40 55  5 84 66  4 28  3 88 95 27  1 34 52 97 29 12 96 15
+Card 128: 56 35  9 95 93 66 38 85 39 65 | 92 14 12 79 86 95 66  1 38 93  6 94 77  2 34 62 56 87 46 39 65 72 40 10 45
+Card 129: 77 19 10 24 25 68 67  5 38 29 | 73 59 50 39 37 24 58 56 70 72 74  3 20 66 26 92 71 29 83 15 96 79  2 28 27
+Card 130: 19 42 20 87 76 41 83 47 99 51 | 85 27 63  1 55  9 49 28 25 14 76 51 36 34 53 57 73 12 58 66 78 16 22 84 26
+Card 131: 33 82 49 90 74 24 53 48 12 51 | 48 29 52 12 31 99 81 33 80 76 37 32 96 28  8 51 79 56 26 62 53 10 15 42 58
+Card 132: 51 90 31 49 77 64 20 76 91 45 | 77 93 27 16 45 53 57 84 63 42 25 44  4 64 71  8 70 66 95 34 23 85 35 31 87
+Card 133: 76 84  3 16 25 79 35  8 50 60 | 32 97  7 51 49 12 37 54 59 60 27 87 40 64 38 78  8 53 43 39 81 66 68 44 18
+Card 134: 77 36 47 40 44 14 94 91 39  5 | 95 25 45 99 59 27 64 12 15  9 22  4 50 62 73 39 34  6  8 72 56 96 89 90 35
+Card 135: 33 49 25 71 39 75 30 16 46 55 | 94 82 64 10 16 73 79 68  4 12  1 87  6 53 34 98 66 99 78 59 58  2 36 77 52
+Card 136: 53 22 58 94 49 25  6 64 69 73 | 42 23  3 76 77 83  8  1 89  2 33 78 46 12 34 95 26 96 41 93 97 35  5 82 55
+Card 137: 64 25 86 72  6 39 48 95 73 62 | 52  4 29 18 11 84 79 87 19 32 96 71 61 35 17 15 44 27 68 70 98 45 22 51 85
+Card 138: 60 30 89 73 76 11 23 90 86 80 | 11 89 23 86 66  5 80 13 67 73 59 96 90 76 49 20 84 30 82 29 72 87 63 60 92
+Card 139: 82  6 17 76 72  5 70 45 90  7 | 12 50 25 41  9 16 29 20 63 70 28 10 53 90 76  5  7 82 17 15 45 93 72 97  6
+Card 140:  3 88 95 62 81 35 92 16 21 87 | 92 42 18 35 21 12 30 25 27 17 87 71 81 95 88 40 16 29 69 70 14 62  3  2 31
+Card 141:  2 36  5 53 22 30 40 94 84 52 | 86 67 38 32 90 33 18 26 13  2 96 49 25 74 83 31 54 42 52 36 97 55 63 44 47
+Card 142: 84 77 81 89 56 61 39  2 22  7 | 79 40 62 91 39 20 13 80 81 63  7 22 84 77  6  5  2 42 89 61 53 52 56 75 88
+Card 143: 90 86  6 75 67 76 18 41 36 55 | 25  7 30 21 40 65 47 42 77 34 53 60 97 10 49 39 45 57  8 94 83 93 32 80 98
+Card 144: 26  5 82 70 75 88 53 47 29 93 | 23 40 49 74 62 93 60 75 86 98 53 45 47 29 97 67  8 88  4  5 26 37 71 82 70
+Card 145:  8 62 96 13 21 82 42 54 41 61 | 87 13 23 96 29 27  6 14 53 75  5 24 31 60 90 12 82 51 64 65 70 58  9 74 47
+Card 146: 57 20 68 46 52 36 49 48 14 34 | 52 45 92 33 49 57 61 54 44 18 47 59 46 34 63 32 65 53 50 14 20 80 38 42 15
+Card 147: 47 86 79 34 64 91 57 21  1 89 | 14 79 31 91 44 11 89 75 40 97 81 92 63 73 21 49 93 86 64 22 35  8 13 99 57
+Card 148: 83 62 84 25 96 13 30 99 24 82 | 64  2 65 63 60 98 91 76 81 94 23 22 88 85 28 92 15 38 35 72 52 32 47 69 31
+Card 149: 62 32 13 59 96 78 11 73 34 52 | 89 73 13  1 52 24 71 83 53 97 62 85 78 20 17 11 59 96 74 19 32 29 34 43  9
+Card 150: 76 14 58 69  8 21 49 60 29  6 | 29 86 82 88  3 91 72 71 55 57 51 95  9 61 12 79 23 33 19 20 50 37 62 30  4
+Card 151: 68 93 22 66 81 77 16 75 47 34 | 47 76 34 52 25 68  9 26 29 66 37 57 10 54 99 46 77 95 81 93 53 13 97 22  7
+Card 152:  2  9 24 70 11 42 44 98 79 27 | 18 72 91 78 44 77 35 17 79 21  9  5  4 98 43 54 70 42  2  6 76 11 24 68 27
+Card 153: 36 28 10  9 69 25 87 50 77 11 |  7 54 25 40 85 33 15 20 87 71 96 99 77 53 94  9 67 28 69 32 26 18 63 29 43
+Card 154: 41 15 97  7 50 92  9 66 20  6 | 91 53  3 15 66 92 72 67 85  9 20  1 28 32 14 95 81 34 79  8  7 59 82 52  6
+Card 155:  8  1 15 14 44 81 89 37 55 43 | 76 62 83 79 37 24 56 30 34 58 45 64 23 41 84 71 14 22 60 27 18  9 42 54 85
+Card 156:  1 44 85 92  7 35 52 50 72 26 | 62 69 85 60 80 73 94 37 12 63 99 70 17 51 23  8 95 29 32 55 47 41  6 36 25
+Card 157: 12 49 19 14 28 64 17 76 34  8 | 33 87 95 61 84 55 86 19 92 44  3 42 24 96 94 36 38 13 10 51 15 81 27 75 67
+Card 158: 29 88 66 19 41 57 52 30 46 47 | 16  1 36 91  8 70 27  3 38 32 89 84 90 31 88 49 60 22 18  9 62 67 47  7 34
+Card 159: 99 87  7 36 67 23 14 92 52 82 | 93 41 76 15  8 63 50 40 30 85 92 48  1 99 87 53 46 70 34  5 44 79 16 35 17
+Card 160: 40 35 56 38 93 47 42 72 80 79 | 77 90 83  4 65 61 27 41 21 13 25 68 34 11 84 40 94 42 69 64 14 70 58 97 63
+Card 161: 57 54 92 91 51 37 93 55 59 41 |  2 78 35 85 23 41 74 33  8 21 72 94 63 90 95 64 71 12 65 27 38 18 19  9 60
+Card 162: 51 37  4 45 15 59 71 23 61 77 | 72 81 19 35 53 60 11 93 54  2 31 70 40 28 57 63  6 46 89 96 30 36 12 20 29
+Card 163: 52 53  7 23 29 89 86 43 97 77 | 79 18 34 45 80 61 30 41 68  7 52 89  8 49 29 86 67 17 81 98 97 78 26 48 70
+Card 164: 98 61 60  4  5 28 70 37 41 10 | 22 58 68 41 98 53 30 99 60 61 17 12  4 25 49 10 70 92  5 83 36 28 13 37 56
+Card 165: 16 12 15 73 22 31 20 63 42 95 | 26 53 40 17 97 15  8 25 78 46 44 45 54 39 61 23 51 11 90 95  2 35 68 24 18
+Card 166: 14 89 75  8 90 29 18 27 64 19 | 74 76  7 75 23 72 45 54 59 90 80 44 29 27 20 64 12 89 14 52 79  8 83 11 15
+Card 167: 16 78 33 67 66 63 69 59 36 94 | 89 70 42 47 92 34 14 69 37 83 19 25 57 36  3 44 77 26 73 85 18 59 13 65 76
+Card 168: 33 76 58 94 34 84 79 69 60  2 | 49 54 80 51 68 84 71 17 44 12 82 69  4 88 76  8 98 34 93  5 52 95 13 75 39
+Card 169:  2 63 48 44 25 75 51 36 29 52 | 24 84 56 37 17 60 74 36 77 48 62 32 16  2 80 41 15 35 88 72 30 58 20 49 12
+Card 170: 98 14 67 30  5 15 89 28 74 12 | 99 88  7 35 19 27 81 50 70 97 98 61  2 67 92 46 75 30 53  4 59  1 74 26 45
+Card 171:  4 26 44 61  5 75 76 20 56 33 | 34 97 62 70 83 35 23 78 13  3 86 58 56 65 72 59 76 20 39 32 36 71 33 30 46
+Card 172: 47 15 51  8 77 74  7 41 30 35 |  8 30 45 15 99 80 75 52 74 28 49 81 16  2 66 62 32 10 69 65 92 77 38 73 13
+Card 173: 65 57 60 74 69 55 21 59 10 50 | 32 28 78 16 17 79 67 76 35 66  9 63 80 58 62 20 89 88 92 26 64 10 12 97  3
+Card 174: 40 66 82 30 61 27 78 54  8 48 | 73 45 28 49 52 91 25 20 55 34 33  7 23  4  5 56 74 44  9 75  2 24 71  3 70
+Card 175: 49 42  2 59 41 38 32 83 89 23 | 25 57 90 46 99 54 67 40 73 87  9 27 82 58 53 63 22  7 13 37 52 68 15 81 88
+Card 176: 22 81 29 71 28  4 94 32 19 98 | 53 47 84 63 45 73  7 79 52 31 75 49 55 21 96 38 23 58  1 15 40 83  2 90 41
+Card 177: 44 43 42 73 56 74 64 61 29 89 | 91 15 96 77 65 23 84 20 94 45 95  6 33 13 63 50 53 18 12 24 41 47 54  9 14
+Card 178: 12 16 77 20 89 41 55 94 13 50 | 78 36 67 75 55 12 20 28 94 63 45 81 53 26 43 41 16 89 50 68 77 22 32 62 13
+Card 179: 41 64 96 46 85  5 11 79 89 51 | 98 62 92 55 49 93 90 91 41 64 94 17 48 46 70 31 51 74 34 33 75 12 28 35 84
+Card 180: 27 13 89 84 45 16 77 86 72 83 | 55 89 12 83  5 37 38 53 98 77 16 27 22 78 45 87 35 64 68 93 41 84 13 34 88
+Card 181: 79 31 12 61 49 11 68 56 78 54 | 58 23 21 59 62 72 69 17 12 34 68 87 26 98 67 16  1  3 11 38 31 78 89 27 91
+Card 182: 52 55  4 31 57  5 23 66 78 68 | 52 31 87 50 98 83 66  4 26 25 68 63 14 70 54 29  7 22 85 42 17 27 67 32  5
+Card 183: 71  9 31 84 59 32 74 26 85 36 |  5  9 58 26 50 74 80 37 59 16 44 27 98 11 21 48 43 77 57 62 33 86 24 28 63
+Card 184: 47 16 69 11 99 34 79 65 49  9 | 92 97 64 83 49 73 17 36 29 46  1 15 78 25 58 81 51 23 84 39 60 91 67  3 56
+Card 185: 84 21  9 64 45 19 51 90 91 76 | 91 83 76 26  8  6 21 70 32 42 11 51 19 39  9 69  4 67 82 49 61 68 64 45 57
+Card 186: 69  5 36 53 16 65 64 32 62 50 |  8  4  2 92 18 13 33  9 42 78 59 25 68 79 19 28 38 32 16 36 71 69 65 63 17
+Card 187: 37 58 19 57 26 21 55 92 68 50 | 95 61 58 35  6 55 31 45 76 23 22 96 18 30 86 15 94 70 53 13 80 26 68 87 36
+Card 188: 46 30 47 87 12 68 84 51 90 42 | 71 61 95 42 60 14 22 84 83 48 23 20 27 69 47 18 85 94 96 35 66 93 87  5 50
+Card 189: 36 31  8 73 83 14 39 90 67 74 | 89 21 37 74 36 19  8 14 53 32 17 39 23 96 95 38 46 78 90  3 35 52 26 56 84
+Card 190: 41 75 39 18 97 85 30 24 83 40 | 81 95 22 33 97 40 98 48 30 47 37 39 75 78 46 27 59 85 82 41  6 56 24 12 29
+Card 191: 39 29 11 97 41 63 57 87 10 53 | 14 68 22 52 75 35 97 42 13 38 54 23 24  3 71 20  4 43 86 56 34 70 51 94 47
+Card 192: 18 88 98 45 41 71 32 87 29 99 | 99 85 91  7 21 86  5 12 87 35 95 94 65 57 17 58 39 78 22 49 32  2  8 19 97
+Card 193:  5 31 29 36 40 65 95 74  9 69 | 79 64 74 44  9 95 73 65 70 18 48 58 33 22 88 81 26 57 67 46 42 11 30  5 15
+Card 194: 45 87 50 51 64 69 13 83 40 52 | 54 82 76 85 32 61 70 81 44 33  9 77 99 23 39 60 19 35 31 52 65 78 79 34 95
+Card 195: 48 35 73 17 39 44 91 70 45 66 | 76  3 23 30 15 20 22 40 25  8 90 75 24 42 21 46 10  7 77 72 29 64 55 49 28
+Card 196: 45 95 66 40 83 68 96 84 15 89 | 51 86 89 90 70 88 36 53 14 18 22 74 46 17 56  1  9 65 87 24 30 32 38 66 92
+Card 197: 92 25  8 82 33  4 52 55 95 83 | 75 50 53 28 14 76 61 65 90 29 81 39 27 33 15 56 24 97 80 40 70 13 21 78 37
+Card 198: 30 94 70 37 58 66  8 78 71 18 | 97 64 16 13 77 57 87 74 54 92  1 52 35 23 82  9 72 22 80 27 75 10 15 20 43
+Card 199: 20 30 64 54 88 32 16 59 43 48 | 88  2 11 27 21 52 68 99 75 80 84 62 23 37 56 82 89  8  1 24 48 98  7 15 72
+Card 200: 86 18 84 48 80 11 30 72  1 88 | 16 48 55 32 41 51 18  2 76 72 81 84 58 22 88 27 11 89  8 66 30 53 93 20 19
+Card 201: 35 12 66 89 38 67 14 64 51  7 |  6 88 40 49 86 96 47 67 70 71 23  7 32 42 12 51 30 81 20 74 28 34 35 14 15
+Card 202: 89 13 72 16 67 26 37 46 66 33 | 56 95 63 93 67 97 44 74 83 60 36 78 30 45 87 24 90 70 99 88 80 48 82 68 54
+Card 203: 94 55 82 24 41 48 28 14 42 80 | 28 22 78 14 80 41 42 58 48 13 44 57 61 55 15 47 53 11 21 19 29 82 63 65 94
+Card 204: 54 66 41 71  2 91 73 85 78 69 | 24 82 41 38 45 91  4 68 77 18 54 78 85 73 71  2 69 44 76 80 63 89  9 34 66
+Card 205: 76  2 81 21 16 64 10  6 30 45 | 72 38  8 84 64 21 81 45 69  3 22  5 60 23 18 63 74  9  6 29 82  4 46 30 16
+Card 206: 62 17 63 99  1 31 48 89 22 53 | 28 74 78 47 48 97 73 31 68 23 42 14  2 99 49 37 39  8 35 64 66 92 44 54 11
+Card 207: 69 76 21 35 49 91 77 75 72 53 | 88 57 58 16 91 84 21 99 53 70 19 29  3 56 55 22 49 41  1 72 10 35  9 20 60
+Card 208: 33 97 67 76 69 63 13 41 54 21 | 84 69  9 11 21 50 12 45 97 67 54 42 18 63 62 81 96 33 31 95 26 48 17 68 76
+Card 209: 66 35  6 71 82 16 14 97 68 50 | 58 50 82 71 97 90 96 49 16 84 91 21 98 63 76 31 65 51  1 80 52 30 47 93 33
+Card 210: 56 53 62 97 78 68 27 16 50 10 | 48 71 80 87  8 39 22  9 53 58 54  1 11 14 96  6 41 65 37 34 98 17 85 24 20
+Card 211: 52  6 85 59 80 96 77 26 65 36 | 38 77 86 29 98 27 58 51  8 75 87 50 63  2 82  1 41 92 97 53 33 14 16 93 49
+Card 212: 82 69 16 77 49 12 19 29 30 31 | 42 81 22 94 32 78 61 29 11  1 64 87 19 57 88 82 24  8  7 46  5 28 30 77 26
+Card 213: 71 48 25 24 37 40 77 88 44 74 | 51 92 62 34 33 93 54 78  6 25 10 96 70 63 81 82 85 20 48 12 99 40 86  8 58
+Card 214: 12 43 97 95 19 39 98 13 41 93 | 69 89 10 36 50 20 51 33 67 88 73 59 81 29 17 34 85 28 92 55  5 63 79 72 52
+Card 215: 21 31 62 69 74 97 40 45 20 35 | 25 18  1 52 86 84 68 44 15 47 91 99 57 87 98 17 66 56 73 42 33 93 30  8 95
+Card 216: 94 71 33 51 86 70 60 78 12 17 | 98 68 80 56 47 53 41 55 70 37 46 43  8 22 74 48 62  9 10 65  7 60 39 29 97
+Card 217: 70 98 21 38 77 68 67 39 45 72 | 63 57 37 21 94 64  8 96 69 80 84 25 71 26 83 99 81 31 48 42 41 73 54 60 22
+Card 218: 92 44 79 17 16 34 55 78 19  9 | 52 39 85 98 93 46 21 91 20 45  1 89 66 27  4 88 99 41 86 72 38 40 84 81 69
\ No newline at end of file
diff --git a/2023/05/05.incomplete.py b/2023/05/05.incomplete.py
new file mode 100644
index 0000000..11ed502
--- /dev/null
+++ b/2023/05/05.incomplete.py
@@ -0,0 +1,3 @@
+with open("input.txt") as f:
+	text = f.read()
+
diff --git a/2023/05/input.txt b/2023/05/input.txt
new file mode 100644
index 0000000..0132518
--- /dev/null
+++ b/2023/05/input.txt
@@ -0,0 +1,250 @@
+seeds: 28965817 302170009 1752849261 48290258 804904201 243492043 2150339939 385349830 1267802202 350474859 2566296746 17565716 3543571814 291402104 447111316 279196488 3227221259 47952959 1828835733 9607836
+
+seed-to-soil map:
+3680121696 1920754815 614845600
+1920754815 3846369604 448597692
+193356576 570761634 505124585
+2369352507 2535600415 31531965
+2400884472 2567132380 1279237224
+0 459278395 111483239
+698481161 97868205 361410190
+1059891351 0 15994868
+111483239 15994868 81873337
+
+soil-to-fertilizer map:
+1633669237 1273301814 72865265
+2398515176 2671190790 99210785
+2397916384 3018946373 598792
+4034325916 3061716397 20017393
+3298612516 3793795301 14249501
+4030007411 3051046904 2833129
+1906984482 224872691 14620134
+864506893 1590633724 149044542
+1029530319 442871336 36727018
+1921604616 770934113 68546178
+3560536321 3114405501 28822192
+1019762634 1263534129 9767685
+3852235341 3579014714 60339892
+2385228698 1577946038 12687686
+2234322470 239492825 150906228
+0 170310676 54562015
+3208946111 3808044802 89666405
+1209615399 839480291 424053838
+4032840540 4041982568 1485376
+2497725961 2174737461 293042810
+2002543511 1346167079 231778959
+3312862017 3475611771 103402943
+318739997 1739678266 354749094
+1013551435 3012735174 6211199
+4014277153 4160859076 15730258
+3589358513 3143227693 230682158
+1990150794 2467780271 12392717
+3051046904 3081733790 32671711
+3820040671 3761600631 32194670
+148429321 0 170310676
+673489091 2480172988 191017802
+1066257337 627576051 143358062
+2790768771 2770401575 242333599
+3091554979 4043467944 117391132
+3416264960 3897711207 144271361
+3912575233 3373909851 101701920
+4072291714 3639354606 104297620
+3083718615 3053880033 7836364
+54562015 3019545165 13557205
+1759006785 479598354 147977697
+68119220 2094427360 80310101
+1706534502 390399053 52472283
+4054343309 3743652226 17948405
+
+fertilizer-to-water map:
+0 1095885172 129797665
+2661548513 1044284418 17872363
+3282164642 3678907615 214830258
+1440687421 2218635146 325889720
+3496994900 4208791298 25912548
+3253828209 4136945159 5561683
+1797056017 864689597 109403664
+3259389892 4186016548 22774750
+2578517508 1225682837 83031005
+3193832718 3618912124 59995491
+3695649169 3214450646 211194594
+820325042 974093261 70191157
+1284591017 1074888739 20996433
+2929761569 3893737873 85668135
+1305587450 2605461705 73959171
+2168339930 1062156781 12731958
+2465234843 2135490203 52666067
+3522907448 4108091872 882860
+3523790308 4255675252 39292044
+2517900910 1308713842 60616598
+3563082352 3176039879 38410767
+3015429704 3979406008 128685864
+1913427402 2131043562 4446641
+2235159285 1419841841 190190495
+3673886186 4108974732 21762983
+891504291 1610032336 393086726
+3927815169 3425645240 193266884
+4121082053 3002154636 173885243
+2084864581 2004107154 83475349
+1917874043 557612753 69524983
+890516199 2003119062 988092
+766355924 2551492587 53969118
+1379546621 0 61140800
+3187625274 4130737715 6207444
+528804063 627137736 237551861
+1987399026 230411125 97465555
+1906459681 2544524866 6967721
+2184647884 1369330440 50511401
+2425349780 2091158499 39885063
+2181071888 2087582503 3575996
+3144115568 4142506842 43509706
+1766577141 2188156270 30478876
+359533738 61140800 169270325
+129797665 327876680 229736073
+3906843763 4234703846 20971406
+3601493119 2929761569 72393067
+
+water-to-light map:
+2375927917 1595026882 126334140
+1307603095 818620477 43777869
+2050676589 1855896418 112224406
+3618302244 2909504698 119958941
+3078570200 3088215627 6211083
+3084781283 3094426710 141266337
+524666822 53020621 149058240
+673725062 862398346 147671362
+2364320682 2577001713 11607235
+1941578413 1584221500 10805382
+2162900995 2536766467 40235246
+162015400 237365123 4480592
+821396424 241845715 141336168
+166495992 1138498800 212882164
+4277433486 4220367555 17533810
+3226047620 2229635217 307131250
+2909428734 1968120824 34606070
+1885573816 3954749082 56004597
+2711875933 2868267590 41237108
+0 726306378 92314099
+2944034804 1721361022 134535396
+1584221500 3392008740 301352316
+962732592 34415039 18605582
+2235705153 2101019688 128615529
+4252936467 4237901365 24497019
+92314099 202078861 35286262
+981338174 400041457 326264921
+379378156 1010069708 128429092
+3591930858 3693361056 26371386
+3785017329 3719732442 235016640
+2502262057 4010753679 209613876
+3533178870 3029463639 58751988
+3738261185 2821511446 46756144
+4020033969 2806534555 14976891
+1952383795 2002726894 98292794
+127600361 0 34415039
+2753113041 3235693047 156315693
+507807248 383181883 16859574
+2203136241 4262398384 32568912
+4035010860 2588608948 217925607
+
+light-to-temperature map:
+2137189745 1335050925 100355790
+639139367 2440321747 987829
+1663612748 1778059435 153830272
+1122754252 1950103191 82536600
+1929621334 1199531530 135519395
+1286703174 2032639791 207137687
+245313533 981575774 217955756
+2597564380 2824691125 293777778
+895004176 331442633 25226735
+1493840861 236388681 616173
+1494457034 764560381 107637728
+1817443020 1435406715 112178314
+1205290852 356669368 33552643
+474799702 0 164339665
+2341054397 2260378974 100255179
+1043066658 2360634153 79687594
+125852143 390222011 119461390
+3924383937 3130691909 13614218
+2467721984 3747288823 76649669
+2065140729 164339665 72049016
+920230911 1673437172 104622263
+640127196 509683401 254876980
+1024853174 1931889707 18213484
+2331983314 2251307891 9071083
+2237545535 237004854 94437779
+3912160931 3118468903 12223006
+1238843495 933716095 47859679
+3326002417 3517222025 230066798
+3556069215 3144306127 241363224
+3797432439 4180238804 114728492
+1602094762 872198109 61517986
+2544371653 4127046077 53192727
+2891342158 3823938492 303107585
+463269289 2239777478 11530413
+3194449743 3385669351 131552674
+3937998155 2467721984 356969141
+0 1547585029 125852143
+
+temperature-to-humidity map:
+2687600833 2313887435 187105587
+3281196981 2291603041 22284394
+1771250828 1899269239 314167725
+784031720 478456148 306959384
+2605226464 1771250828 58348072
+2085418553 3793564740 111907603
+1090991104 785415532 575136195
+3437652344 1829598900 69670339
+2874706420 2500993022 389039942
+3303481375 3905472343 134170969
+305575572 0 478456148
+3263746362 2890032964 17450619
+2527060387 2213436964 78166077
+2428623843 3695128196 98436544
+2663574536 4270940999 24026297
+3507322683 2907483583 787644613
+2197326156 4039643312 231297687
+0 1360551727 305575572
+
+humidity-to-location map:
+1919184105 1156349110 51114849
+4031284281 3411510751 25609498
+0 171183359 79004094
+1253227229 2072782209 122019778
+4056893779 3437120249 136289693
+3402931364 4156827458 101778985
+84557792 1207463959 134801591
+635909965 1371746366 266495395
+4029464617 4127764171 1819664
+4193183472 2857352625 101783824
+1375247007 2200355685 41445634
+1996492203 0 171183359
+3601595563 3699895117 427869054
+2218993186 1133540977 22808133
+3217192942 2959136449 140385316
+2987922009 4258606443 9236491
+2628749093 2543337773 86365212
+2167675562 369831582 51317624
+3504710349 2446452559 96885214
+902405360 421149206 108869392
+3357578258 2811999519 45353106
+1196458443 1638241761 56768786
+1178674352 693035436 17784091
+1970298954 530018598 26193249
+2868723842 3099521765 91954544
+1522874936 895259169 18612073
+2841599480 4267842934 27124362
+1880563756 1695010547 38620349
+1011274752 913871242 137918784
+219359383 556211847 136823589
+1785350971 250187453 95212785
+2960678386 4129583835 27243623
+540622614 1977494858 95287351
+356182972 710819527 184439642
+1498443592 345400238 24431344
+1416692641 1051790026 81750951
+1541487009 1733630896 243863962
+79004094 2194801987 5553698
+1149193536 1342265550 29480816
+2997158500 3191476309 220034442
+2715114305 3573409942 126485175
+2446452559 2629702985 182296534
\ No newline at end of file
diff --git a/2023/06/06.py b/2023/06/06.py
new file mode 100644
index 0000000..405c811
--- /dev/null
+++ b/2023/06/06.py
@@ -0,0 +1,36 @@
+with open("input.txt") as f:
+	lines = f.readlines()
+	times, distances = lines
+	times = [int(t) for t in times.split()[1:]]
+	distances = [int(d) for d in distances.split()[1:]]
+	races = zip(times, distances)
+
+def distance(t, t_max):
+	"""
+	Calculate the distance traveled if you charge for t seconds
+	"""
+	return (t) * (t_max - t)
+
+def part1(races):
+	answer = 1
+	for race in races:
+		t_max, d_max = race
+		results = [
+			(t, distance(t, t_max))
+			for t in range(t_max)
+			if distance(t, t_max) > d_max
+		]
+		answer *= len(results)
+	return answer
+
+print(part1(races))
+
+def part2(times, distances):
+	t_max = int("".join(str(t) for t in times))
+	d_max = int("".join(str(d) for d in distances))
+	for t in range(t_max):
+		if distance(t, t_max) > d_max:
+			break
+	return t_max - 2*t + 1
+
+print(part2(times, distances))
\ No newline at end of file
diff --git a/2023/06/input.txt b/2023/06/input.txt
new file mode 100644
index 0000000..4f96786
--- /dev/null
+++ b/2023/06/input.txt
@@ -0,0 +1,2 @@
+Time:        48     87     69     81
+Distance:   255   1288   1117   1623
\ No newline at end of file
diff --git a/2023/07/07.py b/2023/07/07.py
new file mode 100644
index 0000000..250238d
--- /dev/null
+++ b/2023/07/07.py
@@ -0,0 +1,156 @@
+from collections import defaultdict, Counter
+
+with open("input.txt") as f:
+	hands = f.read().split("\n")
+	hands = [(hand.split()[0], int(hand.split()[1])) for hand in hands]
+	
+
+def rank(hands):
+	ranked = defaultdict(list)
+	for hand in hands:
+		r = get_rank(hand)
+		ranked[r].append(hand)
+	return ranked
+
+def get_rank(hand):
+	c = Counter(hand[0])
+	counts = c.most_common(2)
+	# extract counts
+	first = counts[0][1]
+	second = counts[1][1] if len(counts) == 2 else 0
+	# discriminate based on counts
+	d = (first, second)
+	match d:
+		case (1,1):
+			return "HC" # high card
+		case (2,1):
+			return "1P" # one pair
+		case (2,2):
+			return "2P" # two pair
+		case (3,1):
+			return "3K" # three of a kind
+		case (3,2):
+			return "FH" # full house
+		case (4,1):
+			return "4K" # four of a kind
+		case (5,0):
+			return "5K" # five of a kind
+
+def order(hand: str):
+	"""
+	Convert to base-15 for proper sorting
+	"""
+	# A = ten
+	# B = jack
+	# C = queen
+	# D = king
+	# E = ace
+	return hand.replace(
+		"A", "E"
+	).replace(
+		"K", "D"
+	).replace(
+		"Q", "C"
+	).replace(
+		"J", "B"
+	).replace(
+		"T", "A"
+	)
+
+def part1(hands):
+	ranked = rank(hands)
+	ranked_hands = []
+	ranked_hands += sorted(ranked["HC"], key=lambda hand: order(hand[0]))
+	ranked_hands += sorted(ranked["1P"], key=lambda hand: order(hand[0]))
+	ranked_hands += sorted(ranked["2P"], key=lambda hand: order(hand[0]))
+	ranked_hands += sorted(ranked["3K"], key=lambda hand: order(hand[0]))
+	ranked_hands += sorted(ranked["FH"], key=lambda hand: order(hand[0]))
+	ranked_hands += sorted(ranked["4K"], key=lambda hand: order(hand[0]))
+	ranked_hands += sorted(ranked["5K"], key=lambda hand: order(hand[0]))
+	answer = sum(
+		[
+			hand[1] * (rank + 1)
+			for rank, hand in enumerate(ranked_hands)
+		]
+	)
+	print(answer)
+
+part1(hands)
+
+### Part 2
+
+def order2(hand: str):
+	"""
+	Convert to base-15 for proper sorting
+	"""
+	# A = ten
+	# B = jack
+	# C = queen
+	# D = king
+	# E = ace
+	return hand.replace(
+		"A", "E"
+	).replace(
+		"K", "D"
+	).replace(
+		"Q", "C"
+	).replace(
+		"J", "1"  # jokers are worth less than 2
+	).replace(
+		"T", "A"
+	)
+
+def get_rank2(hand):
+	c1 = Counter(hand[0])
+	c2 = Counter(hand[0].replace("J", ""))
+	jokers_count = c1.get("J") or 0
+	counts = c2.most_common(2)
+	if not counts:
+		counts = [('', 0),('', 0)]  # prevent index error when 5 jokers
+	# extract counts
+	first = counts[0][1] + jokers_count  # convert jokers to highest-scoring card
+	second = counts[1][1] if len(counts) == 2 else 0
+	# discriminate based on counts
+	d = (first, second)
+	match d:
+		case (1,1):
+			return "HC" # high card
+		case (2,1):
+			return "1P" # one pair
+		case (2,2):
+			return "2P" # two pair
+		case (3,1):
+			return "3K" # three of a kind
+		case (3,2):
+			return "FH" # full house
+		case (4,1):
+			return "4K" # four of a kind
+		case (5,0):
+			return "5K" # five of a kind
+		
+def rank2(hands):
+	ranked = defaultdict(list)
+	for hand in hands:
+		r = get_rank2(hand)
+		ranked[r].append(hand)
+	return ranked
+
+def part2(hands):
+	ranked = rank2(hands)
+	ranked_hands = []
+	ranked_hands += sorted(ranked["HC"], key=lambda hand: order2(hand[0]))
+	ranked_hands += sorted(ranked["1P"], key=lambda hand: order2(hand[0]))
+	ranked_hands += sorted(ranked["2P"], key=lambda hand: order2(hand[0]))
+	ranked_hands += sorted(ranked["3K"], key=lambda hand: order2(hand[0]))
+	ranked_hands += sorted(ranked["FH"], key=lambda hand: order2(hand[0]))
+	ranked_hands += sorted(ranked["4K"], key=lambda hand: order2(hand[0]))
+	ranked_hands += sorted(ranked["5K"], key=lambda hand: order2(hand[0]))
+	answer = sum(
+		[
+			hand[1] * (rank + 1)
+			for rank, hand in enumerate(ranked_hands)
+		]
+	)
+	print(answer)
+
+part2(hands)
\ No newline at end of file
diff --git a/2023/07/input.txt b/2023/07/input.txt
new file mode 100644
index 0000000..e84bbe2
--- /dev/null
+++ b/2023/07/input.txt
@@ -0,0 +1,1000 @@
+467K3 95
+JK5QK 838
+44664 725
+8QAK3 134
+53A3A 945
+7QQJ7 164
+J8J89 236
+38QAT 166
+Q7944 755
+35333 526
+5J787 482
+4K769 829
+37773 960
+QJ78K 282
+3J39Q 326
+TJ2QQ 255
+J4338 337
+QK3KK 187
+5K8KQ 380
+93785 500
+795JT 382
+Q399Q 391
+99J99 206
+T5555 716
+Q7Q8Q 990
+QQJJQ 346
+34344 332
+K4J44 763
+2A36T 974
+77757 461
+55446 907
+99JJ9 962
+K29KQ 177
+99666 961
+688KK 249
+5A558 767
+TT6K2 630
+5Q4A4 872
+JTKQ4 969
+A5AAA 421
+JAA4Q 680
+55K69 29
+96ATJ 144
+3Q462 523
+73646 203
+5A96A 550
+K84TQ 4
+7278T 406
+KQQT5 395
+54567 197
+T53TA 355
+AQA99 601
+88KQQ 968
+55J5J 727
+73TJ9 466
+99799 843
+324QQ 36
+84AAA 190
+7J366 511
+JK938 667
+KKQJQ 762
+722J4 110
+9TKT9 84
+33JJ3 458
+6K444 498
+4279T 23
+K5T28 467
+3KKKK 871
+KQAQK 492
+44AKK 865
+5638T 932
+A89AK 24
+29K92 403
+A69K6 596
+KKK84 400
+QA748 616
+55AAA 504
+9255Q 684
+56646 330
+6J6J7 222
+A59J5 370
+3AA4J 940
+K9K38 302
+2AK58 735
+68K4K 422
+95599 324
+8K88J 987
+845Q5 478
+72KQ7 263
+8TJ83 751
+96TTQ 935
+AQ6AQ 445
+QKQQA 321
+A5644 769
+QQ5QJ 801
+AA574 436
+333QQ 605
+J5982 71
+QT8A5 956
+2Q46A 982
+J3773 317
+3KK93 485
+3A76A 926
+338JJ 502
+8KAQ6 737
+KKK28 520
+644Q5 850
+2T6TT 397
+34JA7 549
+743J7 747
+34843 103
+6KKKK 204
+Q2J22 548
+JKKKK 995
+42446 704
+8732A 238
+TT9J2 109
+4758T 33
+TTTT7 914
+787J7 647
+59T59 62
+9Q989 985
+T886J 554
+543QJ 75
+77637 857
+8888T 83
+92T52 939
+9832A 620
+3TT39 81
+84353 18
+A8Q8A 824
+T4597 425
+K3635 949
+KAAA2 320
+42224 243
+AA8A3 565
+KK63K 114
+TT3TT 133
+33T77 141
+J868J 774
+422QT 369
+24T2K 344
+KK3Q3 8
+424J2 967
+8J6J6 666
+K6927 887
+36666 366
+78KT8 867
+AT66T 761
+72AT6 155
+2Q6QQ 440
+64J64 594
+A2JT8 578
+QQAJQ 383
+8Q333 963
+9A22A 503
+K86K6 55
+66899 899
+4744J 210
+72K54 860
+KQKK4 723
+6TK62 607
+9J955 652
+A45A5 766
+4J333 744
+5K555 277
+7777J 657
+7853A 147
+75QQQ 356
+T6T93 818
+8T342 643
+498A7 232
+96A2A 471
+J55KK 583
+KJ7Q6 849
+36A36 707
+23655 290
+K444K 371
+5858K 688
+KJK8J 258
+Q3699 910
+79T64 864
+KAQ44 536
+T4TJ5 239
+8KK88 589
+42AA4 127
+QQ4Q4 746
+J9868 472
+95493 170
+JK6T5 428
+KAATA 775
+TK3KT 886
+36633 858
+67767 590
+86A2Q 175
+J7J7J 659
+7J457 796
+55335 65
+9288A 664
+88899 499
+7TKTA 327
+6QJ36 701
+K7KQK 943
+QQAQ2 681
+Q9948 444
+85923 335
+82832 283
+TQ5QT 92
+TK8A3 191
+A957K 614
+8877T 623
+5JTT9 253
+2K626 248
+757Q7 817
+JJ6T5 827
+KJ796 367
+895AQ 608
+AA666 950
+TT4T2 135
+QQQKK 600
+A9KK9 925
+49AA7 972
+73TAT 60
+5K49Q 74
+AAJ6A 753
+42222 470
+J99KK 722
+A9AA9 514
+36636 581
+7T5Q9 690
+TTK7K 496
+277J4 665
+782TQ 662
+3AK57 734
+29KJ7 343
+72726 378
+67656 541
+22A29 229
+JJ5AA 336
+QTTJQ 979
+J73K6 473
+55AK9 19
+46466 610
+8AAK4 408
+27227 181
+55525 214
+444Q4 505
+65K55 506
+KJ84T 529
+82225 250
+59TKA 32
+83J53 178
+599K4 988
+55TTT 759
+59999 431
+T44A4 828
+A888T 874
+J3533 619
+9979K 981
+KK998 101
+64965 799
+9A999 934
+9A299 942
+5KKKA 862
+4A865 802
+64QQ4 837
+ATATA 98
+6TJQ7 807
+K6997 585
+57T5T 457
+JT66T 938
+JJQK9 105
+JJ278 804
+JJ5AQ 661
+Q2597 930
+AAQAQ 31
+5A974 427
+TTQQK 868
+7KT7T 730
+K4999 112
+A8KAQ 672
+6AQQ6 447
+32J32 297
+4QA2J 915
+T2Q3Q 712
+34KQT 121
+98379 617
+487QK 44
+55TAJ 909
+6686T 28
+22922 805
+T846A 556
+J5A6A 399
+55Q55 347
+8488J 593
+JKKTT 708
+8288J 768
+JKK66 1
+22999 586
+85398 334
+77KK6 782
+K34JJ 674
+39K4K 653
+QA6K3 720
+78878 715
+QA9Q4 745
+3333J 226
+3TT32 686
+44999 401
+A2J32 531
+Q65A9 905
+J6AA7 194
+8J888 163
+7JT74 624
+JKKAK 568
+239J2 919
+AA4AA 52
+222JJ 184
+546AQ 894
+K2KK9 631
+45TQ2 375
+TTTT2 146
+26Q77 989
+9866K 851
+T3332 292
+66469 758
+48J48 889
+4A4QA 185
+J6626 68
+46T4A 660
+83T52 151
+7T7T7 407
+73758 479
+63A44 291
+66QT6 875
+6645J 738
+94Q97 638
+T5KT5 411
+TJ3J3 866
+QT6TQ 842
+A448A 433
+556JJ 533
+T3TKT 161
+6JT43 265
+T5TTT 393
+K7KK4 386
+53J6A 845
+K7777 756
+63399 685
+J85AQ 87
+88585 906
+QJTQQ 270
+TKKTK 131
+3J3JQ 797
+K7Q34 836
+K4499 362
+53555 651
+9888T 435
+2J299 557
+8J999 964
+96TQ2 293
+8KTJ8 137
+KA6Q7 442
+2J6KQ 900
+446A4 294
+AJAA3 671
+Q427T 116
+9JQ99 398
+59929 392
+822J8 192
+Q92Q7 420
+KKJK6 171
+TAJ37 487
+8A2J5 10
+22TTT 220
+33623 111
+7Q7AJ 491
+A3JJ2 650
+J4J23 299
+396KA 896
+K3K3J 486
+QKKKK 20
+9A2AJ 713
+746K4 56
+96996 885
+JTK77 312
+Q8888 826
+3T4AJ 771
+97977 219
+9354K 788
+5Q5KK 455
+T3734 325
+TK26A 156
+7AAAA 924
+KJ622 183
+5QTAQ 642
+AAAAQ 488
+TTTJT 953
+Q2222 145
+4A9TJ 245
+TT3JK 588
+J5555 284
+94AQT 193
+97325 196
+74A8J 37
+24AAA 847
+22A32 381
+4KJ59 542
+T6QK4 673
+77877 922
+Q2Q66 49
+66688 792
+9T9T9 918
+J8878 552
+6A63A 221
+AA559 780
+9T47Q 300
+AKKA4 501
+33QQ4 64
+6K375 965
+T7Q43 82
+3689Q 569
+A6A3A 462
+T5Q3J 689
+49Q99 895
+KA262 490
+87497 13
+4449A 973
+92453 430
+5QA5A 149
+69666 247
+K6AJA 992
+A4444 729
+44494 298
+J5993 927
+26662 555
+4J6A5 613
+KK77K 855
+73222 315
+2A2J2 719
+K7KT7 43
+98T64 998
+23282 528
+449T7 130
+6QK24 424
+AAAA3 179
+JA42K 53
+6A6KK 211
+J55JJ 742
+J5T93 304
+TQA23 358
+8J257 240
+39393 522
+68A38 450
+QQAK8 970
+J77QT 341
+T68AA 242
+99933 310
+425KA 69
+99A9J 535
+J35JK 113
+4A37T 360
+63333 791
+78J5T 34
+46T46 883
+T8JQ3 50
+KKKK5 519
+T29J8 640
+KKK88 646
+3A32A 228
+7A77T 57
+2QQ2J 971
+7Q777 438
+5J545 21
+T4AAJ 432
+QQJAA 570
+KJ79J 853
+T3JKA 359
+676K6 724
+4TATT 931
+JKKT2 629
+J338T 469
+9939J 743
+85A93 241
+945TA 363
+5JK5A 493
+Q5JT5 815
+76378 12
+T3T53 157
+JAA24 732
+55757 200
+K727J 115
+259KK 510
+2J739 786
+288AA 598
+QJ233 100
+QQ56Q 25
+6333J 702
+86797 839
+47T77 361
+K4823 3
+6K446 54
+94J75 543
+QQQQA 980
+55J66 923
+AQT55 645
+55593 314
+J6776 379
+J23T6 102
+7K7K7 911
+JQ5A3 227
+KK66K 279
+AJJAQ 396
+JA252 39
+555KK 714
+KJ56K 637
+KJ64K 928
+6Q66Q 85
+TJTT2 273
+K634J 854
+66662 576
+6Q6J6 212
+KAAT2 696
+76663 793
+T3AQ3 632
+2J994 966
+TTTJA 63
+4QJQ4 165
+AAAJ8 331
+TT666 158
+2KKA2 453
+54444 563
+7KK88 675
+47777 832
+6JJQ9 475
+55275 876
+63489 794
+7K7Q3 208
+6J585 820
+3Q89T 524
+92AK2 6
+66JK9 655
+7J4KQ 139
+666A5 711
+4JTK9 117
+88AJA 368
+34T5T 602
+9933J 278
+97Q63 448
+A5555 892
+QJ7A2 726
+5KKJ2 917
+A5238 108
+33343 663
+K33T3 285
+6Q655 937
+38383 880
+47834 252
+QJA49 692
+A6926 547
+48Q8Q 288
+72J86 107
+5T5T9 449
+2JK25 305
+667T6 136
+7JJ88 429
+Q5KQK 394
+ATAAA 952
+66949 296
+TT222 933
+AQ4AK 948
+KQJJ7 209
+3465K 709
+74775 126
+8TJ6T 402
+82Q3J 816
+Q7855 354
+JJ3KK 9
+22223 351
+2K7TA 831
+555AA 984
+83539 168
+444T4 140
+4A8Q4 693
+JA8AK 890
+29QTQ 308
+KJKKJ 389
+A86AK 649
+J898T 14
+A6AAA 352
+2J222 176
+A4669 958
+333K8 635
+T4269 844
+J4Q54 603
+44AAA 349
+QT575 413
+AA2J2 859
+7T395 648
+K3Q68 251
+7T2T2 790
+QQQ33 446
+428A4 879
+36J2Q 434
+69955 991
+7J5A4 812
+QQ445 789
+7A69A 93
+4K979 537
+K6K73 518
+45555 79
+45A6A 833
+KAAA5 307
+48887 80
+KK2KK 38
+ATJJ5 11
+5K325 388
+42TJA 353
+66J3T 611
+A758A 728
+TJT77 644
+5JQQ2 898
+9KQT2 404
+K42A2 303
+Q6QTA 124
+58Q5J 670
+K6JTJ 409
+T3333 731
+J73JK 463
+4A288 452
+79AAJ 41
+2K7T7 15
+7AAA7 888
+44J94 286
+8938K 328
+TKKKA 633
+22JT7 577
+QQQQ7 683
+66665 89
+T72J4 955
+J66J6 877
+99433 509
+9K92J 776
+JQ7Q2 78
+A6T2Q 122
+69Q6A 153
+J5JQ5 218
+25KAJ 416
+7A47A 513
+62T26 1000
+96449 281
+KKTKK 977
+35642 921
+9K4K9 778
+J4244 993
+JJAAA 573
+7AA27 626
+A685T 376
+4JA9A 957
+T886T 267
+737J7 538
+999KK 579
+75KK7 76
+Q737Q 809
+Q3393 901
+2734Q 754
+J2T9K 216
+89859 695
+63343 35
+7JK7K 700
+8828A 765
+29AT5 615
+Q838Q 410
+A3235 622
+TKJKQ 810
+45454 224
+77737 869
+JA9T9 333
+2772K 276
+5535A 350
+TT5QT 821
+46JKJ 986
+9T8KK 125
+6JAJ7 595
+74647 464
+499A4 612
+4KT7A 22
+J3233 891
+44555 959
+8KQ8A 271
+33443 182
+37373 27
+88828 997
+Q2Q22 189
+3635A 373
+T66TT 717
+A4469 207
+2T2KT 749
+4244Q 90
+9234T 348
+33TJ3 289
+QAA63 562
+2A2A2 199
+J6JK7 929
+TT99J 234
+T3JQ2 798
+65Q66 154
+JTTJT 975
+22699 705
+Q6Q6Q 618
+99929 811
+389J6 920
+585Q5 852
+A2255 477
+TJTJJ 30
+K5AK5 772
+2QQ3Q 323
+6888J 454
+7J8K3 609
+J463J 572
+32323 223
+686J6 534
+Q25J4 47
+29996 882
+TTQ8Q 944
+42265 480
+2JQ96 287
+QQ868 517
+AK447 994
+8J3Q3 897
+42QK5 489
+A8A88 384
+3AT3A 941
+44T8T 88
+QQ8QQ 787
+488TJ 996
+6KK66 313
+2J262 764
+K6KK5 275
+K572T 893
+7T7QQ 215
+76965 773
+59575 800
+586QJ 309
+QQQQ4 721
+9A9A4 40
+8JJJJ 128
+QATA6 162
+K6TAQ 415
+95JJ8 72
+9TQ97 319
+2AK22 61
+T2TJ2 465
+T5274 195
+Q4587 266
+J97QT 441
+52384 17
+Q7J77 414
+QQQ6Q 903
+4444J 532
+QQKQQ 904
+QJ467 16
+25525 785
+ATA8A 205
+65542 261
+9QKKK 512
+48844 231
+JTJAK 99
+QJ8AT 571
+68A88 878
+5353J 94
+2Q33Q 311
+KJJ69 946
+J83A8 634
+QQT6Q 884
+KK74J 374
+77474 781
+38888 527
+29457 329
+52452 73
+2K776 256
+QJQQQ 268
+J24K6 913
+42K88 861
+29QQQ 733
+4J546 806
+K2K98 841
+Q4644 697
+44K94 834
+QAAQT 830
+J666T 750
+3T335 437
+9594T 694
+8QQQ3 682
+88887 269
+J3KKQ 641
+99993 551
+2K437 699
+75775 710
+5963J 870
+TTKT5 582
+2Q82A 439
+KJ4Q9 301
+Q3558 152
+32333 999
+T77TT 599
+3T6JT 627
+2J3T5 560
+25442 86
+8888K 257
+5QJ45 96
+QQ7AA 658
+88JJ8 863
+98948 202
+2QJ3J 803
+J6488 66
+59559 160
+JJKK7 484
+7J223 254
+68889 364
+555J9 822
+KKAAA 525
+K7557 5
+3Q33A 814
+2384J 587
+KK8Q2 777
+494K2 426
+2TJ22 507
+QQQ2Q 698
+7229T 954
+JJ757 142
+2882A 530
+KKTQT 539
+72222 621
+99A5A 736
+22887 936
+3377Q 779
+6A6J6 740
+A7AAJ 840
+44JJ4 2
+QQTQT 51
+6666A 669
+T9279 908
+K9J7Q 856
+2AAAJ 748
+J3K25 947
+TT65T 377
+KK2K6 752
+K7KKK 150
+9J6J8 120
+72AK6 656
+TT6TT 757
+QQ9TT 412
+3AA3J 365
+84477 783
+KK4K2 591
+AK79J 654
+J77J7 951
+Q7664 606
+7QQ59 59
+J2725 795
+96989 417
+7TT64 387
+47JJK 91
+228AA 201
+AJJ63 902
+A5AKJ 123
+37Q33 741
+8J358 483
+Q88QQ 508
+43A33 340
+Q9QQQ 516
+232JT 148
+666J6 159
+38363 97
+42285 322
+4Q944 233
+TT4TT 342
+K8TQA 566
+KJKK2 213
+QJQJJ 339
+5K932 559
+86888 494
+2QQJQ 70
+7A772 167
+5659T 881
+T43A6 186
+A2Q22 739
+55K95 679
+2T5QQ 262
+47797 419
+52522 357
+2J734 597
+AA3Q3 678
+3Q9A3 567
+KJAAJ 813
+K8794 495
+7JT77 198
+4KT2A 564
+55QQ5 497
+5K558 272
+T2A25 318
+K58Q2 825
+7KKJK 628
+6A6A7 676
+J7T96 706
+A4A96 625
+6KTQ7 372
+JAAJ3 916
+99699 106
+Q7Q77 468
+8Q88J 545
+2A2J8 983
+777A7 246
+329TA 546
+38388 48
+KKKQQ 316
+KKKK8 460
+33K8Q 77
+A9A29 691
+8J859 237
+A9599 540
+23J67 390
+JT43J 668
+8J8JQ 338
+JQQQ8 456
+K9KKK 129
+8KJ8K 67
+7555Q 169
+9QJQ9 459
+7A8Q9 718
+7J765 760
+94744 173
+AA35A 264
+QKQQ5 423
+A6JJ9 819
+4AA44 848
+88385 180
+A4T7Q 259
+7J757 584
+A96T3 474
+JJJJJ 42
+9K372 604
+J333Q 118
+J7A37 451
+Q4447 515
+QQ77Q 274
+73333 553
+6747J 521
+J56K2 405
+KKJJQ 575
+QT86A 592
+75A73 476
+29925 295
+A778A 823
+AAAAJ 580
+TT99T 636
+QQ3JQ 235
+A8778 244
+K6638 784
+87Q5A 574
+99499 46
+AK7Q7 172
+KKK33 443
+38J88 345
+7976K 58
+59669 558
+6659J 217
+7557J 143
+5549K 306
+J3982 639
+J249A 677
+55955 418
+QQQQT 7
+77A47 770
+66K4K 104
+Q9T5A 976
+2673Q 230
+Q75TK 26
+JKJ9K 225
+9TAAT 188
+55JQA 119
+9Q9Q9 385
+24K42 260
+T9222 873
+99989 45
+88448 544
+T9784 808
+43454 846
+TA674 174
+3T3AT 687
+38929 561
+22QQK 912
+KQJQQ 978
+23223 481
+J7772 835
+3999Q 703
+74K44 280
+4K444 138
+KJ53K 132
\ No newline at end of file
diff --git a/2023/10/10.incomplete.py b/2023/10/10.incomplete.py
new file mode 100644
index 0000000..4f9440f
--- /dev/null
+++ b/2023/10/10.incomplete.py
@@ -0,0 +1,17 @@
+with open("input.txt") as f:
+	pipes = f.read().splitlines()
+
+def part1(pipes):
+	start = [
+	(i, j)
+	for i, line in enumerate(pipes)
+	for j, char in enumerate(line)
+	if char == "S"
+	][0]
+
+	distance = [([0] * len(pipes[0]))] * len(pipes)
+
+	x, y = start
+	d = 0
+
+	
\ No newline at end of file
diff --git a/2023/10/input.txt b/2023/10/input.txt
new file mode 100644
index 0000000..d1ce0ab
--- /dev/null
+++ b/2023/10/input.txt
@@ -0,0 +1,140 @@
+F|7.F|-F|777FJ7FF77-F777F7F|7..FF-77FF|--JJFJ7-J-F77.FF-F7F-F-FL7|--7---F.FL-7-7J.FFF7|-FFJ7.7.LF-LLJ77|F7FJJ-JFF|-.|FFF7F7..FFL7F-FJ-7-LL77
+|-J-JL.LL7-7-J|FLJLJ.L|7|F-J-|-FL7L-7-J-LJFJ-77FF-LL-FJFLLJ7L.L.||..7FJ7J7FJFL-LJFLJL--.|7JL||FLJLL|JLJ.LL7J.FF|-J.L---JJ.F77L-LLF7L|F77LJ|J
+LLJ|FJF-F--7LFL-J|7F--F--JJ|-JF-7|F-JJJ..FLJ.LFJJ.FJ-|J|J7.JFFJ-7---LLJL7FJ.J-FL-FLF7|LLJJ|L-J--7JJ|77LJ.FJFFFJL7J7|-|-J.FL7JL|LLJL7L7JFF.JJ
+7-L-J7|LJJ-7-JLLF77J7.LF77LLJJL7|||F7J.|-FJ|FL7|-|7|JL7JLF|--JJJ|J7..|LL|J7-|FFJ|LJ.7--L|L7.L|F7.FF||L..FLJL-JF-JFLFF77.FFLLJL7F|F-J-L7JFJJ.
+-7JL|7L-||F7|F|JF-F---7|L77F|-FJLJ||L7-J7|7F7.L|7L|JL---7-|7LJ|-|.F7--.|.L-FJ7JJLL-7|LF-7F|FF77JF7JLJ7.|.|-|7J|.L-.|JL--FJ7--7|-FJ7|J|LLL--J
+L77JLJ-FJ-FJJ-|7JF77LF-7LL-F7FJF-7||FJF7L|J-J7JL--||FJJ-|..J..F-7--FJ|77.L7|L7-7..FL-.L7|-L|J|J.FJ7|F-FJ--.J7F-LFJ--J.FF|-7--7--|-F-FJ.LL7|J
+LLF7-7F7.-L|JLJ|.LJ-.F7|FF.||L-JFJ||L7F7L|J.L-77-77-JJ.-J77.F.L7|F|L77|L-7F--J|--LLJ|.F||J-LFLJFF7--|L|..|-|L|JFJ77|.L--77.LJ-JLL-7F|-7|LLL7
+|.||.F-...FLF-7L7-7FJ|FJ||FJ|F-7L7||FJ||F77.-7L||.|-|.LLL-7.F-7||J7-LJ77L||J--||.|JFFJF|L-7F7JF-J|7J|||-LL7|.|F7LJ-|.F7FL7F7J||LL7LF--77-L|7
+FFJ7.||.--7.JJF.7.F-J7|F7FL7LJFJFJ||L7|||L7.|L7|J-F777-|L7-7L7LJ|JL7-L-77L-.7L|7FF-|J|-L7FJ||F7.FLL77F-.FLLF7-||7LFF-LF|.|-J7FL-7|...-77F-LJ
+||L|7F7JJ|J...F.777JJL7||F7L-7|FJFJL7||||FJ7-F7||-||-F-J|..FLL7FJ7JF-7L|7-L--FJ||7-J.F7FJL7|L7LLJJ7LFJF|J7F|L-JL7-7|.|||FL7LJ7LJ-|-77.LFJ|..
+LJ7FJ-J|-JFF|-J7L-.|JFFJ||L--JLJFJF-JLJLJL7F7F7-7F||7|-F7-FFF7||F-7J-7-L|7J7.||F7.J|.||L7FJ|FJ|F|7LL-|7L---L--7FJJJF7F|JF-7--|7||||F-F-||L|7
+|.LL|J.L-JFLJF7|.|7.F-L7LJF--7F7L7|F----7FJ||||-F7||FF7F7F--JLJLJFJ||F.|J.LF-LFJL7JF-JL-JL-JL7-F.|JF-|F77F|||FJL77.-JF7.LF7LFJ-|7-||FL-|-JL|
+JFF-7.FFLFJ7-FLJ7L7F|7FL7FJF-J|L7LJL---7LJFJLJL7|LJL-J|||L----7F-J|FFJ--F77.|.L-7L7L-7F------JJ.FF77--J|7FF7FJF7L7-.LL--FJ|||L-LJ.LJ7.|J.L|J
+|FJJ|.---L-JJLL||L|LF-7FLJ7|F-JJL-7F---JF7|F---JL--7F-J|L7F-7FJL7J7LJL-L||L-7F7FL7L7L|L---7F7J-FF7F777F-7FJLJFJL-J7F77J7.L|F|J|LJFL7F7L-7-7-
+L77FJ-||7FF7---LJ-7.LJF7F-7LJF-7F-JL-7F7||||F7F7LF-JL7FJFJL7||F-JF77J||L||7LFJ|F7L7L7|F---J|L-7F|LJ|F7|FJL--7||F7F-J|F-77F-|J77LF|-JJJ.J7.LJ
+||LJ..L-LJJ-7-7L7.L.FF|||FJF7L7|L-7F-J|||||||LJL7L7F-J|FJJFJLJ|F7|L7F-7.|L7FJFJ||.L7||L--7||F-J-L-7LJ|||F7|FJL7|||F-J|FJJ-.|L-7-|L|.|L.L|77.
+F7-LJ7|JFL|7LFJ|L7.FF7|LJ|FJL-JL--J|-FJLJLJLJF--JFJL7FJ|F7L7F7||LJFJL7|-L7|L7||||F7|||F--JFJ|F7F7LL-7LJLJL7L7FJ|LJL--JL7J.-|-L--F-7F|--|J|7L
+J77F.JJ.J-7J-L7F77F7||L-7|L-------7|FJF------JF7|L-7||FJ|L7LJ|LJF-JF7||F7||FJL7|LJLJLJL-7|L7|||||FF7L7F7F-JL||FJF7F----J---J|.|7L7L7|.FLF|77
+FL-JF|FL-7.|7LLJF7||||LFJL-7F7F7F7|LJFJ-F--7-FJL7F-J|||L|FJFFJF7L-7|||||||LJF-JL---7F7F-JF-J||LJ|FJL7LJ|L-7L|||FJLJF7F7J.|-|FL.L--7FJ---|JL7
+FF7L-|L|.L|||.FFJLJLJL7L--7||||LJ|L7FJF7|F7L-JF-JL-7LJL7|L--JFJL7FJ|||LJ||F-J-F-7F7||LJF7L-7||F-JL-7|F-JF-JFJLJL7F7|LJL77FFJLL|.L.JJL-J7J-J|
+|-7FFJL|.|||..FL-----7L---JLJ|L-7L7|L7|LJ||F7FJJF-7|F7FJ|F--7|F7LJFJ|L-7|||F-7L7LJLJL--JL7FJ||L7F7FJ|L7FJF7L7F--J|||F--JF77L-7J.|L.|.LL|-7J7
+7F77|J7|F--FF-7JLF7F7L------7S77L7LJFJ|F-JLJLJF7L7|LJ|L7LJF-JLJL77L7|F-JLJLJFJFJF---7F---JL7LJFJ||L7|L|L-JL-JL7F7||||F-7||LL|LF--J.L7FL|L|-|
+L7|LJ|F7L.J.L7|FL|LJ|F7F----JFJF7L-7|FJL7F7F-7||FJL-7|FJF7L-7F-7L7FJ|L---7F-JFL7|F--JL----7|F7|FJ|FJ|FJF--7F--J|||||LJFJ||F7|F|F|FJLJ7.7J|LF
+F-FJLJLL---FFJL7LL-7LJ|L-7F-7L7|L--JLJF-J|||FJ||L--7LJL7||F7|L7L-J|FJF-7L|L--77LJL--7F----JLJ|LJFJL7|L7|F7LJF-7|||LJF-JFJL--7-JL77||.|7LLL7L
+FJ|J-|J-FJ.FL-7|-F7L-7|F7LJFJFJL--7F-7L-7||||7|L7F7L-7FJ||||L7L7F7|L7L7|FJF--JF7-F7FJL--7F-7FJF-JF7|L-JLJL7FJFJ|||F7L--JF7F-JFLLJ|L-.|FF.FJJ
+L7.LF777FFF7F7||.|L--J|||F7L7|F7F7LJJ|F7||LJL7L7|||F7|L7|LJL7L7||||FJFJ|L7|7F7||FJLJF---J|FJL7|F7||L-7F---J|FJFJLJ|L----JLJF77--7-7.L-JLF|J.
+FJ7LJJL--LLFJLJL-JF--7LJLJL-JLJ|||LF-J|LJL-7FJFJ||LJ||FJL-7FJ.|||LJL7L7L-JL7|LJ|L--7L7F7FJ|F7|||LJL7FJL7F7L|L7L-7FJF--7F7F7||JLFJF|7LLF--J.|
+|JL.J7-|J|.L-7F---JF7L--------7|||FJF-JJF-7|L-JFJL-7||L-7FJL-7|LJF--JJL-7F-JL-7|F7FJFJ||L7|||||L-7FJL-7LJL-JFJF-JL7|F-J|LJ|||-FJFF7--J..||-|
+JLLFJLFJFF--7LJF--7|L7F7F7F---JLJLJFJ7F7L7||F--JF-7|LJF-JL-7FJL-7L7F7F--JL7F7L||||L7L7||FJ|||||F7||F-7L7F---J7L-7FJ||F-JF-J||F7F-J|.|F|-L7.7
+|.|.FJL-FL-7L-7L-7LJFJ|||||F7F---7FJF7||FJLJL-7FL7LJF7L7F7FJL7F7|FJ||L---7LJL7|LJ|JL7|||L7LJLJ||LJ|L7|7||LF7F7F7|L-JLJF7L--JLJLJF-JFF-|L|77F
+L77.|7FFF--JF7L7FL-7|FJ|||LJLJF77|L7||||L--7F-JF7L--JL7LJ|L7FJ|||L7||F7F7|F--JL-7L7FJLJL7L7F--JL-7L7|L7|L7|||||LJF----J|F7F-7F--JFJ7|F--7L|J
+F||7L-77L---J|FJ7F-J|L7|||.F--JL7L7|||||F--JL7.||F-7F-JF-JL||FJ||FJ|||||LJ|F7F7FJFJL--7FJFJL---7.L7||FJ|FJ|LJLJF7L----7LJLJLLJJJ-|-LL--7J-LJ
+L|-FF7LF.FF--JL-7L-7L-J||L7L-7F7L-J|||||L---7L7||L7|L-7L7F-J||FJ||FJ|||L-7|||||L7L7F7FJL7L7F---JF7|LJ|FJ|FJF-7FJL-----JF--7F7.FLJ|L|.|JL--JJ
+F.LLJF.|F7L----7L--JF-7|L7|F7LJ|F-7LJ||L7F7FJFJ||FJ|F7|FJL-7||L7|||FJ||F7|LJLJL7|FJ|||F7|FJ|F-7FJ||F-JL7LJFJ.LJF7F7F7F7|F-J||-||F|.|FL7L|..L
+J.L|.L-FJL-7FF7|F---JFJL-J||L7FJ|7L7FJ|FJ|||FJ-||L7|||||F7L|||FJ||||.||||L7F---J||7||||LJL7||FJ|FJ||F7LL7FJF---J||LJLJLJ|F-JL--7-J7-|F7-L.|.
+F----FFJF-7L-J|LJF7F-JF--7|L7||FJF7||FJL7|LJ|F-J|FJ||||||L7|||L7||||FJ|||FJL7F--J|FJ||L-7FJLJ|FJL7||||F7||FJF7F-J|F--7F7LJF7F--J7F7-F7J-7|LL
+JJ-7L-L-JFL7F7L-7||L7FJF7||FJ|LJFJLJ||7L||F-JL-7|L7LJ||LJF|||L7||||||FJ||L7FJ|F--JL7|L7JLJ|F-J|F-J|||||LJ||FJLJF-JL-7LJL--J||F7LFJ|FJL7J7|F|
+|L|LFLJJ.F7LJL-7||L7LJFJLJ|L7|F7L--7|L7FJ||F7F7||FJF-JL7F7|||FJLJ||||L7||FJL7|L-7F7|L7L7F--JF7||F7||||L77LJL---JF7F-JF-7|F7LJ||-L7||F-JLFFJ|
+|-|..|J-FJL----J|L7||FJF-7L-JLJL---JL-J|FJ||||||LJFJF-7LJ|||||JF7||||7LJ|L7FJ|F-J|||FJFJL7F7|||LJ|||||FJF-----7FJLJF7L7L-J|F-JL--JLJ|J7||F.J
+F-FL--7L|F---7F7L7||FJFJJL--7F7F-7F--7FJL7|||||L-7L-JFJF7||||L-J|LJ||F--JFJL7|L7FJ||L7|.FJ||||L7FJ|||LJFL---77LJF7-|L7|F--J|F----7F7|-|F-|7J
+|FL|.|FFJL7F-J|L7LJLJFJF----J|||FJ|F-JL-7||||||F-JF7FJFJ|||||F-7L-7|||F-7|F-J|FJL7||FJL7L7||||FJL-J||F-----7L---JL7|FJ|L7F-JL---7LJLJ|LJ||.|
+L-J.FFJL--JL--JFL---7L7|F7F-7|LJL-JL---7LJLJ||||JFJLJFJFJ||||L7L7FJ||||FJ|L-7||F7|||L7FJFLJ|||L7F--J|L7F--7L------J||7|FJL7F----JL|-L7FJ-|-7
+|.F-J|L|7F---7F-----JFJLJLJ.||F---7F---JF7F7LJ|L7L7F7|-L7|LJL7|7|L7||LJ|FJF-J|||LJ|L7|L-7F-J||FJL7F7L7LJF-JF7.F--7J|L7||F7|L-7FF7F7.F-J|.LFJ
+F-|7LJ-JFL--7|L7F7F-7|F7F7F7LJL--7|L----JLJL-7|FJJLJLJF-JL7FFJL7|FJLJF-JL7L-7||L-7|FJ|F7||F7|LJF7||L-JF7L--JL7|F-JFJFJ|LJLJF-JFJLJL-7JFFFJ|J
+JFL-L7.F----J|JLJLJ||||LJLJL--7F-JL------7F7FJLJF7F-7|L7F7L7L7FJ|L-7FJF7FJ-FJ|L-7||L7||LJ||||7FJ|LJF77||-F---J||F7L7L7|F---JF7|F----J|||F--.
+|FJF-|.L----7L-7F7F-J|L7F7F7F7|L--------7LJ|L7FFJLJFJF7LJL7L7|L7|F-JL7|||F-JFJF-J|L7|LJF7|||L7L7L--J|FJL-JF7.FJLJL-JFJ||FF7FJLJL----7-J-|.|7
+J|.|L7FF7F-7L-7LJLJF7L7||||LJ|L-------7FJF7L-JFJF7FJ.||LF-JFJ|FJ||F7|LJ||L-7L7L-7L7|L--J|LJL7|LL---7LJF---JL-JF----7L-JL-JLJF---7F--J.||J-L7
+|-F7-LL||L7|F7L7F-7|L7|||LJF7L-------7LJFJL7F-JFJLJF7|L7|F7L7|L7|LJL7LFJ|F-JFJF-JFJL7F7FJJF-J|F----JF7|F---7F7L---7L7F--7F-7L--7LJ7.J.LF-F-7
+7-7L|.||L-JLJL-J|FJ|.||LJF-JL-------7L-7|F7|L-7|JF7|||FJLJL7||FJL7F-JFJFJL-7|-L-7L-7||||7FJF7|L7F7F7|||L-7.LJ|F-7FJ.|L-7LJFL7F7L--77FJ.|-7J.
+--L7F-F|F-7F---7|L7L7||F-JF7F--7F--7L--J||LJF-JL-JLJLJL---7|||L-7LJF7L7L7F-JL-7-L7FJ|||L7L-JLJFJ|||LJ||F7L--7LJFJL-7|F7L---7|||F7FJ-J.-F-J.F
+||L7|7JLJ-|L7F-JL7L7|LJL--JLJF7LJF7L---7||F7L7F----7F-7F--J|||F7L--JL7L7|L-7F7L7FJ||||L7L-7.F7L7|LJF7LJ|L---JF7L7F-JLJ|F7F7|||LJ||JLJFL||..|
+FJFFFL.FLFJFJL7F-JFJ|F-7F7F--JL-7||F---J||||J|L---7||F||F-7|||||F7F7FJFJ|F-J|L-JL7L7LJFJF-JFJ|FLJLFJ|F7L-----J|||L--7FJ|LJLJ||F7LJF7|7FL7-FJ
+L7L77JFFJL-JF-JL7-L-JL7LJLJF7F-7LJLJF7.FJLJL-JF---J|L7|LJFJLJLJLJ|||L7L7|L-7L---7L7|F7|FJF7L7|F7F7L7LJ|F------JFJF-7|L7L77F-JLJL7F-FL|L-F.J.
+FJ-|||F--|F7L7F7|7LF--JF--7||L7L7F-7||FJF7F-7FJF--7L7||F7L7F-7F7L|||FJFJ|F-JF7F-J.LJ||LJFJL-JLJLJL-JF7|L-7F7F7JL-J7LJ7L7L7|F7F7FJ-FLFJLLJF.7
+FJ|LJ-L7.FJL-J|LJF7L---JF7LJL-JLLJFLJLJFJLJL|L-JF-J|LJ||L7|L7LJL7LJLJFJFJL-7|LJF----JL-7L----7F7F7F-J||F7LJLJL---77F-7FJFJLJ|||L77-.L-7LF|-7
+|-F7-|J|-L7F-7|F-J|F7F7FJL-7F7FF-------JF7F-JF--JF--7-LJFJL-JF7FJLF7LL7|F--JL-7L-7F7F7FJ-F7JFJ|LJLJF-JLJL---7F7F7L7L7|L-JF7-LJ|FJJ-FJ.F--J7|
+L|LF7|-LL-LJFLJL-7||LJLJF-7LJL7L--------J||F7L7F-JF7L-7JL7F7FJLJF7|L7|||L7F7F-JF-J|LJ||.FJL-JFJF7F-JF------7LJ||L7L7|||F7|L--7LJ7-LF7-7F7LL7
+FJ-L77777LFJ-F---J||F7F7|FJF7FJF----7F-7FJLJL7LJF7|L-7L-7LJ|L---JLJFJ-||-|||L-7|F7|F-JL7L----J-|LJF-JF7F7F7L-7LJ-L-J|L-JLJF--JJ.77.L7..F7-J|
+|||L|J.77-L|FL---7|LJ||||L-J|L7L-7F7LJ7LJF7F-JF-J|L-7L--JF7L7F-7F7FJ.FLJL|||F-J||LJL7F7L--7F7F7L--JF-JLJLJL--JF7F7F-JF-7F7L--7|||-LF7FFF7.FJ
+|FF-JJ7LF7-LF----JL7|LJLJ7F7L7L-7LJL7F---J||F7L-7L--JF7F-J|-LJJLJ|L--7-F-||||.LLJF-7LJL--7|||||F7F-JF-----7F7||LJLJF-JJLJL---J7F||LL-LFJ|F7J
+LL7.J.LFJ|.FL-----7|F7F7F7|L7|F7|F7FJ|F---JLJL-7L7F--JLJF7L---777L7F-J--JLJLJ7..FL7|F7F--JLJ||||||F7|F----J|L7|F7F7L7F7-F7F7F7F-77.|.||L-LJJ
+LL77.L7L7L7F7F7F--J||LJ|||L7|LJ|LJLJFJL---7FF-7L7LJF7F7FJ|F7F7L--7|||J-JF||LL7FFF7||||L-7F-7LJ|||LJ||L-7F7F|FJ||LJL-J|L7|||LJ||FJ|F--J|JJJFF
+LL|||L7.L7LJ||LJF-7|L7FJ||FJL7FJF--7|F----JFJFJ-L--JLJLJ7LJLJL-7FJ||-J7FJL7|7.FFJLJ|||F7LJ.L-7LJL7JLJF7LJL-JL-JL--7F7L7LJ||F7LJL-77.|LFJJLJJ
+.|LL-J.7|L-7|L--JFJL-J|FJ|L-7||FJF7LJL-7|F7L7|JF7F---------7F7-LJ.LJ.LF-7-J7-7JL--7LJ||L--7F7L7F7|F--JL-7F7F------J|L-JF7LJ||F7F7L7777|.FFJJ
+FL-|LFF--7.||F77FJF7F7LJFJF-J|LJFJL-7F7L7||F|L7|LJF-7F7F7F7LJL---7|.7JF-JJLJFFF7F-JF-J|F-7LJL7||LJL----7LJ|L--7F---JF7FJL--J||||L7|7-J7FFL-7
+||.|J|L-7L-JLJL-JFJLJL-7L7L-7L7FJF-7LJL7LJL-JFJ|F-JJLJLJ||L------JJ7-7LF|JJJF-J|L-7L-7LJ7L--7LJL7F7F7F7L-7L7F7LJF-7FJLJF---7||LJ-LJJ|.|LF-7|
+FF|J.F|JL----7F7FJF---7L7L--JFJL7L7L-7.L7F-7FJ-||F7F---7|L--77L|LJ-F-L-L-F77L-7|F-JF-JF7-F7J|F-7LJLJLJL--J7LJ|F-JFJL---JF7FJ|L7|.|.F77-J.|FL
+J.FJF7LLF--7.LJLJ|L--7L-JF7F7L-7L-JF-JF7LJFJL--JLJLJF--JL-7FJ77.|.|J.J-JJ|L--7||L-7|F7|L-JL-JL7L------7F---7J|L-7L7F7F-7||L7L7L7FL-FJJL7-LJ|
+|F|F|7FLL-7|F7|-F----JF--JLJL7FJ7F-JF-JL7-L7F7F-7F-7L----7LJJLJFFFF--7|LLL7F7LJL--JLJLJF7F7F7FJF7F7LF7LJF-7L7|F7L7LJ|L7LJL-J7L7L7J.L|.LFJ.FL
+FJLFF7F-7FJLJ|F7L-7F--JF-----J||FJF-JF--JF7|||L7LJFJF7F--JF|7.LFJF-JF-JJLLLJL-7F7F-7F-7|||LJLJFJLJ|FJL-7L7L-JLJL7L7FL7L7F7F7F7L-J.FFJ|.|.7-L
+77F7|||FJL--7LJL7|LJF-7L7F-7F7L-JFJF-JF--J||||FJF7L-J|L---7F7F77L7-L|J...-F--7LJ|L7LJFJ|LJF---JF-7LJF-7L7L--77F7L7L-7L-J|||LJL----7JL|F|FL-|
+F-JLJLJL---7L--7|F7-L7|JLJ.LJ|F-7L7L--JF7FJ|||L-JL--7L----J|LJ|7.|FL|.FL.FL-7L--JFJF7|FJF-JF7F7|JL7FJFL7L---JFJ||L--JFF-JLJF--7F--J7.LJ-7JF|
+L-7F-7F-7F7L---JLJL-7||F-7FF-J|FJFJF7F7||L7LJ|F-----JF-----JF7L77-JL|77FL77|L-7F7L7|LJL7L--JLJ||F-JL7F-JF--7-L7L------JF7F7L7JLJ|F||F|-J.F||
+L.LJ.||FJ|L-7F-7F7F7LJ|L7L7L--J|FJFJLJLJL-JF7LJF----7L7F--7FJL-JJ|FFJ|L7--L||FJ|L7||F-7|F-----J||F7FJL--JF-JF7|F------7|LJL-J7-F--7FF77.--77
+.FLJFLJL-J7FJ|FJ||||F7L7L7|F7F7LJJL7F7|F7F7|L--JF--7|FJL-7|L-7F7-FFJL7-7|.LLFJFJFJ||L7LJL-----7|||LJF7|F7L--JLJL-----7|L-----7-L7FJ7|L.FJL||
+FF7-FJF--77L-JL-J||LJL7L-JLJLJL7JF7LJL-JLJLJF---JF7LJ|F--JL--J||F7L7-|7L77.FL7L7L-JL-J.F--7F-7LJ||F-J|FJL-7F7F-------JL------JF7|||JL7F|.|L|
+LFF7||L-7L7F-----J|F--JF7F----7|FJ|F---7F7F7L---7|L--JL--7F7F7||||F7F|J-||F7J|FJF-----7L-7|L7L-7LJ|F7LJF-7LJ|L7JF7F7F7.F7.F7F7|LJL-7.F-F-J.|
+.FJL--7-L7|L------JL-7FJ||F--7||L7LJF-7LJ||L7F-7LJF------J|LJ||||||L7J-F7J7LFLJ7L----7L--JL7|F7L-7||L7FJFJF7L-JFJLJLJL-JL-J||LJF---J-J|L-7LJ
+FL---7|F7||F7F---7FF7|L7||L-7LJ|JL-7|FJF7LJFJ|7|F7L-7F7F7F|F-J|LJLJFJJ.||||||F-7JF7F7L---7FJLJ|F-JLJ|LJ-L-JL---JF-----7F7F7LJF7|F--7-FJ7L7.|
+7-LLFJLJLJLJLJF-7L-JLJFJLJF7L-7L-7-LJL-JL-7L-JFJ||F7LJLJL7||F7|F--7|JLF|L77--|FJFJLJL----JL7F7||F77F----7F------JF---7LJLJL--JLJ|F-J-|.|7LJJ
+L--L|F-7F-7F7FJ-L-7F-7L77FJL7FJF7L------7FJF7-|FJLJ|F-7F-J|LJLJL-7||7LFJFJ.F7|L-JF7F------7LJLJLJL7L---7LJF7-F7F7|F-7L7F7F7F----JL-7FJ-J|FJ|
+|-|.LJFJL7LJ|L-7F-J|FJFJFJF7LJFJ|F-----7|L-JL7|L--7|L7|L-7|F--7F-JLJF-JFJ|F-7L---JLJF-----JF7F-7F7L7|F7|F-JL-JLJ|||FL7LJ||LJF------JJ|LL7LF-
+L--L-FJF7|F7L7FJL7FJ|FJJL-JL7FJFJ|F-7F-JL-7F7||F7FJL7|L-7||L-7|L--77L-7|F7L7L7LF7JF|L---7F-J||L||L7L7||LJF7F7F--J|L-7|F-J|F-J.F--7|JFFJ.7-LJ
+.|-|.L7|LJ|L7|L-7|L7LJF---7FJL7L-JL7|L-7F7LJ|||||L-7|L-7LJ|F-JL---JF--JLJL7|FJ7|L7FF7F7JLJJFJL7LJ7L7LJL--JLJ||7F7|F-JLJ|FJL7F7|F-JF7-F7FJJ..
+F.FF-FJL-7L7LJF-JL-JF7L--7|L--JF---J|F-J||F7LJLJ|F-JL--J-FJ|F7F--7|L----7FJ||F7L7|FJLJL----JF7L7F7-L7F-----7||FJLJL7F---JF7LJLJL--JL-JL77FL7
+77-|LL-7FJLL-7|F-7LFJ|F7FJL7F7-L7F-7||F-JLJL7F7.LJ-F7F7F7L7||||F-J7F-7F7||FJ|||FJ||F--7F---7|L7||L--J|F---7|||L-7F-J|F---JL-7F---------J-FJ.
+L7.L7LFJL7|FFJ|L7L7L7LJ|L7FJ||F7|||||||F---7LJL---7|||LJL-JLJ|||F-7L7|||||L7LJ||FJLJF-J|F--JL7||L----JL--7LJLJFFJL--JL-----7|L-----7|FLJJ|J.
+|L--J-L7FJ77|FJLL7|JL-7L-JL-J|||LJFJLJ||F7FL------J|||F--7F--J|LJFJFJLJ||L-JF-J||7F7L--JL---7|||.F7F7.F-7L7F7F-JF7F7F---7F-J|F-----J777JL|.F
+J7..|-FLJ|F7LJF--J|F--JF-7F-7LJL7FL77FJLJL7F------7||LJF-JL--7|F-JFJF-7LJF--JF7|L7||F7F---7LLJLJFJLJL7L7|FJ||L7FJLJ|L--7LJLFJL--------7J.JF|
+FF--|-7FFF||F7L--7LJF--JJLJ|L--7L-7L-JF--7LJF--7F-J||F7L7F7F-J|L7|L-J7|F-JF7FJ||FJ||||L--7L-7F7FJF--7L-JLJF||FJL--7|F--J-F7L-7F-7F7F--J77.J|
+FLJ-L-F7FF|LJL7F7L-7L7F-7LF7F-7|F7L--7L-7|F7L-7LJF7|||L7LJ|L7FJFJF7F7FJL--J|L7LJ|-||||FF7|F-J|LJFJF7L-7F---JLJF7F7||L7F--JL-7LJFJ|LJJLLFJ--7
+7J7.L|LL-JL7F7LJ||FJFJL7L7||L7|LJL-7|L7FJLJL--JF-J||||FJJFJFJ|FJ.||||L-7F-7L7L7FJFJ||L7|||L7FL--JL||F7LJF---7FJLJLJL-J|F---7L-7L7L7||FFF7|J|
+F-F7LFF7L-FJ||F7L-JFJF7L7LJ|FJL----JF7LJF7FF-7.|F-J||||F7L7|FJL7FJ||L-7||JL-JFJL7L7||FJ||L7L7F7F--JLJL7JL--7LJF7F7F7F7|L--7|F-JFJFJ-J---LJF|
+L-.LJ|L77LL7|||L7F7|||L7L-7LJF------JL--JL7L7L7||FFJ||LJL7|||F-JL7|L-7LJL7F7FJF-JFJ||L-JL7|FJ||L-7F--7L7F-7L--JLJLJLJLJF--JLJF7L-J-7JJJ.L-L-
+|-|LF7.LF7LLJ||FLJ|L7L7L--JF7|F-----------JFJFJ||FJFJL--7||LJL7F7||F7L--7LJ||FJF7|FJL---7LJL7||F7LJF-JFJL7L--------7F-7L--7F7|L-7JF77-JF.LL7
+7|L|.||.J77J.LJ-F-JFJ7L--7FJLJL--------7F77|FJFJLJFJF---J||F--J||||||LF-JF-J||FJ||L7F7F7L-7FJ||||F-JF7L-7L--7F7-F7JLJ.L7F-J|LJF7|FJ|7FFL7-LJ
+|7F|F7|7JF7-FJF|L--J7F---JL7F---------7LJL-JL7L7F-JFL--7FJ|L7F-J|||||FJF7|F7||L7||FJ||||JFJL7||||L7FJ|F7L--7LJL7|L-7F7JLJF-JF-JLJ|FJF-7-F.FJ
+F-LJ|J7|--JF7-F7FFF--JF--7FJL7F7F7F--7L-7F--7|FJL--7F-7||FJFJL-7|||||L-J|LJLJ|FJ||L7|||L7L-7||||L7||JLJL--7|F-7LJF-J|L7F7L-7|.F7FJ|FJFJ|JFF7
+|-|LJF7||.J-|.||FFJF-7|F-JL7F||LJLJF7L7FJL-7LJ|F---JL7||||FJF7FJLJLJ|F7FJF---JL7|L7|||L7|F-JLJ||FJLJF7F---JLJLL--JF-JFJ|L-7||FJLJFJL7|F7F7LJ
+L7L7|FJL-7.-JL|L7L-J|LJ|F7FJFJ|F---JL-JL---JF-JL--7FFJLJ|||FJ|L----7|||L7|F7F7-|L-J|||FJ|L--7FJ||F--JLJF-7F7F-----JF-J||F-J|||F--JF7|LJLJL7J
+LJFF---|.|7FF.L7L--7F-7LJLJJL-JL----7F7F7F7-L-7F--JFJF--J|||FJF7F-7|||L7|LJ|||FJF-7|||L7L-7FJ|FJ|L-7F-7|FJ|LJF7F-7FJF--JL--JLJL---JLJF----JJ
+||LJ..LL-.J-FF7L--7|L7L----7F7F7F---J|||||L7F7||F-7L7|F-7|LJL7||L7|||L7LJF-J|LJFJ7LJ||FJF-JL7LJFJF7|L7||L-JF-JLJF|L-JF7F--7F--------7L--7JL-
+|J7..||.|FJFFJ|F7L||-L----7LJLJLJF---JLJ||FJ||||L7|FJ||FJL--7|||FJ||L7L-7|F7|F-JF7F7||L7|F7-L7FJF||L-JLJFF7L----7L7F-J|L-7|L7F-----7L7F7|.||
+|.LF-F7FLJLLL7LJL-J|F-----JF-----JLF----J||FJ|||FJ||FJ|L7F7FJ||||FJL7L7FJ||||L-7|LJ|||FJ|||F7|L-7|L7F7F--JL7F---JFJ|F7L7FJL7LJF7F-7|FLJLJ-|7
+F7JL|.|||J..LL7F--7|L------JF------J|F7F7|||FJ||L7|||-|FJ||L7|||||.||FJL7|||L7FJ|F-J||L7|||||L7FJ|FJ||L---7LJF--7L7LJL7|L7FJF7||L7LJ-LJFL|..
+-|-F-F-|77-7FFLJF7||FF7F7JF-JF7F-7F7FJ||||||L7||FJ|||FJL7|L7|LJ||L7FJ|F7|LJL7||FJ|F7|L7|||LJL7|L7|L7|L7F-7L--JF7L7L7F-J|FJ|FJ||L7L7JJFLJ---|
+L-.F-7L7|LF-7F7FJLJL-JLJL-JF7||L7LJ|L7|||||L7LJ|L7||||-FJL7|L-7|L7||FJ||L7F7|||L7|||L7||||F-7|L7LJF||7|L7|F7F-J|FJF|L-7||FJL7|L7|FJF7-F--J.7
+-J77FF7L7FL7LJLJF-----7F7F7|||L-JJFJFJLJ||L7|F-JFJ||||FJF7||F-J|FJ||L-JL7LJ|||L-JLJL7|LJ||L7LJFJF--JL7L7|LJ|L-7||F-JF7|LJL-7||FJLJFJJ||7.|F|
+FJ|LLJF-J77L----J|F7F-J|||||LJF---JFJLF-J|.LJ|F-JFJ|||L7||||L7FLJ7LJF7F-JF-J||F-7|F-J|F-JL7|F7L7L--7FJFJL-7|F7|LJL7FJLJF7F7LJ|L-77||LFF-F-FL
+77J|FF|JL|F-------JLJF-JLJ||F-JF--7|F7|F7|F--JL-7|FJ|L7||||L7L--7F--JLJF7L-7LJ|FJFJF7||F7FJLJ|FJF--JL7L7F7||||L-7FJL-7.|LJL-7|F-J-J|-FJFL7|7
+|J-F--J.FFL-7F-7F7F7FJF7F-J||F7|F-J||||||||F-7F-JLJFJFJ||LJFL7F-JL--7F7||F7L--JL7|FJ|||||L7F-JL7L7F7FJJLJ||LJ|F-J|F-7L7L7F--J|L7..L7||J|FJLJ
+J--7.|7.JFF-J|-||||||FJLJF7|LJLJL-7LJ|||||LJFJL--77L7|FJL-7F-JL---7FJ||||||F7F7FJ|L7|||||FJL7F-JFJ||L---7||F-JL-7|L7L7L-J|F77L7|-L.|FF7|LL||
+L-|.-J7-F-|F7|FJ|||LJL7F7|||F--7F7L7FJ||LJ|FJF7F-JF-J|L7F7|L7F7F--J|FJ||||||||||FJFJ|||||L7FJL-7L7||F-7FJ|||F7F-JL-J.|F7FJ||F7LJ7F--7JLJ7LF|
+|JL7J||.J-LJ||L-JLJF7FJ|||LJ|F7LJL-JL7||F--JFJ|L-7L-7|FJ|||FJ||L-7FJL7LJ||||||||L7|7LJLJL7||F7FJ-LJ|L7|L7|||||L-----7LJLJFJ||L--77|J|-FJF-L7
+J-|7LJJF7FJ-||FF---JLJFJ||LFJ|L7F7F7FJ||L7F7|FJF7L7J||L7|||L7||F-J|F-JLFJ|||||||J|L---7F-J|||LJF---JFJ|FJLJLJ|F7F-7FJF7F7L7LJF-7L7-F..L7F7|J
+|LL-.LF-77.-LJFJF-7F7FJ.||FJFJFJ|LJ|L7LJFJ||||FJL7L7|L7|||L7LJ|L-7|L--7|FJLJ|||L7L7F7FJ|F7||L-7|F-7FJ||L-7F7FJ||L7LJL|LJL-JF7|LL7|.LF|-J|JLJ
+L.-J.FJ|LF77-FJFJ-||LJF7||L7|.L7L7FJFJF7|FJ|||L7||FJ|FJLJL7|F-JF7||F-7|||F-7||L7L7LJ|L7||||L7FJ||FJ|-FJF7LJ||FJL7L---JF7F7FJ|L-7LJ7--JF|LF7J
+F7J|F7J7---7FL7L7-LJF-JLJ|FLJF-JFJL7L7||LJ7LJL-JFJL7|L-7|JLJL-7||||L7||LJL7LJL7L7|F-JFJLJ||FJL7||L7L7|FJL--JLJLLL7F-7FJLJ|L7|F7L7JL-J-F--|-J
+FF.FLJL-7.LJ-LL7|7F-JF7F7|F7FJF7L-7L7LJL----7F--JF7|L-7L7F7F--J||||FJ|L--7L-7FJLLJ|F7L-7FJ|L7FJLJLL7||L------77F7|L7|L--7|FJ||L-J7-L-7|L-J||
+-|7-|.-7J-7-FJFLJ-L7FJLJLJ||L7||F7|FJF------JL-7FJ|L7|L7|||L--7||||L7L7F7|F-J|-F7FJ||F7|L7L7|L7F--7LJ|F7F---7L7|LJFJL---JLJFJ|JLLJ--7L|-7F--
+|L7F77FJF-J.||FJF|J||F---7|L-J|LJLJL7L----7F7F-JL7L7L-7|||L---J|||L7||LJLJL-7L7|||FJ||||7|FJL-JL-7L--J||L--7L7||F7L-------7|FJJ7LJ-FJFLL-|J.
+L-7FJ7F7F|77.77LJJ|LJL--7LJF7FJ-F---JF-7F7LJ||F-7|FJF-J|||F7F-7|||FJL---7F--JFJ|LJL7|||L7|L-7F7F7L-7F7|L7F7L7LJLJ|F------7|LJJLF.|F-777.L-J.
+||JLJ-L7LJL7-JJ-|-LL-F7-L-7||L-7L---7L7|||F7|LJFJ|L7L-7||LJ|||||LJ|F7F7FJ|F7FJFL7F7||||FJ|F-J|LJL--J||L7||L7L---7|L-----7||JL|LF7|7.LL-7-7.F
+L|7FL||L|L7||J7.L7LLFJL---J||F7L7F--JFJLJ||||F-JFJFJF7|||F7LJFJL7FJ|LJ||JLJ|L--7||LJLJ|L7|L7FJF7F7F7|L7|LJFJF7F-JL7F-7F7|LJ|-F--L7JFLJJ|||-7
+.|--FL|FF7L---|..|FFJF---7FJ|||FJL-7FJF-7||LJL-7|FJFJ|||||L--JF7|L7L-7LJF--JF7FJ|L---7L7||FJ|FJ||||||FJL7-L7||L--7|L7||LJJ-L-L7JJJ.|J|F77.||
+F|.LJ.F-F7J||.L77--L7|F--J|F||LJ|F-JL-JFJLJF---J|L7||LJLJ|F--7|||FJF7|F7L--7|LJ-|F7F-JFLJLJ.LJ-LJ|||||F7|F-J||F7FJ|FJ|||L|J7|7||J.77||LLL7-L
+FF-77.L7LL--|-|L7-77LJL--7L7||F--JF-7F7L7F7L-7F7L7|L7F7J|LJF-J|||L7||LJL-7FJL7F-J||L--7|.|JF|J-FL||LJLJLJ|F7|||LJFJL7LJ7FJ---77JF|||7|7.|..J
+|LL777.--F-7J7|J.FJL7LLF-JFJ||L--7|FJ|L7LJL7FJ||FJL7LJL7F77L-7|LJFJ||F---JL-7|L7FJL-7FJJ-L7LJ-77-LJJ|LF--J||||L-7L-7L---77|L|LJ7FLJ|7..F7F||
+L-J||J.J.LJ|L77.FF--|FL|F7|.LJF--J|L7L7L7F-JL7|LJF7L7F7|||F7-||F-JFJ|L--7LF-J|FJL--7LJ|JF-77FF|F-|LF-FJF-7|||L7FJF-JF-7FJJ7.L-F7-JLL7--7---L
+L|LL7FF.F|F.|||7L7JJ|FJLJ|L7F-JF-7L7L7L7LJF--JL7FJL-J||LJLJL7||L7FJFL7F7|FL-7|L7F7FJ-L7.JF|F-|J||JF7|L-J.LJ||FJ||L7FJFLJJ.FF7F7JLFJL-..LLLJL
+.7J-|-F7F77FJJJ7.|JF||LFFJFJL-7|FJFJLL7L7J|F-7FJL7F-7|L7F7F-J||FJL7F-J|LJ7-FJ|FJ||L7J-L7||-7.--J7FJL-JL|7LFLJL7L-7LJ|LJJ|J7|FL--7J7J-J.||L7L
+.L.7.LLF-JLF|-77-|-FLJ.FL7L-7FJ||FJ|-|L7L7||FJ|F-J|L|L7|||L7.LJL-7|L-7L7-7-|FJL7||FJ.L-L||.|---J|FL-7.FJJ-F---JF-J|FJJJ||FF77.|L|LJ.7F7-|J7J
+|.FL-F-JJ.FL--JF.L7|JJF|LL7FJL7||L-7F-JL7|LJL-JL7FJFJFJLJL-J.|J|.||J.L7L-7JLJ-L||LJ||JF7|F-FJ-.FF-JFL|7JJ-L7F-7L7F-7-F-JLFJ|LL77LF7|F7LL|L7-
+F-J|.||7F7LJFL7J..FJ|L7J|.LJFLLJL-7|7|L|||F-7J.||L7L7L-7.||-7J.L-LJ7-.L--J7|JJFLJJ.JJ-L-J-7L.L|7JLF|J||7.F7LJLL-J77JFJ-JLL7.7.--.LJ|LJ--7.||
+7JJFF-J|-7-7|FJLJ-J.F7..FLL|7FL|J.||LF--JLJFJJ-F|FJFJF7L7--F--||FJJ||-JLJ7LJ..FLL--J|..|-LLJ7L||7LF7L|.--L-7|F|||LJF-JL7.FJL7-L7.F|F7||L|JLJ
+|JF-J-LJL|.|L-L7..F--7-L7|L-7FL|LFLJFL--7F-JJ-FFJ|-L7||FJJFLJ7.7LL|FJ7F7J|7FF-J|J.|.-J-F--L7L-----|JFLF.L-L-L7|L--|LJ.7-FJJ-|7.FF|7J|F--FJ7J
+|-LL7|L|FJ-JF|L|77||JJL||FL7L77|-FLJ||LLLJJLL7FL7|F-J||L7FJ7-FJJ--7|-7|F7LL7LL7L-|.-.|-|J7.LJJ|J..L.J-J7.FFF.L|..FJFL-|.LLF--J-FJJ.-LL-7|.F7
+LF.|-F.-7JJF7.|J|F---7-L--J77JL--J.FLF.J-JF77F77LJL--J|FJJ|L-L|-F7L.7L-L77F7.F7|7|--7JJ.F-L-FF7JFF77.|.--FFJL-LFF77|..L7JLJ..LLL.F7.JL--7F-F
+FF.J7LL-7.FL77F-|777LJ7||--JJF||FLF-F.L-|FL7-|-LJ-|L|L||JLJL7F----|-J|.LLJLJ7F|LFLJ.-J-F|.|JLJJF|LJF7-7.F||7|J|...FL-7-JJFF-77.L77F|F7||LL.|
+|LL|-.L-J7JLJ-JJLL7--J----LJ.|L-L-L-L-LJLJ-L-|J.J.|.-JLJ77.LL|J-|-LF-LJ.L-|7LF--|JLJ-L---JJ.FLLLJ7-FJ.L.LLJ-|L|.LJ-LJJLL7.LJLJ-LF-7LJ-JJJ--.
\ No newline at end of file
diff --git a/2023/15/15.rs b/2023/15/15.rs
new file mode 100644
index 0000000..881702d
--- /dev/null
+++ b/2023/15/15.rs
@@ -0,0 +1,15 @@
+fn hash(s: &str) -> u32 {
+	let mut value: u8 = 0;
+	for c in s.chars() {
+		value = value.wrapping_add(c as u8);
+		value = value.wrapping_mul(17);
+	}
+	value as u32
+}
+
+fn main() {
+	let input: &str = include_str!("input.txt");
+	let steps = input.split(",");
+	let part1: &u32 = &steps.map(hash).sum();
+	println!("{:?}", part1);
+}
\ No newline at end of file
diff --git a/2023/15/input.txt b/2023/15/input.txt
new file mode 100644
index 0000000..0b1a994
--- /dev/null
+++ b/2023/15/input.txt
@@ -0,0 +1 @@
+hbrg-,vc-,jlls-,cvmq=5,cpm=9,hgct=4,bnblt=7,ccmd-,fs=2,cttxtn=6,bsn=5,rmj=8,rkxg-,ps-,xf-,gnhm=7,nbcg=7,xx-,gph-,hrc-,ppl=9,ng-,cxjsr-,jd=7,jmq-,zj=8,nnmj-,glplq-,zdd-,mk=6,fj-,qx=5,vj=1,jf=3,hrh-,jqc=4,dq-,nnmj=9,tvz-,xltm=5,msz=2,fnn=2,dnjdn=1,bkc-,lc=6,cpk=3,lmxv=8,gph-,mx-,gcfl=8,kk=5,cxfrpr=6,zpj-,lpbrxv=2,dv=8,fj-,fdcl-,rvvv=5,jqqkmd-,hrg-,cqg-,ljrdxk-,dhq=1,hpr=3,gsq-,zj-,ghf=1,rdt-,hrg=5,qqh=3,tcv-,xtm=5,drp=3,jkv-,qjgqb=6,smsh=1,zrcqs-,hgct=5,qx=1,xvd=3,rc=9,kknkjz-,cvq=4,sq=3,qvkv=7,prk-,ktp-,xln=3,cnm-,vct=5,xc-,cs=6,prtnpg=6,ttvl-,kknkjz=7,dgtn-,zv=4,ctqtk=3,mdv=6,rc-,zl=9,trq-,qfp-,pmgsxv=9,dzr-,cdzfk=3,xfvj=2,tqp-,nnmj-,hbrg=9,ckk=7,bjrvxh=3,khlc=5,dmq-,tclnp-,pkd=6,np=9,fnn-,kjqx-,pkd=3,jctv=3,gzm=2,bb-,kd-,kmnr=4,fhvv-,jqc-,mnv-,lpjl-,vqh-,zz=7,xgzzl=3,qjgqb=3,rds-,zqv-,db=7,xx=9,psm=2,gbfb=7,fs=9,rp-,tv-,pc-,gsq-,trq=2,mvs-,xnbx-,kh=7,kl-,rm-,nqm-,smk=8,pt=1,bbf-,rsgx=6,lpjl=8,tmg-,kjqx=8,kbvm=9,tj-,btl-,xs=2,bh=8,gh=8,dt=5,st-,php=8,bx-,jpksf-,pmp-,dvd-,rgxnz=8,jf-,hd-,lx-,ncm=4,jd=3,rbt=6,tj-,ds-,jkdr-,pdbh-,hnn=3,smk-,frrg-,pskx-,hk-,rt=3,cg-,jcp-,zst=6,qxsddj-,klj-,ph-,rsvzkj=1,rgxnz-,cnm-,xss=6,bh=2,jnv=8,qspjl-,bbf-,njjk-,htm=1,kjt-,tdk-,hzs=7,lxx=6,xgzzl=5,ssns-,gd=9,rt-,gst=1,mdv-,crg=7,zh=1,cqg=8,lxrk-,jbd-,tmg-,nqm=6,gph-,pkd-,vr=8,ccmd-,mvs=6,gq=9,xjkhv-,jxl-,jd-,kcgxz=4,php=3,cg-,xss=4,dk=2,tv=2,dhx-,rdh=6,tc=4,sp-,hnn-,fxk=2,jm-,zt-,pkd-,ftpxd=5,rp-,xjhdk=5,lq=5,lnv=3,jkv=7,rdh-,rc-,dv-,xzh-,tgn-,dx-,zsvjv=9,vz=9,kj=3,bh-,gf=2,fl=9,nkr=9,gzm=9,pgm-,glcx-,kmnr=2,qs=1,tj=1,mq-,gvbrv=5,rsr=8,fhvv=5,tp-,tj=8,qlqm=1,ctml-,dvlpz-,bvx-,qspjl-,jm=3,ncdnz=2,qxn=5,kvcv-,szxvn=8,gnhm-,xhv-,gjcm-,lb=7,cpf=6,kqnlm-,ghq=8,sq=8,rsr=7,dgtvts=9,vgfgh-,fldd=8,htm-,frlqr-,bm=7,cg=1,kk-,ccfzjq-,nbcg=8,xkh=7,lpjl=5,dj-,tc=8,njlmn=4,mx=1,zl-,xjhdk-,sv=9,kl-,fbk=1,rgxnz=1,cdcb=9,klj=9,lmxv-,hcgtn=7,ltljr=1,xs-,br=3,sq-,qg=1,vz-,rmj-,qzg-,zrcqs-,mfgxcx-,bm-,fgq-,rsvp-,njjk=8,ldv=4,gknc-,gzktrh=3,vr-,dlsm-,mx-,xs-,btl-,jf=5,ljrdxk-,bnblt=4,rk=2,mk=4,kgvq-,bh=6,dncb-,vh=8,mxzbj=5,cxjsr-,sdcx-,fldd-,kh-,gc-,cs-,fl=1,jrkql=7,pm-,rsvp=6,kh-,glf-,cvmq-,zcq=4,fmd-,ttvl=5,vdc=2,cpf-,dx-,kbvm-,gd=9,kknkjz-,zz-,zh=2,ttvl=8,pgx-,jcj=6,ppl=3,fmd-,zc=9,nvlff-,lnv=6,kgvq-,fdcl=4,dnjdn-,thzx-,nq-,blqv-,psn=4,mxzbj=8,cvq-,fzt-,rbt=9,zb=4,cg=1,jsjfs-,pl=7,pdbh-,dt-,kmnr=9,sqv-,gbfb=9,xtm-,bzl-,smk-,sv-,pjx-,ncm-,dj-,ctms=5,bm-,fgd-,qspjl=8,pvm-,lhc=5,ls=8,sqv=7,htv-,zt=5,kvsd=7,gd-,jjf=7,kd=1,cqg-,sg-,tghsj=2,bf-,nnmj-,ng-,dbcb-,dgd=9,zdd-,xkh-,gh-,bvm-,rb-,zmfz-,xkh-,lpjl-,sz=8,ppl-,khlc=6,cnm=4,xf=8,ljrdxk=4,dlsm-,rnt-,dr-,rsr-,nm-,qhtc-,tz=4,rvs-,dnh=9,nflm-,dnl=5,xhv=1,ql-,jbmd=4,gbfb=6,ps-,ltf=8,mmn-,frrg=8,rh-,dmq=6,ng=6,ngd-,hn-,smsh=1,cg=4,vqh-,ncm-,zd=3,sqv-,lmxv-,qlqm=8,ztgnkx-,nkr-,qjmx=5,cv-,lc-,pc-,zhq=5,blqv=4,ncm=8,tflb-,rsr=2,dvlpz-,mxl-,gc-,rm=1,zt=8,fmd=2,dncb=1,xss=4,cqh=5,dlm=5,jctv=1,gbfb-,xm-,kz-,sz=6,btl=9,pv=7,hzmp=8,nsjt-,mnv=4,vc-,jbd-,ccmd-,dlsm-,ldv=8,clj-,stdm=7,ct=4,xs=1,rkxg=7,np-,qgt-,hrv=8,pr-,bzhf=7,fbk-,xf=2,gv=2,tc=7,km-,ltljr=4,gxc-,dnh=9,pdbh=7,ltf-,ldv=4,qx-,frrg=8,tz=2,jmq=7,tsd=7,vx=2,rmhz=2,zpt-,df=5,zdd=6,sz-,rh=6,tv=1,rvvv-,khlc-,tgk=3,smk=7,qgt=2,jsjfs=8,zmfz=9,nqm=3,vct=1,lc-,hd-,tljj=2,lh-,frrg=7,zk-,kjqx=5,cvj-,qm=4,zj=4,tcv=4,xfvj-,ndfqxt-,vqq=7,fv-,hdr=7,xx=7,tnjs=5,dxb-,gjcm-,xkl=7,ncdnz-,zd=8,ndtf-,vmhh=5,prk-,pjg-,vt-,hrc=4,pm-,qvkv=9,gst=4,rq=2,prtnpg-,jcp-,zgms=4,sz-,vqq-,qgt=7,xfvj-,sqftz=4,cnm-,psn-,kjt=9,bzl=1,xzh=2,vqq=1,prb=3,tcv-,mpcvh-,lb=6,bf=5,pjx=4,lxpmn-,dx-,dz-,qfp=2,tcv=8,tx-,fj=3,tx=8,lhc-,rkh-,ttvl-,vc-,zdd-,jmq-,rbt-,psn-,cqh=9,gcmgdr=1,mk-,fgd-,mk=9,dr=9,dk-,sp=5,kvcv=8,xc=6,fxk-,jpksf-,tclnp=2,lcc=2,ttvl-,kknkjz=9,hh=1,rh-,rt-,hgct-,grdp=6,qvkv-,dcz=3,jpksf=9,tsd-,nflm=4,glplq=4,rmd-,gddfx-,vc=7,njlmn=9,xxfz-,nflm=7,jpksf-,ssns=5,spx=1,rft-,fvt-,lzz-,qxn=3,ghq-,xm-,pz-,rv-,mxzbj=4,prtnpg-,xxfz=8,hbhvz-,lfp-,cqg=1,lcc=9,pjx-,zqv-,fldd=6,rdh-,ks-,rvs-,hzmp=5,zmx-,qs=8,zk-,xn=1,ddll=6,rmj=5,ljrdxk-,fbk-,bvx=5,km=2,bm=1,ccmd-,fvt=5,pp=7,km-,zd-,vqh-,hrc-,sqv=8,cdcb-,qht=2,gb-,gzktrh=9,nb-,nflm-,fqv=5,tflb=2,ph=2,gph=8,pd=7,psn-,hnn=1,grdp=4,vmhh=8,vt=2,xf=6,tnc=4,cvq=2,hzs-,rkh=6,zmfz-,km=8,mz-,lvzqj-,jqhl-,rvs=8,ctm-,cvmq=3,dmq=5,dzqx=1,pc-,fgl=4,kvsd=8,lcc=5,vqq=7,hcv=2,lx=4,tgk=5,gph=9,dnjdn-,gg-,dnl=1,ltljr=2,jkdr=8,tj-,cpk=7,mk=5,ssns-,kz=6,bhk-,fgq=2,pz-,pc-,zgms=7,zmx-,hvk=9,gb=9,crg-,mk=3,gg-,sg-,jkv-,vmhh=8,ctms=4,drp=1,gddfx=4,zrfvq=5,tv=7,pqv=5,dj-,bqgn-,rm=2,rmj=3,dk-,hvk=1,cvmq=4,jbmd-,xxfz-,ndfqxt=5,bbs=6,rdt-,lbf-,rsvp-,mx-,kl=8,tdk=6,bb=8,ds=8,nqxk-,gsq-,vt-,fkc-,xtm-,qjmx-,bzl=6,pnp=7,pz-,cdzfk=9,dx-,frrg=3,pskx=5,cpf-,tc=3,lb=6,md=3,tj-,jm=2,tqp=3,cs-,jnv-,jctv=8,cgbg-,hbrg=7,pm-,gxc=6,vz=2,gg-,kvcv=7,pkd=4,ttvl-,jjf-,gj-,md-,rsgx-,hd-,cv=3,xf-,ddgf=4,lxx-,dgk=8,dvlpz=1,dlm=7,kknkjz=4,nbt-,rbt=3,cv-,cdcb=9,jvx=4,cnm-,fl-,dhq-,mxzbj-,zc-,kmnr-,fqv=1,gjcm-,fgl-,qgt=8,grx-,xpv-,km-,jbmd=3,bf=1,ttvl-,pnp=7,gh=1,xkl-,zpt-,gts=3,jsjfs=7,jqc=2,lxpmn-,jm-,sdcx-,rgxnz-,hzs-,nflm=5,prb=5,vz-,frlqr=9,ckk-,tghsj=6,vr=3,lh=1,gbfb=6,pgx=1,ls=8,mhxq-,tv-,md=8,bbf-,vqh-,rkxg-,szxvn=4,tz-,lxrk=3,ppl=2,bm=8,kj=7,qvkv=9,bh-,lg-,vxq=2,pdbh-,gvbrv=8,drp=2,cg-,pm-,lpbrxv=9,kl=2,pg=3,jbmd=9,xltm=9,dncb-,lcc=3,hgct-,khlc=8,trq=2,zpj-,tljj=8,cdzfk-,qspjl-,lfp=1,zt-,kj-,nm=4,lxrk=4,bbf=9,glplq-,kvcv=1,dgtn=2,gknc-,vxq=6,fs-,gvbrv=3,qjmx=1,sz-,pv-,lhgdbs=5,sg-,lfp=9,qbc-,llkb-,zl=3,kk=5,hnn=2,msz=6,pg=2,klj-,frlqr=8,xnbx=2,tv-,jnv-,kgt=2,kdts-,dh-,nbcg-,trgjf=1,pgm=4,gvbrv-,rvvv-,jcj-,xjhdk-,lb=3,fs-,cs=5,lx=5,ct-,xkl=1,vh=5,clj=9,xjkhv=4,fbk=5,bjrvxh-,jh=6,blqv=5,jcp-,dv-,cgbg-,sqv=3,ckk-,lh-,mx=4,kjt=2,mx-,st-,mdv=6,hk=6,mn=2,lfp-,ltljr-,rc=1,pv=7,hz-,gsq=1,vgfgh=1,jkf-,pgx-,jqc-,mnv=1,glb=6,bvm-,qxn=6,gg=2,mk=7,sv=4,zc-,gb=2,rft-,pxqj-,lg=3,blqv-,pnsqf=5,dn-,rsvp-,pgx-,prk-,cdcb=1,xhv-,qbc-,kbvm=3,msz=8,dg=4,clj=1,kj-,fl-,ls=5,mmn=2,blqv-,rv=7,gcmgdr-,kl-,dnjdn=7,dd-,zcq-,tt-,jqqkmd-,jxl-,xz-,ztgnkx=6,lxrk-,kd-,kh-,fxk=5,qg=1,jbmd-,fvt-,lzskx=1,dvd=6,nh=2,jm=7,tgk=1,qgt=9,rj-,cpk=5,prb-,xfv-,kbvm=5,cnm=2,ssx-,gh-,pdtxl-,kdts=5,tljj-,xtm-,kmnr-,fl-,gbfb=4,tdk=1,vhp-,dn-,ztgnkx-,vqq-,dd-,xs-,rmj=2,grk-,pjx=1,hbrg-,dk-,pc=6,vj=2,gv=2,lpbrxv=6,ddgf-,pr=2,fxk-,ct=3,tcv=6,bjrvxh-,gjcm=1,kvcv=2,ndtf=8,khlc=5,fl-,xtm=7,lp=1,ph=9,xx-,hp-,lc=9,vt-,kdts=3,nk=8,fvt=2,xjhdk-,dxvsc=1,cx-,md-,lxx=9,rv-,xxfz-,vgfgh-,tljj-,xgzzl-,psn-,sqftz-,vh-,lfp-,mx-,gvbrv=7,rkh-,sp-,hrh-,tclnp-,ssspbh=7,mlq-,jsjfs-,xfv=5,cv-,mq-,xv=6,rt=8,hpr=3,mhxq-,dq-,tgn-,dxc=5,cv=3,qvkv=9,jkv=8,tvz=9,cvq-,sg-,rsr-,gst-,dh=4,ssspbh=9,xjkhv=6,bzl=7,qbc-,jmsb-,njlmn=8,rp-,thq-,xkh=5,rj-,jvx=3,lhc-,dlm-,hrh=5,prtnpg-,mn-,md-,bsn=2,hgx=3,jqhl-,xs-,tdk=2,ct-,cqg-,hzt-,lq-,pm=8,gf=5,jvx=3,cttxtn-,hdr=5,dnh=1,sz-,pxqj=5,bjrvxh=2,jcj-,tv-,pz-,nqjk-,qspjl=7,vbcx-,km=6,pjg=2,jmq-,sp=1,cj-,mz=6,lhgdbs-,rt-,lbf-,gddfx=3,pl-,znvf=1,rb=6,hk-,jh=7,rmj-,fbk-,frlqr=3,zgms=8,gnhm-,rmj-,sztqf=2,dnl=9,rj=8,tx-,fdcl=8,xpv=4,pr=9,rnq-,jd=1,kh=6,dnjdn-,qjnxd-,jbmd=1,hgx-,ftpxd=2,lh-,zsvjv-,cx-,cxjsr=6,jcp-,hbrg-,sqftz-,lnv-,grx=1,lh=2,rp=6,mn-,gzktrh=2,ckk-,gzm=1,fv-,vt-,gd-,cqg-,gbs=8,jsjfs=5,zqv-,mxl-,szv-,vdmh=7,zh-,gc-,fgl=1,dd-,lbf-,crg=2,tghsj=2,hqpq-,zv-,kl=4,ssspbh-,dbcb-,dzr=8,pxqj=4,gxc=9,thbn-,hh-,rt=8,lzz-,lmxv-,xd=5,rsgx=8,rsvp=2,lmznsr-,lvzqj=3,lbf=4,tp=8,blqv-,lsbn=7,pbdgnl=6,vbcx=5,xkh=9,qjgqb=8,lmznsr-,hrg-,ssns-,bvx=3,kgt=3,khlc-,jmq=5,qlqm-,qjnxd-,dxb-,ctm=7,dcz=3,fhvv-,kcgxz=2,jlls=3,pd-,hqpq-,sn-,zpj=4,cqh-,jrr-,drp-,nbt=8,ds=5,gst=9,dzr=6,btl-,tghsj-,glplq=6,dxc-,smk-,hzmp-,rdt-,bc-,fvt=8,fgd=1,dz-,gknc-,bf-,sqv-,qht=1,ttjk=7,fkc=2,bb-,rsgx=8,zd-,gc-,rsgx-,zt=8,dvd=5,pjg=6,lc=9,mxzbj=2,cvq=3,pkd=3,gq=2,bnblt=4,hnn=2,mlq-,xd-,lsbn-,dhq=9,mccg=5,kcgxz-,qjgqb-,pd-,sqv-,cpk-,lpjl-,hnn-,dxvsc=6,htm=3,hpr-,xfv-,dzr-,pdtxl-,bh=8,dhx=5,cpm-,ljrdxk-,rkxg=4,ds=9,vqq-,ctqtk-,kd=7,sp=7,hcgtn=8,qfp=5,kz=1,bc=6,mfqx-,mfgxcx=2,sn-,ddll-,dhq=4,ltljr-,jlls=1,hrg-,rtkb=6,sqv=6,rkh=1,qjmx-,zgms=1,gknc=6,mccg=6,bqgn-,xn=5,gd-,hgx=1,sz=4,rv-,dd-,hrg-,pdbh-,lb-,tqp=3,pc=4,qjgqb=8,zdd=1,qhs=6,ppl=1,mq=3,xnbx-,vbcx=7,prk-,nk-,dgd=6,crg-,hqpq=6,nbt=7,dz=2,smk=1,vdmh-,jbd-,gknc=6,pc-,cvj-,dj-,dzqx=9,dq=1,fdcl-,hrv-,hp=5,tqp-,nq=8,jnv-,nh=9,dv-,mdv-,jm=4,nkr=4,kgvq-,ndtf-,rkh=4,rsr-,hgx-,thzx=6,mfgxcx=4,gd=7,zdd=3,bbf-,br=2,pdtxl-,rk=7,qht-,ckk=9,ctm-,sqv=9,llkb-,xjhdk=9,gh-,hrh-,frlqr-,ljrdxk=2,pc=1,ls-,bnblt=5,rkh=2,hnn-,sv=8,dd-,njjk=9,ps-,gzktrh=1,zqv=9,xfv-,sg=6,tdk-,zmx=4,pjg=6,dgtn=6,xm-,hbrg-,sth=3,kh=9,xnbx=6,kj-,gknc-,vxq-,blqv-,pgx=3,ql=5,dlsm=5,qx=7,bzl-,rk-,kdts-,zh=2,xkh-,hc-,gbs=4,bx-,cqh-,dxvsc-,hp-,zgms-,gv-,sztqf-,zmfz=3,sn=6,zk-,pjg-,ng=1,gts=6,tvz-,ltf-,klzc=9,lnv-,ql=9,thq=3,klj=2,xb-,vqh=1,qjmx-,zsvjv=8,zd=7,tgn-,jm=3,khlc=9,fkc-,rsgx=5,sz=1,sn-,vc=3,ls=4,lpbrxv-,xxfz=2,lx=8,gnhm=3,bf=7,lpjl-,rmj-,hh=5,lsbn=4,xhv=6,lxx-,gb-,bc-,glcx-,grx-,stdm-,jqc=5,ndfqxt=6,bzl-,thbn-,nsjt-,pnsqf-,kx-,jbmd-,zv-,fl=5,qbc=4,tj=6,tgk=6,pskx-,njlmn-,ckk=6,jbd=2,hrv=5,gddfx=9,cvq=4,lg=6,kmnr=5,rft=9,df=6,lhc-,lv-,jqc-,rdh-,jkdr=7,xv-,sv=6,ds-,ldv=2,vh=4,gxc-,cgbg-,gsq=6,vc-,mz-,md-,zst-,ssx-,hzs=5,xln=9,dbcb=2,gj-,psp-,br=2,fv=7,vmhh-,fgd-,lnv=9,bh=9,lhc=1,xm-,nflm=3,jqhl=3,xjhdk-,klzc-,cvmq=7,hdr-,kknkjz=9,np=8,zcq=4,bvx=8,hrh=7,dgk=4,ks=9,pkd-,fvt-,mfqx-,njlmn=4,lcc=4,jjf-,kl=2,lmxv-,zgms-,jqc=7,hrc-,tnc-,pdbh=2,clj=7,tsd-,hzs-,trgjf-,trgjf=4,cttxtn-,cpm=2,hc=7,lhgdbs=8,dhq-,rb=1,qhs-,rvvv-,gnhm=8,mcn-,pd-,dxvsc-,tclnp-,hzs-,rdt=8,tnjs=2,trq=3,lh=6,thzx-,zmx-,bh=3,kjqx=4,lv-,dzqx=6,psm-,ctml=5,lb=3,psp-,cpk=8,bm-,mz=7,lpbrxv=5,znvf=4,mhxq=3,rh-,qjgqb-,sdcx-,tghsj=2,qhtc=3,dcz-,ctml-,pgx=5,prtnpg=2,ccmd-,ctml=3,bh=3,fgd-,bb-,nbcg=6,psmsj=3,bqgn-,ctm=8,stdm-,lhgdbs=9,tvz-,rft-,vr-,fs=8,np-,ppl=2,qm=4,dvxvnq-,vct-,glb=5,jvx=7,hgx-,thbn-,sztqf-,vmhh-,rb=4,pm-,nflm=5,ktp-,gknc=1,zmpf=8,gb-,ltljr-,xxfz=8,mgp=1,vx-,fs-,hdr=4,rsvzkj-,xxfz=2,xm=8,rdt=5,dj=1,qspjl=2,vct=2,dbcb-,fdcl=9,zb-,rtkb-,ssspbh-,mfqx-,hzs-,xln-,gknc=6,gzm=4,ssns=1,ljrdxk=8,gxc-,pt-,pg-,fzt=4,mz-,hrv=5,ql=9,rds-,ckk-,jctv-,qjmx-,psmsj=3,tmg=6,fxk=7,vj-,kbvm-,hzs-,pgx-,xltm=6,nnmj-,mfqx=7,rdh-,vx-,pqv-,rc-,nflm=7,kvcv-,hgct-,fhvv=9,fkc=9,lzz=6,dvxvnq-,kgvq=6,hk=3,jjf=3,rkxg-,fs-,zd-,hrv=3,cpm-,jcp-,xfv-,xxfz=7,cvq-,zrfvq-,hcv=9,dxvsc-,gts-,fkc-,sqv-,jn=1,hnn=7,kcgxz-,lzskx=8,ctqtk=2,pl-,lmxv-,kvcv-,psp=9,cqf=1,lp=5,mxzbj=4,ls-,gj=4,hqpq=3,lv=3,zv-,llkb-,nnmj-,kh-,dz-,fkc-,psm=4,jrkql-,tp-,gsq=3,bbf-,tvz=1,cttxtn=3,rt=1,bvx=2,km-,bkc-,pvm=4,jctv-,gbfb=7,ndfqxt-,gc-,rbt-,jd-,gh=5,zmfz-,cxjsr-,xgzzl-,xs-,pv-,stdm-,lmxv-,pd-,zmfz-,qs-,htv=5,nm-,zk=7,vx=6,tqp=5,dncb=2,prk-,pp=1,jmq=8,smk-,jkv-,xpv=8,xd-,jmsb-,xjkhv=1,psp=4,mn=7,lh=2,tsd=3,dk=9,kh-,nsjt=7,kdts=8,zk-,ttjk-,dmq-,jbd-,dhq=7,grdp-,pp=5,fl=3,hn-,fnn-,xfv=9,dv=7,thhvf-,cdcb=5,hp=9,cclc-,zmpf=3,xb=3,dzqx-,xb=8,tljj=8,rft-,lx-,mmn-,cj=7,ssns=9,bzhf-,lh=5,dhq=2,cclc-,mccg=3,gj-,kcgxz-,zz=2,lhc-,kmnr=7,bh-,kvsd-,qgt-,btl=9,thq=2,bzhf=5,fbk-,tdk=3,gc=2,mz=3,kcgxz-,fv-,cttxtn=2,mlq-,bsn=3,vmhh-,nh=4,kvsd=2,ctms=1,jmq-,nm-,kcgxz-,kh-,rsvp-,dlsm=9,bhk-,rgxnz-,jsjfs=7,bc-,tj=3,tp=7,ctqtk=4,jjf-,rsvp-,cxjsr=5,xzh-,pnp=1,lb-,zrfvq=8,dv-,klj-,cdcb=5,gxc-,pt=8,rh=4,dd-,spx-,dgtvts=4,jkdr=7,gq=4,nltq=5,mmn-,rt-,mgp-,gjcm=2,dv-,lq=9,mnv-,szxvn=9,glf=6,ljrdxk=1,mhxq=6,dxc-,xn=3,gcfl-,pgx=3,bzhf=8,lx-,psmsj=3,dlm-,hcv-,zj=7,rtkb-,mhxq=3,ssspbh-,zt=9,jm=3,qht=3,nq=4,dxb-,lpbrxv=5,rft-,tc=2,fmd=2,fdcl-,lvzqj=7,fgd-,hzs-,ls=9,fzt-,ps-,jsjfs-,jmsb-,dhx=5,hc=4,sdcx=2,glf=7,zmpf=8,njlmn-,pg-,zk-,bc=7,vz-,zmx=9,trgjf=6,tvz=9,pvm=1,dxc-,tdk=6,kx=2,vmhh-,qht=2,smsh-,rk=8,kd-,kqnlm-,dgtn-,ttvl-,xjhdk-,xkl-,dcz=8,crg-,dxvsc-,sb=3,fkc=6,fqv=1,rmd-,gph=3,blqv-,kjt=1,bhk=6,mhxq-,hh-,gcmgdr=9,hpr-,dnh-,xb=1,jqc=3,df=2,mlq-,ckk=3,pv-,xb-,nqm=7,vt=7,hdr-,zpj=3,qs-,fzt-,glcx-,jf-,jmq=1,rvvv=3,smsh-,lx-,tcv-,zt=2,rh=5,vhp=2,lfp-,qvkv=1,xc-,ddgf-,rmj-,ctms-,lxpmn=4,kcgxz=6,dvd-,prb-,pz=7,xs-,bqgn-,sfkpbv-,trgjf-,qx-,rtkb-,fbk-,dgtvts-,pc=3,lp=3,pkd-,zdd=8,xx=8,fldd=6,dt=6,gbs-,hrg=1,tz-,dvlpz-,zl-,rsr=4,kbvm-,thq-,ghf-,kjqx=3,nltq=8,kvsd-,bb-,sdcx-,mv=5,xn=7,pmp-,tvz=2,gcfl-,gj-,ds-,ghq=9,ttvl=1,frrg=9,kk=3,mdv=8,kcgxz-,hcgtn=2,vqq-,ndtf-,jd-,khlc-,kfr-,dzqx=5,clj-,dgtvts-,hrh-,ndtf-,fqv-,kknkjz=8,xhv=2,nltq-,gh=3,vr=6,gzm-,zpt-,mhxq=5,hzt-,dg-,bc-,rc-,kjt=5,hgct=8,gsq-,jm-,gsq-,xltm=5,kvsd=8,bhk-,lv=8,cv=1,sth=5,lxrk-,km-,pm=3,jn-,xpv-,jnv-,tghsj=6,rsvp=1,bbs-,prtnpg-,db=1,pc-,zrcqs-,ppl-,tsd-,lc=7,kk-,cvj-,stdm=7,qm=7,ltljr=5,rt-,thhvf=8,vdmh-,thhvf=5,fqv=6,bjrvxh-,rb=3,hzmp-,lsbtm-,tnjs-,cpk-,gj-,dgk-,qxn=3,dk=4,xnbx=5,jrr=8,ttjk-,gts=3,btl-,prtnpg=6,rvvv=1,rvvv-,hrg=2,pc=8,sb=5,gddfx=8,ds-,fkc=5,fvt=3,cvq=9,lsbtm-,psp-,lpjl=6,rdh-,zcq-,vbcx-,cx=2,kvcv=3,tgn-,bbs=9,gc-,ncdnz=9,lq=8,ldv=8,dhq=6,cvj=6,qjnxd-,rc-,lhcsbr=6,vj=6,qjgqb=5,hcv=7,mv-,md=7,grx=5,gst=2,vt-,fs-,sg=9,dhq=9,mgp=5,fdcl-,pr=6,rj=2,gq-,fs=7,xjkhv=1,xv-,df=6,ddll-,cg=3,ghf-,smk-,psmsj=7,rh=3,hbhvz-,fdcl=4,fj=5,zst-,dgd-,xkl=2,lcc-,pc=8,tqp-,sztqf=8,lhcsbr=3,nnmj-,lsbtm-,qqh=9,xtm=4,pl=7,jf=5,klzc-,mccg-,lpbrxv=8,tcv=6,cttxtn=6,bm-,mnv=3,ttvl=2,dzr-,tnjs=9,trq=8,drp-,ncm=1,pjx-,pt-,nqxk=2,kk-,tcv-,qhs=5,qht=3,rmhz=3,mn-,jqqkmd-,mxl-,hcgtn-,dvd-,hzt-,lmznsr=4,kn=9,cx-,jkdr-,zmx=2,tt=1,jd-,zv-,htm-,zgms=2,cdcb=4,dgtvts-,zrcqs=5,cdzfk=7,gjcm-,jbmd-,jbd=7,hp-,zhq=9,qlqm=6,dzqx=7,br-,vc=8,cvq=2,tz-,rp=6,dn-,dxc=5,grx-,pkd=8,tcv-,cnm-,jn-,psn=6,btl=4,vqh=7,lmxv=5,tc-,cpk=9,dnl=6,hcgtn=7,fj-,fnn=7,pl=4,jmsb-,jrr-,qzg=2,smsh-,fmd-,prb=5,cs-,ks-,sv-,ddll-,prk-,nnmj=5,kfr=6,bf-,xkh=8,pm-,gg=9,sn-,zhq=9,rp=4,jqqkmd-,vmhh=8,ctms-,jxl=6,rsvzkj-,zrcqs=4,zh=3,gddfx=7,qs=2,bvm-,hbhvz-,glplq=3,lzskx=5,fqv=1,nqm=3,kgvq-,lc=3,nk=3,lc=4,hzt-,jkdr-,rgxnz=1,gd=4,fqv=7,pnp=7,bh-,szv-,htv=3,rnq=3,ssns=3,ghf-,xz-,dnh-,vt-,jcj-,znvf-,lcc=6,bhk=3,vmhh-,nk=7,dnh=1,vdmh-,njjk=3,hrc-,hrh=2,rt=8,qhs-,prtnpg-,ccfzjq=1,zcq=8,pgx-,vdmh=2,sq-,kbvm-,ct=5,st=8,rds-,xpv-,hk-,ks=9,qqh=1,lsbtm=8,cxfrpr=8,thq-,crg-,nbcg-,ctml-,hgx=6,njjk-,zpt-,hcv=7,gvbrv-,nltq=1,dgtvts-,qhs-,nbt=3,kl=6,jh=8,dzqx=1,fnn=3,rc=9,xzh-,kmnr=6,zh=1,nbt-,tnjs-,rgxnz=5,sn-,clj-,ndfqxt=5,zmfz=9,khlc=9,xc-,gddfx=9,ppl-,cj=8,vdmh-,bx=5,vxq=9,bvx-,stdm=2,kcgxz-,jvx-,bb=9,cvmq=7,nqxk=1,mhxq-,fz-,fmd=9,lhgdbs=3,xtm=5,dcz-,jm=2,pjg=7,fvt-,qxn=6,ccmd=3,cqf-,ls=3,sp-,lv=6,tgk-,tqp-,rv=6,lb-,xvd-,dxb-,ljrdxk=3,rj-,pkd=4,cdcb=6,jlls=6,dlsm-,pv=6,dgk=2,mdv=7,pg-,lzskx=3,rv=3,prtnpg-,bbs=3,rmd=1,gj=4,rm=2,ssns-,np=6,xkh=9,hgct=1,hrh=9,thzx=5,rkh-,ps-,ks-,jvx-,fnn=9,br-,dvxvnq=2,hcv-,mv-,dv-,jqqkmd=1,fgd=4,nkr=1,vct=3,xv=1,glcx=7,br=8,ctm=5,dq-,gjcm-,ngd-,ctqtk-,tt=4,rdh-,fldd=1,cj=7,dlm-,grdp=5,nvlff=8,qm-,klj=5,ghq-,kvcv-,fldd-,pkd-,ls-,hk=3,jnv=1,jqqkmd=4,gzm=6,tqp=7,prb=9,pjg-,ph-,xd=9,dx=7,mxzbj=7,hcgtn=9,hp=2,hh-,bkc-,pqv-,grk-,bx=9,clj-,sb-,tgk=2,mfgxcx-,zk=3,pdtxl=1,prk=1,rk=3,tghsj=5,qx-,vct-,km=1,md-,jkf-,bvx-,vz=5,lv=6,qx=3,bsn=4,sn-,mcn-,fgl-,lxrk=7,gknc-,lzz=2,jn-,sth=6,dxc=3,sn=3,glf-,lpjl=4,gknc=7,dnl=7,cvmq-,pm-,bzhf=6,gcfl=8,hvk-,ctm=9,cvj-,dzr=2,dvxvnq=5,llkb=4,jxl=2,bc=7,qht-,rdt-,gsq=5,zmpf-,lhgdbs-,xzh=3,ppl-,vc-,cdzfk-,jqhl-,rv-,xtm=3,hn-,nltq=5,bkc=5,fldd-,jlls=3,pg-,cqf-,nqjk-,sdcx-,ndfqxt=1,nbcg-,gnhm-,hgct=4,thbn-,hz-,xn-,qxsddj-,mhxq-,bbf=6,nq-,klzc-,pskx=6,pnsqf-,klj-,hbrg-,fgq=6,ds-,pd=8,bc=8,ncdnz=7,mpcvh-,cqg-,dxvsc-,cpk=9,qspjl-,cdcb=4,dj=2,df=5,trq-,ssx=6,psm=8,st-,vxq=7,hrg-,pnsqf=9,br=6,njlmn=4,ttjk-,ttjk-,dh-,vc-,drp-,jctv=5,kjt=1,dnh-,lmxv=1,kvcv-,xc-,rkh-,hgx-,gsq=6,cqh-,cvq=2,hd=8,hp-,cqg=8,jpksf-,lx-,pjg=7,zl-,qg-,dxvsc-,gj-,dnh=8,dk-,ptdf-,cdzfk=5,grx=1,nqxk-,ghq-,lx-,jsjfs=9,dhx=9,kfr-,gb=6,cqh-,tc=4,ph=5,thzx=1,kk=1,rsgx-,gd-,nsjt-,ccfzjq=3,ndfqxt=7,bvm=6,clj=3,ncm=2,ckk=4,dgk=1,jqc-,rtkb-,xltm-,ppl-,qxsddj=8,rmd=7,rh-,mk=8,rb=2,gg-,dx-,vc-,xs=8,lpbrxv=9,ftpxd-,hgct-,hrc-,hrv-,rgxnz-,bzhf=2,xkh=2,fbk-,dnh-,cxfrpr=8,xhv-,bsn-,trq=4,ghf-,nqjk-,bjrvxh-,cvq=9,rmj=4,tclnp-,ghq-,fgl=5,gb-,sth-,dgk-,pjg-,stdm=5,mhxq=5,cttxtn-,lmznsr=8,lg-,hrg-,lh-,tclnp-,mv=8,fhvv-,ks-,nvlff=2,psmsj=2,ztgnkx=3,jrkql=6,kn=4,cdcb=8,grdp=1,xzh-,vmhh-,gzm=8,ps-,rbt-,mnv=7,pv-,xxfz-,bh-,hgx=3,lp-,pc-,hrv=1,rsr-,blqv=5,fkc-,fdcl-,tj-,bkc-,jnv-,gst-,hgct-,xhv-,nb-,gf-,lxx-,thbn=3,xss-,dz-,hdr-,ctml-,pxqj=9,tt=1,bzhf=5,dgtn-,bb=6,fxk=3,rmj-,qfp=2,rgxnz=7,fzt-,sz=3,jbd-,pc=7,kl=5,rtkb=6,htv=4,tcv=5,bbf-,cvq-,fv=4,gsq=8,qs-,ncm=3,gbfb-,dh-,dcz=5,lxpmn-,dv=9,lq-,dgtn=1,ng=5,jkf=6,jlls-,lvzqj-,mxzbj-,rsvp=6,ctms=2,bx=4,jcj=2,qhs-,hgct=9,gddfx=1,cv-,trq=5,qm-,dnl-,sqftz-,cclc=5,bf-,klj-,br-,jctv-,nk-,dhq=7,cxfrpr=2,ckk=2,bzl-,mxl=7,ghf=1,hqpq=1,rmd=2,jh=4,dncb-,xf-,gts-,gbs-,dxc=6,xss=6,tcv=4,xd-,rsvzkj=3,jctv=3,cvj=6,pp-,mlq=3,dgd-,jmq-,pjg=2,dxvsc-,prb-,zk-,bhk=3,qgt=8,hc=6,qlqm=2,nqjk=4,xnbx=6,pskx=5,grk=5,jm-,xb=6,fbk=4,thbn-,sv=5,fxk-,zd=6,nvlff-,xltm-,fs-,sdcx-,xxfz-,ljrdxk=2,ls=1,bf=1,nltq-,rb-,rh-,szv-,hp-,kjqx-,cg-,ltf-,ssspbh-,vdmh-,lhcsbr-,hgx-,lxpmn=9,hzmp=8,htv-,rh=1,kh=6,klzc=4,hk=6,dx-,nbcg-,thhvf=5,jlls-,vdmh=8,sqftz-,rv-,pjg-,gj-,khlc-,sth-,drp-,kgt=5,vz=2,sth-,qvkv=9,qhtc-,kcgxz=6,zpt=2,sdcx=3,thzx=7,dlsm-,glf-,bzl-,hbrg=1,glf-,nflm=5,rbt-,nh-,tclnp-,km-,rc=9,km-,pdtxl=4,dn=7,pdtxl-,gb-,jbmd-,ztgnkx-,dxb=8,cs-,lpjl=7,fz=5,ssx=6,bvm=9,bc=3,xfvj=7,prb-,mq=5,jcp-,xv-,kgt-,gh-,xvd-,zb=8,xml-,zj=1,gb-,mpcvh-,dlm=4,ssns=1,cxjsr-,mxl=9,nbcg-,tc-,tmg=5,gts-,lsbn=1,jf=7,df-,hz=2,grx-,kgvq-,dhq-,qhs=9,lzskx=1,gst-,qs-,lq-,thhvf=7,hh=8,qjgqb=9,qvkv=2,gcmgdr-,blqv-,xv=7,mhxq-,psn=6,mdv=6,rft=1,pbdgnl=9,bqgn-,klj=7,fdcl=5,szxvn-,tsd-,fgq-,gbfb-,pxqj=3,lq=6,gh-,qht-,fqv=4,fdcl=3,mccg-,cdzfk-,mxzbj-,grx=5,spx=6,cx=8,tvz=5,zst-,ssns=3,dcz-,njlmn-,jpksf=2,fz=6,nbcg=2,kj=6,kd=5,zmpf=2,zmx-,kk-,dcz-,klzc=3,kk=9,cnm-,rb=3,smsh=3,pxqj-,kmnr-,zv=9,qspjl-,rc-,kh=5,sth=8,trq=3,ddll-,rnt-,gcfl-,cj-,jrr=3,qlqm-,ds=6,tnc=3,zcq-,gcfl=6,rk=2,fdcl=3,hvk-,sztqf=9,grdp-,pd-,ndfqxt-,xtm=3,pkd-,cclc-,rvs=9,rsr=1,sdcx-,kgt-,jvx-,psm-,khlc=9,nqxk=2,thq=2,cxjsr=9,xzh=7,cs-,rm-,njlmn=8,rv-,xm-,mn-,gbfb-,bbf-,ct=3,gb-,jf=7,sztqf=6,bf=7,tsd-,lfp-,clj-,mmn-,jnv-,ddgf=1,tz=7,gf=2,cpm-,kj-,dxb=9,xd-,hnn-,psm=2,hcv-,st-,cqf-,kjqx-,jbmd=6,ckk=3,tmg-,dvlpz=5,br-,glcx-,hvk-,jqc-,dg-,fdcl=6,lc=4,dmq=5,lpjl=2,gj=3,zz-,mmn=8,hdr-,kl=7,rmj=9,mcn=7,vhp=2,bzhf-,sqv-,dnh-,xpv-,rmd=6,mnv=7,rkh-,nsjt-,zhq=2,frrg-,cqf-,fj-,zhq-,mdv=9,hrv-,tnc=3,gcmgdr=9,tv=5,fzt=6,mfqx-,lzskx=8,bvx-,nqjk=2,rnt=8,zcq=9,sfkpbv=2,xvd-,hrg=2,zqv-,xln=4,zk=5,pl-,tljj=1,tclnp=9,pp-,rvs-,hdr=4,prk=8,psmsj-,jrkql-,zpt=7,mlq-,dnl-,hrg=6,thbn=1,nm=6,fgd-,gbfb-,ndfqxt-,smsh-,sz-,pc=7,lxx=4,kvsd=1,kmnr=1,bzhf=6,gb=1,qjgqb-,bf-,qqh=2,kd=1,zj=2,pskx=5,cdzfk=9,mfgxcx-,xml=9,ph-,zz-,qqh=5,tt=1,xpv-,jqhl-,hbhvz-,thbn-,jxl=7,lnv=8,mxl=9,kcgxz-,mk=8,qqh-,pjx-,qzg=7,lmznsr-,sq=3,ncm-,dg-,cxfrpr=1,vgfgh=5,grx-,hqpq=1,sn=3,sqftz=6,dzqx-,jkv=3,tdk=8,pvm-,tqp=4,xml=1,gvbrv-,fzt-,msz-,thhvf=2,vj-,glplq=1,mfqx=2,bvx=5,ps-,mk=5,gst=5,kqnlm-,rsvp=6,rtkb=6,pnsqf=3,zc-,vdc-,szv-,sqv-,fz-,thbn=4,ccfzjq=5,hbrg-,bqgn=3,fl-,nk-,rbt=8,pz-,hh=1,bzl-,rgxnz=3,lx-,ssns=5,gnhm=8,dxb=5,jqhl=2,mmn=4,ztgnkx-,khlc-,thq-,rsgx-,ltf-,gxc-,lpjl=1,bbs-,nflm=3,lpbrxv=7,zdd=8,lsbn-,dlsm-,xfvj=5,glcx=2,jbd-,bx-,bf-,jnv-,ppl-,xc=2,tgk=8,fj=9,cdzfk-,db=1,trq=7,xkh=4,xc-,hpr-,glcx=3,gddfx-,gzktrh=2,hrc=5,mgp=7,dnh=8,zpt-,rsr=1,smsh-,mpcvh=9,xc-,crg-,kk-,gd-,ndtf=2,lfp=8,sqv-,mk=1,lfp=9,llkb=5,ctqtk-,gzktrh=4,vxq-,gnhm-,jqc=6,lnv-,fnn=3,fvt=5,rp=4,ddll-,rsr=5,tz-,nqm=2,sb=2,fj=3,kz-,lbf-,rp=1,pkd=2,ctml=8,mcn=4,ds-,gq=1,pc-,cttxtn-,lzz-,vx=9,xs=3,qfp=3,qgt-,pg=9,ctm-,tghsj=6,clj=3,ktp-,cvq=3,ptdf=7,qg-,bhk=9,kgvq-,lmxv=5,xxfz=2,pskx-,lmznsr=9,dvxvnq=9,xhv-,cnm=7,xm=9,bzl-,rkxg=5,cvmq-,bvm=9,ttjk-,sztqf-,cclc=4,hnn-,dhx-,cdzfk-,rv=8,mk=7,tp=9,cdzfk=5,kknkjz=2,cpm-,ddgf-,rdh-,gc-,vqq-,xtm-,lnv-,fj=7,tsd-,ckk=5,vct=3,rsr=2,zgms-,bx-,gnhm=1,xss-,rh-,hz-,pgm-,kx=3,vhp=7,zhq-,rsvp=2,dlm=7,jkdr-,hgx-,dvlpz=4,fldd-,dgd=8,dj-,bzhf-,kfr-,xx-,vgfgh-,gzktrh-,gh=2,jpksf=2,vhp-,lxpmn-,mdv-,ljrdxk=6,xc-,glplq-,szxvn-,sn=5,qgt=5,mhxq-,tmg-,lx-,klzc=6,rvs=7,rgxnz=4,lh-,prb-,rsgx=2,pgm-,grk-,tgn=8,crg=7,nflm-,ng-,xxfz=9,nvlff=3,gjcm-,bkc-,hvk-,mxl=6,bh-,rsvp-,sg=4,hp-,hcgtn=6,cnm-,xtm-,sb-,zmpf=9,kgvq-,kz=5,tgn-,hzmp=7,jm=3,rkxg-,pvm-,rvs=8,tj=1,nqxk-,sq-,sv-,cttxtn=1,cvmq=3,kk-,fnn-,vhp=7,kk=6,mgp=6,br=9,kcgxz=7,cnm=7,vh-,nm-,sdcx=2,prtnpg-,mv=1,lsbn=2,cclc-,qg=3,kjqx-,kjt-,gd-,cvq-,kvcv=8,nqm-,rmj=5,vz-,kvsd=5,msz=8,nvlff-,jn-,lq=7,vr-,fzt-,hpr=6,zhq=8,dmq-,pdtxl=7,lhc-,bnblt-,zv=8,kfr=4,clj=3,xn=8,dd=8,qx-,khlc=1,ssns-,kknkjz-,xpv-,cpm-,dcz-,rnq-,trq-,fvt-,sth=9,nnmj-,mk=1,mvs-,ztgnkx=2,dh=9,jcp=9,dvxvnq=4,bx-,dlm-,jkdr=4,zrfvq=6,lsbtm-,rsvp-,zmx=7,gj-,rds=4,gst=7,jcj-,thq-,hc=1,frrg=1,pjg=5,df=1,zk-,hd-,lhgdbs=2,ndtf-,hd=7,khlc-,hrg=9,xvd=1,mnv-,fnn-,rvs=9,dr-,hvk=2,zd-,dbcb=3,hqpq=9,hgx-,np=3,vct=8,zz=3,vc=4,smk-,mgp=5,ppl=8,bvm=9,vh-,nflm-,jbmd-,crg=8,dh-,jbmd=2,jjf-,ghq-,vdmh=4,nflm=5,hcv=6,jqhl-,gvbrv=2,lxx=9,gjcm=9,prk-,xjhdk=7,gh-,pmgsxv-,jd-,xfv=7,xjhdk=4,hgct=7,pm=1,kx-,ds=5,cttxtn-,fhvv-,gcmgdr=3,nkr-,htm-,fqv-,hrh=4,nbt=4,jcj-,lxrk=1,kmnr-,lb=8,zhq=5,nb=3,nbcg=8,glf=6,lhcsbr=9,gcfl=9,bm-,vdc=9,gc=3,qspjl-,jjf-,cpk-,mccg-,tclnp-,lfp=3,vhp=3,ppl-,trgjf=9,sv=2,md=2,gst=7,dlsm=5,qgt-,cg=9,sb=7,ghq=8,gst-,drp-,sdcx-,cxjsr=9,ccfzjq=6,cxfrpr-,vt=3,grk-,jqc-,tgk-,zj=8,ttvl=1,thzx=5,gts=4,zrfvq=4,dt-,dk-,sdcx=3,qhs-,rsvp=5,hzt-,vr=6,ssspbh=7,gc=7,bnblt-,rds-,klj=9,xvd=2,hc-,ndfqxt=2,gzm-,trq=6,br=1,mccg=3,trq-,psp=5,pgx-,mk-,vj=9,xhv=2,jrr=1,dmq-,cvmq=4,zpt=5,dzr-,nsjt-,vbcx-,pdbh-,dk=2,mfgxcx-,qzg-,dvlpz=7,hcv=4,ps-,mmn=8,ckk-,nbt-,xml=8,ql-,tgn-,ssspbh-,cdcb=9,pm-,db-,nb=7,mhxq-,kfr=4,bjrvxh=5,mnv=5,lmxv=2,nltq=2,thbn=6,ctms=3,jsjfs-,lh=2,stdm=2,rsgx-,vmhh-,kgvq=3,jrkql=1,htv=4,bc-,gq-,qjgqb=5,tgn-,hrv-,mfgxcx=8,fqv=9,zk-,pdtxl-,tc-,ljrdxk=9,rb-,psn=1,dvxvnq=3,dx-,sq=2,fldd=6,sq=2,jqhl-,pjg=9,glcx=3,trq-,dgd-,xln-,psn-,qspjl=5,zpt-,jqhl=8,sztqf-,cnm=6,sfkpbv=9,bvx=9,tflb=2,bvm=2,tclnp-,zd=7,xkh-,fzt-,vdmh-,rnt-,ppl-,llkb=2,jkv-,gddfx-,pr=3,dvxvnq-,ljrdxk-,zsvjv-,bm=8,dvd-,xf=6,lhgdbs=9,zcq-,kfr=4,np=2,bx-,zd=2,bx=4,tc-,jm=6,xf-,tqp=6,np=4,qfp-,lxrk-,njlmn-,dzr-,cv-,rbt-,pnsqf=6,sg-,xx=8,hvk=5,md-,lc=9,jnv=9,kbvm=4,qjgqb=1,xss-,xb-,dg=5,zj-,vhp-,mpcvh=5,nm=8,mq-,zd-,mhxq=2,gf=8,dvlpz=5,dx-,nqjk-,qhs-,qvkv=3,drp-,hrv=1,xvd-,lsbn=6,dz=3,fdcl=8,vj=5,xb=7,nq-,ccmd=5,vhp-,bhk=9,dq=2,hbhvz=8,hzmp-,ccfzjq-,zmfz-,blqv=9,nqjk=5,psmsj-,dd=1,dq-,bkc=5,dr-,tcv-,pp-,bbf=5,dvlpz=5,sp=1,glcx-,rds=5,tv=6,gf=6,zd-,gf=1,qx=9,ltljr=6,mnv-,rdt=6,msz-,ccmd-,mlq=8,tx=9,fvt=5,frrg=4,rk-,st-,pl=6,lx=7,zc=1,vxq-,dnjdn=2,pnsqf=9,cgbg-,mfqx-,fxk-,drp-,cdzfk=9,nqxk=7,zmx-,dnjdn=1,dr=5,frrg-,ssns=2,kgvq-,lxx-,kj=8,zgms=9,pkd-,lhc=6,zz=5,drp-,kj=8,htv-,sb-,tj=1,pnsqf=8,klzc=5,bm=9,sqv=3,tt-,qhs-,xltm=9,rft=1,lfp=8,nqxk=2,xfv-,vz=7,zh-,spx=5,qxn-,bzl-,qx=9,lvzqj=4,vmhh-,jcp-,znvf-,mccg-,gknc-,xhv-,mv-,lhc=3,lnv=5,ktp-,pmgsxv-,nqjk=1,sg-,gjcm-,sb=3,ncdnz-,zgms-,st=3,cv-,qs=7,xf=1,nltq-,fbk=6,mx-,glb=6,dj-,hp-,rh-,cvmq=3,pmp=5,dmq=7,gvbrv-,ncm-,fgl=8,xfv-,bzhf-,jrkql=6,fl=3,dnh=9,grdp-,gnhm=3,mnv-,ddgf-,mgp=5,pt-,zh=5,pmp-,gh=5,ps=7,ndfqxt-,tdk=6,gd-,sg=2,qgt=4,qlqm=2,grdp-,smsh=9,lv-,vj=4,pmgsxv-,psn=2,vx-,ctm=8,prtnpg-,mhxq-,hcgtn-,dr=8,jm-,cvmq=6,xx=6,rp-,lx-,psp-,cqg-,bqgn=3,rmhz=3,lb-,dzr-,zcq=8,km=5,gddfx-,tdk-,dhx-,gzm-,tljj-,xn-,vt-,lv-,xb-,fbk-,lhcsbr-,cpf-,cs=8,cxb-,xb-,bkc-,mmn=7,zj=7,bf-
\ No newline at end of file