diff --git a/solutions/2023/dotloadmovie/src/day10/data/data.txt b/solutions/2023/dotloadmovie/src/day10/data/data.txt
new file mode 100644
index 0000000..85ad50a
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day10/data/data.txt
@@ -0,0 +1,140 @@
+FJ.|-FL-J-F-J-L-F|7F7F7J.|J7|-FF7.7F--|-F7F-.7.F--F-J.F|7FJ-77.|-|-F|7FL|FF|7.FF-L|-J7L-|-L-|-L-F.F.L7F..|7F|.F-JF77F7.FL7F-7.F---7L|77FJ7-J
+L-FL.-J|.L|.|7J7JJ|LJ7..FLJF--F.|7FF7J..F.JFL.FL--J|L7.L|L|.L77..J7FJL7JL--J77-L.F|7.7J|||.|J.LFJ.L..FF7FF-JLF7.|F||-JJ-L7-L7F7.FJL.|7-|LFJ|
+|J|L|J.L--|.|L7JJFJL7JFFL7.F7.J..F-L77.-J7LF-FJ|FLJF-J7|F777LJ-7-|-L-7|J|.|-LL7LL7L--7F-F--|.|--7FJF|J|LJJ.F.||FLJJJ.J.|JJ|J|7LJJLLJJ|LLFJFJ
+LFL7|7LJ.F|FJFLJ7|L-J.|JF7.|7-.F7F7.|--JL|-F7|7|7||||||F||||L|LL-||.FJJ.J---F.L-J.-.L7L--..|.|JL||FFL-J7L..JJ.J7-J||FF-|--7.|JF|JFL7F7.L|FJJ
+.J7L-7|JL|7J-|.LF-J-L|---JF|--FFJ||FJJFF-J|F7J-7-J|LJFLFJL---77JFL77F|FFJFFF|.|FL7LL7LJL.|.|-F-F.|-|-J-7LJJ7.7J|77|--|JJL-JF77JJ|FJL7L7||LJ7
+J||J.|JJF77|F-J7L|J-LL-7L-7JFF-J-|-7.F-|JLLJLF-JFL7|L||L-7F-7|F-7L-L7LF7LJ7JLF77-J.L77F.|JFJ-F7LFL7|FLJ.|.|7F7.|7FF.J|F.|L7JL-JF-7-LF||L7|L7
+.F|.|-JFFJF|F-.|L-JF-|F7-7L.J|F|JL-|-|||-F7J.LFL7.|7F|F7LLJFJ||FJ7LL-7J77LJLF|L||LF7-7|LJ77JL||-|FFF7|-FFF7.JJ-|--77|LJ7-JJF7JFJ-|L|F7-7L77J
+-LJF.|JFJFJJLL--7JF|||L|7L-JJ7.77|-||FF--JJ--7JL|-LF77L7LF-JFJ|L-7.LLJLLJF--J.LF7.||F77.F|-F.||7J7FJL7-LF||JLFFJLJ.FJ7-F7.F|.L7..LFF.L-F.|7.
+||.F7L-7LJ.77|.|||LF-L-|L|JJLLJLF|-7FL||J.|F|LJ-|.L|L7F77L-7|FJF7L-777.L|-J||F7||F|L7L--F77-FJL7JLL7FJJ.|||LF7JF7F-|.LJL7-FJF-.--J.|-J|L-FL7
+|F-7J-7L-JF77L7F-7.L|.L|-FJF77JF-|LL-.L-J.LF|7F||L7L7LJL7FFJLJFJL7FJF-7FFJFF7||||FJFJ-JFJ|J7L7FJJJFJL7JF7||FJ|.|J|.|.||FJL-77|F|77.||FJ.L7JL
+F77|.|LJ|F||LLF-.L.||7.LF--7||F||L-7J7||J...J77.|-JLL--7L7L7F-JF7LJ||FJ7|FFJLJLJ||FJ-||L7|.F-J|F-7L-7L7||||L7L777LF7-L|J..|7-F-F|JFFF-J-FLJ|
+7|F7-F|7FF|77L|J7LJFL-7FL-7L7JLL7-JJ-J.|F7FLLJ|FFFJF7F7L7|.||F7||F7FJL7F-7L7F7F-J|L7.F7FJ|-L-7LJFJF-JFJ||||.L7|F7F77J-F-|7L-J|-JLFJ|||LF77|J
+|FF|L7F-JJ|-J7.FL.LLJJLLF7L7|.F||LJ7.|-F7J--|7L-F77||||FJL-J||LJ||||F-J|FJFLJ||F7|FJFJLJFJFF7L-7L-JF-JFJ||L7L||||||..F77L|.LFJ7J.L7LL7F--J7.
+7F7|7|L.F-JLF7F77-FL.|F|||||L-7F-7JF7JF|L7|JL7|L||FJLJ||F--7||F-J|LJL--J|F-7FJ|||||-L--7L-7||F7L--7L-7L7|L7L-JLJLJ|F7||7..FFJ-77-LJJL|7-LL7L
+|F|-.|F7JF7.LF7LF7LFFFF-JL7L7FJ|FJFJ|F-JFJF7.|77||L7F-JLJF7|LJL-7|F-----JL7|L7LJLJ|F-7LL-7||||L---JF-JFJL7|F7F----J|LJL7-||J7.L-.LJ..LL-JL|J
+7.LJ--||LJLLFJF7-|7JL||F-7L7|L-J|.L7||F-JL|L7F7FJ|FJ|-F7FJLJF7F-J|L7F7LF--JL-JF7F-J|FJF-7|LJ|L----7L-7|F-JLJ||JLF--JF-7||L7-77..7J|-J7....F7
+|F-||-JJJ...7-||JL|7.FLJFL7|L7F-JF7|||L77FJFJ|||FJL7|FJLJF--JLJF7L7LJL7|F7F7F-JLJF7||.L7||F-JFF-7FJF-J||LF--JL7FJF-7L7LJF-|-J7-J7F-77|.FLL7L
+FL7L7..|..F-J||--7.-7||JF7|L7|L7FJ||||FJFJFJFJ|||-|||L7F7|F7F7FJL7|F--JLJ|||L7F7FJLJL7FJLJL7F7L7|L7L--JL7L--7FJ|FJ7|FJJLJ-|.|JLL7-|LLL-|JL|J
+-7LL|JFF7FJL.LJJ|LJLLF--JLJFJ|FJL7LJ|||FJFJ-L7||L7FJL7LJ|||||LJF7|||F--7.LJL7|||L-7F-JL-7F-J||FJL7|F----JF7FJ|FJL-7|L77J.LJ-L-77J--F|.FJ.L|7
+FL7F7F-|L--JF|7.LJJ|.L----7|FJ||FJF-J||L7L7-FJLJFJ|F-JF7|||||F-JLJ||L-7|F7F7|||L7FJ|JF7|||F7||L-7LJL--7F-JLJFJ|F--JL-J7F|7.FJ7L-77L7-7-LF77J
+7LLJL7J|.FJ-|JFJ7JF7F7||F-J|L7L-JFJF-JL7L7L7L--7L7||F-JLJ||LJL-7F7||F7|||||||||FJL7L7||FJ|||||F7L7F---JL---7L-JL7F-77F-7F777L-7LF--JL-7-|L|J
+F7.F7|FJJ7-FJ7|F7.||||F7L-7L7L7F7L7L-7FJFJFJF7FJFJ||L---7|L7F--J||||||||||||||||F7L7||LJFJ|LJLJ|FJL7F7FF7F7|F---JL7L7L7LJ|77JFF7LF7|||..J7L.
+||7LFJF|L7L7|F-FL-|LJLJ|F7L7|.LJL7|F-JL7L7L7||L7L7|L7JF7||-|L-7FJ||||||||LJLJ||||||||L-7|-|F---JL7FJ|L7|LJLJ|F7F7-|FJFJF-J7.FJJLFFJ||-F-L|FF
+L|J-L-J|FF.|-7|L7L|F--7LJL-JL7F-7||L--7L7L7|||FJFJL7L-J||L-JF-J|FJ|LJ|||L---7|||||FJL7FJL-J|LF7F-JL-JFJL-7F7LJLJL7|L-JFJ7LF7-J7FL77FJ.-JLJF7
+L|.FF-77-FLJ7.F.F7LJF7L----7FJL7LJ|FF7L7L7|LJ||FJ7JL--7||F--JLFJL7L7FJ||-F7-||||||L-7|L---7L7||L7F---J7F7LJL7F---J|F--J.F7|L7JFJ7|-JL7|.FLLJ
+.L.FL7.|JLL--||F||-FJL7|F77|L7JLS7L7|L-JFJL-7||L7FF7F7|LJ|F7F7|F-JFJL7|L7||FJ||LJL7J||F7F7|FJ||FJL----7|L7F7|L7F--JL---7|||FJ7JL7J77LF--|7|L
+L|FJ7|.|7|L7|F-FJL7L-7L-JL-JFJF--JFJ|F-7|F--J|L7L7||||L7FJ||||||F7L-7||FJ||L7||F--JFJLJLJLJ|-||L7F7F--JL7||||FJ|F------J|||L77-.JJ-JLL7-L-7.
+LJJF7J7||L7FLF7L7FJFFJF----7L7L--7L7|L7LJL-7FJ7L7LJ||L-JL7|LJLJLJL7FJ|||FJL-J||L7F7L----7F-JFJL7||LJLF7FJ||||L7||F7F--7.|||FJ.LL|F-L7LF-F.LF
+-7LJ|-7LJFL7J||-||F7L-JF7F7|FJ7F7|FJL7L-7F7||.F-JF-JL---7||F------JL7LJ|L---7||FJ||F----J|F7L7FJ||7F7||L7||LJFJ|LJLJF-JFJLJ|F77LJL77-FJ|.L|L
+||-LLJJ7.FJJL||FJLJ|F--JLJ|||F7|LJL-7|F-J|||L7L-7|F7LF7FJLJL7FF-7JF7L7FJF-7L|LJL-J|L----7LJL7||FJL-J||L7||L-7L-JF---JF-JF--J||J7L-LL-L---7L7
+|....LJ.FLJFFJ|L7F7|L----7||LJ|L7F--J||F7|LJFJF-J||L7||L--7FJFJFJFJL-J|-L7L-JF7F--J-F---JF--J|||F---JL7|||F7|F--JF-7FJF7|F7-||7|.7.LL-L|J7L-
+--7-LJ|F-F7-L7|.LJ||LF7F-J|L-7|FJL7F7||||L7FJJL-7||FJ|L--7|||L7L-JF7F7|F7L---J|L-7F7L---7|FF-JLJL--7F7|||||||L-7FJFJ|FJ|LJL-JL-7F7-7J.|JJ|FL
+|-|77.||LFFJJ|L7F-JL7||L-7L7.||L-7|||||||FJL-7F-J|||FJF7FJ||F7L7F-JLJLJ||F7F7.|F-J||LF7FJL7L--7F---J|||||||LJF-J|FJFJL7L7F7F7F-J|L7-7F|7F--7
+|7JF-.F-7L-F-JFJL--7LJ|F7L7L-JL--JLJ|||||L7F7|L-7||||FJ||FJ|||FJ|F-7F7FJ|||||FJL-7|L7||L7FJF7FJ|F7F7|||||||F-JF-JL-JF7|JLJLJ|L--JFJ..7|F.|.J
+L7FJ.FJLJLLL-7L7LF7L-7LJL-JF--7F7F-7|||||L||LJF7||||||JLJL7|||L7||FJ|||FJ||||L7F-JL7|||F||7||L7|||||||||||||F-JF7F7FJLJF7F-7L-7F-JJJ-LLJ7FF7
+.L7-7JJ||77LJL7L-JL--JF7F-7L-7LJ||FJLJLJ|FJ|F7|||||||L-7F-J|||FJLJL7|||L7|||L7||F7FJ|||FJ|FJL7|||||||||LJ||||F-JLJ|L-7F|||FJF7LJF7|J|F|J.FF7
+F7--||-F-L-JFLL7F7F--7|LJJL7FJF7LJL----7||FJ||||||||L7FJL7FJ||L7F--J|LJJLJ|L7||||||FJ||L7||F-J|LJ||||||F7LJLJL--7FJF7L-JLJL-JL7.||7.LJL7-|J|
+FL-J.F-7||F.7..LJLJF-J|F--7||FJL-----7FJ||L-J||LJ|||FJL--J|FJL7||F-7L-7F--JFJ||||LJL7||FJ||L7FJ.FJ|||LJ|L-------JL-J|F7F7F-7F7L-JL7-|.|.L|7F
+|L7.LJ-J7||-F7.F-7.L7FJL7FJLJL-----7FJ|FJ|F--JL-7|||L-7F--JL-7||||7L7FJL--7L7|||L7F-J|LJFJ|FJL7FJFJ|L7-L-------7F--7LJLJ|L7||L----JF7-F7L77J
+F-F-J7JL7JFJ||-L7|F7LJF7|L--7F-----JL-JL7||F-7F7||||F-JL-7F7FJ||||F-JL-7JFJFJ|||FJ|F7L-7|FJL7FJL-JFL-JF--------J|F-JF7F7L-J||F7F7F7|L7||7|FJ
+L7L-JJ-7L7JFJL-7||||F-JLJF--JL--------7FJ|||FJ|||LJ|L--7FJ||L7||LJ|F-7FJFJFJ|LJ|L7||L7FJ||7|||FF----7FL-------7||L7||LJL--7|||||||||FJ||-F7J
+F|7|J7.|LJ7L--7LJ|||L---7L7F7F-------7|L7|||L7||L7FJF-7|L7||FJ||F-J|FJL7|FJ|F7LL7|||FJ|FJL7FJL7|F7F7L7-F7F7F-7L7L7L-JF7F--JLJ|||||||L-JL-J|.
+FLL--7-|-L-F7FL-7|||F-77L7|||L-7F---7LJ-LJ|||||L7||FJFJL7||LJ|LJL--J|F7||L7FJ|F7||LJL7|L7FJL--JLJLJL7L-JLJLJ.L7L-JF--JLJF-7F7|||||||F-----J7
+-|7|FJFJ-.|||F7|||||L7L7-||||F7LJF--JF---7|L7||FJ||L7L-7||L--7F-----J|LJL7LJFJ|LJL--7||FJ|F7F-------JF------7FJF-7L--7F7|FJ|||||LJLJL7F7J|F|
+|LJJFJ7LJFFJLJL-JLJ|J|FJFJLJLJL--JF--JF--JL-JLJL7|L7L7FJ|L7F7|L7F7F7FJF--JF7L7L7F7F-JLJL7LJ|L--------JF-----JL7L7L-7FJ||||7|LJLJF7F-7LJL-777
+|JJJ|.FF.FJF7F7F--7|FJL-JF7F------JF-7L--------7|L7|FJ|FJFJ|LJF||||||FJF7FJL7L7|||L--7F-JF7|F7F-----7FJF---7F7|FJF7LJFJLJL7|F--7||L7|F-7FJ-7
+-.-.-L-|-L-JLJLJF7||L----JLJF------J-L---7F7F7FJL-J|||LJ.L7L--7||||||L7|||JFJFJ|||F--JL7FJ|||||F7F-7LJFJF--J||LJFJL--JF---J||F7LJ|FJ|L7LJJ--
+|7-|LF7JF7F7F-7FJLJL--------JF--7F------7LJLJLJF7F-JL-7F--JF--J||||LJFLJ||FJFJ-LJ||F7-FJL7|LJ|LJLJFJF-JJL---JL7FJF----JF7LFJ||L-7|L7L7L-77|J
+|F7J7F-7|LJ|L7LJF7F-7F--7F7F7|7FJ|JF7F--JF-----J||F-7FJL7F7L-7FJ|||F-7F-J|L7L-7F-JLJL7|F7|L7FJF---JFJF7F-----7|L7|F----JL7L7LJF-JL-JFL-7|JJ7
+.LF-FL7|L7FJFJF-JLJ7LJF-J|LJLJFJFJFJLJF7-|F--7F7|||FJL-7|||F7||FJLJL7LJF7L7L7FJL7F7F-JLJ|L7||FJF7F7|.||L----7LJ.||L7F--7FJFJF7L-------7LJ|F7
+7LF7F7||7||FJFJF-----7L-7|LF-7L-JFL---JL7|L-7||LJLJL-7FJLJ||||||F7F-JF-JL7L7||F-J||L7F--JFJ|||FJLJLJFJL-----JLF-JL-JL-7|L-JFJL-----7F-J.FF|J
+F-F-JLJ|FJLJFJ.L7F-7FJF7LJFJFJF7F----7F7LJF7|LJF-7F7FJL-7FJ||||LJ|L-7L-7LL7|LJL-7||FJL--7|JLJLJF7F7FJF-7F7F7F7|F7F7F-7|L--7L-7FF7F7LJLL--7||
+JJ|F--7LJF7FJF7.LJFJL-JL-7L7L-J|L---7|||F7|LJF-JFJ||L-7FJL7|LJL-7L7FJF7|F-JL---7|||L77F-J|F--7J|||LJFJ-LJLJLJLJ|LJ|L7|L--7L7FJFJLJL7F7|JFJ.|
+|.LJ.LL--JLJFJ|F--JF7F--7|LL7F7L----J||LJ|L77L7FJFJL7JLJ|FJL7F7JL7||FJ||L7F7F7FJ|||FJFJF-JL-7L7||L--J7F7F---7F7L7JL-JL7F7L7||J|F--7|||7||LF|
+-7.FL7FF7LF-JFJL--7|LJ|FJ|F7LJ|F7F--7|L-7L7L--JL-JF-JF---JF7LJ|F7LJ||JLJ7||||||FJ|||FJFJF--7L7LJ|F7|F7||L--7||L7L7F7F7||L7|LJFJ|F7LJ|L--7FJJ
+LF7LJFL|L7|F7L----J|F-7L7||L--J|||F-JL--J-L---7F-7L-7|F7F7|L7FJ||JFJL7F7FJ|LJ|||FJ|||FJ.L-7L-JF7LJL-JLJL--7||L7L7LJLJ|LJFJL7.L7LJ|F7L7F-J7J7
+7L7JFFFL7LJ||F-----JL7|FJLJF-7FJLJL-7F-------7|L7L7FJ||||||FJL-JL7|F7LJ|L7L-7|||L7LJLJF7F7L---JL7F7F7F7F-7LJL-J7L7F-7L-7L--JF-JF-J|L-JL-77L-
+FF7.FL77L-7|LJF------JLJF-7L7LJF7F--J|F-7F-7FJ|FJJLJ|LJ||LJ|F7F7FJ|||F-J-L7FJ|||FJF---JLJL7FF7F7LJLJ||LJLL---77F7LJ||F7L-7F-JF-JF-JF7F--JL7J
+LL|-.F-F77LJF7|F7F7F7F-7L7L-JF7||L---JL7LJ|LJF|L7F----7||F-J|||||FJ||L---7|L7LJLJLL------7L-J||L-7F7LJF77F7F7|FJ|F-7LJ|F7LJF-JLFJF-JLJ-F7.LJ
+.|L-JF|||F7FJLJ|||LJLJFJFJF--JLJL------JF7F7F7L-J|F7F-JLJL-7|||LJL7||F7F-JL7|7|F--7F--7F7L--7|L-7LJL7FJL-JLJLJ|FJL7L-7|||F7L---JFJ7F77FJL7--
+F7|.LFFJLJLJF-7|LJF---JFJFL----7F7F-----JLJLJL--7||||LF7-F-J||L--7||||||-F-J|7LL-7LJF7LJL---JL77L--7|L-------7||F7|F-JLJLJL----7L--JL7|F-J.|
+|L777FL---7FJFJL7FJF7F-JLF-----J|LJF7F7F7F7F----JLJ|L7|L7L7FJ|F7FJ||||LJ.L-7L7-|FL-7||F-----7FJF7-FJL--------J|||||L7F7F7F----7L7F--7LJL7-F7
+|.|LLJ|LF-JL7L--JL-JLJJF7L------JF-JLJLJLJ|L7F7F-7F|FJ|FJFLJJLJ|L7LJLJ7.F|LL7L7|FLFLJLJF7F--JL7||FJF---7F--77FJLJ||FJ|||LJF7F7|FJL7FJF-7L7JJ
+F7L7.LJJL-7FJF-----7-F7|L-7F-----JF77F--7FL-J|||FJFJL-JL--7JF7FL-JJJ.|-L-FJFL7|77---F--JLJF--7||LJFJLF-J|F-JFJF-7LJL-JLJF-JLJLJ|F7||FJFJFJJ.
+F-..JFLJ.FJL7L-7F-7|FJLJF7LJF-7F--JL-JF-JF7F7||||FJF----7FJ7F7JF|.|7F|||FLF7LLJLJ|JLL7F7F-JF-J|L--JF-JF-J|F7L7|-L7F7F--7|F7F7F7|||||L7L7L7-L
+JF|7||JLFL-7|J7LJFJLJF-7|L7FJFJ|F----7L--JLJLJLJ|L7|F--7|L77||-FF-|-F|7FJ-LJ|LJ77LJF7LJLJF-JF7L--7FJF7L77LJL-JL7FJ|LJF7LJ||||||LJLJ|FJ-|FJ7|
+FJ|LF-JFJ..LJ7F--JF7FJJLJFJL7|FJL---7L7F-7F7F7F-JFJLJF7|L-JFJL--7---J.|JJFJ||.LFJ|FJL----JF7|L7F7LJFJL7|F-----7|L7L--JL--JLJLJ||F7JLJ-FJL-77
+|.J-J77FJ-F---JF--JLJ.F7FJF7|LJF7F7FJJ|L7||LJLJFFJF-7|||F-7|F7F-J7L|.--7--.77.F|F-L-----7FJLJ.LJL7FJF-J|L----7||.L7F-7F7F7F7F7|FJL-7--L7F7L7
+|.J7JL|7J.L----JJF-7F7||L-JLJF-JLJLJF7|FJLJF7F-7|FJ7LJLJL7|||LJ|-L7LL..|JFF-JF7-|J-|F7F7LJF7F-7F-JL7|F-JFF7F-JLJF-J||||||||LJLJL7F-JL|7LJL7|
+F7FL7.|LF|J-F7F7FL7LJLJL--7F7L------J|LJF77|||FJ||F---7|FJ||L--7-J|L|.|J--JLLLJ.JJF-JLJL--J|L7||F7FJLJLF-JLJ-F7FJF7L7LJLJLJF7JF7||F7F--7JJLJ
+|-F7J.-7-|-|||||F7|F7F---7|||F7F--7F7L--JL7|LJL-JLJF--JFJFJ|F--JJL|FF..|7JLF-J-7.-L-7F-7F-7L-JLJ|LJF77FJF7-F7||L-JL-J.F----JL7|||||||F-J---J
+LFJJ.F7L7LFF|||LJ|LJLJFF7|||LJ|L-7LJL-----J|F---7F7L-7LL7L-JL7.F77||L|7F|F|L|JFL-J|LLJ.LJJL--7F-JF-JL7L-JL-JLJL7F-----JF-----J|||LJLJL-77LJ|
+F-JJ.|L-F--7||L-7|7F7.FJLJLJF7L--JF---7F---JL--7LJL--JF7|F--7L-J|.LJJLFF-77--7FJ|||.F7F7F----J|F7L--7L7F-------J|F---7FJF7F7F-JLJF--7F7L77L|
+|L--7-|JL-7||L-7||FJL7L--7F-J|F-7FJF--J|F-7F7F7L------JLJL-7L7F7L7L|..||FJ7||J|LFLJFJLJLJF--7FJ|||F7L7|L------7-||F77|L-JLJLJF7F7L-7LJL7|J||
+7-JLJ-|LJ-||L-7||LJF7L---J|F-JL7||FJF7FJL7LJLJ|F--7F---7F-7L7LJL-JF77|F|L7F7JL-7.|.L--7F-JF-J|FJL-JL-JL----7F-JFJLJL7|F----7FJLJ|F7L--7LJ.LJ
+J-..|J|7F-|L7FJ||F7||F7F-7||F-7|LJL-JLJF7L---7|L7F|L-7FJL7|FJF-7J-JJF--JFJ||-L.7JJ7.|-LJF7|F-J|F7F-7F7F7F-7|L--JF-7FJ|L---7|L--7|||F--JL|7.|
+|.--F.F-7.L7|L7|LJLJLJLJFJ|||JLJJF7F-7FJ|F---JL7L7|F7||F7||L7|FJJL|-L--7|7||.|-L-F-7F-77||LJF-J|||LLJLJLJFJ|F7F7|FJL7L7F-7||F7FJ||||JLL-JL-|
+77-L|-L7L--JL-JL-------7L7|||F---J|L7||.|L----7|FJLJLJLJ|||FJ|L77FJ7JF7|L7|L-7-|L7J-L7|FJL--JF-JLJF7F----J|LJLJLJ|F7L7LJ7|||||L7||LJ7JJJ|LF-
+.F7F-77L---7F7F7F---7F7L7LJLJL---7L-J|L7L-----JLJF---7F-J|LJFJFJ-J.F-J|L7LJF-J.F7JF-FJ|L--7F-JF-7FJLJF-7F7-F--7F7LJL-JFF7LJLJL-JLJ|.LJ7F7|||
+F|JJ..-F---J|LJLJF7JLJ|FJF7F-7F--JF7JL-JF7F------JF--JL7FJF7L7|F7J7L-7|FJF7L--7||-F7L7|-F7LJF7L7|L-7FJLLJL7L7FJ||-F----JL-------7J-7-|-LFFJL
+FLJFFF.L----JF---JL---JL7||L7|L--7|L-7F-JLJF7F-7F-JF7JFJ|FJL-JLJL7F7FJ|L7|L7F-J||FJL7||FJ|-FJ|FJ|F7LJLF---JJ||FJL7|F---7F---7F--J7F-.F-LLF7J
+JJ-FFJ-J|LF-7|F7F7F7F7F7LJL-JL7F7LJF-J|F---J|L7|L--JL7L-JL7F--7F-J|||FJ7|L7|L7FJ|L-7LJ|L7L7L7|L7LJL---JF----JLJF7LJL7F7LJF7|LJ|J.--F---7|L7.
+||..LL--77L7|LJLJLJLJLJL-----7LJL--JF7||F--7|FJ|F-7F7|F7F-J|F-J|-FJLJ|F7|FJL-JL7|F7L7FJ.L7L-JL-JF-7F7F7|F---7F-J|F-7LJL--JL---7F--7JL|.|FLL-
+|LF-LJL|FF7|L-7F7|F7F7F7F7|F7L------JLJLJF-JLJFLJ7LJLJ||L--JL-7L7L--7LJLJL--7.L|LJL-J|F7FL--7F7FJJLJ||LJL--7LJF7LJ.L--7F------JJ--L7.--J|7F.
+|LJ.LFFF-JLJF7LJL-JLJLJLJL-J|F--------7F7L7F7F7JF7F7FFJL--7FF7L7L7F7|F---7F-J-FJF---7|||F7-FJ||L---7||F-7F7L--JL7-F7F7LJF7F---7.L|F-7JL-JF--
+LF-|7L-L-7F7|L-------7F--7F7LJF------7LJL7||LJL7|||L7|F-7FJFJL7|FJ|||L--7LJ.F7L-JF--J||||L7|FJL7F--JLJL7LJL---7FJFJLJL7FJLJF--J.F-J-|F-J.|-J
+LLFJL7J|JLJLJF-------JL7FJ|L7FJF-----JF-7|LJF--J|LJFJLJ7||FJF7LJL7||L7F7L-7FJ|F77L--7||LJFJ||F-J|F-----JF----7LJFJF---J|F--JF-7-FL-7-|7L|J7|
+..7JLJJF.|L|.L7F---7F7FJL7L7||FJF-----JFJ|F7L---JF-JF7F7||L-JL--7LJ|FJ|L--JL7LJL7F7FJLJF7L7LJL--JL------JF---JFFJFJF7FFJL---JFJ.7F-7-F|7|LLF
+F7J|F.-777.LF-J|F-7LJLJF7L-JLJL7|F-----J|LJL-----JF-JLJ||L7-F7F7L-7||FJF7-F7L--7||LJF--JL-J.F------------JF7FF7|FJ-||FJF7F---JJFJ7.L.|.77FF|
+||FL|.F7-FLLL--JL7|F7F7||F7F7F7LJL--------7-F7F7F-JF---JL7L-J||L7FJ|||FJL7|L-7FJ|L-7L--7F7F7L-------------JL7|LJL--J||FJ|L-----7JJL7F7-F7--L
+7F-7|FL7|..LF-7F-JLJLJ||LJLJLJL7F---------JFJ||LJF-JLF7F7L7F7LJFJL7||LJF-JL-7|L7|F-JF7FJ||||F----7F--------7LJF-7F-7LJL7L------J.7--LJ.--J-J
+LJJFLJFLF..FL7|L-----7||F-----7LJF-7F7F7F77|FJ|F-JLF7||||LLJL7FJF7|||F-JF7F7|||||L-7|LJL|LJ|L---7|L7F-7F--7|F7L7LJ||F-7L-----7LFF.J7|.7JJ-F7
+L|.L|J-7F--LJ|L------J|LJF--7FJF7||LJ||LJL-JL-JL--7||||||F7F-JL-JLJLJL7FJ|||||FJL7FJL7|FJF-JF7FFJ|.LJFLJLFJ||L7L7F-JL7|F----7L--777FLFJ..7J|
+FF|||7F|J|.|.L--7F---7L-7L-7|L-JLJF--J|F----7F-7F-J||||||||L-------7F-JL7LJLJ||F7|L-7L7|FJF-JL7L7L--7F7|FJ.LJ-|FJL-7FJ|L---7|F--J-FJ-|-F-||.
+L7LF7JJ.L-7-7.F7LJF--JF7L-7|L--7F7L---J|FF-7||FJL--J|||||||F77F7F7FJL7JJL7F--JLJ|L-7L7LJ|L|F-7|LL--7LJL7L----7|L-7FJL7L7F7FJ|L---7L|-|.|7||J
+LJ.L||7.|||JF-JL--JF7FJ|F7LJF-7LJL7F7F7L7|FJLJL7F7F-J||||||||FJ||LJF7L7FFJL--7F7L-7|FJF-JFJL7||F---JF-7L-----JL--JL7FJ||||L7L7F-7|7|L7FFLJ|.
+.F7JF-FJJ-|.L-----7|||FJ|L7FJFL7F7LJLJL7LJL--77LJLJ7FJ||||LJ|L7|L-7|L7|FJF---J||F-J|L7L77|F-JLJL--7FJ.L--7F7JF7F7F7|L-7||L-J7LJ-LJ||.L-|FLJ-
+FLJF|-L7J.|.L-F---J|LJL7|7LJ|F7LJL----7|F----JF7F--7L7LJLJF-JFJ|F-JL7LJL7|F7-FJ|L-7L7|FJFJL-7F7FF7LJ7F-7FJ|L7|LJ|||L--JLJF-7F7|FJ-FL7.|LFL7J
+LL|7FFJ-.-L..FL---7|F-7LJF-7FJL-------J|L77F7-|LJF7L7L---7L7F|FJL-7FJ|F-JLJL7L7L7LL7LJL7|F--J||FJL7F7L7|L-JFJ|F-J||F7F-77L7LJL77.---L7L7JLF.
+F--JJ|LF7|77FLF--7LJL7|F7L7LJF--7F-7.F7L-JFJL7L7FJL-JF7F7|FJFJ|JF7||F7L--7F-JFJFJF7L--7|||F-7||L-7LJ|FJL---JFJL--J|||L7L7FJF--J7.|J.|F7|.|LL
+|FFJ-|7FL-7F--JF7L---JLJL-JF7|F7LJ7L-JL-7.|F-JFJL-7F7|||LJL7L7|FJ||LJL7F7||F7L7L7|L7F7|||||FJ||F7L-7|L7F-7F7L7F---J|L7|FJL7|F7J.F7L77.F.L-.|
+--|JF--7JJ-L---J|F7F----7F-JLJ||F-------JFJ|F7|F--J||||L-7FJFJ|L7LJF--J|LJLJL7L7|L7||LJ|||||-|||L7FJ|FJ|7LJL-JL--7JL7|||F-JLJL7FJL7||F-7L|FJ
+|L|F7.LL||FF---7LJLJF7F-J|F7F-JLJF---7F-7L7|||||F7-|LJ|F-JL-JFJJ|F-JF7-L-7F--JFJL7||L-7LJ|||FJ||FJL7|L-JF--7F7F--JF7|||LJF-7F7LJF-JF77L|L|7J
+F7L||7.||FFL--7|7F7FJLJF-J||L---7|JF-J|FJFJLJ||||L7L-7|L-7F--JF7||F7||F7FJ|F--JF-J|L-7|F7LJ||FJ|L7FJL7F7L-7|||L---JLJLJF-J7LJL--JJFJL7.|.FJJ
+F|JLJJ-7F-----JL-JLJF7FJ-FJL-7F-JL7|F7||.L-7FJ|||FJF7||F7||LF7||||||||||L7|L--7|F7L-7|LJ|F-J||-L7|L7FJ||FFJ|||F7F--7F-7L---7F-----JF7|77..L7
+FJ|LJ7|LL7F7F-7F-7F-J||F-JF-7LJF--JLJ|||F-7|L7|||L7|||||||L7|LJ||||||||L-JL7F7|||L7FJL7FJL7FJL7FJ|FJ|FJL7L7LJLJ||F7|L7L7F--J|F-----JLJ7--7.-
+7JJ-|--|FLJLJFJ|FJL7-LJL7FJLL7FJF----J||L7||7||||FJ|LJ||LJFJL-7||||LJ|L--7FJ|||LJFJ|F-J|F-JL7FJ|FJL7LJ7LL7L-7F-JLJ||FJFJ|7F-JL------7FF7LJ7|
+.|.FJ|.LJJF--JFJL7FJF7F-J|F7FJL7L7F7F-J|FJ|L7LJ||L7L7F|L-7L-7FJ||LJF-JF-7|L7||L-7L7||F7|L7F-JL7||F7L--7JFJF-J|F-7FJLJ-L7L-JF7F---7F7|-|-.F-7
+FF77.7-L.LL-7FJF-J|FJLJF7||LJF-JFLJ||F-JL7|FJF-JL7|FJFJF-J|FJL7LJF-JF7L7|L7|||F-JJ||LJ||FJL-7FJ|LJ|F-7L7L7L-7LJ-|L---7FJF7FJ|L--7LJLJJL|-7-|
+-FJ.FF7.L7..LJFJF7|L---JLJL7FJF----J|L7F7||L7L-7FJ|L7L7L--7|F7L7FJF7||FJ|FJ|||L--7LJF-J|L7F7|L7L-7|L7L7|-|F7L-7FJF7F7||FJ|L7L7F-J||.||F-7|L|
+L|L|-|-F.|-L7-L7|||F-7F----JL7L7F7F7L7LJ||L-JJFJL7|FJFJF--J||L-JL7||||L7||FJ|L7F-JF-JF7|FJ|||FJF-JL-J7|L7|||F7||FJLJLJ||J|FJ7||F777|LJ7JLL.J
+.7JL-7.L-J7LF--J|LJL7LJF-7F7FJFJ|||L-JJFJL-7|FJF7|||7L7L--7|L-7F7||LJ|FJLJ|FJFJL7.L-7||||FJ||L7L--7.F-JFJ||LJLJ|L-7F7|||FJL-7|LJL-7J|L|-7J..
+L7-FL77J.L|.L--7|...L-7L7LJ||LL7|||F---JF7FJFJFJ||||F-JF7FJ|F-J|LJL7FJL7F-JL7L-7L-7FJ|LJ|L7||L|F-7L7L7FJ.|L-7F7L7FJ|L7|||F-7|L-7F-J7J..||JF|
+FJF--LLJF-.7JJLLJ.F7|L|FJF-JL-7||||L7F-7||L7|FJFJ||||F7|||FJL-7|F7FJL7FJL7F7|F-JF-JL7L-7L7|LJFJL7L-J||L-7|F7LJL7|L7L7LJ|||FJL-7|L-7L7..F7.|.
+|.-..|.LF|7L|FJ7-F7F7FJL7L7F7FJLJ|L7||JLJL7||L7L7|||LJ||||L7F-JLJ|L-7|L-7||||L-7L--7L7FJFJ|F-JF7L---7L7FJ|||F7FJ|FJFJF7||||F-7|L--J-J77||F-L
+J7J-|7FFFF-.LF7J.|||LJF-J|LJ||F--JFJ|L7F--J|L7|F|||L7LLJ||FJ|FF7FL-7||F7||||L7F|F-7|FJL7L-JL7FJL7F7FJ|LJ7LJ|||L7LJ-L7|||LJLJ-||.|J.LLF77-J.|
+.L7..F-J.|7F-FJLFJLJF7L7F7F7LJL7F7L7L7|L7F7L7|L7|||FJF--J|L7L-JL--7LJ||LJLJL7|FJL7|||F7|F--7|L-7LJ|L--7F--7LJL7L-7F7LJ|L-7L|.LJ7|.7LL|L--L-7
+7.|.-JJFFJFL-F7LL--7||FJ|LJL---J|L7L7LJ-LJL7|L7|LJ||.L--7|FJF7F7F7L7F|L---7|LJL7FJ||||LJL-7LJF7L-7|F-7LJF-J.F-JF7LJL7|L7FJ7.FJ.F--|7F--L-|-L
+FFLLJ|JF7.FJ.LL-LF-J||L7L7F7F--7L7L7|F-----JL7LJF7LJF7F-J||FJ|||||FJFJF7F-JF7F-J||LJ||F---JF7|L7FJ|L7L-7L-7FJF-J|F7FJ-JLJLJF7|LJ|FJ--|L|7F-J
+-7JLFJ|L|7L-7.|7LL-7||FJ.|||L7.L7L7|||F7F--7FJ-FJL-7|LJF7||L7|||||L7|FJ||F-JLJF7L-7.LJ|F--7||L7||JL7L-7L7FJL7L-7LJLJ77|LJ|LL|7F7-JJJ.F-7FLLJ
+||J...|.FJ.LF-LJ|.FLJLJ|-LJL7|F-JFJ||||LJF-JL--JF7FJL-7|||L7|||LJ|FJ|L7||L7F7FJ|F7L--7||LFJ||FJ|L-7L7FJLLJFFJF7L--7-L7FJ-JJ|LL7LJ7|J.L.|7.||
+L--77L--||FJF-L|J77L7.FL.FJF||L7FJL||LJF7|F7F---J|L7.FJ||||LJ|L-7LJ|L7|LJLLJ|L7||L7F7||L7L7||L7|F7L7LJF7F-7L7|L7F-J77|LF77-|JL-|LL7FF7F.F7-F
+|LL-JJJF-J.FJ-.LJ|JJ777|-J-FJL7LJJ.||F-J|LJ|L--77L7L7L7|||F--JF7L---7||F-7F-JFJ||FJ|||L-J.||L7|LJL7L--J|L7L7||FJL7JL7|F-FL.|.||.FL-JFJJ7LJL-
+-7LLF-F7L|LJJLJJF.|L-J|L-7FL7FJL|FFLJL-7L7FL7F7L-7L7|FJ||||F7FJ|F7F7|||L7LJF7L7LJL7|||F7F7LJ.|L--7L----JJ|FJLJL7FJJ.L|..|FF|-LLF-7JFJ|JF7LFJ
+L|7.|LL--L.LF7.L|.FJL-L.FF|LLJ..77L|LF-JFJF7|||F-JFJ|L-J||LJ||J||LJ||LJ-L7FJL7L--7|||LJLJ|F--JF-7L7FF----J|F7F7||J.--7-JJ7F---J|F7-L7J|L|L||
+.FJF-7FJ.F7FL-L-7J|7..L|-FJ|LJLLJLFF7L-7|F|LJ|||F7L7L-7FJ|F-JL7LJF-J|F-77LJF-JF7FJLJ|F7F7|L7F7|-|FJFJF7F-7LJLJ|LJJ7|FJJ.FFFJL7-JJL-FJ-L-7|.7
+FJ|L-77.F-|L|.L|J7|FJJ-L7|J7.7J|FFFJL--JL7L-7|LJ||-L--JL7|L-7FJF7L-7|L7L---JF7|LJ7F-J|LJLJFJ|||FJL-JFJ|L7|F-7FJJL-F7|..LLJL--F7L-J..L-7FFJ-|
+-.|7..J-J-|JL7LL.LJ||J7JFJL-7JL7-FJF----7L--JL--JL-----7||F-JL-JL-7|L7L-7F7FJ||.F-JF7L7F7JL7|LJL7F7FJFL-JLJFJ|77|LJF--7||J-J-|--|77L7.--L.||
+LJ7-F7JL|||LFJ.J.F-7J-L7JF--J.L|L|FJF7F7L7F-7F-7F7F---7|LJ|F-7F7F-JL7L-7||||FJL7|F7|L7LJL7FJ|FF-J||L-7-F7F7L-JF|7-LL7F--7J-|LF-7L-7|-FJJ..F-
+F--7LJ|LFJ.F|7-7F|7|FJ--7LJ|J.F7JLJFJLJL-J|FJL7|||L--7|L7J|L7|||L7|.L--J||||L7FJ||||FJF7FJL7|FJF7||F7L7|LJL-7-FJ|-J.|7JL7|.|JJ.|FL||L-J7F-7J
+|.L|7FJ7|F7-7JL|7FL|7|-|J----L-L7..L7F7F-7|L7FJLJ|F--JL-JFJFJ||L7|J7|J|FLJ||FJ|FJ|LJL-J||J7|||FJ||||L7LJF--7|-7|L7|.L77-7-|F-..LFL--.L7F-.|J
+LF7L7JJF-|JJL7FL-F7F-7F||||.7J.L|-LJ||||FJ|FJL7F-J|F7F-7|L7L7|L7LJ|FJ||7.FJ|L-JL7L7F---JL-7LJ||7|||L7L-7L7-LJFJ77.FJ.LL7F7L7F77-FJ7F|JFJF7J.
+|L77|||L|J|7--7.|L-J-7JJ-.7-L7LF|-L-LJLJL7||F-JL7FJ||L7L-7L7||FJ-|-JF7L-LL7|J-|F|FJL-7F7F-JF-JL7||L-JJFJFJ.||7L7-F7--JFFLL7LJ.7-|FF77JFJ7|F7
+FJ||LFJ|L7L7J7|-L.LFF-JJ.JJ7L|.7|F..L|7J||||L7F7|L-JL7L7FJ|LJ|L77.L|F-7|FL|||.FFLJF--J|LJ-LL-7FJ|L7.F-JFJJLJ|FFJ-|J.LFJ7J|7|.7JF|FL|.FJ.FF7.
+L-FJ|F.L-LF-7-LJL7|F7J77-LF-FJ||L7FL-JL7LLJL7||LJF7F7L-JL7F--JFJ-J||J|LJ--|L77..|7L--7L7-LJ||LJL|FJ-L-7|JFJFLF.-7LJ..|JJ7F|7-|LFJ7.77-JF|JLJ
+L7JLJJ.L-.|-|7J7F7-LJ|-7-LL-7JLJLLFJLF|-7L|JLJL7FJ|||F7F-J|F-7L-7J||FLFJ-F|FJJF7LJ-FFJFJ7.F-|F|-LJ.|LLLJ||JL----L-JF7J7FLJ|L7|FJ..FLJ|F7|L7|
+L-J.|-77-FJ7LJF7|J..FL7|-.FF|F||F-F7JFJJ|7LFLF-JL7|||||L-7LJFJF-J7F7J-|FFLLJ7FFJF||FJFJ.L.F7|LLL.|FF-L7LLJ|.FL77J|7F|J-JL||LJF7-F7L|FF-L|-|J
+FJL-L-FJ-7-77LLL---7.FL-.F7-F-7LJ||JJLJ.L-7F7L7F-JLJLJL7FJJJL7L7L7JJL-7F|FLJ7-L--F7L-J-7-J||J7.|7FL-..L---JJ7FJ|--FLJJ7--L7J.-J7L7-F|LL|JFJ7
+F.||JFJ.7.F|J.LF|7-J--J.L-7F7FJ|LJ---L-J7.FJL-JL-7F----JL-7|||FJL-7.L-F-L7|JJ.||J|L7-|7L.|-|J7F7---F--LLFJ|.LJ||7|.|-|FF7LL.|.L|-J7LJ.J.FLJ|
+L7-LF-L-J-J.L-.7-JLLJLJ|LLLFJL.F.|.LJL7J--L------JL-------J7-LJJ7.|J..LL-JJJ.-FJFF-L-7JJ-|-|-F---L-J.-.L|-FJ-L--J7-J7.FF-LJ.J7-FJL7.L-.LFJ.|
\ No newline at end of file
diff --git a/solutions/2023/dotloadmovie/src/day10/html/img/bl.png b/solutions/2023/dotloadmovie/src/day10/html/img/bl.png
new file mode 100644
index 0000000..644f2a0
Binary files /dev/null and b/solutions/2023/dotloadmovie/src/day10/html/img/bl.png differ
diff --git a/solutions/2023/dotloadmovie/src/day10/html/img/br.png b/solutions/2023/dotloadmovie/src/day10/html/img/br.png
new file mode 100644
index 0000000..d45ca8c
Binary files /dev/null and b/solutions/2023/dotloadmovie/src/day10/html/img/br.png differ
diff --git a/solutions/2023/dotloadmovie/src/day10/html/img/horiz.png b/solutions/2023/dotloadmovie/src/day10/html/img/horiz.png
new file mode 100644
index 0000000..c75b57e
Binary files /dev/null and b/solutions/2023/dotloadmovie/src/day10/html/img/horiz.png differ
diff --git a/solutions/2023/dotloadmovie/src/day10/html/img/tl.png b/solutions/2023/dotloadmovie/src/day10/html/img/tl.png
new file mode 100644
index 0000000..9a99437
Binary files /dev/null and b/solutions/2023/dotloadmovie/src/day10/html/img/tl.png differ
diff --git a/solutions/2023/dotloadmovie/src/day10/html/img/tr.png b/solutions/2023/dotloadmovie/src/day10/html/img/tr.png
new file mode 100644
index 0000000..48ddfd0
Binary files /dev/null and b/solutions/2023/dotloadmovie/src/day10/html/img/tr.png differ
diff --git a/solutions/2023/dotloadmovie/src/day10/html/img/vert.png b/solutions/2023/dotloadmovie/src/day10/html/img/vert.png
new file mode 100644
index 0000000..0fc7bce
Binary files /dev/null and b/solutions/2023/dotloadmovie/src/day10/html/img/vert.png differ
diff --git a/solutions/2023/dotloadmovie/src/day10/html/script.js b/solutions/2023/dotloadmovie/src/day10/html/script.js
new file mode 100644
index 0000000..f25cf6a
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day10/html/script.js
@@ -0,0 +1,7 @@
+const cells = document.querySelectorAll('td.cell-none');
+
+cells.forEach((cell) => {
+ cell.addEventListener('click', (el) => {
+ cell.classList.toggle('cell-selected');
+ });
+});
diff --git a/solutions/2023/dotloadmovie/src/day10/html/styles.css b/solutions/2023/dotloadmovie/src/day10/html/styles.css
new file mode 100644
index 0000000..7fa5976
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day10/html/styles.css
@@ -0,0 +1,41 @@
+table {
+ border-collapse: collapse;
+}
+
+td {
+ width: 10px;
+ height: 10px;
+
+ border: 1px solid red;
+}
+
+td span {
+ display: none;
+}
+
+td.cell-vert {
+ background: url('./img/vert.png') center center no-repeat;
+}
+
+td.cell-horiz {
+ background: url('./img/horiz.png') center center no-repeat;
+}
+
+td.cell-F {
+ background: url('./img/tl.png') center center no-repeat;
+}
+td.cell-7 {
+ background: url('./img/tr.png') center center no-repeat;
+}
+
+td.cell-L {
+ background: url('./img/bl.png') center center no-repeat;
+}
+
+td.cell-J {
+ background: url('./img/br.png') center center no-repeat;
+}
+
+td.cell-selected {
+ background: green;
+}
diff --git a/solutions/2023/dotloadmovie/src/day10/html/table.html b/solutions/2023/dotloadmovie/src/day10/html/table.html
new file mode 100644
index 0000000..1fb25e9
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day10/html/table.html
@@ -0,0 +1 @@
+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | J | L | - | - | - | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | - | 7 | F | - | 7 | | | F | - | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | J | F | J | | | | | F | J | | | | | | | | | | | | | | | | | | F | 7 | | | | | | | | | | | | | | | | | | F | 7 | | | | | F | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | 7 | | | | | F | - | J | F | J | | | L | - | 7 | | | | | | | | | | | | | | F | 7 | | | | | | | | | | | | | | | | | | | | | | F | J | L | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | 7 | F | 7 | | L | - | 7 | | | F | J | F | 7 | L | - | 7 | | | | | | | | | | F | 7 | | | | | | | | L | 7 | | | | F | 7 | | | F | J | L | 7 | | | L | 7 | F | J | | | | | | | | | F | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | 7 | L | J | L | 7 | | F | J | L | J | F | J | L | 7 | F | J | F | - | 7 | | | | | F | 7 | | | | | | | | | F | J | F | J | | | F | J | | | | | L | 7 | F | J | | | F | J | L | 7 | | F | 7 | | | | | F | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | F | - | - | 7 | | | | | | | | | | | | | | | | | | | | | | | | | L | - | - | 7 | L | 7 | L | 7 | F | - | J | F | 7 | L | J | | | | F | J | | | | F | J | L | J | L | J | | | | | F | J | | | | L | 7 | | | | F | - | J | | | F | - | 7 | L | - | 7 | L | 7 | | | | | | | | | L | 7 | L | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | L | - | 7 | L | 7 | | | | | | | | | | | | | | | | | | | | | | | F | 7 | F | 7 | L | 7 | | | | | | | | F | 7 | | | | | F | 7 | F | J | L | 7 | F | - | 7 | L | 7 | F | 7 | F | - | J | | | L | 7 | | F | 7 | F | J | | | | L | - | 7 | L | J | F | J | F | - | J | F | J | | | | | | | | | | L | 7 | | | F | 7 | F | 7 | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | F | 7 | L | 7 | | | | | | | | | | | | | F | 7 | | | | | | | | F | 7 | | | | | | | | | | F | J | L | - | J | | | | | L | J | | | | | | | | | F | - | J | | | F | J | | L | J | | | | | F | 7 | | | F | J | F | J | L | J | F | J | | F | 7 | L | - | 7 | L | - | J | F | - | J | F | J | | | | | L | 7 | | | | | | | | | | | | | | | | F | 7 | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | - | 7 | F | - | 7 | | F | 7 | | | | | L | 7 | | | | | | | | | | | F | J | L | J | | | | | F | - | - | 7 | | | | | F | - | J | | | L | J | L | - | - | J | | | F | - | 7 | F | J | | | | | | | | | | | | L | - | - | 7 | L | - | 7 | | | | | F | 7 | L | - | - | 7 | L | - | 7 | L | 7 | | | L | 7 | L | - | J | L | J | L | J | | | F | 7 | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | F | - | J | L | 7 | L | 7 | F | J | | | F | J | F | J | | | F | - | J | F | J | F | 7 | | | | | | | | | L | 7 | F | - | J | L | J | F | 7 | | | L | J | L | - | 7 | | | F | - | - | - | - | - | J | L | 7 | | | L | 7 | L | J | L | J | | | F | - | 7 | | L | - | 7 | | | | | | | | | L | - | - | - | J | F | - | J | F | J | L | 7 | | | F | 7 | F | - | - | - | - | J | | | L | J | L | 7 | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | F | - | 7 | L | 7 | | | L | - | J | | | | L | 7 | | | | | F | - | J | | | | L | 7 | F | 7 | F | J | | | F | J | | | | F | 7 | F | J | L | J | F | 7 | F | - | J | | | L | 7 | F | 7 | | F | - | - | J | L | - | J | F | 7 | F | - | J | | | F | J | F | - | 7 | | | L | J | | | L | - | - | - | - | 7 | L | - | 7 | | | F | - | J | L | J | | | | | | | F | - | - | J | F | - | 7 | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | L | J | | L | 7 | | | L | 7 | F | - | J | F | 7 | | | | | | | L | 7 | | F | J | F | J | | | | | | | F | J | L | 7 | | | F | J | L | J | F | - | - | J | L | J | F | 7 | L | 7 | L | J | L | 7 | | | F | 7 | F | 7 | F | - | J | L | J | F | 7 | | | | | | L | 7 | | | | | F | - | J | | F | - | 7 | F | J | F | - | J | | | | | | F | - | - | J | L | 7 | F | J | F | - | 7 | L | 7 | L | J | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | F | 7 | | | L | 7 | | | L | 7 | F | J | | | | | | | | | F | J | F | J | F | J | F | J | | | | | | | | | | | | | L | 7 | F | 7 | | | F | 7 | F | 7 | F | J | L | 7 | | | F | - | - | J | L | J | | | | | | | L | 7 | F | 7 | F | J | L | J | L | 7 | F | J | L | J | L | 7 | F | 7 | L | 7 | | | L | 7 | L | - | - | J | L | 7 | L | - | - | 7 | F | J | | | F | J | | | | F | J | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | F | - | - | J | L | J | F | J | | | F | J | L | 7 | L | J | | | | | | | F | J | F | J | | L | 7 | | | | | L | 7 | F | J | L | 7 | L | J | | | | | | | | | | | L | J | F | 7 | | | | | | | F | - | - | 7 | | L | J | L | 7 | | | | | | | L | - | 7 | F | - | J | L | - | 7 | F | - | J | | | | | F | J | L | 7 | | | F | - | - | - | - | J | F | 7 | F | J | | | F | J | L | - | 7 | | | L | 7 | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | L | - | - | - | - | 7 | | | F | J | | | | F | J | F | - | J | | | | | L | 7 | L | 7 | | F | J | L | J | F | J | | | F | - | J | F | 7 | | | | | | | | | | | F | - | J | L | J | | | | | L | - | 7 | | | F | 7 | F | 7 | | | | | | | L | 7 | F | J | | | | F | 7 | | | | | | F | 7 | | | | | L | - | 7 | L | J | L | - | - | 7 | F | - | J | L | J | F | J | | | F | - | - | J | L | - | J | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | F | 7 | F | 7 | | | F | - | J | | | L | 7 | L | - | J | F | J | F | - | J | L | 7 | L | 7 | L | 7 | L | - | - | 7 | L | 7 | | | | | F | - | J | L | J | | | | | L | J | L | - | 7 | F | 7 | | | | | F | 7 | | | | | | | | | | | | | | | | | | | F | J | L | 7 | L | 7 | | | | | F | J | | | | | | | | | | | F | 7 | L | 7 | F | - | - | - | J | L | - | - | - | 7 | L | - | J | L | 7 | F | - | 7 | | F | - | 7 | F | 7 | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | F | 7 | L | - | 7 | L | 7 | L | 7 | F | 7 | L | 7 | L | - | 7 | F | J | F | J | F | J | F | 7 | F | J | F | J | | | | | L | - | - | - | 7 | | | L | 7 | F | - | - | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | 7 | L | 7 | | | | | L | J | F | J | | | L | J | L | J | | | F | J | L | 7 | F | 7 | | F | 7 | F | 7 | | | F | - | - | - | J | L | 7 | L | 7 | L | 7 | L | J | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | L | J | L | J | | | F | 7 | L | 7 | | | | L | J | L | 7 | | | F | - | J | L | 7 | L | 7 | L | 7 | | | | | L | 7 | L | 7 | | | L | 7 | | F | 7 | | | | | | | | L | - | 7 | F | J | | | | | | | | | | | | | | | | | L | J | L | J | | | | | | | | | | | | | | | | L | - | 7 | | | | | | F | - | - | - | J | L | 7 | F | J | | | L | 7 | | | L | J | L | J | | | F | 7 | F | 7 | | | | F | J | F | J | F | - | J | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | F | - | - | 7 | L | J | L | - | J | L | 7 | F | - | 7 | | | | | L | - | - | 7 | L | 7 | L | 7 | | | | | | | F | J | F | J | L | 7 | L | - | J | | | | | L | - | J | F | - | J | | | F | J | | | L | J | | | | | | | L | - | - | - | 7 | | | | | | | | | | | F | J | L | 7 | F | J | L | - | J | | | | F | 7 | F | - | J | L | - | J | F | J | L | - | 7 | F | 7 | L | J | L | J | L | 7 | | | L | - | J | F | J | | | F | 7 | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | F | 7 | L | J | F | 7 | L | - | - | - | - | 7 | F | J | L | 7 | L | J | | | | F | 7 | L | 7 | L | 7 | | | L | J | | | | | F | J | | | L | - | - | 7 | | | | | F | - | - | J | | F | J | L | 7 | L | 7 | F | J | | | | | | F | 7 | | | | | | | | | | | | | | L | - | 7 | | | L | - | - | - | 7 | L | 7 | | | | | L | 7 | F | - | - | - | J | | F | 7 | L | J | L | 7 | F | - | - | - | J | | | F | - | - | J | | F | 7 | | | L | 7 | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | F | J | L | 7 | | F | 7 | | | | L | 7 | | L | S | 7 | L | 7 | | | L | - | J | F | J | L | - | 7 | | | | | L | 7 | | F | 7 | F | 7 | | | L | J | | | F | 7 | F | 7 | | | F | - | J | F | J | L | 7 | | | L | 7 | | | | | F | J | | | | | L | J | L | 7 | | | | | | F | 7 | F | 7 | | | F | J | | | | | F | J | L | - | - | - | - | 7 | | | L | 7 | F | 7 | | | L | 7 | F | - | - | J | L | - | - | - | 7 | | | | | | | F | J | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | F | J | L | 7 | L | - | 7 | L | - | J | L | - | J | F | J | F | - | - | J | F | J | | | F | - | 7 | | | F | - | - | J | | | L | 7 | L | 7 | | | | | | | | | L | 7 | F | J | | | | | | | | | | | | | F | 7 | L | - | 7 | | | | | F | J | | | | | L | 7 | | | | | F | - | - | J | F | J | L | J | L | J | L | J | | | | | | | | L | 7 | F | 7 | F | - | - | J | L | 7 | | | | | | | | | F | J | | | F | - | - | - | - | - | - | J | | | | | | | L | 7 | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | F | 7 | L | 7 | F | J | | F | J | F | - | - | - | - | 7 | L | 7 | L | - | - | 7 | L | 7 | | | L | 7 | L | J | L | - | 7 | F | J | | L | 7 | L | J | | | | | L | - | J | L | 7 | | | L | J | L | J | L | J | L | 7 | F | J | | | | | | | F | J | L | - | J | | | | | L | 7 | F | 7 | L | - | - | - | - | 7 | F | - | J | F | J | L | 7 | | | | | L | J | | F | 7 | F | J | | | | | | | | | L | 7 | | | | | F | 7 | F | - | - | 7 | | | | | | | | F | J | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | F | 7 | L | - | J | F | 7 | F | 7 | | | F | J | | F | 7 | | | F | J | L | 7 | L | - | 7 | F | 7 | | | | | | F | - | J | F | - | J | L | - | - | - | 7 | | | | | F | - | - | - | - | - | - | J | L | 7 | L | J | | | L | - | - | - | 7 | | | | | F | J | | | | | F | - | - | - | - | J | | | F | 7 | L | 7 | F | J | | | | | | F | 7 | | | | | L | 7 | | | | | L | J | F | J | | | L | J | L | J | F | - | J | F | J | L | J | | | F | 7 | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | F | J | L | J | | | F | - | - | J | L | J | | | | | | | F | 7 | | | L | J | L | - | 7 | | | F | - | J | | | | | | | L | 7 | L | - | 7 | | | F | 7 | | F | 7 | F | J | L | J | L | 7 | | F | - | 7 | | F | 7 | L | 7 | F | J | F | - | 7 | | | | L | J | L | - | J | | | L | - | - | - | - | 7 | L | J | L | 7 | | | | | F | J | L | - | J | | | | | L | 7 | | | | | L | - | 7 | L | - | J | F | - | - | - | J | F | - | J | F | - | - | J | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | F | J | | | L | 7 | F | 7 | | | L | - | - | - | - | 7 | | | | | L | J | | | L | 7 | F | - | - | J | | | | | F | 7 | | | L | J | F | J | F | - | J | | | | | L | 7 | | | | | L | - | - | 7 | F | J | F | J | F | J | F | J | L | - | J | | | | L | 7 | L | - | J | F | 7 | F | - | - | J | | F | - | - | - | J | F | - | - | J | | | | | | | F | - | - | - | J | L | 7 | | | | | | | F | 7 | | | F | - | - | J | F | - | 7 | F | J | F | 7 | | | F | 7 | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | L | 7 | | | | L | J | | | | | | F | 7 | F | - | J | | | L | - | 7 | | | F | J | L | 7 | F | 7 | | | | | | | | | L | 7 | F | J | | L | - | 7 | | | | | F | J | | | L | - | - | 7 | | | | | | L | 7 | L | - | J | F | 7 | F | 7 | | | F | 7 | L | - | - | - | J | | | L | - | 7 | F | 7 | L | - | - | - | 7 | | | | F | - | J | L | J | L | - | - | 7 | F | 7 | | | | | | | | | | | | | | | L | - | 7 | F | J | F | J | | | F | J | | | L | J | L | - | J | L | - | 7 | F | 7 | | | | | | | | | | |
| | | | | | | | | | | | | | | L | 7 | F | - | J | L | 7 | | | | | L | - | 7 | L | 7 | | | | | | L | - | 7 | | | | | | | | | | | | | | | F | J | L | - | 7 | F | - | J | | | | | | | F | J | F | 7 | F | J | | | | | F | 7 | L | 7 | F | - | J | L | J | L | J | | | | | F | 7 | F | 7 | | | | F | - | J | | | | | | F | 7 | F | J | L | 7 | L | - | - | 7 | F | - | - | - | J | | | | | | | | | | | | | | | L | J | F | - | J | | | F | J | F | J | L | 7 | L | 7 | F | 7 | F | 7 | F | - | J | | | L | 7 | | | | | | | | | |
| | | | | | | | | | | F | - | J | F | J | L | - | - | 7 | L | J | | | F | 7 | L | 7 | L | - | J | L | - | - | J | L | J | | | | | | | | | | | L | 7 | F | 7 | | | L | - | 7 | | | | | | | | | F | J | | | | | F | J | | | | | | | F | J | | | F | - | 7 | F | 7 | F | J | | | | | | | | | | | F | J | L | - | 7 | | | L | 7 | | | | | L | 7 | F | J | F | 7 | F | J | | | F | 7 | F | 7 | | | | | | | | | | | | | | | F | - | J | F | - | J | L | - | J | F | 7 | | | | L | J | L | J | | | L | - | - | J | F | J | | | | | | | | | |
| | | | | | | | | | | L | - | 7 | L | 7 | | F | 7 | L | - | 7 | L | J | L | - | J | F | - | - | 7 | F | 7 | F | - | 7 | | | | | | | | | | | | | | | | L | J | F | 7 | | | | | | | | | | | | | | L | J | L | 7 | | | | | | | L | 7 | | | | | F | J | | | | | | | F | J | | | | | | | | | L | 7 | F | - | J | L | 7 | | | | | | | | | | | | | | | | | L | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | F | - | J | F | 7 | F | 7 | F | J | L | J | F | 7 | F | - | 7 | L | - | 7 | F | - | J | | | | | | | | | | |
| | | | | | | | | | | | | L | 7 | L | - | J | L | - | - | J | F | 7 | F | - | 7 | L | - | 7 | L | J | | | | | F | J | L | J | L | J | | | F | J | | | F | 7 | | | | | | | | | | | | | | | L | - | 7 | F | - | J | | | | | | | F | J | L | J | L | 7 | | | | | | | L | 7 | | | | | | | L | 7 | | | | | F | 7 | F | J | | | | | | | F | J | | | F | J | L | 7 | | | | | | | | | | | | | | | | | | | L | J | | | | | | | | | F | - | J | L | J | | | L | - | 7 | | | | | | | | F | J | F | 7 | L | J | F | 7 | | | | | | | | | | |
| | | | | | | | | | | | | | L | 7 | F | 7 | F | - | - | 7 | | | L | J | | L | 7 | F | J | F | 7 | L | J | L | - | - | - | - | 7 | | | | | F | J | | | | | | | | | | | | | | | | | L | 7 | F | J | L | 7 | F | J | | | | | L | 7 | F | - | - | J | | | L | J | | L | J | | | L | 7 | | | | | | | | | | | | | F | J | | | | | L | 7 | | | | | F | - | J | | | L | J | | | | | | | | | | | | | F | 7 | L | J | L | J | L | - | - | 7 | F | J | F | 7 | L | - | J | L | J | L | - | J | L | 7 | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | L | J | L | J | F | - | J | | | F | - | - | 7 | | | | | F | J | L | - | - | - | - | - | 7 | F | J | | | | | L | - | J | | | | | L | J | | | | | | | F | J | L | - | - | J | | | F | J | L | 7 | | | | | F | - | 7 | L | - | 7 | F | - | - | J | F | J | | | | | | | | | L | J | L | 7 | | | | | F | J | | | | | L | 7 | F | J | | F | J | | | | | | | L | J | | | L | - | - | - | - | - | - | - | J | L | - | J | | | F | 7 | F | 7 | F | - | 7 | F | 7 | L | - | J | L | 7 | | | | | | | | | |
| | | | | | | | | | | | F | 7 | | F | - | 7 | | L | 7 | F | J | L | 7 | F | J | L | J | L | - | - | - | - | - | 7 | F | J | | | F | J | | | F | - | - | J | L | - | 7 | | | | | | | L | - | 7 | F | - | - | J | L | - | 7 | | | | | | | | | | L | 7 | F | J | L | - | - | 7 | L | 7 | | | | | | | L | 7 | F | - | J | | | L | J | F | J | | | F | J | L | 7 | F | J | F | J | | | L | 7 | | L | - | - | - | - | - | - | - | 7 | F | - | - | 7 | L | J | L | J | | | L | 7 | | | | | L | - | - | - | - | J | F | 7 | | F | 7 | | | | |
| | | | | | | | | | | | | | | | | L | 7 | | | F | 7 | L | J | F | 7 | | | L | - | - | 7 | F | - | - | - | - | - | J | L | - | J | L | 7 | | | | | F | - | 7 | F | 7 | | | | | | | | | F | - | J | L | - | 7 | F | 7 | F | J | | | | | | | | | F | - | J | L | - | 7 | | F | J | F | J | | | | | | | F | J | | | F | 7 | L | - | 7 | | | F | J | L | 7 | F | J | L | - | J | | L | - | J | F | - | - | - | - | - | - | - | - | J | | | F | - | J | F | 7 | F | 7 | L | - | J | | | | | F | 7 | F | 7 | F | 7 | | | L | 7 | | | | | | | | |
| | | | | | | | | | | F | J | L | - | 7 | | | | | | | | | F | - | J | L | J | F | - | - | J | L | - | - | - | - | - | - | - | - | 7 | F | J | | | | | | | F | J | | | | | | | L | J | | | L | - | - | 7 | F | J | | | | | L | 7 | | | | | L | J | | | F | - | 7 | F | J | F | J | F | J | | L | J | | | L | 7 | | | | | L | 7 | F | J | | | | | | | | | | | | F | - | - | - | - | 7 | | L | - | - | - | - | - | - | - | 7 | | | | L | 7 | | | | L | J | L | - | - | 7 | | | | | | | | | | | | | | | | | | | F | J | | | | | | F | 7 | |
| | | | | | | | | | | L | - | - | 7 | L | J | | | | | | | L | - | - | - | 7 | L | 7 | F | 7 | F | - | - | - | - | - | - | - | 7 | | | L | 7 | | | | | | | L | 7 | | | | | L | 7 | F | J | F | - | 7 | | | L | 7 | | | | | F | J | | | | | F | - | J | | | F | J | L | 7 | | | F | J | | F | 7 | | L | 7 | | | | | | | F | J | | | F | J | L | 7 | F | J | L | 7 | | | F | 7 | F | 7 | L | 7 | | F | 7 | F | 7 | F | - | 7 | L | 7 | L | 7 | L | - | J | F | 7 | F | - | - | J | L | J | | | | | | | | | | | | | | | L | - | J | L | - | J | | | |
| | | | | | | | | | | F | 7 | | L | - | 7 | | | | | | | F | - | 7 | | L | 7 | | | | | | | L | - | 7 | F | - | - | - | 7 | L | J | | L | J | | | | | | | | | | L | 7 | | | | | F | J | F | J | L | 7 | | | | | L | J | | L | J | L | - | - | J | | | F | 7 | | | | | L | 7 | F | J | | | F | 7 | | | | | L | J | L | 7 | | | L | 7 | F | J | L | - | - | J | L | J | L | J | L | 7 | L | - | J | L | J | L | J | | L | 7 | L | - | J | F | - | - | J | L | J | F | - | 7 | F | 7 | | | | | | | | | | | | | | | F | - | - | - | - | - | J | |
| | | | | | | | | | | | | | | F | 7 | | | | | | | | | | L | 7 | L | 7 | | | | | | | | | | F | 7 | L | J | F | - | - | J | F | - | - | - | 7 | | | L | 7 | | | | | F | J | | | | | L | 7 | L | - | 7 | | | | | L | - | - | 7 | F | - | - | - | - | - | J | | | L | J | L | 7 | L | J | F | J | | | L | J | L | - | - | 7 | | | | | F | J | | | F | 7 | F | - | - | - | - | - | - | - | J | F | - | - | - | - | - | - | 7 | F | J | F | - | 7 | L | - | - | 7 | F | 7 | | | F | J | | | | | | | | | | | L | J | L | J | L | 7 | F | 7 | | | | |
| | | | | | | | | | F | J | L | J | L | - | J | L | J | | | | | | F | J | F | J | L | J | L | J | L | - | - | J | F | - | - | J | F | - | - | J | L | - | J | L | J | L | 7 | | | L | 7 | L | 7 | F | J | | | L | 7 | F | 7 | | | L | 7 | F | 7 | F | 7 | F | J | F | - | - | J | F | 7 | L | 7 | L | 7 | F | 7 | F | - | J | L | J | L | 7 | L | J | | | L | - | - | - | - | - | - | - | - | J | F | - | - | - | - | - | J | L | 7 | L | 7 | L | - | 7 | F | J | | | | | | | | | | | | L | J | L | J | F | 7 | F | - | 7 | L | J | L | - | 7 | | |
| | | | | | | | | F | J | F | 7 | F | 7 | F | - | - | 7 | | | F | J | L | - | J | F | 7 | F | - | - | - | - | - | - | J | F | - | 7 | L | - | - | - | - | - | - | - | - | 7 | | | L | 7 | | | F | J | | | F | J | F | J | | | L | J | | | | | | | | | | | | | | F | J | F | 7 | F | J | L | 7 | L | 7 | | | | | | | L | - | - | 7 | F | - | J | F | 7 | | | F | 7 | F | - | - | - | - | - | 7 | F | J | F | - | - | - | 7 | F | 7 | | | F | J | F | 7 | L | J | F | J | L | J | L | 7 | | | F | - | - | 7 | | | | | L | 7 | | | F | - | 7 | F | J | | |
| | | | | | | | | L | - | J | L | J | L | J | F | 7 | | | | | L | - | - | - | - | J | L | J | F | - | - | - | - | - | - | J | | L | - | - | - | 7 | F | 7 | F | 7 | F | J | L | - | J | | | | | | L | J | | L | 7 | L | - | - | 7 | | | | | | | | | | | | | L | 7 | | | | | | | | F | J | F | J | | | | | | | F | - | - | J | L | 7 | F | J | | | | | | | | | | | F | 7 | F | - | 7 | L | J | F | J | F | - | - | J | | | | | L | J | F | J | L | - | - | J | F | - | - | - | J | | | | | F | 7 | L | J | | | F | J | | | L | 7 | L | J | | | |
| | | | | | | | F | 7 | F | 7 | F | - | 7 | F | J | L | J | L | - | - | - | - | - | - | - | - | J | F | - | - | 7 | F | - | - | - | - | - | - | 7 | L | J | L | J | L | J | F | 7 | F | - | J | L | - | 7 | F | - | - | J | F | - | - | J | | | | | | | | | L | J | | L | J | | | | | F | J | F | J | | L | J | | | | | F | 7 | | F | J | L | 7 | | | L | J | | | L | J | L | J | F | J | F | - | J | | L | - | - | - | J | L | 7 | F | J | F | - | - | - | - | J | F | 7 | | F | J | | | | | L | - | 7 | | | L | 7 | L | 7 | L | - | 7 | | | |
| | | | | F | - | 7 | | | L | J | | | L | 7 | L | J | F | 7 | F | - | 7 | F | - | - | 7 | F | 7 | F | 7 | | | | F | J | | | | F | 7 | F | - | - | J | F | - | - | - | - | - | J | | | | | F | - | 7 | F | J | L | 7 | F | 7 | L | - | 7 | F | J | | | | | | | F | - | 7 | F | - | J | | | L | 7 | L | - | 7 | F | - | J | L | J | L | 7 | | | F | 7 | | | L | 7 | F | J | F | - | - | - | J | F | J | F | 7 | F | - | - | - | - | - | 7 | | | L | 7 | | | F | - | - | - | - | J | L | 7 | L | 7 | L | J | F | - | J | L | - | J | | L | - | 7 | | | | | |
| | | | | L | 7 | | | L | 7 | F | J | F | J | F | - | J | L | J | | L | J | F | - | J | | | L | J | L | J | F | J | F | J | F | J | L | J | F | 7 | | | | F | - | - | 7 | F | 7 | | | | | | | F | J | L | - | 7 | | | | | | | F | 7 | | | | | F | J | L | J | L | 7 | L | J | F | 7 | L | 7 | L | 7 | F | J | L | 7 | F | 7 | F | - | J | L | J | | | L | 7 | | | | | F | J | F | 7 | F | 7 | | | | | | | | L | - | - | - | - | 7 | L | J | | | | | | L | 7 | F | - | - | 7 | F | J | F | J | F | 7 | L | - | - | - | - | - | - | - | 7 | L | J | | | |
| | | | F | 7 | | | | | | | | | | F | J | F | J | F | - | - | - | - | - | 7 | L | - | 7 | | | | F | - | 7 | L | - | J | | L | - | - | - | J | L | 7 | | | L | - | 7 | | | | | L | J | L | J | L | - | 7 | F | J | L | J | | | | | | | | | | | | | F | 7 | F | - | J | F | - | J | L | 7 | L | 7 | | | | | F | - | J | | | | | L | 7 | F | - | - | J | F | J | | | | | | | F | J | L | J | L | J | F | J | L | - | - | - | - | - | J | | F | - | J | L | - | J | L | - | 7 | | | L | - | J | F | J | L | - | - | - | - | - | 7 | F | - | J | | | | | |
| | F | - | J | L | J | | | F | J | L | J | F | J | | L | 7 | F | - | 7 | F | J | F | 7 | L | J | F | J | F | J | F | 7 | F | - | - | - | - | 7 | F | 7 | L | J | F | 7 | | | L | J | F | - | 7 | F | 7 | F | J | L | - | 7 | F | J | | | | | | | | | L | J | | | L | - | 7 | L | - | 7 | | L | 7 | | | L | J | L | - | 7 | | | | | F | J | L | - | - | 7 | | | | L | J | L | J | F | 7 | F | 7 | F | J | F | - | 7 | F | 7 | F | 7 | F | 7 | | | F | 7 | F | 7 | F | - | 7 | | | L | - | - | 7 | L | - | 7 | | F | 7 | F | 7 | L | J | | | | | | | |
| | | | F | - | - | 7 | L | J | F | 7 | F | J | F | 7 | | L | J | F | J | L | - | J | L | - | 7 | L | 7 | L | - | J | | | L | - | - | - | 7 | | | | | | | F | 7 | | | L | J | F | - | J | F | J | | | | | L | - | 7 | F | J | L | 7 | | | L | J | L | - | 7 | L | 7 | F | J | F | 7 | | | F | - | J | L | - | - | - | 7 | | | | | | | L | 7 | | F | - | J | | | F | - | - | 7 | | | | | | | | L | J | F | J | | L | J | L | J | L | J | L | J | | | L | J | | | L | 7 | | | L | - | - | 7 | L | 7 | F | J | F | J | L | J | L | 7 | F | 7 | | | | | | |
| | L | J | | | L | - | - | J | L | J | F | J | | | F | - | - | J | F | 7 | F | - | - | 7 | | | | L | 7 | F | 7 | L | - | - | - | - | J | | | | | L | J | | | L | 7 | | L | 7 | F | J | F | J | L | 7 | | L | J | | F | J | L | 7 | F | 7 | | L | 7 | | | | | F | J | | | | | L | 7 | F | 7 | F | 7 | F | J | | | | | | | F | J | F | J | F | - | J | L | - | 7 | L | 7 | | | | | L | - | - | J | | F | 7 | F | - | - | - | 7 | F | 7 | L | 7 | | L | - | J | L | 7 | F | 7 | L | 7 | | | | | | | | F | - | - | 7 | | | | | | | | | | | | |
| | | | | | | F | 7 | | F | - | J | F | J | L | - | - | 7 | | | L | J | | F | J | | | F | 7 | L | J | | | F | 7 | F | - | - | 7 | | | L | - | 7 | L | 7 | L | - | - | J | L | - | J | F | - | J | F | - | - | - | J | F | 7 | L | J | | | F | 7 | L | J | | | | | | L | J | | | | | | | | | | | | | | F | J | | | | | | | F | J | F | J | F | - | - | 7 | L | 7 | L | J | | | F | 7 | | F | 7 | | | | | L | - | - | 7 | | | | | L | 7 | L | 7 | F | 7 | F | 7 | | | | | L | 7 | | | L | J | F | J | | | F | 7 | L | J | | | L | - | - | 7 | | | |
| | | | | | | | | L | 7 | | | F | 7 | L | - | - | - | - | J | | | F | - | 7 | L | 7 | | | | | L | - | - | J | | | | | | | F | - | J | L | - | - | J | | L | - | - | - | 7 | F | - | 7 | L | - | 7 | | | F | 7 | F | 7 | | | L | 7 | F | J | | | | | | F | J | L | 7 | F | 7 | F | J | | | L | J | | | | | | | F | J | | | | | | | F | J | | L | - | 7 | L | - | J | F | 7 | L | J | L | - | J | L | J | L | - | - | 7 | | | | | L | 7 | L | 7 | L | J | L | J | | | L | J | F | J | L | 7 | | L | 7 | L | J | | | F | 7 | L | 7 | F | - | J | | | |
| | | | | | | L | 7 | L | J | | | | | F | - | - | - | - | - | J | L | 7 | | | F | J | L | J | F | - | 7 | F | J | L | J | L | - | 7 | F | - | - | - | - | - | - | - | 7 | | | L | 7 | L | 7 | F | J | | | | | | | | | | | | | F | J | L | - | J | L | 7 | | | F | 7 | L | J | | | L | 7 | L | - | 7 | | | | | | | L | 7 | L | J | L | J | F | 7 | F | 7 | L | - | - | - | J | L | 7 | F | 7 | F | 7 | F | 7 | F | - | 7 | L | J | L | - | J | | L | 7 | F | - | 7 | L | - | 7 | L | - | - | J | F | - | J | F | - | J | | | L | - | J | L | - | 7 | | | |
| | | | | | | | L | - | 7 | | | L | J | F | - | - | - | - | - | - | J | L | J | F | - | 7 | L | 7 | L | J | F | 7 | F | - | - | J | | | F | - | 7 | F | - | 7 | F | J | | | F | J | | L | J | | L | J | | | | | L | J | | | F | 7 | F | 7 | F | J | | | | | | | F | - | J | | L | 7 | F | J | | | | | | | F | J | F | - | - | - | J | L | J | L | 7 | | F | 7 | F | 7 | L | J | L | J | | | | | L | J | | L | - | - | - | 7 | | F | 7 | L | J | | | | F | 7 | L | - | 7 | F | - | J | F | - | J | F | - | J | F | 7 | F | - | - | J | | | |
| | | | | | | F | 7 | | L | J | F | 7 | | | F | 7 | F | 7 | F | 7 | F | - | 7 | L | 7 | L | - | J | F | 7 | | | | | L | - | - | - | J | L | 7 | L | J | | L | J | | | | L | 7 | F | - | - | - | - | 7 | | | | | F | - | J | | | | | | | | | | | F | J | | | | | L | - | - | - | 7 | | | L | 7 | L | J | L | J | | L | - | - | - | - | - | - | 7 | L | - | J | | | | | L | - | 7 | F | 7 | L | J | F | 7 | | F | 7 | F | 7 | | | F | J | | | F | - | 7 | L | J | | | F | 7 | L | J | F | - | J | | F | J | F | - | J | L | J | | F | 7 | | | |
| | | | | | | | | | | F | 7 | F | J | L | J | | | | | | | L | J | L | J | F | J | F | J | F | - | - | J | L | J | L | - | - | - | - | - | - | J | F | 7 | F | 7 | F | 7 | L | - | J | | | F | 7 | F | - | J | L | J | L | - | 7 | | | | | | | L | J | L | 7 | | | | | F | 7 | F | - | J | L | 7 | | | | | F | - | - | 7 | F | - | - | 7 | F | 7 | L | - | - | 7 | | | L | - | 7 | L | J | L | 7 | F | J | L | - | J | L | J | L | J | | | F | J | L | 7 | L | - | 7 | | | | | | | F | 7 | L | - | - | - | J | F | J | | F | 7 | | F | J | L | 7 | | |
| | | | | | F | J | L | J | L | J | F | - | 7 | | | L | J | F | - | - | - | J | F | J | | L | - | - | - | - | 7 | F | 7 | F | - | - | - | - | - | J | L | J | L | J | L | - | - | 7 | | | | | | | | | | F | 7 | | F | - | J | | | | | L | - | - | 7 | | | | | | | | | | | | | | F | - | J | | | | | L | - | 7 | L | J | F | 7 | L | J | L | - | - | - | J | L | 7 | | L | - | - | 7 | | | L | - | - | - | - | - | - | - | 7 | | | | | F | 7 | | | F | - | J | L | J | L | J | L | - | - | - | - | 7 | L | - | - | J | L | 7 | | | F | - | J | | |
| | | | | | L | - | - | - | 7 | F | J | F | J | L | 7 | F | J | F | 7 | F | - | J | | F | - | - | - | - | - | J | | | L | J | F | 7 | F | 7 | F | 7 | F | 7 | F | - | - | - | - | J | L | J | | | L | 7 | | | L | 7 | L | 7 | F | J | | | F | 7 | F | J | | | | | | | | | L | J | | L | - | 7 | L | 7 | | | | L | - | 7 | | | | | F | - | - | - | - | - | 7 | F | J | F | 7 | | F | J | L | - | - | - | - | - | - | - | - | J | | | | | | | | | | | L | 7 | F | 7 | F | 7 | F | - | - | - | - | 7 | L | 7 | F | - | - | 7 | L | J | L | 7 | | | |
| | | | | | | | F | - | J | L | 7 | L | - | - | J | L | - | J | L | J | | F | 7 | L | - | - | - | - | - | - | J | F | - | J | L | J | L | J | L | J | | | L | 7 | F | 7 | F | - | 7 | | | | F | J | | | F | J | | L | J | | L | J | | | L | 7 | L | J | L | J | | | | | | L | 7 | L | 7 | | | | | L | J | L | J | F | 7 | F | - | - | J | L | 7 | | | | | F | J | F | - | - | - | 7 | F | - | - | 7 | | F | J | L | J | | | | | F | J | | | | | | | L | J | F | 7 | F | 7 | | | F | J | L | 7 | F | J | F | - | 7 | L | 7 | | |
| | | | | | | | L | - | 7 | F | J | F | - | - | - | - | - | 7 | | F | 7 | | | L | - | 7 | F | - | - | - | - | - | J | F | 7 | | F | - | - | 7 | | L | - | J | | | | | | | F | J | F | J | L | - | J | L | - | - | 7 | | | | | L | - | J | | | | | | | | | | | L | 7 | | | | | | | | F | - | - | J | L | J | F | - | - | 7 | | | | | L | J | F | J | | F | - | J | | | F | - | J | F | J | F | - | 7 | L | J | L | - | J | L | J | F | - | J | L | J | L | J | | | F | 7 | | | | | F | J | F | J | F | J | | |
| | | | | | | | | F | J | L | 7 | L | - | 7 | F | - | 7 | | | F | J | L | J | F | 7 | L | J | F | - | 7 | F | - | - | J | L | - | J | F | - | J | F | 7 | F | 7 | | | | | | | | | F | J | F | - | - | - | - | 7 | F | J | | F | 7 | | | | | | | | | | | | | | | | L | J | | | | | | L | 7 | F | 7 | F | - | J | F | - | J | | | L | - | - | J | F | - | J | F | - | J | | | F | 7 | L | 7 | | | | L | 7 | F | 7 | F | - | - | 7 | | | F | 7 | F | 7 | F | 7 | | | | | | | | | | | L | 7 | L | 7 | L | 7 | | |
| | | | | | | | | L | - | 7 | | | | | L | J | F | J | L | J | F | - | 7 | | | L | 7 | F | J | F | J | | | F | - | - | - | - | 7 | L | - | - | J | L | J | L | J | L | J | | | L | 7 | | | F | - | - | 7 | | | L | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | F | 7 | L | J | L | J | F | - | J | F | 7 | L | - | - | 7 | F | J | F | 7 | L | 7 | | L | J | L | - | J | L | 7 | F | J | | | L | J | F | 7 | L | J | | | | | | | | | | | | | L | J | L | J | | | F | J | | | | F | J | | |
| | | | | | | | | | | L | J | | F | - | - | J | F | 7 | F | J | | L | J | F | J | L | 7 | | | F | J | L | - | - | - | 7 | L | 7 | F | - | 7 | F | 7 | F | 7 | F | - | J | F | J | L | J | F | 7 | | | L | - | J | F | J | L | - | - | 7 | | | | | | | | | | | | | | | | | | F | J | L | - | - | - | - | J | F | 7 | | | L | 7 | F | 7 | L | J | F | J | L | 7 | | | F | - | - | - | - | - | 7 | | | L | 7 | L | - | - | J | L | - | - | J | L | J | L | J | | | | F | 7 | | L | J | | F | J | L | - | 7 | |
| | | | | | | | | | F | - | - | - | J | F | - | - | J | L | J | | F | 7 | F | J | F | 7 | | | L | J | F | 7 | F | 7 | F | J | | | | L | 7 | | | | | L | J | L | J | | F | J | F | - | 7 | | | | | | | F | - | 7 | | | F | 7 | F | - | J | | | | | | | | | | | | | | | | | | L | - | - | - | - | - | 7 | F | J | L | J | | L | J | L | 7 | F | J | F | - | J | | | L | - | - | - | - | 7 | | | | | | L | 7 | F | - | 7 | F | 7 | F | 7 | F | 7 | F | 7 | | | F | J | L | - | 7 | | | L | 7 | F | 7 | L | 7 |
| | | | | | | | | | L | - | - | - | - | J | | F | - | 7 | F | 7 | | | | | L | - | J | L | J | F | - | J | L | J | L | J | F | 7 | | | F | J | L | J | F | 7 | F | - | 7 | | | F | J | | L | J | L | J | L | 7 | | | | | | | L | J | | | | | | | | | | | | | | | | | | | | | | F | 7 | F | 7 | L | J | F | 7 | F | - | 7 | F | - | J | L | 7 | | | F | - | J | | F | 7 | F | - | J | L | J | F | - | J | | | | | | | | | | | | | | | | L | J | L | J | L | 7 | F | - | J | | | | L | J | L | 7 | | |
| | | | | | | | | | | | F | 7 | F | 7 | | L | 7 | L | J | L | J | L | - | - | 7 | F | 7 | L | - | - | - | - | - | - | J | | | L | J | F | 7 | | | | | | | | F | J | | | | | F | - | - | - | 7 | | F | J | | | | | L | - | - | 7 | | | | | | | | | | | | | | | | | | | F | - | J | L | J | L | - | - | J | | | L | 7 | | | | | F | 7 | F | J | L | J | | F | - | J | L | J | | F | 7 | F | J | F | 7 | L | 7 | L | J | L | J | L | J | F | 7 | | F | 7 | | | | | F | 7 | F | - | - | 7 | | | L | J |
| | | | | | | | | | | | | | | | | | | | F | 7 | | | F | 7 | F | - | - | - | 7 | | | | | | | F | 7 | F | - | - | 7 | F | 7 | L | - | - | J | L | 7 | | | L | J | L | - | J | L | J | F | - | - | J | F | J | F | J | | | F | - | - | J | | | | | | | | | | | | | | | | | | | L | - | 7 | F | - | 7 | F | - | 7 | L | - | J | L | J | | | L | J | F | 7 | | F | J | F | 7 | | F | 7 | | | | | L | - | J | L | - | J | | F | - | - | - | - | J | L | 7 | | | | | | | | | | | | | | | F | - | J | | | | |
| | | | | | | | | | | | | | | | | | L | J | | | L | J | L | J | | F | 7 | | | | | | | L | J | | | L | - | 7 | L | J | L | - | - | - | - | - | J | | | F | - | - | - | 7 | F | 7 | L | - | 7 | | L | 7 | L | - | J | L | 7 | | F | 7 | | | | | | | | | | | | | | | | | | | | L | J | | L | J | | L | - | - | 7 | F | - | J | F | - | J | L | 7 | L | - | J | L | - | J | L | J | L | 7 | F | - | - | - | - | - | J | F | - | - | - | - | - | J | | | | | | | L | J | L | J | L | - | 7 | | | | |
| | | | | | | | F | - | - | 7 | | | | | L | - | 7 | | | | F | 7 | | F | J | L | J | L | J | F | 7 | L | - | - | J | F | - | - | - | 7 | F | - | - | - | J | L | - | - | 7 | L | J | L | - | - | J | F | 7 | | | F | - | - | 7 | L | - | J | | | | | | | | | F | - | 7 | | | | | | | | | | | F | 7 | F | 7 | F | - | - | - | - | J | | | F | 7 | L | - | - | 7 | L | 7 | F | - | - | - | - | - | - | - | J | | | F | - | - | - | 7 | F | J | F | 7 | F | 7 | F | - | J | L | J | F | - | - | 7 | F | 7 | L | 7 | | | |
| | | | | | | | L | - | 7 | | | | | L | - | 7 | | | | | F | J | L | 7 | L | - | - | 7 | F | - | J | | | F | - | 7 | F | J | F | - | - | J | | | F | - | 7 | F | 7 | F | 7 | L | - | - | - | - | - | - | J | L | J | L | - | 7 | L | 7 | F | 7 | L | 7 | | | | | | | | F | J | | | | | | | | | | F | J | L | J | L | J | F | - | - | 7 | F | J | | | | | | F | 7 | L | 7 | | | L | - | - | - | - | - | - | 7 | | | | | | F | 7 | | | | L | - | J | L | J | L | J | F | 7 | F | 7 | L | - | 7 | L | J | L | 7 | | | | | |
| | | | | | | | | | | | | | L | - | 7 | | | | | L | J | F | 7 | L | - | - | - | J | | | F | - | J | L | 7 | | | | | F | J | F | 7 | F | J | L | 7 | L | J | L | J | | | F | - | - | 7 | F | - | - | - | 7 | F | - | 7 | L | 7 | L | J | L | - | J | | | | | | | | L | 7 | F | 7 | | | | | | | | L | - | - | 7 | F | - | J | F | - | J | | | F | J | L | - | J | L | - | J | L | - | - | - | - | 7 | F | - | J | F | J | L | J | L | 7 | | | F | - | - | - | - | 7 | F | J | L | J | | | F | 7 | L | - | - | 7 | L | J | | | |
| | | | | | | | | | | | L | 7 | F | J | | | | | F | 7 | | | | | F | 7 | F | - | 7 | | | | | F | - | 7 | | | L | J | L | - | J | L | J | F | 7 | L | - | - | - | 7 | | | L | 7 | | | | L | - | 7 | F | J | L | 7 | | | F | J | F | - | 7 | | | | | F | - | - | J | F | J | | | | | | | | | | | | | | | L | J | F | 7 | | | F | - | J | | | F | 7 | F | - | 7 | F | 7 | F | 7 | F | - | 7 | | | L | - | - | J | F | - | 7 | F | J | | | L | - | - | - | 7 | | | L | - | - | 7 | | | | | | | F | - | - | J | | | | | |
| | | | | | F | - | 7 | | L | 7 | | | L | 7 | | | L | J | L | J | L | J | L | J | F | J | | | | | | | | L | J | | F | 7 | F | - | 7 | F | J | | | F | - | - | - | J | L | 7 | L | 7 | | | F | 7 | | | | | F | 7 | | | | | L | 7 | | | F | J | | | | | L | - | - | 7 | | | | | | | | | | | | | | | | F | - | 7 | | | | | | L | J | F | - | J | | | | | | | | L | J | L | J | L | J | F | J | | | F | 7 | F | 7 | | | F | J | L | 7 | L | 7 | F | - | 7 | | | | | F | 7 | F | J | | | | | | | | | | | | | | | | |
| | | | | | L | 7 | L | - | - | J | L | - | J | L | - | - | - | - | - | - | - | 7 | L | 7 | | | | | | | F | - | - | - | J | | | L | 7 | | | | | | | | L | - | - | - | - | 7 | | | F | J | L | J | L | J | L | J | | | | | | | F | J | | | L | 7 | | | | | | F | 7 | | | L | 7 | | | L | - | 7 | | | | | | | L | 7 | | | F | J | L | - | - | J | F | - | J | L | J | F | 7 | F | - | - | - | - | J | | L | J | L | J | L | J | | | F | 7 | L | 7 | L | J | | | | | | | | | | | | L | 7 | | | | | L | J | | | | | | | | |
| | | | | | | L | - | - | - | 7 | F | 7 | F | 7 | F | - | - | - | 7 | F | 7 | L | 7 | L | J | L | J | L | - | - | - | 7 | L | - | J | | | L | 7 | L | - | - | - | - | - | J | L | J | F | - | - | - | 7 | F | - | J | | | L | J | F | J | F | J | | | | F | - | J | | | L | 7 | L | J | F | - | J | | F | 7 | | | | F | J | | | L | - | - | 7 | F | - | J | F | - | 7 | F | J | L | J | F | - | 7 | F | 7 | | F | - | - | 7 | F | 7 | L | J | L | - | J | | F | 7 | L | J | L | J | L | - | J | L | J | | | | | | | | | | |
| | | | | | | F | - | - | - | J | | | L | J | L | J | F | 7 | | L | J | | | F | J | F | 7 | F | - | 7 | F | - | - | J | F | 7 | | L | - | J | F | 7 | F | - | - | - | - | - | - | J | F | - | - | J | L | 7 | F | J | F | 7 | L | 7 | | | F | 7 | | | L | - | 7 | | | F | J | F | 7 | L | - | - | 7 | | | | | | F | 7 | L | 7 | | | | F | 7 | L | J | F | 7 | L | 7 | | | L | - | 7 | F | J | | L | J | L | 7 | L | 7 | F | J | | | | | | F | - | - | - | - | J | L | - | - | - | - | - | - | - | 7 | | | | | | | | | | | |
| | | | | | | L | - | - | - | - | J | F | - | - | - | J | L | - | - | - | J | L | 7 | | | | | L | 7 | | | L | - | - | 7 | | | L | - | 7 | F | - | J | L | J | F | 7 | F | - | 7 | F | - | J | F | 7 | | F | J | | | F | J | L | - | J | L | J | L | 7 | F | 7 | F | J | | | L | 7 | | | L | 7 | F | - | J | | | | | F | J | L | 7 | | | | | F | J | | | | F | J | | | F | J | | | F | 7 | L | J | | F | - | - | - | J | | | | | | F | J | L | 7 | | | F | - | - | - | 7 | F | - | - | - | 7 | F | - | - | J | | | | | | | | | | | |
| | | | | | | | | | F | - | 7 | | | F | 7 | F | 7 | F | 7 | F | 7 | F | 7 | L | J | L | - | J | L | 7 | F | 7 | L | J | F | - | J | | | F | - | - | - | J | | | L | 7 | | | L | - | - | J | L | 7 | L | - | J | L | 7 | F | - | - | 7 | F | - | J | | | | | | | F | J | | | | L | 7 | | | L | 7 | F | J | | | L | - | 7 | L | J | | | L | 7 | L | 7 | L | 7 | | | L | 7 | L | J | L | - | - | - | J | F | - | - | - | - | J | L | J | F | 7 | L | J | L | 7 | F | 7 | L | J | F | 7 | | L | J | | | | | | | | | | | | | | |
| | | | | | | | | | L | 7 | | | L | J | L | J | L | J | L | J | L | J | L | - | - | - | - | - | 7 | L | J | L | - | - | J | F | 7 | | | | | F | - | - | 7 | | | F | J | | | F | - | 7 | F | 7 | | | F | 7 | F | - | J | | | F | - | J | | | | F | J | L | J | | | F | 7 | | | F | J | L | - | J | L | 7 | | | F | 7 | L | 7 | F | J | | L | 7 | L | - | J | L | - | J | F | - | 7 | F | 7 | F | 7 | | | F | - | - | - | 7 | F | - | J | | | F | - | 7 | L | J | L | - | - | J | L | - | - | - | 7 | | | | | | | | | | | | | |
| | | | | | | | | F | 7 | | | L | - | 7 | F | 7 | | F | 7 | F | 7 | F | 7 | F | 7 | | F | 7 | L | - | - | - | - | - | - | J | L | J | L | J | F | - | J | L | J | | L | J | | L | J | L | J | | | | | L | - | - | J | L | - | 7 | L | 7 | L | - | - | 7 | L | J | L | J | L | - | - | 7 | | | | | L | J | L | - | J | | | F | 7 | | L | - | - | 7 | F | 7 | F | J | | L | J | | | | | L | J | L | - | - | 7 | L | J | F | 7 | L | J | | L | - | - | 7 | F | - | - | - | - | - | - | J | | | | | | | | | | | | | |
| | | | | | | F | - | J | L | J | F | 7 | L | J | L | - | J | L | J | L | J | L | J | L | - | J | | | F | - | - | - | - | - | - | - | - | 7 | F | 7 | L | 7 | F | 7 | F | 7 | | F | 7 | F | 7 | | F | J | L | - | - | 7 | | F | 7 | L | 7 | L | 7 | F | 7 | | | F | - | - | - | 7 | F | - | J | | F | J | F | - | - | - | 7 | | | | | | | F | 7 | | F | J | | | | | L | - | - | - | 7 | | | | | F | - | 7 | F | 7 | L | - | - | J | L | 7 | | F | 7 | F | 7 | L | J | F | 7 | F | - | - | - | 7 | | | | | | | | | | | | | |
| | | | | | | L | - | 7 | F | 7 | | | L | - | - | - | - | - | - | - | 7 | F | - | - | 7 | F | 7 | L | J | F | - | - | - | - | - | - | 7 | L | J | L | 7 | | | | | L | J | L | 7 | | | | | | | L | 7 | | | F | - | 7 | F | J | F | J | L | 7 | | | F | J | | | | | | | L | - | - | 7 | L | J | | F | 7 | L | - | J | F | - | - | J | | | | | | | | | L | 7 | | | F | J | L | 7 | F | - | - | J | L | J | L | 7 | L | J | L | - | - | - | 7 | F | J | F | J | L | J | L | 7 | F | J | L | J | F | - | - | J | | | | | | | | | | | | | |
| | | | | | | | | L | J | L | J | F | - | - | - | - | - | - | - | J | L | 7 | F | J | | | L | 7 | F | J | F | - | - | - | - | - | J | F | - | 7 | | | L | J | F | - | - | J | | | L | J | F | J | L | J | | | | | | F | J | F | 7 | L | J | L | 7 | | | | | L | 7 | F | 7 | L | - | 7 | F | J | | | F | 7 | | L | - | - | 7 | | | | | L | J | F | J | | | | | F | - | J | | | F | - | - | - | - | - | J | F | - | - | - | - | 7 | L | J | F | J | F | - | - | - | J | | | F | - | - | J | F | - | 7 | | | | | | | | | | | | | |
| | | | | | | | | | | | | L | 7 | F | - | - | - | 7 | F | 7 | F | J | L | 7 | L | 7 | | | | | F | J | F | - | - | - | - | - | J | F | J | | | F | 7 | L | - | - | - | J | F | - | J | F | 7 | F | 7 | | | | | L | - | J | L | - | - | 7 | L | J | | | F | J | | | L | - | - | J | L | 7 | L | J | L | 7 | F | 7 | F | J | L | J | F | 7 | L | 7 | L | J | L | - | - | J | L | - | - | - | - | - | - | J | F | - | - | - | J | | F | J | F | J | F | 7 | | F | J | L | - | - | - | J | F | J | | | | | | | | | | | | | |
| | | | | | | | | | | | F | - | J | | | F | - | 7 | L | J | L | J | F | 7 | L | - | J | L | J | L | 7 | | | F | - | - | - | - | - | J | | L | J | L | - | - | - | - | - | J | F | - | J | L | J | | | | | L | 7 | | F | 7 | F | 7 | L | - | 7 | | | | | F | J | F | 7 | | F | 7 | L | - | - | 7 | | | | | L | J | F | - | - | J | L | - | J | | F | - | - | - | - | - | - | - | - | - | - | - | - | J | F | 7 | | F | 7 | | | F | J | | | | | | F | J | F | 7 | F | - | - | - | J | | | | | | | | | | | | | | |
| | | | | | | | | | | | L | - | - | J | L | 7 | | | F | 7 | F | 7 | | | | | F | 7 | F | 7 | F | 7 | L | J | L | - | - | - | - | - | - | - | - | 7 | | F | 7 | F | 7 | F | - | J | F | - | - | - | J | L | 7 | L | - | J | | | | | L | 7 | F | J | | | | | | | F | J | L | 7 | | | L | - | 7 | F | J | | | L | - | 7 | L | - | - | 7 | F | 7 | F | 7 | L | - | - | - | - | - | - | - | - | - | - | - | - | - | J | L | 7 | | | L | J | L | - | - | J | | | | | F | J | | | L | - | - | - | - | - | 7 | | | | | | | | | | | | |
| | | | | | | | | | | | F | - | 7 | F | - | J | L | J | L | J | | | | | L | J | L | J | L | J | L | 7 | F | - | - | - | - | - | - | - | - | - | J | F | J | | | | | L | J | F | - | J | | F | 7 | F | 7 | L | 7 | F | 7 | L | J | F | J | L | 7 | | | | | L | J | F | - | J | L | - | 7 | | | L | 7 | | | F | - | J | F | 7 | F | J | | | | | | | | | F | - | - | - | - | 7 | F | - | - | - | - | - | - | - | - | 7 | L | J | F | - | 7 | F | - | 7 | L | J | L | 7 | L | - | - | - | - | - | - | J | | | | | | | | | | | | |
| | | | | | | | | | | | L | 7 | | | L | - | - | - | - | - | 7 | | | | | F | - | - | - | - | - | 7 | L | J | F | - | 7 | F | 7 | F | 7 | F | 7 | | | | F | J | | | F | - | J | | F | 7 | | | | | | | | | | L | J | L | 7 | F | J | F | 7 | | | | | | | F | - | J | F | 7 | F | 7 | | | | | | | | | | L | - | 7 | | | L | J | | | | L | J | | | L | - | - | - | 7 | | | L | 7 | F | - | 7 | F | - | - | 7 | | | F | 7 | L | 7 | L | J | | | | F | - | 7 | L | - | - | - | - | - | 7 | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | L | - | - | - | - | - | - | J | | | L | J | F | - | - | 7 | F | J | F | 7 | | | | L | J | | | | | L | J | L | - | J | L | - | J | L | - | - | 7 | | | | | | | | | | | | | F | 7 | F | - | J | L | - | J | L | J | L | J | L | 7 | F | J | | | | | | | | | | | F | J | L | 7 | F | J | L | 7 | | F | J | F | - | J | F | 7 | | F | J | | | | L | J | | L | J | | F | J | | | | | L | 7 | L | 7 | F | - | J | L | 7 | | | F | - | - | - | - | 7 | L | - | - | 7 | | | | | | | | | | | |
| | | | | | | | | | | | | L | - | - | 7 | F | - | - | - | 7 | L | - | 7 | L | - | 7 | | | L | - | J | L | J | F | - | - | J | | | F | - | - | - | - | 7 | F | - | 7 | F | - | J | | | | | | | | | | | | | | | | | L | - | - | - | - | - | - | - | 7 | F | - | J | L | 7 | L | J | L | J | | | | | F | 7 | | | L | - | 7 | L | 7 | | | F | J | F | - | J | L | 7 | L | 7 | L | - | - | 7 | F | 7 | | F | J | | L | J | | | | F | J | L | - | 7 | F | J | | | L | - | - | - | 7 | | | F | - | - | J | | | | | | | | | | | |
| | | | | | | | | | | | | | F | 7 | L | J | F | - | - | J | F | 7 | L | - | 7 | | | L | - | - | 7 | F | 7 | L | - | - | - | J | | | | F | - | 7 | | | | | F | J | L | - | - | J | | | | | | | | | | | | | | | F | 7 | | F | 7 | F | 7 | F | J | L | 7 | | | L | 7 | F | - | - | J | L | J | | | L | - | 7 | L | 7 | L | J | | | | | | F | - | 7 | | | | L | - | - | 7 | L | J | L | 7 | L | - | - | - | - | 7 | | | L | - | 7 | F | J | L | 7 | L | 7 | F | 7 | F | J | | | L | - | - | - | 7 | | | | | | | | | | |
| | | | | | | | | | | | F | - | J | L | - | - | J | F | 7 | F | J | | | F | 7 | L | J | F | - | 7 | L | J | L | 7 | F | 7 | F | 7 | L | 7 | | | F | J | L | J | L | 7 | F | 7 | F | - | J | | | | | | | | | | | | | | | | | F | J | | | | | L | J | F | 7 | L | 7 | | F | J | L | - | - | 7 | F | 7 | L | - | 7 | | | F | J | F | - | J | F | J | L | 7 | | | | | F | - | - | - | J | F | - | 7 | L | - | - | - | - | - | J | L | - | - | J | L | 7 | F | J | | | | | | | | L | 7 | L | 7 | F | - | 7 | | | | | | | | | | | | |
| | | | | | | | | | | | L | - | - | - | - | - | 7 | | | | | | | F | J | | | L | 7 | F | J | | L | 7 | F | 7 | L | J | L | J | L | 7 | L | J | L | - | - | 7 | | L | J | L | J | | F | J | | | | | | | | | L | J | | | L | 7 | | | L | - | 7 | | | L | 7 | | | F | J | F | - | - | - | J | | | | | F | - | J | | | L | 7 | L | 7 | | | | F | - | J | L | J | L | - | - | 7 | F | J | | L | - | - | 7 | F | 7 | | F | 7 | F | 7 | F | 7 | | | L | - | 7 | | | | | L | - | J | | L | J | | L | J | | | | | | | | | | |
| | | | | | | | | | | | | | F | - | - | - | J | | | L | J | L | 7 | | | | L | J | | F | 7 | L | J | L | - | - | - | - | 7 | | | F | - | - | - | - | J | F | 7 | F | - | - | 7 | L | 7 | L | J | L | J | F | - | J | F | J | | | F | - | J | L | 7 | L | J | L | 7 | | | F | 7 | | F | J | | | L | - | 7 | L | 7 | | | F | J | F | J | L | - | 7 | F | 7 | | F | 7 | L | J | | F | - | 7 | F | J | | | L | 7 | | | L | J | | | | | | | L | - | - | J | L | J | F | - | 7 | F | 7 | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | L | - | - | - | 7 | | | F | - | 7 | L | J | F | - | 7 | F | J | L | - | - | - | - | - | - | - | J | | | L | 7 | | F | 7 | | | | L | J | F | 7 | L | 7 | L | - | - | - | 7 | L | 7 | | | | F | J | L | - | 7 | F | J | | F | - | J | L | J | L | 7 | L | 7 | L | 7 | | L | 7 | L | J | L | 7 | | | F | - | - | J | | | | | F | J | L | 7 | F | 7 | L | 7 | | | L | - | J | F | J | | | F | - | J | | | | | F | 7 | F | - | 7 | | L | 7 | L | J | L | 7 | | | | | | | | | | | | | |
| | | | | | | | | | | | | | F | - | - | 7 | L | J | L | 7 | | | F | 7 | L | 7 | L | J | F | - | - | 7 | F | - | 7 | | F | 7 | L | - | J | F | J | L | 7 | L | 7 | F | J | L | - | J | F | 7 | F | 7 | | | F | J | F | J | | | | F | 7 | | | | | F | 7 | L | - | - | 7 | F | - | J | F | J | F | J | F | 7 | L | - | - | 7 | | | | | | | F | - | 7 | | | | | L | - | 7 | L | J | | | F | J | L | - | - | - | J | F | J | L | - | - | J | | | | | | | L | 7 | L | 7 | F | J | F | - | - | J | | | | | | | | | | | | | |
| | | | | | | | | | | F | - | - | J | F | 7 | L | - | - | - | J | L | J | L | - | J | F | 7 | | | F | 7 | L | J | | L | - | J | L | - | 7 | | | | F | - | J | F | J | L | - | 7 | F | 7 | | | | | | | L | J | L | 7 | L | 7 | | | F | J | | | | | L | J | L | 7 | F | 7 | | | | | F | 7 | L | 7 | L | 7 | | | L | 7 | F | 7 | | | | | | | | | | | F | J | | | | | F | 7 | L | - | 7 | | | L | 7 | F | - | 7 | F | 7 | L | 7 | F | - | - | - | J | | | L | 7 | | | F | J | L | 7 | | | F | 7 | | | F | 7 | | | | | | | | | | |
| | | | | | | | | | | L | - | - | - | J | | | F | 7 | F | - | - | - | - | 7 | F | - | J | L | J | | | | | F | - | - | - | - | - | - | - | J | F | J | | | F | 7 | | | F | - | - | J | | | | | | | | | L | - | 7 | F | J | F | J | | | L | 7 | L | J | F | - | - | J | | | L | J | L | J | L | 7 | L | 7 | | | L | 7 | | | | | L | J | | | | | | | | | | | | | | | | | | L | 7 | F | J | | | F | J | | | | L | J | L | - | J | L | - | - | 7 | | L | 7 | | | | | | | F | - | J | L | J | L | 7 | F | J | L | 7 | | | | | | | | | |
| | | | | | | | | | | F | - | - | - | 7 | L | J | L | J | F | 7 | F | - | J | | | F | 7 | F | - | J | L | J | F | - | - | - | 7 | F | - | 7 | L | 7 | | | | | | | | | | | F | 7 | | | | L | J | | | F | - | J | L | - | J | F | J | | | | F | - | J | F | 7 | | L | - | 7 | F | - | - | J | F | J | L | 7 | | | | | L | - | 7 | L | J | | | | | | | F | J | | | | | F | J | L | 7 | | | L | - | J | F | - | - | 7 | F | 7 | F | - | - | J | F | 7 | | | | | | | L | J | F | - | 7 | F | 7 | L | J | F | - | J | F | 7 | | | | | | | |
| | | | | | | | | | | L | - | - | 7 | | | | F | 7 | F | J | L | J | F | - | J | | | | | L | - | - | - | 7 | | | | F | - | J | | | F | J | F | J | L | J | | | | | | | | | L | 7 | L | - | 7 | | | L | - | 7 | F | - | - | J | F | 7 | | | | | F | 7 | | | | | F | 7 | F | J | | | F | - | - | J | F | - | J | | | L | - | 7 | | | F | 7 | L | J | | | | | F | J | | | L | 7 | F | J | L | 7 | F | 7 | L | - | 7 | | | | | | | L | - | - | - | J | L | J | L | J | F | - | J | | L | J | L | - | - | J | | F | J | L | 7 | | | | | | |
| | | | | | | | F | - | - | - | - | - | J | L | - | J | L | J | F | 7 | F | J | | F | J | L | - | 7 | F | - | J | L | 7 | | | F | 7 | | | | | | L | - | 7 | F | J | | | | | | | F | J | F | 7 | | | | | F | 7 | | | | | | F | 7 | | | | | | | | | | | | | | | | | | | | | L | 7 | | | L | - | - | 7 | | | F | 7 | L | - | 7 | | | L | J | | | F | - | J | | | | | | L | 7 | | | L | 7 | F | J | | | | | | F | J | | | | | | | F | 7 | F | - | - | 7 | F | - | 7 | L | - | - | - | 7 | F | - | - | - | - | - | J | F | 7 | | | | | | | | |
| | | | | | | | L | 7 | F | 7 | F | - | 7 | F | - | 7 | F | - | J | | | | | F | - | J | F | - | 7 | L | J | F | - | - | J | L | J | | | | | | | F | - | 7 | | | L | 7 | | | | | | | L | 7 | | | | | | | | | | | | | | | L | 7 | | | L | J | | | | | | | | | | | | | | | | | L | - | J | L | 7 | F | 7 | | | | | | | L | 7 | F | J | L | 7 | F | J | L | 7 | F | J | L | 7 | F | J | | | F | J | | | F | J | L | 7 | L | 7 | L | J | L | J | | | | | F | 7 | | | L | 7 | L | 7 | F | - | - | J | | | F | - | - | - | - | - | J | L | J | | | | | | |
| | | | | | | | | L | J | L | J | F | J | | | F | J | L | 7 | | L | J | L | 7 | F | J | | L | 7 | F | J | F | - | - | - | - | J | | | | | L | 7 | | | | | | | | | | | | | | F | J | | | L | J | | | | | L | J | F | J | L | - | 7 | | | | | | | | | L | J | | | L | - | - | 7 | F | J | | | | | | | L | J | F | J | | | F | - | J | | | F | - | J | L | 7 | F | J | | | F | J | L | 7 | L | J | | | L | 7 | L | - | 7 | F | - | J | L | J | | | | | F | J | F | J | | | | F | - | J | L | - | - | - | - | - | - | 7 | | | | | | | |
| | | | | | | | | | F | - | - | J | F | J | L | 7 | F | J | F | 7 | F | - | J | | | F | 7 | F | J | L | 7 | L | 7 | F | 7 | F | - | J | | | F | J | | | L | 7 | L | J | | | | | L | 7 | L | 7 | | | | L | - | 7 | L | - | 7 | F | J | | | | | L | J | F | - | J | F | - | 7 | | | L | 7 | | | | | L | - | 7 | L | 7 | | | | | F | 7 | | | L | 7 | F | - | J | L | 7 | | | | | F | 7 | L | - | - | 7 | | F | J | F | - | J | | | F | - | 7 | F | J | L | J | | L | 7 | L | - | J | F | 7 | F | - | - | - | 7 | F | 7 | | | | | | | | | |
| | | | | | | | | | L | - | 7 | F | J | F | - | J | | | F | J | L | J | F | 7 | | | | | L | J | F | - | J | | L | J | | | | | F | - | J | L | 7 | | | F | J | F | - | J | L | 7 | | | F | J | F | J | F | - | J | | F | J | L | 7 | L | J | F | - | J | F | 7 | L | 7 | | | L | 7 | | | | | | | F | - | J | | | | | | L | J | | | | | F | J | L | - | 7 | F | J | | | L | J | | | F | - | 7 | L | 7 | L | 7 | L | - | 7 | L | J | | | | L | - | - | - | 7 | F | J | F | 7 | F | J | | | L | - | - | 7 | L | J | L | J | | | | | | | |
| | | | | | | | | | | | L | J | F | J | F | 7 | | | L | - | - | - | J | L | J | L | 7 | F | J | F | - | - | - | - | J | | | L | 7 | F | 7 | | | | | L | 7 | L | - | 7 | F | J | | | L | 7 | L | 7 | L | - | - | 7 | | | F | 7 | L | 7 | F | J | F | 7 | | | | | F | J | | | F | J | | | | | | | L | - | - | 7 | L | J | F | - | J | | | L | 7 | F | 7 | | | L | 7 | L | - | 7 | | | L | 7 | L | 7 | | | | | | F | 7 | L | - | 7 | F | J | F | 7 | F | 7 | | | | | F | J | | | L | 7 | L | 7 | F | - | J | | | | | | | | | | | |
| | | | | | | | | | | | | | L | 7 | | | | | | | F | - | 7 | F | - | - | - | - | J | L | 7 | L | 7 | F | 7 | F | 7 | L | 7 | L | J | | | | | L | - | J | | F | J | L | 7 | | | F | J | F | J | F | - | - | J | | | | | L | - | J | L | 7 | | | | | | | | | L | 7 | | | | | F | J | | | L | 7 | F | - | J | F | - | J | F | 7 | | | F | J | | | | | | | F | J | F | - | J | L | - | J | | | | L | 7 | | | | | | | F | 7 | | | | | F | J | L | J | L | J | | | | | | | | F | J | | | | | | F | 7 | | | | | | | | | | | |
| | | | | | | | | | | | F | - | - | J | | | L | J | L | 7 | L | J | F | - | 7 | F | 7 | F | J | F | J | | | | | | | L | - | J | | F | J | L | - | 7 | | F | J | F | 7 | | | | | | | | L | 7 | L | - | - | 7 | | | L | - | 7 | F | 7 | | | | | L | J | | | F | J | L | J | | | F | J | F | J | L | 7 | | L | - | 7 | | | | | | | | | F | J | | | | | L | 7 | L | - | - | 7 | | F | - | J | F | J | | | | | L | J | L | J | | | L | - | 7 | F | 7 | | | | | | F | J | L | - | 7 | | | L | J | L | - | 7 | | | | | | | | | |
| | | | | | | | | | | | L | - | - | 7 | | | | | | L | - | 7 | L | 7 | L | J | | | | | | L | 7 | | | | | | | F | - | - | - | J | F | 7 | F | J | F | J | F | J | | | | | | | | | F | - | J | F | 7 | F | J | | | F | - | J | | | L | J | L | 7 | F | J | L | 7 | F | - | J | L | 7 | L | - | 7 | L | - | 7 | F | J | | | L | J | | | L | 7 | | | | | | | | F | - | 7 | L | 7 | L | 7 | F | J | | | | L | - | 7 | F | 7 | L | 7 | F | J | | | L | 7 | | | | | | | F | - | 7 | | | L | - | 7 | F | - | J | | | | | | | | | |
| | | | | | | | | | | | | | | L | J | | | | | | | | F | J | F | - | J | L | - | 7 | | | | | | | | | L | 7 | F | - | 7 | | | | | L | 7 | | | F | J | F | J | | | | | | | | | F | 7 | | | | | | | F | J | L | - | 7 | | | F | 7 | F | J | L | 7 | F | J | L | 7 | F | 7 | | | F | - | J | F | - | J | L | 7 | L | - | 7 | L | 7 | | | L | J | F | J | L | 7 | L | - | J | | | | L | - | 7 | | | F | 7 | L | J | L | 7 | | | L | 7 | L | 7 | L | J | | | | | | | F | J | L | - | 7 | | | L | - | 7 | | | | | | | | | |
| | | | | | | | | | | | | | | | | F | 7 | F | 7 | F | J | L | 7 | L | 7 | F | 7 | F | J | L | J | | | L | 7 | | | | | | L | J | L | 7 | | | | | L | 7 | L | 7 | | | | | | | L | J | | | | | | | | | L | 7 | F | - | J | L | J | | | L | - | 7 | | | L | - | 7 | | | | | | | | | L | - | 7 | L | - | - | 7 | L | 7 | F | J | F | J | | | F | - | J | F | 7 | L | - | - | - | 7 | L | 7 | F | J | | | | | | | F | 7 | F | J | | | F | J | F | J | F | 7 | | | | | | | | | F | - | 7 | | | L | - | - | J | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | L | J | F | - | J | | L | J | | | | | F | - | - | J | F | J | | | L | 7 | F | - | - | J | | | L | 7 | | | | | | | | | | L | 7 | | L | J | | | | | F | J | | | | F | 7 | | L | - | 7 | | | | | F | 7 | | | | | | | | | L | 7 | | | | F | - | 7 | | | F | J | L | 7 | L | - | J | L | 7 | F | J | L | 7 | F | 7 | F | J | | L | J | | L | J | | | | | | | L | 7 | L | J | | L | 7 | | | | | | | L | J | L | J | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | F | J | L | J | F | 7 | L | 7 | F | 7 | F | 7 | L | J | L | 7 | F | 7 | L | 7 | L | 7 | | | L | 7 | F | 7 | L | 7 | | | L | 7 | | | | | | | F | J | F | - | - | J | | | L | 7 | L | - | J | L | - | - | 7 | L | J | | | | | L | J | L | J | L | 7 | | | F | J | L | 7 | | | | | | | F | 7 | | | F | - | - | 7 | | | L | - | 7 | L | J | | | L | - | - | 7 | F | - | - | 7 | L | J | L | 7 | L | - | 7 | F | 7 | L | J | | | L | - | 7 | | | | L | J | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | L | - | - | 7 | | | | | F | J | | | L | J | L | - | - | - | J | | | L | 7 | L | 7 | L | J | | L | J | L | 7 | | | L | 7 | | | L | J | | | | | | L | - | - | 7 | | | F | J | F | 7 | F | 7 | F | 7 | L | 7 | | | | L | - | - | - | 7 | | L | J | L | 7 | F | J | | | | | | | | | L | J | L | - | 7 | L | J | F | 7 | L | - | 7 | | | F | - | 7 | L | J | F | - | J | | F | - | J | F | 7 | L | J | L | 7 | | L | 7 | F | J | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | F | - | J | | | | | L | 7 | L | 7 | F | 7 | F | - | - | 7 | L | 7 | L | 7 | | | F | - | - | - | - | - | J | L | 7 | L | J | F | 7 | L | J | F | 7 | F | - | J | | | | | F | J | | | | | | | | | | | F | J | F | J | F | 7 | F | - | J | F | 7 | F | - | J | | | | L | J | | | | | F | - | - | - | J | F | 7 | | | L | 7 | F | J | | | L | 7 | L | - | 7 | L | - | 7 | F | J | F | - | J | | | F | 7 | F | J | | | L | J | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | L | - | 7 | | | | | F | J | | | | | | | | L | 7 | | L | 7 | L | 7 | | | | | | | F | 7 | F | - | - | 7 | F | J | | F | J | L | - | 7 | | | L | J | F | 7 | | | | | L | 7 | | | | | | | | | | | L | 7 | | | F | J | | | | | F | - | J | L | J | F | 7 | L | - | 7 | | L | J | | | F | - | - | 7 | | | | | L | 7 | | | | | | L | 7 | L | - | 7 | L | 7 | F | J | L | 7 | L | - | 7 | L | J | L | J | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | L | J | L | J | | | L | J | L | 7 | | | F | - | J | F | J | | | | | | | | | L | J | F | - | J | L | - | - | J | F | 7 | F | J | L | - | 7 | | | | | | | L | 7 | | | | | | | L | J | | | F | J | | | L | 7 | | | | | L | 7 | F | 7 | F | J | | | F | 7 | L | - | - | 7 | | | | | | F | J | | | | | F | J | | | L | - | 7 | L | 7 | F | J | | L | J | | F | J | F | 7 | L | - | - | 7 | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | 7 | F | J | | | | | | L | J | F | 7 | | | F | 7 | F | - | - | - | J | | | L | 7 | | F | J | | | | | | | | L | J | | | L | - | 7 | L | J | | L | 7 | | | L | J | | L | J | | | L | 7 | | | | | L | 7 | F | 7 | | | | | L | 7 | L | 7 | | | | | L | 7 | | | F | 7 | L | 7 | L | J | F | 7 | F | - | 7 | L | 7 | | | L | 7 | F | - | J | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | F | J | L | 7 | L | J | | | | | | | F | - | J | | | L | J | | | L | - | - | 7 | | L | 7 | L | 7 | L | 7 | | | | | | | F | - | - | J | F | 7 | L | - | - | - | 7 | | | | | F | - | 7 | F | - | J | F | J | | | | | F | J | | | | | | | L | - | J | | | | | | L | 7 | | | L | J | L | 7 | L | - | - | J | | | L | 7 | L | 7 | | | | | F | J | L | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | L | 7 | F | J | | | | | L | J | L | - | 7 | L | 7 | | L | 7 | F | 7 | L | - | 7 | L | 7 | | | F | J | | | | | | | | | F | 7 | F | J | | | F | 7 | F | 7 | | | | | | | L | 7 | L | J | F | 7 | L | 7 | L | J | L | 7 | | | | | | | F | 7 | F | 7 | L | J | | | | L | - | - | 7 | L | - | - | - | - | J | | | | F | J | L | J | L | 7 | F | J | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | L | J | | | | | | | | F | - | J | F | J | F | 7 | | | | | | | F | - | J | F | J | | | L | - | J | | | | | L | J | | | | | | | | | | L | J | | | | | L | J | | L | 7 | F | J | L | 7 | L | - | - | 7 | | | | | | | L | J | L | J | | | F | - | - | J | F | - | 7 | L | 7 | | F | - | - | - | - | J | | | F | 7 | F | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | 7 | L | - | 7 | | | | | | L | J | | | | | | | F | 7 | L | 7 | L | - | 7 | F | J | | | F | - | J | L | 7 | L | J | F | - | J | | | F | - | 7 | | L | J | F | - | J | F | 7 | F | J | L | J | | | F | 7 | F | 7 | | | L | 7 | F | 7 | | | | | | F | J | F | J | F | 7 | F | - | 7 | L | J | L | J | | | L | J | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | J | L | - | - | J | L | 7 | L | - | 7 | | | L | J | | | | | | L | - | - | J | L | 7 | | | L | - | 7 | F | J | F | 7 | L | - | 7 | | | L | 7 | L | - | - | - | J | F | 7 | | | L | J | | F | - | J | | | L | J | L | J | F | J | | | | | | | F | J | L | - | J | F | J | | | L | 7 | | | F | - | 7 | F | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | J | F | - | - | - | - | 7 | L | - | - | J | L | - | - | J | L | - | - | - | - | - | 7 | | | | | F | - | J | L | - | J | L | - | 7 | | | L | 7 | L | - | 7 | F | 7 | F | J | | | | | | F | - | J | F | 7 | L | 7 | F | 7 | | L | 7 | | | L | J | L | 7 | F | 7 | F | J | | L | - | J | L | J | F | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | J | F | 7 | F | 7 | L | 7 | F | - | 7 | F | - | 7 | F | 7 | F | - | - | - | 7 | | | L | J | | | F | - | 7 | F | 7 | F | - | J | L | 7 | L | - | 7 | | | | | | | | | F | J | L | 7 | | | F | 7 | | | L | 7 | L | J | L | 7 | F | J | | | | F | - | J | | | | | L | - | 7 | | F | 7 | F | 7 | L | - | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | J | F | J | L | J | L | - | J | | | F | J | L | 7 | | | | | | | L | - | - | 7 | | | L | 7 | | | | L | 7 | | | | | | | L | 7 | | | L | - | - | J | | | | | | | | | L | 7 | F | J | | | | | | | | | F | J | F | 7 | F | J | L | 7 | | | F | J | F | 7 | | | | | F | 7 | L | 7 | | | L | J | L | - | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | 7 | F | 7 | F | - | 7 | | | L | 7 | F | J | L | J | | | F | - | - | J | L | - | J | F | J | F | J | | | | | L | 7 | | | | | | | | | L | J | | | | | F | J | | | F | J | | | L | J | L | - | J | | | | | | | | | | | | | F | J | | | | | | | | | L | 7 | L | J | F | - | - | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | J | | | F | J | L | 7 | F | - | J | | | F | 7 | F | - | 7 | | L | 7 | L | 7 | | | L | 7 | L | J | | | | | | | | F | J | | | L | - | J | L | 7 | L | 7 | F | - | - | - | J | L | - | 7 | L | J | | | | | | | | | | | | L | 7 | L | - | 7 | L | 7 | | L | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | J | L | J | L | 7 | | | | | F | - | J | L | 7 | F | J | | | | | L | 7 | L | - | 7 | L | 7 | | | | | F | J | | | | | | | | | | L | 7 | | | | | | | | | F | J | L | - | 7 | F | 7 | F | - | J | F | - | J | L | 7 | | | | | L | - | J | | F | J | F | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | 7 | F | 7 | | | L | - | J | L | 7 | L | 7 | F | J | | L | J | | | L | 7 | | | | | | | | | | | | | | | | | | | L | J | F | - | - | J | | | L | J | | | L | - | 7 | F | J | | | L | 7 | | F | - | J | F | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | J | L | 7 | | | | | L | J | F | 7 | F | 7 | L | - | J | L | 7 | F | - | - | J | F | J | | | | | | | | | | | | | L | 7 | | | | | | L | - | - | 7 | L | 7 | | | | | | L | J | | | | F | J | | L | - | 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | J | L | 7 | F | J | | | | | | | F | 7 | F | - | J | | | F | - | 7 | L | - | 7 | | | | | | | | | | | | F | J | | | | | | | | F | J | F | J | | | | | | | | | L | J | | | | | L | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | - | J | L | 7 | | | | | | | | | | | L | - | 7 | L | J | F | J | F | - | J | | | | | | | | | | L | J | | | | | | | | F | J | F | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | 7 | L | 7 | F | - | J | L | J | L | J | L | 7 | F | J | | | L | 7 | L | 7 | | | | | | | | | | | | | | | | | | | | L | - | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | F | J | L | - | J | L | - | 7 | F | - | - | - | - | J | L | - | 7 | | | | | F | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | L | - | - | - | - | - | - | J | L | - | - | - | - | - | - | - | J | | | L | J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
\ No newline at end of file
diff --git a/solutions/2023/dotloadmovie/src/day10/index.spec.ts b/solutions/2023/dotloadmovie/src/day10/index.spec.ts
new file mode 100644
index 0000000..33897d7
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day10/index.spec.ts
@@ -0,0 +1,13 @@
+import { solution1, solution2 } from './index';
+
+describe('tests', () => {
+ /*test('test solution1', () => {
+ const output = solution1();
+ expect(output).toEqual(6778);
+ });*/
+
+ test('test solution2', () => {
+ const output = solution2();
+ expect(output).toEqual(10);
+ });
+});
diff --git a/solutions/2023/dotloadmovie/src/day10/index.ts b/solutions/2023/dotloadmovie/src/day10/index.ts
new file mode 100644
index 0000000..913a889
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day10/index.ts
@@ -0,0 +1,4 @@
+import { solution1 } from "./solution1";
+import { solution2 } from "./solution2";
+
+export { solution1, solution2 };
diff --git a/solutions/2023/dotloadmovie/src/day10/solution1.ts b/solutions/2023/dotloadmovie/src/day10/solution1.ts
new file mode 100644
index 0000000..8a98a80
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day10/solution1.ts
@@ -0,0 +1,126 @@
+import fs from 'fs';
+
+type Position = {
+ x: number;
+ y: number;
+};
+
+type GridElement = {
+ exits: Position[] | null;
+ self: Position;
+ char: string;
+} | null;
+
+interface List {
+ [key: string]: GridElement;
+}
+
+export const solution1 = () => {
+ const getPoints = (symbol: string, position: Position): Position[] | null => {
+ let output = null;
+
+ if (symbol === 'F') {
+ output = [
+ { x: position.x + 1, y: position.y },
+ { x: position.x, y: position.y + 1 },
+ ];
+ }
+
+ if (symbol === '|') {
+ output = [
+ { x: position.x, y: position.y + 1 },
+ { x: position.x, y: position.y - 1 },
+ ];
+ }
+
+ if (symbol === '-') {
+ output = [
+ { x: position.x + 1, y: position.y },
+ { x: position.x - 1, y: position.y },
+ ];
+ }
+
+ if (symbol === 'L') {
+ output = [
+ { x: position.x, y: position.y - 1 },
+ { x: position.x + 1, y: position.y },
+ ];
+ }
+
+ if (symbol === '7') {
+ output = [
+ { x: position.x - 1, y: position.y },
+ { x: position.x, y: position.y + 1 },
+ ];
+ }
+
+ if (symbol === 'J') {
+ output = [
+ { x: position.x, y: position.y - 1 },
+ { x: position.x - 1, y: position.y },
+ ];
+ }
+
+ return output;
+ };
+
+ const input = fs
+ .readFileSync(`${__dirname}/data/data.txt`, 'utf-8')
+ .split('\n');
+
+ const start: Position = { x: 0, y: 0 };
+ const firstStep: Position = { x: 31, y: 25 };
+
+ const list: List = {};
+
+ const grid = input.map((row: string, rowi: number) => {
+ const output = row.split('');
+
+ output.forEach((char: string, coli: number) => {
+ if (char === 'S') {
+ start.x = coli;
+ start.y = rowi;
+ }
+ });
+
+ return output;
+ });
+
+ const buildList = (): any => {
+ let currPositions: any = { lastPos: start, thisPos: firstStep };
+ let currChar = '';
+
+ const step = (lastPos: Position, thisPos: Position): any => {
+ const char = grid[thisPos.y][thisPos.x];
+ const exits = getPoints(char, thisPos);
+
+ currChar = char;
+
+ list[`${thisPos.x}-${thisPos.y}`] = {
+ exits,
+ self: thisPos,
+ char,
+ };
+
+ currPositions.thisPos = exits?.filter((pos: Position) => {
+ if (pos.x === lastPos.x && pos.y === lastPos.y) {
+ return false;
+ }
+
+ return true;
+ })[0] || { x: -1, y: -1 };
+
+ currPositions.lastPos = { ...thisPos };
+ };
+
+ while (currChar !== 'S') {
+ step(currPositions.lastPos, currPositions.thisPos);
+ }
+ };
+
+ buildList();
+
+ const output = Math.floor((Object.keys(list).length + 1) / 2);
+
+ return output;
+};
diff --git a/solutions/2023/dotloadmovie/src/day10/solution2.ts b/solutions/2023/dotloadmovie/src/day10/solution2.ts
new file mode 100644
index 0000000..03af79b
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day10/solution2.ts
@@ -0,0 +1,176 @@
+import fs from 'fs';
+
+type Position = {
+ x: number;
+ y: number;
+};
+
+type GridElement = {
+ exits: Position[] | null;
+ self: Position;
+ char: string;
+} | null;
+
+interface List {
+ [key: string]: GridElement;
+}
+
+export const solution2 = () => {
+ const getPoints = (symbol: string, position: Position): Position[] | null => {
+ let output = null;
+
+ if (symbol === 'F') {
+ output = [
+ { x: position.x + 1, y: position.y },
+ { x: position.x, y: position.y + 1 },
+ ];
+ }
+
+ if (symbol === '|') {
+ output = [
+ { x: position.x, y: position.y + 1 },
+ { x: position.x, y: position.y - 1 },
+ ];
+ }
+
+ if (symbol === '-') {
+ output = [
+ { x: position.x + 1, y: position.y },
+ { x: position.x - 1, y: position.y },
+ ];
+ }
+
+ if (symbol === 'L') {
+ output = [
+ { x: position.x, y: position.y - 1 },
+ { x: position.x + 1, y: position.y },
+ ];
+ }
+
+ if (symbol === '7') {
+ output = [
+ { x: position.x - 1, y: position.y },
+ { x: position.x, y: position.y + 1 },
+ ];
+ }
+
+ if (symbol === 'J') {
+ output = [
+ { x: position.x, y: position.y - 1 },
+ { x: position.x - 1, y: position.y },
+ ];
+ }
+
+ return output;
+ };
+
+ const input = fs
+ .readFileSync(`${__dirname}/data/data.txt`, 'utf-8')
+ .split('\n');
+
+ const start: Position = { x: 0, y: 0 };
+ const firstStep: Position = { x: 31, y: 25 };
+
+ const list: List = {};
+
+ const grid = input.map((row: string, rowi: number) => {
+ const output = row.split('');
+
+ output.forEach((char: string, coli: number) => {
+ if (char === 'S') {
+ start.x = coli;
+ start.y = rowi;
+ }
+ });
+
+ return output;
+ });
+
+ const buildList = (): any => {
+ let currPositions: any = { lastPos: start, thisPos: firstStep };
+ let currChar = '';
+
+ const step = (lastPos: Position, thisPos: Position): any => {
+ const char = grid[thisPos.y][thisPos.x];
+ const exits = getPoints(char, thisPos);
+
+ currChar = char;
+
+ list[`${thisPos.x}-${thisPos.y}`] = {
+ exits,
+ self: thisPos,
+ char,
+ };
+
+ currPositions.thisPos = exits?.filter((pos: Position) => {
+ if (pos.x === lastPos.x && pos.y === lastPos.y) {
+ return false;
+ }
+
+ return true;
+ })[0] || { x: -1, y: -1 };
+
+ currPositions.lastPos = { ...thisPos };
+ };
+
+ while (currChar !== 'S') {
+ step(currPositions.lastPos, currPositions.thisPos);
+ }
+ };
+
+ const plotList = () => {
+ grid.forEach((row: any, i: number) => {
+ row.forEach((col: any, j: number) => {
+ grid[i][j] = '';
+ });
+ });
+
+ Object.values(list).forEach((el: GridElement) => {
+ const mapped = grid[el?.self.y as number][el?.self.x as number];
+
+ grid[el?.self.y as number][el?.self.x as number] = el?.char || '';
+ });
+ };
+
+ const getClassName = (char: string) => {
+ if (char === '-') {
+ return 'cell-horiz';
+ }
+
+ if (char === '|') {
+ return 'cell-vert';
+ }
+
+ if (char === '') {
+ return 'cell-none';
+ }
+
+ return 'cell-' + char;
+ };
+
+ const exportGrid = () => {
+ const output: any = grid.map((row: any) => {
+ const rowOutput = row.map((col: any) => {
+ return `${col} | `;
+ });
+
+ return `${rowOutput.join('')}
`;
+ });
+
+ const toRender = ``;
+
+ fs.writeFileSync(`${__dirname}/html/table.html`, toRender);
+ };
+
+ buildList();
+
+ plotList();
+
+ exportGrid();
+
+ const output = 10;
+
+ return output;
+};
diff --git a/solutions/2023/dotloadmovie/src/day11/data/data.txt b/solutions/2023/dotloadmovie/src/day11/data/data.txt
new file mode 100644
index 0000000..d850118
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day11/data/data.txt
@@ -0,0 +1,140 @@
+................................#.......#......#.....#...........................#..........................................................
+..........................................................#..........................................................#...........#..........
+.....#.....................#.............................................................#..................................................
+.............#..............................................................................................................................
+.....................................................................................#....................#.................#...............
+..................#..........................................#...................................#..............#...........................
+...............................#....................................................................................................#.......
+..........#..............#.............#................#...................#...............................................................
+....#............................................................................#..........................................................
+...............#................................#......................................................................#................#...
+...................................#.............................#...............................................#..........#.....#.........
+#...................................................................................#.....#.....#......#....................................
+...............................#............................................................................................................
+..........................................................#................#................................................................
+.......#.......................................................................................................................#............
+..#.........#.........................................................................#.....................................................
+..........................................#........#.......................................#.......#..................#............#........
+.................#..............#..............................#...............................................#..........................#.
+...............................................................................................#........#...................................
+......................#............................................#......................................................#.................
+.....................................#.....................................#..........................................................#.....
+......#......................#...................#......#...................................................................................
+..........................................................................................................#.................................
+......................................................................#.........................................#.............#.............
+#............................................#.........................................#.................................................#..
+.............................................................#.....................................#........................................
+..............#..............................................................................................#....................#.........
+.........#.........#...................................#....................................................................................
+........................................#..............................#........................#......#.................#..................
+......................................................................................#................................................#....
+................#...........#...............................................................................................................
+.....................................................#.........#............................................................................
+....#.......#.......#.......................................................#.....................#.........................................
+.....................................#...........#..............................................................#...........................
+..........................................................................................................#.................................
+.......................#.............................................#..........#...........................................................
+#............................................................#...........................#.................................#.......#........
+.............................#......................................................#.................................#.....................
+.........................................#............#.................#......................#..............#................#.........#..
+............................................................................................................................................
+..........#.................................................................................................................................
+..........................................................#.......................................#.........................................
+#.....................#...............#..........#....................#.................................#...................#...............
+............................................................................................................................................
+.......#..........................#.........................................................................................................
+.................#...............................................#..............................#.................................#.........
+........................................................................................................................#...................
+..............................#.................#.....#..............................#..........................#...........................
+.....................................#.........................................#...........................#.........................#......
+.............#.....................................................#............................................................#..........#
+....#.........................................................#..................................#..........................................
+............................................#...........................#..................................................#................
+...............................#.........................................................................#..................................
+............................................................................................................................................
+.................#.........#....................#..........................#........................................................#.......
+.......................................................#....................................#...............................................
+............................................................................................................................................
+...#...............................................................................#............................................#...........
+..........#.....................#......................................................................#....................................
+.........................................#..................................................................................................
+.....................................................#.................#.............................................#..............#.......
+......................#.......................#.............................................................................#...............
+........#.............................#..........................#....................#.......................#.............................
+.................#..........................................................................#.....#.............................#.........#.
+............................................................................................................................................
+.........................................................................#..................................................................
+..............................................................#.............................................................................
+..........................#.............#..........................#.......................................#..........#.....................
+............................................................................................................................................
+..............................#......................................................................#............#...............#.........
+.............#..............................#.........#.................#...................................................................
+.....................#............................................................#.......................................#.................
+......................................#................................................#.................................................#..
+.................#...............................#..........................................................#...............................
+........#......................................................#...........#................................................................
+.........................................#......................................#...........#.....................#.........................
+.#.........................#................................................................................................................
+................................................................................................#...................................#......#
+...........................................................#............#.............#..................#..................................
+..................................................#.........................................................................................
+...........#................................#......................#................................................#..........#............
+........................#.........#.........................................................................................................
+.............................................................#.................................#...............#...........#................
+................#............#.......................................................................#......................................
+.#......................................................................#......#...........#................................................
+........................................................#..................................................#................................
+......................#...................#.....#..................#..............................#.........................................
+............................................................................................................................................
+...........#..........................#....................#............................................................#...................
+...................#...................................................................#...............................................#....
+...........................#...................................................................#.........#..................................
+.....#...........................................#.........................................................................#................
+......................#.............#......................................#......#.................#.......................................
+...............#..............#...........................................................#.....................#...............#...........
+...........................................................#.....#.........................................................................#
+.......................................#...............................#....................................................................
+.................................#..................#..................................................................................#....
+...........................................#..................................#.........................#...................................
+.........#..............................................................................#...................................................
+................#.....#................................#.................................................................#..................
+.................................................................................................#..........................................
+#..............................................#........................#...........................................#................#......
+..............................#...................................................#.......................#.................................
+..................#.................................#......................................................................................#
+..........#................................#..................................#...........#.................................................
+.....................................................................#....................................................#.................
+...............#.....................................................................................................#......................
+#........................................................#......#..........................................#........................#.......
+.......................#.........#......#...................................................................................................
+.....#......................................................................................................................................
+..................#...............................#....................................................................#....................
+............................................#......................#........................................................................
+.............#........................................#.........................#.........#........................#.....................#..
+...................................................................................................#..............................#.........
+..........................#.................................................................................................................
+..#................#....................................................#.......................................#...........................
+...........#.................................#.........................................#................................#.............#.....
+......................................#.......................#.....#.....................................#.................................
+.................................#...............................................................#..........................................
+.................#..........#.............................................#.......#...............................#..........#..............
+.......................................................#................................................................................#...
+..#........................................................................................#................................................
+............................................................................................................................................
+...................................#..........................................#.............................................................
+...........................................#........#...............................................#...........................#...........
+................................................................#......#....................................................................
+....#.................#.........................#...............................................................#...........................
+............................#..............................................................................#................#.......#.......
+........#................................#................#.............................#............................#......................
+#....................................................#..................................................................................#...
+............#........................................................#........................#.............................................
+..................#................#.......................................#................................................................
+...........................#...............#......#..........#..................#..................#.................................#.....#
+..........................................................................................#......................#.........#................
+.......................................#....................................................................#...............................
+...............#..............#........................................#................................................................#...
+..........#.................................................................#...............................................................
+.....#...............................................#.....#.....................................#..................#.........#.............
+...............................................#........................................................#...................................
+.#....................#.............................................................#.................................................#.....
\ No newline at end of file
diff --git a/solutions/2023/dotloadmovie/src/day11/index.spec.ts b/solutions/2023/dotloadmovie/src/day11/index.spec.ts
new file mode 100644
index 0000000..625b6cd
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day11/index.spec.ts
@@ -0,0 +1,13 @@
+import { solution1, solution2 } from './index';
+
+describe('tests', () => {
+ /*test('test solution1', () => {
+ const output = solution1();
+ expect(output).toEqual(374);
+ });*/
+
+ test('test solution2', () => {
+ const output = solution2();
+ expect(output).toEqual(1030);
+ });
+});
diff --git a/solutions/2023/dotloadmovie/src/day11/index.ts b/solutions/2023/dotloadmovie/src/day11/index.ts
new file mode 100644
index 0000000..913a889
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day11/index.ts
@@ -0,0 +1,4 @@
+import { solution1 } from "./solution1";
+import { solution2 } from "./solution2";
+
+export { solution1, solution2 };
diff --git a/solutions/2023/dotloadmovie/src/day11/solution1.ts b/solutions/2023/dotloadmovie/src/day11/solution1.ts
new file mode 100644
index 0000000..9dedf0d
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day11/solution1.ts
@@ -0,0 +1,105 @@
+import fs from 'fs';
+
+type Pos = {
+ x: number;
+ y: number;
+};
+
+const rotateArray = (arr: any): any => {
+ //assumes all arrays are the same length
+ const output: any = {};
+
+ arr.forEach((row: any) => {
+ row.forEach((digit: any, i: any) => {
+ if (!output[i]) {
+ output[i] = [];
+ }
+
+ output[i].push(digit);
+ });
+ });
+
+ return Object.values(output);
+};
+
+export const solution1 = () => {
+ const expandRows = (grid: any): any => {
+ const indices: number[] = [];
+ const space = new Array(grid[0].length).fill('.').join('');
+
+ grid.forEach((row: any, i: number) => {
+ if (row.indexOf('#') < 0) {
+ indices.push(i);
+ }
+ });
+
+ indices.forEach((index: any, count: number) => {
+ grid.splice(index + count, 0, space);
+ });
+
+ return grid;
+ };
+
+ const expandCols = (grid: any) => {
+ const indices: number[] = [];
+
+ const rotated = rotateArray(grid);
+ const space = new Array(rotated[0].length).fill('.');
+
+ rotated.forEach((row: any, i: number) => {
+ if (row.indexOf('#') < 0) {
+ indices.push(i);
+ }
+ });
+
+ indices.forEach((index: any, count: number) => {
+ rotated.splice(index + count, 0, space);
+ });
+
+ return rotateArray(rotated);
+ };
+
+ const getManhattan = (start: Pos, end: Pos): number => {
+ //const output = start.x - end.x + (start.y - end.y);
+
+ const x = Math.abs(start.x - end.x);
+ const y = Math.abs(start.y - end.y);
+
+ //return output >= 0 ? output : Math.abs(output);
+ return x + y;
+ };
+
+ const input = fs
+ .readFileSync(`${__dirname}/data/data.txt`, 'utf-8')
+ .split('\n');
+
+ const points: Pos[] = [];
+
+ const universe = expandCols(
+ expandRows(input).map((row: any) => {
+ return row.split('');
+ })
+ );
+
+ let count = 0;
+
+ universe.forEach((row: any, y: number) => {
+ row.forEach((cell: string, x: number) => {
+ if (cell === '#') {
+ universe[y][x] = count;
+ count += 1;
+ points.push({ x, y });
+ }
+ });
+ });
+
+ let output = 0;
+
+ points.forEach((point: Pos, idx: number) => {
+ for (let i = idx + 1; i < points.length; i++) {
+ output += getManhattan(point, points[i]);
+ }
+ });
+
+ return output;
+};
diff --git a/solutions/2023/dotloadmovie/src/day11/solution2.ts b/solutions/2023/dotloadmovie/src/day11/solution2.ts
new file mode 100644
index 0000000..ffb48c8
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day11/solution2.ts
@@ -0,0 +1,93 @@
+import fs from 'fs';
+
+type Pos = {
+ x: number;
+ y: number;
+};
+
+export const solution2 = () => {
+ const expansionFactor = 999999;
+
+ const readArrayCol = (colIdx: number, target: any): any[] => {
+ const output: any = [];
+
+ for (let i = 0; i < target.length; i++) {
+ //data is always square...
+ output.push(target[i][colIdx]);
+ }
+
+ return output;
+ };
+
+ const getManhattan = (start: Pos, end: Pos, offsets: Pos): number => {
+ const xPoints = [start.x, end.x].sort();
+ const yPoints = [start.y, end.y].sort();
+
+ const x = Math.abs(xPoints[0] - xPoints[1]);
+ const y = Math.abs(yPoints[0] - yPoints[1]);
+
+ return x + y;
+ };
+
+ const getOffset = (pos: Pos): Pos => {
+ const output: Pos = { x: 0, y: 0 };
+
+ output.x =
+ emptyCols.filter((num: number) => {
+ return num < pos.x;
+ }).length * expansionFactor;
+
+ output.y =
+ emptyRows.filter((num: number) => {
+ return num < pos.y;
+ }).length * expansionFactor;
+
+ return output;
+ };
+
+ let output = 0;
+ const emptyCols: number[] = [];
+ const emptyRows: number[] = [];
+
+ const input = fs
+ .readFileSync(`${__dirname}/data/data.txt`, 'utf-8')
+ .split('\n');
+
+ const points: Pos[] = [];
+
+ const universe = input.map((row: any) => {
+ return row.split('');
+ });
+
+ universe.forEach((row: string[], i: number, arr: string[][]) => {
+ if (i === 0) {
+ row.forEach((col: string, j: number) => {
+ const arrCol = readArrayCol(j, arr);
+
+ if (arrCol.indexOf('#') < 0) {
+ emptyCols.push(j);
+ }
+ });
+ }
+
+ let index = row.indexOf('#');
+ if (index < 0) {
+ emptyRows.push(i);
+ }
+
+ while (index > -1) {
+ const offset = getOffset({ x: index, y: i });
+ points.push({ x: index + offset.x, y: i + offset.y });
+ index = row.indexOf('#', index + 1);
+ }
+ });
+
+ points.forEach((point: Pos, idx: number) => {
+ for (let i = idx + 1; i < points.length; i++) {
+ const diff = getManhattan(point, points[i], { x: 0, y: 0 });
+ output += diff;
+ }
+ });
+
+ return output;
+};
diff --git a/solutions/2023/dotloadmovie/src/day14/data/colvalues.txt b/solutions/2023/dotloadmovie/src/day14/data/colvalues.txt
new file mode 100644
index 0000000..95e9dbb
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day14/data/colvalues.txt
@@ -0,0 +1,100 @@
+635
+721
+1162
+1382
+1105
+1691
+1225
+1456
+1048
+1167
+928
+795
+1471
+1299
+981
+1204
+1273
+1443
+1806
+866
+1170
+909
+1064
+1578
+1030
+971
+1129
+1361
+1144
+857
+1232
+788
+1182
+1093
+990
+1075
+1138
+1103
+727
+1246
+1020
+1305
+1058
+1142
+1663
+1025
+1597
+1063
+941
+1290
+1136
+867
+1034
+1063
+1087
+1399
+1114
+1174
+942
+1463
+1225
+893
+1437
+1029
+1332
+1019
+1298
+949
+1330
+1270
+958
+1274
+1017
+976
+1296
+1034
+1094
+947
+1236
+1057
+1292
+1710
+1153
+750
+810
+872
+1259
+914
+587
+1119
+1203
+1194
+981
+760
+1319
+1612
+1223
+1291
+1102
+774
\ No newline at end of file
diff --git a/solutions/2023/dotloadmovie/src/day14/data/data.txt b/solutions/2023/dotloadmovie/src/day14/data/data.txt
new file mode 100644
index 0000000..756b50d
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day14/data/data.txt
@@ -0,0 +1,100 @@
+..#OO..OO...#..O.OO....OO##O#...O..##.......O.OO..#.O.O#O....#.#O#O####...#.#..#.......O.O..O....#..
+.O....#.........OO........O...........#O##O.OOO..O..O.#.#O#O......O..O.O......#O.....###...O..#O....
+......O.....OO.O...O.O.O.#...#O...O.O#...O#.O.O.O##.O.....##...OO..#O.O....#.#....O.#O.....##....O..
+.##O##...#..###.....O..O#O...........O.##O#OO.O#..OO..OO.#.....OO.O..#.....O..........O..O..O#.O.O..
+...O.......O.#O.....OO.#.###....#O.O.##.O..O....O...#.O#O.#.#.O#......O.....#.........O..O##..O.O...
+......O#....O..O..O...#..#........#.#..#........O.O#O.OO.O#.OO...#O.O#.O....#O.O.O#....O...O.#.O....
+#O#.O....O.O...O..O#..O#..O##O#...........#....O...#.O....OO...O..O..O..OO..#.O...#......##...OO....
+..OO#O....#O.O##...O#.OOO..O.O.O...#O#...O.#.OO....#....O..O#O....#..#...#..##.#....O.#...O.....O.O#
+...##.#O#..O#..#....O#..OO...#..#......OO##O..O.#..##.#...#.O#..O...O....#....OO#...#..O.O....O.#..#
+.#....#O..O...O.#OOO#..OO...O.O..##..#....##O..#....O....O.....#.#..O..#..#.O#...O#O....O....O.O....
+...O.O##.OO.O.#O..O....##...O....O.##O##.O#.....#..#.....O.OO#O.O...#...#.O..#.#O...#O.#...O..OOO.OO
+.......##......#.O.#.....#.....OO..O.....O#O.O....OO.O...OOO...#O..#O.O...##..O.O.#...O....O...O....
+....OOO..#.#OO..O...#..#..OO.O.#.O..#...O....OOO.O.#.OO#.#......#..#.O.O.........O#...O.#.....##.O..
+.....#.O..O#..O...O.#..#.......#..OO#.#.....O#O..O...O.O....OO.#OO..O........O.#.O....O....O....OOO.
+#...O.O#OO#.....OO..#......O.O..O...##.O#.O.#.OOO#.#...#.......O..O..O...#.O...O.O....#....O....#...
+O.O..#...O..O......##.O....O#.O.O..O#.###OOO....#.O....#.#..##O..#..##..O..#O.....O#.O##...#....#O..
+#.......O#.#.#O....#...O.O##.....#O##.#OO.O.#.....OO.....O.OO.O..O...O....#.O.O#.OO#.O#..##......#.#
+..##.O.O....O..#.O..O.#......#..#O....O...##...#.O.....O.....OO#.......#..OO##.....#......OO...O.O.O
+.....O#....#..#......O#.....#O.O#........#...O.#...O.#.O#.O........O.O#OO.O..O..OO#O....#..#..OOO.O.
+.#.....OO...OO......OO.OO.O.......#.O#O.......O##...O.#.#......O#.......O.#.....O.....O#...O...#..OO
+..#O.O.O..#...........O.O.....O..#..O#..O...#O...#..OO.O##.O...O.....O.#..OOO....O.O....O...OO#.O...
+.O.O..O#.....##..O.....O#...#..O.#O....#...............O...O.....OOO.OOO...O.O...O.#OO#.#...#O.....#
+O#OO......#.O#..O#OOO.OO..O.O..OO.O.#O...#..O.#OO.O..O....OO#..#.#O....O..O#OO....O...O.OOO.O#O.....
+..##O..O.O#..OO.##O#O.O..O.......OO.#....O..O.OO#O..O.O.OOO.##..#...O#......O....#..O.O#..O.......#.
+.##.O.....##.OOO..O.#..O.....OO.#.....O#..#.O.#.....#.#OOOO.O...#...OO..#.......OO#O......#O..O.#...
+#.#O.O.O....O..OO...#......O.#O#.#....#...OO.....#O.O#OO.#......#..#...#....OOO#OOO.....O.##O......#
+...##O.#.O...O.O...#O......O.......O............#.O.#....#......#.OO..OO.O..O..##.....#OO..OO.#OO...
+.........#.O..#..OO.O##..O.....#.....O..#.O#O....O.##..#....O#O.O..OO#.O..........OO....#.....O..#O.
+.#....#OOO.#....#.........#.#.O.O##.....#O.OO#O#OO...#...O.......#......#..O..O.OO.O...#.##.O..##.#.
+##...O#.#...O..O....O...#...OO.......#...#...O##....#.#..###....O.O##..#.......O....#......O#.O...O#
+O.##...#O...O...O.#O.#.#.........O...O..O#.OO....O.#....O...O...#......O...#..O##.O..##O..O...#..#.#
+.##..O....O..O#.OOO.O.#O#...###.O.......O##..O###.#........O..OO..O#O...O.OOO.#O.O..#O.#..#......O.O
+..#O.OO#..#.#...O##...#...O#..O#O..O.O.......#.O#...#...##..O.#..O..O...#..O.O#.O.#...O...#...#.OO#.
+.#O...#O.#.#...#.O.##...#O.O.....OO....O...#.....#.#.O..#..#.O...O.O....OO.OO.O...#......#.#..#..O.#
+..O..O#..O....OOO..O.....#..#.#.....O....O..O#O..#..#.......O.....#O.#..OO#..#.....#O##....O#.#.O...
+..#.O#O.##O#OO...OO....O...OO......O....O###...#...O..O#OOOO...#OO.O.#.O...#.#.O..O.O#.#..O.#O#.O...
+O#O...#........O.#........OOO.....O#.....O.O#...#..O........#.O.....#..#...#...OOO.###.O..##....O..#
+..#O#O..........#O....O..O.....O...#.O.O..##..OO.O...#O.#.#O#OO.......#...O...O.O...O...#O..#..O##..
+#.O.O#OO#O..#O#.O......O...##..#.#.O.....#....#....O#..O...O..O..#O#....O.#O..O#.....#.O#OO.O....O..
+....#O...#...#.#..O.#.O.#.O.....OO#O.OO.#O..##...O..#......#.OO...O..O##O.......OO.#O....O#....O...#
+O.O..#O.O.O.O.#.O##...O#.OOOO.......O..O.##.O#.O.#OO...OO.........#.#.OO.O.#O.#O..#.#..O..O..O.#O#..
+.O..#..OO..O##.....O...##.#.O.O..###O......O.###......#...#....OOO.....O..O......O..O.O..#O##.O...#.
+O..#..O...#..O..O.#..#.O....O.#.##.#..#..OO#..O......OO###..O#O##O..O#............##.OO...O...OO#.#.
+..O#.....O...#....O#.O....#.O#.....O.O....OO.##.O..#O.OO.O.O..#..#..O#O#.OO...#...........O..O...#.O
+#..#.OO........O.....O.....O..O..O.#O#....O..OO..#....O..O.#..#.......O#..O....OOO...O#O.O.....O....
+.#......O.......#O#....OO...O#..OOOOO.#..O..#.OO#O.##....#....#.#...#...##..#O..O#......#......O....
+..O....OOOO#.#O.##O.O....#.O..O.O...OO..O...#...#...#..OOO#O........O.#O#..#..O..OOO..##...#..#O..O.
+O.O#...#O#......#.O#.OO.#.O.O....#..O......O.##O.O...###.............OO.#OO.......O....O.#O..O.O##.O
+O.OO.O#...#OOO..#....O..OO.#O#.OO..##O.OO.O....#.#...O...#O..OO......O.O.O........O...O.OOO.#..OO...
+..OOOOO.#....#O.OO.O...O###..#O#O.#.....#OO.O......#O...#.#.#...O#.O.O.#OOO#...#O....##.............
+#..O.O.#..O..........O..#..OOO#..O.......O.OO....#.#...O....O....O..O.O...O....O.O.#O#..#.....#.##.O
+OOO#O...#....O#.....O.....#...#..O....O..........O.....OOO..#..O.........O.#....###..#......#....#..
+....O...O.##.O.....#....O......##.....#OO...O#....O........###O.O.#O......O.#..O..#.#...#......OOO..
+#O#..OO.O...#...OO....O..O.O.O..O#..#....O....#....#...OO.O#....OOO....#.O.##....#.....O.O.#O.O..O..
+.......O..#.O.#...........O..O.....O#OO...O.O#.#...O....#.#.O#..O......O..........#.O.O.#..#.......O
+..O.O....O....O#....#...O...#.OO........#....#O.O.O.....OO#.#.O##..OO.#.O..#..#...O#..O.#.O...O.#...
+..#..#O#O..............O..O#..O...#..#.O.O.....##.....#OO#O...#.O.....###.OOO.##..O.......O....O.OO#
+.OOO.....O#...O.OO....#.......O...#..#OO...#O.#....O....#...#..O...O...##..OOO#..........O.O#..#..OO
+.O.#.O.O.............O..O#..##O.#..#O#O....##O#...OO.O.#.#......OO.O...#OO.##.O#O....O.#O...#......O
+..#.O...OOOOO##.......O..#.......#.....O..#..O.....O......##...O#.O......#..........#.O..###..O.O.O.
+...#...OO#..O.....O.O....OO.......O.O..OO..#O#..O..O...#....#.OO......O.O##.#.....O.......O...O..O..
+....##.##.O......#O.#.O...OO...O.#...##.#.#.....O......#..O.O..#.....#..#.OO....O#..O....#.OOO#..O##
+...O.O#...O..O..#.O..##.O....#OO.....O.O..O....O....#O...#.O.#.O.O..#O.O...#.#O...O..#O.#O.##...OO..
+.O...........O...#O..#.O.O#.......O...O.O.#.O.O......O.O#..OO.#O.O...##...O.#..O...O#..O..OOO#.#....
+.......O.#O#O..OO......O...O.#.O..##.#O#..O.O...O......O.......#......O##.O........##O.#....O#......
+....O..O..#...O....O.OO...O#.#....O....O..#..#...O...O...#....O.........#.O..O..O.O..#.O............
+#.O...#...O..#.......OO..#.O...##...#.....##.O.OOO...............O.#.O#..O..O#...O.O...#OO..O...#O.O
+#..OO#.O...#.O....O.....O#...#....#.#O....#.#O.O..O...O.O..#O...#....O..OOO.#.O#.#...#O#.O#.O..O..#.
+#...#.O......O#O.#O......#......OOO..O....#..O.#O...######.O#O.....O...#..O...OO..#......O....O.....
+...##.O.....O#O...O.#O...##........OOO#O.#O.#....O..OO.#O.##O.O.###.......##.OO...#.....###........#
+#..#.......OO..OOO..........OO...O#...OO......#.#.#..#..#.#...O#.O......O....O.#..O.#....#....O.OOOO
+#O....O....#.O...O..#.#.O....OO..........#O.#O#..O.....#O.....#O.O..O..#.O##.OO##...O....#O..OO...O.
+....#O##.OOO#...O.......OO.OO....O#.O...#.O..#..#..#....O..#.O....O#......O..O.O....O#...#O...#..#O.
+..OO#OO..##....O.O.OOO......O....OOOO..#...#...O......#.####.O.....O....##O..#...O.#.O#O........#...
+O#.##O#..#....O..O.OO#.##.......O......#...OO..O#.....#...O#O.O..O.....O...O.#..#.O..#O..#..#...#.O#
+#.O#.O.....O.##...OO......O.O...O.O.....O...#...............#.O#.#.OOOOO#....##..O..##....OO.##.....
+..#...O#.......#...O...O..##....#..O......#...O..O.....O.#.O.O......#O......#....#O..O..#.....O.....
+...OO.OO.OOO..O..#O.......O##..#.O.#...O...O..O.O#.......#.#.O.#...O..#.O..O#.OOO..O........O.#..###
+#O.......##.O..#.#...O.O#..#.#....#......#O#..#.#..#.#....OO...O.#...O..O#....#.#.#O...........##..#
+..#O.O.........#.....#.O..O.O.....#OOO..OO.O.........OOO.#....#.......OO#.#.....O.O..#..#...#.O..O.O
+..#..#...O.....#OO.#.....O..OO.#..O..#O...O..O....O..#O.O#O...........OO.O.#.....#..........#.OO.OO.
+.O#OO.OO.O.....#....OO#...#O#.#...O.O..O#..OO......O#...#.......OO.#.O.O..#.#.#O.O...O#.#..#.#.##.O#
+#.OO.O.#..O..OO#O#.#...O...O#...OO#......#....##OO...O..O..O.O.##...#...##.O.#....#....#..##.OOO..O.
+..#....O.....#...O....OO...O...#.#..O..#.O#OO.#..##.....O..#....O..#...#.#.O.O.O.#........#.....#.O.
+....##.#......O..O#.##.#........O.........#.##.#.#.#.#.O...O..O.#O#.....#.#...#..O..#O..#...OOOO#O##
+...#.#....O..O##O..OO...OOOO##..O.......O.##.OO##.#.....#...O....#.O.#O.O##O..O...#....#O...#...O.#O
+.....OO..#.O.O##.OO...#..OO.#.#.##...OO.#...O.O.O....O...O.#.#.#O.........#.OO.....O..###O...O..#..O
+.#..#....O...O#O......OO.........O#O#....#.O.#...O..OOO..O.#.O........O.......O..........O...#.#.OO.
+.O##...O#...#.O...#......#.#O...##..#O.#.##...#..O.#.OOO..O.OO#O.......##....#O.O.O..#.#....O##.....
+.O.O....#.O.##.....#......#...........O........OO.O.O..#O.O#.OO...#.O.#....#..O..O.O.#..O...#O#..#O#
+..##O.O#.O.#....#....O...#.##..#..OO..OO.O..O.....#....#.#.O........#O...##.OO.#..#..O.#.......#....
+#.........OO....O#.#..O.#..#.O#.#..#.O.....O......###.........O#O.O.O..#......#..#..OO...O..O#...O.#
+...O....#...OO#...O..#......#.O........O....#..##OO#.O...O.O...O.#............#...#O.O....O#O......O
+...O.#.OO.#....O.......#..O....O#.O...#.OO.#..O....OO..#..OO..O..O.###OO...O.O.#.......OO..OO#...O..
+...O.#..#O..OO#...O....#O....#OO.#OO..........#O.OO.O#...##...OO#O..#O..#.#.........#.O.#.........##
+O..O.O...O.......O...#O#...OO.#OO...#........#.OO...O..........#...O......O....O..#...O.....#OO....#
+O.O.#.#O.O.O.O..#.....OOO....#.#.O#O#...O.#OO.#....#..#..#.OO.OOO#O#........O.....O.#........#.#O...
+O..#.O........OO..O..O#.#..O..#..O#....#O#....#O.O.O..OO...O#.O.#O#..#OOO..O..#...#...O.#.OO.O#OO.OO
+.#.O..O..O...#.....#...O.O...#.#....OO.O.#.O.O..#O..O#..O#O..O.O#.....O#.O...O..OOO......OO.O.#.#.O.
+.O.O.O....OO....OOO....O..#O#O..#....O#....O..O.O...O....O....#..O..#..#.O#.OOO..#.......#.....#..O.
\ No newline at end of file
diff --git a/solutions/2023/dotloadmovie/src/day14/index.spec.ts b/solutions/2023/dotloadmovie/src/day14/index.spec.ts
new file mode 100644
index 0000000..fa7e2ab
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day14/index.spec.ts
@@ -0,0 +1,14 @@
+import { solution1, solution2 } from './index';
+
+describe('tests', () => {
+ /*test('test solution1', () => {
+ const output = solution1();
+ expect(output).toEqual(113424);
+ });
+
+ */
+ test('test solution2', () => {
+ const output = solution2();
+ expect(output).toEqual(96003);
+ });
+});
diff --git a/solutions/2023/dotloadmovie/src/day14/index.ts b/solutions/2023/dotloadmovie/src/day14/index.ts
new file mode 100644
index 0000000..913a889
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day14/index.ts
@@ -0,0 +1,4 @@
+import { solution1 } from "./solution1";
+import { solution2 } from "./solution2";
+
+export { solution1, solution2 };
diff --git a/solutions/2023/dotloadmovie/src/day14/solution1.ts b/solutions/2023/dotloadmovie/src/day14/solution1.ts
new file mode 100644
index 0000000..392c3d0
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day14/solution1.ts
@@ -0,0 +1,59 @@
+import fs from 'fs';
+
+const rotateArray = (arr: any): any => {
+ //assumes all arrays are the same length
+ const output: any = {};
+
+ arr.forEach((row: any) => {
+ row.forEach((digit: any, i: any) => {
+ if (!output[i]) {
+ output[i] = [];
+ }
+
+ output[i].push(digit);
+ });
+ });
+
+ return Object.values(output);
+};
+
+export const solution1 = () => {
+ const input = fs
+ .readFileSync(`${__dirname}/data/data.txt`, 'utf-8')
+ .split('\n');
+
+ let output = 0;
+
+ let grid = input.map((val: any) => {
+ return val.split('');
+ });
+
+ grid = rotateArray(grid);
+
+ const tiltRow = (row: string[]) => {
+ const raw = row.join('').split('#');
+
+ const output = raw.map((fragment: any) => {
+ return fragment.split('').sort().reverse().join('');
+ });
+
+ return output.join('#').split('');
+ };
+
+ const tiltedValues = grid.map((row: any) => {
+ const tilted = tiltRow(row);
+
+ return tilted.reduce((prev: any, curr: any, i) => {
+ const val = curr === 'O' ? 1 * (row.length - i) : 0;
+ const output = prev + val;
+
+ return output;
+ }, 0);
+ });
+
+ output = tiltedValues.reduce((prev: number, curr: number) => {
+ return prev + curr;
+ });
+
+ return output;
+};
diff --git a/solutions/2023/dotloadmovie/src/day14/solution2.ts b/solutions/2023/dotloadmovie/src/day14/solution2.ts
new file mode 100644
index 0000000..14168c8
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day14/solution2.ts
@@ -0,0 +1,124 @@
+import fs from 'fs';
+
+export const solution2 = () => {
+ const input = fs
+ .readFileSync(`${__dirname}/data/data.txt`, 'utf-8')
+ .split('\n');
+
+ const grid = input.map((row) => {
+ return row.split('');
+ });
+ let output = 0;
+
+ const readArrayCol = (colIdx: number, target: any): any[] => {
+ const output: any = [];
+
+ for (let i = 0; i < target.length; i++) {
+ //data is always square...
+ output.push(target[i][colIdx]);
+ }
+
+ return output;
+ };
+
+ const writeArrayCol = (
+ colIdx: number,
+ contents: string[],
+ target: any
+ ): void => {
+ for (let i = 0; i < target.length; i++) {
+ //data is always square...
+ target[i][colIdx] = contents[i];
+ }
+ };
+
+ const tiltRow = (row: any[], invert: boolean = false): any[] => {
+ const raw = row.join('').split('#');
+
+ const output = raw.map((fragment: any) => {
+ if (invert) {
+ return fragment.split('').sort().join('');
+ }
+
+ return fragment.split('').sort().reverse().join('');
+ });
+
+ return output.join('#').split('');
+ };
+
+ const tiltTableVert = (target: any, south: boolean = false) => {
+ for (let i = 0; i < target.length; i++) {
+ const sortedRow = tiltRow(readArrayCol(i, target), south);
+ writeArrayCol(i, sortedRow, target);
+ }
+
+ return target.slice();
+ };
+
+ const tiltTableHoriz = (target: any, east: boolean = false) => {
+ for (let i = 0; i < target.length; i++) {
+ target[i] = tiltRow(target[i], east);
+ }
+
+ return target.slice();
+ };
+
+ const rotateTable = (target: any): any => {
+ let output = target.slice();
+
+ output = tiltTableVert(output);
+ output = tiltTableHoriz(output);
+ output = tiltTableVert(output, true);
+ output = tiltTableHoriz(output, true);
+
+ return output;
+ };
+
+ const calculateLoad = (calcGrid: any): number => {
+ const cols = [];
+
+ for (let i = 0; i < calcGrid.length; i++) {
+ cols.push(readArrayCol(i, calcGrid));
+ }
+
+ const tiltedValues = cols.map((col: any) => {
+ return col.reduce((prev: any, curr: any, i: number) => {
+ const val = curr === 'O' ? 1 * (col.length - i) : 0;
+ const output = prev + val;
+
+ return output;
+ }, 0);
+ });
+
+ output = tiltedValues.reduce((prev: number, curr: number) => {
+ return prev + curr;
+ });
+
+ return output;
+ };
+
+ let matches: any = [];
+ let temp = grid.slice();
+
+ for (let i = 0; i < 1000; i++) {
+ temp = rotateTable(temp);
+
+ const val = JSON.stringify(temp.slice());
+
+ if (matches.indexOf(val) > -1) {
+ matches.push(val);
+ break;
+ } else {
+ matches.push(val);
+ }
+ }
+
+ return calculateLoad(
+ JSON.parse(
+ matches[
+ matches.length -
+ Math.cbrt(matches.length - (1000000000 % matches.length))
+ ]
+ )
+ );
+};
diff --git a/solutions/2023/dotloadmovie/src/day15/data/data.txt b/solutions/2023/dotloadmovie/src/day15/data/data.txt
new file mode 100644
index 0000000..0acdab1
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day15/data/data.txt
@@ -0,0 +1 @@
+dcb-,ds-,mdr=9,ddtp=6,sjhs=5,kgtl-,lms-,br-,vk=6,lms-,xd=4,kfs-,pdrct-,xft-,scr-,mn-,fq=3,hbqx-,ksjdgv-,ng=8,cpsh-,qxs-,qx=6,vjjr=5,fk=4,vpj-,zqgm-,zp=1,xz-,xnp-,csph-,zfgql=8,krsl-,fqdh=2,ng=2,lv-,nrl-,fqdh-,pjhdd-,phn-,lqzvsh=6,fnz=8,bdgknx=9,qjlv-,tgsq-,vqpn-,nrh=4,mr=1,tmqh-,qxs-,hkk=5,qjr=6,mm=3,pdrct-,np-,fsk=4,kzz-,blxnc-,skg-,sbsp=7,qvv=3,tgjr-,xtz=3,hbf-,sqk=3,mqhm=2,dq=1,thgd=1,djpj=7,lcvqz-,rpznm-,dbbd-,fxdkd-,sm-,zns=3,qmt-,cm-,kmsx=7,grq-,jr-,nhknz-,pzhfz=8,sfg-,ltf=1,rdm-,xv-,pz=4,dx=8,vj=4,grq-,cxbn-,dx=7,mzd=2,qs-,gkg-,nsg-,dvq=8,stqt-,pj-,plbc=8,tgsq=2,xftfd-,zp=2,bhj-,vfz=4,kzc-,gf=9,pxk=5,jhg=6,ptzd=9,jjh-,pr=8,gksbz-,dcnr-,dbd=7,rs-,fnz-,rg-,ttx=4,ng-,tg=6,fq=3,nz-,pzl-,lqzvsh=6,vvv-,rf=6,bp-,xntm-,mgk-,kq-,np=9,dhmxrf-,jtv=3,lf=1,rnd=6,jjh-,knzhf=1,jvc=9,jvf=1,krsl-,phn-,hbjl-,gmzd=7,nrh-,lsgj-,rdm-,zmc=4,jvf=8,jf-,jpb=5,sgq=9,scr-,pjq=3,zht=7,lrtd=1,vknrhf-,hpn=7,qhr=3,mx-,mppl=3,mx=1,jt-,ddb-,fq-,zfj=7,xdzl=8,hqq-,mdr-,dcb=7,zmx=8,bpk-,vb-,tdf-,hh=4,phhl=4,lg=2,ztgfc=4,qm=2,nmt=3,nzl-,pdrct=8,glq=1,smn-,xb-,gtd-,dshl=5,hpb=1,gr=8,lch-,qhr-,cjp=4,pcfvv-,kgtl-,rlqrc-,fnn=6,lcvqz-,xtz=9,rnd-,xtf-,sjj-,gtd-,vh-,qz=5,nfrmqc=3,mvf=7,ttr=4,zf=1,xftfd-,hkk-,crg=8,ps-,lfn=6,rdm=3,zh=7,rhsctp=6,vnhnt-,mxsl-,rpj-,dzlgmj-,qxs=5,cx=1,pzhfz-,rjjk=7,rfz=8,jzv=9,lcvqz-,grv-,sgq=4,pskfz-,vk=9,gg=5,ps=7,nfrmqc-,dldzn-,qt=1,zmc=3,jc=9,zdzd=9,btg=4,dcnr=4,jkb-,bdl-,gx=3,kq=3,kcpj-,zrlq=6,xdgq=9,cg=3,qr=6,zp=6,rpj-,dx-,kcvf=7,gr-,qst-,jk-,xz-,ng=3,dr=9,pjq=5,lms-,dsfln=2,gkg-,db=9,rkx-,mqhm=9,gnl-,vhff-,br-,cppk-,gkg=6,frz-,tgsq-,tgzb-,jzv=2,cg-,pztx=1,gnl-,kd-,jcdj-,jtv-,cx-,gr=7,dq-,cn=3,dg-,tcc=1,qcqp=8,pj-,hnrf=8,ml=2,cft=3,mvf-,pskfz-,mhcp-,lfn=8,pcfvv-,mtskcr-,glh-,nlvtt=5,mxcgz-,vjvqc=8,qqvd=8,vh=1,bhj-,nrh-,qg-,ps-,pjq=9,bthp-,gthvfr-,sfg=4,dss=8,hpb-,pv=9,pxtqn-,pz=5,xxg=2,rmf-,dqt-,tcvg-,zsv=1,cvl-,xpt-,jj=9,rfz=2,nc-,nsz=9,sk=1,zln-,hpn-,xntm-,vf-,ztgfc-,sqk=4,hj=1,crg-,kkj-,gt=3,tg-,pxb-,rlqrc-,pngv-,pdh=3,dq-,qg=7,cg=8,cn-,cg=3,jrzs=5,knb-,glh-,phrk=2,sk-,tgzb=3,sgq=6,gkz-,jcd=9,zpgrqr=9,qm=8,fnl=5,sdzm-,gnl-,flj=6,lh=9,dbd=5,mqhm=2,cn=8,fnn=4,kzz-,zn=4,hpb=2,pkkbjt-,zv=5,tdkgk-,jpb-,br-,fx=8,hnx=9,hnnkm=1,dng=1,br-,cppk=2,nlvtt=5,xdzl-,kmsx-,ntq=8,ptzd=8,zht=5,hnd=2,tn=4,phzv=5,qxk-,fq=3,mx=5,blnggt-,kzj-,dqt-,tbt-,thgd=1,cmqpn-,jd-,dbd=1,lrtd=7,qqvd-,tbt-,kfs=5,gpm=8,bh-,xvk=8,rrbhcr-,zvp-,sbh=9,qs=7,hrsf=4,ff-,lf-,fbm-,sm=9,khbsh=2,cft-,kzc-,cxhrzz-,jvf=2,crg=2,pxk=9,nmt-,qffgm=7,qnc-,tgjr=7,fnn-,rhsctp=9,fhf=1,vxjg-,dcr=7,cs=9,fhf-,hnnkm=5,jh=3,bdgknx=2,jvf-,cppk-,grq-,ddb-,jd-,mgv=2,sjhs-,vc-,mqhm-,nbx-,krsl-,fbm-,rgrtpd-,bdgknx-,hh=2,lg-,kkmgj=7,cbdz-,zfj=3,vjvqc-,kkj-,fk-,vctsd=2,lb-,btg-,vc=2,xftfd-,hh-,lms-,pl=8,hp-,qmx=3,vctsd=9,nt=4,pzl-,dcr-,mgv-,rpj=7,vqpn-,gr=4,pl=5,zd=9,szz-,nz=6,ln-,zvz-,kkmgj=7,nmt-,dq=4,sz-,dx-,nzr=4,xkbcj=5,ljqpsl=3,pgff=8,nzr=3,pskfz-,ksjdgv-,fsk-,lv=1,jhg-,pgdt=1,dbd=7,zmp=6,dcnr-,sk=3,rjc-,vjjr=3,qst-,pz-,rc-,fhh-,vc=4,sbk-,xtf-,qcqp-,gtb=5,qz=7,tl=1,mrqs-,cx-,zsz=2,fhm-,br-,dr=3,djpj=3,nfjh-,zrlq-,rtp=5,df=3,kmb-,cs=1,kjh=7,tbt-,pztx=9,lch-,cxhrzz=9,zfgc-,tdf=2,lfn-,zn=8,zmp=6,fbm-,ps=9,tmqh-,gl-,kn-,ttbbm=8,hbf-,pzh-,ddtp-,rkx=5,dbd-,phzv=7,bk=6,ppc-,jcdj-,mdr-,qm-,nzl-,ddx-,jr=6,ffgb=4,nzl-,zj=5,kgtl=6,br-,sjj-,ddb-,kfs=5,plbc=9,sbk-,dzfn=3,jj=6,mzd=8,vk=1,rjcj=5,nfrmqc-,nbx=9,skqr=9,vc=2,kx=5,jp=3,ltf-,gkf=6,rcs-,zqgm-,xkbcj=4,vlkgf-,zln=2,jt-,bhj-,zns-,hpb=6,pjq=4,dldzn=5,hfg=7,kq=2,kgl=9,pztx=2,pdrct=7,knb-,tg=3,cft=3,psdf-,hkk-,vh=7,df-,kd-,lb-,svnm-,xvcgnj-,lg-,pjg-,pjhdd-,flzfs-,xntm=9,kx=6,gthvfr=3,rhsctp=8,bdf=1,lfn-,nzl=6,zpcclb-,hz-,zvz-,lfn=3,dcnr-,qjlv-,ps-,td-,pn=9,nq=6,bmkb-,scr-,phhl-,mgv=5,rzcrg=3,gthvfr-,drx=5,pr=7,kzc-,gkf-,xnp-,cm=2,rrbhcr=2,zht-,gthvfr-,mxcgz-,gt=3,clm-,kfs-,gtd-,pxtqn-,vxp=8,jp=4,bz=2,stqt=1,sjj=1,dzrc=4,fqdh=9,zv-,mtskcr-,hnnkm=7,dbbd-,vlks-,zpgrqr-,kkz=9,dhmxrf=4,vr=5,hpn=2,qs-,rrbhcr=6,btg=8,vfz=2,nd-,ppc-,ng-,pl-,ksjdgv=8,sk=7,dbt=3,vlkgf-,jqg=9,dtg-,bhj-,qcqp-,tpr=6,zqgm-,sk-,hnrf=9,pxb=9,tgsq-,qmt=4,kn-,vb=1,dk-,qb=8,fk=2,djpj=7,mgv=2,lr=5,zzkn-,rjc-,rh=1,xftfd-,djpj-,lg-,rlqrc=9,hnnkm-,hnrf=6,fk-,scr=2,lfn=1,jhg=1,vp=6,pg=3,rcs=5,qjr-,dshl=9,kzz-,flzfs=3,qbbdc=5,gkg=5,cqz=7,xd-,qs-,ttbbm=2,qb-,rpj=8,fpn=1,pzhfz=9,hpb=7,fnn=8,xr-,lpj-,gl-,tdkgk-,crg=8,sm=9,kmb-,gg=1,knzhf=5,sk-,bh=7,ddtp=5,zht-,dng=2,fk=4,xtz-,fhm-,scr-,jbq=9,rhsctp-,zt=1,gpv-,pskfz-,bh-,dss-,tgjr-,vxjg-,gnl-,hrsf-,mx-,vhff=8,ljqpsl=7,nrh-,sbh-,hfg-,zsz-,vj=5,fpn-,ds=7,gkz-,gpv=3,dldzn=7,sbsp=6,zsz-,dss-,kcvf=5,pzhfz=2,sbk-,kl=9,tbt=2,dcnr=3,tcvg=6,psdf=7,szz-,bs-,hnrf=3,nd=2,dnmld=1,zmx=7,vx-,nsbxkk=9,gnl=5,fnz=9,tgzb-,xnp=4,fs=3,gbr=3,bq=2,pgff-,mpnlrx=8,pz=7,kgtl=1,lbs-,grq=4,shx-,kmb-,txp-,vnhnt=6,grv-,mhcp-,ttr=7,pzhfz=3,jpb-,cft=9,jrzs-,txp-,mdcg=9,zx-,glq-,kd-,nsbxkk=6,kzz-,ss-,sqk=2,jf-,jrzs=7,pn=5,stqt-,blnggt=5,pjg-,mm-,pzhfz-,pxk-,zj-,zv-,zl-,mzd-,tl=2,rg-,lsxt=1,nz=1,kcvf=6,mdcg=5,rs-,jrzs=8,cvl-,lb-,vvv=2,lglf-,sbj=1,rc=7,glh=1,phrk-,rk=9,vctsd-,xrr-,qsjf=5,qmt-,vqpn-,fnz-,bpk-,pzh=6,jvfpdj=9,dldzn-,cmqpn=7,jtvm=7,xntm=8,rjcj=6,bxbl-,xb-,drx=4,kgl-,sjj=2,qprbv=9,sv-,nt=3,pxk-,qqvd=2,pgff=9,hbf=6,krsl-,mhcp-,kq=4,rjcj=2,phn=5,cft=6,tqgk-,kkz-,vf=3,gkg=6,qd-,pxk=4,tg=9,qst=1,cn=7,jtvm-,pr=1,frz-,nhknz-,rrbhcr=9,mdcg=9,qhr-,cppk=8,knnx=4,thgd=9,gpm-,xcsgs=9,fq=3,qt-,rgt-,glh=6,dzlgmj=5,kkz-,dg-,qbbdc-,ztgfc-,zsz-,xk=2,bhj-,gmzd=8,skg=8,kr-,gthvfr-,nlvtt-,tq=2,jp-,drx-,nfjh-,kh=8,sbh=5,hnd=3,kgl=9,krsl=6,pz=5,zf-,kr-,pzl=4,vctsd=4,xntm-,qg=5,lpj-,dbbd-,szz-,br=9,sm=4,kjh=7,ss=8,cvl=7,ttbbm=6,ln-,lsxt-,rnd-,xcsgs-,rzdpq=2,grq=5,nlvtt-,nrl=7,xcsgs-,pgdt-,lgv=3,fdxl=1,vxp-,mppl-,zbqdr-,rg=5,plbc-,pm-,tdgls=5,zrlq=6,gr-,nsbxkk=7,rgrtpd=7,rn=3,hfg=1,mz=2,ttbbm=6,mppl-,zl-,zns-,lv-,vjvqc=5,dqt=5,hz-,nlgt-,tgsq-,pxk=1,bp-,bz=2,nz-,kcpj-,gtd-,vvv-,lfn=6,bdl=4,drx-,lr-,vmm-,rgrtpd=9,zv=5,nmt-,pm-,mgk-,hp=6,gr-,tqgk-,jxfcr=6,vx=7,kmsx-,zzkn=9,bdl=4,lch-,mg-,dx-,qjr-,xntm=1,xvk-,kgl-,hz-,tdf=1,kzc-,zj=1,phhl=7,lb-,nzl-,lglf-,bdl=9,tl=3,xl-,lch=6,phn=8,knl-,zc-,kl=5,vjjr=2,xvcgnj=6,pl-,hbjl-,cbdz-,vpt=8,rtp=7,pgff-,jqg-,xnh-,nq-,tx-,ddb=8,dx=1,qmt=7,dr=9,ffgb-,zx=6,dhmxrf=9,kkz=2,rpznm=3,phzv=2,kg-,hz=4,cm-,mx-,zrlq-,nsbxkk-,hnnkm=2,nzr=2,dzlgmj-,vjvqc=6,flzfs=2,jvfpdj-,qsjf=4,tcc-,vh=4,qvv-,zqgm-,fxdkd=6,nfjh=5,dctk-,tmqh=9,ptzd-,ltf=8,dbbd=6,ffz-,lqzvsh=5,mppl=3,pxb=9,crg=8,tgjr-,hnd-,pr=1,cz=3,hh-,ptcr=3,dcb-,hbf=4,cqz=8,jcd=7,plbc=2,gkz=6,mrqs-,dhmxrf-,pbxjx-,nb=5,zmp-,pgdt=2,zl-,sjhs=1,mx=4,fdxl-,nzr-,fqdh-,rcs=2,ltf=3,xjks-,nsg=5,rzcrg-,zm-,ddb-,nrh=1,zt=5,glh=9,pzhfz=3,kzj-,rjjk-,lhm-,dsf=7,dszd=5,cz-,th=8,jkb-,cvl=7,rkx=1,hqq-,mrqs-,db-,cbdz-,dsfln=4,cmqpn=9,qpj-,tbt=6,qx-,rzcrg=7,jt=3,shx-,kmb-,jf-,pxtqn-,krsl-,pxk=9,nrh-,tcvg=6,nfjh-,lcvqz=5,knl=1,sm-,kq=2,jptch-,hpn-,nlgt-,jxfcr-,mr=4,jz=5,ps-,gt-,jkb=5,sgq-,qxk=7,pxb-,phrk=3,vqpn-,dhmxrf-,fsbr=3,hnrf=6,qmt=3,rk-,nsbxkk-,gmzd-,jvfpdj=5,zh-,td=3,vc=4,gksbz=3,tg-,bhj=9,mvs-,pzhfz=9,vpt=3,fxdkd-,rlqrc=9,jpb-,hnnkm-,nnfd-,jr-,zbqdr=7,ng-,xtz=5,nfrmqc-,phhl-,rjcj-,rjc=7,ddx-,cppk-,dzlgmj-,cxhrzz=4,rtp-,rpznm=6,mxcgz-,zvz-,ppc-,sgq=3,jjh=2,gnl=8,ksjdgv-,nrh-,gg-,kcpj-,mgv-,cxhrzz=7,pskfz-,dcb-,xd=5,bl-,zh-,jt=4,rcs-,sbsp=3,nkh=8,gmzd-,kgl=7,xnh=5,vnhnt=2,lms-,qxk-,scr-,qg=9,jcpz-,gx=2,znkzq-,rf=4,jvfpdj-,dtg-,gthvfr-,dctk-,bd-,vlkgf=8,svnm-,jpb=6,lbs=6,hkk=9,xvcgnj-,mpnlrx-,jp=6,rfz=2,kfs=6,ddx=6,bz-,xjks=4,xv=1,jr-,jvc=6,sbnh-,nq=6,pn-,bl-,ln=2,mpnlrx-,th=4,mrqs-,zl-,kzc=1,fqdh-,ttx-,ttx=5,xqph=7,xtf=3,xftfd-,hpn-,sv-,gkf=2,zf=5,lcvqz=1,pzhfz-,pzh-,sm-,bk=2,vctsd-,lqzvsh-,jt=1,pkkbjt=1,kfs=6,gpv-,svnm=9,blxnc=8,vtc=5,gtd=5,lfn-,vb=1,dtg-,vvv-,sm=3,vp-,hrsf=6,zx-,bq-,kg=3,mb-,kcvf-,zfj-,hfg=5,mb-,tqgk-,bgv=7,ds=2,dcnr-,fbm=3,tn-,xh-,zvp-,pgff-,jd=9,knnx=8,bhj=7,vtc=7,tq=7,tkh-,gtb=3,zns-,zpgrqr-,zpgrqr=2,djq-,td-,ff=5,dzfn=9,qxk-,cz-,khq-,qd-,knzhf-,zbqdr=4,gthvfr-,kcpj-,krsl=3,hj=6,bdf-,zpcclb-,dss=7,tdgls-,lch=6,tmqh=5,rjjk-,djp-,xh-,tl-,jzv-,bk=3,qprbv-,ksjdgv-,szz-,zrlq-,qm=4,tx=2,zfgc-,zfj=1,kjh=2,vvk-,fhh=2,ks=8,dqt-,lms=2,tdkgk=6,nd=5,xz=2,jcd=8,nsbxkk=3,phrk-,mtskcr-,qpd=4,stqt=3,zmp-,tdkgk=6,tbt=9,ss-,bl-,qxk=4,vk-,zvz-,qm-,jd-,zfj=2,fx=4,zzkn-,jz=4,cft-,jv-,fnl-,khq-,jz-,qcm=4,fsbr-,pngv-,ttbbm=4,cppdg-,mr=9,xv=6,kh-,ds=6,rlqrc-,jqg-,knnx-,cn-,rmf=3,mx=4,phrk-,zl=1,mvs=1,vpj-,tg=6,nd-,nlvtt=1,lpj=5,gpm-,qmt=4,ks-,qqvd-,dg-,tdf-,zdzd=4,fnn=2,sjj-,ddb=7,ds=2,nsg-,rdm-,kgl=1,rg-,glh-,nb=4,rjjk-,dnbvds=4,xxg-,dshl=6,tg-,ch=3,qd-,qcm=5,nt=8,bdf-,mppl=5,zbqdr-,df-,lgv-,zh=7,rc=7,rn-,tdkgk=3,qz=4,mgk-,pzh=5,sm=4,ptzd-,bxbl-,nkh-,fqdh-,pgdt=1,rkx=3,xz=9,zd-,kx-,mx-,zh-,kl=8,rn=1,dcnr-,gg=9,ffz=2,lpj=9,zpcclb-,zp-,cppdg=6,gkg=9,hqq-,kx-,hnnkm=3,stqt-,cft-,bl-,xrr=7,skqr=7,skg-,kd-,jcdj=2,mg=9,jvc=2,glq=1,fhf=4,nb=2,qmt-,rf=7,knnx-,xb=2,zbqdr-,fsbr-,nfx=8,ps=7,dbd=3,rgt=7,xvk-,xtz=3,lsxt-,bk=9,tdkgk-,pkkbjt-,hnnkm-,ch-,khbsh=1,ff-,phzv-,fnn-,tmnjxl-,mgk-,tg=8,kmb-,knb=9,qxk-,kvlmn=8,zx-,qg-,hk=6,hnd=8,lqzvsh-,nrh=3,tgjr=9,kzj=5,vjvqc=6,hrsf=3,kvlmn-,hbf-,jtv-,ksjdgv=3,zx-,ddtp-,lrtd-,cxbn=6,phzv=3,qsjf=4,ll=2,zmx-,jr=1,xnh=8,bh-,ccd-,vpt=3,mb=9,pg=7,dcr=7,lch-,kr-,bz-,qc=4,grv=7,krsl=7,hnd-,dbsvh-,xsm=2,gnl-,xh=5,hnx=7,vnhnt-,cppk-,rnd=1,smn-,zmx=4,ljqpsl-,lgv-,dbt=3,nmt-,fk-,zb=1,mzd=9,pz=4,mzd-,mpnlrx-,mx-,vfz=9,blxnc=3,pjhdd-,ddtp-,sdzm-,fsk=6,cg=2,fxdkd=4,fp-,ln=5,qd-,cn=9,sf-,lg=1,mqhm-,glq=4,kmsx-,ddx-,bdgknx-,grq=1,pbxjx-,qxk=7,gkg=2,rjjk-,shx=1,flj=6,tgjr-,dhmxrf=4,dldzn=5,qst=7,gl=7,qd-,fpn-,pkkbjt-,zfgc=5,pm=9,plbc-,xsm=9,db=7,cgd=5,bdl=8,mx=7,mn-,kgl=3,jkb-,lsxt-,khq-,cn=7,jtv=1,dbt-,tdgls-,cs=1,mppl=4,bd=1,cjp=9,kcpj=5,hbqx-,zvp=4,ds=3,tbt=2,jhg-,xsm=9,rlqrc=3,blxnc-,kcvf=3,dsfln=3,vvv-,tx=3,pj-,sbk-,jptch=5,br=8,vbs-,drx=7,bl-,qr-,dtg=6,kkj=4,grv=5,lpj-,vxp-,lh=8,jpb-,xtf-,zb-,blnggt-,cs=8,bgv=6,vhff=8,pxtqn-,znkzq-,qst=4,jr=9,dzrc-,skqr-,db=8,nd-,xcsgs-,hk=5,hnrf-,zzkn=9,glh-,tgsq-,cxhrzz-,xz=6,rnd=1,grq=5,ttx=6,jpb-,mvs-,zx-,rgt-,cbdz-,phzv=7,cxbn-,glh-,xsm-,dq=6,dtg=4,jtv-,pzh-,pzl-,df=7,rg-,mrqs=6,dsf-,fnz=2,qmx-,jpb=8,gpm=6,kgtl-,pxtqn-,gx=5,dtg=5,rn=4,dtg-,lglf=3,jzv=1,jp=8,rjcj-,qc-,zh-,rkx=1,kcvf=8,hnnkm-,pgdt=5,qsp=5,txp-,nzr-,hfg-,mn-,hnrf=7,knzhf=9,jtv-,qbbdc-,knzhf=1,cqz-,fj=5,qcm=4,xvcgnj-,jc=4,cqz=5,qhf=8,zn=5,pskfz-,ll=4,pj=3,fq=5,gm-,cxhrzz=2,ks-,nbx=6,kcpj=8,kg=4,bl-,qpd-,skqr=7,xr-,vf-,fdxl-,pgdt=9,ppc-,bmkb-,tc=7,mm=3,pxtqn=6,ll-,nsg-,mqvc=8,xl=1,lv-,phzv=4,nhknz-,fn=4,pcfvv-,db=2,fhm=9,bthp=2,kgtl=5,dq-,nmt-,ljqpsl=1,cpsh-,dx-,zrlq-,cft-,cjp=4,rk=3,fsbr=5,btg-,jzv=9,zzkn-,sbh-,jz=4,rdm=2,qsp=1,gksbz-,zn-,vj-,btg=3,dcb-,fn-,jqg-,qm-,fqdh-,pjg-,rs-,gg=5,smn-,vpj=3,pv=7,cmqpn=4,xkbcj-,hpn=3,grq=6,jz=2,mdr-,dr=9,sqk-,rlqrc=2,xvk-,rkx-,nc=6,qcqp=9,vqpn=3,jk=3,cpsh-,zbqdr-,lglf-,zx=9,ps-,rlqrc=6,dk-,rjc=3,nz-,hk-,zpgrqr-,rgt-,xtf-,pskfz-,zqgm=9,ttx-,cs=8,sbsp=5,pzh=5,lcvqz-,ffz-,jvf=8,pskfz=8,ml-,cx=1,kzc-,qm=5,nq=8,ntq-,zmp-,lv=2,mzd=5,lhm-,qs-,dqt=5,dctk-,rhsctp-,zn-,hrsf-,nfjh=8,dzlgmj=9,mx=3,djpj-,rrbhcr-,rcgd-,bz=6,jhg=6,zv-,kmsx-,tbt=1,mz-,ztgfc=1,rf-,knb=2,qz=5,btg=1,ntq=4,cs=4,rpj=3,tpr=7,tcvg-,zdzd=7,pjhdd-,pj-,hnx-,zn-,xft=2,zh=1,fnn-,xnh=2,cbdz-,fhf=4,ddtp=8,kmb-,fpn-,pjhdd-,fj=6,jbq=8,rnd-,dq-,lqzvsh=6,gf=6,tgzb-,zbqdr=7,hp-,sbqr=2,fbm=3,pzhfz=9,dss=3,rdm=6,lf-,ztgfc-,tgzb=8,jtv=3,pskfz-,flzfs-,xftfd-,cg=7,bdf-,bp=7,qnc-,bhj-,rcgd=7,zfgql-,tx-,dszd=2,xpt=5,kfs=8,csph-,jbq-,flzfs-,ldb=5,dszd=2,kg=1,br=3,mdr-,pcfvv-,tfjz=9,blxnc-,tg=7,knb=5,knnx=9,nsbxkk-,mxcgz-,dss-,bl-,pdrct-,tgsq-,phn=2,bthp=5,mzd-,cxbn-,mrqc=6,jcdj-,vknrhf-,sv-,djpj=6,jcpz=3,zmx-,zdzd=9,phzv=4,ml=8,ptcr=2,hpn=4,rtp-,gbr-,vpt-,tc-,xpt-,pxtqn=5,phn-,lsgj-,lh=8,pn-,vfz=2,kvlmn-,pdh-,xdzl-,tpr=1,rjcj=1,cvl-,zh=6,blnggt-,kgl=1,fj-,xb-,sm-,cmqpn=8,mppl-,ltf=9,zf=9,mrqc=1,dss=1,gpm=5,dcr-,mqhm=9,jjh=5,jv-,jrzs=4,fs=5,zfj-,vpt-,zj-,mxsl-,lch-,rh-,fp-,zrlq=6,tq-,plbc-,zsz-,csph=2,cpsh-,kmb-,djpj-,flzfs-,pxtqn-,hz-,khbsh-,lhm-,jc-,cfzkr-,cxbn-,rlqrc-,cjp-,ppc-,vjjr=6,lcvqz=1,db=1,nbx=5,sbqr-,kkmgj-,xb=7,cxhrzz=6,lsgj=3,fs-,vc=6,gm-,ttr-,zmx-,grq=7,zh-,zbqdr-,xnh=3,lrtd-,pl=5,zht-,xl-,xh-,pzhfz=7,bq=8,szz-,dk-,jtv-,pxb=2,xtf=9,lpj=2,nnfd-,cppk-,mzd=9,knl=2,blxnc-,gbr=8,dq-,zt=7,jv-,vb-,fhm-,skg-,tdkgk=7,zmx=5,gkg=2,vc=6,mgk=2,dzlgmj-,bmkb-,pgdt=1,zsz=8,zfgql=9,flj-,mppl=9,vnhnt-,cpsh-,qcm=4,kzz=4,sdzm-,knb=9,zfgc=7,mb=3,ddtp-,nmt=7,dnbvds-,csph=5,dsf=9,gr=8,rdm=1,bdgknx-,xkbcj=2,cn-,pn-,bz=3,cppdg-,xd=6,psdf=6,nsbxkk=3,fp-,ksjdgv=1,mzd=6,zfgql=4,zpgrqr-,cmqpn=6,xk-,bs-,ddb=1,zp=4,tmqh-,xk=7,xft-,zt=3,xd-,hkk-,lrtd=6,dk=4,zc=5,nnfd=8,bs-,rjjk=3,fqdh=4,tx=3,qxs-,nsg-,tgjr=5,tcvg=6,gf-,blnggt=9,dbsvh=4,qprbv=3,kzc-,zpcclb-,bgv=7,ksjdgv-,xcsgs-,pkkbjt-,glh=7,xtf=6,rzdpq-,qx=6,lch=9,hz-,bhj=2,ntq=6,zf=2,qxk=6,zv=2,vr-,lr-,xcsgs-,mg=4,zv=9,vd-,fbm-,kkj-,vvv=1,pbxjx-,pv-,qjlv=4,dss-,mm-,ttx-,ng-,tqgk=4,fxdkd=9,rk=2,khq-,zqgm=7,drx=4,gmzd=1,qg=1,sbh=6,cvl=3,bmkb=7,dnbvds-,bxn-,zbqdr-,phn-,qjlv-,jvc-,qsp-,fdxl=4,tcc=1,zm-,nsz=5,rs=8,gf=9,lg=8,kg-,vvv=1,db-,tdgls-,kgtl=6,tg-,qmx-,flzfs-,zx=8,gr=6,nhknz-,ntq=7,lqzvsh-,xv=7,rjjk=8,cppk=1,xtz=4,dqt=5,qbbdc=5,qqvd-,xvcgnj-,rhsctp=5,zv-,np-,xv=8,mxcgz=9,xqph-,gbr-,qs=2,rs=9,ff=2,ttbbm-,jt=8,xdzl=6,sbk=3,pjhdd=9,lch-,xdzl-,lg-,tcc-,fsbr=5,tfjz-,qjr=9,sjhs-,zx-,bgv=7,rlqrc-,jz=9,ln-,xsm=6,dsf=3,qpj=3,ztgfc-,hpb=7,bhj-,pxk=9,pngv=5,zl-,lch-,vk-,pcfvv=6,lv=8,vlkgf=7,hlrdnn=9,sgq=2,vtc-,kfs-,mrqc=9,cx=1,hbf-,cvl=5,jcdj=6,lqzvsh=7,hnd=5,lfn-,qcm-,fhh-,jxfcr=4,qd=9,fhm-,ff-,tn=8,kn=8,mdr-,ffz=1,bk-,xftfd=5,jvfpdj=5,ffgb=7,ng-,jj-,gl=4,ff=3,knnx-,flzfs=1,ltf=7,bz-,fs=8,vd-,dqt=8,grv-,bl=5,zp=5,vj=4,pkkbjt-,pr-,bh-,hpb=4,djpj=2,dnbvds=8,pcfvv-,jzv-,lms-,xrr-,lsgj=7,tdkgk=2,lsgj-,bl=7,zh-,jr=3,rdm=9,vxjg-,xnh-,rmf-,kx-,jf-,jrzs=4,jd=1,mn=8,flj=2,vh-,jvc=8,csph-,gkf-,cqp-,kgtl-,cs-,ddtp-,zmp=1,dldzn=6,gksbz=2,rs-,rc-,kkz-,kjh=2,cm-,vpj-,vnhnt=5,ffgb=8,rf-,skqr-,jhg=8,xrr=5,zmc=7,ffz=4,pzhfz=6,pv=1,nnfd-,cppk-,lsxt=4,cgd=1,qcqp=7,fnz-,ptzd=4,knb=6,sqk-,vf-,bdf=6,nkh-,kl-,crg-,fn=3,flzfs=2,pbxjx=8,zmc-,fk=2,jt-,vx-,krsl=1,smn=7,qg-,ljqpsl-,xd-,cs-,ztgfc-,cm-,knnx=5,nz-,bdl=6,jr=9,lv=5,rtp=6,lch-,jkb-,sqk-,pzhfz=4,nrh=1,nnfd-,dcr-,dnmld-,mm=3,vfz=1,zht=1,xvcgnj-,cxhrzz=5,blnggt-,tqgk-,dnbvds-,zvz-,pr-,dzfn-,vlks-,mr=2,fk=2,qxk=8,cvl-,fx=7,plbc-,plbc-,qxs-,zm-,tdkgk=9,bdf=4,kq-,sjj-,zd=2,hnx=5,pzhfz-,zp-,ntq-,crg-,plbc=1,xrr=9,mqhm-,rc-,ltf=7,pgdt=1,kq-,fsbr=4,vpj-,jh=9,nsbxkk-,shx-,vxjg-,dqt-,pngv-,txp-,kq-,fq=1,jr-,ss=9,plbc=2,mxcgz-,rfz=3,zpgrqr-,zmx=4,jt=1,kr-,tgsq=5,fhm=9,nlvtt=9,hnnkm-,qhr=6,skqr=8,vvv=5,xh=2,gpv=5,rhsctp-,vx=6,xntm-,psdf=7,sbsp-,zn=2,ntq=1,zfgc-,zn-,tg=8,qxk=7,dldzn=4,cx=6,kn=8,lsgj=7,kzj-,lsgj-,np-,xh=2,mgk=3,gthvfr=3,djpj=4,zsv=7,zl-,kmsx=2,sv-,lglf=9,qd-,fq=4,ch-,xl=6,qxk-,cm=9,cbdz=2,zp=9,xb=7,kx-,ptzd=3,pztx=3,sbsp=2,dg=5,lf=6,xv=7,qb-,lglf-,ln-,bh-,mgk-,pzh-,tbt=7,xvcgnj=5,vfz=5,tl-,nzr-,dszd=3,nzl=3,qcqp=4,np-,qffgm=5,gl-,krsl=4,cqp-,fpn-,vmm=1,fnl-,jp-,nlgt-,ddtp-,xb=8,qqvd=1,jz-,cbdz-,jvfpdj=5,kkj-,zfj-,kgtl=3,psdf=7,vctsd-,dss=2,dbd=9,fnn=5,cppdg=7,rzdpq=3,dzlgmj-,nzr-,ljqpsl=3,fhh=5,mbn=9,rrbhcr-,lms=4,qqvd-,ttr-,mr-,bthp=5,jd=9,jjh=5,gg-,jvfpdj=9,jkb=7,zm-,qmx=4,xpt=9,pz=6,zj-,psdf=6,sf-,nsz-,zqgm-,xjks=9,xvk-,gg-,xpt=9,lqzvsh-,djpj=9,vjvqc=4,qsjf=7,ff=5,jjh-,lhm-,mdcg=2,grv=8,vnhnt-,cfzkr-,phhl=4,tg-,dk=9,mhcp=1,vb-,jt-,zm-,mm-,gt-,nt=1,ng-,mz-,qnc-,ntq-,mgv-,jhg=3,bxbl=7,nzl=3,ldb=7,blnggt=3,fn=5,khbsh=5,kx-,pv-,nsg-,rdm-,mgv-,pkkbjt-,glq-,lgv=9,hbjl-,qxk-,vjjr=7,qvv=7,sbnh=2,gg-,zsv-,rf-,jzv=9,nrl-,zpcclb-,qhr-,kn=2,hnnkm=3,zmc=4,qprbv=8,pgdt-,zbqdr-,bthp-,rhsctp-,djq=9,lhm=9,shx=2,qcm=3,phrk=4,hnd=6,pgdt=5,dx-,phhl-,fnl=5,dshl-,mxcgz=1,dx=9,cxhrzz=2,skg-,tfjz-,qmt-,sv-,zp-,lfn=4,mz=2,jhg=2,rc-,df-,ztgfc=5,gpv=5,kl-,lv=3,qg-,csph-,mpnlrx-,sm=2,tgzb-,bdf-,vf=8,kzz=4,ds=1,vjjr=2,kfs-,zf-,dx-,pn-,phhl=2,zsv=6,cqp-,jbq=1,ff-,pxtqn=8,nfx=5,knzhf=8,rh-,flj=5,ffz=4,dq-,ccd=9,mdcg=9,gkf=9,xdzl=9,nq=9,jp=8,gr=4,vh-,tx-,xv=6,nzr=5,pbxjx-,xz=5,tgzb=8,dzrc=9,ttbbm=2,gl=2,vc-,ttx-,qbbdc-,dtg-,ppc=1,mqhm=4,gpm-,mr-,sbsp=9,cm=3,djp-,lms-,pjq=1,mtskcr=8,qmx-,zzkn-,gkz=9,fn=9,sbnh=2,vnhnt-,bs=7,gr-,mvs=1,djpj=1,vlkgf-,rnd=4,jtvm-,cgd=8,lrtd=6,dtg=2,vb-,hk=1,xb=8,nfrmqc-,jjh=4,vctsd-,ks-,dldzn=9,fk-,vx=8,lms-,txp-,tdf-,vk=9,dvq-,mx=8,jv=6,ffz=2,qpd-,blnggt-,kn-,vk-,sbqr=3,lglf=5,rnd-,pm-,djp=9,djpj=4,dqt-,dshl=6,lbs-,jvc=5,hfg-,bthp=7,kgl=5,pskfz-,qhr-,lv=2,ttx=2,ttr=7,zmc-,skg-,kx=2,phn=1,pjg-,tq-,xqph-,fxdkd-,cmqpn-,sbj=9,dcb-,pm=3,dhmxrf-,qsp=9,cfzkr=9,bxbl-,scr-,hk-,smn=1,qc-,txp-,gksbz-,bdgknx-,jhg=5,djp=4,xftfd=9,db-,lr-,zpcclb=4,ml=2,cqz=5,hj-,ksjdgv=7,pm=3,rjcj-,crg=1,cfzkr-,kx-,cxbn=3,dtg=7,zh-,lqzvsh=2,pgdt=8,hkk=8,jd-,pjg=8,hnx-,vf-,tgjr-,cxhrzz-,scr-,xb-,ffz=7,lgv=7,jbq=9,tdgls-,br-,sjhs=8,nrh-,nd=2,pgff-,mzd-,kn-,fx-,svnm=9,kh=5,mxsl=9,cft-,nhknz-,tqgk=4,kkz-,kkmgj-,xxg=1,rrbhcr-,jpb-,ffgb=4,kg-,bmkb=2,knl=4,dsf-,jp=4,df-,gf-,kzz=6,ddb=8,pn-,qc-,pj-,xl=5,xvcgnj-,pxb-,vjjr=7,vnhnt=3,kn-,jf-,tc=2,rgrtpd=7,xvcgnj-,fpn=8,blnggt=5,cg-,lg-,xntm=7,ss-,dldzn=5,bdf-,qt=5,kkj=3,hp-,jr=2,gf-,kgtl-,fhf-,fxdkd=4,blxnc-,nlvtt=4,ff-,mzd-,kmsx=7,lsgj=2,cg=7,vqpn=9,psdf-,hlrdnn=8,np-,vlks=3,lqzvsh-,qc=4,tn-,svnm-,zf-,xqph=9,tpr-,df=4,cppk-,psdf=7,dsf-,kmsx=5,tg-,vxjg-,gmzd=6,qm-,nrl-,pkkbjt=8,fs=4,vc-,qpd=7,jhg-,pgff=7,vx-,nt=7,dcb-,vmm-,zvz=5,frz-,mvf=9,fbm-,ffz=7,tfjz-,zfj=5,pv=7,sdzm-,bdf-,dcr=6,vbs-,hkk=7,ln=7,kkj-,qcm-,fsk-,qmx-,rcgd-,jc=3,qx-,bdgknx=3,phrk-,br-,nd-,dnmld=5,ch=2,hpn=9,bthp=3,lsgj-,zvp-,hnd=9,vlkgf=9,jt=4,tl-,vmm=1,qbbdc-,tg-,zsz=5,sqk-,jc=7,kg-,pj=4,nrh-,phzv-,hrsf=3,zln-,rpj=8,xxg-,vfz=9,kkz=2,mtskcr-,qbbdc=4,pztx-,rzcrg=4,kzz-,fhh-,ptcr-,kzc=4,qch-,tq=6,pkkbjt=6,nkh-,plbc-,jj-,xpt=6,thgd-,qjlv=9,fsbr=2,bdf-,jxfcr=8,mgv-,dqt-,tq=8,fq-,xrr=3,mhcp=1,nfjh=6,bdl-,hpb=5,dctk=8,dshl=1,hnx=4,ppc=2,jz=2,ps-,zrlq=5,fs-,sbsp=6,pg-,jhg=4,sbj=7,qg-,pjq=3,dldzn=1,zd-,rpj-,ttx-,blnggt-,mgk-,xk=6,pz=2,kcpj=8,dcb-,skg-,rh-,sz-,cfzkr-,rgt=8,nz-,hbf-,vc=1,vk=5,fs-,xdzl-,btg=1,zrlq=8,jzv-,qg-,xl-,pjq-,krsl-,ttr=3,mxcgz=9,rlqrc=7,zj-,szz-,ss=6,zp=8,sbqr-,rtp=3,jj=8,lrtd-,dg=5,nlgt=6,dcr-,dzlgmj=8,pngv-,kq-,lgv-,lrtd-,zmp-,lsgj-,tc=5,vqpn-,td-,lh-,dcnr-,xd=2,shx-,ddm=8,vvv-,pxk=4,nkh=8,ljqpsl-,dbt-,ff=5,ng-,sbh=2,nq-,pdrct=7,qxk-,tcvg=6,rs=4,qm-,mrqc-,vbs-,zsz-,sbj-,cppk-,rkx=6,rs-,vpj-,ldb-,hnrf=7,qst=8,qhf-,bxbl-,jpb=5,zqgm=6,tgsq-,gpv=3,tl=8,fpn=7,blxnc=7,xvk=7,ps-,xd-,qr-,tgjr=4,pjhdd-,jv-,rkx-,vvv-,cppdg-,kzz-,xtf=2,vvv-,dng-,cxhrzz-,xxg-,tcvg-,zmx-,sbnh-,rmf-,vpj-,tgsq=4,bk=7,kkj-,vvv=8,hnx=2,xft=8,nsz=4,hbf=7,fsk=7,lgv-,xdgq=3,clm=1,phn=8,gpv=4,zm-,pzh=6,bxbl-,lqzvsh-,vlks-,vp=4,mrqs=6,nnfd=6,mxsl-,vr=7,fj-,ltf=8,kzc-,vfz-,lms-,pxtqn-,mb-,rk=7,cft-,kjh-,gmzd=6,rzdpq-,ptcr=8,dzrc=6,zn-,pm-,xvk-,cx=4,rn=3,vctsd-,qz=9,fn-,zh-,pg-,cz-,xntm-,vlks-,lcvqz-,sdzm-,cgd=6,tbt=5,ffz-,bhj=9,qjlv=5,sv-,nc=8,qr=3,lms-,khq-,ffz-,ln-,kcvf-,zrlq=6,lsgj=7,zf=8,vr=5,bxn=6,rtp=4,fdxl-,cxbn=5,mrqc-,qpd-,fk-,qqvd=2,djq=7,bk=8,qch-,jcd=7,ptcr=4,rcs-,qhf-,sgq-,bpk-,fq-,dcb-,rpj=9,tmnjxl=7,vtc=3,zrlq-,mgv=4,jkb=4,cvl-,kq-,ttbbm=1,kzc=8,dbd=3,lch-,ks-,blxnc=7,vp=3,pm=7,jpb-,tkh=8,fxdkd=8,dzrc-,qxk=3,jkb=8,cx-,dvq-,ztgfc-,sbk-,mr=8,kg-,txp-,xnh=4,jxfcr-,qm-,tl=1,vmm-,mrqs=7,mn-,lpj-,nrh-,qcm-,xz-,xft=1,kcpj-,phzv=7,kmb-,zt-,mgv=2,dcnr-,zpcclb=9,kgl=4,rhsctp=6,lrtd=5,ccd=3,dhmxrf-,qqvd=1,mppl=9,ff-,mrqs=1,ttx=6,hp=7,kgtl-,qhr=5,kjh-,qnc=2,vr=8,fx=7,rmf-,tcvg-,gtb=2,gnl=3,ddtp=9,th=1,hp-,zbqdr=6,nnfd=3,rfz-,xsm-,bpk=7,sgq-,hkk-,ttr=5,ppc-,vjvqc-,zht-,dcb-,rhsctp=7,kh-,jxfcr-,mgk-,cjp-,djpj=7,gkg=5,rjcj=5,mqvc-,zns-,lqzvsh=3,ppc=3,sm=8,jr-,jqg=5,sjhs-,ptzd-,hnd=5,pz=1,tmqh-,kmsx-,pxtqn-,phzv=6,krsl-,mrqs-,dcr-,dss=5,jt-,xh-,rcs=4,gpv-,pz-,ttbbm=8,mn=7,jjh-,qst=1,vk=6,gtb=4,pngv-,hj-,kr=6,hpb=3,dzlgmj=6,zfgc-,mx-,dctk=9,ttx-,nz=9,gkg=9,ddx=8,mpnlrx-,ntq-,vjjr=1,nfjh=2,tmqh-,hqq-,fj=6,fn-,kg-,svnm=3,gbr-,xvk=7,qz=6,zsv=1,hnd-,rzdpq=4,bhj=9,cmqpn=8,tgjr-,jd=2,djq-,glh=1,mr-,qsp=5,gt=7,vvv-,gf=4,kcvf=3,cft=7,glh-,lglf=4,lfn-,ddx-,kcvf=6,tbt-,kh-,gbr-,zt-,kcpj-,gl=1,kkj-,cbdz-,mg=2,dzrc-,hfg-,qbbdc=2,ddm=7,rrbhcr=3,tgzb=5,hpb=8,nq-,xd=9,nkh=8,nbx-,ttr=3,hk-,nhknz=2,lpj-,zd=8,jqg-,dtg-,br=1,vr-,vr=6,kh-,ddm-,sjj=4,mxcgz-,qprbv-,zb=2,pjg=7,dg-,khq=6,csph-,jbq-,cvl=9,tpr=8,fpn-,nfx-,vj=4,rkx=9,lglf=9,ttr=3,nrl-,gl-,xtz=5,znkzq-,nb-,vc-,dss-,zqgm-,pzl-,vx=7,tg=9,tq=6,mr=1,ttx=7,ds=7,gr=1,xjks-,vk=5,qpd-,ps=1,th-,rzcrg-,kkj-,kl-,vr-,ljqpsl=6,cgd=1,zbqdr=1,mr=9,pzhfz-,fhf-,sbqr=3,fp=2,mxsl=5,lfn=7,tc=8,qs-,kcpj=3,sgq=2,phzv-,mzd=2,gf=7,vfz-,vxp-,gnl=7,tgzb-,pzl-,fnz=2,qpd=6,lgv-,qc=6,lg-,cm=3,vlks=4,nfjh-,mgv-,jptch=7,mn-,dshl=4,jvc=8,dk=6,tx=5,zqgm=6,sk=9,nd=4,stqt=8,cxbn=3,dszd-,zvz-,kl-,xkbcj=7,gtb-,jc-,vh-,pjhdd=8,knnx=8,tgzb=5,xdzl-,jxfcr-,rn=4,gt=8,hqq-,pztx=3,nzr=6,mvf-,dbt=9,mrqs=3,lhm=7,pbxjx-,rgrtpd=2,bgv=1,jqg-,kkz=5,vpt=5,gkg=2,ds=4,rjc-,dng=9,qhf=8,fsbr=6,vctsd-,hpb=1,kmsx=7,jkb-,qz=8,fk=6,cppdg-,xvcgnj=2,kl-,bp=6,rjc=6,qqvd=9,rgrtpd=8,plbc-,pkkbjt=8,hpn-,jhg-,ln=2,ttr=3,zns-,sbnh-,tc=9,fdxl=6,xntm-,sm=5,vctsd=8,jf=9,vc=1,dsfln-,fq-,gx=5,qmx-,dhmxrf-,ks=8,ff=9,hfg=9,mgk=8,xkbcj-,qpj-,pzhfz-,dzrc=2,cgd=6,rcgd-,flj-,tgsq-,pn-,rkx=7,gbr-,fhf-,ln=3,vvv=1,sfg=5,pskfz=6,cx=6,mb=1,tn-,cs-,grv-,hj-,fbm-,ddm=8,cppk=8,vctsd=3,qsjf-,dzrc=6,znkzq-,ccd=3,mbn=9,hrsf=4,fn-,cfzkr-,tfjz=9,pgff=7,tcvg-,hnrf-,krsl-,jbq=3,gr-,cg=5,jjh=4,dsfln-,fj=9,vf=9,xjks=5,lch-,fp=2,vd-,gr=9,fs-,xr-,qsjf-,cz-,qjr=8,fn=2,sjhs-,gf=7,dqt=1,xsm=5,gkz=6,bs-,bhj-,zp-,nrh-,xv=8,lrtd-,ttr=2,jqg-,hpb=9,bz=9,rjjk-,mb-,zmp-,mrqc-,ccd-,jt=2,fdxl-,jd=6,jqg=7,gmzd-,pztx-,lcvqz=7,rkx-,cfzkr-,xz=4,zns-,hpb=2,ttr-,cft-,skqr-,mzd-,nrl=5,qffgm-,vp=4,gg=3,bhj-,pdh-,vhff=6,mgk=5,vvk=2,lgv=2,bhj=4,lgv=9,cjp-,pskfz-,nfjh=8,nnfd=2,glq=4,kfs=8,qt-,pzl-,rc-,sqk=7,dshl=1,ffgb-,fsk=9,stqt=4,vmm-,rzcrg=5,nfrmqc=1,bs-,pbxjx-,fk-,vlkgf-,qsp-,sqk=3,mtskcr=1,rlqrc=5,rtp-,mbn=9,rs-,fhh=1,vjjr-,rcs=9,rmf=2,mgk=8,kn=1,xvk-,xkbcj=8,dq-,zn-,mqhm=4,jj-,znkzq-,mbn-,mx-,pkkbjt-,kl-,ltf=1,cs=4,fsbr=2,mz=5,kgl=6,kgtl-,nd=3,cpsh-,rnd-,mb-,pj=1,shx=9,dsf=2,sv=9,dss=7,phrk-,vp=1,kvlmn-,zt-,lv=9,lsgj=6,hrsf-,bp-,hj=2,lms-,nzr-,rjc-,tx=2,ptzd=8,fx-,tgjr=5,cppdg=4,cppk=8,rnd=9,kd-,hpn=6,sbsp=4,rpj=4,lf-,smn-,gl=9,qhr-,zvz-,qmx-,cg-,xtf-,kg=7,rh=3,cs=4,ppc=2,bs=4,nrl=2,ff=7,jv-,pzh=4,mdr=6,ds=1,zc-,zm=2,qmt-,znkzq-,mb=2,tdgls-,ltf=8,kd=4,dk-,sjj=3,cvl-,dcnr-,mhcp-,hp=1,lr-,br-,gpm-,zp=7,fsbr-,rgrtpd=3,nrl-,tn=9,ddb-,rpznm-,th-,pl-,mvs=3,znkzq=9,vxp=2,sk=2,krsl=2,tx=1,dx-,qmt=6,dbbd-,stqt=6,vk-,kcpj=3,pz=5,cxhrzz-,qvv-,pdrct=2,ldb=7,vjvqc=6,sdzm=4,flzfs=3,djpj=5,bq=8,khq=9,rcs-,fk-,rn=2,lsxt-,phzv-,tl-,dctk=5,pm=2,fnl=7,rcs-,flj=3,mpnlrx-,xxg=6,nzr-,jkb-,nd-,gnl-,gnl=9,jcdj=3,bxn=8,tfjz=5,txp=2,pjg-,jzv-,dtg=8,ddb=9,qmt=5,vd=3,glh=9,shx-,hbjl=3,dx-,kh=7,br=1,mgv=5,tcvg=6,lrtd-,rmf-,cjp=4,cqz-,mdcg=4,ffz-,dnmld-,sfg-,dx-,bthp=7,gmzd-,tqgk=4,jr=9,dss=9,gpm-,jc=5,hz-,ffgb-,cvl=5,nfjh=8,cvl-,dnmld=5,fsk=7,qxk=4,ptcr=4,lf=9,rfz=5,mvs=1,vp-,fqdh=1,qs=7,xvk=1,sqk=6,nfrmqc=9,kkj-,pztx-,sv-,df=1,vxp=1,fq=7,mtskcr=2,nfjh=1,jk-,xdzl-,xvcgnj-,kg=8,pr-,zmc-,ksjdgv=7,lg=7,khbsh-,dbt=5,kvlmn=5,ttbbm=1,zrlq=1,cm=2,zfgc-,jcpz-,nnfd=2,kg-,bp=4,svnm=7,xtf=4,lch=2,pzl-,bz-,dqt-,ttbbm=9,nsz-,mvf=5,nbx-,jjh=1,xntm-,dcnr=8,lhm=7,blxnc-,ng-,rjjk-,qbbdc=6,rzdpq=6,znkzq=6,vh=7,kkmgj=6,ff=2,ss-,glh-,gkg-,lgv=6,lqzvsh-,sgq=5,vnhnt-,nc=5,zh=9,cg-,dq-,zf-,ksjdgv=4,xr=1,fn-,mqhm=2,zmx-,lcvqz-,ml-,rhsctp=8,jhg-,pg=3,ss=9,bq=4,gtd=1,zvp-,xvcgnj=1,fhm=7,zpgrqr-,vjjr=3,fpn=8,fbm-,ds=3,cm=2,pgff-
\ No newline at end of file
diff --git a/solutions/2023/dotloadmovie/src/day15/index.spec.ts b/solutions/2023/dotloadmovie/src/day15/index.spec.ts
new file mode 100644
index 0000000..352e1e3
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day15/index.spec.ts
@@ -0,0 +1,13 @@
+import { solution1, solution2 } from './index';
+
+describe('tests', () => {
+ /*test('test solution1', () => {
+ const output = solution1();
+ expect(output).toEqual(52);
+ });*/
+
+ test('test solution2', () => {
+ const output = solution2();
+ expect(output).toEqual(294474);
+ });
+});
diff --git a/solutions/2023/dotloadmovie/src/day15/index.ts b/solutions/2023/dotloadmovie/src/day15/index.ts
new file mode 100644
index 0000000..913a889
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day15/index.ts
@@ -0,0 +1,4 @@
+import { solution1 } from "./solution1";
+import { solution2 } from "./solution2";
+
+export { solution1, solution2 };
diff --git a/solutions/2023/dotloadmovie/src/day15/solution1.ts b/solutions/2023/dotloadmovie/src/day15/solution1.ts
new file mode 100644
index 0000000..3e344f8
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day15/solution1.ts
@@ -0,0 +1,26 @@
+import fs from 'fs';
+
+export const computeFragmentHash = (fragment: string) => {
+ let output = 0;
+ const chars = fragment.split('');
+
+ for (let i = 0; i < chars.length; i++) {
+ output += fragment.charCodeAt(i);
+ output *= 17;
+ output = output % 256;
+ }
+
+ return output;
+};
+
+export const solution1 = () => {
+ const input = fs
+ .readFileSync(`${__dirname}/data/data.txt`, 'utf-8')
+ .split(',');
+
+ const values = input.map(computeFragmentHash);
+
+ return values.reduce((prev: number, curr: number) => {
+ return prev + curr;
+ });
+};
diff --git a/solutions/2023/dotloadmovie/src/day15/solution2.ts b/solutions/2023/dotloadmovie/src/day15/solution2.ts
new file mode 100644
index 0000000..ffb96ce
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day15/solution2.ts
@@ -0,0 +1,77 @@
+import fs from 'fs';
+import { computeFragmentHash } from './solution1';
+
+export const solution2 = () => {
+ const input = fs
+ .readFileSync(`${__dirname}/data/data.txt`, 'utf-8')
+ .split(',');
+
+ const removeItem = (arr: any, key: string): any => {
+ const output = arr.filter((item: any) => {
+ if (item.key !== key) {
+ return true;
+ }
+
+ return false;
+ });
+
+ return output;
+ };
+
+ const addItem = (arr: any, key: string, value: number) => {
+ let matched = false;
+
+ arr.forEach((item: any) => {
+ if (item.key === key) {
+ item.value = value;
+
+ matched = true;
+ }
+ });
+
+ if (!matched) {
+ arr.push({ key, value });
+ }
+
+ return arr;
+ };
+
+ const structure: any = {};
+
+ input.forEach((item: any) => {
+ const division: string = item.indexOf('=') > -1 ? '=' : '-';
+ const partials = item.split(division);
+
+ const value = computeFragmentHash(partials[0]);
+
+ if (division === '-') {
+ structure[`${value}`] = removeItem(
+ structure[`${value}`] || [],
+ partials[0]
+ );
+ } else {
+ structure[`${value}`] = addItem(
+ structure[`${value}`] || [],
+ partials[0],
+ Number(partials[1])
+ );
+ }
+ });
+
+ let output = 0;
+
+ Object.keys(structure).forEach((key: string) => {
+ const values = structure[key];
+
+ if (values.length > 0) {
+ const offset = Number(key) + 1;
+
+ values.forEach((value: any, i: number) => {
+ const total = offset * (i + 1) * value.value;
+ output += total;
+ });
+ }
+ });
+
+ return output;
+};
diff --git a/solutions/2023/dotloadmovie/src/day9/data/data.txt b/solutions/2023/dotloadmovie/src/day9/data/data.txt
new file mode 100644
index 0000000..775b69b
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day9/data/data.txt
@@ -0,0 +1,200 @@
+24 38 52 66 80 94 108 122 136 150 164 178 192 206 220 234 248 262 276 290 304
+1 6 8 2 -10 -6 67 305 879 2127 4775 10402 22342 47347 98546 200559 398101 770084 1452146 2671762 4801686
+13 21 20 3 -33 -68 -21 310 1329 3739 8646 17657 32955 57330 94141 147180 220405 317505 441256 592623 769559
+13 25 45 73 109 153 205 265 333 409 493 585 685 793 909 1033 1165 1305 1453 1609 1773
+0 4 24 80 206 467 1004 2133 4538 9611 20002 40447 78940 148304 268194 467530 787308 1283670 2031028 3124930 4684226
+0 6 15 26 44 96 265 744 1918 4505 9833 20404 41003 80756 156734 299951 564928 1044412 1891375 3351106 5807090
+17 27 38 52 80 152 341 817 1966 4641 10659 23733 51168 106936 217333 431587 841987 1622055 3098056 5880270 11098060
+18 45 87 142 216 335 557 984 1774 3153 5427 8994 14356 22131 33065 48044 68106 94453 128463 171702 225936
+2 18 48 99 198 401 809 1616 3235 6592 13768 29342 63099 135289 286447 595028 1207951 2391885 4617303 8693984 15987511
+4 15 44 91 151 223 342 661 1632 4374 11397 28029 65268 145513 313952 660626 1361776 2754565 5467334 10639035 20277385
+2 19 61 153 344 716 1392 2546 4418 7337 11755 18295 27816 41498 60950 88344 126578 179471 251993 350533 483208
+-1 -6 -17 -25 -11 54 209 503 995 1754 2859 4399 6473 9190 12669 17039 22439 29018 36935 46359 57469
+11 9 -1 -14 -15 32 205 655 1647 3611 7203 13376 23461 39258 63137 98149 148147 217917 313319 441438 610745
+9 29 58 95 143 213 330 540 917 1569 2642 4321 6827 10409 15330 21846 30177 40469 52746 66851 82375
+-4 2 26 80 184 370 679 1148 1788 2561 3376 4145 4976 6639 11533 25519 61180 143340 318038 666630 1327304
+-3 1 14 36 74 155 342 758 1626 3338 6586 12643 23999 45770 88648 174695 348059 693767 1369198 2654734 5032512
+0 3 21 65 145 280 531 1066 2272 4943 10595 21989 43981 84864 158421 286970 505752 869091 1458841 2395729 3854305
+15 23 41 86 192 422 880 1723 3173 5529 9179 14612 22430 33360 48266 68161 94219 127787 170397 223778 289868
+-7 -12 -15 -11 19 114 348 870 1996 4404 9535 20415 43342 91334 191113 397086 818939 1675156 3394633 6804881 13471197
+10 31 77 170 346 660 1191 2054 3428 5606 9065 14541 23076 35981 54631 79975 111606 146193 175029 180396 130390
+28 49 79 126 209 378 745 1526 3096 6074 11499 21264 39205 73711 143659 291374 610212 1302414 2799283 6008265 12813801
+24 54 102 180 322 609 1204 2395 4644 8640 15354 26094 42558 66883 101688 150109 215824 303066 416622 561816 744474
+9 17 29 46 89 221 583 1466 3461 7762 16757 35145 71992 144454 284498 551127 1052853 1989247 3727505 6941792 12861991
+-8 -3 18 75 202 460 963 1918 3688 6915 12797 23704 44444 84648 162926 313643 597360 1116161 2035220 3612025 6234638
+14 18 28 53 109 239 550 1268 2817 5955 12060 23768 46353 90573 178344 353904 705847 1411031 2822647 5646510 11290008
+7 14 36 88 200 425 844 1568 2737 4516 7088 10644 15370 21431 28952 37996 48539 60442 73420 87008 100524
+16 22 30 53 121 287 629 1245 2238 3688 5607 7872 10133 11703 11462 7856 -844 -15726 -35372 -52177 -45711
+-5 -8 -14 -26 -39 -31 62 400 1335 3562 8338 17782 35269 65931 117278 199952 328627 523068 809362 1221334 1802161
+7 8 17 37 64 95 147 287 673 1606 3593 7421 14242 25669 43883 71751 112955 172132 255025 368645 521444
+19 32 51 74 89 68 -27 -204 -331 94 2367 9343 26904 67034 154615 342558 744830 1606519 3448414 7358263 15565478
+25 43 66 105 193 402 866 1814 3626 6940 12859 23334 41832 74437 131577 230621 399647 682745 1147288 1893679 3068163
+10 9 16 44 108 222 396 633 926 1255 1584 1858 2000 1908 1452 471 -1230 -3883 -7760 -13176 -20492
+19 28 50 94 169 284 448 670 959 1324 1774 2318 2965 3724 4604 5614 6763 8060 9514 11134 12929
+28 38 38 26 0 -38 -67 -3 415 1893 6173 17281 44065 105169 238456 518380 1087409 2212203 4383427 8492743 16147397
+5 20 59 131 242 395 590 824 1091 1382 1685 1985 2264 2501 2672 2750 2705 2504 2111 1487 590
+6 2 6 32 96 231 528 1216 2790 6189 13018 25801 48248 85520 144484 233967 365046 551452 810222 1162806 1636928
+17 28 40 52 72 141 368 986 2458 5701 12583 27024 57355 121142 254594 530181 1088691 2196779 4350590 8465505 16231918
+12 11 21 54 140 347 809 1765 3607 6925 12517 21289 33891 49823 65647 72001 49672 -33223 -216433 -518802 -849232
+10 17 44 108 240 508 1058 2175 4363 8453 15785 28590 50844 90117 161363 294314 547409 1033610 1968447 3761345 7194253
+5 5 19 72 199 445 877 1616 2893 5129 9035 15724 26823 44569 71869 112300 170021 249565 355475 491744 661015
+-4 -2 -2 7 53 187 493 1102 2210 4100 7168 11953 19171 29753 44887 66064 95128 134330 186386 254539 342625
+11 33 78 156 276 441 647 904 1306 2186 4401 9801 21945 47136 95856 184691 338845 595351 1007096 1647786 2617986
+25 41 70 132 268 547 1081 2068 3889 7299 13789 26281 50508 97850 191284 377885 754712 1521183 3082460 6249315 12619309
+-1 -1 -3 -10 -26 -62 -145 -325 -668 -1205 -1769 -1581 1690 13954 49005 137645 346876 819457 1852938 4051920 8610837
+22 33 53 104 223 459 864 1482 2358 3629 5831 10670 22671 52347 121830 274288 588926 1203945 2350521 4401676 7940855
+12 11 21 61 167 414 950 2038 4111 7861 14402 25565 44396 75932 128321 214326 353206 572895 912299 1423397 2172661
+8 20 41 64 80 78 45 -34 -176 -400 -727 -1180 -1784 -2566 -3555 -4782 -6280 -8084 -10231 -12760 -15712
+-2 6 27 66 145 326 753 1729 3852 8242 16899 33240 62871 114658 202169 345567 574042 928878 1467259 2266926 3431805
+12 28 63 123 214 342 513 733 1008 1344 1747 2223 2778 3418 4149 4977 5908 6948 8103 9379 10782
+6 26 62 131 265 524 1024 1993 3880 7558 14699 28483 54967 105724 202813 387811 737580 1390714 2590327 4751374 8565245
+21 36 62 107 189 335 588 1045 1959 3948 8364 17885 37403 75291 145142 268083 475777 814236 1348578 2168871 3397217
+5 4 13 36 73 128 229 462 1032 2399 5601 12970 29584 66034 143565 303669 626287 1264754 2512757 4930676 9578227
+7 2 -7 -23 -46 -70 -74 14 426 1831 5961 16919 43793 105787 242259 532348 1133175 2353478 4793766 9609732 19002244
+11 12 10 2 -6 30 237 898 2586 6423 14579 31231 64432 129820 258029 509351 1002068 1965542 3836675 7431044 14243609
+0 12 39 99 221 455 901 1767 3469 6790 13116 24762 45399 80638 139043 234523 392817 668899 1191032 2265408 4610856
+6 11 26 59 112 181 265 398 725 1650 4091 9884 22385 47326 93988 176761 317168 546437 908712 1465001 2297966
+-2 -1 -2 -5 -10 -17 -26 -37 -50 -65 -82 -101 -122 -145 -170 -197 -226 -257 -290 -325 -362
+23 36 64 124 242 471 926 1841 3650 7103 13476 25071 46516 88010 172830 353435 743825 1581207 3338918 6927765 14049890
+14 21 26 22 -3 -66 -189 -399 -728 -1213 -1896 -2824 -4049 -5628 -7623 -10101 -13134 -16799 -21178 -26358 -32431
+20 27 34 41 48 55 62 69 76 83 90 97 104 111 118 125 132 139 146 153 160
+25 35 55 97 189 389 809 1671 3442 7132 14883 31017 63737 127709 247926 465970 852036 1532025 2753039 5041238 9569328
+-8 -13 -18 -23 -28 -33 -38 -43 -48 -53 -58 -63 -68 -73 -78 -83 -88 -93 -98 -103 -108
+16 28 55 120 260 532 1018 1842 3231 5681 10342 19835 39888 82462 171472 352836 711454 1398878 2676933 4984438 9036504
+21 47 100 194 346 576 916 1439 2319 3945 7149 13683 27206 55232 112757 228640 456273 890651 1694658 3138232 5655074
+0 -1 -4 2 51 208 588 1401 3038 6213 12176 23012 42041 74334 127360 211779 342396 539291 829140 1246742 1836767
+-7 2 29 78 153 263 431 717 1280 2524 5398 11960 26413 57086 120486 249988 514640 1059062 2185338 4515096 9299438
+-9 -13 -9 24 125 369 897 1964 4018 7824 14650 26566 47030 82242 144378 258964 480569 924009 1822761 3632772 7208891
+7 3 1 10 46 132 305 649 1401 3220 7764 18791 44113 98962 211849 435192 865667 1685080 3244946 6243388 12093370
+-3 6 40 115 248 453 734 1072 1404 1607 1549 1388 2562 10462 40878 134395 386683 1009100 2444674 5581361 12130176
+17 31 57 95 145 207 281 367 465 575 697 831 977 1135 1305 1487 1681 1887 2105 2335 2577
+17 35 63 100 138 167 202 346 912 2653 7213 18054 42398 95252 207535 442015 923751 1896979 3829455 7600644 14835558
+17 20 23 43 119 324 797 1822 3998 8567 17997 36951 73795 142778 266934 481665 839132 1414723 2320520 3739768 6015952
+24 36 48 60 72 84 96 108 120 132 144 156 168 180 192 204 216 228 240 252 264
+25 36 58 102 179 300 476 718 1037 1444 1950 2566 3303 4172 5184 6350 7681 9188 10882 12774 14875
+19 27 42 69 112 181 323 707 1818 4855 12500 30373 69807 153246 324893 671696 1364077 2733007 5411518 10586401 20432114
+9 14 20 40 109 300 742 1640 3309 6260 11434 20803 38807 75602 154127 325095 698165 1505485 3228408 6844265 14295557
+1 13 49 128 268 481 768 1114 1483 1813 2011 1948 1454 313 -1742 -5034 -9947 -16931 -26507 -39272 -55904
+27 39 58 87 133 230 472 1061 2398 5291 11432 24414 51728 108408 223288 449208 878965 1669359 3076342 5505049 9579383
+25 47 88 166 305 541 937 1623 2897 5453 10843 22330 46343 94795 188560 362411 671681 1200803 2073690 3465606 5615725
+10 7 4 1 -2 -5 -8 -11 -14 -17 -20 -23 -26 -29 -32 -35 -38 -41 -44 -47 -50
+7 0 -6 1 48 188 525 1278 2926 6508 14211 30477 64009 131268 262340 510426 966681 1782712 3203752 5616369 9615558
+12 21 34 53 73 85 91 148 486 1794 5844 16732 43163 102400 226741 473689 941344 1790979 3279270 5803239 9961645
+-6 1 11 32 84 196 401 743 1339 2584 5661 13657 33865 82406 193355 436439 950584 2005807 4114103 8222282 16037730
+-2 1 3 7 33 130 402 1077 2676 6379 14748 33077 71833 150980 307503 608247 1171346 2201141 4043689 7272875 12820897
+2 14 34 67 122 218 396 744 1462 3024 6534 14423 31694 67992 140856 280600 537370 991034 1764682 3042643 5094066
+11 6 7 35 123 310 628 1087 1683 2487 3919 7370 16407 38881 90356 199388 415307 819292 1539679 2772605 4809267
+-5 -9 -5 16 63 145 271 450 691 1003 1395 1876 2455 3141 3943 4870 5931 7135 8491 10008 11695
+0 12 38 84 164 302 534 910 1496 2376 3654 5456 7932 11258 15638 21306 28528 37604 48870 62700 79508
+11 21 30 41 57 81 116 169 284 664 1991 6116 17368 44822 105971 232366 477921 930727 1729380 3085003 5310331
+10 40 97 190 321 489 715 1101 1936 3862 8113 16840 33535 63567 114843 198607 330390 531124 828433 1258114 1865821
+12 28 61 130 259 479 829 1365 2200 3613 6281 11705 22919 45590 89637 171518 317356 567098 979925 1641156 2670915
+15 33 54 71 77 68 46 22 19 75 246 609 1265 2342 3998 6424 9847 14533 20790 28971 39477
+-10 -15 -20 -25 -30 -35 -40 -45 -50 -55 -60 -65 -70 -75 -80 -85 -90 -95 -100 -105 -110
+16 24 40 68 112 176 264 380 528 712 936 1204 1520 1888 2312 2796 3344 3960 4648 5412 6256
+14 25 37 46 54 74 127 236 434 829 1818 4623 12447 32735 81301 189486 416098 866725 1724199 3295640 6083768
+-3 10 37 94 212 451 922 1828 3549 6813 13019 24813 47068 88488 164148 299401 535733 939332 1613361 2715192 4480172
+12 13 24 54 105 167 213 194 34 -375 -1178 -2562 -4761 -8061 -12805 -19398 -28312 -40091 -55356 -74810 -99243
+13 22 45 88 157 258 397 580 813 1102 1453 1872 2365 2938 3597 4348 5197 6150 7213 8392 9693
+10 36 82 151 244 363 514 710 974 1342 1866 2617 3688 5197 7290 10144 13970 19016 25570 33963 44572
+4 2 -4 -8 3 49 157 361 702 1228 1994 3062 4501 6387 8803 11839 15592 20166 25672 32228 39959
+5 14 31 52 73 90 99 96 77 38 -25 -116 -239 -398 -597 -840 -1131 -1474 -1873 -2332 -2855
+-6 -12 -12 12 88 251 542 1028 1886 3631 7621 17044 38686 85898 183327 374154 730794 1370262 2475698 4325876 7334900
+11 28 64 138 279 526 930 1566 2563 4167 6888 11886 21983 44133 94954 212172 476731 1053110 2259328 4683530 9371303
+3 23 67 145 267 443 683 997 1395 1887 2483 3193 4027 4995 6107 7373 8803 10407 12195 14177 16363
+0 9 33 79 157 294 551 1042 1956 3579 6313 10715 17660 28896 48522 86272 163876 326077 657909 1309271 2526211
+17 37 65 103 168 309 627 1306 2675 5350 10574 21028 42710 89106 190006 409227 878565 1859987 3854991 7789941 15319908
+16 32 56 95 171 323 613 1144 2092 3746 6543 11082 18105 28447 42984 62651 88664 123164 170610 240385 351247
+20 48 91 149 222 310 413 531 664 812 975 1153 1346 1554 1777 2015 2268 2536 2819 3117 3430
+-7 -7 8 51 145 330 666 1236 2168 3721 6521 12093 23918 49354 102901 211466 422499 816129 1522734 2747735 4805815
+8 15 32 77 191 461 1061 2324 4860 9735 18724 34647 61791 106413 177309 286422 449448 686383 1021936 1485713 2112055
+-3 10 45 119 251 464 795 1309 2110 3349 5253 8249 13360 23283 45099 96754 221868 521974 1223292 2808615 6267122
+-7 5 37 105 246 529 1066 2023 3631 6197 10115 15877 24084 35457 50848 71251 97813 131845 174833 228449 294562
+12 39 77 138 261 529 1087 2164 4111 7491 13302 23496 42117 77700 148187 290731 580666 1167011 2336655 4626474 9012841
+8 12 15 31 99 298 761 1693 3420 6526 12168 22686 42639 80409 150574 277483 501112 887748 1550973 2693733 4691283
+18 42 80 144 252 424 678 1026 1470 1998 2580 3164 3672 3996 3994 3486 2250 18 -3528 -8760 -16108
+5 11 27 67 145 275 471 747 1117 1595 2195 2931 3817 4867 6095 7515 9141 10987 13067 15395 17985
+7 2 -2 2 40 171 511 1273 2832 5832 11359 21213 38345 67630 117402 202691 352013 621034 1118636 2054040 3817862
+-4 -2 4 20 54 113 208 371 686 1334 2653 5231 10110 19325 37293 74076 152352 321126 680882 1427086 2921742
+18 44 88 156 253 390 602 977 1692 3048 5492 9610 16071 25498 38238 53999 71318 86820 94224 83048 36961
+8 16 49 124 268 524 953 1628 2615 3934 5489 6949 7552 5807 -841 -15926 -41810 -70848 -58719 144294 952600
+5 21 47 79 128 249 599 1535 3764 8565 18133 36179 69109 128471 236007 433767 803764 1505609 2848844 5434347 10436151
+17 32 47 62 77 92 107 122 137 152 167 182 197 212 227 242 257 272 287 302 317
+3 22 64 144 282 503 837 1319 1989 2892 4078 5602 7524 9909 12827 16353 20567 25554 31404 38212 46078
+30 40 54 87 160 300 540 919 1482 2280 3370 4815 6684 9052 12000 15615 19990 25224 31422 38695 47160
+16 32 59 89 121 168 260 443 774 1312 2105 3173 4487 5944 7338 8327 8396 6816 2599 -5551 -19291
+14 28 47 76 120 184 273 392 546 740 979 1268 1612 2016 2485 3024 3638 4332 5111 5980 6944
+2 5 27 95 262 618 1301 2508 4506 7643 12359 19197 28814 41992 59649 82850 112818 150945 198803 258155 330966
+22 49 91 166 310 592 1145 2225 4330 8443 16507 32296 62914 121234 229681 425867 770702 1359733 2338603 3923674 6429022
+10 21 45 109 249 508 944 1665 2916 5250 9830 18964 37136 73179 145043 290217 588027 1206379 2498594 5203369 10858160
+-1 1 17 60 160 375 802 1588 2941 5141 8551 13628 20934 31147 45072 63652 87979 119305 159053 208828 270428
+-8 -11 -14 -17 -20 -23 -26 -29 -32 -35 -38 -41 -44 -47 -50 -53 -56 -59 -62 -65 -68
+18 23 36 76 172 359 680 1216 2177 4095 8160 16722 33931 66383 123458 216746 357524 550631 782244 997936 1065942
+0 -4 -3 25 123 366 874 1827 3482 6192 10427 16797 26077 39234 57456 82183 115140 158372 214281 285665 375759
+4 16 40 98 233 524 1106 2204 4205 7808 14308 26091 47465 86092 155675 281515 512676 948785 1797624 3494503 6941039
+-5 -13 -24 -38 -55 -75 -98 -124 -153 -185 -220 -258 -299 -343 -390 -440 -493 -549 -608 -670 -735
+10 1 -9 -12 19 157 569 1592 3851 8448 17274 33527 62558 113214 199902 345661 586600 978139 1603577 2585606 4101493
+1 3 17 69 207 524 1194 2535 5141 10166 19909 38969 76469 150297 295195 578257 1128729 2195245 4254933 8218565 15809219
+10 22 48 96 169 271 424 707 1340 2867 6558 15276 35279 79804 175904 377088 786347 1598271 3177560 6209020 11990048
+5 15 36 85 194 423 896 1878 3911 8022 16006 30782 56860 101154 174990 299719 521833 950577 1844464 3797003 8112502
+21 33 50 83 165 369 828 1761 3525 6751 12708 24207 47648 97279 203454 427794 890020 1814735 3613832 7036842 13459348
+14 17 16 14 33 141 492 1393 3430 7709 16306 33086 65160 125416 236811 439513 802698 1444181 2563736 4501038 7838391
+10 16 31 69 144 270 461 731 1094 1564 2155 2881 3756 4794 6009 7415 9026 10856 12919 15229 17800
+7 9 12 19 42 122 363 991 2458 5621 12043 24497 47820 90394 166798 302736 544530 977975 1766715 3231869 6019627
+4 0 -9 -12 9 73 190 343 468 461 281 288 2091 10462 37444 110883 291604 706830 1612875 3508468 7332309
+18 26 40 66 114 201 354 613 1034 1692 2684 4132 6186 9027 12870 17967 24610 33134 43920 57398 74050
+15 27 58 121 236 442 810 1459 2589 4562 8090 14643 27294 52405 102870 204119 404811 795173 1537354 2914045 5404064
+11 10 8 5 -4 -20 -8 168 848 2712 6927 15261 30118 54560 92871 153714 261793 492858 1065910 2564441 6430408
+15 25 51 112 246 534 1141 2384 4839 9499 17996 32919 58337 100843 171899 293232 509042 913000 1706876 3325965 6703263
+-1 9 32 68 115 169 224 272 303 305 264 164 -13 -287 -680 -1216 -1921 -2823 -3952 -5340 -7021
+-1 12 45 116 255 509 955 1730 3100 5615 10445 20077 39695 79811 161196 324214 647071 1282904 2537279 5031484 10043393
+5 7 17 37 80 186 452 1095 2586 5929 13213 28635 60273 122972 242782 463441 855411 1527931 2644425 4441369 7250350
+7 23 63 136 261 492 967 2003 4266 9050 18705 37264 71336 131359 233347 401321 670689 1092937 1742115 2723752 4187015
+17 23 39 86 206 487 1102 2368 4835 9418 17586 31629 55062 93350 155464 257533 431499 745124 1346709 2561749 5095272
+13 19 34 66 123 213 344 524 761 1063 1438 1894 2439 3081 3828 4688 5669 6779 8026 9418 10963
+19 47 95 181 329 563 912 1447 2376 4232 8219 16853 35169 72975 148923 297522 580605 1105121 2049363 3699737 6499757
+12 13 30 90 247 592 1274 2545 4842 8919 16042 28260 48765 82354 136006 219587 346696 535665 810726 1203358 1753827
+19 25 44 96 216 475 1017 2121 4318 8627 17023 33316 64703 124351 235468 437403 794357 1407245 2429070 4083784 6687930
+-1 5 27 77 186 418 884 1756 3281 5795 9737 15663 24260 36360 52954 75206 104467 142289 190439 250913 325950
+6 10 19 38 71 116 164 213 317 716 2159 6665 19190 50999 126010 292065 640208 1337090 2679499 5187348 9764889
+28 38 49 68 106 194 419 998 2423 5732 13002 28239 58983 119186 234298 450057 847278 1566034 2844087 5076334 8904464
+6 13 18 21 22 21 18 13 6 -3 -14 -27 -42 -59 -78 -99 -122 -147 -174 -203 -234
+22 37 53 70 88 107 127 148 170 193 217 242 268 295 323 352 382 413 445 478 512
+5 13 28 52 84 133 243 530 1231 2765 5806 11368 20902 36405 60541 96774 149513 224269 327824 468412 655912
+18 33 64 135 292 616 1242 2390 4418 7917 13887 24064 41514 71674 124105 215331 373274 643961 1101378 1861581 3102448
+4 3 11 47 144 355 768 1552 3075 6166 12643 26309 54757 112604 227395 450843 881296 1710389 3321733 6499619 12864200
+-5 -6 -4 1 9 20 34 51 71 94 120 149 181 216 254 295 339 386 436 489 545
+15 21 33 54 88 153 300 637 1357 2769 5331 9684 16686 27445 43350 66099 97723 140605 197493 271506 366132
+13 35 75 150 291 559 1080 2117 4210 8428 16790 32925 63054 117390 212065 371706 632795 1047961 1691365 2665352 4108557
+8 4 -5 -7 28 149 415 875 1537 2338 3176 4192 6756 16115 47584 139866 382350 969773 2311243 5249518 11507696
+22 44 86 158 264 394 520 617 737 1177 2818 7809 21017 53244 128459 299776 683577 1529631 3360043 7236153 15258355
+1 16 58 146 311 606 1131 2087 3877 7276 13696 25576 46931 84098 146721 249021 411401 662440 1041334 1600846 2410831
+0 -8 -18 -31 -37 -1 167 668 1904 4620 10147 20856 41033 78533 147776 274919 506384 922352 1657356 2930731 5090415
+8 13 29 66 147 327 720 1540 3174 6330 12364 24032 47218 94802 195005 408709 864104 1823683 3809815 7833442 15799577
+24 37 66 138 305 664 1396 2840 5623 10878 20619 38439 70902 130375 240667 447799 839626 1579987 2965704 5518232 10126239
+9 12 25 57 123 264 586 1336 3045 6781 14581 30211 60632 119124 232314 456039 910197 1852428 3827933 7963859 16532197
+1 1 3 8 18 36 66 113 183 283 421 606 848 1158 1548 2031 2621 3333 4183 5188 6366
+8 6 5 20 77 210 453 821 1278 1712 1985 2217 3629 10567 34856 104568 280948 690174 1581737 3433954 7141669
+10 30 73 157 315 611 1176 2293 4577 9315 19052 38532 76128 145922 270625 485558 843948 1423828 2336867 3739495 5846729
+19 31 37 38 48 104 293 809 2052 4780 10324 20875 39851 72351 125702 210104 339377 531813 811135 1207564 1758994
+22 35 53 86 163 339 697 1345 2408 4015 6281 9284 13037 17455 22317 27223 31546 34379 34477 30194 19415
+-1 12 38 74 122 212 439 1017 2353 5151 10577 20550 38257 68990 121315 208324 348175 562138 866740 1254094 1650808
+12 21 34 66 148 342 778 1725 3717 7769 15737 30900 58871 108978 196295 344547 590162 987797 1617724 2595526 4084622
+10 17 38 80 160 308 564 975 1609 2624 4478 8470 18011 41433 97955 230071 529016 1186982 2604228 5608829 11906538
+13 29 56 94 159 298 603 1229 2430 4640 8643 15909 29276 54467 103724 204643 421079 900583 1977702 4391236 9728713
+10 9 11 16 24 35 49 66 86 109 135 164 196 231 269 310 354 401 451 504 560
+16 32 48 66 95 157 295 595 1252 2746 6262 14612 34150 78637 176982 388789 835636 1763596 3666184 7520406 15227221
+17 33 54 75 88 91 103 198 592 1840 5226 13480 32087 71760 153269 316913 640646 1273346 2493129 4805592 9105593
+2 7 25 71 165 340 672 1350 2822 6092 13324 29067 62704 133229 278288 570754 1148182 2263637 4371047 8264983 15304355
+12 23 45 91 196 430 914 1848 3573 6715 12509 23486 44837 86956 169920 330999 636714 1201487 2215565 3985661 6992650
+17 23 30 39 47 47 28 -25 -131 -313 -598 -1017 -1605 -2401 -3448 -4793 -6487 -8585 -11146 -14233 -17913
+19 31 63 128 244 443 784 1379 2455 4494 8521 16662 33202 66592 133268 264873 521675 1016857 1959179 3725596 6981144
+8 17 46 97 170 276 468 903 1962 4479 10171 22442 47908 99367 201748 404302 805948 1608225 3225376 6510111 13207278
+12 24 54 125 279 582 1128 2038 3446 5473 8240 12114 18702 33734 74085 183016 460572 1120346 2589974 5681335 11868165
+9 11 24 62 146 317 662 1357 2732 5376 10339 19580 37005 70822 138651 278095 567675 1166753 2389242 4835946 9626380
+-1 8 38 94 191 380 785 1651 3403 6716 12596 22472 38299 62672 98951 151397 225319 327232 465026 648146 887783
+-1 -2 -10 -28 -59 -106 -172 -260 -373 -514 -686 -892 -1135 -1418 -1744 -2116 -2537 -3010 -3538 -4124 -4771
+8 21 49 111 227 425 775 1468 2961 6212 13032 26584 52062 97586 175352 303079 505798 818031 1286411 1972797 2957941
+2 7 23 51 90 138 205 349 747 1824 4504 10759 24896 56590 127806 287878 644787 1427159 3102514 6596251 13689393
+7 26 69 160 347 720 1448 2847 5484 10323 18938 33869 59304 102485 176692 307706 548167 1010270 1941209 3896660 8132539
+8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 113 120 127 134 141 148
\ No newline at end of file
diff --git a/solutions/2023/dotloadmovie/src/day9/index.spec.ts b/solutions/2023/dotloadmovie/src/day9/index.spec.ts
new file mode 100644
index 0000000..2f16783
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day9/index.spec.ts
@@ -0,0 +1,13 @@
+import { solution1, solution2 } from './index';
+
+describe('tests', () => {
+ /*test('test solution1', () => {
+ const output = solution1();
+ expect(output).toEqual(1953784198);
+ });*/
+
+ test('test solution2', () => {
+ const output = solution2();
+ expect(output).toEqual(2);
+ });
+});
diff --git a/solutions/2023/dotloadmovie/src/day9/index.ts b/solutions/2023/dotloadmovie/src/day9/index.ts
new file mode 100644
index 0000000..913a889
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day9/index.ts
@@ -0,0 +1,4 @@
+import { solution1 } from "./solution1";
+import { solution2 } from "./solution2";
+
+export { solution1, solution2 };
diff --git a/solutions/2023/dotloadmovie/src/day9/solution1.ts b/solutions/2023/dotloadmovie/src/day9/solution1.ts
new file mode 100644
index 0000000..f19973c
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day9/solution1.ts
@@ -0,0 +1,62 @@
+import fs from 'fs';
+
+export const solution1 = () => {
+ const input = fs
+ .readFileSync(`${__dirname}/data/data.txt`, 'utf-8')
+ .split('\n');
+
+ let output = 0;
+
+ const lines = input.map((line: string) => {
+ return line.split(' ').map((item: string) => {
+ return parseInt(item);
+ });
+ });
+
+ const getDifferences = (line: number[]): number[] => {
+ const output = [];
+
+ for (let i = 1; i < line.length; i++) {
+ output.push(line[i] - line[i - 1]);
+ }
+
+ return output;
+ };
+
+ const getExtrapolation = (line: number[]): number => {
+ const calc: any[] = [line];
+
+ while (
+ calc[calc.length - 1].some((num: number) => {
+ return num !== 0;
+ })
+ ) {
+ const next = getDifferences(calc[calc.length - 1]);
+ calc.push(next);
+ }
+
+ calc.reverse();
+
+ for (let i = 0; i < calc.length; i++) {
+ if (i === 0) {
+ calc[i].push(0);
+ } else {
+ calc[i].push(
+ calc[i][calc[i].length - 1] + calc[i - 1][calc[i - 1].length - 1]
+ );
+ }
+ }
+
+ calc.reverse();
+
+ return calc[0][calc[0].length - 1];
+ };
+
+ const values = lines.map((line: number[]) => {
+ return getExtrapolation(line);
+ });
+
+ return values.reduce((prev: any, curr: any) => {
+ return prev + curr;
+ });
+};
diff --git a/solutions/2023/dotloadmovie/src/day9/solution2.ts b/solutions/2023/dotloadmovie/src/day9/solution2.ts
new file mode 100644
index 0000000..8eb3eae
--- /dev/null
+++ b/solutions/2023/dotloadmovie/src/day9/solution2.ts
@@ -0,0 +1,65 @@
+import fs from 'fs';
+
+export const solution2 = () => {
+ const input = fs
+ .readFileSync(`${__dirname}/data/data.txt`, 'utf-8')
+ .split('\n');
+
+ let output = 0;
+
+ const lines = input.map((line: string) => {
+ return line
+ .split(' ')
+ .reverse()
+ .map((item: string) => {
+ return parseInt(item);
+ });
+ });
+
+ const getDifferences = (line: number[]): number[] => {
+ const output = [];
+
+ for (let i = 1; i < line.length; i++) {
+ output.push(line[i] - line[i - 1]);
+ }
+
+ return output;
+ };
+
+ const getExtrapolation = (line: number[]): number => {
+ const calc: any[] = [line];
+
+ while (
+ calc[calc.length - 1].some((num: number) => {
+ return num !== 0;
+ })
+ ) {
+ const next = getDifferences(calc[calc.length - 1]);
+ calc.push(next);
+ }
+
+ calc.reverse();
+
+ for (let i = 0; i < calc.length; i++) {
+ if (i === 0) {
+ calc[i].push(0);
+ } else {
+ calc[i].push(
+ calc[i][calc[i].length - 1] + calc[i - 1][calc[i - 1].length - 1]
+ );
+ }
+ }
+
+ calc.reverse();
+
+ return calc[0][calc[0].length - 1];
+ };
+
+ const values = lines.map((line: number[]) => {
+ return getExtrapolation(line);
+ });
+
+ return values.reduce((prev: any, curr: any) => {
+ return prev + curr;
+ });
+};
diff --git a/solutions/2023/dotloadmovie/tsconfig.json b/solutions/2023/dotloadmovie/tsconfig.json
index 435fe47..c86043c 100644
--- a/solutions/2023/dotloadmovie/tsconfig.json
+++ b/solutions/2023/dotloadmovie/tsconfig.json
@@ -1,6 +1,6 @@
{
"compilerOptions": {
- "target": "es5",
+ "target": "es2021",
"module": "commonjs",
"lib": ["es2021"],
"allowJs": true,
diff --git a/solutions/2023/francisco/08/STATEMENT.md b/solutions/2023/francisco/08/STATEMENT.md
new file mode 100755
index 0000000..ba72ecf
--- /dev/null
+++ b/solutions/2023/francisco/08/STATEMENT.md
@@ -0,0 +1,118 @@
+
+--- Day 8: Haunted Wasteland ---
+--------------------------------
+
+You're still riding a camel across Desert Island when you spot a sandstorm quickly approaching. When you turn to warn the Elf, she disappears before your eyes! To be fair, she had just finished warning you about *ghosts* a few minutes ago.
+
+
+One of the camel's pouches is labeled "maps" - sure enough, it's full of documents (your puzzle input) about how to navigate the desert. At least, you're pretty sure that's what they are; one of the documents contains a list of left/right instructions, and the rest of the documents seem to describe some kind of *network* of labeled nodes.
+
+
+It seems like you're meant to use the *left/right* instructions to *navigate the network*. Perhaps if you have the camel follow the same instructions, you can escape the haunted wasteland!
+
+
+After examining the maps for a bit, two nodes stick out: `AAA` and `ZZZ`. You feel like `AAA` is where you are now, and you have to follow the left/right instructions until you reach `ZZZ`.
+
+
+This format defines each *node* of the network individually. For example:
+
+
+
+```
+RL
+
+AAA = (BBB, CCC)
+BBB = (DDD, EEE)
+CCC = (ZZZ, GGG)
+DDD = (DDD, DDD)
+EEE = (EEE, EEE)
+GGG = (GGG, GGG)
+ZZZ = (ZZZ, ZZZ)
+
+```
+
+Starting with `AAA`, you need to *look up the next element* based on the next left/right instruction in your input. In this example, start with `AAA` and go *right* (`R`) by choosing the right element of `AAA`, `*CCC*`. Then, `L` means to choose the *left* element of `CCC`, `*ZZZ*`. By following the left/right instructions, you reach `ZZZ` in `*2*` steps.
+
+
+Of course, you might not find `ZZZ` right away. If you run out of left/right instructions, repeat the whole sequence of instructions as necessary: `RL` really means `RLRLRLRLRLRLRLRL...` and so on. For example, here is a situation that takes `*6*` steps to reach `ZZZ`:
+
+
+
+```
+LLR
+
+AAA = (BBB, BBB)
+BBB = (AAA, ZZZ)
+ZZZ = (ZZZ, ZZZ)
+
+```
+
+Starting at `AAA`, follow the left/right instructions. *How many steps are required to reach `ZZZ`?*
+
+
+
+Your puzzle answer was `22199`.
+
+The first half of this puzzle is complete! It provides one gold star: \*
+
+
+--- Part Two ---
+----------------
+
+The sandstorm is upon you and you aren't any closer to escaping the wasteland. You had the camel follow the instructions, but you've barely left your starting position. It's going to take *significantly more steps* to escape!
+
+
+What if the map isn't for people - what if the map is for *ghosts*? Are ghosts even bound by the laws of spacetime? Only one way to find out.
+
+
+After examining the maps a bit longer, your attention is drawn to a curious fact: the number of nodes with names ending in `A` is equal to the number ending in `Z`! If you were a ghost, you'd probably just *start at every node that ends with `A`* and follow all of the paths at the same time until they all simultaneously end up at nodes that end with `Z`.
+
+
+For example:
+
+
+
+```
+LR
+
+11A = (11B, XXX)
+11B = (XXX, 11Z)
+11Z = (11B, XXX)
+22A = (22B, XXX)
+22B = (22C, 22C)
+22C = (22Z, 22Z)
+22Z = (22B, 22B)
+XXX = (XXX, XXX)
+
+```
+
+Here, there are two starting nodes, `11A` and `22A` (because they both end with `A`). As you follow each left/right instruction, use that instruction to *simultaneously* navigate away from both nodes you're currently on. Repeat this process until *all* of the nodes you're currently on end with `Z`. (If only some of the nodes you're on end with `Z`, they act like any other node and you continue as normal.) In this example, you would proceed as follows:
+
+
+* Step 0: You are at `11A` and `22A`.
+* Step 1: You choose all of the *left* paths, leading you to `11B` and `22B`.
+* Step 2: You choose all of the *right* paths, leading you to `*11Z*` and `22C`.
+* Step 3: You choose all of the *left* paths, leading you to `11B` and `*22Z*`.
+* Step 4: You choose all of the *right* paths, leading you to `*11Z*` and `22B`.
+* Step 5: You choose all of the *left* paths, leading you to `11B` and `22C`.
+* Step 6: You choose all of the *right* paths, leading you to `*11Z*` and `*22Z*`.
+
+
+So, in this example, you end up entirely on nodes that end in `Z` after `*6*` steps.
+
+
+Simultaneously start on every node that ends with `A`. *How many steps does it take before you're only on nodes that end with `Z`?*
+
+
+
+Answer:
+
+
+Although it hasn't changed, you can still [get your puzzle input](8/input).
+
+
+You can also [Shareon
+ [Twitter](https://twitter.com/intent/tweet?text=I%27ve+completed+Part+One+of+%22Haunted+Wasteland%22+%2D+Day+8+%2D+Advent+of+Code+2023&url=https%3A%2F%2Fadventofcode%2Ecom%2F2023%2Fday%2F8&related=ericwastl&hashtags=AdventOfCode)
+[Mastodon](javascript:void(0);)] this puzzle.
+
+
diff --git a/solutions/2023/francisco/08/__init__.py b/solutions/2023/francisco/08/__init__.py
new file mode 100755
index 0000000..e69de29
diff --git a/solutions/2023/francisco/08/final.txt b/solutions/2023/francisco/08/final.txt
new file mode 100755
index 0000000..2279532
--- /dev/null
+++ b/solutions/2023/francisco/08/final.txt
@@ -0,0 +1,740 @@
+LRLRLRLLRRLRRLRRRLRRLRLLRRRLRRRLRRLLLLRRRLRLLRRLRRLRRLLLRRRLRRRLRRLRLRRLRLRLRLLRRRLRRRLLRRRLRRRLRRRLRLLLRRLRLRRRLRLRRRLLRRRLRLLRLRRRLRLRRRLRRLLRLRLRRLRLRLRRLRLRLRRRLRRLRLLRRLRRRLRRRLRRLRRRLRRLRLRRRLLRRRLLRRLRLRRRLRRRLLRRRLRLRRLRLRLRRLRLLRRLRLRLRRLRRRLRRRLRLRRLRRLLLRRRLLRLRRRLLRRRR
+
+NBN = (BKF, NNH)
+NSM = (RFT, QQM)
+BDR = (HRB, KQB)
+LGM = (CQJ, XJQ)
+CQL = (BDX, FBN)
+SNH = (HXS, HCC)
+BBL = (FMD, LVM)
+GDF = (QQJ, VBM)
+NVN = (QQR, XFD)
+MMQ = (PHP, PHP)
+TPH = (BNM, MXC)
+NDR = (MSQ, RGL)
+KRL = (RGM, RSP)
+KJR = (MRD, TJC)
+NBB = (JLM, JQQ)
+AAA = (FHJ, QHN)
+KFB = (BXG, RSN)
+XFS = (QMB, KKF)
+CDK = (HDD, JVJ)
+GDB = (GQT, DSN)
+RXL = (MJL, XFS)
+FGM = (MBR, GFS)
+DCM = (HDD, JVJ)
+HLJ = (XPK, CTT)
+PMS = (GHH, VQH)
+KVP = (QDD, QDD)
+HMS = (FJG, NKX)
+LNF = (HSN, PVN)
+HNN = (FVC, FMN)
+NHK = (PQX, XXX)
+GSL = (CVK, TCT)
+MSV = (DFT, FVR)
+RGF = (NVH, RJG)
+XQT = (PVM, LDD)
+QNX = (NTM, DXG)
+MVX = (RBK, VSL)
+QTF = (QKN, LQK)
+NFV = (MVG, KCT)
+MHL = (SVN, RHM)
+VSL = (BLJ, XMX)
+MJL = (KKF, QMB)
+FMB = (RHM, SVN)
+DTT = (JRG, HBQ)
+RSV = (JLP, QKR)
+QMV = (HNN, TND)
+GXF = (JQQ, JLM)
+KSQ = (VKQ, STJ)
+MDL = (LNQ, DQF)
+DQF = (HLJ, VVN)
+FDD = (DDM, GMM)
+RDD = (GHR, TDJ)
+LKK = (VRD, SGJ)
+BRF = (VFV, LNH)
+MRM = (GSQ, JNJ)
+JFQ = (BDC, KSN)
+THT = (PHL, DCX)
+FGL = (RSV, TRX)
+RMT = (HHR, BKV)
+SHL = (LHT, FBK)
+RVN = (MPF, TGD)
+PMD = (MFL, DMP)
+JVN = (CMC, BJC)
+FVC = (LNP, LPX)
+BDC = (PRS, PRS)
+BCT = (LDD, PVM)
+PBQ = (QDX, BVT)
+XLB = (FBF, THP)
+HQG = (RXL, GKK)
+QXK = (BNJ, GSM)
+BRG = (PVQ, NKP)
+TCC = (BFV, GHQ)
+TTC = (VLV, CBB)
+QJV = (QGG, FTF)
+BJC = (GCQ, LJV)
+BNS = (SCX, LGL)
+LQK = (XRL, MSB)
+FBK = (CSQ, RKK)
+TND = (FMN, FVC)
+DHX = (TKX, DGS)
+GKC = (JKS, CPT)
+VHQ = (DQF, LNQ)
+VKN = (BDC, BDC)
+KQG = (FHJ, QHN)
+KBG = (HVS, HFS)
+DVA = (XXG, PRR)
+RTP = (RCJ, MVV)
+KMJ = (BFV, GHQ)
+FJG = (FSJ, MRM)
+KGH = (NVN, JJD)
+TRC = (KLM, DCJ)
+PNT = (XHX, KGH)
+PVM = (VVB, KFL)
+JQQ = (JFX, VBP)
+QTL = (MBK, DSL)
+NPC = (NBN, BVS)
+XDZ = (PRR, XXG)
+JTR = (LTL, BBT)
+LPX = (NXJ, BPT)
+BGT = (FHK, TBC)
+FFK = (NML, DPL)
+GRR = (RLM, GJD)
+QBR = (BNM, MXC)
+QFF = (HMS, DHJ)
+GTT = (MSV, LQD)
+STH = (GLX, RXQ)
+DCX = (BCT, XQT)
+KNT = (QQH, FNT)
+FPF = (LSJ, QNX)
+VDB = (TTM, GNJ)
+GDQ = (VJJ, BTV)
+XPK = (PFB, SRN)
+CXC = (LMM, JXT)
+MDJ = (MDL, VHQ)
+NFL = (HSN, PVN)
+KMT = (LFT, SNP)
+KCT = (HKF, LKK)
+TJC = (THT, FPJ)
+FKC = (PLJ, FDS)
+HGJ = (BKV, HHR)
+QMN = (QQN, HVG)
+HBT = (CSV, JCB)
+QHN = (TGV, VFR)
+QGG = (TCB, FQH)
+NMT = (RFS, MDB)
+BGF = (NFL, LNF)
+TXJ = (NPC, FGC)
+RQB = (XNP, PQV)
+FHG = (TND, HNN)
+DRL = (DCL, JRT)
+CSN = (CVH, BRL)
+MRK = (CRS, HPQ)
+XPM = (GGS, GGS)
+CTT = (PFB, SRN)
+SMX = (PQB, CRF)
+NVH = (BGF, CPK)
+CGB = (GLX, RXQ)
+HJV = (RVN, FLF)
+TSM = (CRF, PQB)
+HPQ = (STB, MCK)
+JMD = (RMT, HGJ)
+KPC = (JHF, JNV)
+VLV = (MJX, MCQ)
+RRK = (XGP, LHL)
+MGH = (BVG, GTT)
+XFD = (RKT, TCN)
+JVB = (FQJ, MGH)
+VNX = (KGH, XHX)
+FNT = (NQJ, XFP)
+XGP = (DCM, CDK)
+GSR = (GRR, FPH)
+NQJ = (QJG, VCS)
+RJC = (CVH, BRL)
+CLG = (DSB, JLJ)
+FHK = (HJV, TNX)
+XDD = (DPL, NML)
+LKQ = (PQN, VTS)
+VBM = (LVN, FHF)
+RFT = (KFC, BJN)
+JFT = (BNS, HNX)
+JKS = (GCT, XJV)
+LHL = (DCM, CDK)
+RMG = (QDS, QMR)
+VXA = (BRF, XKN)
+SCT = (BJF, TDL)
+HFG = (QTF, HMG)
+JQL = (JVN, HXT)
+FTB = (PJS, VVS)
+DVG = (SSD, PCL)
+JRT = (LDG, JFT)
+RXK = (NNX, FFX)
+DDM = (LQV, MRK)
+DPG = (XDD, FFK)
+GCQ = (CQL, PSV)
+GQT = (NKS, VDX)
+LMM = (BFQ, VSM)
+PQF = (VDB, GXH)
+GFD = (GCM, LSF)
+KGC = (STH, CGB)
+KDT = (SBV, LDX)
+JHS = (BLN, QTL)
+VBP = (CVT, PBQ)
+PDL = (JPV, PRF)
+HRV = (BXG, RSN)
+XKN = (LNH, VFV)
+FLT = (SVV, RBM)
+TCN = (RBD, BTB)
+BVG = (LQD, MSV)
+LGL = (SGS, CDR)
+DVX = (PFH, VNJ)
+TRD = (SLB, NBR)
+VFR = (KJR, PVS)
+RFG = (BQF, BTK)
+GGS = (FGD, FGD)
+XPF = (KDD, RLC)
+TGD = (XPM, XXC)
+LKC = (FJH, CHT)
+JMT = (LSL, PTH)
+QQM = (KFC, BJN)
+HBQ = (SRK, XBQ)
+XVH = (VKN, JFQ)
+BNH = (MLT, HNC)
+DPL = (TJR, LRH)
+KQB = (VNN, SCT)
+LJV = (PSV, CQL)
+JPV = (HQN, FKC)
+HNC = (SHM, KNT)
+FNJ = (XBJ, GDF)
+NXG = (JNV, JHF)
+PFK = (GTF, VLD)
+FRP = (LSJ, QNX)
+SDH = (STJ, VKQ)
+RBK = (BLJ, XMX)
+VJJ = (JMT, CSK)
+FDX = (CXL, QTB)
+FLF = (MPF, TGD)
+FPH = (RLM, GJD)
+TNX = (RVN, FLF)
+PCL = (KVV, KGT)
+TDX = (FBG, BJT)
+HFD = (PHP, FRZ)
+SVN = (TLT, BCC)
+PFS = (XBV, BRG)
+CSK = (LSL, PTH)
+MQX = (LFJ, MNX)
+PHP = (BXQ, RTP)
+FVM = (FTF, QGG)
+MNX = (HRV, KFB)
+LNN = (BNJ, GSM)
+XMX = (BLT, HPL)
+XFP = (VCS, QJG)
+KKF = (SMQ, NTS)
+MRD = (FPJ, THT)
+QDD = (KBG, KQF)
+RTC = (CVK, TCT)
+XXC = (GGS, CDH)
+GJF = (BDR, FCM)
+HRM = (NPQ, HQM)
+LGC = (VLD, GTF)
+FHJ = (VFR, TGV)
+FXN = (RTK, RTK)
+PSL = (MNX, LFJ)
+SXR = (GLG, NPT)
+BVS = (BKF, NNH)
+JHA = (BXQ, RTP)
+VFV = (SHB, KVC)
+LQG = (SNH, JPD)
+XQL = (SNP, LFT)
+TDP = (LGM, TQV)
+LTL = (KGC, DMT)
+HML = (RBM, SVV)
+TKX = (NKV, GFD)
+BCM = (QHH, CNP)
+RFD = (KQS, CMN)
+MKS = (RJC, CSN)
+LHZ = (KQF, KBG)
+VSH = (HQG, TJF)
+DPP = (VNH, FDX)
+HRB = (SCT, VNN)
+MRF = (QQM, RFT)
+TGV = (PVS, KJR)
+PFB = (DKS, DPP)
+TCB = (QPG, PQF)
+SXH = (DHB, DHM)
+GHJ = (RSV, TRX)
+LSF = (HDR, DJJ)
+VVB = (GHJ, FGL)
+JFX = (CVT, PBQ)
+PXJ = (NXG, KPC)
+SVT = (MMQ, MMQ)
+VNH = (CXL, QTB)
+MHN = (KDD, RLC)
+FTF = (TCB, FQH)
+DSL = (QMN, JTP)
+FLL = (RTH, PVT)
+QQJ = (FHF, LVN)
+HSN = (QMV, FHG)
+BXP = (DHN, FMJ)
+KDD = (CNS, MLM)
+JVJ = (HVB, PKT)
+HQN = (FDS, PLJ)
+KQS = (NQB, JQL)
+MVG = (HKF, LKK)
+KCK = (CSJ, FNJ)
+CVK = (NFV, VMQ)
+NKX = (FSJ, MRM)
+HSJ = (RFG, FML)
+RBD = (BMH, KRL)
+MFL = (JNP, HBT)
+SDJ = (PQN, VTS)
+CDR = (QJV, FVM)
+GPG = (KGL, BGT)
+VNN = (BJF, TDL)
+VLB = (JCQ, TKJ)
+DXG = (BCM, GMS)
+FKB = (PLS, RGF)
+SVV = (GDQ, QVS)
+VSV = (VKN, JFQ)
+PRR = (MVX, FHN)
+PTH = (PXN, GJF)
+KFC = (LGC, PFK)
+DMP = (HBT, JNP)
+KGT = (GSJ, NHK)
+HXX = (GKC, LXQ)
+BDL = (NRQ, DHX)
+SLB = (SCC, SHL)
+NBR = (SCC, SHL)
+GHR = (NBB, GXF)
+PHT = (HDK, KRF)
+GMM = (LQV, MRK)
+MVV = (FPF, FRP)
+QCJ = (FMJ, DHN)
+LSL = (GJF, PXN)
+GCT = (PLG, TVL)
+FGD = (XXG, PRR)
+DLD = (FKH, NDR)
+VRD = (MQX, PSL)
+NDJ = (TRC, BSB)
+LCD = (JHN, MGP)
+SRN = (DPP, DKS)
+FRZ = (RTP, BXQ)
+GSM = (FJD, KCK)
+DCL = (LDG, JFT)
+LVM = (CLV, FDD)
+BTD = (PFS, HDG)
+HVB = (SVT, SVT)
+LDR = (HJK, PDJ)
+TQV = (CQJ, XJQ)
+JFZ = (SXH, KGM)
+PLJ = (HXX, JCR)
+JRX = (JMD, GHF)
+DJJ = (LQG, KFD)
+RPS = (RQB, GSH)
+QPG = (GXH, VDB)
+GJD = (FKB, STD)
+SNK = (LGM, TQV)
+LRR = (VGQ, HKJ)
+MXH = (GNB, FLL)
+MBR = (DTN, XLB)
+XJX = (RTK, FSV)
+BFV = (FXN, FXN)
+XRL = (LCP, HSJ)
+FDS = (HXX, JCR)
+HHR = (TCC, KMJ)
+GHF = (RMT, HGJ)
+XLJ = (HMG, QTF)
+JLM = (JFX, VBP)
+GNJ = (DMQ, BTD)
+KLM = (LJS, DPG)
+JNV = (NVM, GCL)
+QQN = (BMN, DSK)
+FJS = (NNX, FFX)
+GLG = (CLG, GTX)
+ZZZ = (QHN, FHJ)
+TRX = (QKR, JLP)
+QPP = (DTQ, JKV)
+XXX = (XPQ, SKF)
+DHB = (HXD, RPP)
+XXS = (QMR, QDS)
+PLS = (NVH, RJG)
+CRS = (STB, STB)
+SKK = (VLV, CBB)
+FHF = (FJS, RXK)
+NFK = (SNM, RDD)
+GXX = (LKC, XPS)
+GLX = (HCT, DFL)
+LNP = (BPT, NXJ)
+RLX = (JRG, HBQ)
+MSQ = (TRD, MTP)
+KXN = (RPS, KVD)
+JCB = (TPH, QBR)
+JLJ = (MMG, JRX)
+FHN = (RBK, VSL)
+DSB = (MMG, JRX)
+BTK = (RKQ, LFK)
+VCS = (JDB, BRX)
+SKF = (GRG, DPR)
+PQN = (DFX, NXN)
+MPF = (XPM, XPM)
+CDH = (FGD, XDZ)
+KRF = (SJJ, SXR)
+HNX = (LGL, SCX)
+TGH = (DTT, RLX)
+FPJ = (PHL, DCX)
+KFD = (JPD, SNH)
+FJH = (GLQ, RFD)
+LQV = (CRS, HPQ)
+RXQ = (HCT, DFL)
+TKJ = (NHV, FGM)
+SCX = (CDR, SGS)
+JLP = (KXN, CMX)
+TJV = (VHQ, MDL)
+DSK = (PDL, GVC)
+QHH = (HLP, NBV)
+NVM = (JDM, NFK)
+NNH = (QPP, XSG)
+VGQ = (PQT, PMS)
+CNS = (XMQ, PMD)
+LFJ = (KFB, HRV)
+FMJ = (QFM, PXJ)
+NRQ = (TKX, DGS)
+HDD = (HVB, PKT)
+JFN = (TKJ, JCQ)
+XPS = (CHT, FJH)
+SMQ = (KDT, BDD)
+JQK = (HQM, NPQ)
+RKQ = (GDB, GMN)
+FCM = (KQB, HRB)
+RLL = (BLN, QTL)
+BLN = (MBK, DSL)
+LJS = (XDD, FFK)
+BVT = (XKT, JTM)
+GNB = (RTH, PVT)
+RFX = (BSB, TRC)
+FVR = (MDJ, TJV)
+SJJ = (NPT, GLG)
+RKT = (RBD, BTB)
+LVN = (RXK, FJS)
+QDX = (XKT, JTM)
+HVS = (HML, FLT)
+QTB = (MRF, NSM)
+XXG = (FHN, MVX)
+BKF = (QPP, XSG)
+CSQ = (KCP, TGH)
+JVC = (DLD, BHF)
+SCS = (MSL, FTB)
+LDX = (PHT, KKM)
+TTM = (BTD, DMQ)
+VTS = (NXN, DFX)
+PHL = (BCT, XQT)
+RGM = (MQS, DCD)
+FJT = (FGC, NPC)
+DCD = (SCS, FKS)
+BHF = (NDR, FKH)
+FGC = (BVS, NBN)
+HMG = (LQK, QKN)
+KFV = (RLF, TKN)
+RPP = (GSR, VVM)
+LFK = (GDB, GMN)
+QKR = (CMX, KXN)
+NNX = (DGH, DCB)
+KVC = (LKQ, SDJ)
+MSB = (LCP, HSJ)
+XGN = (HQG, TJF)
+CMX = (KVD, RPS)
+DFL = (FJT, TXJ)
+QQH = (NQJ, XFP)
+HCT = (TXJ, FJT)
+HKJ = (PMS, PQT)
+LDG = (HNX, BNS)
+RTH = (HKG, LCD)
+NXJ = (RFX, NDJ)
+RBM = (GDQ, QVS)
+RKK = (TGH, KCP)
+MQS = (FKS, SCS)
+VVN = (XPK, CTT)
+XSG = (DTQ, JKV)
+TKN = (CKJ, CKH)
+CHT = (GLQ, RFD)
+PXN = (BDR, FCM)
+LCP = (FML, RFG)
+PFH = (JTR, HBN)
+TLT = (STM, JVB)
+GSP = (XGN, VSH)
+MMG = (GHF, JMD)
+CVT = (BVT, QDX)
+HXS = (CXC, MDR)
+PVN = (FHG, QMV)
+PVS = (MRD, TJC)
+XKT = (KFV, PPN)
+RFS = (LDR, KJK)
+NKV = (GCM, LSF)
+XQX = (BHF, DLD)
+VDX = (HCQ, MXH)
+DGS = (NKV, GFD)
+KGM = (DHB, DHM)
+GFC = (PCL, SSD)
+PDJ = (FMB, MHL)
+GSJ = (XXX, PQX)
+STM = (MGH, FQJ)
+MCK = (KVP, JGG)
+KGF = (BGT, KGL)
+PRF = (HQN, FKC)
+GKK = (MJL, XFS)
+HDG = (XBV, BRG)
+XJQ = (BXP, QCJ)
+JTP = (QQN, HVG)
+DFX = (JFN, VLB)
+FBN = (XVH, VSV)
+CMC = (GCQ, LJV)
+BQF = (LFK, RKQ)
+CKH = (DRB, XLQ)
+XJV = (PLG, TVL)
+VQH = (HSX, BBL)
+JJD = (XFD, QQR)
+GVC = (JPV, PRF)
+KFL = (GHJ, FGL)
+SHB = (LKQ, SDJ)
+NPT = (CLG, GTX)
+XNP = (VNX, PNT)
+LDD = (VVB, KFL)
+GFS = (DTN, XLB)
+MDR = (LMM, JXT)
+SSD = (KVV, KGT)
+THP = (MHN, XPF)
+BTB = (BMH, KRL)
+PJS = (DVG, GFC)
+LHT = (RKK, CSQ)
+QVH = (KGM, SXH)
+SRK = (DKF, JRP)
+GTX = (JLJ, DSB)
+BRL = (SDH, KSQ)
+CXL = (MRF, NSM)
+CSJ = (GDF, XBJ)
+TBC = (HJV, TNX)
+TVL = (MPQ, TDX)
+STD = (PLS, RGF)
+CSV = (QBR, TPH)
+GCL = (NFK, JDM)
+FMD = (FDD, CLV)
+TDL = (SNK, TDP)
+FQM = (QVH, JFZ)
+RNK = (JVC, XQX)
+KSN = (PRS, FQM)
+MPQ = (FBG, FBG)
+HVG = (BMN, DSK)
+RJG = (BGF, CPK)
+GTF = (RLL, JHS)
+SKM = (MMQ, HFD)
+DFT = (TJV, MDJ)
+CBB = (MCQ, MJX)
+FKH = (RGL, MSQ)
+HKF = (SGJ, VRD)
+QJG = (BRX, JDB)
+LNQ = (VVN, HLJ)
+LRH = (XXS, RMG)
+DGH = (KGF, GPG)
+GMS = (CNP, QHH)
+GMN = (DSN, GQT)
+DHJ = (NKX, FJG)
+DTN = (FBF, THP)
+KCP = (RLX, DTT)
+SLN = (XGP, LHL)
+PSV = (FBN, BDX)
+XBJ = (VBM, QQJ)
+XMQ = (MFL, DMP)
+KVV = (GSJ, NHK)
+BNJ = (FJD, KCK)
+HDK = (SJJ, SXR)
+VMQ = (MVG, KCT)
+MGP = (FHV, DVX)
+BLT = (NMM, BNH)
+DCB = (GPG, KGF)
+BMN = (PDL, GVC)
+DKS = (FDX, VNH)
+CRF = (XLJ, HFG)
+BDD = (LDX, SBV)
+XBQ = (DKF, JRP)
+CNP = (HLP, NBV)
+DCJ = (DPG, LJS)
+QMR = (SKK, TTC)
+LFT = (NVV, SSH)
+RVQ = (MDB, RFS)
+HVN = (CSN, RJC)
+CTQ = (GSL, RTC)
+MJX = (QFF, JVS)
+KKM = (KRF, HDK)
+RGL = (MTP, TRD)
+HSX = (LVM, FMD)
+FMN = (LNP, LPX)
+TJR = (RMG, XXS)
+JCQ = (NHV, FGM)
+QKN = (MSB, XRL)
+MDB = (KJK, LDR)
+JNP = (JCB, CSV)
+BJT = (KQG, ZZZ)
+RLF = (CKJ, CKH)
+JVS = (DHJ, HMS)
+NTM = (GMS, BCM)
+BMH = (RGM, RSP)
+HDR = (LQG, KFD)
+GSQ = (TLQ, CTQ)
+NKS = (HCQ, MXH)
+FBG = (KQG, KQG)
+QMB = (SMQ, NTS)
+KJK = (PDJ, HJK)
+FHV = (VNJ, PFH)
+JDM = (SNM, RDD)
+SSH = (RRK, SLN)
+NVV = (SLN, RRK)
+SGJ = (PSL, MQX)
+SHM = (QQH, FNT)
+JTM = (KFV, PPN)
+DKF = (MRC, HTG)
+MSL = (PJS, VVS)
+BSB = (DCJ, KLM)
+PLG = (MPQ, MPQ)
+FKS = (FTB, MSL)
+GXH = (GNJ, TTM)
+NML = (TJR, LRH)
+SBV = (PHT, KKM)
+BRX = (XQJ, RNK)
+FML = (BTK, BQF)
+GCM = (DJJ, HDR)
+XBV = (NKP, PVQ)
+JHF = (GCL, NVM)
+BFQ = (JQK, HRM)
+NPQ = (TDR, GSP)
+RSP = (DCD, MQS)
+DPR = (RVQ, NMT)
+DMT = (CGB, STH)
+SNM = (TDJ, GHR)
+XLQ = (MKS, HVN)
+GRG = (RVQ, NMT)
+JHN = (FHV, DVX)
+PKT = (SVT, SKM)
+KVD = (RQB, GSH)
+TCT = (NFV, VMQ)
+RTK = (QGP, QGP)
+FQH = (PQF, QPG)
+HXD = (VVM, GSR)
+PPN = (RLF, TKN)
+MTP = (NBR, SLB)
+JXT = (BFQ, VSM)
+PQV = (VNX, PNT)
+TJF = (RXL, GKK)
+NMM = (MLT, HNC)
+TDJ = (GXF, NBB)
+QFM = (NXG, KPC)
+MXC = (BNK, BDL)
+XPQ = (GRG, DPR)
+VVM = (GRR, FPH)
+BXG = (GXX, HHG)
+PVT = (LCD, HKG)
+LSJ = (NTM, DXG)
+BJF = (SNK, TDP)
+VNJ = (HBN, JTR)
+TDR = (XGN, VSH)
+NXN = (VLB, JFN)
+NKP = (XQL, KMT)
+MCQ = (QFF, JVS)
+HJK = (MHL, FMB)
+BLJ = (HPL, BLT)
+SNP = (NVV, SSH)
+RCJ = (FPF, FRP)
+XQJ = (JVC, XQX)
+CPT = (GCT, XJV)
+BCC = (JVB, STM)
+FSV = (QGP, TNZ)
+CMN = (JQL, NQB)
+RLM = (STD, FKB)
+STB = (KVP, KVP)
+JDB = (RNK, XQJ)
+VSM = (JQK, HRM)
+JPD = (HXS, HCC)
+BTV = (JMT, CSK)
+DHN = (PXJ, QFM)
+CQJ = (BXP, QCJ)
+MLT = (KNT, SHM)
+DMQ = (PFS, HDG)
+MBK = (QMN, JTP)
+NTS = (KDT, BDD)
+SCC = (FBK, LHT)
+HHG = (LKC, XPS)
+PRS = (QVH, QVH)
+TLQ = (RTC, GSL)
+BJN = (LGC, PFK)
+FBF = (MHN, XPF)
+VKQ = (LRR, LXJ)
+PQX = (XPQ, SKF)
+TNZ = (XKN, BRF)
+FJD = (FNJ, CSJ)
+JNJ = (CTQ, TLQ)
+HTG = (LNN, QXK)
+GHH = (HSX, BBL)
+BDX = (XVH, VSV)
+NBV = (TSM, SMX)
+LNH = (SHB, KVC)
+GLQ = (CMN, KQS)
+CKJ = (XLQ, DRB)
+HFS = (HML, FLT)
+STJ = (LXJ, LRR)
+QVS = (VJJ, BTV)
+HCQ = (GNB, FLL)
+RHM = (TLT, BCC)
+MRC = (LNN, QXK)
+DSN = (VDX, NKS)
+HCC = (CXC, MDR)
+FFX = (DCB, DGH)
+HPL = (NMM, BNH)
+DHM = (RPP, HXD)
+LXQ = (CPT, JKS)
+RLC = (MLM, CNS)
+BBT = (DMT, KGC)
+PQT = (VQH, GHH)
+BKV = (TCC, KMJ)
+KGL = (FHK, TBC)
+VLD = (JHS, RLL)
+DTQ = (MMK, DRL)
+HKG = (MGP, JHN)
+JKV = (DRL, MMK)
+CVH = (KSQ, SDH)
+QQR = (RKT, TCN)
+JGG = (QDD, LHZ)
+FSJ = (GSQ, JNJ)
+LXJ = (VGQ, HKJ)
+BPT = (NDJ, RFX)
+QGP = (BRF, XKN)
+JCR = (LXQ, GKC)
+DRB = (MKS, HVN)
+LQD = (DFT, FVR)
+VVS = (GFC, DVG)
+FQJ = (BVG, GTT)
+XHX = (JJD, NVN)
+MLM = (XMQ, PMD)
+QDS = (TTC, SKK)
+NMA = (KGM, SXH)
+HBN = (BBT, LTL)
+KQF = (HFS, HVS)
+PVQ = (XQL, KMT)
+CLV = (DDM, GMM)
+BXQ = (RCJ, MVV)
+GHQ = (FXN, XJX)
+RSN = (HHG, GXX)
+SGS = (QJV, FVM)
+PQB = (XLJ, HFG)
+MMK = (DCL, JRT)
+JRG = (SRK, XBQ)
+HXT = (BJC, CMC)
+GSH = (XNP, PQV)
+BNK = (DHX, NRQ)
+HQM = (GSP, TDR)
+BNM = (BNK, BDL)
+CPK = (LNF, NFL)
+JRP = (HTG, MRC)
+NHV = (GFS, MBR)
+NQB = (HXT, JVN)
+HLP = (SMX, TSM)
+PXA = (KBG, KQF)
\ No newline at end of file
diff --git a/solutions/2023/francisco/08/main.py b/solutions/2023/francisco/08/main.py
new file mode 100755
index 0000000..033258f
--- /dev/null
+++ b/solutions/2023/francisco/08/main.py
@@ -0,0 +1,54 @@
+from util import FileParser
+import os
+from dataclasses import dataclass
+import time
+from tqdm import tqdm
+import re
+import math
+
+
+dir_path = os.path.dirname(os.path.realpath(__file__))
+
+
+def part_1(file: str):
+ """should return the solution"""
+ parser = FileParser(dir_path, file)
+ data = parser.read()
+ directions = data[0]
+ nodes = {
+ v: (l, r) for v, l, r in (re.findall("[A-Z]{3}", line) for line in data[2:])
+ }
+
+ value = "AAA"
+ i = 0
+ while True:
+ if value == "ZZZ":
+ break
+ d = directions[i % (len(directions))]
+ value = nodes[value]["LR".index(d)]
+ i += 1
+
+ return i
+
+
+def part_2(file):
+ parser = FileParser(dir_path, file)
+ data = parser.read()
+ directions = data[0]
+ nodes = {
+ v: (l, r) for v, l, r in (re.findall("[A-Z]{3}", line) for line in data[2:])
+ }
+
+ values = [n for n in nodes.keys() if n[-1] == "A"]
+ def count_steps(value):
+ step = 0
+ while True:
+ if value[-1] == "Z":
+ break
+ d = directions[step % (len(directions))]
+ value = nodes[value]["LR".index(d)]
+ step += 1
+ return step
+
+ all_steps = [count_steps(value) for value in values]
+ return math.lcm(*all_steps)
diff --git a/solutions/2023/francisco/08/test.txt b/solutions/2023/francisco/08/test.txt
new file mode 100755
index 0000000..8ffe24b
--- /dev/null
+++ b/solutions/2023/francisco/08/test.txt
@@ -0,0 +1,10 @@
+LR
+
+CCA = (CCB, XXX)
+CCB = (XXX, CCZ)
+CCZ = (CCB, XXX)
+DDA = (DDB, XXX)
+DDB = (DDC, DDC)
+DDC = (DDZ, DDZ)
+DDZ = (DDB, DDB)
+XXX = (XXX, XXX)
\ No newline at end of file
diff --git a/solutions/2023/francisco/09/STATEMENT.md b/solutions/2023/francisco/09/STATEMENT.md
new file mode 100755
index 0000000..96f2dbb
--- /dev/null
+++ b/solutions/2023/francisco/09/STATEMENT.md
@@ -0,0 +1,177 @@
+
+--- Day 9: Mirage Maintenance ---
+---------------------------------
+
+You ride the camel through the sandstorm and stop where the ghost's maps told you to stop. The sandstorm subsequently subsides, somehow seeing you standing at an *oasis*!
+
+
+The camel goes to get some water and you stretch your neck. As you look up, you discover what must be yet another giant floating island, this one made of metal! That must be where the *parts to fix the sand machines* come from.
+
+
+There's even a [hang glider](https://en.wikipedia.org/wiki/Hang_gliding) partially buried in the sand here; once the sun rises and heats up the sand, you might be able to use the glider and the hot air to get all the way up to the metal island!
+
+
+While you wait for the sun to rise, you admire the oasis hidden here in the middle of Desert Island. It must have a delicate ecosystem; you might as well take some ecological readings while you wait. Maybe you can report any environmental instabilities you find to someone so the oasis can be around for the next sandstorm-worn traveler.
+
+
+You pull out your handy *Oasis And Sand Instability Sensor* and analyze your surroundings. The OASIS produces a report of many values and how they are changing over time (your puzzle input). Each line in the report contains the *history* of a single value. For example:
+
+
+
+```
+0 3 6 9 12 15
+1 3 6 10 15 21
+10 13 16 21 30 45
+
+```
+
+To best protect the oasis, your environmental report should include a *prediction of the next value* in each history. To do this, start by making a new sequence from the *difference at each step* of your history. If that sequence is *not* all zeroes, repeat this process, using the sequence you just generated as the input sequence. Once all of the values in your latest sequence are zeroes, you can extrapolate what the next value of the original history should be.
+
+
+In the above dataset, the first history is `0 3 6 9 12 15`. Because the values increase by `3` each step, the first sequence of differences that you generate will be `3 3 3 3 3`. Note that this sequence has one fewer value than the input sequence because at each step it considers two numbers from the input. Since these values aren't *all zero*, repeat the process: the values differ by `0` at each step, so the next sequence is `0 0 0 0`. This means you have enough information to extrapolate the history! Visually, these sequences can be arranged like this:
+
+
+
+```
+0 3 6 9 12 15
+ 3 3 3 3 3
+ 0 0 0 0
+
+```
+
+To extrapolate, start by adding a new zero to the end of your list of zeroes; because the zeroes represent differences between the two values above them, this also means there is now a placeholder in every sequence above it:
+
+```
+0 3 6 9 12 15 *B*
+ 3 3 3 3 3 *A*
+ 0 0 0 0 *0*
+
+```
+
+You can then start filling in placeholders from the bottom up. `A` needs to be the result of increasing `3` (the value to its left) by `0` (the value below it); this means `A` must be `*3*`:
+
+
+
+```
+0 3 6 9 12 15 B
+ 3 3 3 3 *3* *3*
+ 0 0 0 0 *0*
+
+```
+
+Finally, you can fill in `B`, which needs to be the result of increasing `15` (the value to its left) by `3` (the value below it), or `*18*`:
+
+
+
+```
+0 3 6 9 12 *15* *18*
+ 3 3 3 3 3 *3*
+ 0 0 0 0 0
+
+```
+
+So, the next value of the first history is `*18*`.
+
+
+Finding all-zero differences for the second history requires an additional sequence:
+
+
+
+```
+1 3 6 10 15 21
+ 2 3 4 5 6
+ 1 1 1 1
+ 0 0 0
+
+```
+
+Then, following the same process as before, work out the next value in each sequence from the bottom up:
+
+
+
+```
+1 3 6 10 15 21 *28*
+ 2 3 4 5 6 *7*
+ 1 1 1 1 *1*
+ 0 0 0 *0*
+
+```
+
+So, the next value of the second history is `*28*`.
+
+
+The third history requires even more sequences, but its next value can be found the same way:
+
+
+
+```
+10 13 16 21 30 45 *68*
+ 3 3 5 9 15 *23*
+ 0 2 4 6 *8*
+ 2 2 2 *2*
+ 0 0 *0*
+
+```
+
+So, the next value of the third history is `*68*`.
+
+
+If you find the next value for each history in this example and add them together, you get `*114*`.
+
+
+Analyze your OASIS report and extrapolate the next value for each history. *What is the sum of these extrapolated values?*
+
+
+
+
+
+
+
+Your puzzle answer was `2005352194`.
+
+The first half of this puzzle is complete! It provides one gold star: \*
+
+
+--- Part Two ---
+----------------
+
+Of course, it would be nice to have *even more history* included in your report. Surely it's safe to just *extrapolate backwards* as well, right?
+
+
+For each history, repeat the process of finding differences until the sequence of differences is entirely zero. Then, rather than adding a zero to the end and filling in the next values of each previous sequence, you should instead add a zero to the *beginning* of your sequence of zeroes, then fill in new *first* values for each previous sequence.
+
+
+In particular, here is what the third example history looks like when extrapolating back in time:
+
+
+
+```
+*5* 10 13 16 21 30 45
+ *5* 3 3 5 9 15
+ *-2* 0 2 4 6
+ *2* 2 2 2
+ *0* 0 0
+
+```
+
+Adding the new values on the left side of each sequence from bottom to top eventually reveals the new left-most history value: `*5*`.
+
+
+Doing this for the remaining example data above results in previous values of `*-3*` for the first history and `*0*` for the second history. Adding all three new values together produces `*2*`.
+
+
+Analyze your OASIS report again, this time extrapolating the *previous* value for each history. *What is the sum of these extrapolated values?*
+
+
+
+Answer:
+
+
+Although it hasn't changed, you can still [get your puzzle input](9/input).
+
+
+You can also [Shareon
+ [Twitter](https://twitter.com/intent/tweet?text=I%27ve+completed+Part+One+of+%22Mirage+Maintenance%22+%2D+Day+9+%2D+Advent+of+Code+2023&url=https%3A%2F%2Fadventofcode%2Ecom%2F2023%2Fday%2F9&related=ericwastl&hashtags=AdventOfCode)
+[Mastodon](javascript:void(0);)] this puzzle.
+
+
diff --git a/solutions/2023/francisco/09/__init__.py b/solutions/2023/francisco/09/__init__.py
new file mode 100755
index 0000000..e69de29
diff --git a/solutions/2023/francisco/09/final.txt b/solutions/2023/francisco/09/final.txt
new file mode 100755
index 0000000..a7b8f77
--- /dev/null
+++ b/solutions/2023/francisco/09/final.txt
@@ -0,0 +1,200 @@
+3 -3 -6 11 81 262 654 1429 2882 5527 10296 18955 34930 64825 120957 225074 412708 735639 1255391 2011191 2927270
+13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
+18 44 80 138 241 419 713 1199 2046 3624 6680 12602 23793 44179 79877 140051 237986 392412 629112 982850 1499657
+4 10 16 22 28 34 40 46 52 58 64 70 76 82 88 94 100 106 112 118 124
+8 31 66 118 205 361 636 1092 1794 2795 4114 5706 7423 8965 9820 9192 5916 -1641 -15694 -39170 -75855
+21 31 41 51 61 71 81 91 101 111 121 131 141 151 161 171 181 191 201 211 221
+10 22 34 46 58 70 82 94 106 118 130 142 154 166 178 190 202 214 226 238 250
+1 -2 -1 24 123 400 1046 2381 4905 9358 16789 28634 46803 73776 112708 167543 243137 345390 481387 659548 889787
+4 9 22 63 160 356 735 1480 2994 6143 12726 26361 54133 109647 218717 430155 836788 1617537 3123198 6051903 11804234
+14 19 21 24 35 63 119 217 376 623 997 1554 2373 3563 5271 7691 11074 15739 22085 30604 41895
+-5 -14 -20 -19 -9 7 18 2 -75 -246 -489 -592 103 3089 11153 28697 61471 114898 189638 272303 318255
+4 6 10 8 -9 -50 -128 -260 -443 -575 -279 1423 6650 19491 47209 101917 202834 379240 674260 1149618 1891513
+4 4 11 40 111 257 535 1039 1928 3506 6419 12059 23294 45731 90042 176880 348530 697505 1434994 3046426 6624525
+1 12 40 96 198 379 697 1247 2175 3694 6102 9802 15324 23349 34735 50545 72077 100896 138868 188196 251458
+1 3 21 68 154 279 433 616 901 1595 3632 9495 25275 65054 159865 375410 846109 1838823 3869067 7907554 15737988
+4 9 21 42 74 125 227 484 1181 2998 7386 17175 37497 77120 150302 279287 497578 854135 1418659 2288136 3594828
+10 12 17 36 96 240 522 996 1698 2620 3675 4652 5160 4560 1884 -4260 -15798 -35316 -66203 -112812 -180640
+11 34 85 190 388 731 1284 2125 3345 5048 7351 10384 14290 19225 25358 32871 41959 52830 65705 80818 98416
+28 38 52 78 133 261 557 1197 2478 4885 9238 17057 31462 59268 115551 233040 480604 998608 2065504 4222512 8506623
+23 52 100 171 268 389 520 625 633 422 -200 -1517 -3930 -7985 -14404 -24119 -38309 -58440 -86308 -124085 -174368
+4 16 43 85 142 214 301 403 520 652 799 961 1138 1330 1537 1759 1996 2248 2515 2797 3094
+4 12 35 82 170 341 696 1460 3104 6578 13768 28402 57837 116551 232922 462330 912320 1790376 3493053 6768602 13006272
+14 31 74 162 327 629 1188 2245 4277 8228 16001 31523 63018 127736 261523 537660 1102936 2244813 4513004 8933472 17374961
+20 45 95 183 338 630 1206 2335 4467 8324 15059 26559 46079 79681 139617 252193 475345 935938 1904606 3937618 8130943
+-9 -14 -13 13 106 350 908 2100 4569 9612 19787 39960 79088 153404 292626 553025 1045835 1998494 3882531 7669911 15325462
+21 48 90 158 273 474 829 1453 2542 4449 7875 14348 27346 54729 113662 240131 506947 1057846 2173056 4397514 8793799
+22 33 39 38 26 -9 -90 -229 -345 -65 1693 7537 23135 59991 140290 305058 627444 1233661 2335051 4275896 7603016
+6 18 45 112 269 605 1272 2540 4925 9475 18382 36241 72550 146516 296015 593807 1176040 2290960 4379915 8208614 15074675
+16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56
+1 4 13 32 70 146 304 652 1460 3396 8055 19048 44057 98406 210845 432516 850939 1613556 2972573 5379680 9694792
+16 21 44 112 268 590 1226 2461 4854 9527 18779 37383 75279 153016 312397 636625 1287305 2570722 5054223 9767479 18546415
+-3 1 12 30 55 87 126 172 225 285 352 426 507 595 690 792 901 1017 1140 1270 1407
+23 32 41 50 59 68 77 86 95 104 113 122 131 140 149 158 167 176 185 194 203
+16 30 49 75 120 208 372 655 1141 2068 4129 9193 21952 53530 129005 302219 683258 1486530 3110197 6260231 12133468
+8 24 55 125 271 550 1066 2043 3986 7993 16315 33326 67193 132777 256722 486398 905484 1660670 3006423 5378243 9509619
+0 -3 -6 -11 -27 -73 -174 -348 -578 -755 -571 660 4265 12545 29117 59131 109124 186133 295508 436639 595533
+6 13 29 58 111 221 473 1057 2370 5224 11256 23671 48470 96335 185431 345711 626202 1108763 1935803 3366692 5889861
+17 28 41 62 99 159 257 451 920 2121 5116 12284 28882 66394 149509 330320 716811 1529626 3214711 6665350 13654853
+-6 5 36 100 223 467 964 1964 3909 7571 14364 27108 51874 102228 208496 437087 929332 1977347 4169032 8660650 17682393
+-2 4 26 82 208 465 953 1842 3430 6238 11152 19622 33928 57523 95463 154934 245886 381784 580486 865258 1265936
+18 23 31 46 79 154 314 627 1192 2145 3665 5980 9373 14188 20836 29801 41646 57019 76659 101402 132187
+16 16 20 40 91 199 423 899 1925 4118 8682 17824 35336 67317 122931 214975 359854 576316 881976 1286240 1777713
+-3 -4 -2 2 7 12 16 18 17 12 2 -14 -37 -68 -108 -158 -219 -292 -378 -478 -593
+12 9 20 55 119 225 429 896 2007 4527 9882 20648 41446 80573 152889 284733 521966 942645 1676328 2932605 5042153
+10 4 -8 -25 -47 -80 -141 -263 -500 -932 -1670 -2861 -4693 -7400 -11267 -16635 -23906 -33548 -46100 -62177 -82475
+-2 7 38 102 211 378 617 943 1372 1921 2608 3452 4473 5692 7131 8813 10762 13003 15562 18466 21743
+3 14 41 85 150 258 476 962 2049 4412 9425 19949 42048 88572 186252 389014 801743 1620834 3200689 6159005 11538410
+24 49 88 148 241 384 599 913 1358 1971 2794 3874 5263 7018 9201 11879 15124 19013 23628 29056 35389
+12 11 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8
+8 9 15 26 42 63 89 120 156 197 243 294 350 411 477 548 624 705 791 882 978
+-5 8 36 79 137 210 298 401 519 652 800 963 1141 1334 1542 1765 2003 2256 2524 2807 3105
+3 6 24 67 149 296 551 984 1728 3075 5679 10926 21544 42539 82556 155777 284481 502404 859050 1425117 2299215
+7 5 9 45 161 446 1058 2258 4451 8252 14630 25240 43135 74156 129417 229404 410231 732435 1292175 2233571 3758813
+7 5 13 39 99 238 568 1327 2973 6346 12959 25516 48801 91137 166678 298870 525499 905835 1530481 2534645 4115671
+5 5 12 44 127 294 583 1027 1623 2269 2674 2285 361 -3479 -7447 -2669 39073 194430 655277 1878326 4913481
+15 30 71 154 304 563 999 1731 3006 5397 10248 20595 42980 90914 191341 396470 805013 1599528 3110673 5925336 11064604
+21 30 54 105 201 384 756 1535 3126 6202 11814 21634 38650 69089 127219 246265 501481 1056384 2251952 4774113 9961901
+2 0 -7 -19 -36 -58 -85 -117 -154 -196 -243 -295 -352 -414 -481 -553 -630 -712 -799 -891 -988
+21 37 61 101 170 286 472 756 1171 1755 2551 3607 4976 6716 8890 11566 14817 18721 23361 28825 35206
+2 0 -7 -13 7 107 383 991 2184 4411 8581 16723 33539 69860 149938 326108 707143 1511667 3167550 6496976 13064172
+18 31 47 73 126 241 490 1023 2156 4562 9677 20534 43434 91257 189989 391476 797918 1607725 3198751 6274407 12111638
+1 -4 -10 -16 -14 19 129 393 927 1894 3512 6062 9896 15445 23227 33855 48045 66624 90538 120860 158798
+15 26 36 47 64 101 209 549 1553 4261 11002 26707 61302 133821 279077 557868 1071635 1981960 3533816 6078267 10084124
+8 29 71 160 345 716 1439 2829 5490 10556 20076 37611 69169 124717 220704 384338 660820 1125391 1902941 3199114 5348377
+28 40 50 59 72 105 207 524 1457 3999 10375 25152 57031 121578 245194 470663 864650 1527546 2606072 4309057 6926794
+-1 10 29 56 91 134 185 244 311 386 469 560 659 766 881 1004 1135 1274 1421 1576 1739
+15 13 4 -19 -64 -129 -185 -160 71 703 2082 4997 11511 27016 64864 156081 368507 842365 1852724 3913217 7938726
+11 17 22 30 61 165 449 1134 2665 5900 12404 24871 47691 87670 154899 263753 433983 691843 1071170 1614308 2372737
+10 24 56 125 264 539 1082 2140 4142 7786 14148 24815 42044 68949 109718 169862 256498 378668 547696 777585 1085456
+10 4 -5 -6 30 162 508 1300 2974 6308 12625 24071 43952 77090 130227 212874 340009 540079 875058 1483207 2656869
+6 26 60 108 170 246 336 440 558 690 836 996 1170 1358 1560 1776 2006 2250 2508 2780 3066
+27 44 64 93 158 320 687 1427 2781 5076 8738 14305 22440 33944 49769 71031 99023 135228 181332 239237 311074
+22 45 77 115 156 197 235 267 290 301 297 275 232 165 71 -53 -210 -403 -635 -909 -1228
+10 27 74 180 385 741 1319 2221 3589 5596 8399 12036 16283 20627 24921 32274 57808 150885 445444 1264840 3326281
+4 9 14 10 -11 -44 -39 174 1032 3504 9565 23061 51302 107957 218169 427322 815775 1523724 2794751 5057405 9089818
+-6 3 32 94 205 386 672 1132 1913 3337 6103 11676 22982 45572 89469 171970 321740 584607 1031546 1769426 2955187
+13 33 75 168 367 762 1487 2732 4761 7939 12771 19956 30459 45604 67191 97640 140165 198981 279547 388848 535719
+-2 8 45 133 315 668 1328 2528 4645 8240 14058 22933 35516 51712 69675 84168 84048 48584 -57741 -292355 -744127
+17 31 46 69 111 197 386 796 1629 3191 5902 10291 16971 26589 39746 56882 78121 103071 130574 158401 182887
+24 47 96 198 389 718 1269 2218 3946 7240 13642 26061 49855 94729 177991 329971 602748 1083757 1916372 3330192 5684505
+12 24 62 143 283 495 787 1165 1663 2455 4158 8515 19758 47098 108977 239951 501358 997266 1897598 3470799 6128949
+4 9 16 22 24 19 4 -24 -68 -131 -216 -326 -464 -633 -836 -1076 -1356 -1679 -2048 -2466 -2936
+17 39 83 173 357 717 1392 2626 4864 8949 16535 30946 58909 113909 222399 434786 844038 1615986 3037174 5589190 10064700
+17 31 51 85 155 309 633 1263 2397 4307 7351 11985 18775 28409 41709 59643 83337 114087 153371 202861 264435
+14 13 22 54 125 264 528 1028 1986 3858 7576 15002 29802 59244 118087 237089 481374 989363 2054237 4293311 8998717
+19 36 61 94 135 184 241 306 379 460 549 646 751 864 985 1114 1251 1396 1549 1710 1879
+-8 -9 -9 2 51 199 566 1370 3008 6250 12703 25863 53356 111454 233791 487703 1004407 2034620 4051822 7946267 15393468
+15 31 60 122 253 522 1077 2250 4761 10081 21062 43051 85935 168014 323419 616195 1166443 2197435 4117856 7660872 14112281
+17 25 44 85 164 302 525 864 1355 2039 2962 4175 5734 7700 10139 13122 16725 21029 26120 32089 39032
+14 29 70 163 349 691 1286 2283 3919 6612 11196 19458 35279 66985 132182 267789 551009 1143219 2381512 4968628 10365080
+18 44 83 137 222 382 710 1397 2859 6035 13008 28181 60360 126307 256733 506486 972132 1822622 3352801 6075781 10879406
+-6 -14 -26 -42 -62 -81 -71 68 612 2202 6157 14961 32985 67535 130456 241024 432315 766918 1376339 2556786 4991761
+23 29 31 26 5 -40 -95 -80 245 1481 4999 13719 33503 75514 160033 322405 622011 1155445 2075423 3617376 6136193
+20 24 37 80 182 381 725 1277 2143 3582 6334 12440 27078 62409 145346 332998 743218 1614884 3426187 7124108 14562042
+21 26 28 27 23 16 6 -7 -23 -42 -64 -89 -117 -148 -182 -219 -259 -302 -348 -397 -449
+2 13 29 55 107 217 444 894 1752 3329 6127 10925 18889 31709 51766 82332 127806 193989 288401 420643 602807
+5 16 29 44 61 80 101 124 149 176 205 236 269 304 341 380 421 464 509 556 605
+19 30 46 79 152 293 539 965 1753 3316 6492 12823 24934 47027 85505 149741 253007 413578 656026 1012719 1525540
+9 26 65 143 282 512 880 1470 2444 4131 7233 13298 25744 51914 106888 220002 445015 874132 1653633 2992813 5145074
+15 25 44 84 171 356 728 1443 2803 5447 10756 21647 44088 90001 182883 368685 736547 1457289 2852608 5515354 10511813
+8 2 8 39 112 257 541 1125 2392 5213 11456 24898 52790 108483 215818 416576 783552 1444618 2629383 4763916 8669398
+15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75
+-8 -9 -9 -12 -14 17 182 730 2199 5652 13052 27827 55662 105486 190450 328388 540902 850213 1274345 1826386 2536966
+18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78
+20 27 37 71 179 454 1046 2176 4150 7373 12363 19765 30365 45104 65092 91622 126184 170479 226433 296211 382231
+16 32 54 82 116 156 202 254 312 376 446 522 604 692 786 886 992 1104 1222 1346 1476
+2 0 -8 -17 -9 49 216 607 1452 3209 6811 14265 30113 64825 142199 314558 692342 1499130 3169922 6520631 13031435
+6 3 5 18 48 101 183 300 458 663 921 1238 1620 2073 2603 3216 3918 4715 5613 6618 7736
+14 17 24 47 116 289 673 1464 3020 6006 11706 22713 44443 88375 178754 365935 751902 1537171 3103792 6157135 11960346
+4 15 31 62 139 330 770 1725 3731 7891 16487 34191 70374 143364 288052 569050 1102718 2092823 3886351 7057972 12533669
+18 33 72 149 293 571 1135 2305 4700 9442 18491 35235 65592 120159 218532 398160 732650 1369573 2607917 5054968 9940605
+21 40 69 114 185 291 441 664 1068 1976 4214 9692 22526 51111 111788 235070 475823 929360 1756123 3218526 5734639
+21 36 68 122 202 321 517 882 1623 3193 6563 13766 28954 60409 124306 251647 500833 980054 1886390 3572686 6659498
+14 16 26 50 86 127 182 334 860 2447 6555 16007 35930 75232 148879 281333 511626 900674 1541576 2573792 4202246
+8 18 39 81 172 371 796 1686 3540 7425 15634 33029 69674 145850 301431 613192 1226392 2411628 4665481 8885225 16665640
+18 31 55 111 236 496 1003 1935 3568 6350 11077 19275 33974 61235 113157 213801 410742 797097 1552267 3014767 5808008
+4 14 47 127 302 667 1407 2864 5634 10719 19821 36022 65436 121086 231453 458141 930264 1907948 3894323 7825249 15379602
+1 12 32 60 95 136 182 232 285 340 396 452 507 560 610 656 697 732 760 780 791
+-5 1 19 55 118 221 391 701 1350 2840 6330 14290 31656 67861 140511 282307 554433 1072559 2056593 3923381 7454062
+18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 132 138
+24 46 80 126 191 307 562 1153 2470 5232 10742 21451 42307 83974 170212 353949 750508 1603022 3405588 7125936 14593623
+10 24 47 79 120 170 229 297 374 460 555 659 772 894 1025 1165 1314 1472 1639 1815 2000
+9 23 34 48 97 249 608 1313 2562 4711 8534 15784 30274 59809 119454 236829 460391 872007 1605554 2873816 5006599
+8 10 21 52 128 316 767 1772 3832 7742 14689 26364 45088 73952 116971 179252 267176 388594 553037 771940 1058880
+-1 4 15 28 32 10 -52 -145 -203 -52 661 2562 6670 14546 28474 51677 88571 145060 228875 349960 520908
+26 38 50 57 59 66 100 192 368 622 902 1224 2258 7248 27189 93189 283490 778558 1967142 4640795 10336057
+9 15 19 18 9 -11 -45 -96 -167 -261 -381 -530 -711 -927 -1181 -1476 -1815 -2201 -2637 -3126 -3671
+2 18 46 92 168 286 458 720 1217 2415 5549 13493 32398 74786 165508 353467 735078 1501728 3036334 6110098 12282606
+11 9 15 47 145 387 918 2015 4240 8790 18257 38186 80094 167022 343274 690796 1355713 2589927 4814443 8713297 15369679
+7 12 28 66 153 344 749 1596 3356 6962 14172 28177 54673 103862 194349 360944 670572 1255091 2379262 4581040 8958398
+8 33 79 165 325 616 1133 2046 3686 6731 12604 24331 48381 98542 203923 425220 887476 1845760 3816527 7839674 15999097
+17 38 72 129 223 386 694 1309 2556 5092 10298 21148 43994 91966 191034 390228 778075 1508002 2836284 5177099 9180401
+26 40 63 104 171 276 445 737 1280 2343 4489 8903 18069 37089 76103 154490 307814 598834 1134331 2090026 3746479
+15 27 38 48 57 65 72 78 83 87 90 92 93 93 92 90 87 83 78 72 65
+13 25 56 128 276 555 1053 1915 3386 5895 10241 18020 32563 60853 117168 229571 450851 876125 1670054 3107520 5632670
+7 26 54 102 192 354 623 1035 1621 2398 3356 4440 5526 6390 6669 5813 3027 -2798 -13166 -30070 -56100
+18 21 21 32 87 242 589 1294 2694 5525 11420 23922 50413 105578 217316 436392 851610 1612893 2965399 5298700 9216123
+1 4 11 16 14 6 3 34 171 592 1711 4412 10432 22946 47415 92766 172981 309180 532291 886408 1432946
+-3 4 29 89 209 426 799 1432 2529 4529 8432 16563 34303 73868 162247 357281 779243 1671420 3514465 7240023 14627059
+8 18 30 41 56 94 189 386 732 1262 1980 2835 3692 4298 4243 2916 -544 -7302 -18886 -37251 -64848
+6 24 57 119 234 433 747 1196 1774 2430 3045 3405 3170 1839 -1289 -7158 -17002 -32396 -55311 -88173 -133926
+3 22 54 109 213 427 893 1921 4132 8673 17521 33894 62788 111660 191278 316760 508825 795280 1212768 1808803 2644119
+14 24 36 66 152 362 808 1683 3349 6517 12584 24258 46773 90375 175496 343325 676584 1338526 2642844 5173714 9984030
+9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
+-5 1 16 40 73 115 166 226 295 373 460 556 661 775 898 1030 1171 1321 1480 1648 1825
+10 17 39 97 237 543 1161 2341 4511 8429 15540 28829 54758 107394 216764 445231 919185 1890483 3856610 7797591 15644256
+11 36 71 109 137 134 85 27 159 1088 4352 13460 35825 86172 192368 405330 816051 1585380 2996813 5550367 10128233
+12 22 30 36 40 42 42 40 36 30 22 12 0 -14 -30 -48 -68 -90 -114 -140 -168
+0 12 31 68 148 318 664 1353 2743 5643 11863 25294 53960 113928 236941 485710 984942 1984002 3981123 7963052 15853384
+10 29 59 111 211 416 842 1704 3368 6415 11717 20525 34569 56170 88364 135038 201078 292529 416767 582683 800879
+18 37 82 172 339 635 1139 1964 3264 5241 8152 12316 18121 26031 36593 50444 68318 91053 119598 155020 198511
+-4 -4 -4 -2 2 12 63 280 980 2828 7058 15770 32314 61772 111549 192084 317692 507548 786824 1187990 1752290
+10 21 41 67 97 132 193 361 840 2029 4567 9283 16939 27596 39359 46165 34166 -23875 -176915 -507613 -1149099
+9 16 48 127 285 566 1022 1705 2677 4099 6519 11549 23177 49951 108115 225374 444273 823370 1434170 2353919 3662437
+17 31 69 140 244 377 554 860 1556 3308 7684 18207 42526 96801 214446 463438 980455 2037977 4175435 8453098 16936764
+26 37 39 31 16 1 -3 19 86 221 451 807 1324 2041 3001 4251 5842 7829 10271 13231 16776
+6 8 14 24 33 28 -15 -125 -304 -436 -59 2197 9981 32458 91584 237580 580114 1348072 2999080 6412278 13215705
+1 14 49 121 265 560 1163 2363 4687 9124 17576 33693 64309 121813 228105 421661 771461 1406734 2582671 4824785 9237377
+5 24 59 116 203 336 566 1038 2093 4426 9317 18958 36907 68710 122744 211348 352325 570916 902367 1395232 2115579
+14 28 52 100 192 355 622 1029 1630 2595 4548 9477 22854 58099 145288 347179 787506 1699753 3510862 6987131 13496564
+23 42 78 135 212 318 503 916 1914 4268 9556 20933 44706 93696 194600 404170 844298 1776402 3755153 7938413 16698553
+4 16 44 101 200 354 576 879 1276 1780 2404 3161 4064 5126 6360 7779 9396 11224 13276 15565 18104
+19 26 35 52 88 163 325 700 1602 3757 8731 19701 42791 89378 180201 353043 677629 1284828 2423155 4565130 8600794
+-3 -9 -18 -23 -13 31 159 511 1434 3678 8689 19027 38997 75770 141740 259876 475815 884065 1681920 3274913 6473747
+-1 -4 -11 -27 -51 -68 -39 111 507 1340 2885 5521 9753 16236 25801 39483 58551 84540 119285 164957 224101
+20 45 87 150 243 384 601 937 1484 2494 4653 9676 21518 48759 109239 239048 509979 1063303 2174445 4374675 8674970
+7 15 32 71 146 269 459 779 1425 2906 6377 14229 31133 65956 135486 272066 539695 1068049 2123094 4249471 8548096
+-3 -8 -20 -45 -84 -115 -59 272 1237 3420 7656 15033 26970 45749 76574 133795 257173 550304 1264656 2972243 6902312
+16 18 31 63 127 266 595 1361 3031 6434 13014 25323 48061 90400 171303 331586 660400 1350842 2811195 5877039 12198113
+16 29 62 137 293 591 1119 2004 3447 5805 9759 16647 29131 52538 97509 185084 356224 689446 1333640 2570032 4930795
+14 25 42 80 159 304 545 917 1460 2219 3244 4590 6317 8490 11179 14459 18410 23117 28670 35164 42699
+8 11 18 35 70 133 239 437 909 2216 5819 15078 37037 85444 185638 382166 750278 1412793 2564240 4504661 7686024
+0 -5 -10 -15 -20 -25 -30 -35 -40 -45 -50 -55 -60 -65 -70 -75 -80 -85 -90 -95 -100
+9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69
+3 5 4 -3 -29 -102 -270 -606 -1213 -2229 -3832 -6245 -9741 -14648 -21354 -30312 -42045 -57151 -76308 -100279 -129917
+11 21 40 68 105 151 206 270 343 425 516 616 725 843 970 1106 1251 1405 1568 1740 1921
+11 12 16 37 112 315 773 1684 3334 6103 10439 16764 25257 35436 45434 50833 42885 5910 -86382 -275945 -627178
+10 30 71 160 336 658 1228 2230 3986 7033 12228 20899 35116 58344 97220 166227 299010 573556 1164241 2442954 5165712
+4 2 8 31 93 240 551 1156 2290 4431 8598 16922 33651 66811 130821 250453 466640 844768 1486244 2544313 4245305
+21 46 82 122 162 220 361 724 1544 3156 5961 10331 16455 24252 33871 48339 82391 186970 510216 1438112 3900024
+4 3 19 69 181 411 868 1740 3317 6015 10415 17340 27998 44217 68786 105891 161594 244243 364619 535519 770339
+21 43 88 180 360 690 1258 2190 3683 6093 10150 17433 31338 58958 114665 226911 451126 894072 1759581 3434347 6649853
+6 6 18 64 189 470 1018 1986 3611 6333 11049 19575 35404 64863 118787 214843 380652 657872 1107420 1816026 2904327
+1 21 53 104 197 374 698 1259 2187 3677 6054 9978 17056 31478 64024 141355 326905 766973 1790631 4121652 9316291
+18 23 38 74 148 295 587 1163 2280 4406 8403 15919 30274 58468 115582 233962 481414 995521 2045548 4139776 8205192
+25 35 44 68 145 358 879 2049 4523 9529 19316 37898 72239 134068 242563 428199 738117 1243439 2049028 3306272 5229557
+8 6 4 2 0 -2 -4 -6 -8 -10 -12 -14 -16 -18 -20 -22 -24 -26 -28 -30 -32
+17 41 73 118 193 335 623 1231 2534 5302 11045 22630 45413 89379 173266 332522 634427 1206099 2284773 4305170 8046541
+-1 10 44 123 284 598 1217 2475 5095 10593 22028 45351 91829 182531 357015 690824 1331387 2571436 4996276 9771015 19183246
+-3 8 34 72 130 238 455 883 1710 3323 6583 13481 28677 63005 141147 317725 709621 1558274 3345274 6999654 14258862
+12 15 10 -1 -1 52 235 670 1534 3069 5592 9505 15305 23594 35089 50632 71200 97915 132054 175059 228547
+18 37 70 126 234 459 930 1893 3812 7557 14740 28288 53376 98883 179580 319311 555486 945269 1573914 2565778 4098622
+2 12 41 103 210 380 669 1241 2493 5265 11202 23415 47749 95290 187396 365834 713116 1392846 2728495 5354259 10497892
+3 -2 -5 -7 -14 -36 -70 -54 221 1254 4045 10387 23252 47284 89412 159596 271719 444638 703407 1080685 1618342
+23 40 68 121 220 404 756 1458 2903 5923 12249 25409 52398 106623 212837 415028 788519 1457858 2622426 4592057 7835336
+6 3 5 23 72 163 291 419 458 243 -495 -2161 -5332 -10797 -19601 -33093 -52978 -81373 -120867 -174585 -246256
+-8 2 25 61 110 172 247 335 436 550 677 817 970 1136 1315 1507 1712 1930 2161 2405 2662
+14 25 51 110 223 421 774 1468 2968 6319 13657 29032 59689 118015 224444 411722 731074 1260989 2119551 3481498 5601491
+8 27 69 157 321 595 1027 1725 2968 5429 10599 21587 44639 92035 187591 376965 746552 1457231 2802953 5309577 9897013
+13 21 40 98 233 490 921 1598 2662 4447 7742 14304 27851 56024 114354 234353 479890 979752 1991106 4021230 8059042
diff --git a/solutions/2023/francisco/09/main.py b/solutions/2023/francisco/09/main.py
new file mode 100755
index 0000000..20d8351
--- /dev/null
+++ b/solutions/2023/francisco/09/main.py
@@ -0,0 +1,54 @@
+from util import FileParser
+import os
+
+dir_path = os.path.dirname(os.path.realpath(__file__))
+
+
+def all_zeros(items: list):
+ return all(i == 0 for i in items)
+
+
+def get_extrapolated_p1(sequences: list[list[int]]):
+ val = 0
+ for history in reversed(sequences):
+ val += history[-1] - history[-2]
+ return history[-1] + val
+
+
+def get_extrapolated_p2(sequences: list[list[int]]):
+ val = 0
+ for history in reversed(sequences):
+ val = history[0] - val
+ print(val)
+ return val
+
+
+def solve(file, part: int):
+ parser = FileParser(dir_path, file)
+ data = parser.read()
+ histories = [list(map(int, h.split(" "))) for h in data]
+ total = 0
+ for history in histories:
+ sequences = [history]
+ while True:
+ sequence = sequences[-1]
+ diffs = [sequence[i + 1] - sequence[i] for i in range(len(sequence) - 1)]
+ sequences.append(diffs)
+ if all_zeros(diffs):
+ if part == 1:
+ total += get_extrapolated_p1(sequences)
+ else:
+ total += get_extrapolated_p2(sequences)
+
+ break
+ return total
+
+
+def part_1(file: str):
+ """should return the solution"""
+ return solve(file, 1)
+
+
+def part_2(file):
+ """should return the solution"""
+ return solve(file, 2)
diff --git a/solutions/2023/francisco/09/test.txt b/solutions/2023/francisco/09/test.txt
new file mode 100755
index 0000000..539a763
--- /dev/null
+++ b/solutions/2023/francisco/09/test.txt
@@ -0,0 +1,3 @@
+0 3 6 9 12 15
+1 3 6 10 15 21
+10 13 16 21 30 45
diff --git a/solutions/2023/francisco/10/STATEMENT.md b/solutions/2023/francisco/10/STATEMENT.md
new file mode 100755
index 0000000..af1762d
--- /dev/null
+++ b/solutions/2023/francisco/10/STATEMENT.md
@@ -0,0 +1,323 @@
+
+--- Day 10: Pipe Maze ---
+-------------------------
+
+You use the hang glider to ride the hot air from Desert Island all the way up to the floating metal island. This island is surprisingly cold and there definitely aren't any thermals to glide on, so you leave your hang glider behind.
+
+
+You wander around for a while, but you don't find any people or animals. However, you do occasionally find signposts labeled "[Hot Springs](https://en.wikipedia.org/wiki/Hot_spring)" pointing in a seemingly consistent direction; maybe you can find someone at the hot springs and ask them where the desert-machine parts are made.
+
+
+The landscape here is alien; even the flowers and trees are made of metal. As you stop to admire some metal grass, you notice something metallic scurry away in your peripheral vision and jump into a big pipe! It didn't look like any animal you've ever seen; if you want a better look, you'll need to get ahead of it.
+
+
+Scanning the area, you discover that the entire field you're standing on is densely packed with pipes; it was hard to tell at first because they're the same metallic silver color as the "ground". You make a quick sketch of all of the surface pipes you can see (your puzzle input).
+
+
+The pipes are arranged in a two-dimensional grid of *tiles*:
+
+
+* `|` is a *vertical pipe* connecting north and south.
+* `-` is a *horizontal pipe* connecting east and west.
+* `L` is a *90-degree bend* connecting north and east.
+* `J` is a *90-degree bend* connecting north and west.
+* `7` is a *90-degree bend* connecting south and west.
+* `F` is a *90-degree bend* connecting south and east.
+* `.` is *ground*; there is no pipe in this tile.
+* `S` is the *starting position* of the animal; there is a pipe on this tile, but your sketch doesn't show what shape the pipe has.
+
+
+Based on the acoustics of the animal's scurrying, you're confident the pipe that contains the animal is *one large, continuous loop*.
+
+
+For example, here is a square loop of pipe:
+
+
+
+```
+.....
+.F-7.
+.|.|.
+.L-J.
+.....
+
+```
+
+If the animal had entered this loop in the northwest corner, the sketch would instead look like this:
+
+
+
+```
+.....
+.*S*-7.
+.|.|.
+.L-J.
+.....
+
+```
+
+In the above diagram, the `S` tile is still a 90-degree `F` bend: you can tell because of how the adjacent pipes connect to it.
+
+
+Unfortunately, there are also many pipes that *aren't connected to the loop*! This sketch shows the same loop as above:
+
+
+
+```
+-L|F7
+7S-7|
+L|7||
+-L-J|
+L|-JF
+
+```
+
+In the above diagram, you can still figure out which pipes form the main loop: they're the ones connected to `S`, pipes those pipes connect to, pipes *those* pipes connect to, and so on. Every pipe in the main loop connects to its two neighbors (including `S`, which will have exactly two pipes connecting to it, and which is assumed to connect back to those two pipes).
+
+
+Here is a sketch that contains a slightly more complex main loop:
+
+
+
+```
+..F7.
+.FJ|.
+SJ.L7
+|F--J
+LJ...
+
+```
+
+Here's the same example sketch with the extra, non-main-loop pipe tiles also shown:
+
+
+
+```
+7-F7-
+.FJ|7
+SJLL7
+|F--J
+LJ.LJ
+
+```
+
+If you want to *get out ahead of the animal*, you should find the tile in the loop that is *farthest* from the starting position. Because the animal is in the pipe, it doesn't make sense to measure this by direct distance. Instead, you need to find the tile that would take the longest number of steps *along the loop* to reach from the starting point - regardless of which way around the loop the animal went.
+
+
+In the first example with the square loop:
+
+
+
+```
+.....
+.S-7.
+.|.|.
+.L-J.
+.....
+
+```
+
+You can count the distance each tile in the loop is from the starting point like this:
+
+
+
+```
+.....
+.012.
+.1.3.
+.23*4*.
+.....
+
+```
+
+In this example, the farthest point from the start is `*4*` steps away.
+
+
+Here's the more complex loop again:
+
+
+
+```
+..F7.
+.FJ|.
+SJ.L7
+|F--J
+LJ...
+
+```
+
+Here are the distances for each tile on that loop:
+
+
+
+```
+..45.
+.236.
+01.7*8*
+14567
+23...
+
+```
+
+Find the single giant loop starting at `S`. *How many steps along the loop does it take to get from the starting position to the point farthest from the starting position?*
+
+
+
+Your puzzle answer was `6846`.
+
+The first half of this puzzle is complete! It provides one gold star: \*
+
+
+--- Part Two ---
+----------------
+
+You quickly reach the farthest point of the loop, but the animal never emerges. Maybe its nest is *within the area enclosed by the loop*?
+
+
+To determine whether it's even worth taking the time to search for such a nest, you should calculate how many tiles are contained within the loop. For example:
+
+
+
+```
+...........
+.S-------7.
+.|F-----7|.
+.||.....||.
+.||.....||.
+.|L-7.F-J|.
+.|..|.|..|.
+.L--J.L--J.
+...........
+
+```
+
+The above loop encloses merely *four tiles* - the two pairs of `.` in the southwest and southeast (marked `I` below). The middle `.` tiles (marked `O` below) are *not* in the loop. Here is the same loop again with those regions marked:
+
+
+
+```
+...........
+.S-------7.
+.|F-----7|.
+.||*OOOOO*||.
+.||*OOOOO*||.
+.|L-7*O*F-J|.
+.|*II*|*O*|*II*|.
+.L--J*O*L--J.
+.....*O*.....
+
+```
+
+In fact, there doesn't even need to be a full tile path to the outside for tiles to count as outside the loop - squeezing between pipes is also allowed! Here, `I` is still within the loop and `O` is still outside the loop:
+
+
+
+```
+..........
+.S------7.
+.|F----7|.
+.||*OOOO*||.
+.||*OOOO*||.
+.|L-7F-J|.
+.|*II*||*II*|.
+.L--JL--J.
+..........
+
+```
+
+In both of the above examples, `*4*` tiles are enclosed by the loop.
+
+
+Here's a larger example:
+
+
+
+```
+.F----7F7F7F7F-7....
+.|F--7||||||||FJ....
+.||.FJ||||||||L7....
+FJL7L7LJLJ||LJ.L-7..
+L--J.L7...LJS7F-7L7.
+....F-J..F7FJ|L7L7L7
+....L7.F7||L7|.L7L7|
+.....|FJLJ|FJ|F7|.LJ
+....FJL-7.||.||||...
+....L---J.LJ.LJLJ...
+
+```
+
+The above sketch has many random bits of ground, some of which are in the loop (`I`) and some of which are outside it (`O`):
+
+
+
+```
+*O*F----7F7F7F7F-7*OOOO*
+*O*|F--7||||||||FJ*OOOO*
+*O*||*O*FJ||||||||L7*OOOO*
+FJL7L7LJLJ||LJ*I*L-7*OO*
+L--J*O*L7*III*LJS7F-7L7*O*
+*OOOO*F-J*II*F7FJ|L7L7L7
+*OOOO*L7*I*F7||L7|*I*L7L7|
+*OOOOO*|FJLJ|FJ|F7|*O*LJ
+*OOOO*FJL-7*O*||*O*||||*OOO*
+*OOOO*L---J*O*LJ*O*LJLJ*OOO*
+
+```
+
+In this larger example, `*8*` tiles are enclosed by the loop.
+
+
+Any tile that isn't part of the main loop can count as being enclosed by the loop. Here's another example with many bits of junk pipe lying around that aren't connected to the main loop at all:
+
+
+
+```
+FF7FSF7F7F7F7F7F---7
+L|LJ||||||||||||F--J
+FL-7LJLJ||||||LJL-77
+F--JF--7||LJLJ7F7FJ-
+L---JF-JLJ.||-FJLJJ7
+|F|F-JF---7F7-L7L|7|
+|FFJF7L7F-JF7|JL---7
+7-L-JL7||F7|L7F-7F7|
+L.L7LFJ|||||FJL7||LJ
+L7JLJL-JLJLJL--JLJ.L
+
+```
+
+Here are just the tiles that are *enclosed by the loop* marked with `I`:
+
+
+
+```
+FF7FSF7F7F7F7F7F---7
+L|LJ||||||||||||F--J
+FL-7LJLJ||||||LJL-77
+F--JF--7||LJLJ*I*F7FJ-
+L---JF-JLJ*IIII*FJLJJ7
+|F|F-JF---7*III*L7L|7|
+|FFJF7L7F-JF7*II*L---7
+7-L-JL7||F7|L7F-7F7|
+L.L7LFJ|||||FJL7||LJ
+L7JLJL-JLJLJL--JLJ.L
+
+```
+
+In this last example, `*10*` tiles are enclosed by the loop.
+
+
+Figure out whether you have time to search for the nest by calculating the area within the loop. *How many tiles are enclosed by the loop?*
+
+
+
+Answer:
+
+
+Although it hasn't changed, you can still [get your puzzle input](10/input).
+
+
+You can also [Shareon
+ [Twitter](https://twitter.com/intent/tweet?text=I%27ve+completed+Part+One+of+%22Pipe+Maze%22+%2D+Day+10+%2D+Advent+of+Code+2023&url=https%3A%2F%2Fadventofcode%2Ecom%2F2023%2Fday%2F10&related=ericwastl&hashtags=AdventOfCode)
+[Mastodon](javascript:void(0);)] this puzzle.
+
+
diff --git a/solutions/2023/francisco/10/__init__.py b/solutions/2023/francisco/10/__init__.py
new file mode 100755
index 0000000..e69de29
diff --git a/solutions/2023/francisco/10/final.txt b/solutions/2023/francisco/10/final.txt
new file mode 100755
index 0000000..a0097ec
--- /dev/null
+++ b/solutions/2023/francisco/10/final.txt
@@ -0,0 +1,140 @@
+L-|---|.F--F7F-.FF-F-7FL|.F7.FF|7FL7.JF7F7-F..FF-777-7F|-7.FF--F7FL-7-|7F|7--J.F-7-|-F77.F-FL-L.F--|.L77-J-7-FF-7F|---7F77F|7F-|-L-7-F7..FF-
+|7.|77L7LL7|7|J-F-7J.--7|7-FF-7|LJ-77L7LFJ|JFFFJ7|7FFL7L7|F777.7LJ.LJ.||7JF7|L-|LF7.FFJ-7.L|LFJF7LFF--||J|JF-F7.|7JF|.|-LLLF77||.|.|F|F7J-LJ
+7J-JL7--JLLJ7J|.L-7F-J.J|J.LJLJFFL7|JFJLJ---7-LJF7-FLL7--FJL77F7-|7|L-7L|FJ-JJ7L--J-7J.FJ.FJ-L7LF-J|7.-J.J7LLLJ7FF--7.J-L.LJJL7J--|-FJFJ|J||
+7.7J.L|JF|FJ|L--J.|FJF7-F-7.LF.FL7.7J|.7|7|L7|.|.LFJ7.|LFL-7L77|FF77..F---L.|FJ--J7LJ|LL.|....7L|.7-F.|FJF7.||L-F|-.F-J7|F.FFL7|J-JL7-7-|-F-
+L7L|-F|JL7LLL.L|7F7J.-J-JJ777L-F.|F7J.|LJ-J.||-F7--|FJ7.||FL7|F-7|L7JFLFJFLF-J.FL-JLLFJ7FJ.FF7L7|FJJL|7L-FF-L7LF-J.-L|JJF|7FF-7J-FL--7J.LJ|.
+7JF7-F77.|FFLJ7FJJJ-LL7J7LF-7|7|F|.|.F|7JFJ-J.F7|-LF7-||J7F-J||FJ|FJF7FF----7|7JLJJ.|L-|7L|7LL-J|FF-JJFJ|JLJJLFL-J7|FJJFJJ-7.--J-77JFL.FJ7|.
+L|JJL|LJFL-JJF-7JL--J||L7FJ.L7|L|.-|F-7L-F-7-L-F-7||L--7LFL-7|||FJ|F---7-J||.L-.L77.L7|L-JL7F|.|LFJJFLLFL..|F7FJ77LFL|F-J7J.|LF77L7.L.LJLJ-F
+-L7F--7-|JF|||F777..FLJ7L|-JL-7|LFL|-LLJ7LFF.|LL7L7|F--J.F7FJ|||L7LJF7FJ7J-J7||7JF-F-|J-|7FF-7J7L-JL|.L|L|7|FL|LF7L-.L7JFFJ.L-FJ-FJ-LF.7-|.7
+|.|7.|F--7|LFF|JJFLF7LL7-L..|L|J.FJ.L.|.F---7.|.L7LJ|LF7FJ|L7LJL-JF-JLJFJ7FL--F7F.F..J|-F-FJ|.|L7-7|LJ7F---JJLL7JJ.LFJ|F|7J7.LLJ||-.LLFF-|.-
+F|.-.F7.|.7-7|J|FFF|J7J|.LF-JJLLFJF--FJ.L-7FJ77||L-7L7||L7|FJF-7F7L-7JJ-|F-F7.LL.LFL-7|-|J|77F|7|7L-7JF|77FJJ7L|.77..F7-LF.F7L|-|J.F--F7.L7J
+L7LL7JF77|J7L7-JL--J.FJF--J-7J7LFJ|..7|.|FJ|F7F7F7F|FJ|L-J|L7|7LJL--J|F7.|-J|FJ7|F|J.||||LJ-7-J-LF-7LJF7F7J7.FFJ-|F77FJLF--L-7--J.77|JLJF7LL
+L|.F-7LF-JL|J||7LL7LFJLJJLJ-7L7L||LJ-7-FFL7|||||||FJL7L--7L-JL------7-|L-7.LJJ.J7-7-7||-|7.||J..L|FL--7L-|.F7LFJ|F-JFJJLF.L-J||LF-|JJ.L7JLJ7
+.L-|J7FJ-JJ|L--F7LL-|-FJ.|FFJFF7-J-|.|FF|J|||LJ||||F-JLF7L-7F---7F--JFJF-J-|FF7LLJLF.LJFF7.F7.F7.FJF|J|77LFF--77-JL-7.|.L.J-LJJ|JF|.F-.FJ|.7
+F|LFF---LJ.|-|L|FF7-JL77-FF7F7||L||L7LF---J|L-7||||L7F7|L--JL--7LJFF7L7|F7|L-L|J-7.|F|7L|L7||FF|F||7F.FJ-F7L7FJJL7-LJ-|7-77FJJF7.7JF||.L7J.J
+FJFJ|J77.FFJJ.-7-J777L||F-J||LJL-77.|JL---7|F7|||LJFJ||L--7F---JLF7||FJLJL-7J7JLFF7-F77.L7LJL7F7JJL-FF7FFJ|FJ|F77F77.||LFF7-7.|J-|-|7|7.J7-L
+L-F--J|7J-LJJ-LL-7.LL-FLL7FJL7F--J|F77F7F7|||LJ|L7FJFJL7F7|L7F7F7|||||F----J.LF-7||.||F7FJF-7|||F|.|L||FL7LJFJ||FJL7-F7FF|||F----|-LJL|-|7.|
+|.|F|.LLJ---F-J|J-7F|..|FJL-7|||.LFJL-J||LJ||F7L7|L7L-7LJ||FJ|||LJ||LJL7F--7.|L7LJL7||||L7L7LJ||F7.F7||F7L-7|L||L-7|J||F7||7-.---7-LJ7L-|7.F
+L77J.FF-JLL-|LF|7FF|7-F7L7F7LJL77JL---7||F-JLJ|FJ|FJF7L-7||L7||L-7LJF7FJ|F-JF7JL--7|||||FJFJF-JLJL7|||||L7||L-J|F-JL-JLJLJL7J7-FL-.|-|7.|--|
+||LF7FF-7.|-F77|F-7L|L||7LJL--7L7FF7F-JLJL-7F7|L7||FJ|F7|LJFJ|L7FJF-J||FJ|F7|L7F7||||||LJFJLL---7FJ|||LJFJFJF--JL---7F--7F-JJ7-L|L|7.F|.|J-J
+7-|LLLL-JF7-|L7FJFJ-JJ|L-7.F77L7L7||L-7F-7FJ||L7LJ|L7||LJF-J||FJ|FJF7LJL7LJLJFJ||FJLJLJF-JF7-F7FJL-J|L-7L7L7|F7|F-7FJL7LLJ7|FJ|FJ-JJ-L.JJ7F7
+LL77.|7JFF7|L7|L7L7LJ.L-7L7|L-7|FJ||F7||FJ|FJL7|F7|FJ||F-J7F7||.||FJL77L|F---JFJ|L--7F-JF7|L7||L7F--JF-JFJFJLJL7|FJ|F-JF-7-7|FFJJLL7L|.LF7|7
+F-J|L77-FJL-7||JL7L7LF-7L7|L-7LJL7||||LJL7||F-JLJ||L7||L7F7||||FJ|L-7L7FJL7F-7|FJF7FJL-7|LJFJ||FJ|F7FJF7||L7F--J||FJL-7|FJ7|7-F.|.L7F|.FLJLJ
+LJ-|J||-L-7FJ||JFL7L7|FJFJ|F7|F-7|||||F-7|||L7F7FJ|FJLJFJ|||||||FJF7|FJL7FJ|FJ|L-JLJF--JL7FJ|||L7LJ|L-J||F7|L--7||L-7FJ|||FF7F7F7-J|LLLL.-.J
+||FJL|7JF-J|FJL7F-JFJ|L-JFJ||LJFJ|||||L7LJLJFJ||L7|L7F-JFJLJ||LJL7|||L7FJ|FJL7L----7L7F-7||F7||FJF-JF7FJ||||F-7|||F7|L-JL--JLJLJ|L-|7|FJFF-L
+7-|FLLJFL-7|L7FJL-7L7L--7|FJ|F7L7||||L7L--7FJFJL7||-|L7FL7F7|L7F-J|||FJL7|L7FJF7F7FJFJ|FJ|||LJ|L7L7.||L7||||L7LJ|||LJF----7F---7L7.J-LJLF7JJ
+L7L|-J|.F-JL-JL7F7|FJF--J||FJ|L7|LJ|L7|F7FJL7L-7LJ|FJFJF7LJ|L-JL--JLJL7FJL-JL7|||LJFJF|L7||L-7L7|FJFJ|FJLJ|L7L-7|LJF7|F7F7|L--7|FJ.|-||7|LL7
+L-7L-LF-JF7F--7||||L7L7F7|||.L7|L-7L7|||||F7L-7L7FJL7L7|L7FJF7F7F-----JL7F---J||L-7L-7|FJ||F7L7LJL7L7|L7F-JFJF-JL7FJLJ|LJ||F7FJ||JF|-L|7|-LF
+7.J-FF|F7|LJF-JLJ|L7|JLJ|||L7FJL-7L7LJ|||LJ|F-JFJ||FJFJL7|L7|||LJF7F7|F7||F7F7||F-JF-J||L|||L7L--7L7||F||F7L7L-7FJL---JF-J||LJ.LJ.|7..LFF7.|
+||J.LFJ|LJF7|F7F7L-J|F7FJ|L7|L--7L7|F-J|L7FJL7FL7L-JFJF-J|FJ|LJF-J||L-JLJ|||||||L-7|JFJL7|||FJ-F7L7|||FJ|||FJF7LJF-7F--JF7LJF7FLJ..JFJ7LF7-J
+J7.77L-JJL|LJ|LJL7F7LJ|L7|FJL-7FJFJ||F7L7LJF7|F7|F7FJ-|F-JL7L7FJF-JL--7F-J||||||F7|L-JF7LJ||L7FJ|FJ||LJFJ|LJFJL--JFJL---JL--JL-7J.LLL|7|LJL7
+|L7|F7L7|.L--JJF7LJL-7L-J|L7F-J|FJFJ|||LL-7||LJLJ|||F-J|7F7L7||FJF7F7FJL7J|||||||LJF7FJL--JL7|L7LJFJL7FJ||F-JF7F7|L----7F7F-7F-J77.|FJ-|-|.J
+FL7FJ|J-L-F---7|L--77L7F7L7||F7|L7L7||L7F7LJL--7FJLJL7FJFJ|FJ|||FJLJ|L-7L7|LJ|||L--J|L-7F7F7|L7L-7|F7|L7FJL--J||L7FF--7|||L7|L-7F7-J7|LL-J-L
+F-7LLL-7JLL--7||F-7|F7LJL7LJ|||L7L7|LJFJ||F77F7|L-7F7||LL7LJFJ|||F--JF-JFJL-7|||FF77|F-J||||L7|F7|LJ|L7||F----J|FJFJF-J||L-JL--J||7.L--7|J7|
+||JF-7FJJLLF-JLJ|FJLJL7F7L-7LJL7|FJL7FJFJ||L7||L-7|||||F7L-7L-J|||F-7L-7L7F7||||FJL7||F7||||FJ||||F-JFJ|||F7F7L|||L7L-7||-F-7F--JL-7.J7||F-L
+JJ|L-F7-FLLL-7F7|L-7F7LJL--JF-7LJ|F7||7L7||FJ||F7||||||||F7L7F-J|||FJF7|FJ||||||L-7|||||||||L7|||||F7L7||||||L7||F7|F-JLJFJFJL-7F7FJ7-FL.L.J
+|F-LF7JLL7.||LJLJ7FJ|L--7F7FJFJF7LJLJL7FJ||L7|||||LJ||||LJL7|L-7|||L7|||L7|LJ||L7FJLJ||||||L7||||||||FJLJ|||L7LJLJLJ||F7FJFJJF-J|LJ7J.|L7F77
+|.-7...7J-FF---7F-JFJ|F-J|||JL-JL----7|L7||FJ||||L7FJ|||F--JL-7LJ|L7||LJFJL-7|L7|L7F-J|||||7||||||LJ||.F7LJL-JF-----JFJLJFJ|JL7FJF77.L|.F-J|
+LF|7-FJJ.|LL--7|L--JF-JF7|||F---7F--7|L-JLJL7||||FJ|FJ|||F-7F7|F-JFJ|L7|L-7FJ|FJ|FJL-7|||||FJ||||L7FJ|FJL--7F7L------JF-7L-7F7||FJL7JFL7J.F7
+FF7F7L.FFF----JL--7FJF7|LJ||L7F7LJF7|L7F7F7JLJ||||FJ|FJ||L7|||||F7|FJFJF--JL7|L7|L--7LJ||LJ|FJ|||FJL7|L7F-7LJL7F------JLL--J|LJLJF-JL7JJ|FL|
+F|JJ7|-F7L---7F7F7LJFJLJF-J|FLJL--J|L-J|LJL-7FJ|||L7|L7||FJ||LJ||||L-J-L7F7FJ|FJL7F-JF-JL-7LJFJ||L7FJL7LJFJ.F7|L---7F----7F7|F7F7||-7LLFJJFJ
+||JL-F7LFF---J|LJL7FJF7FJF-JF7-F7F-JLF-JF---JL7|LJFJL7||LJFJL7FJ||L7F-7|LJ|L7LJF7||F7L-7F7L-7L7||FJL--JF-JF7||L----J|F7F7LJLJ|LJLJ---J|..||J
+L77-L||F7|F---JF--J|FJLJFJF-JL-J||F--JF7L----7||F7L7FJLJF-JF7|L7|L7||FJF--JFJF7||LJ||F-J||F-JFJ|||F-7F-JF-JLJL------J|LJL-7F7L--77L|7|F7-7LJ
+|L7.|||||LJF-7-L7F7|L7F7|FJF7F-7|LJF--JL-7F7FJ|||L-J|F--JF7|LJ|||.LJ|L-JF-7L-JLJL--J|L-7|||F7L-JLJ|FJL--JF7F7F7F--7F7L7F77LJL7F7L-77F77L|L7J
+FJ|FF||||J-|FJFFJ|LJJLJLJL7|||FJL-7|F7F-7||LJFLJL-7FJL7F7|||F--JL-7JL-7FJFJF-7F7F7F-JF-J||LJL7F-7FJL-7|F-JLJLJ|L-7LJL7LJL---7LJL-7|J-JFFJ-77
+.FFLFJLJ||7||F7L-JF--7F7F-J|LJL--7|LJLJFJ|L------7||F-J|LJ||L-7F7FJF--JL7L7|7||LJ||F7L7FJL7F7|L7LJF-7L7L--7F-7L-7L--7|F7F---JF7F7LJJJ-LJFLF7
+|-JFL--7L--JLJL--7L-7LJ|L--J-F---JL----JLL-7F----J||L-7|F-JL7FJ|LJLL7F-7|FJL7|L-7|LJL7|L7FJ|LJJL--J7L7|F7FJ|FJF7|F--JLJ|L-7F7|||L7|7..F--.LJ
+|FFL.LFL--------7|F7L-7|F---7L--7F--7F7FF-7|L-7F--JL7FJ||F7FJL7L7F--J|FJ|L7FJL7FJL7F-JL-JL7|F--------JLJLJFJL-J|LJ|F7F7|F7LJ||||FJ7F-77L|7LL
+LF77-FF---7JF7F7||||F7||L--7L-7FJ|F-J||FJFJL7FJL7F7FJ|FJ|||L7FJFJL7F7||FJFJL-7|L7FJL--7F7|LJ|F-7F7F--7F--7|F---JF7FJLJ||||F7LJLJL--JFJ-7|J|.
+L|L---JF-7L-JLJLJLJ|||||F7JL-7|L-JL7FJLJFJF7LJF7LJ||FJ|FJ||FJL7|F7||LJ|L7|F7FJ|FJ|F7F7LJL-7JLJJ||LJF7LJF7LJL7F--JLJF7FJLJLJL7F7F---7|.FLJ-F7
+|L7F7F7|FJF-------7LJLJLJL---JL7F-7LJF-7L-JL--JL-7LJL7|L7|||LFJLJ||||FJFJ||LJFJL7|||||F---JF---JL7FJL--JL--7LJF7F--JLJJ-F7FFJ||L--7LJ-|7|.||
+|7||LJ||L7|F------JF7F7F---7F-7||FJF7L7|F----7F-7L--7LJFJ|||FJF7FJLJFJFJF||F7|F7|LJ|||L--7FJF7F--JL-------7|F-JLJF--7F7FJL7L-J|F--JF77FL7L-J
+L-||LFJ||LJL---7F-7|||LJLF7LJFJLJL-JL-J|L---7LJFJF--J7FJFJLJL-J||..FJFJF-J||LJ||L7LLJL7F-J|FJLJF----7F7F7FJLJF---JF-J|LJF-JF-7LJF--JL-7L--J|
+LLLJLL-JJJF----JL7LJLJF--J|F-JF7F-----7|F--7L-7L7L--7FJFJF-----JL7FJFJ7L-7|L7FJ|FJF-77|L7FJ|F--JF7F7LJLJLJF7J|F---JF7|F-JF7L7L--JF7F--J|F-JF
+||FJ777||7L---7F-JF--7L--7LJF7|||-F---JLJ-FJF-JLL---JL7|FL----7F7||FJ.F--J|FJ|FJL7|FJFJFJ|FJL---JLJL-7F7F7||FJL---7||||F-J|FJF7F-J|L7-JF||.-
+LJ|.FFLLF-----JL7.L-7|FF-JF-JLJ|L7L7F7F7F7L7L7F7F7F7F7||F-----J|LJ|L-7L--7||FJL-7LJL7L7L7LJF---------J|LJLJLJF---7LJ||||F-J|FJLJJL|FJLLJ-|-J
+L7LJLJJ|L-7F7F7FJF--JL7L--JF7F7L-JJLJLJLJ||L-J|||LJ|||LJL---7F7|F-JF7|F--J|||F--JF7FJLL-JF7|F---------J.F----JF7JL-7LJLJL7FJL--7JL||J7J77|7|
+.|7LJ.-|.LLJLJLJ|L---7L----JLJL-7F-------JF7F7|||F-J|L7F7F7JLJLJL7FJLJL7F-JLJL7F-J||F----J|LJF-----7F7F7L-----JL--7L7F7F7LJF7F7|LLLJJ-777.-F
+LJFFL|-L77|F-7F--7F--JF7F------7|L---7F--7||||||||F-JFJ|||L7F7F--JL-7F7||F----JL7FJ|L----7L7FL----7LJLJL7F7F--7F--J7LJLJL--JLJLJ-7FFJ7LJFF-7
+FFL-F7.FFF7|FJL-7||F7FJ||F-----JL----J|F-J|||||||||F-JFJLJFJ||L-7F7FJ||LJL----7FJ|FJ-F7F7L7L--7F7FJF---7LJLJF7LJF7|F7F7F---7F7F7||-|J7LLLJ7|
+7-7|||FLFJLJ|.F-J|LJLJ-LJL-7F-------7FJL--JLJLJLJLJL-7L--7L-JL7.|||L-J|J.LF---JL7LJF-JLJL-JF-7|||L-JF-7L----JL-7|L7|LJLJF7FJ|LJL7|.7-7J|FJ-7
+L|L7FL-|L--7L7|F7L-7F7F7F7FLJF7F7F--J|F--------------JF7FJF-7FJFJ||F--J-7FJF-7F7L7F|F7F7F--JFJ||L7F7L7|F-------JL7LJF-7FJ|L-JF-7L-7-7--J|.L|
+FJ.F7|F7FF7|FJLJL-7LJLJLJ|F-7|LJ||F--JL----------7F--7||L7|FLJ.L7|||L|J--L7|.||L7|FJ|LJLJF-7L7||FJ|L7||L------7.FJF7L7|L7L-7FJJL--J||J|7LJ|L
+|LFJL7F7FJLJL-7F7FJF----7|L7|L-7|LJF---------7F--J|F-J|L7|L7F7F-J||L-777||LJFJ||LJL7|F--7L7|FJLJL7L7||L----7F7L7|FJL-JL-JF7LJF---7F7J---7-|J
+|-L-7|||L---7FJ|LJFJF---JL-JL--JL--JF-----7F7LJF7.|L-7L7LJFJ||L-7||F7|-7J7JFL-JF-7-LJL-7L-JLJF7F7L-JLJF7F7|LJL-J|L-7F-7LFJL7FJF-7LJ|LLL7JF|.
+L|LL||||F-7FJL7L-7|-L--------7F7F7F-JF7F-7LJL77|L-JF7L-JF7L-JL-7||||||7F7J-7J.|L7|F7F7FL--7F-JLJL-----J||L7F7-F7|F-J|FJFJF7LJFJ-L--J..JFF7J7
+|LF-J|||L7|L7FJF-JL7F---7F--7||||||F-JLJFL7F7L-JF--JL--7|L7F7F-JLJLJLJ-.LJJ.L--FJLJ|||F-7FJ|F-----7JF7FJ|FJ||FJLJL--JL-JFJL--J7FL||L-|L-L---
+J||F7LJ|FJ|L||7L---JL--7|L-7|LJLJLJL-7F7F7LJ|F-7L-----7|L7|||L--7JL7J77.|77..||L--7|||L7LJFJL7F7F7L-JLJFJ|FJ|L7F-7F-7F--JF-----7LF7J.L||L77|
+FLLJL-7|L7|FJL7F-7F-7F7||F-JL--7F7LF7LJLJ|F7LJ.L------JL-JLJL7F-J7LJLJ--LL-7-F--7FJ||L7|F7|F-J|||L---7FJLLJFJL||.LJFJL---JF-7F7|FJL77F-||L|7
+||L-F-JL-J|L7FJL7|L7LJLJLJF---7LJL-J|F7F7||L-7F7F-------7F-77LJ|FJJ.7|7LL7.F.L7FJL7||FJLJLJL--JLJF---J|F---JJFJL7F7L-7F-7FJLLJ|LJF7L77J|L.|L
+|-|JL7F--7L-JL7FJL-JF7F7F7|F-7L-7F-7LJLJ|||F-J|||F------JL7|F-7F7.|F-7J.LF-F--JL--J|||F-7|F7F7F7FJF7F7|L---7FJF7LJL-7LJFJL---7|F7|L7L7-F-|7.
+|.7.FLJF-JF--7LJF-7FJ||LJ||L7L--JL7L-7F7LJ||F7|LJL7F7F-7F7|||FJ||7-7J.|.L|L|F7F-7F7LJ||FJFJLJLJLJFJ||||F--7LJFJ|F-7FJF7L--7F-J||LJFJFJ7|7-77
+FF7FF7FJF7L-7|F7L7|L7LJF-JL7L7F---JF-J|L--JLJLJF-7LJLJFJ|||||L-J|LF|LLF-F-7LJ||FJ|L-7LJL-JF7F7F7FJJLJ|||F7L-7|7LJJ|L-JL--7|L-7|L-7L7L7-|J|..
+FJL-J|L7||F7|LJL-JL-J|FJF7FJLLJF7F-JF-JF-7F7F-7|7L----JL|LJLJF-7L-7-7.--J-JJJLJL7L7|L-7F-7|||||||F--7LJLJL-7LJF7F7L----7FJL--J|F-J|L7|-LF|FJ
+L---7L-J|||||F--7F-7F7L-J|L7F--J|L-7L7FJL|||L7|L-------7|F7F-JJL--JJJ.|.L77|FF--JFJ-F-J|7LJ||||LJL-7|F7F7F7L--JLJL7F7F7LJF---7LJF-7LLJ.F|LLJ
+F---JF7FJLJLJL-7|L7|||JF7|FJL--7|F7L-JL-7|||FJL--7F-7F7LJ||L77F7LJJ.L7J..FFF-JF7FJ-LL-7|F--J|||F--7|LJLJLJL--7F7F7LJLJL-7L7F7L--JFJF-7J7||J|
+L7F7FJ||F------JL-JLJL7||LJF---JLJL-7F--JLJLJF--7LJFJ||F7|L7L-JL7|F77JLF-F-JF-JLJF7.F7LJL7F-JLJL-7LJF7F-----7LJLJ|F7F7F7|FJ||F7F7L-JFJ|LJ77L
+LLJ|L7||L7F7F7F7F----7||L-7|F7F-7F-7LJF7F7F7FJF7L-7L-J||LJF|F7F7L7L|7FF7-L--JF---JL-JL---J|-F7F7FJF7|LJFF-7FJF-77LJLJ|||LJFJ||||L---JJJJF-J|
+L-FJFJ||FJ|||LJ||F---JLJF-JLJLJ-LJFL--JLJLJLJFJ|F7L-7FJL--7LJLJL-JFF7-J|F|-|LL--7F--7F7F7FJFJLJ|L-JLJJF7L7LJ||FJF7F7.|||F7L7LJ||J7|.|JLJLFFJ
+|FL-J|LJ|FJ||F7LJL7F7F-7|JF7F7F---7F7F7F-----JF|||F7|L7F-7L-----77FJ||JLJLF-JLF7LJF7||LJLJ.L7F-JF-----JL7L---JL-JLJL7LJLJL7L7FJL-7|.L--F-F-J
+|LL7.J.LLJ-LJ||JF7LJ||FJL-JLJ|L--7LJLJLJJF7F7F7LJLJ|||LJFJF-7F7FJFJFJ--|7.-JFF|L--J|||F-7F7FJL-7L-----7FJF---------7L----7L-JL---J-.-J||7LL.
+F7LL|F-.F7-F-JL-JL7-LJL----7FJ7F7L----7F7|||||L77F7LJF7LL7L7LJ|L7|FJJJ|F7F|.|LL---7|LJL7LJLJF--JF-----JL-JF7F7F---7L-----JF----77J7FL7F-77FJ
+LL-L-7-FJL7L-----7|F-7F----JL-7||F7F--J|||LJLJFJFJL7FJL7LL7|F7L-J||.|-FJL7F--7F7F-J|-F7L7F7FJ-F-JF--------JLJ||F-7L---7F7|L7F--J7.J7|F7|LL7L
+7FF.|F-L-7L7F----J|L7|L------7LJLJ||LF-JLJF--7L-JF-J|F-JF7LJ|L7F-JL-7FJF7|L-7|||L-7L-JL7LJ||F7L--JF---7F-----J||-L--7FJ||F7||F7F77-F7FLL---.
+FFJF||.F7L7|L----7L7||F7F7.F7L---7|L-JF7F7L-7L7F7L--JL--JL7L|FJL--7FJL-J|L7FJ|||LFJF---JF-JLJL7F-7L--7|L------JL7F-7|L7|||||LJLJ|7FJJ|J7||J.
+LL-JF-F|L-JL----7L7LJLJLJL-JL----JL--7||||F7L7||L-7F7F7F-7L-J|F-7-|L7F7.L7LJFJ|L7L7L--7|L-7F7FJ|FJF7FJL-7F--7F-7LJFJL-J|||||F---JF7JL--L----
+L7|7L7|L-7F--7F7L-JF-----7F7F------7JLJ||LJL7||L-7LJLJLJFJF7FJL7|FJFJ|L-7L7FJ||FJL|F--JF--J|||-||FJLJF-7LJF7|L7L--JF7F7|LJLJL--7.|L7.|F7-L|7
+|L-L7-FF-J|F-J|L--7|F----J|||F----7L--7|L--7LJ|F7L77FF7-L-JLJF7|||FJFL-7L7|L-7|L7FJ|F77L---J|L-JLJF-7L7L--J||FJF---JLJLJF------JFJFJJ7L7FF77
+JJ.FFJ|L--JL-7|F--J|L7F7F-J||L-7F7L---J|F-7|F-J|L7L7FJL-7F-7FJLJLJL7F7-L7||F-JL7|L7LJL7F7F--JF----J-L-JF7F7|LJFJF-7F7F-7|F------JFJ|L77|LLJ|
+L---F-7LF7F-7||L7F7|FJ|||F-J|F7LJ|F-7F7LJLLJL7FJFL-JL7F-J|FJL-----7|||F-J||L-7FJL-JF7FJ||L---JF7FF7F-7FJLJLJF-JFJ-LJLJJ|LJF--7F-7||-FJFL7LF|
+|.|LL7L7|LJFJLJ-LJLJL7|LJL--J|L7|||FJ||LF7F7J|L7F----JL7||L--7F-7FJLJ|L-7|L7FJL---7|LJFJ|F7F--J|FJ||FJL-----JF-JJF----7|F7|F7|L7|L7.LFL|7.F|
+|-JJFL7|L7FJF7FF7JF--JL7F7.F7L7|FJ|L-JL7|LJL7L-J|F---7FJFJF--JL7|L--7L--J|FJ|F7F--JL7FJFJ||L--7|L7||L7|F----7L---JF7F-JLJ||||L7||FJ7FJ.FJFJJ
+-JFF--JL-JL-J|FJL-JF7F7||L-JL7|LJFJF--7LJF7FJF-7LJLF7|L7L7L-7F-JL7F7|F--7|L7LJ|L-7F-JL7||||F--JL-JLJFJFJF--7L-----J||F7F7LJ|L7||||.7JF-|.F|7
+|LLL7F7F7F7F7LJF--7|LJLJL---7|L--JJL-7|F7|LJLL7|F--J|L7L-JF-JL--7|||LJJFJL7L7FJF-JL-7FJ|FJ||F7F--7F7L-JFJF-JF7JF--7LJ|LJL7FJFJLJLJ--.L.L7.F7
+F7LLLJ||LJ|||F7L7FJ|F-7F7F--JL-7F7F--J||LJ.F7FJ||F--JFJF--J|F-7FJ|||.F-JF7L7|L7L--7FJL7||FJLJLJF7LJL--7|FJF7|L-JF-JF7|F--JL7|F7LF-77.|7F|.LF
+LJFLF-J|L|||LJL7|L-J|FJ||L----7|||L--7||F--JLJFJ||F-7|FJ-F-7|FJL7||L7L--J|FJ|FJF7FJL7FJ|||F7F--JL7F7F7LJL-JLJF--JF-JLJL-7F7|LJL7L7L---7J77FF
+..|JL--JF-J|F--J|F--JL-J|F-7F-JLJL7F7||LJF7F--JFJLJFJ|L-7L7||||FJLJFJF-7FJ|FJ|FJLJF-JL7LJLJ|L---7LJLJL------7|F-7|F-----J|||F-7L-JF---JF|JJ|
+FF-F7|LLL-7|L---JL7F7F-7|L7|L-7F-7LJLJL7FJ|L7F7L--7|7|F-JFJLJL7L--7L7L7|L7LJFJ|F7FJFF7L7F--JF-7JL--7F-7F--7-LJL7LJL------JLJL7L7F-J.|7L-L--F
+-J|JF7L--L|L7F----J|||FJL-JL-7LJ7L---7-LJ.L-J|L-7FJL-JL77L7F--JF-7L7|FJ|-L7FJLLJ||F7|L7|L7F7|FJF---J|FJ|F-JF---JF-7F7F---7F7FJFLJF7FJ-L.|F||
+L-7LF-.L7-L-JL7F---JLJL7F---7L-------JF7FF--7L-7|L--7F-JF-JL--7L7|7||L7|F7|L7-F7|||||FJ|FJ|||L7L7F--JL7|L--JF7F7|F|||L--7||LJF---J|--J-F-F7J
+LJL-L7FFL-7|LLLJF7F--7FJL--7L----7F7F7|L7L-7L-7||7F-J|F-JF7F--JJ||FJ|FJ||LJFJFJ||LJ|||FJL-J||FJFLJF-7FJ|F---JLJ|L7||L7F-JLJF-JF---J77..|.|||
+..|J-LF||||JJ-F-JLJF7LJF---JF---7LJLJLJFJF7L-7||L7|F7LJF7||L-7F7||L7||FJL-7L7L7|L-7||||F---J|L7F-7|FJL-JL-----7|FJLJ.|L--7FJF-JF---7-F-7FLJ7
+|-7-7-7LL-J|-FL----JL--JF---JF-7L---7F-J7|L7FJ||FJLJL7FJLJL--J|LJ|FJ||L7F-JFJFJL7FJ||||L--7FJFJL7LJL-7F7F-----JLJF7F7L7F-J|FJF7|F--JF--77JJ7
+LJL--.JFJ.7-7LLF--------JF--7L7L---7LJ7F7L7|L7|||F7F7||FF7F7F7L-7||FJ|FJL-7|FJF-JL7||LJF--JL7|F7L-7F-J||L-7F--7F-JLJL7|L--JL-JLJL7LFLJ.|LJ-|
+L7.|J7JFJFJJ|7FL------7F-JF7L-JF7F7|F-7|L7|L7|||||||||L7||||||F7|LJL7|L7F7|LJFJLF7||L-7|F--7||||F7|L7FJ|F-J|F-J|F7F7FJL7F---7F7F7L77F--|FLF7
+|L7|-7.LL|.LF.FF------J|F-J|F7FJLJLJL7||FJ|FJ|||||||||FJ||||||||L-7FJ|FJ||L-7|F7||||F7|||F-J||||||L7|L7|L--JL--J|||LJF7|L-7F||LJL7L7FJ|LFLF|
+-7L-7.|7.|7-J--L7F7F7F7|L-7LJ|L--7F7FJLJL7||FJ||||||||L7|LJ|||||F7|L7|L7||F-J|||||||||||||F7|||||L7|L7|L7F--7F7FJ|L--J|L7FJFJL-7FJFJ-|-.JL||
+LL7L7.L|F||FJFLLLJLJLJLJF7L-7|F--J|||F--7||LJFJ|||||LJFJL-7|||||||L7LJFJ|||F-J|||||||LJ||||||LJ||||L7||FJL-7||||||F---JF|L7L7F7||FJJF|-F.FL7
+.LFJL..LJJ-7JF-|J|F-----JL7F||L--7|||L-7LJL7|L7|||LJF-JF7FJ||||||L7L7LL7|||L7FJLJ||||F-J|LJ||F-J|FJFJLJ|F7FJLJSL7|L----7|FJ|LJ|||L7F7|7LFJJ.
+7L-7LLJFJJJJ.|.FF-JF-7F7F7L-JL---J||L7FL7F7|F-J||L-7L-7||L7LJ|||L7L7L7F|||L7||F7.LJLJL--JF-J|L-7|L7L7F-J|LJF-7L7|L--7F-JLJ-F7FLJL-J-LF||.|77
+F7L77J.F-L77FF-FL--J7LJLJ|F7F-7F7FJ|FJF-J||||F7||F-J|FJ|L7L-7||L7|.L7L7|||FJ|LJL--7FF7JF7L7FJF-JL7|FJL-7L--JFJ||L-7FJL----7||F7|F7-|L|.L-F7-
+L|.|7..L----LJ7FF--------J||L7|||L7|L7L7FJLJ|||||L7F-JFJ.|F-J||FJL7FJFJ||||FJF-7F7|FJL-JL-JL7|F7FJ||F--JF7F7L-7L7FJL7F---7LJLJL7|L777-F|LJ..
+-J||FJ-F7..FLJLFJF-7F-7F7FJL7|||L7|L7|FJ|.F-J||||FJL--JF-JL-7LJ|F-JL7L7LJ||L7|7||||L7F-7F-7FJ||||JLJ|F7FJ|||F7L7LJFF|||F7|F7F-7LJFJJLFLJ.|-7
+F7|F.F7L7F-7J||L-JFJL7LJ||F-J|LJFJ|7||L7|FJF7|||||F-7F-JF7F-JFFJL--7L7L-7LJJ|L7|||L7|L7||||L7LJ|L--7LJ|L7LJLJL7L--7FJL-J|LJLJFJF7L77-L--7JFJ
+L-7J-LJJ.L7L7F77|LL--J7FJ||F7L-7|FJFJL7|||FJ||||LJL7LJF7||L--7|F7F7|-L7FJ|F-JFJLJ|FJ|FJ||FJFJF-JF7FJF7L7|JF7|LL7F-JL7F-7L--7.L7|L-J7.L-7JF7|
+.LJ7.L|-F-|-LJF|77F----JFJLJ|F-JLJFJF7|LJ||FJ||L7F7L7FJ||L--7|||||||F-JL-7L-7L-7FJ|FJ|FJ||FJ.L7FJ||FJL-JL-JL7FFJL7F7LJ.L7F7L-7|L---7-|-7JLJ7
+F|-|7F|F.7J..|F-|FL-----JJF-JL--7|L7||L7FJ|L7|L7||L-JL7|L--7LJ||LJLJL-7F-JF-JF-JL7|L7|L7|||F-7|L7||L-7F7F7F7L7L-7LJL---7LJ|F7|L-7F7|-LJ.|FLJ
+F|LF--JJFJ7|-J.|LF--------JF7F7FJF-J||FJ|FJFJ|FJ|L7F-7||F7FJ|FJL-7F---JL7JL-7L--7||FJ|FJ||LJFJL7|LJF-J|||||L7L-7|F7F---J7FJ|LJLLLJ||LJF|L-JF
+7JFJJJF7L7-JF|FFJL------7F7|||||.L--J|||LJ|L7|L7||||FJ||||L-7L7F-JL-7F-7|F--JF--J|||FJ|FJL7FJ|.|L-7L-7||||L7|F-JLJLJF77FFL7L-7F|JL||FJ7L7-LF
+|FFLJFL77|.FJ.|JFJJF7F7FJ|||||||F----JL7F---J|FJ|FJ|L7||||F7|L|L---7||FJ|L--7L-7FJ||L7||F-JL-7FJF7|F-J|LJL-J||F7F7FFJL7-F.L7FJJ-7FLJJJFJ..LJ
+FJJ.|LJ..|J77F7||.F|LJLJFJLJ||LJL--7F7FJ|F7F7|L7|L7|JLJ||||||FJF7F-J|||FJF7FJF7|L7||FJ||L-7F7|L7|LJL-7||F---JLJLJL7|F7L---7|L7|J7-LJLFJJ-F-L
+F-7F-|7FF77|7J|F-7-L7F-7||F-JL---7FJ||||||||||FJ|FJL--7||||||L7||L-7||LJ7|LJFJ|L7|||L7||F-J||L7LJF---JL7L7F7F7F--7LJ||F7F-J|FJ7LF77JL-|L7JL|
+F-J|7J7-FLFJF.FL7L--J|FJL7L7F-7F7|L7||L7LJLJLJL7||F-7FJLJ||||FJ||F-J||F--JF7L7L7||||FJLJL7FJL7L-7L7F-7FJFJ||||L7FJF7|LJLJ.LLJJL-FJ|.F||F||F-
+|J7L|L|F|||-7-|FJF--7|L-7L7|L7||||FJ|L7L7F7J.|JLJLJFJL--7||||L7||L-7|||F--JL7L7||||||F-7FJL7FJF7|L||FJL7|FJ|||FJL7||L--7J.|J7FJF7.LFJF7FF-7J
+.L7FJ.LJ|F|.|7LL7|-L||LFJFJL7|||LJ|FJJL7LJ|7F.||F7FJF7F-JLJ||FJ|L7FJLJLJF---JFJLJ|||LJFJ|F7|L7||L7LJ|F7|LJFJ|||7.||L7F-J.7LFL7FFJ.F.J||-JLJ7
+7-7J|FJ.LLJFL7L||L7-LJFJFJ..|||L7J||FL|L7FJ-|FF-JLJFJ|L---7||L-JFJL-7F--JF7F7L--7||L7FJFJ||L7|||FJ-FJ|||F-JFJ|L7FJL7LJ|..L-L.77JFJ.L|JL|...|
+7JJ-77J-|.|F-7.-L-JF--JFJFFFLJ|FJ-LJ7.F7|L7FFFL--7FJ||F7F7|LJ7F7L7F7|L---JLJ|F--JLJJLJFL-J|FJLJ||F-JFJLJL-7L7|FJL7FJ|7L-|LL|7L7-J.|FJJ.L|.77
+|L--7-J7|.LF-JFJJ|-|F-7L7-|LJ.LJ|L|L7F|-|FJ-LF---JL-7||||LJ|F-JL-J|LJF------JL-7F7-F7.F-7FJL-7FJ|L-7L-7F--JFJ|L-7LJJ777|F.F-7-L7--F-JLJJ.7JJ
+7.FL.F-L..F-JLFJJLFJL7|FJJ.F-FL7JF77|F|J||7.LL---7F7||||L7-FL-7F-7L-7L-7F7F-7F7LJL-JL-JFJL7F7|L7|F-JF7|L--7L7L-7L-77JF-7..JF7..77.FJ-7.F-L-F
+L77L|-7LJ-|J7.|-F-|F-JLJ77F|-7LJ|L|L-.J.LJ-JJLF--J||||||FJLF--JL7L7FJLFJ|||FJ||F7F7F7F7L-7||LJF|||F7|LJF--JFJFFJF7L7||FFL-J7.7-LL7J.7LJ.L.|.
+|.|||L7JJFJLJ-F7LJ||J|J-L-J|-|LLFJF7|L-FJ|-L--L--7||||||L77L--7FJFJL77L-J||L7|LJ||||||L7FJ|L-7FJ||||L7|L-7FJF7L7|L7L-7-JJ.||F||J.|F7L7-FL-L7
+FFF|7-JL7J-7J7.7JLLJF|.-..LJ-L-LJ7|F-JLLF-7LF7LL|LJ||||L7|JJL|LJ7L7FJF---JL7||F-J||||L7||FJF-J|FJ||L7L-7FJL-JL7LJFJF-J.F-FLJ----7-7JJL-JF|F7
+FL---7|..L-J7F----JLFJ7.|FF7JLJLLF-|J.--J.7F-7JF-7LLJLJ7LJJ7|FJLF-JL7L-7F-7||||F7|LJ|FJ||L7|F-JL7LJ-L7FJL7F--7L7JL-J.|7J-FJ.FJ|FJFJJ.||F-J-F
+|.J|L777|JJ.77F|-L7FJF|7JL-J7LF.L|L7-7|F|.LLJ|-J|7.L||.L|JJF|J7L|F--J.LLJFJ|||LJ|L7JLJLLJ|LJL---JLFJ-|L7FJ|F7L-JJ.L.LL7--J|-L-F-7-J-FF|F|.LJ
+L..7L-77F-J-||L|7LJJ.F-J..L7L77F-F7|L|7FL7FFF|.L----|JF|LJ.L--7-LJJL-77||L7|LJF7L7L--7||L|J..L-|JL7..L-JL7LJ|7F|F7J-7F--J7J7|JFJL-..FL.|J..|
+LL-7-LL--7LFJ7.L7||.FL-LJ--FLJF|J|F|LLJ7-F77LLJFL-L7||F77|FJF|-.L|.J.F7FF.||LFJL-JF7FJJ7-L-J7.F-JFJ.L-J-L|F-J--7J.J-FJ.--7.----7F|7F7|FL7.F-
+.F||..LFJ--JJ|J-JJ-J7L7|JLF|LFL|7|7J.|7.FFFJ.|-J77--|JJLJ.L-J|-F-|7LFJ--J.LJFL-7F7|||.F||L-FF-|.F7-F-JLLFJ|L|7F|7-LF---77.F||.LFL--|LJJLL-JJ
+FFFL77.J-L777|J.||-LJJFF-FFJF|LLFF|-|7-J-.F--J7-L--FJ7|.L7L7-7.|F|..LJ-J|.L.F||||||LJ-J7JJLL||F-||F|-L.FL7L-7-|--.FJ|FL|7FFL--.LLLLL7F|.LLJ|
+FFLJLL7||J|-F|F-||JFJF|J.--7FJ.FJJ.L.||J|FJ||F7.J.FF7FFJF-J|J.F-F7.|.L7JLF-7F7-LJLJF|JLJ|-F-7-L7|-F--JF7-|F-JJ|7-FLJFJJLL-|-L-|J|LF--FJ7L..L
+F7J-LJ-LJ7|.-LJ7.|.7LL7.||L|-7--J7L-F-7.J7L77-L7F7JL|-J.LJF7L7L-JL7|7F77-77||.|||-J7..F7---.J|.L..-JJLLJ-LJFF7JL-7J-F|-||.JJ.FJ7--.7.|J|JFJJ
+L7J.LJ.LLF7-LJ-FLJ7LJJL7-F.JJL.LLJJ.7.7-L-FJ-.|LJJLFFJ-JL-J|.L-L-.-L-|J..J7JJL-L--L-7--.L-LL----|-L|J.|.-J.|-JLL-7JJLLLJ7.LJJJ-|7-LL-|-F-7J7
diff --git a/solutions/2023/francisco/10/main.py b/solutions/2023/francisco/10/main.py
new file mode 100755
index 0000000..aed323e
--- /dev/null
+++ b/solutions/2023/francisco/10/main.py
@@ -0,0 +1,91 @@
+from dataclasses import dataclass
+from enum import Enum
+from collections import deque
+from util import FileParser
+import os
+
+dir_path = os.path.dirname(os.path.realpath(__file__))
+
+
+@dataclass(frozen=True)
+class Coordinates:
+ y: int
+ x: int
+
+
+def part_1(file):
+ """should return the solution"""
+ parser = FileParser(dir_path, file)
+ data = parser.read()
+ s = None
+ for row_i, row in enumerate(data):
+ for col_i, col in enumerate(row):
+ if col == "S":
+ s = Coordinates(y=row_i, x=col_i)
+ break
+ else:
+ continue
+ break
+
+ queue = deque([s])
+ seen = {s}
+
+ while queue:
+ c = queue.popleft()
+ print(c)
+
+ tile = data[c.y][c.x]
+
+ # tile north
+ north = Coordinates(y=c.y - 1, x=c.x)
+ south = Coordinates(y=c.y + 1, x=c.x)
+ west = Coordinates(y=c.y, x=c.x - 1)
+ east = Coordinates(y=c.y, x=c.x + 1)
+
+ if (
+ c.y > 0
+ and tile in "S|LJ"
+ and data[north.y][north.x] in "|7F"
+ and north not in seen
+ ):
+ seen.add(north)
+ queue.append(north)
+
+ # tile south
+ if (
+ c.y < len(data)
+ and tile in "S|7F"
+ and data[south.y][south.x] in "|LJ"
+ and south not in seen
+ ):
+ seen.add(south)
+ queue.append(south)
+
+ # tile west
+ if (
+ c.x > 0
+ and tile in "S-J7"
+ and data[west.y][west.x] in "-FL"
+ and west not in seen
+ ):
+ seen.add(west)
+ queue.append(west)
+
+ # tile east
+ if (
+ c.x < len(data[0])
+ and tile in "S-LF"
+ and data[east.y][east.x] in "-J7"
+ and east not in seen
+ ):
+ seen.add(east)
+ queue.append(east)
+
+ return len(seen) // 2
+
+
+def part_2(file):
+ """should return the solution"""
+ parser = FileParser(dir_path, file)
+ data = parser.read()
+ print(data)
diff --git a/solutions/2023/francisco/10/test.txt b/solutions/2023/francisco/10/test.txt
new file mode 100755
index 0000000..73b3d66
--- /dev/null
+++ b/solutions/2023/francisco/10/test.txt
@@ -0,0 +1,5 @@
+.....
+.S-7.
+.|.|.
+.L-J.
+.....
\ No newline at end of file
diff --git a/solutions/2023/pughmds/bash/day01/main.sh b/solutions/2023/pughmds/bash/day01/main.sh
index d3e9abe..5729bbc 100755
--- a/solutions/2023/pughmds/bash/day01/main.sh
+++ b/solutions/2023/pughmds/bash/day01/main.sh
@@ -20,6 +20,6 @@ run() {
echo $total
}
-#result=$(run "../../inputs/day01/test1.txt")
+#result=$(run "../../inputs/day01/test5.txt")
result=$(run "../../inputs/day01/input.txt")
echo "Result: $result"
diff --git a/solutions/2023/pughmds/bash/day02/main.sh b/solutions/2023/pughmds/bash/day02/main.sh
index 716956f..ff55ab7 100755
--- a/solutions/2023/pughmds/bash/day02/main.sh
+++ b/solutions/2023/pughmds/bash/day02/main.sh
@@ -41,6 +41,6 @@ run() {
-#result=$(run "../../inputs/day02/test1.txt")
+#result=$(run "../../inputs/day02/test5.txt")
result=$(run "../../inputs/day02/input.txt")
echo "Result: $result"
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day10/input.txt b/solutions/2023/pughmds/inputs/day10/input.txt
new file mode 100644
index 0000000..9307e72
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day10/input.txt
@@ -0,0 +1,140 @@
+777FJ.F|-|FFF-L-J7.7.F-7--L-7-L-LF-7-FFF.FLF7.FL7-J77F-7.L7-7.-F77F|FLJ7.L---7.7---J77F|.F|-J7FFF|7-F7-77.FF7|-7-F77F-.J7.777FF|F|-F77|-77.F
+L|F|JJ||.FL7L-JFJLJFFJFJJ|FFJFJ-LLJJ.7.F-.LJJFF|L7.F-.LJFLFJ|7|||.|FJ|LJ7J...-J77.L|F|7.--.LLF-FFFL7||7LF-F7-J7JF|77L-|L-L7LFL-F-7JLJ-|.L7.F
+L--JJ|L-.LLJ-L-J||FJJ-JJFF7JFL77.LL-|J7|J.-L-LFJ7|-L.FFJ|7|.L7FFJFJ|LJ-FL.-77|7|F7FLJ|.F-L7|.|JFL-.L|JF|L-L77J7.|JL7F7|7LLJ...||-J-FL-L|JJF|
+FF|-L7.J..-JFJ.L7-|J.FL7F7J.|-7-F7L--F-JL-J|-FJ-||7L|7J-J77F-L-JLFJF7|L|-L-J7-J7.J-J--.|F||-J7-|J|-FJ.FFJ.||JL7-L--L--J-F.LF7LL.--77.F.|||L|
+F|.7F-7-|.|.||.|F7JJ.LL||LJ-JFL-JJF|.|JJ-7.F.7||L-F--7-7.F7JFLL7FF-|L-7|J|.L|7-7.|J7-LL--JJ|.JF-7L|.7FLL..L7FJ|J.F|7-JJ|LL7L||.7L-7J-J-F77-7
+F7.LF|.FJF77JF-FLJJ.FL.L|J..L|J.|.LF-77.L7FLFJ-JJJ|F-J.L.|L7J77F77JL-7L77|.|.|JL|.-7..L-FL7-|LFL7FF-FL-LL-F|7.-7F7F-7|FF7|F.J-|JLFJJJ-7-7|-J
+7JFFL--J.7|F-F7||J-F.|.|.L-|FJ-7J|L|FJ-L-77J|7L|.FJ|JJ-L7--JLF-||JFF7L7|777F-7.L-7.F7.FF7LF7L-|FJ7JL|||LL7FJJ.L-LJ||L--J-|L7-|L--J.F-7LL|J77
+|--77|LJFL-|FLF7JLFF7-L7F7.|F-F-.|.||7.||LF7-|77FJFJJ.---7|F|LFJL--J|FJL-7JJJJ|7J|.|-F-JL-JL7-|7FJJ..F7F|7J7.-.J|FJL.L|7LL-JF77FL.FJFF.JL-JF
+LLJL|7LFFJ7FJ-|77.L||7L-L7FF7-|J-FFJ|7F7-7L|-F-7L7|LF..FLJ-F|-|F-7F7LJF7FJ7-|J...L|JLL7F--7FJF7-7|..F77F|-----J-|J|.|.J7-||F7J77|LF-JJ..FJ.7
+|L|.L|.J.7F|..JLF.F||7J..FF|L777J|L7L7||J7|F7L7L7|L--77-L7FJ|.|||LJL-7|LJL7777F|7--7|.LJF7||7||.L7..|JF-JFLJL7J-|7-F|F|77-L7|.7---L-.F|.|FF|
+L.|.L|L.LF-JF7.|F--J|J-FFF|L7||F77|L7|||--FJL7L7LJF--JJJJ|L7L-LJF--7FJL7F77F-7LJJFLF7-F7|||L-JL77FJ7F-77FF-F-|7|L7FL77|F7-|L|-|..7J..|J-7|.|
+|FF77FJL-L|FF77L|F-7|7JF--7FJL-J|F--JLJL7FL7FJFJF-JF-7JJF--7-FL.L-7|L-7LJL7|FJ7|.J-|L-JLJLJF--7L7-JFL7L-7|FJL|-JLJ.LF7LLJ7LJ.F|7.|.L7L|-JFFJ
+77L--7.L-7JF||7.LJL||F7|F-JL---7|L---7F7L7FJL7L7|F7|FJ-F|F7|-|JFF7||F7|F--J||F7-F7.L----7F7L-7L-JJ-F7|F-J-L-7J.|7J7.L|-LFFJFFFL--LJ.F-FJF77J
+.-JL-L-LLFF7||7F7F7|||LJL7F----JL7JF7||L-J|F7|FJLJLJ|7-FJ|LJ7F7FJLJLJLJL--7||||7F7-|F--7LJL7FJF7F77||||7|.|-J.FJJLJ-|L-7|JJFJJ|.|.LF7LL7LFJ.
+J7FJ.|||FL|LJL7||||||L-7FJL--7F-7|FJ||L--7LJ|LJF7F--JF7L7L7JF||L------7F--J|||L-J|F-JF-JF7L|L-J||L7|LJL77F-77F-F-7F7|F-7J|F-7FF7|.LL|JL|LLJ.
+LLJ-FFL-|F|F-7LJLJ|||F7|L7F7LLJ-||L7LJF--JF7|F-J|L--7||.|FJF-J|F7F7F--JL7F7|||F--JL-7|F7||FJF--J|FJL-7FJF7-LJ-L|FJ-L|7-JFJJLF-LJ-L----.|.L77
+FJ||F7LFJFLJJL---7||||LJFJ||F7F7|L7L7FJF-7||||F-JF7FJ||FJL7L-7LJLJ|L--7FJ|||LJL7F7F7|||||LJFJF--J|-F-JL-JL77JF-JL7.-|J.LL7FL|7.|.LJJ.|.L|F-7
+-7JFL|JLF7L-F----J|||L-7L-J||LJ||FJFJ|JL7|||LJL-7|LJ|||L7FJF7L---7|FF-JL7|||F--J|||||||LJF7L7L--7L7L-7F---JF7L-7FJ--J-|L|77.FL7-7JL||77|L|FF
+LLF|7J..||J.|F---7LJL-7|F--J|F7LJL7L7L7FJLJL7LF7|L7F-JL7|L7|L7F7FJL7L--7||||L7F-J||LJ|L7FJL-JF-7|FJ7FJL---7|L7FJL7-7JF-7F7||J.F77..7|F|7..FL
+..FJ-.7FLFJ7||JF-JF7F7LJ|F77LJ|F-7L-JFJ|F-7FJFJLJFJ|F--JL7|L7|||L-7L-7L|||LJFJ|F7|L-7L7||F7F7L7LJ|F7L-7F--JL7||F-J-F7|FJ|L-7LF7.F7F|||F-|-||
+|7LF-FJFJFJFJ||L--J||L-7||L7F7LJJL--7L-JL7LJ-L--7L7|L7F7FJ|FJLJ|F7L-7|FJLJF-JFJ|LJFFJFJ|||LJ|FL-7|||F7||F7-FJ||L77FJLJL7|F-JFJL-7---J-|||.--
+|7LJF|-|F|-L-JF7F--J|F-JLJFJ||F77|F7L7F--JF7FLF7|FJ|FJ|||FJ|F--J|||FJ|L7F7|F7L7L--7L7L7|||F-JF7FJLJLJ||||L7L7|L7L7L-7F-J|L7LL7F-J|.LLJJF-|||
+JJ.LF|F-7JFL-FJ|L-7FJL-7F-JFJ||L7FJ|FJL7F7|L7FJLJL7|L7||||-|L7F-JL7L7||LJ|LJL-JF--JFJFJ|||L77||L7F---J|||FJFJL7L7L-7||F7|FJLFJL77J7.FF.L7|FJ
+||FFL-7-77FL7L7|F-JL7F-JL-7L7||FJL7||F-J|LJFJL---7||FJ|||L7|FJL--7L-J|F7-L7F--7L7F7L7L-J|L7L7||FJL7F7FJLJL7L7FJFJF-J|LJLJL-7|F7L7-F-JJF.77FJ
+FF|.LJ|7|F7-F-JLJF-7|L---7|||||L7FJ|||F7|F-JF-7F-JLJ|FJ|L7LJL-7F7L-7FJ|L-7||F-JFJ||LL--7L-JFJ|||F-J|||F---JFJL7L7|F7|F-----J||L-J7L|JF.FL-JJ
+J|J.|F77L|-FL-7F7|FJ|F---JL7||L7|L7||||||L7-L7|L--7FJ|FJ7L7F7FJ||.FJL7|F-JLJL-7|7||F-7FJF--JFJ|||F7||||LF7LL7FJFJLJLJL----7FJL7-F--7.|L|||JJ
+L|JFFFJF7.LFJ-LJ||L7|L7F7F7LJL7|L7||||||L7|F7||LF-JL7||F7FJ|LJFJL7|F-J|L7F7LF7|L7|||FJL7|JF7L7||||LJ||L7||F7||FJF7F7F-----J|F-JFJF-J---|-J.F
+L|LF-L7L-J-||||.LJ.|||LJLJL7F7LJFJ|||LJL7|||||L7|F7FJ|LJ|L7|F7L-7LJL-7|FJ||FJ|L7|||||.FJL7|L7|LJLJF-J|FJ|||||LJFJ||LJF-7F7|||F-JFJ-J7JF||FF7
+.LF-F--7|LFF-|7F7F7LJF7F---J||F7L-J|L-7FJ|LJ||FJLJ|L7|F-JF|LJL77L-7F-J||FJ|L7L7|||LJL-JF-J|FJL7F-7|F7||FJLJLJF7|.LJF7|FJ||FJLJF7L7-J|J7|FLJ|
+-77F7.L-|L||-77|||L-7||L--7FJLJL--7L--JL-JF-J||F7FJFJ||-F7L-7FJF7FJ|F7|LJFJFJFJ|||F-7F-JF7|L7.LJJ||||||L7F---J|L---JLJL7|||F--J|FJJ7JFF--J.7
+|FJLJ7--.-LFF7FJ|L-7|||F7|LJF7F---JF--7F--JF-J|||L7|F|L7||F-JL7|||FJ||L-7|FJFJFJ||L7LJF7|||FJF7F7||||||J||F7F7L--7F7F--J|||L--7LJ7F7--JJ|.-J
+FF---77|7FF7||L7|F7|||LJ|F--J|L---7|F7LJF-7L7FJ|L-JL-JFJ||L7F-J|||L7|L-7||L7L7L7||FJF7|||||L7|||LJ||LJ|FJLJLJ|F7JLJ||F-7|||F7FJF7F7LFJ7FF77J
+|JL77FL7JFJLJL-JLJ|||L-7|L-7FJF---JLJL-7L7|FJL7L--7F--J|||F|||FJLJFJL7FJ||-L7L7|||L7|LJ||||FJ||L-7LJF-JL7F---J||F7-LJ|FJ|||||L-JLJ|-L7L7|F7J
+777FF7J|FJF7F7F7F7LJL--JL7FJL7|F7F-7F--JFJ|L-7L7F7||F7F7||FJL7L7F7|F7|L7||F7L7||||FJL7FJ|||L7|L77L-7L7F7|L-7F7|LJ|F-7|L7||||L---7FJ|.L7|||.|
+L77LLLJ-L7|||||LJL7F7F--7||F7|LJLJ|||-F7|FJF7|FJ|||||||||||F-J|||LJ||L7|||||7||||||F7||L||L7||FJF77L7||||F-J|||F-J|FJL7||||L---7LJL77.J7.F77
+-|-F7L.-LLJLJLJF7-LJLJF7||LJ||F7FF7|L7||||FJ||L7|||LJLJ|||||F7FJL7FJ|FJ||LJL7|||LJ||||L7|L7|||L7||F7|||LJL--JLJL-7||F7|LJLJF---JF---777FL-F7
+L|JJL-JF||.F---JL-7F--JLJL--JLJL-JLJ7LJ||||FJ|FJ|||F---J|||||||F-J|FJ|FJL--7|||L7-||||FJL7||LJFJ|||||||F---------J|||||F---JF7F-JF7FJJ7-7.L-
+FL7.|FLLF--L7F---7|L--------7F-------7FJ||||FJL7|||L-7F7|LJ||LJ|F7|L-JL7F-7|||L7L7LJ||L7FJ|L-7|FJ||||||L--7F-7F---JLJLJL----J||F7|LJ|J|F7JJ7
+JJ|.77.LFJJLLJF--JL-77F--7F7LJF------J|FJ||||F7|||L7LLJ||F-JL-7LJ|L7F--JL7LJ|L7L7||FJL7|L7|F7|||FJ|||||F--JL7LJF-7F7F7F--7F-7LJ||L77|JF-J.|L
+FFF-FJL-|||LF7L--7F-JFJF7LJ|F7L7F----7|L7LJ|LJ||||FJF7FJ||F7F7L-7|FJ|F7F7L-7L7|FJL7L7FJ|FJ||LJ||L-J||||L----JF7L7||LJ|L-7|L7L7FJ|FJ7|F|.J--J
+FL|..7J|FF--JL---J|F7L-JL-7LJL7||F---JL-JF-JF7|||||FJLJFJ|||||F-J||.LJ||L7FJFJ|L7FJJ|L7||FJL7FJL-77LJLJF-----JL-J|L-7L--JL-JFLJ.LJFFJJL|F|-L
+LL|..--7FL-------7LJ|F7F-7L-7FJLJL------7L7FJ||LJ||L7F7||LJLJ|L-7|L7LFJ|FJL7|FJFJL-7|FJ||L7FJ|F-7|F7F-7L-7JF----7L--JF-7F-----7F---7J.LL7J.|
+L|LFFL-LF-7J.F---JF7LJ|L7L--J|F7F-7F7F-7|FJL7|L-7||FJ||L--7F-JF7|L7|FJFJL7FJ||FL7F7|LJ||L7||FJL7||||L7|F7L-JF7F-JF-7J|FJ|F----JL7F-JJ77|L77.
+|.F-|.|LL7L--JF7F-JL-7L7L---7LJ|L7||LJFJ||F7|L--J|||FJ|F7FJL-7|LJLLJL7L7J|L7|L-7|||L--7L-J||L7FJ||||FJ|||F--JLJF7L7|FJL-JL---7F7||F7F7FF7.77
+F7|-|.FF-JF-7FJLJF7F7L7L-7F7|F7L-J|L-7|FJ|||L---7||||L|||L7F-JL-7F---JFJFJFJ|F-J|||F7FJF7FJ|-||LLJ||L7|||L-----JL7|||F-------J|LJLJL-7-J.FF-
+FLF-77LL7FJLLJF--JLJL-JF7LJLJ|L7F7|F-JLJ-LJ|F7F-JLJLJFJ|L7||F7F7||F-7FJ.L7L7|L-7LJLJ|L-J|L-JFJ|F--JL-JLJL-------7LJLJL-----7F-JF7F--7|F|F-7J
+L-|.FLJ.||7JF7L--7F7F7FJ|F7F7L7LJ|LJF7F7LF7LJLJF7F---JFJFJ|||||||LJFJL-7|L7||F7L--7F|F7FJF-7|FJL--7F7F7F-------7L7F7F7F-7F7LJF7||L-7LJ77LLL.
+|LJFL|JFLJF-J|F--J|||||FJ|LJL7|F-JF-J|||FJL7-F-J|L---7L7L7||||||L7LL-7FJF-J||||F-7L7|||L7L7|LJF---J|||||F-7F-7FJ7LJ||||LLJL-7|LJL--J|JL7L|J7
+L.L|7F-JJLL-7LJF7FJLJ||L-JF7LLJL--JF-J|||F-JFJF7L7LF7|FJF||LJ||L7L--7|L7L7FJ|||L7|FJ||L7|7||F7L-7F7|||LJL7LJ-|L---7LJ|L----7LJ|F7JF77L|L7.|J
+L7FLFLJF--7.L-7||||F7LJ.F-JL-7F---7L-7||||F-JFJL-JFJLJ|F7LJF-J|7|F7FJL7|FJ|FJ|L7|||FJL7LJFJLJ|F-J|||||F-7L--7L----JF7|F7F-7L--7||FJL7-77L|-J
+J7F7L-FL7FJ-F7LJ|L7|L---JF--7|L--7|F-J|||LJF7L-7F7L--7LJL7LL-7|FJ||L-7|||FJL7|FJ|LJ|F7|F7L--7|L--JLJLJL7L---JF-----J|||LJ||F-7LJLJF-JJF7|LJ.
+|LFJLFF-JL-7|L7-L7||F7F7FJF-JL--7||L--JLJF7||F7LJL-7.|F--JF--J|L7||F7|LJ|L7FJ|L7L-7|||||L---JL-----7JF7L-----JF--7F7||L--7|L7|F7F7L-77FJJ7L.
+J|LL-LL---7LJFJF7||LJLJLJ.L----7LJ|F7F7F-JLJLJ|F-7FJFJL-7||F-7|FJ||||L77L7|L7L7|F7|LJLJL----7F7F--7|FJL-------JF7LJLJL---JL7|||LJL--J7J.LF.|
+F-J|J7FF7LL-7L-J|LJJF7F--7F----JF7LJLJ|L-----7LJFJ|JL7F7L7LJFJ||FJ||L7L7FJ|-L7||||L--7F7F---J|||F-J|L-7F--7F---JL7F7F----7JLJ|L-7-|LLJL|-|F-
+FLF-7-F||F--JF--JF7FJ||F7|L---7FJL-7F7L--7F--JF7L-JF7||L7L-7L7||L7|L7|FJ|FJF7||||L7F7||LJF--7||||F7L-7LJF-J|F----J|LJF7F7L--7|F-J7F-7-7JJLJJ
+L.L7|F7||L--7L7F7||L7|LJ||LF--J|F--J|L-7FJL--7|L77FJ|||7|F-J|LJ|FJ|FJLJFJ|FJLJ|LJ-LJLJL7FJF7LJLJ|||F7L-7L--JL7-F--JF7||||F7FJ|L7J-7L-JFJLLJ7
+J7L|LJLJ|JF7|FJ|LJ|FJL7FJ|FJF--JL--7|F-JL----JL7|FJFJ|L7|L7F---JL7LJF7L|FJL--7L---7F--7LJFJL---7||LJL-7L--7F7L-JF7FJLJLJ||||7L-JJ|.|7.|.|JL-
+L7LL---7|FJLJL7L-7|L-7|L7|L-JF7-F-7LJL---7F7|F7|||FJF|FJ|FJL7F--7L--JL7LJF---JF---JL-7L-7L----7|LJLF7|L7F7LJL---JLJF7|F7LJ||JFJ|F77|LFF.|.|.
+FLF----JLJF-7FJF-J|F7|L-JL---J|FJFJF7F7F-J||FJLJLJL-7LJ.LJJJLJF7|F7F7FJF-JF7F7L7|F---JF7L7FF7FJL7F7||F7||L---7F7F--JL-JL-7LJ||LF|J-J.7J.|F.|
+F7L------7L7|L7L-7|||L-------7||FJFJLJLJJFJLJF7F-7F-JF7F7FF7F-JLJ|||||JL-7|LJL7L7|F7F7|L7L-JLJF7LJLJ|||LJF--7LJ||F----7F-J.|FF-7J7.F|JFFFJFJ
+||F7F7-F7|FJL7|LFJ|||F7F77F7FJLJL7L-----7L-7FJLJFJL--JLJL-J|L7F-7|||LJF--JL--7L7|||||LJJL7F---JL---7|||F-JF7L-7||L-7F7LJF77FFJFLJL7-L.JJJ--J
+|LJLJ|FJ|LJF-JL7L7||||||L-JLJF-7FJF--7F7L--JL-77L------7F--JFJL7|||L-7L7F7F7FJFJ|||LJF7F7||F-------J|||L--J|F7LJ|F-J|L--JL7-F7|L7.F-J-L7F.J7
+L7F-7|L7|F7L--7|FJ|||||L--7F7|FJL7L-7||L-7F7F-JF---7F7LLJJF7L7FJ|||F-JLLJLJ|L7|FJ||F-JLJLJ|L--7F-7F7LJL---7LJL--JL7FJF--7FJ-|L77F-7J||LFJ7-F
+FLJFJL-JLJL---JLJFJ|LJL---J||||F7L--JLJF7||LJF-JF-7LJL----JL7||FJ||L-77JJ.FJFJ|L7LJL------JF--J|FJ|L7F7F-7L----7F-JL7|F7LJF7|FJ-L7L--7LL--.F
+|JFL7F-7F-7F--7F7L-JF7F-7F-J||||L7F7F--J||L--JF-JFJF-7F-----JLJL7|L7FJJFF-L7L7L-JFF--7F-7F7L--7|L7L7LJLJFL----7LJF7FJLJL-7||||F7.|F--J7.FJ-J
+F7F7LJFJ|FJ|F-J||F-7||L7LJF7LJLJLLJLJF7FJL7F7FJF7L7L7|L-77F-7F7FJ|-|L-7-J.LL7L7.L-L7FJL7LJL7F7LJ-L-JF--------7L7L|LJF----J|||||L-JL--7-L-7F|
+|LJ|F7L7|L-JL-7|||FJ||FJF-JL7F7F-----JLJF7LJ|L-JL7L-JL-7L7|FJ||L-JFJF-JF|.F-L7|7-|L||F7L--7LJL--7FF7L-7F----7L-JFJF7L--7F7|||LJF-7F--JJLL|-|
+L-7LJL-J|F7F7FJ|||L7|LJLL-7FJ||L----7F7||L7FJF-7FJF7F7|L-J||FJL-7-L7L7L-L|.LLLJF-7FJLJ|F7FL----7L-JL--J|F-7FJF7J|FJL---J|||||F-JFJL--77.||FJ
+JLL-----J|LJLJFJ||FJ|F----JL-J|F7F--J|L7L7|L7L7LJFJ|||F7F7|||F--JF7L-JFF|L-.|L-L7|L--7|||F7F--7L--7F---JL7LJ7|L-JL7F7F7FJLJLJL-7L--7FJ|FL-||
+F|LF-----JF7F7||LJL-JL-----7F7LJ|L-7FJFJFJL7L-JF7|FJ|||LJLJLJL---JL--7-7F7JL|.L||L---JLJLJLJF7L---J|F----JF--JF--7LJLJLJF7F7F--JF-7|L-7JJ.LL
+|7-L-----7|LJLJF7F7.F--7F7FJ|L-7L-7LJFJ-L-7|F7J|LJL7|LJF-7F-----7F-7FJLL|L7-J.F-JF7F7F7F7F-7|L7F---JL----7|F-7L-7L7F----JLJLJFF7|FJ|F-JJF777
+L|-F-----JL7.F7|LJL-JF7LJLJFJF7L7FJF-J7F7.|LJ|FJF--J|F7L7|L----7LJLLJ7FLF7|.LFL-7|||LJLJLJFJ|FJ|F-------7LJL7L-7|-|L---7F77F-7|LJL7LJJLFJ||7
+||.L7F7F7F7|FJLJF7F-7||F--7|FJ|FJL-JF-7|L7|F-JL7L---J|L-JL-----JF-7F-7-7L--7.-LJLJLJ.F--7.|FJ|FJ|F7F---7L---JLFJL7L---7||L7L7||F--JF7.F|L7--
+F---LJ||||LJL-7FJLJF||||F-J|L7LJF---JFJ|FJ||LF-JF7F--JFF7F7LF7F-JFJ|FJFF-FL777|7F7LF7L-7L-JL7||FLJLJF7|L-----7L-7L--77LJ|FJFJ|||F7L||F77.|7.
+|||||-||LJF---J|F---J|LJ|F7L7L-7|F7F-JFJL7|L-JF-JLJF7F7|LJL-J||F-JFJL7J|.7-F-7F-JL-JL--JF7F-JLJF----JL-------JF7L---JF7FJL7L7LJ||L-JLJL-7-77
+FL7J|7LJF-JF--7|L----JF7LJL-JJFJ||LJF-JF7LJF7FJ.F7F|||||F----J|L-7L7FJJ-7|.|FJL---7F--7FJ||F--7L---------7F7F-JL7F---JLJF7L7|F7LJF------JJ-J
+7J.||FF-JF7L7FJ|F----7||F----7L-JL-7L7FJL-7||L7FJL-JLJLJL-----JF7L-JL-77-|F|L7FF7FLJF7LJFLJL-7L7F7F7F7F7.||LJF-7LJF7F--7|L7LJ||F-JF7F77FJLFJ
+F777|7L-7||FJL7|L---7LJLJF7F7L----7L-JL--7||L7LJF7F-7F--------7|L7F-7FJ-F7FJFJFJL---JL----7F7L7||LJLJLJL7LJF-JJ|F-J|L-7|L7L7FJ||F-JLJL77FFJJ
+-JL-F-F-J|LJF7LJF---JF-7FJLJL7F--7|F-7F-7|||L|F-JLJFJL-------7|L7LJ.LJFL|LJFJ-L------7F7F7LJL-JLJF-----7L-7L--7|L-7|F7||FJFJL7|LJF--7FJJ|F||
+J77F|JL-7L-7|L--JF--7L7||F7F-J|F-JLJ||L7LJLJFJL--7FJF-7F7F-7FJL-JF7F7F7-L-7L7|FF---7.LJ||L----7F7|F----JF7|F7FJL--JLJLJ||FL--J|F7L-7LJLLL-F7
+|7FFJJ.FJF-JL----JF-JFJLJ||L--J|F7F-7L7L---7L7F-7||FJL|||L7|L---7|LJLJ|F7FJFJF7L--7L--7LJF----J||||F7F--J|LJ|L--7F-7F7LLJF-7F-J|L--JL|-||JLL
+||L7.LL|FJF----7F7|F7L-7.||F7F7LJLJFJ-L----JJLJ|LJ|L7FJ||FJL----JL-7F-J||L7L7||-F7|F--JF7L-----JLJLJLJF--JF7L---JL7||L-7FJFJL-7L---77J7-|.F7
+||L--.LLJJL7F-7LJLJ|L--JFJLJLJL-7F7L-------------7L7|L7|||F7F7F7.F7||F7|L-JFJ|L-J||L---JL-------7F7F7LL---JL--7F7FJLJF-J|FJF7FJF7F7L7F|J|777
+||7F|.FLJJ.LJFJF7F-JF7F7|F-7F7F7LJL--7F-7F-----7FJFJ|FJ|LJ||||||FJ||LJ|L--7L-JF--JL7F-7F-7F7F7F7LJLJL-7F------J|LJF--JF-JL7||L7|LJL7L7J.LLFL
+L7F||F7J.FFF-JFJ||F7|||LJL7LJLJL-7F-7|L7|L----7|L7L-JL7L-7|LJ|||L7||F-JFF-JF7FJ-F7JLJFJL7LJLJ||L7F7F-7LJF------JF7L---JF-7LJ|-LJF7-L-JF777.L
+FL-|--7.FL|L-7L7LJ||||L7F-JFF7F--J|FJ|FJ|F7F--JL-JF--7|F7||F7LJL-JLJL7F7L-7|||F7||F-7L--JF7F7||FJ|LJJL--JF-7F7F7|L--7F7L7|F7L7F-JL7JJFFF7JFJ
+F||||.L77FL7FL7|F-J||L7LJF--JLJF--JL7||FJ||L----7FJF7|LJLJ|||F7F---7FJ||LFJ|LJ|||||FJ-F-7|LJLJ|L-JJF7-F--J|LJ|||L--7LJL-JLJL7LJF--J|LFJL||-.
+7JL-7-|JLJFFL|LJL-7|L7|F7L-----JF---J||L7||F7F--J|FJLJF--7LJ||LJ|F7|L-JL7L7L7FJ|||||F7L7|L----JF7LFJL7L--7F-7LJL---J|F----7JL-7L-7F77.L-7.JJ
+LL-J7-JL|-||LF----JL-JLJL------7L--7-LJ|||||LJ.F7|L7JFJF7|F7LJ7F7||L7F--JFJFJL7LJ||LJ|FJL7F7F--JL-JF7L---J|FJF7-F7F7FJF---JF7JL-7LJL77FJLJ.|
+..|.F7|F77JJLL7F7F7F--7F7F7F--7||F-JF7F7LJLJ.F7|LJFJFJFJLJ||JF-JLJL-J|F7-L7|||L-7LJF-JL-7|||L-----7|L7F7F7|L-JL-J|||L7L----JL7JJL7F-J-7J.F|7
+.|--.L-JJJ77LFJ|||LJF-J|||||F-JL-JF-JLJL7F7F7|LJF7L7L7L--7|L7|F7F---7||L7FJL7F--JF7|F7F7||||7F7F--J|LLJLJ||F---7FJ||FJF7F---7L-7L|L77-J-|--F
+FFJJ-FLJ.7-|.L7|LJF7L--JLJ||L---7FJF7F7FJ||||L7FJL-JFJF--J|FJLJLJF-7|LJFJ|F-JL-7FJ|||||||||L7||L---JF-7F7LJL--7|L-JLJFJLJLF7L--J-L-JF7J.||F|
+LJ7J||J|FJL77FLJF7||F7F--7LJ-F7F||FJLJLJFJ|||FJL---7L7L7LFJL7FF7FL7LJF7|FJL7-F7||FLJ||||||L7|||F-7JFJFJ||F7F-7||F-7F7|F7F7|L---7LF--J|.|JFJJ
+.LL.F77-|-F|F---JLJ|||L-7|F7FJL-J|L-77F7L7LJLJF7F--JFJFJFJF-JFJ|F7L--J|LJF7L7|LJL7LFJLJ||L7||||L7L7L7L-JLJLJFJ||L7|||LJLJLJF---JFJF--J-F.7J.
+7.|-|7|F7.-7L-----7|||F-JLJLJF7F7|F-JFJL-JF-7FJLJFF7L7|FJFJF7L7|||F7|FJF-JL-JL--7L7L7F-JL7|||||J|FJFJF-7F--7L-J|FJLJL-7F---JF7F7L7L--7|L-F-J
+LF-.LFL-7J7F|FF---JLJLJF7F7F-JLJLJL--JF-7FJ-LJJF-7||L|||FJ||L-JLJLJL7L7L---7F7|FJFJFJL-7FJ||LJ|FJL-JFJ.LJF-JF-7|L----7LJFF7-|LJ|FJF--JJ77|7|
+F||JFJFL|FLFL-L--7F-7F7|||||F---------J-|L----7L7LJ|FJLJ|F7L-------7L7L7F--J|L7L7L7L7F-JL7|L-7|L----JF-7FJF7|FJL7F7F7L---JL-JF-J|FJJLJ7L7JLF
+||F.7.J-777J|FF--JL7LJLJLJLJL--------7F7L-7F7FJJL7FJ|F--J||F-7F7F-7|FJFJL7F-JFJ-|FJ|||-F7||F7|L----77L7|L7||||F7LJLJL7F7F7F7FJ.FJL-7|FJJ||JL
+F-L7L|77||7JF-L----JF7F7F7F7F7F7F----J||F7LJLJ.F7|L-JL-7FJ|L7|||L7|||FJF7|L-7L7FJL7FJL7|||S|||F-7F-JF-JL7LJLJLJL---7FJ|||||LJF7|F--J7JJ-7L7.
+7.L7-L-|-L|7|LJF--7FJLJLJ||LJ|||L-----JLJL7F7F7|||F-7F-JL7|FJ||L-JLJ||FJLJF-JFJ|F-JL-7|||||||LJFJL7|L--7L---7F-----JL7||||L--JLJL--7JJ-L-.|J
+F-F-.LL|..|F|JJL-7LJF-7F7LJF7LJL-----7F7F7LJ||LJLJL7LJ7F7|||FJL7F7F7LJ|F-7L-7L7|L7|F7|LJLJ||L-7L7FJF-7.L---7|L------7||||L7F7F-7F7FJJ7LL|.L7
+L--|-7-F77F-J|||FL7FJ|LJ|F-JL-------7||LJL--JL7F---J7F-J||||L7JLJLJL-7||FJF-JFJ|FJFJ|L7F-7||F7L-J||L7L-----JL-------J||||JLJ|L7||LJJ|F-7|-|F
+7JF--F7JL||..FF---J|F---J|F-7F7F7F--JLJ.F77F--JL7F7F7L-7LJLJFJF7.F7F7|LJL7L-7|FJ|.L7|FJL7LJLJL7F-JF7L-----7F7F----7F7LJLJF-7|FJLJ-|FL-JLJ7L|
+7.||FL-.FF--FFL----JL-7F7|L7LJLJLJF--7F7|L7L---7|||||F7L---7L7|L7||||L7F7|F7|||FJF7||L-7L7F7F7|L7FJ|F7F---J|||F7F7LJL---7|FJLJ|7..L7.|-L.7L|
+LL-|7-L.|LFF----------J|||LL----7FJF-J|||FJJF7|||||||||F7F7L7|L7|||||F||LJ||||||7||||F7|FJ||||L7||FJ||L---7||||LJL7F---7LJL7|FL7F7L7--7..F77
+.|.|L7.||.LL7F7F-----7FJLJF77F--J|FJF7|||L7FJL7|||||||LJ||L7|L7||||||FJ|F7|||||L-J||||||L7||||FJLJ|FJ|F7F7LJLJL7F7LJF-7|F-7L-7.LL-7|.|JFLJLJ
+77.LJ--L7-FLLJLJF7F--J|F--J|FJF-7|L7||||L7|L-7LJ|||||L7FJ|FJL7||LJ||LJFJ||||||L-7L||||LJFJ|||||F--J|FJ|LJL7F7F7LJL-7|FJLJ|L7FJ77J.|.LLJ7.L7|
+LL-7LLJF-7JL|LF-JLJF7FJL7F7LJFJFJ|FJ||||FJL7FJF-J||||FJL7|L-7||L7FJ|F-JFJ||LJ|F7L7|||L-7L7|||LJL-7FJL7L-7FJ||||F--7LJL----7|L--7.---J.FJ-7.J
+L|-F-7F--|.F7LL7F7FJLJ|JLJL7FJFJFJL7|LJ|L7FJ|-L--J|||L7FJL7FJ|L7|L7|L7FJFJ|F-J|L-JLJL7FJFJ|||LF--JL7||F7|L7|LJLJF7|F7F-7F-J|F7FJ-|L-J.L|||-|
+-JF.LL-J-FLJJ.LLJ||LFF7F7F7LJJL-JF-JL-7|FJL7L---77||L7||F-J|FJF|L7LJL||-L-J|F7L--7F--JL7L-JLJFJF-7FJFJ||L7||JF--J||||||LJF7LJ|L7FJF---.F-7-J
+LFJF---L.-7JF-7LFJ|F-J||LJL------JF-7FJ|L-7L7F7FJFJ|FJ||L7FJL-7|FJF--JL--7FJ|L7F-JL7F-7L-77F-JFJFJL7L7|L7||L-JF7FJ|||L---JL7FJFJ7LLJ7.|.7L7J
+-L7L77.|.FJ|J.J.L-JL-7|L-7F7F-7F-7L7||FJF7L7||||7L7|L7||FJL7F7||L7L-7F7F7||FJFJL7F-J|FJF7L7L-7L7L7FJ7||FJ||F-7|LJJ||L7F---7|L-J|J.|7||7JJFL.
+L7L-J7-F|J-FF.|.|L.F7||F7LJLJFJL7L7|LJL7|L7|LJLJF7|L7||LJF-J|LJL-JF7||LJLJ||FL7FJ|F7||FJL7L-7|FJFJL-7||L7|||-|L--7||FJL--7||JJ.-.|FL7|.|F--7
+FJL|.|LLLL7|L7-F|7F|LJLJL----JF7|FJL7F-J|FJL7.F-JLJFJLJF-JF7L-7LF-JLJL7F--JL7FJ|FJ||||L7FJF7||L7L7F-JLJFJ||L7L---JLJL-7F-JLJJ-|.|L7-FJFF|---
+F|---7.L-|-LFJ-FJLJL-7F------7|LJ|F7||F7||F-JFJF7F7L--7L-7||F7L7L---7FJ|F-7FJL7||FJ|||FJL7||||FJFJL7F-7L7|L7L--------7|L7F7JJ-7.L7JFF.7||7|7
+.L-7.L-.F7..-JLF.LF--J|F-----J|JFJ|LJ|||||L-7L-J|||F7FJF-J|LJ|FJF---J|FJL7|L-7LJ||FJ|LJ77||LJ||FJF-JL7L-J|FJF7F7F7F-7|L7LJL-7-JF|--L|F|-J-FJ
+FF-L-||.F|..||.|7.|F-7|L-7F7F7L7L7L7FJ||||F7|F--J|||LJFL-7|-FJ|7L7F-7|L-7||F-J.FJ|L7L7F7FJL7LLJL7|F--JF-7|L7|LJLJLJJLJFJF-7FJ|LL-.|.L|JJFLL7
+FJ-J-||F-JLF-7F.L7LJLLJF7LJLJ|FJFJFJL7|LJ||||L-7FJ|L7F---JL7L7L-7||FJL7J|||L--7L7L7L7LJ||F7L---7||L7F7|JLJ||L-7F7F77F7L-J7||F-J.|F|-7|J7F77|
+|7J|.FLFJF7J.LJ7F7FLF--JL----J|FJFJJJ||F-J|||F-JL7L7||F-7F-JFJF7||||F7L7LJL7F7L7L7L7L7FJ|||F7F7|||FJ|||F---JF7LJLJL-JL-77F|L7LF7|F|-LJF|F77.
+L7-|7L-JL|--|.FLJLJ7L-----7F7FJL7L--7LJL7FJLJL7F7|FJ|||FJL7-|FJLJLJLJL-JF--J|L7L7L7|||L7||||||||||L7|LJL7F7FJ|F7F-7F7F7L7FL-JJLL7-F..|LJ-LF7
+L-.L-JJ.FJ|-|777F---F-----J||L-7|F7FJF--J|F---J||||FJLJL7FJFJ|F7F-7F-7F7L7F-J||FJFJ|FJFJ||||||LJ||LLJF--J|||FJ||L7LJLJL7L7|7L.FFJJ|7.77FF7L-
+7--|J7.F77|FLLF--JFL|F7F-7FJ|F-JLJ||LL--7||F7F7||||L7F7L||.L7LJLJFJL7LJL-JL--7LJ7L-JL7|FLJLJ|L-7||F--JF-7|LJ|FJL7L--7J-L7L-7J.LJJ7L-7JF7LJ7.
+7|..F|J7|.|JLL|7J.|.LJLJFJL7|L-7-LLJF7F7||LJLJ|||||FJ|L-JL-7L-7F7L7JL7F--7F-7L---7F--JL7F77FJF7|LJL--7L7|L7FJ|F7|F-7L7F-JF-JL7J|J|F7|FLJ-L-7
+FJ7FFLJ|||..|.L--L|-F---JF-JL7FJ|7-L|LJLJL7F--J|LJ||J|F-7F7|F-J||FJF-J|F-JL7|F7F-J|F--7LJL7|FJLJF----JFJ|FJL-J|LJ|-L-JL-7|J-FF7F77|-J-FJ.|F|
+7|.-|J-FJL|-|--J..L.L---7L7-F||-F---L-7F7FJL-7FJF-J|FJ|7LJLJL-7||L7L7FJL-7FJ|||L7-LJF-JF-7|LJF-7|F7F-7|LLJF7F7|F7L---7F-JL77L|FJL-JJ|7.FFF-J
+LJ-L7.F---JL|F|7-7J-JFLL|FJ7-LJFJJ|F|-LJ|L-7FJ|-L7FJL7|F------J|L-JFJL7F-J|FJ|L-JF-7L-7|J|L--JFJ||LJFJL---JLJ|||L7F7FJ|F--J.|.7|7LJ7L7JJLLJJ
+F|.F---7LJF-FJL--|.|.FF-|L7F-7J|77FF|FF-JF-JL7L-7|L7.LJL7F-7F-7L--7L--JL7FJL7|F7LL7L--JL7|F7F7L7|L7FJF--7F7F-J||FJ||L7|L-7JF|7|-J||--|J.7.L|
+|.F|-JLLJ-F--J-L|LF--FJFL7LJFJ|LL7FLLFJF7|J.LL-7||FJ.F--J|-|L7L7F-JF----JL-7|LJ|F-JF7F7FJLJ||L-JL-JL7|F-J||L7FJ|L7|L-J|F-JJJL7JJJ|J|-L--F--7
+77||FJ||.|JFFJ-FJF|.|LF-JL--JLJ7L|LLF|FJLJ|-|FLLJLJ.LL--7|FJFJFJL-7L--7F7F7||F7|L7FJ||||LF-JL-----7FJ|L-7|L-JL-JFJL--7LJJJ-|-|LL.L7|.J7FF.FL
+LL|J7JF|.|FF7FF---|F|.77FLJ7||.|.F77LLJ-L|--|JLJ7.F-JFJLLJ|FJFJF-7|F--J|||||LJLJFJL7LJ|L7L-7F7F-7FJL7|-FJL7F7J|LL-7F-JJ.|J.F7--J-LJLJJFF7||7
+-JJLF7J|FJFJ|FL-J7L-J7|-|-L|FF7L-F-7J.L.L|---J.LL-|..F||LFJL7L7|-LJL-7FJ|||L--7.|F-JJFJFJF-J||||LJ|-LJ.L-7LJ|L-.L7LJ-|..|77JL7-|J.F7--|||J|7
+F|7.77.-7LL7F|F-JF-7LL7-7-|L7|.FL|-F-7.|.7J|J-|-L.LF---F-JF7|FJL-7F7||L7||L7F-J.||-F-JFJFJF7||L---7FJ.-LFJF7L7J-|-||-7F7|JL7LJ-LF7-JJFLLJ|.L
+FFJ7|F|L--L7--JJ7LL|7.LLL-777F-JFL7||LJF-J-J|L|.FJJLFJLL--J|||F7FJ|L-JFJ||FLJ-L7||FL7FJLL7|LJL-7F-JJL7|LL7||FJJ-7.L7FF7L|-|-77.||LJF777..-7J
+||LL7|.7..|L-J--F7F---7.|FLF-LJ7F7FF7|LJ-J77||F-7-F.J7J..J.LJ|||L7L--7|-|L-7JJ.FLJ7LLJ7..|L7J.FLJJ|L.L7.FJ|||JFF---FFJ|F|F|7|7--7FLFJJ-L.||.
+.LLL-|F|JFF-|F-.L|L|-|LL7F-JJ|7FLFFJFJ7|--77|LL..FL7F7.|-7FJ.LJ|FJF--JL7|F-JJ7F-J--J|LFF-L-J7J7|LFLJF-F-L-JLJLJ-|.F|LFLLJF7LJ.-7L||||L77.-J7
+.|.|L|L--7J-|J.7F7F|LF7F7-JJF--.LLL-.FJJ|FF--|LF-7-|7.|.L|J..|.LJ-L-7F7||L-7.|FJLF7FJ7|77|L-7|LJ.||F|L-7-FJJ7.|J.F-|LJLF7--7J.LJFJ-|-7L77|LJ
+FLF||LL|7J|J|.FFJL||.FJLJFJ-L-|L-LJLFJ.FL-|7.F7|F|F||.FJ..L|-7-J.F--J|LJ|F-J-FJ||FLJFF|L-J||L7FL7J77F-|JF7JFFF|7-|.|...J|.F|LF-L|J.LFJJL77|.
+|F-77LLL|-J----L|7LJ7L-|-JJ7|F-|.LL77LJ7|.LLF|FLFJ7FL-|L77.|L|LLFL--7L-7|L7.FJF|--LL--F--|F|F--JF.FLJ...||7FFJLJ-77L7J-LF7F7FFF7|F7.J|FLJFF.
+L7L|-7-||L7.||FLJ7FJ7JF7.|.|FL-J7.FL-JF|-7FL|LL-LF|L||.FLJFF7J-7FLF-JF-J|FJFL7||.FJL||J|-JJ.L|.FF-L--L7F|FL---7|F-77FJFL.F7.L|LL-|-FLJ-J-FJ-
+LLF7.J.L7-J-L-|.L|JL|JLL-FL7JLL7.L-JJL-J-LJ.LJL77-|-J-.F-LF-JJ.LJLL--JLLLJ-L-FLF-7...J-J-LJF.L.L7JL|JLLFF7J-LFL--L|-JLJ.--L7.|.LLJL|-J.F-JJ.
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day10/test1.txt b/solutions/2023/pughmds/inputs/day10/test1.txt
new file mode 100644
index 0000000..73b3d66
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day10/test1.txt
@@ -0,0 +1,5 @@
+.....
+.S-7.
+.|.|.
+.L-J.
+.....
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day10/test2.txt b/solutions/2023/pughmds/inputs/day10/test2.txt
new file mode 100644
index 0000000..2417530
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day10/test2.txt
@@ -0,0 +1,5 @@
+-L|F7
+7S-7|
+L|7||
+-L-J|
+L|-JF
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day10/test3.txt b/solutions/2023/pughmds/inputs/day10/test3.txt
new file mode 100644
index 0000000..682499d
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day10/test3.txt
@@ -0,0 +1,5 @@
+..F7.
+.FJ|.
+SJ.L7
+|F--J
+LJ...
diff --git a/solutions/2023/pughmds/inputs/day10/test4.txt b/solutions/2023/pughmds/inputs/day10/test4.txt
new file mode 100644
index 0000000..1ddc980
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day10/test4.txt
@@ -0,0 +1,5 @@
+7-F7-
+.FJ|7
+SJLL7
+|F--J
+LJ.LJ
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day10/test5.txt b/solutions/2023/pughmds/inputs/day10/test5.txt
new file mode 100644
index 0000000..61e8144
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day10/test5.txt
@@ -0,0 +1,5 @@
+......
+.S-7.|
+.|.|.|
+.L-J.|
+.....F
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day10/test6.txt b/solutions/2023/pughmds/inputs/day10/test6.txt
new file mode 100644
index 0000000..2c1a565
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day10/test6.txt
@@ -0,0 +1,3 @@
+S7.J|FLJFF.
+||FLJ-J-FJ-
+LJ|-J.F-JJ.
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day11/input.txt b/solutions/2023/pughmds/inputs/day11/input.txt
new file mode 100644
index 0000000..02d4f30
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day11/input.txt
@@ -0,0 +1,140 @@
+.......#...........................................................................#........................................................
+.............#...........#..................#.............................................................#..............#.......#..........
+..................................................................#.........#......................................#........................
+.................#...........................................................................................................#..............
+.............................................................#..............................................................................
+......................#.....................................................................#............................................#..
+.....#...........................................#..........................................................................................
+............................#..........................................#...............................#....................................
+...........#......................................................................................#......................#..................
+....................................................#.....#................................................#......................#.........
+#..................................................................#.............#...........................................#..............
+......................................#..................................................#...............................................#..
+.................................#..........................................................................................................
+...............#........#..............................................#...............................................#....................
+.......#....................................................................................................................................
+............................................................................#...................#..................#.......#.........#......
+...................#......................#......#.......#.......#..........................................................................
+............#...........................................................................#................#..................................
+.....................................................#..................#................................................................#..
+.............................#.....#..........................................................................#...................#.........
+...#.......................................................#...............................#................................................
+............................................#........................................................#......................................
+...................................................................#..................................................................#.....
+..........................................................................................................................#.................
+#.......................#............................#.......................................#..............................................
+..........................................#.................#.....................................#................................#........
+..................#............................................................#........................#..............#....................
+............................................................................................................................................
+......#........................................................................................#.............................#..............
+...............#........................#.........#.....#......#...................#..............................#.........................
+.........................#.....#..........................................#.................................................................
+.................................................................................................................................#..........
+...........................................................#..................................................#..........#............#.....
+.............#.................................................................#............................................................
+.....................#............#..............#.......................................#..................................................
+#..........................#...........................#..................................................#.................................
+.............................................................#....................................................................#.......#.
+......................................................................................................................#.....................
+............#..................#...........#........#...............................#..............#...........#............................
+.......#..............................#.....................................................................................................
+........................#...............................................................#..............#.................#.............#....
+.#..........................................................................................................#...............................
+.........................................................#.....................#.................................................#..........
+..........................................#..........................................#...........................#.........................#
+.....#..........................#.................#..........#........#.....................................................................
+..........#...........#.................................................................................#...................................
+.............................................................................................................................#.......#......
+..........................................................#.................#............#..................................................
+.....................................................#..........................................#...........#...............................
+.......................................#...............................#.............................#......................................
+..................................#...............................................#........................................#.............#..
+.......#.......#.......#..........................................#.........................................................................
+.............................................#...............#..............................................................................
+............................#................................................................#..............................................
+........................................................#..................#.............................#........................#.........
+...................................................................................................#..........#.............................
+......#............................................................................#....................................#..................#
+..................#.....#...............#.....#......#...................................#.....................................#............
+..................................................................#...........#.............................................................
+#.............#..........................................#...............#...................#.........#....................................
+........#.............................................................................................................#.............#.......
+......................#......................................#............................................................................#.
+..............................#....................................................#........................................................
+............................................................................................................................................
+...............#.............................................................................................#..............................
+........................#............#............................#................................................................#........
+...#.....................................................#................#..............#...................................#..............
+.............................................#..............................................................................................
+...........................#................................................................................................................
+.....................................................#......#....................................................#.....#....................
+.....#....................................#.....#...........................#...................#...........................................
+..............#.....................#...................................................................#...................................
+#........................................................................................#..................................................
+.....................#........................................................................................#.............................
+..........................#.......................#..................................................................................#......
+.........#................................................#.........#.......................................................#...............
+...............................#................................................................#.....#.....................................
+...................#..........................#.................#..................#..............................................#.........
+......#......#..............................................................................................................................
+............................#......................................................................#........#...............................
+....................................................................................................................#.......................
+................................................#...........#.................#........................#....................................
+.................#..........................................................................................................................
+..........................#......................................................................................#..........#..........#....
+#...............................................................................................#.....................#.....................
+............#......................#...................#.................................#.........................................#........
+............................................................................................................................................
+....................................................................#.......................................................................
+.....#........................................#...........................................................#...................#.............
+..........................................................#..................................#..............................................
+.............................#............................................#.................................................................
+......................#............................................................................................................#........
+..#.....................................................................................................................................#...
+...........#..........................#............................................................................#........................
+..............................................#.................#....................#...............#........#.............................
+...........................#...........................#......................................#...........................#.....#...........
+.........................................................................................................#..................................
+.........#......#................................................................................................#........................#.
+...#.....................................................................#..............#...................................................
+.............................#......#...............................#................................................#......................
+.........................................#............................................................................................#.....
+.....................#............................#............#.................#...........................#...............#..............
+.............#..........................................#...................................#...............................................
+..#.............................#...........................................#.....................#................#........................
+...........................................#...........................#.................................................#..............#...
+........#...........................#.......................#.......................#.......................................................
+...........................#.............................................................................#.......................#..........
+............................................................................................................................................
+...............#...............................................................................#..........................................#.
+............................................................................................................................................
+#...............................................#......#.......#...............#............................................................
+.........#.................................#...........................................................#....................................
+......................................#............................#...............................................#........................
+......................#.........#.............................................................................#.............................
+....................................................................................#............#..........................................
+..........................................................................#...............#.................................................
+...........#.....#................................#.........................................................................#...............
+..................................................................#.......................................#.........................#.......
+.........................#................................#........................................................#........................
+........#...................................................................................#......#....................................#...
+...............................................................#...............#............................................................
+.............................................#.........................#.....................................#..............................
+...................#...............#........................................................................................................
+..........................#..............................#....................................#..................................#..........
+...........#.....................................................................#.....#....................................................
+...#.................................................#...............................................#...........#...........#..............
+...............#........................#................................................................................................#..
+....................#..............................................#.....................................#..................................
+..................................#.....................#................................#..................................................
+............................................#...................................................#.............#.............................
+........................................................................................................................#.....#......#.....#
+...........................................................#..................#......................#......................................
+...................#.........#....................................#.........................#...............................................
+....................................................#...............................................................#.......................
+.............#........................#....................................................................................#................
+....................................................................................#...................................................#...
+.......#................................................#................#..................................................................
+.#.................................................................#..............................................................#.........
+...................#.....#...................................................................#.........#.........#..........................
+............................................#.....#............#..................................#.........#................#..............
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day11/test1.txt b/solutions/2023/pughmds/inputs/day11/test1.txt
new file mode 100644
index 0000000..a0bda53
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day11/test1.txt
@@ -0,0 +1,10 @@
+...#......
+.......#..
+#.........
+..........
+......#...
+.#........
+.........#
+..........
+.......#..
+#...#.....
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day11/test2.txt b/solutions/2023/pughmds/inputs/day11/test2.txt
new file mode 100644
index 0000000..6346357
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day11/test2.txt
@@ -0,0 +1,10 @@
+...#......
+..........
+..........
+..........
+..........
+..........
+..........
+..........
+.......#..
+..........
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day11/test3.txt b/solutions/2023/pughmds/inputs/day11/test3.txt
new file mode 100644
index 0000000..9096eb8
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day11/test3.txt
@@ -0,0 +1,2 @@
+##.
+..#
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day12/input.txt b/solutions/2023/pughmds/inputs/day12/input.txt
new file mode 100644
index 0000000..218188c
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day12/input.txt
@@ -0,0 +1,1000 @@
+???#...#.?#??#?#? 1,1,1,8
+#?.???????#????#???. 1,1,12
+????.#??##??? 1,2,3
+??#.#????#???#.??. 2,10,1
+??????.?.???##?#?. 6,1,7
+?#????????????###?? 1,3,9,1
+?.??#?#?#.???? 7,1
+.????????..??.#?. 5,2,2
+.?.??#???.. 1,1,1
+???#?????????#?? 2,1,3,2
+??#?#?????. 4,2
+?####???.???#? 6,1,2
+#?.?#?#?????.?#.?.? 1,5,2,1,1,1
+??.##?#?##??.??? 1,7,1
+???.###?#?# 1,7
+?????##?#..#? 1,3,1,1
+??#??#?.???.?#??#? 1,1,1,2,1,2
+?#?#?.???.?? 4,1,1
+.?#?????#?? 3,1,2
+?#??????????.??? 3,7,1
+???????##??###???#?? 2,3,5,4
+?.???#.??? 1,1,1
+???.#?#?????.?#???#? 2,5,1,3,3
+?.#?.#????.??## 1,2,1,3
+?????????##?#??????? 1,5,9,1
+?###????#??##?#... 9,4
+????.#?#????..???. 5,1
+????#??.##??#?#??.?? 1,2,5,3
+..?????#.???.??##? 1,1,2,1,3
+?#?????#??##.??# 12,1
+?#??#?#.#????? 1,4,2,2
+???#?...???????.? 3,2,4
+??#??#?#?#?????#?.#. 1,1,12,1
+???#??..?###. 5,4
+?#.??#?#????????# 2,2,1,7
+????.?????. 1,2,1
+?.??????#??.???#.?? 1,1,2,1,4,1
+???#??????.??????. 6,1,1,1,1,1
+?#??#?#??##??? 1,4,5
+?..??#??????.??. 1,4,1,1,2
+?.??##???..??? 1,3,1,1
+?##???.????#?? 3,3
+??????.??#????? 1,1,5
+?##.????#????.#??. 2,8,1
+????#????#??# 1,10
+???.?#??????#???.? 1,2,1,1,1,2
+.?###.##??? 4,2
+??.????#???#???###.? 1,15,1
+?#????#?#???. 3,1,1,4
+???????.????#???? 6,4
+..??..???# 2,1
+.?.?#?????..????..? 1,4,1,1,2,1
+?#?.?.???????? 3,1,1,5
+?###?.??#??.?###?# 4,3,6
+..?#?.??#??##? 3,2,2
+.?????#?????#?##?? 1,3,2,5
+?#???#??.?.#?????? 8,2,3
+??.??????#?#???? 1,2,5,1
+?.??????#? 1,3,1
+?...#??.?????#? 1,3,6
+?.??.?..?#???? 1,1,1,4
+.#??????.? 1,1
+?????..?#????#.? 1,2,2,4,1
+#.###?#????. 1,5,1,1
+.???????#.???#?. 1,1,3,1,1
+?#?#?.???????. 4,2
+#????????#? 8,1
+#?.?#????????? 1,2,6
+?#??#????##?.???.? 5,1,3,2,1
+????#????#???#?.???? 1,10,1,4
+?##??????.???#?..?? 9,1,2,1
+?#.??#???.. 1,1,2
+.?#?????#.? 3,3,1
+??.????.#??? 1,2
+#??#??.????#??.?.??? 1,1,1,7,1,1
+##????.???. 2,2
+??##?.?##? 3,3
+?#?..?.??..??.?? 1,1
+?#????????? 3,1,2
+?##??.???.?.?# 3,1,1,2
+?.####???????? 1,4,1,1
+?..#.???#????? 1,7
+?.??.??##???? 1,1,4,1
+.#?#?????#?.#??# 1,1,1,1,4
+??.?????#????.??##. 8,4
+????????.??.##? 1,1,2,1,3
+??##???#???#?#??.? 6,1,3
+?..??#???#??. 1,8
+????????#????#??#??. 2,11,1
+?.???????????#?#. 1,3,1,1,4
+?#?#.??#.???#???##?? 1,1,2,11
+??#?#???#?#??????? 11,1
+.#.??#?????#? 1,6,1
+..?????????#?. 3,2
+????.??.#.?#?#?????. 1,2,1,1,4,2
+#??????????##?.??? 5,1,1,3,1,1
+????????..???? 3,2,3
+??.????#??#???# 1,7,1
+..??#.?????????? 1,5
+?#?#???#??#??##?#??? 1,3,1,2,8
+?????#.?#???.???# 2,1,4,1,1
+?.?#??.??.????#??#? 1,8
+??#??.?????? 3,3
+?#?..??.?#? 2,1,3
+.????##???. 1,6
+???...?.????##?? 2,7
+???..?###?#? 3,6
+??.?#?#??###?????#? 1,4,8,1
+.????#??#?# 1,6,1
+?????.??.? 1,2
+?#???##??.?..### 1,5,1,3
+.???#???#??. 4,3
+???#?.?#????. 1,5
+?????..??.#?#?###??# 1,2,1,10
+????#??????.?#?..#?? 5,2,1,3,2
+#????#???????#???#.? 6,10,1
+????#??????.?.?..?. 9,1
+.??????##????.???#.? 2,8,2,1
+.??##?.???#?# 1,3,1,3
+????##??##??#?#. 1,11,1
+???#?##.?.??? 4,1
+?????#?#??? 1,6
+?...????????.? 1,2
+#??????##??..??? 2,1,4,1
+.????????#??. 3,1,1
+??#??????##..?.????? 3,6,3
+??###??.??###?. 6,5
+???.???#???.#?.?? 1,6,1,1
+?????#??????? 1,6
+.#??#?#?#??.??? 2,7,1,1
+#??..??????#? 1,1,1,5
+?#..?##??#?. 1,7
+?#?#?#??..?.?. 7,1,1
+.????????????.?##??? 1,1,8,6
+??????####?..# 2,6,1
+?????#???#???????? 10,1,1
+??#??#???.??#??? 3,1,2,1,3
+.#..?.?.?###??#...# 1,1,1,6,1
+?#?#???.#??#????..? 1,3,4,1,1
+.?##???#????#???? 3,2,4,1
+###?..#??#??? 4,1,1,1
+???.??#??#??. 1,7
+????#?##??? 1,1,5
+?.????????????##? 1,1,3,1,4
+??#????#??. 1,4,1
+.??#???#?.???#???#?? 8,6
+##???#??.???#?.?? 6,1,1,1,2
+#?#??#???#? 3,2,3
+??#??????#??#?? 2,6,1
+?.????#?#..??????.?? 6,2
+.??.??.#?#?##? 1,1,1,4
+????...?????????? 3,5
+??#####.###???.?? 7,3,2
+?##.??#??#???#??? 2,11
+??????.??.?.???? 3,1,1,1,1
+?.##?????##?? 2,4
+?.???#?????.??????? 1,5,1,1,1,1
+?????????#??? 2,9
+?#???#?.#?.???.# 2,1,2,1,1
+?#??????#?#? 1,1,1,3
+?#??????#??.#????? 9,1,1,1,1
+#???.?.?#????#???# 4,1,2,5,1
+??#??????? 1,6
+?????.?#?? 1,1,2
+?????##.?.?# 1,3,1,1
+???#?????#??# 1,2,2,4
+.?#??????..?# 4,1,1
+.#???.?.??##.???? 3,1,4,4
+???.???#.????.#????? 3,5
+#??#??#... 4,1
+??.??#??#..???.?? 5,1
+??.?#?????..##????? 1,6,2,1,1
+..?#??#???????#?#? 8,5
+?.??#??.?.??????. 3,6
+.#??###???????##??. 1,6,5
+??????#???#? 1,3,1,1
+??#.?##?.?? 1,1,4
+.??#???.?#????.?. 6,2,1,1
+.??????#??#?? 6,2
+#.?#??##?.??? 1,6,1
+.?.##?????. 1,2,1
+.?#?.????# 2,5
+.????#?.#? 1,2,1
+?.???.####???#.?. 1,8
+?.#?????.??.???#?? 1,1,1,1,1,6
+??#.?#???##??#. 3,9
+??.#???????.???#???? 1,1,1,1,2,4
+??.???????##? 2,2,3,2
+.?.??#..??.. 1,1,1,2
+????#?.???###?#???# 4,1,6,1,1
+????#??????...???? 4,3,1
+#?.#?.?????#??? 2,1,1,4
+.????????#???#??.?#? 2,2,8,1
+?????.##?? 2,3
+##??.##???? 2,4
+?????#??#?#?.#??.?? 10,3,2
+?????..??????#?. 4,3,4
+..?#.?#?#???. 1,5
+..?.?##??? 1,2,2
+#??#???##?? 1,3,3
+??.#?????.????. 1,2
+?##?????#?? 6,1,1
+????#??###? 3,4
+??????#???????#? 6,5,2
+?#.??.?#?.#????#.? 1,1,2,1,4
+?????#?#?###???##?? 1,5,3,6
+#???#?#?#??????.?? 10,2
+?.??#???.#.?#?.?#?? 1,5,1,2,3
+?#??##?#.????.. 7,3
+??#..??.?#?? 3,2,1
+???#??.???.?? 5,1,1,1
+??.??#.?#.??.??? 1,2,2,1,1
+??.#???#?. 1,2,1
+??.??##???. 1,5
+?##?#????#??.???.# 3,1,5,1,1
+??###?###?#????.???? 1,13,1,1
+.???.??##.? 1,4
+??????.??###??????? 2,5,5
+.#?#?#???#?? 1,7
+????#?#..#??.? 3,1,1,1
+??#?.##?##?###???? 1,11
+.?.#??????##???? 1,1,1,4,1
+#??.##??#???#?#???#? 1,15
+?????#???#?#?.? 1,8
+?#???##??..?## 7,3
+????????#? 1,4
+##????#???????? 2,4,1,2
+?#?##.?###??..?.? 4,4,1
+??##???##?.??? 8,2
+.???????#.?##??### 7,8
+#????????????.##?? 6,1,2,3
+?.??????#?????..#? 1,2,1,1,1,2
+????#??..?.#???#???? 6,1,1,2,2
+.??????#?.?#??.? 3,2,2
+?????.??##? 3,1,4
+.?.???##.##?### 5,6
+?##?????##???#?.?.#? 3,1,8,1,2
+????.?##.?? 3,2
+?.??.??.??#?###??? 1,1,1,1,6
+?.??????#?# 2,3
+??#?#?.?????# 6,1,1,1
+?.#?#??#?? 1,2,2
+??????.#???# 2,1,3
+?.#..???#. 1,1,1
+#???.????? 4,1
+??#?????##???.??? 10,2
+??.??#.??? 1,1,1
+??..???????#??? 1,1,1,1,2
+#??.????#?? 1,2,1
+.#?.#???.?.? 1,1,1,1
+??????.##?#?. 3,5
+?##???????.?##??#?? 3,2,1,8
+??#?????.?#?#. 4,4
+.???????#??#???.?# 12,1
+.#??????.??#?.? 3,2,2,1
+?????#????.??#???.?? 10,5
+??.#..??#? 1,1,2
+?????#?.??#? 2,2,2
+?.#???.#????..??#? 1,1,1,2,2,2
+?##??..#.#?.?#. 4,1,1,1
+?????#.??.#??? 1,1,1,3
+??????#??.???##??.?. 8,5
+?#????#??????.??? 3,2,2,1
+#??????????##..??.?? 1,1,1,5,1,1
+##??#????????..?.?.? 13,1
+.????.#??#??.?#??# 1,1,1,3,2,1
+.?##??#????...?????. 10,5
+##.???????????.#??? 2,1,6,1,2,1
+.??#??#?.?#???? 3,1,4
+.???.??????## 1,2,3
+????????#??#?#?. 5,7
+???.??#??#?. 2,2,1
+..??????##. 3,2
+??????#????????? 1,5,1
+##?#???###?#?.. 10,2
+???..???##?.?#..?? 2,1,3,1,2
+?????##??? 1,5
+?.????#?.??#? 1,5,4
+..????#??.?.#?? 1,4,1
+#????#?.?.. 6,1
+.?.#??.?#???#???? 2,5
+.?#..??.????? 2,2,2,2
+???.??#????.?.??#??# 1,4,1,6
+.#???????..#????? 5,5
+##???.??#?? 2,1,5
+?##?????#??? 5,1,3
+??.#.#?????#??? 1,1,1,1,3
+??.??.?#?? 1,1,4
+?????.?#?? 1,3
+????#?#????? 1,8
+????????#?### 5,5
+.??.?.??#?? 1,1,1
+????????#???#?. 3,3,2,2
+??.#???..?.?.?. 3,1
+???????#.?????? 5,5
+.???#?.????. 4,1,1
+.??#??#??.?# 4,1,1
+.????..?.?? 3,1,2
+#??#?#?#####.?? 2,1,7,1
+.?#??#???.? 2,1,2
+#???#?#??#??.? 1,2,1,3
+?#?#.???#? 1,1,4
+??.????#?..??.?.?#? 1,1,4,2,1,2
+#??????#??.???##??. 2,7,1,5
+?#???.#.?????#?#? 4,1,6
+###???.??..###?#?.? 5,2,6
+??#?#??##?????# 1,1,5,4
+.##??######???#?? 3,7,2,1
+?#.?????.#?#?#???? 1,4,7
+??.?#???##?????#. 1,3,6,1
+??????#???????#??. 1,2,1,2,3
+.???.?#?????.?.? 1,3,1,1,1
+?.##??????? 1,3,2
+..????.??? 1,1
+..??#?.??? 4,1,1
+?##???#.#? 3,2,2
+???#?????.#???? 2,1,1,3,1
+.??.?????..# 2,1,1,1
+.????????#??? 1,3
+??.???#??????? 2,4,3
+?..?#?????.?##.# 7,3,1
+??.?#?#????? 1,9
+?#..???#?#??#.? 1,6
+?#?#?????.#??. 8,2
+??????????. 1,4
+.?#????#?.#?## 2,1,1,4
+#?#?###????.???????. 11,1,1
+.#??####.?#??? 7,4
+.???.#???#?###?? 2,1,1,4
+#??????#?? 2,1,3
+?.?.##?#?.?..#? 1,2,1,1,1
+???#?#???. 4,4
+?.???.??#??? 1,1,3,1
+???????..## 2,1,2
+?.???????.?? 1,1,5,1
+#???????.?#?#??##?? 3,1,1,6
+?.??.?.???. 2,2
+#??##???#??.??. 5,2,1
+????????#? 3,1,1
+.?????#??##?.#?##??. 8,5
+..??..????#?? 1,5
+?????#.?#???##??? 1,1,2,8
+???#....?# 1,2
+?.??????#??#?????? 1,1,7,2,1
+?##?.#??.. 2,2
+?.?.?..??#?#??? 1,1,1,4,1
+.##?.#.#??#??. 2,1,1,2
+.????????#?? 2,2,3
+?..#????.????#?#?#. 1,1,3,3,3,1
+?.#?.?????#???????# 2,12
+????##?#????#?#. 12,1
+?.?#???????.? 1,2,1,1
+##?.????.? 3,2,1
+.??#?#???#.??.???? 6,1,2
+.???????###?.????. 1,1,5,1,2
+..#?????????????? 8,1,1,1
+??.#??#?.?# 2,1,1
+???????????#????? 2,6
+?#.??.???. 1,3
+?#???.?.??.??????? 1,1,1,2,6
+??????#?????.?? 5,1,2,1
+.#???.?.???#? 2,1,3
+??##.??.???.??? 3,1,1,2
+???.????#??#??##??? 3,1,11
+????..##?..?? 3,2
+??????????? 1,1,5
+???.?#.?.?#?#??????# 3,1,1,8
+.??.??#??? 2,6
+##?..??????? 3,5
+??????#????#.?#???# 1,1,3,1,3,1
+?#?????.#?. 3,1,1
+?????.??#??##??? 1,1,7,1
+.????#??#? 1,4,1
+#???#??#????.??? 2,9,2
+?#????#??.???.?.? 1,6,1,1,1
+????????.#? 2,1,1
+???#??##.??#??#?. 7,4
+#??.????.??????#? 3,1,1,2,2
+?##?#??..?#. 3,1,1,2
+.?.?????##???#.?. 3,6
+#.?????### 1,2,3
+????.??.?# 2,2,1
+?????.????.#???#?.? 1,2,2,6,1
+????????#?#.????? 4,2,1,1,2
+?##????.#? 3,1,2
+????.??????? 3,1,1,1
+???????#?.? 4,4
+.#.??????????. 1,3,4
+?????#?.?#.? 2,3,2,1
+?#.?????##??.???#? 1,7,1,1,2
+#?????.????#?? 1,2,4
+???????.????#?? 5,1,2
+??.??.##?????.??#?? 1,6,5
+???.?????..?##???? 2,6
+???????###??##?#? 1,1,12
+????????.? 1,1,1
+??..???????#? 2,7
+??#???.#??##?????? 4,1,5,1,1
+.?.???????????#?? 2,5
+?????##?.? 1,3
+?????.#.??#??#?##?# 3,1,3,6
+???.????#? 3,1,1
+.??.???.#??.#?##???. 2,3,1,7
+..?????###?#???????. 11,2
+????????.???????#??# 1,5,3,2,1
+??????.##?##?.? 2,5
+??.??#???#???.?.? 3,5
+?#?#.??#????#.??# 3,2,1,1,1
+????#??.##?????.#?. 6,4,1,1
+?.?.??.???? 1,2,2
+#.?????????#? 1,8
+.?????????#??????? 1,3,3,4
+???.??????.#.??? 1,1,1,1,3
+???.?#?#??? 3,4
+????????.???##.??? 1,1,1,1,3,1
+??.?.#.?.????.?.? 1,1
+???###?##???# 1,6,3
+?.?.????##??. 1,1,4
+?.????.??.###???? 1,1,1,4,1
+?#??????.?????#???. 1,1,8
+??????#?.? 1,3
+####??#?..#?????# 7,1,2
+.????#??.#.???? 1,1,1,2,1
+??..#??.?#?##? 3,6
+?.??.??##???#????#? 5,7
+??????#??.?.??? 3,2,2
+?.???..?????#??.. 1,1,8
+..?????##?? 2,3
+??????.?????#??? 1,1,1,8
+????#...?#.?? 1,3,2
+??#??.??#??#?? 2,8
+#???????..? 1,1,3
+?#.??#.?#??# 1,3,5
+#???????????###??#?# 2,1,1,1,9
+.??##?.?????? 4,5
+.????.??.?#. 1,2
+#??????????#?..? 2,4,3,1
+#?.???###?##????.?? 2,10
+??#?..??????. 1,3
+#??#?????#?? 1,3,5
+??..?#..??.?? 1,2,2,1
+?.??.????.# 1,4,1
+#????.???? 2,1,2
+.????#??#?????#.? 7,2
+?.?.??????? 1,3,1
+#?#?###??##?#???.#?? 11,2,2
+#?..?????#???? 2,2,3
+?.??????.????.?# 1,3,1,1,1
+??????#?????.? 1,1,3,1
+???#????.?#????. 4,1
+##?####?#?#?.???? 11,2
+??.#?.?.?#?.? 1,1
+????#????###?#????? 2,1,11,1
+#??#?.?#????#?#????# 4,2,1,5,1
+??.???#.??#.#?#?#??# 1,2,1,1,1,8
+?#?????????.?? 1,5,1,2
+???#????#???#..? 4,1,2,1,1
+???..??##?# 1,5
+??.?.#?#??#???#?# 1,1,4,3,3
+?#??#?##?#???? 5,4,1
+????##??#? 4,1
+#?.?????.#?.? 2,3,1,1
+??.?#????????? 2,4,1,2
+??.?.???.?????#? 1,1,2,2
+??.????.??? 3,3
+??.??????##???? 1,3
+?#????.??##? 2,1,3
+??#?##??#?#? 1,4,1,1
+.?.#???.#.???#??#?? 1,1,1,1,8
+???#.??..#??????.?? 3,1,5,1,1
+?##??.#?.??.?? 2,2,2
+???#?.???.?##?? 4,1,1,2
+.?????????#. 3,1,3
+???###?.#.#?#?.#? 6,1,4,1
+????#???#?? 2,7
+??#??#????#?? 7,3
+..?.?????? 1,2,1
+?#?#??#??. 1,4,1
+??##????.? 5,1,1
+.???#?##?#??? 1,1,2,4
+??#???.?##??. 4,4
+??##?#?#???.#?????. 4,1,4,3,1
+.????##?????#?? 1,1,2,6
+?.##????.#?#?.#?? 1,4,3,1
+?????#?#?? 1,6
+.#?##??????.?##.??. 6,1,3,1
+??#?.?????.?#??.? 3,1,3
+.?????###?? 2,4,1
+?.?#?#.??...#..?? 1,4,1,1,1
+??.????.??????#? 2,4,1,3
+.????.?##?#?? 2,3,2
+#?#?####?#???.#????? 12,5
+??#.?????? 2,3,1
+.#???#??#???#?#?..?? 1,1,1,7,1
+??#????#???.#? 7,2,1
+#?#?#..#???#??? 5,1,2,1
+.?#?#####??.? 8,1
+???#?#?.??#???.?# 6,3,2
+.??#???#??? 1,2,3
+???#???#??#? 2,3,1
+?????.??????.?.?? 2,3,1,1
+.?##????.????? 5,3
+##?.#??#?. 3,2,2
+???.#?##?#?#??.#?? 2,1,6,1,1
+??#????.??????#?#?? 6,5,1
+??#?#?...???# 4,1,1
+??.?#??.?##.?.#??? 3,3,4
+#?#????.??????#?? 7,1,4
+.??????#??? 2,5
+#?#?..????????????? 4,6,2,1
+..#?#????#?? 3,4
+#??#?#??????#??#?#? 10,7
+?????.?#?#??? 1,6
+??###???.???#?.## 6,2,1,2
+????#??#?##. 3,1,4
+#????#??#?????#?.?? 1,8,2,1,2
+#.???#?????.? 1,4,1,1
+#?.??.?????#?##.? 1,1,4,4,1
+.??.???????? 1,1,1,1
+??.?##?????.. 1,6
+??#???.???? 1,1,1
+.?.?.??##?????#?? 1,1,10,1
+?????????????? 9,1
+??#.#.??#???? 1,1,5,1
+.???????#?#????.?.#? 5,4,2,2
+.#??#??#?.? 1,5
+?##?#??##??#??#?.??? 15,1
+?#?#????????#?.?.# 3,3,2,1,1,1
+???#??.?????#??.. 3,6
+???#??..???#?.?.??? 1,2
+##???#.?.. 3,1,1
+??.??#?#?#???##?#?.? 2,1,1,1,9
+.#????#?#????#?#?. 9,4
+???#?###.##. 1,1,3,2
+????#.?..???#?? 1,3
+.#.????#???.#??? 1,6,1,1,1
+??#.?.?#???.#?..#?. 2,1,2,1,1,2
+?#????..?? 2,1
+????.?#???#.???? 3,5,3
+??????????##.???#.#? 1,3,1,2,4,1
+?.?#.????#???##.? 1,8
+#?.#????.? 1,3
+.#???#.?#?????.?? 1,3,5,1
+?.#????##?? 1,3,3
+##?.?.#.??????#?? 3,1,1,4,1
+????.??.?.????? 1,1,1,1,2
+.?#?##.??#???? 4,6
+?.?????.?#.. 2,1,1
+????.?#??# 1,1,1
+#.####??#?.#??# 1,8,1,1
+.??.##???? 1,2,1
+??..???.#. 2,1,1
+?..????.??? 1,2
+.??????#...?.????? 1,1
+???.??#???##?? 1,3,4
+????#??#?#??????##?? 1,5,1,1,5
+?#???..???#???#??? 2,6
+??????.??##?. 2,3
+??#?????##??#.#?#??# 3,7,6
+???.?????##?? 1,7
+.?#??#?.?.?? 1,1,1,1
+??.????#?? 1,2,1
+???###.#???? 4,2,1
+?.?#????.???????.. 3,1,6
+???.??.#?#..??##. 1,1,1,1,4
+????#????#.?##? 2,1,2,3
+??#?##?#??.??????? 8,3
+..#???#????.??? 1,3,1,2
+??#?.?.???????.#.?? 3,1,1,5,1,1
+?????#??.?? 1,2,1
+????????..?#??#??.## 1,1,2,6,2
+.#??????##??.?.??.?? 9,1,1,1
+??##??#?????. 8,2
+#.?.?????? 1,2
+.????#?#???#..??# 2,7,3
+?.?#?????????.#? 1,1,1,3,1
+..#????.?????? 3,1,1,2
+??#??#?.????.???.? 3,2,1,1,2
+#???#.??.##??# 3,1,5
+?.?.?#?##.???? 1,1,4,2
+.?###..??#??????## 4,1,4
+???#??????#. 2,4
+??####????#?.??.. 7,1,1
+#?.??????#? 1,2,1
+.?##?#????????#?.??? 3,1,1,1,5,3
+?.???#?##?.. 2,4
+????#???..?##?# 1,1,1,3,1
+??#??.#?.?????.? 4,1,4,1
+???#.???.??. 4,1,2
+?#?#...??#. 2,1,3
+????#.?#..??. 1,2,2,2
+?.#??#????#?##??? 12,1
+??#??????#? 6,3
+???.????#??? 1,1,1,2
+???#.????.????? 1,2,5
+??.?.??#??.??#??? 1,1,5,1,3
+??#??????? 2,2
+?.??#???????##??? 1,6,3
+???#?#?.???#????#?? 7,1,8
+.????????????? 3,1,2,1
+?????##?#?#??.... 1,8,1
+.?##???????#.???. 3,2
+???.???????? 1,1,1,1
+???#.?????????#?#..? 1,1,1,9,1
+?##???#????.??#?#? 10,4
+#??.????????? 3,2,1,1
+?#?..???#?#?? 3,1,6
+?##?#.?##?. 4,4
+?#.#?..?#???? 1,2,3,1
+??.##??#??#?#? 2,5,4
+????##?#???.#.??... 8,1,1
+##???????..?.?#??.? 2,4,2
+?.?#.?#???. 1,4
+.?#.??.????? 1,1,1,1
+??????.???.?#?##??.? 2,4
+???.????.??#??.?? 1,1,2,4,2
+###?#??#.???????? 8,3
+???..??#.????. 2,1,1
+???.?##???.??????# 2,6,4
+.?#?##.?#?????.?? 5,4,1
+.??..??.?#? 2,2
+.?#??????.##?#? 4,2,2,2
+???##.?.?.#???. 2,1,1
+?????#???#? 7,1
+.#?.???#?.??# 1,3,1,1
+?.#?..?#??#####?# 2,10
+??#?##???#?#???#?#? 1,8,1,1,1,1
+??????#.??#?###. 2,1,6
+?#?#?#???#??##???# 1,3,9,1
+?#???.????#.??#?#?? 1,1,2,2,3,3
+?#?#.#.??.?#??????? 3,1,2,3,1,2
+.?#?...?????#.??? 3,4,1,2
+?????????#?#?.?# 1,1,1,5,1
+##?#?#.???????#?? 6,4
+?#??#?????????# 3,1,4,2
+???#???#????.?? 1,6,1,1,1
+?#.????##?.? 2,6
+?.???##??.?#??#? 3,4
+??#?????#.?#?. 2,1,1,3
+?.?????#?#??#.?.#??? 11,2,1
+????#???#?? 1,3,1
+???.?#.???.???. 1,1,2,1,1
+??????#?..??#? 5,2
+.?.?#.?#??. 1,4
+?#.??????##????.???? 2,7,1,1,1
+?#?#?.?????. 3,1,1
+???.##.?.#?. 3,2,1,2
+..????????#.####??? 6,5
+??#.??..?##?##????#? 1,1,9,1
+?#???.??##?.??????. 5,4,3
+.?...??#?????#.# 1,7,1,1
+??????.?#??.?.? 5,2,1
+???..??##?????? 2,5,1
+???##?#??????.#.??. 7,2,1,1,1
+?????????#?? 1,2,1,1
+??.##??.?### 1,2,1,4
+??####?#?###..?????? 1,10,1,1,1
+??.??#???#??? 1,2,4
+????..???#???. 1,6
+??????????#? 8,1
+#?#.?..????? 1,1,1,2
+.?????##???#??? 12,1
+##??#?..?#..? 2,2,1,1
+###???????. 5,1,1
+??.?.##?##??#?.?# 1,1,8,2
+???####?.????#?#???# 1,5,10
+??.??#???.?????#?#?? 1,1,4,6
+???.#??#??..??.?# 2,4,1,2
+.?.??##?###.???##? 8,2
+.#??.?#.??#?? 3,1,3
+????#????#??#??#??? 5,8
+#..#???.???#???. 1,1,1,1,3
+?.##?????.?#?????. 6,4,1
+.????????.??#?? 2,1,1,1,1
+.?.????????##?.?.?#? 1,1,5,3
+??.#???????## 1,1,1,2
+??????#??#???#??#??? 3,1,9,1
+??.#??.???#?. 3,4
+????.???##. 3,5
+#??.??#????? 2,2,1
+#?????#??.# 1,6,1
+????.??#????.??. 1,7,1
+##???????????. 6,1
+.??#?????.????#???? 5,1,1,3,1
+?????#??#??.?? 1,8
+???#..??.???.. 1,2
+???#?.#..????#?# 2,1,1,1,1
+????.?.??#??#?? 2,1,7
+.???#?##????#?? 2,1,4,1
+??#?????#?? 4,1
+.#????#?###?. 2,7
+..????#??? 3,1,1
+####???#..??. 6,1
+?#???#???##????#?#?. 2,1,10
+??#?#?#?.?????# 1,6,1,1,1
+?????.##?#?#?#?.??#? 1,2,9,1
+.?.????.?. 1,1,1
+?????????? 1,3,1
+#????#?????? 1,3,3
+#.?#..???? 1,1,1
+?#?????..????#.?? 1,2,4,1
+#?##??????.??. 1,2,3,2
+???#??#??. 5,1
+?##???.?.??#.?# 3,1,1,1,2
+?#?????????? 2,7
+??#?#???#?#?????? 2,5,1,1,1
+..#?..?.##?.? 2,2,1
+???????.???.#?##.?.? 1,4,3,4,1,1
+??##??###.# 7,1
+?###?#??.#.??..?? 4,3,1,1,2
+??????#??#?. 2,2,2
+?#?##??????..#?? 6,2,3
+?#?#???????..#.#?? 9,1,1,1,1
+#?#?#?#????.?? 1,5,2,1
+?????#??.?#? 5,1,1
+??##???.?#??#.??.? 5,5,1,1
+.?#?.?##?? 3,2
+.???????#??..?#?? 8,1
+?????.???# 4,1
+?#?....???..??#? 3,2,1,1
+???####?????.???#??? 1,5,1,1,1,1
+???.??????...#??? 1,5,3
+????#??.???????? 1,1,1,1,3
+?#.???.#### 1,3,4
+?.?#???#?#?#???.? 1,10,1
+???.??#.?.? 2,1
+??.??.??????.??.?? 1,1,3,1,1,1
+.#??.?#????.#?###? 3,4,1,1,3
+#?.???#?.?. 1,2,1
+???#???.?? 4,2
+????.#?#?#.?#####?# 3,1,3,6,1
+..??????##?#?????#?? 2,1,5,2,4
+#??.??#????#???#???? 1,15
+???????????.? 1,5,1
+?#??#???#?? 5,3
+.???##????.?????.#. 1,4,1,1,1,1
+?.?#?#??.?#?????? 6,2,2
+.????????????? 7,1
+...?.#???????#? 1,1,2,1
+?????.?#?? 2,1
+?#.??????? 2,2
+#????#???##? 1,6,2
+.?#?.?.???#?# 3,1,4
+?#??#.??.?#?? 1,1,3
+????#.?????#?##.?? 5,1,6,2
+???..???????.##?? 2,6,2
+..?#???.#?? 2,2
+???##?.??#????????. 4,2,2
+????#?????.?#??#. 1,5,2,1,2
+##.??..#?..?#???? 2,2,1,3,1
+??????#???#?#??? 5,7
+.?#??.#??#???.#.#? 4,1,1,1,1,1
+?.?????#?#?.?? 1,5
+?????????#?????#?# 10,2,1,1
+??????#??##????#??? 1,5,2,2,2,1
+.??#?#????.??### 1,1,1,1,4
+?????#?????#????? 4,2,2,1
+??.?.?#??????#.??? 1,2,3,1,1
+.??.?.???? 2,1,1
+.??#????????? 1,2,3
+???#?????#??#????#? 1,1,1,5,1,2
+?????##???#?? 3,4,1
+##?????????# 5,1,1,1
+???#??#??????.? 4,1,2
+????.??#?#?? 1,1,4
+#??????.#???. 1,4,4
+????##.??#???#?.??? 3,5
+????.?#??#.##???? 1,1,4,2,3
+#?#???#??????#. 1,6,2,1
+???.???##?#? 1,1,4
+?????#.???? 5,3
+?#??.????#?????# 1,1,5,3
+????#?.?#?.?.?. 1,1,2,1,1
+???.???#?#?#??? 1,9
+.?##??.??#???#???#? 3,3,6
+?????##??.?? 1,6
+#????????#####.? 2,1,7,1
+#?..??.??#?? 2,1,1,3
+?##?#???#???.#??? 5,3,1,1
+.?????????????????. 1,1,2,1,1,4
+?.???#??.?#?????? 4,5,1
+?.????#??#?? 1,1,1,1
+??????.#???# 3,1,3,1
+#?#??..???##?#?.? 4,6
+#??#?.????.?.? 5,1,1
+?.?????.??#?#?##??? 1,1,1,10
+???#?#.???##???.?.? 1,3,7,1,1
+#?#.?#??.??? 3,3,3
+.?#???#???.???# 7,3
+?#????#??. 3,3
+????####?#?.???? 2,5,1,2
+?#???#??...??.? 2,2,2
+?????????????#?###? 2,11
+??.???????###?# 1,4,4,1
+????#??.?.???.#???? 6,1,1,1,1,1
+??#?#???????? 6,1
+#??#?#????#???.? 9,4
+?.#?#?#????????#??.? 8,1,3
+.?.???#???????????? 1,7,1,2,2
+?#???###????.??#?# 1,5,2,5
+??#?????.??# 1,2,3,2
+?##????.??.?# 4,1,2,1
+#.?#?#???? 1,1,5
+????.##??.?#??????? 3,4,4,3
+?#.??????#??? 1,1,1,3
+?#?.#?..??.??? 1,2,1,3
+..???????? 3,3
+?#????????. 1,3,2
+.?#.???#.?? 2,2
+?.??????????.?? 3,3,1
+?#.??????..?#? 1,4,3
+????????.??.#??? 6,2,2,1
+?#???????.?????? 2,4,5
+???.?#???. 1,1,2
+??????#.?##??????#?# 1,5,3,6
+??#?????#??.???#??. 4,2,1,5
+.?#??.?.?. 2,1
+#??#?.#?.#??.???? 5,1,1,1,1
+???#????.#.? 2,1
+??????#???.#.?#??##? 3,1,5
+????#???????.# 9,1,1
+????????#?##?#..#?. 1,2,3,2,1,2
+??.?##?##.??????#? 2,2,2,4,2
+###??#???#??? 3,1,3,1
+.?.?.?#?.???#?# 1,1,3,1,1
+.?..?#?????.???#??#? 1,2,1,1,2,3
+?#.?????????#??#?#?? 2,1,14
+?##.#???#?????? 2,1,1,1,1
+???#.##???.? 3,5
+???????.???#?? 4,1,2
+??.#?????#??? 1,10
+?#???##???? 2,4,1
+?????.????? 3,3
+??#?#?#??#????#?#? 2,1,2,1,1,3
+#?????????#???????#? 1,3,11
+..???#???????.? 2,6
+??#???.?#??.? 1,2
+..?#.?##?#??.. 2,2,1,1
+??.????.?? 1,3,1
+?????#?????#.# 1,5,1,1
+..?#????#? 2,1
+???#????#???.? 1,6,1
+?.??#.???#. 2,1,1
+..???.??#??. 3,4
+???#??##?.???? 5,3,1
+.??##?#?.???#?#? 5,7
+#.?.???#???? 1,5,1
+?????#??.??? 1,3,1
+????????####??.##? 3,7,3
+???????##???? 1,8,1
+???..###??#??#???# 2,3,8
+??##????#? 5,1
+#??#?#?#?#.#?##.. 10,1,2
+##?#?#?????#??? 7,1,2,1
+??????????#?##????.? 2,11
+##????????.#.?#?# 2,6,1,4
+?#?#????#.?### 1,6,3
+#?#?#?#..??? 1,1,3,1
+???.#?#### 1,6
+????????#?.???# 2,4,3
+#?????###????.??#?? 12,3
+??#.#???#?????.#? 1,5,1,1,1
+??#?.???#?????#???? 3,1,5,1,1,1
+????#?.????.???? 2,2,2
+???#??????????.? 4,7
+?.??###???###?#???#? 11,1,1
+???????..?? 1,3,2
+???#?#?#??#???# 9,1,1
+????.????#? 2,4
+??#???.?.?.??.?##? 2,1,1,1,1,4
+?#.#..???#? 1,1,5
+??????????????#???#? 2,3,8
+????#?..#?.?##?#? 1,1,1,6
+?#.##???..??#?#????# 1,2,2,1,5,2
+????#?##?#.? 8,1
+..#?#????#? 3,1
+???.????.?????## 1,1,1,1,6
+#??.????????##??? 1,1,4,4,1
+#??#??????. 4,1
+??????.???#?????.. 1,1,7
+?#.?.????????##??? 1,1,2,2,2,1
+????.?##????? 1,1,8
+?###?.?#.?##?.# 3,1,2,1
+????????.??? 2,3,1
+?#?#...##?? 4,2
+??#?.#??#.. 1,1,1
+#?#.?????.??.. 3,1,2,1
+?..?#??.?#? 2,2
+#??????#??#?.#???### 4,5,3,3
+#??#???????????? 1,2,6,2
+?#?????..#?? 4,1,1,1
+?.#???#??? 2,2
+?#..?.??##???#.?? 1,5,1
+???.?.?...?##? 2,1,4
+#???.#???#??## 1,1,3,5
+.????.?..????.#?? 1,1
+??#??.????##?.?.? 1,1,1,4,1
+#???.????? 1,1,4
+????#.#???.#?? 4,4,2
+?#??.#??.##?????..# 1,1,3,2,3,1
+???????##???.???.? 2,6,1,1
+?.???#?.?.???#???? 4,2
+?.??.????. 1,2
+#???#???#??????##? 10,2,3
+?.??????##???#???? 1,4,10
+????#???????.##?##?# 1,2,1,1,7
+?????#????#?? 2,5,1
+???..?????#??#??.?#. 1,6,3,2
+???????#?? 1,3
+.??.???.????# 2,3,1,1
+????#.#?#####?? 4,8
+?#???????????.?. 6,1,1,1
+????.?#?##???#????? 2,11
+.?.#.??????#??????? 1,1,1,1,7,1
+????###.??.. 7,1
+???#?.???? 4,1
+????.?????#?. 1,6
+?##?.????? 3,1,1
+?#.?#?#?????.?? 2,7,1
+#?#????#?#..????#??# 1,1,5,7
+?.##?#????? 4,1
+.??#?.###??. 3,4
+#??##?????#??#??. 6,6
+.#?#?????#?..#? 4,4,1
+?.?.??.?#?###? 1,1,1,3
+????.?????? 1,4
+??????..?.?#?#? 1,1,1,1,4
+????##???????#.?.? 5,1,3,1,1
+???#??##??##???#???? 12,4
+?.??##??#???.?#?. 1,4,2,1,3
+???.???#???##???.?. 2,4,5,1,1
+?#??..???##???.?? 3,5
+?????#????#?.??#.? 1,1,3,3,1
+??.????#..??.#?#?#?? 2,7
+??##??.????#? 5,2,2
+?????????????. 1,1,5
+.????.##?# 4,2,1
+??.??.?.?? 1,1,1
+?#??.???.??.? 2,1,1,2
+?.?#?????.?????#? 6,1,1
+??##?????#???. 10,1
+.?#???????##..#? 1,4,3,1
+???#.???.??? 1,1,1,1
+?.?#.???..#? 1,2,2,1
+?.?#????#??????# 9,2
+????#?#?.?##??????? 1,3,2,5,2
+?.????##???#??? 1,7,1,1
+.?#?.??.##???#??#? 3,2,3,1,1
+.#??##????#???#. 6,1,1,2
+?????.?.???? 3,1,1
+??#??#####??#??.? 2,6,1,1,1
+?.?.?#????#?#..? 1,4,4,1
+??????..??????#??? 2,5,3
+.#?#?#?.??.?#.. 5,2,2
+###.??.??????##?# 3,1,9
+??.?.####?..? 1,5
+????.??.??##. 3,4
+#???#??#.???.##??? 1,4,2,4
+????.??????. 1,2,2
+???#???#??.? 1,3,3,1
+????#?#?#?.??? 5,1
+#??.??#??????. 1,8
+??????#??? 3,2
+???##????#?.#?# 1,4,3,1,1
+????..????.??#??## 3,1,1,7
+???????##???? 2,2,4,1
+???.??##?????#.??##. 1,4,1,1,1,2
+#.????????????..?? 1,8,1
+???..?##???#?? 2,3,3
+.?????#..###?. 1,1,4
+???.?.???????? 1,1,2,1
+????#?#????? 1,1,5
+???.?#?#??#?#? 1,2,1,5
+.?.???.??#?###??# 1,1,7,2
+.???#??.?#??#?? 4,3,2
+?#.#??#?..???? 1,1,1,3
+#???#????.#??????#. 1,4,1,5,1
+..????#??#? 2,1,1
+?#...??#??? 1,4
+.####?????# 6,1
+???#?#??????..#??? 4,3,3
+#.???????.????#?? 1,3,1,5
+???.???????. 1,7
+??#.??#???##??????? 1,10
+?????.???.??#??#??# 1,1,1,3,6,1
+?.?#???..?# 5,2
+??#????##???..?. 3,4,1,1
+##?????.###?.? 3,1,4,1
+?..#?#??.?????? 1,4,1,1,1
+??...#??.??.?. 3,1
+.????#?..?#?# 5,3
+???#?????????.????.? 11,1,2
+.??#???.?#?#????#??. 3,5,3
+??#??#.????. 5,2
+??????#?.???.?????? 1,2,3,2,1
+?##???##?..#??#?? 2,3,4,1
+.???#??#????#??????. 7,7
+???#?..??# 2,1,1
+.?#.???.?????? 2,2,3,1
+.#?..#????? 2,2,3
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day12/test1.txt b/solutions/2023/pughmds/inputs/day12/test1.txt
new file mode 100644
index 0000000..ab9396b
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day12/test1.txt
@@ -0,0 +1,6 @@
+#.#.### 1,1,3
+.#...#....###. 1,1,3
+.#.###.#.###### 1,3,1,6
+####.#...#... 4,1,1
+#....######..#####. 1,6,5
+.###.##....# 3,2,1
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day12/test2.txt b/solutions/2023/pughmds/inputs/day12/test2.txt
new file mode 100644
index 0000000..c5bec3a
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day12/test2.txt
@@ -0,0 +1,6 @@
+???.### 1,1,3
+.??..??...?##. 1,1,3
+?#?#?#?#?#?#?#? 1,3,1,6
+????.#...#... 4,1,1
+????.######..#####. 1,6,5
+?###???????? 3,2,1
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day13/input.txt b/solutions/2023/pughmds/inputs/day13/input.txt
new file mode 100644
index 0000000..ce4845e
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day13/input.txt
@@ -0,0 +1,1351 @@
+...##.#
+.##.###
+.##.###
+...##.#
+#...###
+.#..##.
+##.##.#
+...####
+#.#.###
+#....#.
+..#.##.
+..#.##.
+#....#.
+#.#.#.#
+...####
+
+###..##.######.##
+..#..#.#......#.#
+#.##.#..#.##.#..#
+#.#.##.#..##..#.#
+#..#...###..###..
+#..#...###..###..
+#.#.##.#..##..#.#
+#.##.#..#.##.#..#
+..#..#.#......#.#
+###..##.######.##
+...#.#..######..#
+..###....#..#..#.
+#.###....#..#....
+##.#####.#..#.###
+...#.....####....
+..#...#.#.##.#.#.
+...###.#......#.#
+
+##.##.#####
+#.####.#..#
+#.####.#..#
+##.##.###.#
+########...
+.#....#....
+###..#####.
+
+..#.#.#...####.
+..#.#...#....##
+##.##.#..##....
+...#..#.....#..
+##......#.##.#.
+..####.#.#.#...
+..####.#.###...
+
+.#..#.##.
+##..####.
+.#..#..#.
+..##....#
+.#..#..#.
+.#..#.###
+........#
+......#.#
+##..##.##
+##..##.#.
+##..##...
+##..##.##
+......#.#
+........#
+.#..#.###
+
+....###...#..##
+#..####..##..##
+.###..###.#.###
+...####...#####
+#..#..#..##..##
+#.##..##.#.....
+#........#.##..
+
+.#.#.#.
+.#.#.#.
+##.#.##
+#.#.###
+..##...
+..#....
+###.###
+..#..#.
+#.####.
+.##.###
+.##.###
+#.####.
+..##.#.
+###.###
+..#....
+
+#..#.###.##.#
+....#...#..#.
+....#..#.##.#
+....##.......
+.##.##.######
+####....#..#.
+.##..##.#....
+.##.#.#..##..
+####.#...##..
+.##.#.#.#..#.
+.....#.######
+.##.....#..#.
+#..##.###..##
+
+#....#.#.
+####.##.#
+#.##..###
+##..#.###
+.#....#.#
+...##..##
+##..#....
+##..#....
+...##..##
+.#....#.#
+##..#.###
+#.##..###
+####.##.#
+#....#.#.
+.#...#...
+.#...#...
+#....#.##
+
+..##....#.#.##.
+.####..#.##.##.
+##..##..#.#####
+##..##.#.#.....
+#######..######
+.#....####.....
+.......#.#.####
+
+..#.....#
+.###.#.##
+##...##..
+#......#.
+#.###..##
+#.#.#..##
+#......#.
+#.##..##.
+#.###.###
+#.###.###
+#.##..##.
+#......#.
+#.#.#..##
+#.###..##
+#......#.
+
+#####....####
+..##..##..##.
+###..#..#..##
+##..##..##..#
+##..#....#..#
+###...#....##
+..###.##.###.
+####.####.###
+..##.####.##.
+###.##..##.##
+##...#..#...#
+
+#.###.###.#
+#.###.###.#
+...##.#..##
+#..#.....#.
+.....##...#
+#..##.##...
+...#.#.....
+###.#...#.#
+..#.#.##..#
+#.#...#....
+#.#...#....
+..#.#.##..#
+###.#...#.#
+...#.#.....
+#..##.#....
+.....##...#
+#..#.....#.
+
+###.#..####..
+###.#..#.##..
+###.#..#.##..
+###.#..####..
+.#.#..#.#...#
+.#....#..###.
+#...##..#####
+
+..#.###.#.####.
+.....###.###.##
+..#..#.#.######
+##.#.....######
+###.#..##......
+##..#..##..##..
+..##.#.########
+..###..#..#..#.
+...#####...##..
+
+...##..##
+.#.......
+#####.#..
+##..#..##
+#..#.##..
+##..#..##
+.###..###
+#.#..##..
+#.....#..
+.####..##
+.##.#.###
+.#....#..
+.#.#..#..
+.##.#.###
+.####..##
+
+..####.
+#..#.##
+.###.#.
+#.##..#
+###...#
+.#.#...
+.#.#...
+###...#
+#.##..#
+.###.#.
+#..####
+..####.
+..####.
+
+#...##.####..##.#
+###.##.###.##.#..
+.#...#.#####..###
+##...####.##.#..#
+.##..#.#.#.#.####
+#....#.#####..#..
+#....#######..#..
+.##..#.#.#.#.####
+##...####.##.#..#
+.#...#.#####..###
+###.##.###.##.#..
+#...##.####..##.#
+....##...##.#..##
+#.##....#.#.###..
+#.##....#.#.###..
+
+##..###.##.
+.####.#..#.
+.####.###.#
+#.##.######
+##..####.#.
+..###..#.##
+..##...#..#
+########...
+.#..#.##..#
+..........#
+.#..#.#..##
+.####..###.
+......##.#.
+......##.#.
+.####..###.
+
+##.#.#..#.#
+.#####..###
+.##.#.##.#.
+..##......#
+.###.####.#
+#####....##
+..#.######.
+##...####..
+#.#########
+.##.#.##.#.
+.##.#.##.#.
+#.#########
+##...####..
+..#.######.
+##.##....##
+
+.##.#.###.#....
+..#...#####..##
+#.##.##..##..##
+..#..##........
+.##..##.#.#..#.
+#.........#..#.
+#.#.###..######
+...#...####..##
+.#.#......####.
+......####....#
+#..####...####.
+..##.##.###..##
+...##.#####..##
+....##..###..##
+##.##...###..##
+##.##...###..##
+....##..###..##
+
+#.###....
+.###..###
+#..#.#..#
+##.#.....
+##.##..##
+.##.##.##
+#..###...
+.#...#.##
+#.##.##..
+#.#..#.##
+#...#.###
+#...#.###
+#.#..#.##
+#.##.##..
+.#...#.##
+#..###...
+.##.##.##
+
+.##.#....#.
+....######.
+.##........
+####..##..#
+#..########
+#####.##.##
+#..#..##..#
+#..#..##.##
+#..#......#
+.##..####..
+.##..####..
+#..#.####.#
+.....#..#..
+......##...
+####.####.#
+.##........
+#..#......#
+
+.##.###.#######..
+.##.###.#######..
+.##.##....##..#..
+#.#.####.###.####
+..##.#.#.....###.
+###.#..##.#.##..#
+.##..#..#..#..#.#
+...#.####..###.#.
+...#.####..###.#.
+.##..#..#..#..#.#
+###.#..##...##..#
+
+######..#####
+###..#..#..##
+###..####..##
+######..#####
+####......###
+##..######...
+..#..#..#..#.
+..#.######.#.
+..#........#.
+..##......##.
+###........##
+
+.#..#.####.
+#.##.#.##.#
+..##...##..
+.####..##.#
+.#..#......
+##..###..##
+.####.####.
+
+#####.#..###.
+#####.#..###.
+#...##.#..#..
+.#....#.##.##
+#..#.#.#...#.
+.##..####.##.
+.#...#.#.##..
+.#...#.#.###.
+.##..####.##.
+
+##.##.##.##
+########...
+.######.#..
+#.####.##..
+#.####.#..#
+#......#.##
+.#.##.#..##
+...##...#..
+..#..#..#..
+
+.#........#.#
+###.####.###.
+...##..##....
+.....##.....#
+#.##....##.##
+#.##....##.##
+.....##.....#
+...##..##....
+###.####.###.
+.#........#.#
+..###..###..#
+##.#.##.#.#..
+.#..#..#..#.#
+
+##.#...#.
+#...#...#
+..##.....
+.###.....
+#...#...#
+##.#...#.
+#..#.#.##
+####.####
+####.#...
+..#.#.###
+..#.#.###
+
+#..#..#..#.
+#######.#.#
+#######.#..
+#..#..#..#.
+####......#
+....##.#..#
+.......#.##
+
+.#.#####.##..##..
+#..####....#.....
+#..##.#....#.....
+.#.#####.##..##..
+..##.......##.#.#
+##...#.#.#..#..#.
+#.#.##..#...##.##
+#########.##..###
+#.####.#..#.#....
+#.#.#.#.####...#.
+##.....###...#.##
+..#...#.......###
+...###.##.....###
+#.##.##.###...#..
+#.##.##.###...#..
+...###.##.....###
+..#...#.......###
+
+..###.#....#.###.
+##.###.####.###.#
+..#.####..####.#.
+..##.#......#.##.
+.....##.##.##.#..
+##...##....##...#
+..#..##....##..#.
+...##.##..##.##..
+####.#.#..#.#.###
+#######.##.######
+###.#........#.##
+.....###..###....
+##.#..######..#.#
+..#####....#####.
+....#.##..##.#...
+...#..#.##.#..#..
+..#..########..#.
+
+.###.##.#
+#.###.#..
+.#...#.##
+##.#...##
+###...#..
+#.##..###
+...#..#..
+...#..#..
+#.##..###
+###...#..
+##.#...##
+.#...#.##
+#.###.#..
+
+#..#.##
+.##..##
+#..#...
+####.##
+#..#.##
+#..####
+....###
+.....##
+.....##
+....###
+#..#.##
+#..##..
+.##.##.
+####.##
+.##.###
+
+##....###
+#.#.##...
+#..##.#.#
+.###..###
+###.#..##
+###.#..##
+.###..#.#
+#..##.#.#
+#.#.##...
+##....###
+###...##.
+####.#.#.
+####.#.#.
+
+#..#....##....#
+#####..####..##
+..###..####..##
+.###....##....#
+....##########.
+..###..####..##
+#..............
+#.#............
+..##.##.##.##.#
+
+######.#.#.##
+..####..#.#.#
+..####..#.#.#
+######.#.#.##
+.#..#.##.#.##
+#######.##.#.
+.#...#.######
+#...##..###..
+......###.###
+##..#......##
+###..##...#..
+###..##...#..
+##..#......##
+.....####.###
+#...##..###..
+
+..#######
+#.#......
+..##.##.#
+###......
+###.####.
+##.##..##
+####.##.#
+
+#.###..
+#.###..
+.#....#
+##.#.##
+##.#..#
+#.#..#.
+.#..#.#
+.#..#.#
+#.#..#.
+##.#..#
+##.#.##
+.##...#
+#.###..
+
+#....##...###
+.####.#....##
+#######.##.##
+..##..#......
+##..####.####
+#....#..#..##
+#######......
+.####.##.....
+#....###...##
+#.##.#.#.##..
+#....##.#.###
+##..##.#..###
+#.##.#.#...##
+#....##.#....
+.#..#...#.###
+......##.#...
+#....#.#.#.#.
+
+#######.#..#.##
+.#..#....##....
+......#.#..#.#.
+#.##.#.#.##.#.#
+##..##.#.##.#.#
+..##..###..###.
+##..###.#..#.##
+#.##.#........#
+#....##.#..#.#.
+
+..#....##
+..#....##
+##...##..
+#####....
+..#.#...#
+..#.#..##
+...#...##
+...##.#..
+####..#..
+.....####
+##.###.#.
+..#.#.###
+##.##.#..
+......##.
+#.####..#
+
+#...#####
+#....####
+#....####
+#...##..#
+.#.##....
+......##.
+..##.#..#
+
+#......######..
+#..##..#.##.#..
+...##...#..#...
+#.#..#.##..####
+########.##.###
+##....##....##.
+##.##.###..###.
+#.#..#.#....#.#
+#......#....#..
+
+.#..#..####
+.#.....####
+##..##..##.
+..#.#.#..##
+..####.##.#
+.##.######.
+.##.######.
+..####.##.#
+..#.#.#..##
+##..##..##.
+.#.....####
+.#..#..####
+...####..#.
+
+###.#...#......#.
+#..####.##....##.
+..######..####..#
+#.#...#.#..##..#.
+...#.#..#..##..#.
+....###..##..#...
+#.#.#.#..##..##..
+.#.##..#..####..#
+.##.##...#....#..
+........##.##.##.
+.#..####..#..#..#
+.#..##.#.##..##.#
+##.#..#..######..
+##.#..#..######..
+.#..##.#.##..##.#
+.#..####..#..#..#
+........##.##.##.
+
+...##..
+#.#..#.
+#.#..#.
+##.##.#
+.###.##
+.##..##
+#.#..#.
+...##..
+...##..
+#.#..#.
+.##..##
+
+#.#..#...
+##.####.#
+...#...##
+...#...##
+##.####.#
+#.#..#...
+#..#..##.
+##....###
+##.#..###
+....##...
+##..##...
+##......#
+##....#.#
+
+..#..##...#..#...
+..#....##....#...
+#####..##..######
+####........#####
+##.###.##.###.###
+....#.#..#.#.....
+#...#..##..#...##
+#..##.#..#.##..##
+.####......####..
+#..#..#..#..#..##
+.#.#..#..#..#.#..
+.#.#..#..#..#.#..
+.#.###....###.#..
+#.###..##..###.##
+#.#..#....#..#.##
+
+....##.
+##..#.#
+##..#.#
+....#..
+.#.#...
+.##..##
+#...#.#
+.###.#.
+.###.#.
+#...#.#
+.##..##
+
+#.#...###..#.
+..###...##..#
+..###...##..#
+#.#....##..#.
+#...##.#####.
+#...##.#####.
+#.#....##..#.
+..###...##..#
+..###...##..#
+#.#...###..#.
+.#.#..#..##.#
+...#..##.#.#.
+##..##..###.#
+.###..####.##
+##..####.##.#
+..#.#.#...#..
+#.##....##.#.
+
+###.#.##.#...#.
+###.#.##.#...#.
+.#.#.#.#..#....
+..##.##..#.##.#
+#.#.###.#.###.#
+.####.....#.#..
+#.#..###.###...
+#.#..###.###...
+.####.....#.#..
+#.#.###.#.###.#
+..#####..#.##.#
+
+......#...#.##...
+####..##.#.#..#..
+.......##.##..#.#
+.......#.###...#.
+......###.##.#.##
+#..#.###.#.##..##
+....###...#..##.#
+..........#.###.#
+####.###...#..#.#
+#######.#..##...#
+.....###...##.###
+.....###.#####...
+####..#.#.#.#.#..
+....####.#.##....
+####.##.###.#....
+
+.##.#..#.
+##.......
+#.##.##.#
+#.##.##.#
+###......
+.##.#..#.
+#........
+
+###.#..#.##
+###..###...
+.#####.##..
+#.##..#####
+.####..##..
+...##.#.###
+#....#..#..
+.#..#.##.##
+#.#.#..#...
+#..##.#.#..
+#..#.######
+.#.##...###
+##....#####
+##.#.#.##..
+#.##.###...
+...####.###
+...#.##.###
+
+.#.##..#..###
+##.#.####....
+#.#.#.#.#.#..
+#.#...##.##..
+#.#.#.#....##
+.###.....##..
+.###.....##..
+#.#.#.#....##
+#.#...##.##..
+#.#.#.#.#.#..
+.#.#.####....
+
+.#.##.#.##.
+.######.##.
+#......####
+.#.##.#.##.
+#..##..####
+##.##.#####
+#.####.#..#
+.######.##.
+########..#
+.#.##.#..#.
+#......#..#
+#.#..#.#..#
+###..######
+#.#..#.#..#
+##....#####
+
+#..##..#.......
+###..###..####.
+.#....#..#.##.#
+.######...#..#.
+.#.##.#.#.#..#.
+...##......##..
+##.##.####....#
+.#.##.#...####.
+.#....#..#....#
+..####.....##..
+#########..##..
+##....##..####.
+..........#..#.
+#..##..#.######
+.........##..#.
+..#..#..#######
+.######.#######
+
+..#.#.##.
+..#.#.##.
+#######..
+.##.#.#.#
+....#..##
+..#######
+##...##.#
+##...##.#
+###.....#
+#####..#.
+####.##.#
+##.....#.
+..#.##..#
+###..###.
+..##.#.#.
+...#...##
+..#.#.#..
+
+.....###.
+####.###.
+####...#.
+####..##.
+####.###.
+.....###.
+.##.#..#.
+.....#..#
+....###.#
+####..##.
+#..#.#.##
+#..##...#
+#..#.....
+#..###..#
+.##.##..#
+
+..#...#.#######
+...####.#...##.
+.####.#.#.##..#
+...#.#.###..##.
+..##.#.##..#..#
+.....#.#..#....
+.#####..###....
+.....#####.....
+#..##.#..#.#..#
+#..##.#..#.#..#
+..#..#####.....
+
+.#..#..####.#
+.#..#...###.#
+#....#.#..###
+.####.#..###.
+#.##.##...#..
+######..##.#.
+#.##.##.....#
+..##..#..##.#
+.####.#.##.##
+.#..#....##..
+#....##.###.#
+#.##.#...##..
+.####.....#.#
+
+##..#.#.##..#
+##.###.##....
+.##.#####.##.
+#.####.##....
+.##.#....#..#
+.####....#..#
+#......#.####
+#......#.####
+.####....#..#
+.##.#....#..#
+#.####.##....
+.##.#####.##.
+.#.###.##....
+##..#.#.##..#
+..#.##.######
+
+##.#..#.##.####
+#..####..#.#...
+###########...#
+##.#..#.###.###
+####..####...##
+##......###...#
+..######.....#.
+###.##.####.###
+##..##..###.##.
+####..#######..
+#.#....#.#...#.
+.#..##..#.#..##
+.#..##..#.#.###
+
+##.##......##.###
+###.#.####.#.####
+#..##..##..##..##
+##..########..###
+..###..##..###...
+..#.##.##.##.#...
+.#....#..#....#..
+##.#.##..##.#.###
+.#.....##.....#..
+##.###....###.###
+#.#..##..##..#.##
+#...##....#....##
+###.##....##.####
+##.###....###.###
+.#..#..##..#..#..
+.#.###....###.#..
+..#.##....##.#...
+
+#....###.
+######.#.
+#.#..#...
+#....#.#.
+#######.#
+#....#.#.
+..##...#.
+.......#.
+.#..#...#
+#.##.###.
+#.##.###.
+
+######.
+##...#.
+##..##.
+..#.#..
+###.##.
+.#.##.#
+.#....#
+.#....#
+.#.##.#
+###.##.
+..#.#..
+##..##.
+##...#.
+
+.#.#.#.####
+.#....#....
+....##....#
+...##..####
+.#...#.#..#
+..##..##..#
+#######....
+#######....
+..##..##..#
+
+#####.#..#.######
+###.########.####
+.#.####..####.#..
+#.#...#..#...#.##
+..#.#.#..#.#.#...
+.##.#......#.##..
+.....##.###......
+.###.######.###..
+.##.#......#.##..
+#.####....####.##
+.###..#..#..###..
+...#...##...#....
+#.#..........#.##
+
+#.##.######.#
+..##...##...#
+.####..##..##
+..##...###..#
+.#..#......#.
+.####..##..##
+######.##.###
+#.##.#.##.#.#
+.......##....
+......#..#...
+#######..####
+
+..#.#.##.
+..#...###
+#.#..#.##
+...#.####
+...##.#.#
+###....#.
+####.#..#
+.....#.##
+..##..#.#
+..##..#.#
+.....#.##
+
+##.##...###......
+########...#..#..
+#....##.#.#.#....
+###.#.#.##...#..#
+##...##..###.#..#
+##.####...#...##.
+#.#####..##..#..#
+.#...####..#..##.
+.#...####..#..##.
+#.#####..##..#..#
+##.####...#...##.
+##...##..###.#..#
+###.#.#.##...#..#
+
+####.#.#.#..#..
+.#.##.######.#.
+.#.##.#.....###
+.#.##.#.....###
+.#.##.######.#.
+####.#.#.#..#..
+.##.#.#.##.##.#
+.##..###..#.##.
+#.#######.#.##.
+#.#######.#.##.
+.##..###..#.##.
+.##.#.#.##.##.#
+####.#.#.#..#..
+.#.##.######.#.
+.####.#.....###
+
+#..##..###..#
+..#..#....#.#
+#.####.##.#..
+#.#..#.####.#
+...##.....#.#
+###..###.....
+##.##.######.
+..####.....##
+##.##.#######
+.##..##.##..#
+.######......
+.######......
+.##..##.##...
+
+.##..##
+.######
+##.##.#
+##.##.#
+..#..#.
+#.####.
+#.####.
+.#...##
+...##..
+...##..
+#......
+...##..
+...##..
+#......
+...##..
+
+......#.##.##....
+.####..##........
+.####..##........
+......#.##.##....
+##..####.#...#...
+.####......######
+##..##..#.##..#.#
+#.##.##..####.#..
+##..##.#.##.##.##
+..##..#.###.#.##.
+#....#####...####
+##..##.....##...#
+..##...####.#...#
+#.##.##.##..#####
+#####.....##..#..
+......##.###.####
+#....####.####...
+
+#..##...##.#.
+.###...#.#...
+####...#.#...
+#..##...##.#.
+..#.......##.
+###....#.#.##
+...####..##.#
+##...#.#.##..
+##...#.#.##..
+
+.##..##
+##.....
+.##....
+..##...
+###....
+.####..
+.#.##..
+.#.##..
+#####..
+
+####..####....#
+####...#.#.##.#
+.#....#########
+##..#..#.######
+..#..#.#.......
+..#..#..##.##.#
+..#..#..##....#
+..#..#.#.......
+##..#..#.######
+
+#.#.##.
+..#.##.
+..#.##.
+#.#.##.
+#...##.
+##.....
+..#####
+#.##.##
+#.##...
+
+...#.####.###
+#.#.##..##.##
+.#.#..###.#..
+#######.#..##
+#######.#..##
+.#.#..###.#..
+#.#.##..##.##
+...#.####.###
+####.#..#....
+.#.##.######.
+#.#####..#...
+
+....###...#
+..###...##.
+..###...##.
+....###...#
+####.###.#.
+#...##..#.#
+##...###...
+
+.#..#..#.
+.########
+#.##.##.#
+..#.####.
+..#.####.
+#.##.##.#
+.########
+.#..#..#.
+#..######
+..##...##
+...#.##.#
+##..#..#.
+..#######
+
+.#.##...###...##.
+.#.##...###...##.
+..###.##.###.##..
+##..##.....###..#
+#.##.......#.###.
+###..###########.
+#...##...##.#.##.
+##....#...#..#..#
+##....#...#..#..#
+#...##...##.#.##.
+###..###########.
+#.##.......#.###.
+##..##.....####.#
+..###.##.###.##..
+.#.##...###...##.
+
+#.#..###.#..#.#
+#.#..###....#.#
+#.#.##.###.#..#
+#######......#.
+####.#.#.##...#
+#.###....#.##.#
+.#####...###...
+##.#####.##.#..
+##...#..#...###
+#..####.....#.#
+####.#..##.#..#
+####.#..##.#..#
+#..####.....#.#
+
+#....#....#..
+#.##.#....#.#
+.#..#..##..#.
+#.##.#....#.#
+##..##....##.
+..##..#..#..#
+.####......##
+#.##.#....#.#
+#.##.#..#.#.#
+.#..#..##..#.
+#.##.######.#
+######.##.###
+##..########.
+.####......##
+.#..#..##..#.
+
+.#.....######
+#..##########
+#.###..##....
+...##..#.....
+###.#..###..#
+...####......
+..###.#######
+...#...######
+.##...#.#####
+
+.#..#.####.#.
+.###........#
+.###........#
+.#..#.####.#.
+#.#....#.....
+###.##....##.
+#.#...#..#...
+
+......#..##..
+.#..#........
+#.####..#....
+#.##.####...#
+#######.##.#.
+.####.#..####
+.####.#..####
+#######.##.#.
+#.##.####...#
+
+#.##...
+#..####
+.##.##.
+.######
+.#.####
+#......
+..#####
+###.##.
+.######
+.#.....
+..##..#
+.###..#
+.###..#
+
+#..##...##...
+####.#...#.##
+....##..#..##
+######.###...
+..#..##..####
+####.#..#..#.
+....#.#..####
+.##.#..###..#
+.##...###....
+####.#.#.#.#.
+####.#.#.#.#.
+.##...###....
+.##.#..###..#
+....#.#..####
+####.#..#..#.
+
+###..##.##..#
+##.##.######.
+######.##.#..
+##...#.#####.
+##..###..#.##
+..#....##.###
+###.#.##.##..
+##.#..#...##.
+##.#..#....#.
+
+.###.....#.
+.#...#.#...
+#..##.##..#
+....###.###
+###..#..#.#
+####...##..
+#...##..#.#
+#...##..#.#
+####...##..
+###..#..#.#
+....###.###
+#...#.##..#
+.#...#.#...
+.###.....#.
+.###.....#.
+
+##....##.#.....
+#..##..#######.
+#########.....#
+.######.###..##
+#......##....##
+#......##....##
+.######.####.##
+
+#..##....
+###.#.##.
+...#.#..#
+..#.#....
+...#..##.
+..#######
+#.#..####
+###..#..#
+#..#..##.
+##.#.#..#
+.....#..#
+##.##.##.
+...#.####
+##..##..#
+##..##..#
+.#.#.####
+##.##.##.
+
+#####.#.##..#..
+#####.#.##..#..
+..##.##..#..#..
+#####......#..#
+#..##.##.###.##
+#.#....###...##
+#.....###.#####
+###.###..#..###
+...#..##.#.###.
+#...####...##.#
+##.#.#..#.#####
+##.#.#....#####
+#...####...##.#
+...#..##.#.###.
+###.###..#..###
+#.....###.#####
+#.#....###...##
+
+#..#.##.#.####.
+.#.#.#...##..##
+.#.#.#...##..##
+#..#.##.#.####.
+###..##.#.#..#.
+###.#..#.##...#
+#...#.####....#
+
+##..####.##
+.##.#..#.#.
+..###.###..
+###.#.#.#.#
+.##.#.#.#.#
+..###.###..
+.##.#..#.#.
+##..####.##
+.###..##..#
+.###..##..#
+##..####.##
+.##.#..#.#.
+..###.###..
+
+##.....#.#.
+#...##...##
+..#####.###
+..#####.#.#
+#...##...##
+##...#..#..
+#...##.....
+#.##.###...
+#.##.###...
+#...##.....
+##...#..#..
+#...##...##
+..#####.#.#
+..#####.###
+#...##...##
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day13/test1.txt b/solutions/2023/pughmds/inputs/day13/test1.txt
new file mode 100644
index 0000000..f226414
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day13/test1.txt
@@ -0,0 +1,15 @@
+#.##..##.
+..#.##.#.
+##......#
+##......#
+..#.##.#.
+..##..##.
+#.#.##.#.
+
+#...##..#
+#....#..#
+..##..###
+#####.##.
+#####.##.
+..##..###
+#....#..#
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day13/test2.txt b/solutions/2023/pughmds/inputs/day13/test2.txt
new file mode 100644
index 0000000..a24e182
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day13/test2.txt
@@ -0,0 +1,13 @@
+##..####.##
+.##.#..#.#.
+..###.###..
+###.#.#.#.#
+.##.#.#.#.#
+..###.###..
+.##.#..#.#.
+##..####.##
+.###..##..#
+.###..##..#
+##..####.##
+.##.#..#.#.
+..###.###..
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day13/test3.txt b/solutions/2023/pughmds/inputs/day13/test3.txt
new file mode 100644
index 0000000..4f0ff14
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day13/test3.txt
@@ -0,0 +1,13 @@
+.#..#..#.
+.########
+#.##.##.#
+..#.####.
+..#.####.
+#.##.##.#
+.########
+.#..#..#.
+#..######
+..##...##
+...#.##.#
+##..#..#.
+..#######
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day13/test4.txt b/solutions/2023/pughmds/inputs/day13/test4.txt
new file mode 100644
index 0000000..9b1a39f
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day13/test4.txt
@@ -0,0 +1,17 @@
+###..##.######.##
+..#..#.#......#.#
+#.##.#..#.##.#..#
+#.#.##.#..##..#.#
+#..#...###..###..
+#..#...###..###..
+#.#.##.#..##..#.#
+#.##.#..#.##.#..#
+..#..#.#......#.#
+###..##.######.##
+...#.#..######..#
+..###....#..#..#.
+#.###....#..#....
+##.#####.#..#.###
+...#.....####....
+..#...#.#.##.#.#.
+...###.#......#.#
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day14/input.txt b/solutions/2023/pughmds/inputs/day14/input.txt
new file mode 100644
index 0000000..1aa3fb3
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day14/input.txt
@@ -0,0 +1,100 @@
+...OO..##.......O..O....O..O#...O.OO#.#..O...O....OOO##..O##O#...#..O....#........#O.##O#..OO#..OO.O
+...#.#.#.O#...OO.#........O#.#............#...O...#...OOOO#...#..#..#.O...#..#....O.#O###..O#..OOO.O
+..##..##.O...#..OO.O.#.#O#.O.OO..#.....#.....#O##O.#..###.O.........OOOO#...O.#.........##O..O.#O.O.
+.....#.##O##.#.#O#....#.#O.....OO.#.#OO##OOOO..#O..#.#.#.O..........O.#......O...OO.........#.OO....
+.#.O#O...#...#...O#O....O.......O#.O..OOO...#.##OO.#.O..O.#.O...O..O.#.#.#...#..O...OO..OO.....O.#.O
+....#..#...#.##................O..OO.....##.........#...#..........#.OOO...O#..##.##.......#O..O.##.
+.............OO#...O.#....O....O...##...OOO....O.O..O...#......O..O#.O#.#..........#.#....#O...#O..O
+O.....O.O...O...OO..#...#.OO........#..##O...O.O.#.#..#O..##O.##..O......#.....O......#....O.....OO.
+.#..O....O.O..O.#..#.......#OOO...#.O..O..O#...OO.#...##O.O..O.OO...O....#O.O.....O#....O....O.#....
+...#....#OO...O....#.##.O#####..O...#...#...#..O..#.##.##OO...O#.........O..OO......#..OO.#...##O...
+...OO...........O....O.##..#.O##.....O..#.......O#..#....#O.#...#.#.O..O#..#..O..O##..O...#..O##.O..
+.....#OO#.O......#.O..O..O.....#.#.OOOOO..#......O.OO.OO.....#...#O....OO.O.#....##O..O..O......#...
+.O#O.#.#O.....O.#..O..#O..#O.O..O.......O....O.....#...#........#.#....O#..#......#O....OO#.....O.##
+.O..###.....O..##O...O..O..O.#....#.......#..##......O#O.#OOO...OOO...O..O#..#.#...OOO#..........O..
+#..O#OO..#O.O..OOO...#.#...O..O.O.......#..#...#..O...O.O#.O....#...#..O.O....O.#.#...#.....OO...#.#
+...O..#O............#.......#..##OO..##....#OO.OO..##..#OO.#.O..O.O........O........O.##...O.O.O...#
+.O...O.....#....OO#.O#.###.O....#.O...O#....#....O....O..OO.O....O#OO#.#O#......OO..OOO...O.#.O.....
+.O..O................OO##O..#....O..#.O..#.#............#.##.........#..O.O.O..O#...O.#OOO#..#.#...#
+O..O.........O##...#......#..#O....#O#....O.O.O.O...#......O#O..#...O..##.#..O.O.#O.......OO...O#O##
+OOOO.#O.O#.....#..#...#..O...#O....#.#.O.#..O.##.O....#.##.O.O....OO...O.......#..#......#...O###..O
+..#.......#...O..O..OO.O#...OO.OO..O#.O....#OO....#.#O........##O.#.....###....OO#..O.O.O.......O#.#
+#.O.......#OO#...#O#O#..OO.O.OOO#O#....OO..O#.O.#.O...##.#.O..#...O.O.....O..#.OO#.O...O.#....O.O..#
+.OO#.OO###....O........#..O..##.O...OOO.#...O......O#....#.O#.O......O.......O.#..#O..O...#..#...#..
+....##O....O.##......##.O.##......#....OOOOO#......#.#.....#O...#...#..OO##.##.....##.O...O.O##.#..O
+.#...O.#OO........O..OO...##O.O..O.....O..#OOO....#..#O#.#O......O.O.##.....O......O.O.#..#.#..OO...
+O...O....#...O##.....#......O.O..O..O..#...O..OO#..O#.#.....#....O...##.#.#O.O........#.O#O#OO.#..#.
+#..#...#OO...O#..#.#.#O#O..........O..O...O.O#O...OOO..O...O.O#.O##....O.......O..O..#...OO..OOO....
+.#.OOO#....O#.....#.OOO.........O.........O.......#O#O......O#O.O.#O#.#..O.....#.....#..O.##O.O#...#
+...#....O.O##.O...O.O..OOOO##.............OO....O.O....O..O....#OO..O....OO.OO.O..#.#......O.O#.....
+#....O...OO.#.....O...OO.#O.#O....#....##.O..#O..O.O...#...O#.#OOOOOO......#.O.##......##..###.O.O..
+.#.O..O.##O.#.........O.O.#O....#......O.#....O...#O.#.OO.OOO..#..O.O.##..#.....#..O.....O#..O#....O
+#.OO.#...O...O##O.O.O......#....O..O.O.......O.....#...OOO....O.O#.#..O.O..OO#.OOO..O...#..O..O.OO.#
+.#..#........##O.O.....OO.....O...OO#O..#..O.....O...O....O.#.#.......OO.....O..O.O..O....#.#O.....#
+...O.O.OO.O##OO..O.OO.......#O#O#..O#...O.#O.....#.....#.OO.#..#....O..OO.O.....O....O..#.OO.......O
+O#..........O.#..OO...#OOO.O..O.##..#O##O.O.#O#.OO.O.O#...O#...OOO#.O.OO.O.#O..#O.#.......##O..O...O
+.#.O.....#..O#....O.###.....##...O.....................O....OO#..O#.#.#...O....##...O.#...O..#.O##.#
+..O...#...O#.#.O.O.O...O.......OO#.#........O...##.O...#..##..OO.#..O.#.#.O..OO....O.O..#...#O.O#.#.
+....OOO#.O#...#...O#.O.OOO...##.....O...OO...O..OOO.O.O.O..##.#O#.#O.O...#O..O..#.#..OOOO..O.#.O#...
+.O............#....#..OO...#..OO.OO....O..O.OOO......O....O#OO....#............#.OO#.O##.O#O..OOO.#O
+.O......O.#.#.#..O.......O.........#O.O...#O#...#.OO...#...#.O..O..O.O.#.O.O.....#.#......##.O.O...O
+...O..O.........#O..O.O..O###O#..#..#OO#OO..#O.#.....##..OO...OOO#...#O.........OOO.OO.##..#O.O..O.O
+.#.##.#.#OOO#.OO.O.O#OO#O....O..#...O.......O.#.....##...#O..O.O...#..##O......OO.OOO..O...#.#.O#O..
+.#.O##O#...#.O.#O..OO##....##O................#..#..#..#.O....#....#.#.#..#O..#...O.#O..#...O...OO..
+.....O.......O##......OO..#...O...#.O..O..O#.O..##..#.O..#....#.O.#O....O..OO.#OO.#..#...#.O...OO.O.
+..#O.###...O..###O..#..#....OO...O.O....O.#O#.#O..O..O..#..#..#....#..O.OOO...O.#O.....O..O....O.OO.
+.O#....O.##O..........O.#OO..O...O...#..##.OO...#.#..OO.O.....##O..OO...O...OOO..#.#....OO..#OO.O...
+O....O.#O#O....OO.......O..O.O.....O...#.O..#.OO..OO.....#....O...OO.##...O.....#O..O...O##.O.#O...#
+O...#..O....#.O.O..O#.....O..#.OO#O#OO##O##...O.O.....O...#...O...OOO...O#O...O.#OO.##..O..##O.O#...
+.#O..#O#..#.#........O..O#.......#...O.....O....O...O#..#.#..#...#.....#...#.#.....OO...O.##O.......
+O#........O#...O.O.##...O.OOO.........##..........#O#............O...O.#O.O#.#.#.#.O..#....#........
+.........#.#......##OOO....O.#O....OO..O....O.##....#......O.O........#O..#.O....##.........#.O.#...
+#.#.O..O....OO#......#.O#....#O..OO..O.....O..#.#O#.O.##O....O......#O......OOO....#O.#OO....O.O..##
+OO.O.##O.....O#....O.O#....O..###.O.O...O..#...O..#O....O..#OO...O...##.....O.#OO.....O...#O.O..#..O
+.OOO#...O..#O..O......OOO..O..O...#.O.O#...OO.......O.O.O##...#O..O.......##....O#.OO###.....O...O.O
+.O..O...#O.#....##.O.O.O.#......O.O.#.O#.O###....O...O..#..O#......O.........OO...OOO..#.O.....O....
+.O...##...O#.........O..O.O....O...#..#.....O.#..O.#O..O.#.O....#..O..#....#.#.OOO...O#...#O#.#O..#.
+#.#........O#.#.O.O.#.#.OOO.#.#.#O.#....#O.#.O..#..........#O..O#.##..O#O#.O.OOO..##..O....O.#.OO...
+O..O..O.........#OO.#....#....O..O#O..O#....O..O.O.........O............OOOO..OO#.O#......O..#.#..#.
+#..O.....#........O.....O....O#O##..O.O...##..#O.#.OO..#......#.#..O.......#....O..O.....#..O.....O.
+..O.#.##...O..##O.....#..........O........#.#.#O..O.OO..OO.....O.....O..OO..OOO.#.#.O#.....#.#..O#.#
+.................O...O.#.....#...O#....OO..#O...O....OO.OOO.##..##..O........#O#O..#....#.....#....#
+..#.#..O....##.#O.....#.OOO.O.O....O#..O....OO......O.#.O#...#.#.O...O....#.......#O.O.#O.O.##.##.#O
+..O..O.....#O........#O....#.#.........O.#....O..O.#.O...O#.O.#......O...O..#.......#O....##...##...
+....OO.#......O...O#...#....##.#.O..#.O#.O#..O#....##.O#...O..O.....#.#..#O.#.....##O#.O#..O.O....#.
+#..O..#..........#..O##O....#.#..O#...O..O.##.....OO..#...##O..####....O.......#........O.O....O.O..
+.#.OO#.O.O...#OO.O#.O.#.#....O..#...OO..O.....#O.....#..##...O..###OO..O....#..O#..#O...O..O..#O...#
+#..#OO#..O#.....#O..O.O.O...#.O..OO.O.O#..#....#O..O.OO........##..O......O#...OO#...#.....OO..#.#..
+.#.##.O.O..O.....OOO..OOO..#..OO#...##.O.O.#..#..O.....O#...O.#...O.......O#.#.#O#...O..#...##...O..
+.#..O..#.O.##O..O#.O.O....#.##....#.OO#.....##..OO#.#O.#.#...O#....OOOOO...O#.....##......O.........
+.....###......#O...OO..O#.O.....O.#O.....#O##.#.##..#..#O..OO##..O...OO..O####O....O...O..O.#.O#.#..
+.O#..O.O.O...#O..#..#....###..##...O.OOO.....O.#..O#.O.OO.O..O#...#.O...#.O#.O#.....#.OO..OO#..OO.O.
+#....O#...#.......O........#....O##.O#......O........O#.O...OO...O#.#.O...OO..O............OO...OO.#
+#.##...#O..OO...#.....#.O..O.O....O..O.....#O.OO.O...O.O.OO.##.O......#O.#.#O.#.O....O.OOO...O#O..O.
+..#.#OOO.O...#..O.O#O.O...#.#..........#.O.##.O.##.O....###.#.#...#.O........#...#.O......O..#.OO...
+OOO......##.....#....O......O.....#O#O...O......OOO.O.O....OO##O#.OOO#..O..O.#.#...O....#.O.O..O..##
+.....O.#....#.##O.OOO.O.....O.#O..#O...#....OO.#..#.O..OO.O.##...O#...O.O##.O......O.#..O#O.OOO....O
+#O..#...#..O...O.O.O...#..OOO..O.O..#...#.#..O.O#...O.......OO...O.##O...O#.....O.O....O..O.O.#.#O..
+..O...#...O#......O....OO...#.#..#.O...#...O.O...O.O.......O....O...O..#....O...O.....##..O.#...#.#.
+.#....#O#OO...O....##.#.O.O...O#........##.O.#...OO...O#.....O.......O.O.O##....#..OOO..........#...
+...#..O....O#......O...##O.#.O.O.OO.O.#......##.O..O......O..O.#..O....O.....#O##...#.#O.OO.#O#.###.
+#...#...#O.....#...O###......O#O..O.O.....O....O....#O....O#..#.O..OO###....O...O#......O.#O#....O..
+#.....#OOO##.....O...#.O.##O..##.O......#OO.O..#.........O#.O.#.O....O#OO.O.OO..O##O#.......O.....O.
+.#..#..#O.OOO.#...###.O...#..OO#.OOO#................O...O.O.........O.....#...#O.OO...O...#O.#..O.#
+.O#O..#.#O....O..O.#.....O....#.O#O.O...#.OO..O.#........#...O...O.O....O#O......OOO.O.....O#.#O..O.
+#.#.O#..O...#O..#....O.........O....##...#.#..#.O.#OO...O...O.#...#.....O#..O#.O#.O..OOO.O....O..O..
+O..O.......#O#O.O......O.O....O#OOO.....##O....#.##..#.OOOO....#..O....#...#.O...#O.....#O#O..O..#..
+..#...O.#.O#.O.O#.O....#.#....#.#...O.#O.##..O.#.....O...#...#....O.#..O#..#.#OOO#..OO.#.#O.#..O#..#
+.OO.O..#.#..#.#..#O.O....#O..#O.......#.#.O.#.#.#.##..#.#O.#.O..#.O...O.#..#...O..O......##.......O.
+...O.O..O.O.O.#.O#.O......O.O#.O#....OO......#O.#.O......O.OO.#O....O#........#..#..O.O#.#O#O..#...#
+...#..O....#OO.OO#.OO.#.....OOO.OO##OO#......O....O......#O#.#.O..O....O..O.O..#O...#......#........
+......#.....O#.O..#..O......O##.#.O........##.##...OOOO..#...#.O...#..OO.O.#.#.O.#...#.#OO#O....##..
+.OO....#...O.#....O......#.O....O.....#.O..O.#.O....O.O#OO.O.O.#............#.#O#..##O..O.#..#.O##..
+#.O#..#.#O..OO#O.O##..O...#.#O.....O..O.##....#.#...O.O....O.#...O..O#.#.OO..OOO..O..O.O.#..OO#...#.
+....#.O..OO..O.##.O.#O..O.O.O..#..#.O.O....###O..#OO#....#.........O.###.O...O#.O...O#.#.O#O.O#OO.O.
+O.#......O...OO.#.#.O..#.O............O#.O#O........#..O.#O#.#.#..O.OO..#.OO#.O.#.#O###..##..##.....
+..O#O....O...#....................O#..#.O.#....O.#OOO...O.OOO.#..#..O##.O...O.....O.#.OO.....O..#..#
+#.O....##O..##...#.#.OO...#.......#.#........#####.O.O......##.....#...........O#OO.O..#....O...O#..
+..........#.O.#.#.#OOO.O..O.O.O.#O...#..O#....O..O##.O..#O...OO#O..OOO..OO#O#.O.....O..O##.O...#....
+O###...O#.O......##O#..O#.........OO...O#O#O..#O#O..#O#O.#..#OO.#...##..##..#.#...#O.O....O...O....#
+.#.....O#OO.O#.#.OOO#.#.#.#...O.#..##.##...O.OO.O.....O..##..O.......O..#...O....##OO#..O#.OOO.#.##.
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day14/test1.txt b/solutions/2023/pughmds/inputs/day14/test1.txt
new file mode 100644
index 0000000..b92d1a3
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day14/test1.txt
@@ -0,0 +1,10 @@
+O....#....
+O.OO#....#
+.....##...
+OO.#O....O
+.O.....O#.
+O.#..O.#.#
+..O..#O..O
+.......O..
+#....###..
+#OO..#....
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day14/test2.txt b/solutions/2023/pughmds/inputs/day14/test2.txt
new file mode 100644
index 0000000..93b225c
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day14/test2.txt
@@ -0,0 +1,3 @@
+...OO..##.......O..O....O..O
+...#.#.#.O#...OO.#........O#
+..##..##.O...#..OO.O.#.#O#.O
diff --git a/solutions/2023/pughmds/inputs/day14/test3.txt b/solutions/2023/pughmds/inputs/day14/test3.txt
new file mode 100644
index 0000000..790c8f3
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day14/test3.txt
@@ -0,0 +1,50 @@
+.#.
+.#.
+..#
+...
+.#.
+...
+...
+O..
+.#.
+...
+...
+...
+.O#
+.O.
+#..
+...
+.O.
+.O.
+O..
+OOO
+..#
+#.O
+.OO
+...
+.#.
+O..
+#..
+.#.
+...
+#..
+.#.
+#.O
+.#.
+...
+O#.
+.#.
+..O
+...
+.O.
+.O.
+...
+.#.
+.#.
+...
+..#
+.O#
+O..
+O..
+.#O
+O#.
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day14/test4.txt b/solutions/2023/pughmds/inputs/day14/test4.txt
new file mode 100644
index 0000000..f94a330
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day14/test4.txt
@@ -0,0 +1,6 @@
+......O..
+.#######.
+.#O...O#.
+.#..OO.#.
+.#.....#.
+.O...O...
diff --git a/solutions/2023/pughmds/inputs/day14/test5.txt b/solutions/2023/pughmds/inputs/day14/test5.txt
new file mode 100644
index 0000000..2b8f76d
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day14/test5.txt
@@ -0,0 +1,3 @@
+......
+...#..
+..O.##
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day15/input.txt b/solutions/2023/pughmds/inputs/day15/input.txt
new file mode 100644
index 0000000..291d481
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day15/input.txt
@@ -0,0 +1 @@
+qkm-,qtn-,msc=8,mfhk-,hk=6,tgp=9,grnfm-,gp=5,mm-,rxh=5,fql=3,krzb-,xcs=5,zm=4,gdqg-,sqdr-,bh-,cn-,dvh=5,tgp-,tf-,djg=3,xjkddf=4,jv=1,jlb=3,fsn=2,ktd-,ztn=2,rkxr=7,xfnccr=5,gsd-,lnb=6,djg=7,kz-,rxh=4,xgv-,mcj-,pln=8,td-,lvf-,grnz-,vxtbtr=1,llxv-,cj-,gj-,lmkh-,xcknz-,fq-,xzfrs=2,fzg-,fhx-,vzxxv=8,pz=3,kq-,zjbgh=3,tgp=5,fhx-,jxjtk=6,nck-,fqpqx-,hdvrn=6,fjqj=7,ztr-,vvz=3,cfnj-,jl-,gcbx=1,hxphc-,tnt-,bh=3,bpg-,gpkk=2,mxz-,pz=6,zs-,tq-,fjd-,dgkp=6,zvbn=3,hpg-,nzgqhh=7,df=2,ffnzq-,qjhs=5,mj=9,gsd-,hv-,ztx=7,rcp-,mcj-,knf=7,fbrrk-,ss-,lzsk-,ftcs-,fqzf=9,rdm=8,qjhs=1,vmp-,npb-,xgv=6,gdszll-,qrgx-,pzt=8,hbxq-,shm-,lbqfgn-,vmp-,bm-,jrbd-,tf-,psrt=9,hcgz=8,rjtg=7,tjpn=5,nntz-,tt-,bl-,gpn-,szs=2,jcj=3,mlj-,pm=1,jqb-,jmfc=9,jlh-,gj=4,svk-,hn=4,stx-,kkr=5,hdvrn=8,nzg-,mj=5,nmm-,psrt-,mvf-,gdqg-,kq-,sph=1,mlb=6,nl-,ldv=9,qnvr=2,ld-,dn-,pkgb-,fj-,mf=2,mxz-,ftxnm-,lgk-,lzcvmq=2,nnj-,shm=4,tgzfd-,qxl-,mxz-,vmp-,kph=7,snr=8,dj-,bpt=5,sgzn=8,kzcrx-,dgb-,pln=2,jxz=8,ldv=8,pm=9,gvk=7,phqp=1,xfc-,fql-,df=7,cndm-,qxl=3,jdp-,xjl=9,qbbb-,xcknz-,lgk=4,dpl-,zvbn-,tvzdr-,rf=6,jxz-,qnvr-,nn=4,dgkp-,pp-,sn=8,fqpqx=6,nrlr-,cmdv=2,vvz-,zjbgh=9,ng=6,nzgqhh=2,kl-,srm=8,jff-,ms=4,mtzvc=3,bfg-,mxz-,cnpzj=6,zmql=5,dfc=8,xjk-,vb=4,gb-,nthdl=9,kpn=7,vqt=3,mtzvc-,fbrrk=8,hbfp-,bqf=4,vf=1,gvz=4,gd=4,kgj-,hpr=6,cx-,hv-,pkgb=1,nntz=7,lh-,tjkfxg=8,jcj=6,jnd-,ds-,cnmr=2,shqtb-,bm=7,kbt=8,rkqqlz-,rlsd=2,xg=9,qlbr-,xkb-,dmpm-,hhm-,hmxgqd-,fnf-,cxph-,ck-,fhmjh-,nzgqhh=2,gvz-,cnpzj-,vqt=7,vqp-,qbbb=3,fnrjl-,fzg=1,gth=2,fn=6,cvk=1,lzcvmq=1,kz-,vgnn=4,nf=8,cxph-,hxphc=8,npb-,dgq=2,kjv-,nl=1,xjk-,dfx-,kgj-,cgppx=1,bnc-,fnrjl=5,kcgn=6,mdxkng-,jmfc=8,jpzs=9,zp=3,kfcrmh=3,dgm=8,npnvn=6,tgzfd=7,cndm-,chs-,mvf=4,jq-,ccvbl-,hrq=9,mhm=7,sg-,dp=4,fbkd=8,rtfh=2,ktdg-,fcszl-,zdrx=7,zdz=1,npnvn-,tpclf-,kzcrx=1,mp=2,qrgx=4,mn-,gb=5,dv=2,dg-,qgzq-,nl-,xssjj-,kc=2,jhn-,tdkcl-,krzb=3,zvbn=8,hgvbj=3,dv-,tdkcl-,jtmj=9,mn=3,fbkd-,pqhx-,fqpqx=5,jc-,xhd=2,gvk=5,hr-,bpg-,xzfrs=3,qjrk=9,rdm=5,kfzf-,jp=3,hrsx=1,dfmj-,zr=9,pvc=3,ztn=2,kl=5,mhm-,fjqj=3,gp=7,zst-,fjqj=4,rzx=8,ss-,rc=3,zrgctc=3,nt=2,bjt=8,zkx-,chph-,bqf-,rjk=3,rvz-,dgm=6,qhd-,qhd-,zkx=3,tvzdr=9,fjqj-,bbs=6,fj-,shm-,qhd=6,ss=9,qb=3,zr=6,lxj-,kzhq-,nlmh-,dx=3,nz-,zp-,lq-,brj-,hgvbj=5,pkgb=7,svk=6,jqbbht-,dmpm=6,zdrp=1,ktd=8,lnb=6,qgzq-,cz=7,sp=6,mggbm=9,pktd=4,mp-,nmm=1,pz-,bkt-,cgppx=3,bh-,rf-,zrgctc=1,dx=3,kjv-,dp-,brj=4,dl-,pqz=2,bpg=9,lzsk-,lnz=8,vb=5,df=9,bc=7,xd-,qlbr-,prj=5,ztx-,sjkg-,zh-,mgclg-,jqbbht=1,jx=2,pxc-,tdkcl=8,dxb=6,hb=2,pkgb-,jmp=9,fgd=8,mmz-,jlh-,ck=3,pxc-,xmhxk-,lh-,xcknz=4,pzs=4,mbtcm-,jtmj-,jn=3,jn=6,jfsn-,fmf-,npb-,hrq-,ndfr=3,lm=2,chph=6,dfx=9,sptllc-,cxph-,nq=1,svk-,jpzs-,qhd=9,rzx=3,rc-,pxc=6,tvzdr-,jpzs=1,hdb-,tnm=1,rlsd-,ktdg-,vxtbtr=3,bkt=8,nr-,dk-,cp-,jv-,pjbt=1,kjv=8,tkt-,cdvqnr-,xjl=9,lgk=7,vzxxv=3,dn=4,zdrp=9,dh-,jpn=1,dk=3,sn-,qt-,jpn-,gd-,lnz-,vjt-,xhd=4,lq-,svk=6,fvf=3,bmxnh=9,bkt=9,dch-,vm-,dxsch=3,jtd-,cnpzj=3,ktdg=1,mdxkng=2,jlb-,mv=2,dfc-,xcs-,sp=2,vc=5,ndfr=9,lzsk=5,kq-,svkh=1,cfnj=2,bl-,qbbb-,cfm=6,rzx=8,lkmqbg=5,jcd=1,nzg-,xdh=1,sjkg-,tf=2,vx=8,stx=8,zn=4,zs=1,dfc=6,sp-,gsd=6,jd=7,zkcfgm-,lkmqbg-,qzpdbt=3,bh-,fbrrk=5,kfzf-,vx-,ld-,pjbt=1,mcj-,jfsn-,qz-,vlqj=1,zjbgh=5,mbtcm=7,qf-,tjkfxg-,mkxx=6,fqzf-,jpn-,gt=9,tv=5,ccvbl=9,kl=8,vjp-,dkjc-,dgq-,jfsn-,zdrx=8,djg-,jhb=5,dj-,mgclg-,mtsr-,sgzn-,kdj=6,ftcs-,nl-,nrlr=7,mt-,svk=9,fjqj-,qrgx-,kdgb-,vjp=6,lh-,mgclg=7,xvn-,jz-,hbxq=8,lgn-,kdm=7,tv=1,nn-,cdvqnr=1,gcbx=5,zp-,dn=3,srqc-,tf=7,gcbcp=4,gth=8,zrgctc-,prj-,fjd=9,jn=1,vm-,ldl=9,lzcvmq=4,cpv=4,ndh-,pvc=5,cxph=1,grnz-,bl=8,rzx-,rqx-,xz-,pzs=9,nzg-,qz-,xkb=4,bkd-,xzfrs-,rc-,ftcs=7,tfpj=2,jslrh=9,svq=5,svq=8,bt-,sph=7,cfnj-,zfgsk=9,mv=2,lh-,zvbn=6,mfhk-,cfm-,dfx-,mvf-,fqpqx=2,cdvqnr=6,gxn=3,gsd=1,pqhx-,lc=3,tq-,xxpn=4,nkv-,nf=8,bq=9,kgj=5,hjbdrs=9,llxv=2,fsn=1,xcs=1,rf-,srqc=3,lcpg-,dz=9,chph-,rrt-,bqf-,nmm-,tnt-,mn=1,hnr-,zdz=8,hdb-,mtrlfr-,tk-,npnvn-,kbc-,fnf=9,vqp-,dkxzp=5,kgl-,xgv=6,qbp=1,gb-,xkvrx-,fqzf-,mtsr=5,zdz=7,tkt-,zf=1,jq-,jk=1,fvv=5,gvk-,mtsr-,gb-,kcgn-,lgz=3,sq=2,tvzdr=6,zf=4,jqbbht-,fmf=5,jn-,dch-,zrjn-,ktd-,vqp=6,cpv=7,ftcs-,pzs=5,tnt-,tptsg-,bfg-,lcpg-,ccvbl-,pz-,tt=8,cz-,zf-,zf=3,zs-,jlb-,dzdn=3,rjk-,gj-,jqb=3,vvz-,lkmqbg-,qnvr-,fjqj=4,xg=6,nmm=3,bvg=8,vvq=2,pqz-,sg=8,svk=2,jg=1,zxt-,zf-,vqpf-,jk=7,qnvr-,krzb-,vmp-,zvbn-,cgppx-,zp=8,jdp-,nnj-,vbps=6,cn=9,jmp=2,qbbb-,nntz-,vg-,pl=4,kbc-,zdz=2,sjb-,jmp=2,xsf-,srt=7,jcj-,vqpf-,lzcvmq=6,hrq-,mvf=4,hrq-,pz=2,vqp=1,lgx=3,mgclg=6,xmhxk=9,jrbd-,xd=3,fqzf=5,hxphc-,cvk-,kbt=9,tdkcl-,qbp-,gsd=6,dn=2,gvk=4,mgg-,vjt=4,hqg=6,vlc-,vvz=6,hqg-,hzc-,mr=6,hdb-,gb=5,fvv-,cnpzj=2,dj-,gvz=1,dd=5,fdhtxv=1,dn=1,hpg=7,svkh=2,kdj-,jqb-,rvz-,rxh-,kq=2,kgj=5,bl-,jd-,cx-,lbqfgn=6,zkcfgm=1,jh-,kph=2,hnmv-,qbbb=8,fdz=7,hqg=8,pghc-,jf-,dp=9,hdzr-,pl-,jp-,mt-,fnrjl=9,mdxkng-,ds-,kcgn=5,hqg-,sk=7,qz-,mtzvc-,rxh-,tkt-,hzc-,zfgsk-,sptllc-,nntz-,lh=7,fgd=3,vxtbtr=4,dg-,bk-,tgp=2,xmhxk-,mmcf=1,grnz=4,rkxr-,shqtb=7,lkh-,hnr=8,jt=8,tvzdr-,qz-,ckx=8,jhb=2,mzx-,ccvbl-,fsn=5,gxn=5,phqp-,kggkk=3,lq-,rvz-,fsn-,vvq=2,hlls=2,vqt=1,vmp-,vjp-,lmkh=6,snr-,dgb=1,vjt=9,nt=9,fgd=6,grnz-,zh-,hdb-,ndh=3,pzs=1,ttmj=2,zp-,rvz=3,jf-,jlh=5,kc=8,cx-,fcszl=2,vb-,kkr-,jtmj-,mtsr=7,lc-,kdgb=8,nz=8,hsl=7,lxj=3,dc=7,nntz-,ld=8,zjbgh=8,dzdn=4,vxtbtr-,jpzs-,hpbm-,qzpdbt=5,ktdg-,cd=2,fq-,qqvps=3,rj-,nzgqhh-,gzt-,gt=2,hk=4,xzq=6,mdxkng=4,hrsx=2,knf-,mbtcm-,dkxzp-,qsbgs=6,pj-,jxft=3,xd-,srt-,rxh=2,bq-,qtn-,tst=6,vxtbtr=2,jh=1,cxph=7,rdm-,stx=1,ttmj-,lgx=6,zn=3,rzx=6,ztr-,hv=4,zn-,npb-,qt=6,vjt-,ck=2,fdz=6,kfcrmh-,xsf-,lgz=7,lgk=2,zvp=1,qt-,dk=7,tjkfxg=3,sp=8,hn=2,nnj-,mn=7,dbd-,mp-,ztn=1,vb=1,rvz=3,bqf=8,sjgnj=2,qt=6,mggbm=1,nz-,vqp=1,tgp=5,jq=4,zr-,pqhx=5,ffg-,xdh-,ktdg=4,dfx-,pl=6,chph-,kdh=4,xkb-,lkmqbg-,qdv-,kgzj-,kfzf-,dxb-,kc-,cf-,zp=5,lq-,rvz-,dfx=9,bjt=9,mm=5,mt-,rj-,llx-,kzcrx-,fcszl-,zst-,rht=6,mq-,xjl-,dvh=4,zp-,jrbd=6,rj=3,rm=9,svk-,pl=3,qz=7,tjpn-,gth-,ng-,zb-,dfx=9,ftxnm=1,xzfrs-,kbt-,lcpg-,dgq=1,ndfr-,jrbd-,mhm=9,qs-,xcs-,vx-,pc=9,hhm=8,kk=8,psrt-,cps=4,zrgctc-,xz=6,vx-,tpclf-,lgz=8,rhz-,nmm-,tnm=8,zrgctc-,gt-,lm=3,cpv=5,ng=8,chs=6,dd-,hnmv-,cfn-,stx=4,vqp-,kgl-,ffnzq=1,svk-,kbg=9,qtn=4,tng-,kzhq-,dh-,ftcs=3,phqp=4,rqx=8,mtsr=5,qjrk-,sjf=7,qjhs-,vvq-,vvq=5,ftvjzf=6,ds=1,tdpr=5,hqg-,gcbcp=5,mmz-,dp=2,bq=8,dd-,vjt-,nr-,kr=7,pjbt-,ndfr=1,qkm-,vg=7,rdm=5,fql=1,hk=2,jt-,kfcrmh-,npb-,qnvr-,xlghf-,psf-,fsn=2,zrgctc-,zjbgh-,qhd-,rm-,nkv-,zvbn-,fvf-,dz=7,fcszl=8,qxl=5,kjv=7,dn=2,qbbb=4,dgq=6,tk=9,zkx=9,pc-,qs=8,fbrrk-,jqq-,ffnzq-,dj-,nt=3,pc-,kbt-,fnrjl-,xjk=1,mggbm-,hbxq-,kdm=2,vjp=3,hv-,rcp=6,srqc-,kgzj-,chph=5,dzdn-,xsf=2,ffg-,hgvbj-,ljf=7,xvn=6,vqp=8,xcs=4,tvzdr=4,lc-,tv-,qsbgs=6,dkxzp=8,hnmv=6,lbqfgn-,mp-,kzcrx-,xxpn-,fsn=1,ftcs-,mggbm=2,nq-,ftcs=1,hjbdrs-,hqg=1,ctx=4,vmp-,bvg=1,bq-,gd-,kdj-,lm-,ld=5,jxft=9,sjgnj-,gpn-,rks-,hgvbj=6,qs-,qbbb=1,dgq=7,nmm-,rxh=2,bjqbx=3,nz=3,xjkddf=7,fjqj=5,dpl=9,kbt=5,fbkd=9,kz=6,fjd=6,fvf=7,mvf=9,dkxzp=1,hpbm=2,qbbb-,dv=5,lnb=2,pghc=8,dz=7,pjbt=2,ztn-,rc=8,vbps=9,hv=2,fqpqx=5,jn-,jn=5,ztr-,jhn-,qrgx=4,cnpzj-,rkxr=8,zdrx-,gp-,bbs-,fbrrk=8,lnb-,dp=8,mcj-,mr=6,xfsd=6,ndfr-,pghc=4,hb-,ccvbl=5,qs-,qb=2,zf=9,rvz=4,cdrk=8,dn-,cps-,lh-,rc-,hk=8,qbx=2,dfmj-,jrbd-,lq=8,kkr-,fm-,mgg=8,lfk-,qlbr-,nck=2,kgzj-,zr=7,zr=5,knf=4,gvk-,rtfh=1,hnmv-,zrgctc=2,chs-,zmql=8,dpl=8,tnt=5,rhz-,lkh=4,qtn-,hpr-,dk=9,jg=6,dx=5,kgl-,xfsd-,cv=5,hhm=4,nntz-,kc=2,mhm=2,kk-,cgppx=5,dh-,rf-,kzcrx-,krzb-,rlsd-,jnd-,tdpr-,vqpf-,xfsd-,mgg=5,tq-,jxft-,xjkddf=5,kpn=1,ztn-,bjt-,rtfh=2,xvn=9,qbbb-,pc=9,dn-,lq=6,zdrp=7,jrbd=2,hv=1,ms-,hnmv=4,hcgz=7,kdm=1,pvc=8,lgk=8,svk=4,cfn-,tvzdr-,mr-,zrgctc=5,vb=7,nz-,sjkg=8,ljf-,rqx-,lvf=5,pk-,ttmj=4,hsl-,hzc=3,tf=3,hzc=9,msc-,gt-,rf=4,jfsn=4,lgx=2,msc-,djg-,ldv=3,sjgnj=4,qtn=4,bjqbx=3,dk=9,nt=7,kgl-,xvpqh=4,dgb=7,vlc=7,nkv=9,pc=6,lgz=9,fx-,xssjj=9,sn-,chph=4,zf-,fsn=9,kkr-,cf=7,kbc=3,gdszll=8,kfzf-,jpn=1,dv-,pg-,jpzs-,vvz-,nzgqhh-,mgg-,vvq-,srt-,fx=4,zjbgh-,xlghf=5,fql=8,cmdv=3,mmcf=7,cps-,jhb=1,hrq=2,brj-,hlls=3,prj=5,jq=9,fm-,kh=5,lbqfgn=2,npb-,kfr=2,npb=7,qkm=7,jdp-,mt-,djg=6,fdhtxv=4,vx-,tf-,mmcf=2,mtzvc=7,zmql-,jqbbht=7,xkb-,ttmj=1,gzt=2,ktdg=7,bpt-,kzhq=5,zs=2,nntz-,qbp-,qrgx-,kfr-,lgk-,nf=2,srm=6,tc-,kgj=7,kc=5,bx-,pghc-,nck-,hhfxj-,pm-,fq-,dp=7,fvv-,ndfr-,hlls-,jtd-,dk-,mhm-,dgkp-,gvz=5,hpbm-,mgg=2,rqx=4,rdm-,sph=4,bbsd-,fvv-,qqvps=9,pk=5,gp-,mlj-,lm=3,jxft-,lc=3,dbd=9,jtd=9,qs-,dg-,bx=8,qt-,lmkh=8,ttmj=5,jf-,qlbr-,cf=8,hbfp-,rtfh=8,djg=4,llxv=1,shm-,gxn-,ds=8,vb=3,jqb=3,ttmj=6,stx=2,hrq=8,tpclf-,phqp-,ftxnm=3,vc=1,sk=2,psrt-,tng=8,nnj-,mgg=6,gb-,kjv-,cj-,lfk=1,lgz-,qnvr-,ccvbl=8,shqtb-,gp=4,pqz=5,mtzvc=9,fhmjh=1,fhx=6,pl-,chph=5,df-,qs=8,bkd=3,bc-,zmql-,mp=7,fdz-,hdzr-,mcj=9,xjk-,qxl=8,zvbn=5,gdqg-,hhfxj=9,cj=3,rkxr-,xjl=5,dfc-,tjkfxg=5,ffh-,mlj=1,mv-,vqpf=8,cps=4,ccvbl-,hrq=2,pvg=5,nck=4,cndm=4,jqq=3,pln-,cf=8,bjt=9,fhmjh-,vq=8,pl-,zst=9,qbp=7,cv-,mcj-,mp=7,zn=9,npnvn=8,ftxnm=4,hk-,fhmjh-,jlb=1,mbtcm=3,bh-,mv-,rkqqlz=2,sjf-,jhn-,hb=6,npnvn=5,qsbgs=9,xmhxk=7,cz=6,mhm=5,gpkk=6,jjt-,nzg-,srm-,bvg=1,kr=5,kph-,vzxxv=2,kq=3,mlb-,sn=4,grnfm=7,dkjc=6,bm=9,jcd=4,fsn=4,cnpzj-,kjbn=2,kgzj-,jjt=9,jf=6,ldv=3,fvv-,kgj=5,df-,zkcfgm-,kfcrmh-,prj=9,sp-,xg-,qjhs=2,bpg-,xdh-,gvz=9,lkh=4,bbsd-,sjf=2,cnmr=5,phqp-,kph=7,kfzf=7,fjqj=2,psrt=4,mxz=7,kdh=1,qkm=8,mmz=6,tdpr=6,lfx=1,fvv-,qjrk=3,zvp=4,jhb=8,kc-,tq-,kgj-,dfc-,kk-,bbsd=6,nzg=7,jqq-,nzgqhh=1,dgq-,bh-,lgk-,lvf=6,zfgsk=8,xxpn-,rxh=4,jpzs=1,gth=4,dz=9,dg-,hpbm=9,pzt-,jfsn=5,qb-,hrsx-,fql=2,mmcf-,ckx=2,fbrrk=7,bjqbx-,pktd=4,xcknz-,gxn=3,qjrk=3,hr=2,jdp-,mcj-,hdzr=6,hbfp=8,cfn=3,brj-,kk-,pghc=1,qn-,dn-,dxsch=8,sqdr=2,lbqfgn-,cdvqnr-,sdvhbf=9,gq=9,dk-,zt=4,bm-,mp-,sptllc=1,nthdl=9,hzc-,cp-,ng-,dxb=8,lfk=3,zgnd-,dz=7,jz-,gvk-,dkxzp=3,zc-,pxc=8,kdm-,nrlr=5,rkqqlz=4,ldl-,gb=2,ftcs=8,jv=4,mlb-,mkxx=3,sjgnj=2,tt-,sgzn-,rvz=6,kk=2,td=4,tst=6,zgnd-,dbd=5,mt=8,vqp-,ldl-,ftcs=1,kph-,vc=1,rc=2,kzhq=6,jlh=4,zc=4,stx-,dl=2,cpm=7,jfj=7,mq=9,jxjtk=2,dmpm-,fhx=2,jxjtk-,cfnj-,svq-,hdvrn-,pxc-,rxh=1,qbx-,qs=8,jk=5,hv=7,bnc=8,bfg=2,cnpzj-,dk-,hjbdrs-,vf=2,jlh=3,szs-,mgg=8,djg=7,qtn=4,brj-,dch=6,jg=7,jxjtk=4,jtmj-,cdvqnr=1,gdqg-,vbps-,kfr-,dkxzp=8,zxt=3,nl-,mkxx=7,jg-,kr-,ktd=7,lxj-,gvz-,qdv-,sgzn=7,dd-,fmf-,gsd-,zrjn-,rht=4,lgk-,nlmh=6,lvf=4,bmxnh-,mxz=2,kfzf=6,zvbn-,hpbm-,ktd=5,kh-,qjrk=4,qg=1,hcgz=3,jjt=3,dgm-,zfgsk-,kc-,dmpm=4,bk=7,tv-,zb-,fhmjh=6,jqb=9,mfhk-,ckx=2,mn=8,sn-,bkd-,jqb-,llxv=7,rj=7,hbfp=1,chs=7,dch-,xfnccr-,hqg=7,llx=1,pjbt-,dn-,nl=6,ccvbl=9,bx=3,ng=8,fjqj-,ldl-,pxc-,jmfc-,hcgz-,lzsk-,jq=4,mgg=3,jqq-,bbsd-,bjt=5,nzgqhh=5,kbc-,ccvbl-,jqb-,lh-,vvq-,zvp=7,vvz=9,vmp=3,lnb=4,hv=5,gx-,cj=4,tq-,ckx=8,pvc-,fjqj=1,sq=3,fcszl=7,tv-,cj=3,dg-,xhd-,jlb=2,bjt=4,gb-,hlls=5,mbtcm=2,hpbm-,sg-,rdm-,srt-,pln=6,pzt-,zt-,bpt-,rdpc-,mxz-,ldv-,rks=5,vzxxv=1,qb=8,gj=2,td-,kpn-,gxn-,jrbd-,cdvqnr=5,fqpqx=3,sn-,gt-,zjbgh=3,vlc-,xg-,lq=9,xfc-,dkxzp-,grnz-,jcd=5,lfk-,dbd=9,bk=7,gpn-,fsn=9,zxt=8,vxtbtr-,mm-,xgv=8,rxh-,ss=7,bx=6,fm=2,dx=3,cgppx-,prj=6,cxph-,ztx=2,lgz=4,rtfh=6,ztx=5,cd-,xcs=1,qz-,jtmj=4,tnt-,sjf-,jk-,fvf=4,cmdv-,pkjs=6,jxz=6,xzfrs-,cvk-,mxz=9,cfm-,mmz=3,cn=2,jt=4,xkb=3,ccvbl-,pqz=7,lq=1,svk-,vjp-,mtzvc=1,rzx-,xjkddf-,bpt=7,tnt=1,qqvps=3,qnvr-,kpn=2,jl-,dh-,vqt-,ztn=2,pqhx=5,kq-,kgj-,kfr-,pvc=7,bpt-,cnpzj=6,cv=2,rqx=7,fhx=8,jf-,dzxmm=2,zb=2,vf-,zp=1,cnpzj-,jqb=4,rdm=7,cfnj-,cps-,fgd-,mdxkng=6,jqb=8,qgzq-,qsbgs-,tnt-,rrt-,lcf-,npnvn=6,rdm=5,cpm-,lbqfgn-,lbqfgn=7,xcs=9,dn-,qgzq=7,jtd=4,cp-,zbdb-,fdhtxv=7,zvp=3,vn-,qf=7,kk=4,jhn-,qz=9,jk-,rvz=1,cx=2,hzc=4,dl-,zbdb-,gth-,ffg-,zdz=8,zb-,szs-,pl=1,bkt=1,dkjc-,prj-,vx=9,xd-,ndtm-,mzx-,xfnccr=1,npb-,pvc=3,tgp-,fdz-,cfn=8,zkx=9,jxjtk-,vf-,gt-,gp-,mgg-,gcbcp-,zjbgh=5,kgq=2,gx=7,gt-,ccvbl-,kbg-,zxt=1,zdz-,nck=8,nzg-,vzxxv=4,qtn-,qjhs=5,gpn-,nzgqhh=5,jp=5,hnr-,zmql-,gdszll-,psrt-,nthdl-,dgb-,gth-,fbkd=1,pqz-,vn=1,kdgb-,gzt=6,lzcvmq-,jhn-,tv-,jxz=7,nthdl=2,tk=2,gvz=9,cz-,qtn=4,dd-,pghc-,kzhq-,jx=3,bbs-,sn=5,fsn=6,jrbd-,fnf=1,hsl=6,mtrlfr-,kgzj=3,zrgctc=4,vqt=3,zvp-,kfzf-,fvf=9,hnr-,cfm=5,ctx=7,kgj=6,hqg-,tpclf-,tng=9,tjpn=6,svq-,tt-,gp=7,jslrh=5,qqvps-,hhfxj=3,lgx=6,cgppx=1,mznq-,ckx=3,ndtm=1,qqvps-,xdh=2,dk=3,cdvqnr=6,rhz-,bjt-,rkxr=9,zp-,kzcrx=3,ldv=6,gd-,lbqfgn=3,xssjj-,bx-,jl=5,zvp=5,ctx=9,fdhtxv-,hr-,gxn=1,zgnd=1,ffg-,zgnd=5,zdrp-,hpg-,pkjs=8,nck=1,hpr-,fdz-,rjk=8,qsbgs-,mkxx-,sjkg=8,mm=2,rjk-,kz-,sph-,dvh-,ck=4,jp=2,mtsr-,gp=6,qb-,jmp-,sjf=2,cxph-,kc-,bkd-,hbxq-,jpzs-,fbkd-,dfmj-,vqpf=5,df-,xxpn=2,vb-,rcp-,kgj=7,qt-,xz=1,fzg-,jdp=3,tdpr=1,tpclf-,qkm-,vx-,qbx-,bpt=8,sjb=9,srqc=1,bnc=3,dch-,xlghf-,jfsn=6,snr=5,kh-,srt-,ndfr-,qjhs=7,dqh=7,sjf-,lgz-,hdb-,jxft=9,mv=9,mbtcm-,gb=6,jd-,xcknz-,xvpqh-,shm=9,fql=9,mtzvc-,jc-,vmp=1,gxn-,ndfr-,fbrrk=1,hlls=4,xk-,krzb-,hrq-,kzhq=6,lmkh=6,ffnzq=2,bpg-,zjd-,hjbdrs=9,vf-,mj-,rkqqlz-,gd=2,ztn=4,lzsk-,zf-,vjp=2,zdrp-,ftcs-,kdm-,djg=4,lvf-,bqf=7,tng-,jslrh-,qf-,qnvr=1,cpm=4,ftxnm-,mcj-,pz-,psf=8,kfzf=8,mr=3,dfx=6,sp=2,hsl=4,rzx-,rzx=2,kjbn-,hgvbj-,zvp-,fx=1,zbdb-,jmp=9,qhd-,bm=2,xcknz=7,xssjj-,mm=5,pg=4,gpn=9,pk-,zgnd=2,jxz-,kgq=3,tc=9,xfc-,mggbm=3,sjkg-,xhd-,mvf=6,mggbm=9,bm-,kq=9,gdqg-,mq-,hdzr-,tst=6,lkmqbg=6,pj=2,pln-,xhd=6,gb-,hpr-,ckx=4,nt=3,kzhq-,lgz=9,cxph-,tnm=4,kjv-,zbdb-,xhd-,mzx=3,tgp-,nq=3,cdrk-,ldv-,cpm=1,dj-,mlj-,sgzn-,lzsk-,sjkg=2,vc-,xdh-,pjbt=1,vb=1,fvv-,tt-,xzq=7,pkgb=9,xcs=1,bqf=3,stx=3,srt-,ktd=3,lzsk-,qt-,npb-,rzx-,lmkh=2,fzg-,dkjc=6,kjv=6,jfj=1,vx-,chs-,zkcfgm=8,jlh-,jlh-,dch-,fj-,vg-,lgz=1,jl=2,nl-,kfr=2,dh-,zkx=5,lkmqbg-,tpclf-,hqg-,kfzf=2,qbp=8,gdqg-,pqz=6,fbrrk-,fn=9,dkjc=7,fzg-,bc-,xdh-,stx-,kjv-,hlls=5,lfx-,dgb=4,pjbt-,mtzvc=2,xd-,dxsch-,hb-,rj-,cz-,cgppx=9,svq-,zkx=9,hhfxj=8,ldv-,pqz-,ccvbl-,tt=2,zt=9,ffnzq=9,hnr-,nq-,mxz-,srqc=6,gcbx=7,tdpr-,qbbb=5,hbfp-,tfpj-,jl-,zdrx=8,bkt=6,zrgctc-,lnb-,xhd-,grnz=8,sq=8,fhmjh-,ldl=4,xk=5,zgnd-,qkm-,gvk-,sq-,xlghf=1,jmp=1,qgzq=7,bvg=8,sq-,jtmj-,xfsd-,bvg=8,dk=3,dz-,jqb-,vbps=2,dfc=2,qxl=2,jmfc-,dp=6,hmxgqd=4,mznq-,kq=5,xkvrx=9,jlb=2,jc=7,nzg=1,jl-,bnc=3,lzsk=1,hpbm-,hb-,qbbb=6,qbx=5,xmhxk=3,vlqj=7,cv-,qs=1,mt=3,cmdv-,zdrp=4,sg-,qlbr-,kc=9,prj-,fn=1,kk-,rjk-,zrgctc-,ktdg=3,fdz=5,cz=7,hmxgqd-,vg=9,mmcf-,xkvrx=5,brj=8,sp-,sptllc=8,tc=1,fdhtxv=3,qlbr=1,fgd-,bmxnh-,vgnn-,nq-,ftvjzf=7,jqb-,qkm=2,mlb-,srt-,dxb-,dkjc-,jx=1,gt=6,hcgz=1,dkjc=6,jk-,kgl-,jg=3,dx-,szs=7,tjkfxg=9,tdkcl-,vf-,fmf=2,srt=8,xfc=9,lgx=4,zb=9,kdj=3,hhfxj=2,kgl-,rqx-,rzx=6,ztn-,mfhk=6,kbt-,zjbgh-,xsf-,vqp=9,cnpzj-,qrgx=5,fvv=6,sg-,mcj-,jdp-,cnmr-,gdszll=5,tv-,jq=9,dkjc=4,tnt-,vvz-,rc=4,mmcf=2,gq=2,zm=1,lq=9,fvf-,vjp=7,zjbgh-,jhn=9,bq-,xfnccr-,kl-,vjp=3,dx-,mgclg-,tng-,mq-,zvbn=4,jhb-,mt-,ffnzq-,ztn-,ljf=4,qt-,nmm-,kbt-,nmm=5,jp-,xxpn=3,kgzj-,cps=9,gcbx=7,zm=2,hv=8,lm=7,hrq-,gt-,cp=8,dv-,fmf-,dbd=6,mgclg-,kbc=7,ck-,rrt=2,sjb-,krzb=2,srqc=7,bpg=5,vxtbtr=6,mtzvc-,xd=3,dj-,xkvrx=1,qgzq=6,kh-,kbc=7,pvc-,cxph=3,fj-,qg-,zgnd-,vqt-,bkt=9,dc=9,rks-,tc=7,lzsk=2,srm=1,ffg-,fqzf=3,zkcfgm-,fmf-,gcbcp=7,nmm=2,zh=8,mmcf=9,kggkk-,sgzn=9,rht=5,jcd-,npb=7,bkt-,mlj-,vn-,ms=5,ktd=2,qjhs=1,nl=6,fnrjl=4,gx=5,cd-,mdxkng-,qsbgs-,chph=5,rht-,ffh=5,fhmjh-,cfn-,jqq-,pm-,pp=7,kr=7,pvc-,bc=7,fhx=3,tv-,tgp=9,qb=3,xfnccr-,lzsk-,hrsx-,tf-,fqzf=7,bjqbx-,dgkp=8,bm-,mr=7,zkx-,qbp=8,dl-,gd=2,pkgb-,kgj-,bc-,rqx=8,xzfrs=9,stx=8,zdrx-,fmf=8,qjrk-,mlb-,cpm-,dch=5,rht-,xfsd=7,jxjtk-,zc=2,cfn=6,cv=6,jjt=1,kr=3,pghc=5,kfcrmh-,jhn=3,xkvrx-,gt=3,bvg=7,pvg-,jpn=7,bbs=8,rvz=4,lnz=9,mkxx-,jfsn=2,qdv=6,qjrk=1,zvbn-,fm=3,tk=9,stx=5,qg=6,rzx=4,vjp=8,xcs=5,fx=7,bmxnh-,mfhk-,dk=3,mmz=4,jc=6,szs=3,hbxq-,vjt-,tnm-,cndm-,lgk=2,qbbb=3,hpg=5,rvz-,nzgqhh=5,lnb=3,xgv-,gcbx=7,ffg=5,fbrrk-,zm=5,xkvrx=4,chs-,dzdn=7,tt=8,snr=1,cmdv-,lbqfgn=3,jc=8,kzcrx=6,ms-,vvq=7,gt-,jlb=7,bnc=1,dl=3,ttmj-,ld-,kgl=1,tc-,gpkk-,kbg-,qbx=9,bnc=2,ndh=7,lgn-,cndm-,rhz=2,pln-,kdm-,qzpdbt-,qbx-,sn-,qbp-,dqh-,lkh=4,kdgb=1,mmcf-,qbbb=9,gxn=2,kr=7,fhmjh=2,xssjj-,jlb=6,mv-,lvf-,dfmj=9,tdpr-,gsd=3,nz=7,qpfx=9,fqzf=8,vgnn-,hpg-,cdvqnr=5,kc-,nq=4,mxz-,hr-,zs-,jxjtk-,tf-,zr-,bx-,bt-,jz-,pxc-,bh-,jhb=5,cd-,zjd-,lnb-,jh-,sjf=3,pkjs=4,xdh=9,xz-,cj=1,rhz=7,lxj=2,kbg=8,qjhs-,hmxgqd=6,bjt=9,qzpdbt=4,sptllc=9,nmm=8,sptllc=6,mgg=8,gpn=1,xd-,hqg=3,vqp=8,sn=7,fzg=4,zp=8,rkqqlz=3,ss=9,mbtcm=4,kzhq-,kfzf-,rzx-,lbqfgn=2,xfsd=2,kgl-,qnvr=4,kdgb-,bl=1,hb-,bb-,bjqbx=6,kk-,nthdl=6,jfj=1,vvq-,fhx=4,jcj-,cx=2,bmxnh=8,hcgz=9,ndfr-,hn-,hz-,gdqg-,cpv-,hrq=9,mj-,jd-,jc=8,fmf-,xzq=6,fql-,jmp=8,jrbd-,nthdl=8,bjqbx-,qkm-,td=8,hv=6,brj-,qsbgs-,dfmj-,dfx-,vqt=2,cfm-,fnrjl-,nmm-,zbdb=6,cj-,gcbcp-,fj-,qnvr=4,fx-,bm=5,tjpn-,jxz-,hv=1,kgl=7,fj-,vc=9,jh=3,bpg-,tfpj=2,svq=2,zdz=4,fmf-,jlb=5,gb=7,hpg-,kk-,cps-,rcp-,mgclg=4,zxt-,qhd=8,qsbgs-,dx-,tng=5,qn-,jpn=9,zh-,pzs-,kgl-,fj-,ktdg-,gj=6,hdzr=2,qxl-,jxjtk-,nr-,fqpqx-,mj-,nkv-,kjv=9,jl=6,sjb-,dzxmm=6,fnf=1,vq=2,krzb-,cv=1,xfnccr-,snr-,svkh-,jrbd=4,xssjj-,nr-,qb-,hdb-,tnt-,cpv=8,fvv-,ztx=4,dmpm-,hsl-,cnmr=9,jmfc=3,qqvps=4,sk-,ckx=5,dgb-,hk=8,nq-,rdm-,ljf-,qzpdbt-,lm-,lnb=3,ftcs=4,bb-,cmdv=7,lxj=4,dg-,kq=1,qhd-,zst=3,tdkcl-,qkm=3,tt-,pln-,lfx=3,vmp=6,fqpqx-,rqx=7,pkgb=6,rhz-,rc=1,xk-,nthdl=7,lcpg-,lkmqbg=9,sq-,xcknz=1,shqtb-,kzhq=7,pm=3,qdv-,ttmj=8,pghc-,cpm=8,hbxq-,kvgqcd-,xk=2,mvf-,xcknz-,xk=2,qjhs-,jq=2,fbrrk-,jslrh=8,bmxnh=4,dd=3,xcs-,hhm=5,hxphc-,hzc=2,dx-,jxjtk-,jtmj-,pjbt-,svq=6,grnz-,dfx=9,lq=2,cmdv=7,lkmqbg=4,nrlr=7,sq=6,pzs=4,dqh-,dkjc-,jx-,hgvbj=1,bc=9,dk=3,cd-,sgzn=1,cn-,qzpdbt=4,cn-,kdh=5,ndtm=9,dg=5,lh=7,vqpf=4,tdkcl=6,ndh=1,tf-,hcgz-,rrt-,ftxnm=2,zrgctc-,kbc=2,mlb-,bm-,xjl=4,fjqj-,cfnj-,bb=4,gpn-,zrgctc-,xcs=4,dd=4,chs-,gj=3,fq=4,pz-,hqg-,zp=8,hlls=1,dk=8,vxtbtr=4,jfsn-,zst=6,jn=6,jqb-,ndfr-,hcgz=4,mlb=3,hhm=4,dgb-,kgzj=7,llx-,kbt-,lkmqbg-,kzcrx=8,xgv=2,llxv-,ztr=1,sjgnj-,vxtbtr-,mxz-,ktd=9,tr-,gq-,dg-,gb=3,xsf-,zfgsk-,cfm-,jc=7,xmhxk=2,xd=5,jt=3,rzx=8,hbfp=4,cfm=1,rlsd=6,hrsx=5,krzb=8,hpr-,mr=7,xzq=8,dc=4,kgl=9,qrgx-,lcf-,dh-,bb=2,fm-,jqbbht=4,pkgb=7,gth=2,cdrk-,pk=2,vzxxv-,zc-,dgb-,kr-,xhd=2,xzfrs-,qs=8,gd=2,pzt-,svkh=8,hnmv=3,jh-,sjf=8,llxv=2,xcs-,gvk=9,rkqqlz-,cfnj-,ftvjzf-,rc-,qqvps-,llxv-,gzt-,kdh=6,qjrk-,qrgx=2,zdrx=5,gp=5,rht-,mdxkng=9,hmxgqd=5,kkr=7,lkmqbg=9,tv=7,zm=6,mm-,mbtcm-,rkqqlz=2,dd-,xlghf=9,vlqj-,phqp-,bkt-,nz-,hn=2,lvf=2,hhfxj-,tr=8,fzg=5,xjk-,gxn=9,fbrrk-,pkjs-,xjk-,pvc=4,tdpr-,kfr-,pp-,td=6,cz-,qbx=6,dp-,mf=6,lh-,ftxnm=6,ndh=6,tnm-,gdszll-,zkx-,rtfh=8,td=7,vq=1,hz-,hzc=9,xg=6,mm-,dp=4,bjt=8,npnvn=4,fq-,xzfrs-,kgj-,hhm-,fnf=2,kkr=2,jq-,zjbgh=3,fnf-,qnvr=5,nmm=1,kbt=7,nr-,rj=6,vg=2,qbbb-,nq=7,hrsx-,tjkfxg=3,mm-,fm-,cz=1,jtd=5,pm=3,hnmv=3,llx=5,kgq=4,pz-,xd=8,mp-,sptllc-,zt-,hhm-,gj-,cz-,zb-,bjt-,jdp=3,rqx=3,rtfh-,bb-,jcd-,npnvn=6,ndh=2,ss=5,jtmj-,hxphc=1,jmfc-,shm=9,xfc-,zt-,jl-,rkqqlz=7,lkmqbg-,kgq=8,bh=2,jpzs=3,fq-,mkxx-,fm-,mggbm=4,jt-,fjqj=5,msc=8,zn-,rkxr=4,tr=8,mcj-,pkgb=9,hr=7,dkxzp-,dkxzp=7,rzx-,xgv-,ccvbl=7,lbqfgn=2,bbs-,jtd-,dxsch-,gsd=4,bjqbx=9,hv-,dz=3,hlls=4,xd=3,dfmj=2,nn=9,rjtg=2,hgvbj=9,sjkg-,bt-,nmm-,bm=7,kfcrmh-,xgv=6,kgl=8,vmp=2,ktdg-,pc-,vqt=1,cfm=9,bt-,jh=5,gj-,qbx-,kzhq=7,dz-,sqdr=5,qf-,kbc=5,lzcvmq=4,dz-,mm=1,sjf-,nntz=3,xmhxk=9,fx-,vzxxv=4,mt-,pl-,xkb=3,dgkp-,lzcvmq=2,fgd=5,jh-,tng-,xzq-,svkh-,vqt-,sp-,td=3,mhm-,vvq=1,kjbn=7,zvbn=3,jg-,svq=2,svkh-,jhb-,dgm=7,vx=6,zrgctc=6,qz-,xvn-,kz=4,mtrlfr-,jdp-,hhfxj-,tgp=1,rkxr=3,lfk=9,zdrp-,fm=6,jnd=9,ftcs=9,zkcfgm=3,pqz-,mbtcm=7,hmxgqd=7,dxb=1,sp-,sn=7,jxjtk=1,lc-,ds-,sjf-,lc-,mlb=1,rhz-,qf=6,rkqqlz=6,vxtbtr-,bm-,zc-,lgn=9,qxl-,hnmv=3,xhd=7,tnt=9,rhz-,qxl-,ldv-,mp=2,fqzf-,kk=6,dxsch-,xhd-,ktdg=1,gcbx-,jpzs=1,zr-,dd=3,tv-,cnmr=4,dkxzp-,mlj-,zr=6,rzx-,fx=7,bkt=6,fbrrk=5,pln-,fhmjh-,fhx=2,rkqqlz=6,rhz=5,zvp-,kggkk=5,qb=1,kdm-,qkm=8,cps=2,dkjc=4,dgkp=4,cdvqnr-,grnfm=4,pln-,gb-,ztx-,ffh-,vf=5,llx-,snr=8,mgclg=5,gt-,rhz-,pl=8,lcf=5,rzx-,bqf-,bq-,pl=7,dk=4,gpn=1,hrsx-,rjtg-,qjhs-,xxpn=3,zst=4,gvz-,qsbgs=4,rkqqlz-,vzxxv-,fnrjl-,grnz=1,mdxkng-,gvk=1,zjd-,zvbn-,lxj-,mcj=9,dfmj-,xfsd-,tf=4,jcj=5,fj=9,nck-,srm-,qhd=6,nz-,kpn-,ztx-,gvz=2,fj=8,bk=5,bb=4,xhd-,lm-,bmxnh=6,lgk-,llxv-,sg=2,nthdl=9,zkcfgm=7,hk-,jpzs-,bjt-,jqb-,ffnzq=1,bk-,jmp-,bmxnh=3,zs-,zbdb=9,fbrrk-,rvz=1,mn=6,lkh-,rvz=4,zvp=7,qzpdbt-,ktdg-,tq-,mq=6,pzs=7,tv-,nf-,jpn-,mn-,cdrk=2,fgd=5,hhfxj=1,mv=9,cfnj-,fvv=6,nf=5,lgx-,fbkd-,snr=1,zmql=3,dj=6,chs=4,msc=5,hgvbj=4,npb=3,kkr-,tr-,kh-,xgv=2,kfcrmh-,zdrx=2,vqp=3,tf=5,pqz-,rhz-,dch=9,bk=5,lzsk-,hrq=2,kfcrmh-,kfzf-,mgclg=6,hdvrn-,svk=4,kgq-,fgd=8,nq-,cnmr=3,jh=2,hmxgqd-,lcpg=4,fbkd-,jqbbht-,tgp=9,jslrh=7,dch=2,gcbx=4,kfcrmh-,xz=1,qpfx-,llxv-,cmdv-,mr-,sgzn=9,mgclg-,brj-,tst=7,xd-,qjhs-,pxc=8,mq=5,fnf=4,srqc-,zkcfgm-,nck-,pkjs=5,hnmv-,fx=1,kph=3,xkb-,lnz=5,cps=5,qbx=3,jhn=1,nr=3,rhz-,qpfx=3,pzt=7,pjbt=6,hdzr=6,kkr-,rqx=1,llx=1,hbfp-,tr-,rxh-,qt=1,dbd-,jslrh-,xkb-,snr-,dqh=4,kdj-,jc=1,td=9,grnz-,mkxx=9,rkqqlz-,zbdb-,hrq-,gpn=9,qtn=5,kfr-,gt-,dbd-,xk-,kzhq-,kzcrx=8,bmxnh=3,ccvbl=7,vzxxv=1,tnm-,xd-,gdszll-,qbx-,td-,gt-,gq=3,hmxgqd-,nn=3,jmfc=8,kdh=7,kq-,kbc=7,qzpdbt=6,dzxmm-,cxph-,fvf=7,mm=3,zdrp-,qb-,zvbn=9,mj-,qz-,hmxgqd=9,dpl-,fgd=5,pzs=1,kh=1,zp=3,prj-,rkxr=1,cxph-,knf=7,zfgsk=7,dv=8,bx-,shqtb=5,zp-,kl=2,kdgb-,mq-,vx=7,vjt-,npnvn=3,tr=7,mm-,kgq=5,ccvbl=7,prj=8,jslrh-,jz-,kdh=1,jrbd=5,nl=6,hhm=5,nzg-,dl-,pkgb-,kzhq-,dbd-,zs=8,gd=6,tk=7,zkx=7,sk-,xcs=7,jtd=5,xg-,xjk=7,hnmv-,ffh-,kdh=3,tf=2,hdb-,kz-,kdj=6,nlmh=1,sjkg=9,bjt=9,rzx-,cps=5,lgx-,bc=7,dgq=6,kkr-,xfsd-,gpkk-,fhx-,tpclf=9,hz-,jl-,mf-,gpkk-,rdpc-,kbc=5,jhn-,hzc-,rqx=6,qpfx-,qnvr=8,vc-,tptsg-,mt-,kfr-,dgkp-,gd=7,mznq=7,ng=1,cnmr=9,bpt=5,hbxq-,sjgnj-,nzgqhh-,hpg=5,zkx=4,dgq-,dzxmm=8,fql=6,hnmv=8,fjd=1,kfzf-,nzg-,xkb=8,vqt-,shm=7,bmxnh=5,qkm-,svq-,srm-,pxc=9,fmf-,pqhx=5,dpl=2,pktd=4,hpr-,xgv-,dh=3,dfmj-,ffg=2,kfzf=3,fmf-,dxb=4,xzq-,ztn=8,xjk-,gp=8,cpv=7,gdqg=4,gcbx=1,hmxgqd-,rkxr=2,rlsd-,shm-,bk-,fj=4,hqg-,rvz=7,dvh=8,vvq=5,kph=9,npnvn-,svkh-,tk-,jcj-,lnz=2,zb-,nntz-,fgd-,hhm=4,dkjc=6,xg-,hpr=7,fqzf=5,kc=6,ldl-,tkt=8,zrjn=3,fcszl-,cfn=6,bpg-,gpn=3,hmxgqd=7,llxv-,gzt-,dzxmm-,lnz=3,nz=7,ds=1,tf=9,kbc=3,fj-,ztn=9,ndh=9,rcp=8,jmfc-,gb-,mmz-,jcd=3,vx=2,zm=5,dfx=6,jfsn=6,gq=6,zdrp-,hlls=8,kjbn=3,pzt=2,cfm-,xvn-,hdzr-,dkjc=5,srt-,fdhtxv-,qtn-,ftxnm-,mt-,dc=2,zkx-,pkjs=7,shqtb=5,jnd-,tjkfxg=7,kdm-,cx=1,mbtcm-,fdz=1,gpkk-,fjqj=1,rvz=2,jfj=3,vqpf-,rkqqlz-,vb=3,xlghf-,gpkk-,nl-,mkxx=3,dqh=7,qz=8,hcgz-,qtn=4,xjl-,qs-,pkgb-,kbg=8,xzfrs=4,zvp-,npnvn-,jcj-,dxsch-,tvzdr-,bvg-,zxt-,mmz=4,hk=3,rkqqlz=1,tfpj-,mt=5,jl=5,bh=3,jt=7,mj=7,zbdb-,jd=5,lzcvmq-,bk-,mgclg-,lkh=8,hpr=6,vx=3,pghc-,dv-,mfhk-,hsl-,mlj=9,bjt=3,ktdg-,hz-,dv=8,zrgctc-,fq=3,lkmqbg=2,xxpn-,ftvjzf=3,zst-,tjpn=7,nn=2,hrq-,sg-,zst-,tnm=8,zkcfgm=4,tkt=2,vjt=3,qlbr=1,nr-,jh-,jtmj=8,mn=5,cvk-,sjf=5,mhm=7,brj-,kfr-,szs=6,dz=1,zn-,jlb-,tf=2,shqtb-,jk=7,zdrp-,dp-,sgzn=2,bmxnh-,xlghf=2,nt=2,qjhs=7,zt-,rvz=7,pc-,jpn-,qzpdbt=2,bh-,jk-,jjt-,hnr=9,jxz=8,cv-,fdz-,kjv-,psf=2,cxph=6,cgppx=1,cgppx-,jtmj-,jfsn=3,nlmh-,zm-,llx=4,sjkg=6,kdj-,tdpr=8,pvg=4,dqh=3,hn-,qhd=9,fmf=5,nz=8,xvn-,mxz-,kgl=2,qs=8,nf=5,zxt=9,jqq-,mmcf=8,cfm-,dg=3,zrjn-,vqpf-,llxv=6,jt=6,rkxr-,jg=4,jnd=6,gvz=4,jq=8,hpbm-,cvk-,fqzf=6,pg-,tc=5,zdrx-,pzs-,hpbm-,pp=8,vjt-,xlghf-,ktdg=5,vqt-,hgvbj-,cx=8,psf-,tdpr=4,tt-,shm-,zrjn-,dp=2,stx-,hz-,vjp-,qkm=2,kq-,mm=9,zjbgh-,mv=8,rkqqlz-,tk-,rdm-,kkr-,cmdv=3,srm=7,lm-,fsn=1,kbg-,lcpg-,mlj=2,tng=2,dzdn-,qbbb=4,dp=7,jh=8,mznq=1,kk-,hpg-,kbt=9,jq-,td=1,brj-,hsl-,pj=3,fhmjh-,gvz-,hgvbj-,tk=5,tvzdr=9,zt=9,jqbbht-,pxc=4,svk-,fvv=8,jp=8,vvq=6,zmql-,pp=2,lcpg-,pvc=8,fn-,bb=9,bkt=3,hn-,dz-,zst=6,zjbgh=7,bmxnh-,fsn=2,kgj-,qjrk=2,jnd-,bmxnh=6,hgvbj=3,xkvrx-,fvf=8,hlls-,vb=1,dj-,rxh-,lvf-,gd-,bl=6,lxj=3,ldv=6,lfk=1,vg=4,xvpqh-,fx-,jl=8,hbfp=4,bfg=2,tptsg-,kggkk=7,ss=7,fvf=6,tjkfxg-,hz-,hgvbj-,mdxkng-,kh=4,xsf-,vf=3,hgvbj-,fx-,fnf=1,lnz-,hr=3,chs-,tk=7
\ No newline at end of file
diff --git a/solutions/2023/pughmds/inputs/day15/test1.txt b/solutions/2023/pughmds/inputs/day15/test1.txt
new file mode 100644
index 0000000..62f7ed0
--- /dev/null
+++ b/solutions/2023/pughmds/inputs/day15/test1.txt
@@ -0,0 +1 @@
+rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7
\ No newline at end of file
diff --git a/solutions/2023/pughmds/python/day10/__init__.py b/solutions/2023/pughmds/python/day10/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/solutions/2023/pughmds/python/day10/__main__.py b/solutions/2023/pughmds/python/day10/__main__.py
new file mode 100644
index 0000000..6ad2f96
--- /dev/null
+++ b/solutions/2023/pughmds/python/day10/__main__.py
@@ -0,0 +1,144 @@
+import time
+EXPECTED_TEST_ANSWER_PART1 = [4, 4, 8, 8, 4, 3]
+EXPECTED_TEST_ANSWER_PART2 = [0, 0, 0, 0, 0, 0]
+PIPE_CHARS = ["|", "-", "F", "7", "L", "J"]
+UP_PIPES = ["|", "7", "F", "S"]
+DOWN_PIPES = ["|", "J", "L", "S"]
+LEFT_PIPES = ["-", "L", "F", "S"]
+RIGHT_PIPES = ["-", "J", "7", "S"]
+
+class Node:
+ def __init__(self, x, y, char):
+ self.x = x
+ self.y = y
+ self.char = char
+ self.next_node = None
+
+ def __str__(self):
+ return f" ({self.x},{self.y})[{self.char}] "
+
+class LinkedList:
+ def __init__(self):
+ self.head = None
+
+ def is_empty(self):
+ return self.head is None
+
+ def append(self, x, y, char):
+ new_node = Node(x, y, char)
+ if self.is_empty():
+ self.head = new_node
+ else:
+ current_node = self.head
+ while current_node.next_node:
+ current_node = current_node.next_node
+ current_node.next_node = new_node
+
+ def prepend(self, x, y, char):
+ new_node = Node(x, y, char)
+ new_node.next_node = self.head
+ self.head = new_node
+
+ def display(self):
+ elements = []
+ current_node = self.head
+ while current_node:
+ elements.append(current_node)
+ current_node = current_node.next_node
+ print(" -> ".join(map(str, elements)))
+
+
+
+class PipeMap:
+ def __init__(self, map):
+ self.map = [[char.strip() for char in string.strip()] for string in map]
+ self.original_map = self.map.copy()
+ self.remove_stray_characters()
+
+ self.path = LinkedList()
+ start = self.find_start_position()
+
+ self.path.append(start[0], start[1], start[2])
+ self.identify_loop()
+
+ def identify_loop(self):
+ self.path
+
+ def find_start_position(self):
+ position = next((i, row.index('S')) for i, row in enumerate(self.map) if 'S' in row)
+ return position[1], position[0], self.map[position[0]][position[1]]
+
+ def test_point(self, i1, j1, i2, j2, first_pipes, second_pipes):
+ if i1 < 0 or i2 < 0 or j1 < 0 or j2 < 0:
+ return False
+ try:
+ #print(f"Is surrounded by {self.map[j1][i1]} and {self.map[j2][i2]}")
+ if self.map[j1][i1] in first_pipes and self.map[j2][i2] in second_pipes:
+ return True
+ else:
+ return False
+ except:
+ return False
+
+ def remove_stray_characters(self):
+ # Loop over each character in the map, and make sure it connects with two other valid shapes.
+ for num in range(0, len(self.map) * 5):
+ for j, row in enumerate(self.map):
+ for i, char in enumerate(row):
+ if char == ".":
+ continue
+ elif char == "-":
+ if not self.test_point(i-1, j, i+1, j, LEFT_PIPES, RIGHT_PIPES):
+ self.map[j][i] = "."
+ elif char == "|":
+ if not self.test_point(i, j-1, i, j+1, UP_PIPES, DOWN_PIPES):
+ self.map[j][i] = "."
+ elif char == "J":
+ if not self.test_point(i-1, j, i, j-1, LEFT_PIPES, UP_PIPES):
+ self.map[j][i] = "."
+ elif char == "F":
+ if not self.test_point(i, j+1, i+1, j, DOWN_PIPES, RIGHT_PIPES):
+ self.map[j][i] = "."
+ elif char == "7":
+ if not self.test_point(i, j+1, i-1, j, DOWN_PIPES, LEFT_PIPES):
+ self.map[j][i] = "."
+ elif char == "L":
+ if not self.test_point(i, j-1, i+1, j, UP_PIPES, RIGHT_PIPES):
+ self.map[j][i] = "."
+
+ def get_length(self):
+ total = 0
+ for row in self.map:
+ for char in row:
+ if char in PIPE_CHARS:
+ total += 1
+
+ return total
+
+ def __str__(self):
+ rows = len(self.map)
+ cols = len(self.map[0]) if rows > 0 else 0
+ result = ""
+ for j in range(rows):
+ for i in range(cols):
+ if 0 <= j < rows and 0 <= i < len(self.map[j]):
+ result += str(self.map[j][i])
+ else:
+ continue
+ #result += "\t"
+ result += "\n"
+
+ return result.strip()
+
+def run(data):
+ this_map = PipeMap(data)
+ #print("--------")
+ #for row in data:
+ # print(row)
+
+ print(this_map)
+ return round(this_map.get_length() / 2)
+
+
+def run_p2(data):
+ return 0
diff --git a/solutions/2023/pughmds/python/day10/__main__old.py b/solutions/2023/pughmds/python/day10/__main__old.py
new file mode 100644
index 0000000..5289320
--- /dev/null
+++ b/solutions/2023/pughmds/python/day10/__main__old.py
@@ -0,0 +1,211 @@
+'''
+Original attempt where I was overthinking it...
+'''
+import time
+EXPECTED_TEST_ANSWER_PART1 = [4, 4, 8, 8]
+EXPECTED_TEST_ANSWER_PART2 = [0, 0, 0, 0]
+PIPE_CHARS = ["|", "-", "F", "7", "L", "J"]
+UP_PIPES = ["|", "7", "F"]
+DOWN_PIPES = ["|", "J", "L"]
+LEFT_PIPES = ["-", "L", "F"]
+RIGHT_PIPES = ["-", "J", "7"]
+
+
+class Point:
+ """
+ No real need to make a point like this, but it may be
+ useful to keep track of things...
+ """
+ def __init__(self, x, y, char):
+ self._x = x
+ self._y = y
+ self._char = char
+ self._up = False
+ self._down = False
+ self._left = False
+ self._right = False
+ self.check_char()
+
+ @property
+ def char(self):
+ return self._char
+
+ @property
+ def x(self):
+ return self._x
+
+ @property
+ def y(self):
+ return self._y
+
+ @property
+ def up(self):
+ return self._up
+
+ @property
+ def down(self):
+ return self._down
+
+ @property
+ def left(self):
+ return self._left
+
+ @property
+ def right(self):
+ return self._right
+
+
+ def check_char(self):
+ # It's a rule that the order should follow the Konami Code... https://en.wikipedia.org/wiki/Konami_Code
+ direction_mapping = {
+ "|": (True, True, False, False),
+ "-": (False, False, True, True),
+ "J": (True, False, True, False),
+ "F": (False, True, False, True),
+ "7": (False, True, True, False),
+ "S": (True, True, True, True),
+ "L": (True, False, False, True)
+ }
+
+ self._up, self._down, self._left, self._right = direction_mapping.get(self.char, (False, False, False, False))
+
+ def __str__(self):
+ return f"({self._x}, {self._y}): [U:{self._up}, D:{self._down}, L:{self._left}, R:{self._right}] --> '{self._char}'"
+
+
+class PipeMap:
+ def __init__(self, map):
+ self.map = map
+ self.start_pos = self.find_start_position()
+ self.pipe_path = self.get_pipe_path()
+
+ def find_start_position(self):
+ position = next((i, row.index('S')) for i, row in enumerate(self.map) if 'S' in row)
+ return Point(position[1], position[0], self.map[position[0]][position[1]])
+
+ def get_surrounding_points(self, this_point):
+ surrounding = [0, 0, 0, 0]
+ directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
+
+ for i, (dy, dx) in enumerate(directions):
+ try:
+ surrounding[i] = self.map[this_point.y + dy][this_point.x + dx]
+ if surrounding[i] == ' ':
+ surrounding[i] = '.'
+ except IndexError:
+ surrounding[i] = "."
+
+ # Now, let's narrow things so that we only are shown points we can get to
+ if not this_point.up:
+ surrounding[0] = "."
+ if not this_point.down:
+ surrounding[1] = "."
+ if not this_point.left:
+ surrounding[2] = "."
+ if not this_point.right:
+ surrounding[3] = "."
+
+ return surrounding
+
+ def get_pipe_path(self):
+ path = []
+ steps = 0
+
+ print("------------Using this Map------------")
+ print(self.map)
+
+ current_location = self.start_pos
+ path.append(self.start_pos)
+ came_from_direction = False
+ loop_connected = False
+ while not loop_connected:
+ # First, have a look around us based on the point's perspective
+ surrounding = self.get_surrounding_points(current_location)
+ next_pipe = -1
+ # Now, we need to turn off the direction we came from
+ if came_from_direction >= 0:
+ print(f"Let's disable where we come from: {came_from_direction}")
+ surrounding[came_from_direction] = "."
+
+ # Next, we need to check if there are more than two paths leading from the point we're at.
+ possible_path_count = len(surrounding) - surrounding.count(".")
+ print(surrounding)
+ print(f"At step {steps} on char {current_location.char} ({current_location.x},{current_location.y}), I found {possible_path_count} possible paths to follow.")
+ # If there are only one or two paths, we can just follow and move to the next stage.
+ if possible_path_count > 2:
+ # This may happen in the starting position, but maybe others...
+ print("Unsure which path to follow...")
+ break
+ else:
+ # Follow the first route we can
+ for char in PIPE_CHARS:
+ try:
+ next_pipe = surrounding.index(char)
+ break
+ except:
+ continue
+ print(f"Following: {surrounding[next_pipe]}")
+ time.sleep(0.5)
+ # Determine which way that character wants us to go, and if the character is a valid path
+ # Create and store this point
+ if "S" in surrounding:
+ # We need to trigger the end
+ print("We see the Starting point!")
+ start_location = surrounding.index("S")
+ if start_location == 0 and current_location.char in UP_PIPES:
+ loop_connected = True
+ elif start_location == 1 and current_location.char in DOWN_PIPES:
+ loop_connected = True
+ elif start_location == 2 and current_location.char in LEFT_PIPES:
+ loop_connected = True
+ elif start_location == 3 and current_location.char in RIGHT_PIPES:
+ loop_connected = True
+ else:
+ print(f"I'm not sure what to do: {char} has surrounding chars {surrounding}")
+ elif next_pipe == 0 and surrounding[next_pipe] in UP_PIPES:
+ current_location = Point(current_location.x, current_location.y - 1, surrounding[next_pipe])
+ print(f"Going Up to {surrounding[next_pipe]}!")
+ came_from_direction = 1
+ path.append(current_location)
+ elif next_pipe == 1 and surrounding[next_pipe] in DOWN_PIPES:
+ current_location = Point(current_location.x, current_location.y + 1, surrounding[next_pipe])
+ print(f"Going Down to {surrounding[next_pipe]}!")
+ came_from_direction = 0
+ path.append(current_location)
+ elif next_pipe == 2 and surrounding[next_pipe] in LEFT_PIPES:
+ current_location = Point(current_location.x - 1, current_location.y, surrounding[next_pipe])
+ print(f"Going Left to {surrounding[next_pipe]}!")
+ came_from_direction = 3
+ path.append(current_location)
+ elif next_pipe == 3 and surrounding[next_pipe] in RIGHT_PIPES:
+ current_location = Point(current_location.x + 1, current_location.y - 1, surrounding[next_pipe])
+ print(f"Going Right to {surrounding[next_pipe]}!")
+ came_from_direction = 2
+ path.append(current_location)
+
+ steps += 1
+ return path
+
+ def __str__(self):
+ rows = len(self.map)
+ cols = len(self.map[0]) if rows > 0 else 0
+ result = ""
+ for i in range(rows):
+ for j in range(cols):
+ if 0 <= i < rows and 0 <= j < len(self.map[i]):
+ result += str(self.map[i][j]) + "\t"
+ else:
+ result += "\t"
+ result += "\n"
+
+ return result.strip()
+
+def run(data):
+ this_map = PipeMap(data)
+
+ print(this_map)
+ return len(this_map.pipe_path)
+
+
+def run_p2(data):
+ return 0
diff --git a/solutions/2023/pughmds/python/day11/__init__.py b/solutions/2023/pughmds/python/day11/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/solutions/2023/pughmds/python/day11/__main__.py b/solutions/2023/pughmds/python/day11/__main__.py
new file mode 100644
index 0000000..140651b
--- /dev/null
+++ b/solutions/2023/pughmds/python/day11/__main__.py
@@ -0,0 +1,163 @@
+import math
+
+EXPECTED_TEST_ANSWER_PART1 = [374, 22, 6]
+EXPECTED_TEST_ANSWER_PART2 = [1030, 102, 6]
+
+class Galaxy:
+ def __init__(self, x, y):
+ self.x = x
+ self.y = y
+
+
+def get_distance(g1, g2):
+ distance = abs(g2.x - g1.x) + abs(g2.y - g1.y)
+ return distance
+
+def get_empty(map):
+ empty_rows = []
+
+ for y_idx, line in enumerate(map):
+ if "#" not in line:
+ empty_rows.append(y_idx)
+ return empty_rows
+
+def duplicate_row(lst, index):
+
+ row_to_dup = lst[index]
+ lst.insert(index, row_to_dup)
+
+ return lst
+
+
+def duplicate_col(lst, index):
+ if not lst:
+ return
+
+ if 0 <= index < len(lst[0]):
+ for i in range(len(lst)):
+ # Insert a duplicate of the character at the specified index
+ lst[i] = lst[i][:index] + lst[i][index] + lst[i][index:]
+ else:
+ print("Index out of range")
+ return lst
+
+def find_galaxies(data):
+ galaxies = []
+ for y_idx, line in enumerate(data):
+ indices = []
+ start_index = 0
+ try:
+ while True:
+ index = line.index("#", start_index)
+ indices.append(index)
+ start_index = index + 1
+ except ValueError:
+ pass
+
+ for index in indices:
+ galaxies.append(Galaxy(index, y_idx))
+ return galaxies
+
+def get_distance_sum(galaxies):
+ total = 0
+ for i in range(len(galaxies)):
+ for j in range(i + 1, len(galaxies)):
+ galaxy = galaxies[i]
+ pair_galaxy = galaxies[j]
+ distance = get_distance(galaxy, pair_galaxy)
+ if distance > 0:
+ total += distance
+ return total
+
+
+def get_distance_sum_expanded(galaxies, empty_rows, empty_cols, distance_factor):
+ total = 0
+ distance_factor -= 1
+ for i in range(len(galaxies)):
+ for j in range(i + 1, len(galaxies)):
+ distance = get_distance(galaxies[i], galaxies[j])
+ # First, work out if we crossed any row boundaries (Y)
+ if galaxies[i].y > galaxies[j].y:
+ first_val = galaxies[j].y
+ second_val = galaxies[i].y
+ else:
+ first_val = galaxies[i].y
+ second_val = galaxies[j].y
+
+ # Work out how many times we need to expand on the distance
+ crossed_boundaries = [x for x in empty_rows if first_val <= x < second_val]
+ if len(crossed_boundaries) > 0:
+ distance += (len(crossed_boundaries) * distance_factor)
+
+ # Next, work out if we crossed any column boundaries (X)
+ if galaxies[i].x > galaxies[j].x:
+ first_val = galaxies[j].x
+ second_val = galaxies[i].x
+ else:
+ first_val = galaxies[i].x
+ second_val = galaxies[j].x
+
+ crossed_boundaries = [x for x in empty_cols if first_val <= x < second_val]
+ if len(crossed_boundaries) > 0:
+ distance += (len(crossed_boundaries) * distance_factor)
+
+ total += distance
+ return total
+
+def run(data):
+ """
+ Actually physically modify the map to have the needed values.
+ """
+ # Find a list of empty rows
+ empty_rows = get_empty(data)
+ if len(empty_rows) > 0:
+ empty_rows.sort(reverse=True)
+
+ # find a list of empty columns
+ empty_cols = get_empty(list(map(list, zip(*data))))
+ if len(empty_cols) > 0:
+ empty_cols.sort(reverse=True)
+
+ # Duplicate any rows and columns that are needed
+ for row in empty_rows:
+ data = duplicate_row(data, row)
+
+ for col in empty_cols:
+ data = duplicate_col(data, col)
+
+ # Find all the galaxies
+ galaxies = find_galaxies(data)
+
+ # Get the sum of the distances
+ total = get_distance_sum(galaxies)
+ return total
+
+
+def run_p2(data):
+ """
+ To do this, we can't modify the map, but we CAN modify the coordinates
+ to create the same effect.
+ """
+ # First, find all the galaxies
+ galaxies = find_galaxies(data)
+
+ # Find a list of empty rows
+ empty_rows = get_empty(data)
+ if len(empty_rows) > 0:
+ empty_rows.sort(reverse=True)
+
+ # find a list of empty columns
+ empty_cols = get_empty(list(map(list, zip(*data))))
+ if len(empty_cols) > 0:
+ empty_cols.sort(reverse=True)
+
+ # Now that we have a list of galaxies, let's find the empty rows and cols
+ for row in empty_rows:
+ data = duplicate_row(data, row)
+
+ for col in empty_cols:
+ data = duplicate_col(data, col)
+
+ # Finally, let's work out the distance sum
+ total = get_distance_sum_expanded(galaxies, empty_rows, empty_cols, 1000000)
+ return total
diff --git a/solutions/2023/pughmds/python/day12/__init__.py b/solutions/2023/pughmds/python/day12/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/solutions/2023/pughmds/python/day12/__main__.py b/solutions/2023/pughmds/python/day12/__main__.py
new file mode 100644
index 0000000..c8e0540
--- /dev/null
+++ b/solutions/2023/pughmds/python/day12/__main__.py
@@ -0,0 +1,164 @@
+import re
+from itertools import product
+from itertools import combinations
+from functools import lru_cache
+from functools import cache
+import random
+
+EXPECTED_TEST_ANSWER_PART1 = [6, 21]
+EXPECTED_TEST_ANSWER_PART2 = [6, 525152]
+
+
+@lru_cache(maxsize=None)
+def find_unequal_combinations(question_indices, num_hashes, input_string):
+ possible_results = []
+ input_string = list(input_string)
+ possible_swap_indices = combinations(question_indices, num_hashes)
+ for swap_group in possible_swap_indices:
+ temp_list = list(input_string)
+ for index in swap_group:
+ temp_list[index] = "#"
+ possible_results.append("".join(temp_list))
+ return possible_results
+
+
+def generate_combinations_with_hashes(input_string, num_hashes):
+ # Find all indices of '?' characters in the input string
+ question_indices = [index for index, char in enumerate(input_string) if char == "?"]
+ question_count = len(question_indices)
+
+ if num_hashes == question_count:
+ return [input_string.replace("?", "#")]
+
+ elif num_hashes > question_count:
+ return []
+
+ else:
+ possible_results = find_unequal_combinations(
+ tuple(question_indices), num_hashes, input_string
+ )
+
+ return [result.replace("?", ".") for result in possible_results]
+
+
+@lru_cache(maxsize=None)
+def extract_exact_groups(input_string):
+ # Define a regular expression pattern to match groups of consecutive '#'
+ pattern = re.compile(r"#+")
+
+ # Use findall to extract all matches of the pattern in the input string
+ groups = pattern.findall(input_string)
+
+ return groups
+
+
+def get_pattern_from_result(result):
+ return [len(x) for x in result]
+
+
+def check_row(row):
+ total = 0
+ if "?" not in row[0]:
+ # This will be a simple check to see if making the pattern is possible
+ result = extract_exact_groups(row[0])
+ pattern = get_pattern_from_result(result)
+ if pattern == row[1]:
+ total += 1
+ else:
+ # Now we have to take into consideration the ? values...
+ # '???.###'
+ # How many ways could this match the pattern?
+ num_to_find = sum(row[1]) - row[0].count("#")
+ result = generate_combinations_with_hashes(row[0], num_to_find)
+
+ # remove any non-matching results
+ for test in result:
+ groups = extract_exact_groups(test)
+ group_size = get_pattern_from_result(groups)
+ if group_size == row[1]:
+ total += 1
+ return total
+
+
+def parse_lines(data, unfold_count=1):
+ rows = []
+ for line in data:
+ record, pattern = line.strip().split(" ")
+ pattern = pattern.split(",")
+ pattern = [int(a) for a in pattern]
+ if unfold_count > 1:
+ newstring = '?'.join([record] * unfold_count)
+ rows.append((newstring, pattern * unfold_count))
+ return rows
+
+@cache
+def solve_recursively(input, groups):
+ """
+ We need a way to go through the more complex strings and
+ solve it without actually storing anything other than if it works
+ or not. Therefore, we can go through the string, left to right,
+ recursivly checking to see if it matches the pattern
+ """
+ result = 0
+
+ if not groups:
+ if "#" in input:
+ return 0
+ else:
+ return 1
+ if not input:
+ if not groups:
+ return 1
+ else:
+ return 0
+
+ if input[0] in ".?":
+ result += solve_recursively(input[1:], groups)
+ if input[0] in "#?":
+ if (
+ groups[0] <= len(input)
+ and "." not in input[: groups[0]]
+ and (groups[0] == len(input) or input[groups[0]] != "#")
+ ):
+ # If we have a series of # characters at the start, we can test a match
+ result += solve_recursively(input[groups[0] + 1 :], groups[1:])
+
+ return result
+
+
+def run(data):
+ """
+ Manually go through and find the answer
+ """
+ rows = parse_lines(data)
+
+ total = 0
+
+ """for row in rows:
+ total += check_row(row)"""
+
+ for row in rows:
+ # Let's try recursion! (always a good idea with Python...)
+ value = solve_recursively(row[0], row[1])
+ total += value
+
+ return total
+
+
+def run_p2(data):
+ """
+ Once again, we have a solution that would blow up my old
+ computer if we tried it with the extra inputs. Therefore,
+ we need to do this more efficiently.
+ """
+ total = 0
+ rows = parse_lines(data, 5)
+
+ for row in rows:
+ # Let's try recursion! (always a good idea with Python...)
+ #print(row)
+ value = solve_recursively(row[0], tuple(row[1]))
+ #print(value)
+ total += value
+
+ return total
diff --git a/solutions/2023/pughmds/python/day13/__init__.py b/solutions/2023/pughmds/python/day13/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/solutions/2023/pughmds/python/day13/__main__.py b/solutions/2023/pughmds/python/day13/__main__.py
new file mode 100644
index 0000000..2168220
--- /dev/null
+++ b/solutions/2023/pughmds/python/day13/__main__.py
@@ -0,0 +1,177 @@
+from collections import Counter
+
+EXPECTED_TEST_ANSWER_PART1 = [405, 900, 400, 500]
+EXPECTED_TEST_ANSWER_PART2 = [400, 400, 6, 11]
+
+
+def find_symmetry_line(data):
+ """
+ UNUSED
+
+ Finds repeated elements in a list of strings. Worked as an initial
+ experiment, but found it might be too cumbersome in the long run.
+ Have left for reference, but didn't use in the final solution...
+ """
+ counter = Counter(data)
+ duplicates_with_indices = {}
+
+ for idx, item in enumerate(data):
+ if counter[item] > 1:
+ if item not in duplicates_with_indices:
+ duplicates_with_indices[item] = [idx]
+ else:
+ duplicates_with_indices[item].append(idx)
+
+ return duplicates_with_indices
+
+
+def split_shapes(data):
+ """
+ UNUSED
+
+ First I visually split the input into groups of 2D string arrays
+ But found that this would be limiting in the long run. Have left for
+ reference, but didn't use in the final solution...
+ """
+ result = []
+ current_subarray = []
+
+ for element in data:
+ element = element.strip()
+ if element: # Check if the element is non-empty
+ current_subarray.append(element)
+ elif current_subarray: # Check if the current subarray is not empty
+ result.append(current_subarray)
+ current_subarray = []
+
+ if current_subarray:
+ result.append(current_subarray)
+
+ return result
+
+
+def convert_shape_to_binary(shape):
+ """
+ Converts each line of a shape into a binary representation
+ so it makes this problem simply dealing with symmetry in
+ a list of numbers instead of a 2D string.
+ """
+ bin_shape = []
+ for row in shape:
+ row = row.strip().replace(".", "0").replace("#", "1")
+ bin_shape.append(int(row, 2))
+
+ return bin_shape
+
+
+def find_repeating_indices(lst, smudge=False):
+ """
+ Find where there are two elements of the list that are the same.
+ It may (or may not) be a mirror line!
+ """
+ repeating_indices = []
+
+ for i in range(1, len(lst)):
+ num1 = lst[i]
+ num2 = lst[i - 1]
+ if num1 == num2:
+ repeating_indices.append((i - 1, i))
+ elif smudge:
+ # Let's also check if numbers are one-off their neighbours?
+ comparison_result = check_binary_similarity(num1, num2)
+ if comparison_result:
+ repeating_indices.append((i - 1, i))
+ return repeating_indices
+
+
+def check_binary_similarity(x, y):
+ """
+ This function compares (bitwise) two numbers
+ and checks to see if they are one bit-flip off
+ of each other. If they are, then return true
+ as this could be a smudge.
+ """
+ result = x ^ y
+ if bin(result).count("1") == 1:
+ return True
+ return False
+
+
+def check_symmetry(shape, index, smudge=False):
+ """
+ Check to see if a list is symmetrical around the given index
+ """
+
+ # First, split the list around the symmetry
+ a = shape[: index[1]]
+ b = shape[index[1] :]
+
+ # Find the shorter pattern, and match the longer one
+ min_length = min(len(a), len(b))
+ a = a[-min_length:]
+ b = b[:min_length]
+
+ if a == b[::-1] and not smudge:
+ # Already a mirror, no need to do anything further
+ return len(shape[: index[1]])
+ elif smudge:
+ # Find the differences between the two lists
+ diff = list(set(a) ^ set(b[::-1]))
+ if len(diff) == 2:
+ # We're only going to act if there's a matching pair
+ comparison_result = check_binary_similarity(diff[0], diff[1])
+ if comparison_result:
+ return len(shape[: index[1]])
+ else:
+ return -1
+ else:
+ return -1
+ return -1
+
+
+def count_score(repeats, multiplier, bin_shape, smudge=False):
+ """
+ Totals up the score to feed to AoC. 100* horiz, 1* vertical
+ """
+ total = 0
+ for index in repeats:
+ result = check_symmetry(bin_shape, index, smudge)
+ if result > 0:
+ total += result * multiplier
+ return total
+
+
+def handle_shape(shape, multiplier, smudge=False):
+ """
+ Steps to determine and count LOS for a shape
+ """
+ bin_shape1 = convert_shape_to_binary(shape)
+ repeats = find_repeating_indices(bin_shape1, smudge)
+ return count_score(repeats, multiplier, bin_shape1, smudge)
+
+
+def run(data):
+ """
+ Lines of symmetry
+ """
+ # First, we need to find any row or column that has a neighbour that matches.
+ shapes = split_shapes(data)
+ total = 0
+ for shape in shapes:
+ # The original shape
+ total += handle_shape(shape, 100)
+ total += handle_shape(["".join(chars) for chars in zip(*shape)], 1)
+ return total
+
+
+def run_p2(data):
+ """
+ Now we have smudges to worry about...
+ """
+ shapes = split_shapes(data)
+ total = 0
+ for shape in shapes:
+ # The original shape
+ total += handle_shape(shape, 100, True)
+ total += handle_shape(["".join(chars) for chars in zip(*shape)], 1, True)
+ return total
diff --git a/solutions/2023/pughmds/python/day14/__init__.py b/solutions/2023/pughmds/python/day14/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/solutions/2023/pughmds/python/day14/__main__.py b/solutions/2023/pughmds/python/day14/__main__.py
new file mode 100644
index 0000000..817866a
--- /dev/null
+++ b/solutions/2023/pughmds/python/day14/__main__.py
@@ -0,0 +1,118 @@
+import math
+
+EXPECTED_TEST_ANSWER_PART1 = [114]
+EXPECTED_TEST_ANSWER_PART2 = [2]
+
+from math import factorial
+from fractions import Fraction
+
+
+class sequence:
+ """
+ Adapted and cleaned up version of this code:
+ https://codereview.stackexchange.com/questions/277964/calculating-the-nth-term-of-a-sequence-python-3-9-5
+ """
+
+ def __init__(self, *values, sequence=True):
+ self.sequence = sequence
+ self.originalValues = values
+ self.values = values
+ self.calc = []
+ self.generate_terms()
+
+ def determine_pattern(self, temp_values, difference):
+ pattern = False
+ iter_count = 1
+ while not pattern:
+ difference_length = len(temp_values) - 1
+ for n in range(difference_length):
+ difference.append(
+ Fraction(temp_values[n + 1]) - Fraction(temp_values[n])
+ )
+
+ # checks if all values in 'pattern' are equal (if so, then the pattern is found)
+ pattern = [difference[0]] * difference_length == difference
+
+ # didn't find a pattern with n^x, lets raise the iterCount and try with n^x+1
+ if not pattern:
+ temp_values = difference
+ difference = []
+ iter_count += 1
+ return pattern, difference, iter_count
+
+ def generate_terms(self):
+ difference = []
+ temp_values = self.values
+
+ while [temp_values[0]] * len(temp_values) != temp_values:
+ pattern, difference, iter_count = self.determine_pattern(
+ temp_values, difference
+ )
+
+ # this is essentially difference[0] / factorial(iterCount)
+ coefficient_of_n = Fraction(difference[0], factorial(iter_count))
+
+ # adds the found pattern to self.calc so it can be used in calculations later on
+ self.calc.append([coefficient_of_n, iter_count])
+
+ # makes a list of the nth term of the found pattern and...
+ pattern_found = [
+ coefficient_of_n * (n**iter_count)
+ for n in range(1, len(self.values) + 1)
+ ]
+
+ temp_values = []
+ difference = []
+
+ # ...takes that away from the original values
+ for n in range(len(self.values)):
+ temp_values.append(
+ Fraction(self.values[n]) - Fraction(pattern_found[n])
+ )
+
+ self.values = temp_values
+
+ self.values = list(self.originalValues)
+
+ if temp_values[0] != 0:
+ # takes that value away from the list and adds it to the nth term
+ self.calc.append([temp_values[0], 0])
+
+ def calculate(self, n):
+ """
+ Calculates the nth value of the sequence of numbers provided.
+ nth_term_data[0] = a (coefficient of n)
+ nth_term_data[1] = b (power of n)
+ data is presented like: an^b
+ """
+
+ if not isinstance(n, int):
+ raise ValueError("nthTerm.calculate(n) only accepts integer values of 'n'.")
+
+ value_of_n = 0
+ for nth_term_data in self.calc:
+ coefficient, power = nth_term_data
+ if power == 0:
+ value_of_n += coefficient
+ else:
+ value_of_n += nth_term_data[0] * (n ** nth_term_data[1])
+
+ return int(value_of_n) if value_of_n.denominator == 1 else value_of_n
+
+
+def run(data):
+ total = 0
+ for line in data:
+ numbers = [int(num) for num in line.split()]
+ result = sequence(*numbers)
+ total += result.calculate(len(numbers) + 1)
+ return total
+
+
+def run_p2(data):
+ total = 0
+ for line in data:
+ numbers = [int(num) for num in line.split()]
+ result = sequence(*numbers)
+ total += result.calculate(0)
+ return total
diff --git a/solutions/2023/pughmds/python/day14/test.py b/solutions/2023/pughmds/python/day14/test.py
new file mode 100644
index 0000000..e69de29
diff --git a/solutions/2023/pughmds/python/day15/__init__.py b/solutions/2023/pughmds/python/day15/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/solutions/2023/pughmds/python/day15/__main__.py b/solutions/2023/pughmds/python/day15/__main__.py
new file mode 100644
index 0000000..58124ba
--- /dev/null
+++ b/solutions/2023/pughmds/python/day15/__main__.py
@@ -0,0 +1,79 @@
+from functools import lru_cache
+
+EXPECTED_TEST_ANSWER_PART1 = [1320]
+EXPECTED_TEST_ANSWER_PART2 = [145]
+
+
+@lru_cache(maxsize=None)
+def hash(instruction):
+ """
+ Determine the ASCII code for the current character of the string.
+ Increase the current value by the ASCII code you just determined.
+ Set the current value to itself multiplied by 17.
+ Set the current value to the remainder of dividing itself by 256.
+ """
+ current_value = 0
+ for char in instruction:
+ current_value = ((current_value + ord(char)) * 17) % 256
+ return current_value
+
+
+def handle_instruction(instr, boxes):
+ """
+ A bit untidy, but sorts through the instructions and either stores,
+ removes, or updates the boxes as needed.
+ """
+ label, focal = instr.split("=") if "=" in instr else instr.split("-")
+ focal = int(focal) if focal else 0
+ box = hash(label)
+
+ if box not in boxes:
+ if "=" in instr:
+ boxes[box] = [{"label": label, "focal": focal}]
+ return boxes
+
+ if "=" in instr:
+ # Update existing item or add new item
+ for item in boxes[box]:
+ if item["label"] == label:
+ item["focal"] = focal
+ return boxes
+ else:
+ boxes[box].append({"label": label, "focal": focal})
+ else:
+ # Remove item with matching label
+ boxes[box] = [item for item in boxes[box] if item["label"] != label]
+
+ return boxes
+
+
+def score_focal_positions(boxes):
+ """
+ Go through each box and score it as follows:
+ box number * Box Position * Focal Score
+ """
+ total = 0
+ for key in boxes:
+ if len(boxes[key]) == 0:
+ continue
+ else:
+ for idx, item in enumerate(boxes[key]):
+ total += (key + 1) * (idx + 1) * item["focal"]
+ return total
+
+
+def run(data):
+ instructions = data[0].split(",")
+ total = 0
+ for instruction in instructions:
+ total += hash(instruction)
+ return total
+
+
+def run_p2(data):
+ instructions = data[0].split(",")
+ boxes = {}
+ for instruction in instructions:
+ boxes = handle_instruction(instruction, boxes)
+
+ return score_focal_positions(boxes)
diff --git a/solutions/2023/pughmds/python/shared/file.py b/solutions/2023/pughmds/python/shared/file.py
index 612e8d9..679522e 100644
--- a/solutions/2023/pughmds/python/shared/file.py
+++ b/solutions/2023/pughmds/python/shared/file.py
@@ -1,4 +1,7 @@
def open_into_list(filelocation):
+ print("---------------------------------")
+ print(f"--> Opening file: {filelocation}")
+ print("---------------------------------")
with open(filelocation) as file:
lines = [line.replace('\n', ' ') for line in file]
return lines
diff --git a/solutions/2023/pughmds/timings.csv b/solutions/2023/pughmds/timings.csv
index 89675b7..9bffe8a 100644
--- a/solutions/2023/pughmds/timings.csv
+++ b/solutions/2023/pughmds/timings.csv
@@ -17,3 +17,13 @@ day, part, python, go, bash, javascript, ruby, c++, rust
8, 2, 1.053, , ,, ,,
9, 1, 3.686, , ,, ,,
9, 2, 3.656, , ,, ,,
+10,1, , ,, ,,,
+10,2, , ,, ,,,
+11,1, 1.009, , ,, ,,
+11,2, 1.343, , ,, ,,
+12,1, , ,, ,,,
+12,2, , ,, ,,,
+13,1, , ,, ,,,
+13,2, , ,, ,,,
+14,1, 0.995, ,, ,,,
+14,2, , ,, ,,,
\ No newline at end of file