summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--2017/Cargo.lock233
-rw-r--r--2017/inputs/.gitkeep0
-rw-r--r--2017/inputs/day_1.txt1
-rw-r--r--2017/inputs/day_10.txt1
-rw-r--r--2017/inputs/day_11.txt1
-rw-r--r--2017/inputs/day_12.txt2000
-rw-r--r--2017/inputs/day_13.txt43
-rw-r--r--2017/inputs/day_13_example.txt5
-rw-r--r--2017/inputs/day_14.txt2
-rw-r--r--2017/inputs/day_14_example.txt1
-rw-r--r--2017/inputs/day_15.txt2
-rw-r--r--2017/inputs/day_16.txt1
-rw-r--r--2017/inputs/day_17.txt1
-rw-r--r--2017/inputs/day_18.txt41
-rw-r--r--2017/inputs/day_19.txt201
-rw-r--r--2017/inputs/day_2.txt16
-rw-r--r--2017/inputs/day_20.txt1000
-rw-r--r--2017/inputs/day_21.txt108
-rw-r--r--2017/inputs/day_21_example.txt2
-rw-r--r--2017/inputs/day_22.txt25
-rw-r--r--2017/inputs/day_22_example.txt3
-rw-r--r--2017/inputs/day_23.txt32
-rw-r--r--2017/inputs/day_24.txt57
-rw-r--r--2017/inputs/day_25.txt62
-rw-r--r--2017/inputs/day_3.txt1
-rw-r--r--2017/inputs/day_4.txt512
-rw-r--r--2017/inputs/day_5.txt1070
-rw-r--r--2017/inputs/day_6.txt1
-rw-r--r--2017/inputs/day_7.txt1091
-rw-r--r--2017/inputs/day_8.txt1000
-rw-r--r--2017/inputs/day_9.txt1
-rw-r--r--2018/Cargo.lock76
-rw-r--r--2018/inputs/.gitkeep0
-rw-r--r--2018/inputs/1.txt968
-rw-r--r--2018/inputs/10.txt369
-rw-r--r--2018/inputs/12.txt34
-rw-r--r--2018/inputs/13.txt150
-rw-r--r--2018/inputs/15.txt32
-rw-r--r--2018/inputs/16_1.txt3143
-rw-r--r--2018/inputs/16_2.txt1014
-rw-r--r--2018/inputs/17.txt1713
-rw-r--r--2018/inputs/18.txt50
-rw-r--r--2018/inputs/19.txt37
-rw-r--r--2018/inputs/2.txt250
-rw-r--r--2018/inputs/20.txt1
-rw-r--r--2018/inputs/21.txt32
-rw-r--r--2018/inputs/22.txt2
-rw-r--r--2018/inputs/23.txt1000
-rw-r--r--2018/inputs/24.txt23
-rw-r--r--2018/inputs/25.txt1248
-rw-r--r--2018/inputs/3.txt1385
-rw-r--r--2018/inputs/4.txt1088
-rw-r--r--2018/inputs/5.txt1
-rw-r--r--2018/inputs/6.txt50
-rw-r--r--2018/inputs/7.txt101
-rw-r--r--2018/inputs/8.txt1
-rw-r--r--2018/inputs/9.txt1
-rw-r--r--2019/Cargo.lock348
-rw-r--r--2019/inputs/.gitkeep0
-rw-r--r--2019/inputs/day_1.txt100
-rw-r--r--2019/inputs/day_10.txt24
-rw-r--r--2019/inputs/day_11.txt1
-rw-r--r--2019/inputs/day_12.txt4
-rw-r--r--2019/inputs/day_13.txt1
-rw-r--r--2019/inputs/day_14.txt59
-rw-r--r--2019/inputs/day_15.txt1
-rw-r--r--2019/inputs/day_16.txt1
-rw-r--r--2019/inputs/day_17.txt1
-rw-r--r--2019/inputs/day_18.txt81
-rw-r--r--2019/inputs/day_18_2.txt81
-rw-r--r--2019/inputs/day_19.txt1
-rw-r--r--2019/inputs/day_2.txt1
-rw-r--r--2019/inputs/day_20.txt113
-rw-r--r--2019/inputs/day_21.txt1
-rw-r--r--2019/inputs/day_22.txt100
-rw-r--r--2019/inputs/day_23.txt1
-rw-r--r--2019/inputs/day_24.txt5
-rw-r--r--2019/inputs/day_25.txt1
-rw-r--r--2019/inputs/day_3.txt2
-rw-r--r--2019/inputs/day_4.txt2
-rw-r--r--2019/inputs/day_5.txt1
-rw-r--r--2019/inputs/day_6.txt2306
-rw-r--r--2019/inputs/day_7.txt1
-rw-r--r--2019/inputs/day_8.txt1
-rw-r--r--2019/inputs/day_9.txt1
-rw-r--r--2020/inputs/.gitkeep0
-rw-r--r--2020/inputs/day_1.txt200
-rw-r--r--2020/inputs/day_10.txt111
-rw-r--r--2020/inputs/day_11.txt90
-rw-r--r--2020/inputs/day_12.txt755
-rw-r--r--2020/inputs/day_2.txt1000
-rw-r--r--2020/inputs/day_3.txt323
-rw-r--r--2020/inputs/day_4.txt1023
-rw-r--r--2020/inputs/day_5.txt901
-rw-r--r--2020/inputs/day_6.txt2199
-rw-r--r--2020/inputs/day_7.txt594
-rw-r--r--2020/inputs/day_8.txt626
-rw-r--r--2020/inputs/day_9.txt1000
-rw-r--r--2021/inputs/.gitkeep0
-rw-r--r--2021/inputs/day_1.txt2000
-rw-r--r--2021/inputs/day_10.txt94
-rw-r--r--2021/inputs/day_11.txt10
-rw-r--r--2021/inputs/day_12.txt23
-rw-r--r--2021/inputs/day_13.txt806
-rw-r--r--2021/inputs/day_14.txt102
-rw-r--r--2021/inputs/day_15.txt100
-rw-r--r--2021/inputs/day_16.txt1
-rw-r--r--2021/inputs/day_17.txt1
-rw-r--r--2021/inputs/day_18.txt100
-rw-r--r--2021/inputs/day_19.txt856
-rw-r--r--2021/inputs/day_2.txt1000
-rw-r--r--2021/inputs/day_20.txt102
-rw-r--r--2021/inputs/day_21.txt2
-rw-r--r--2021/inputs/day_22.txt420
-rw-r--r--2021/inputs/day_23.txt5
-rw-r--r--2021/inputs/day_24.txt252
-rw-r--r--2021/inputs/day_25.txt137
-rw-r--r--2021/inputs/day_3.txt1000
-rw-r--r--2021/inputs/day_4.txt601
-rw-r--r--2021/inputs/day_5.txt500
-rw-r--r--2021/inputs/day_6.txt1
-rw-r--r--2021/inputs/day_7.txt1
-rw-r--r--2021/inputs/day_8.txt200
-rw-r--r--2021/inputs/day_9.txt100
-rw-r--r--2021/readme.org3
-rw-r--r--2022/Cargo.lock123
-rw-r--r--2022/Cargo.toml13
-rw-r--r--2022/inputs/.gitkeep0
-rw-r--r--2022/readme.org2
-rw-r--r--2022/src/bin/day_1.rs61
-rw-r--r--2022/src/bin/day_10.rs103
-rw-r--r--2022/src/bin/day_11.rs154
-rw-r--r--2022/src/bin/day_12.rs174
-rw-r--r--2022/src/bin/day_13.rs146
-rw-r--r--2022/src/bin/day_14.rs184
-rw-r--r--2022/src/bin/day_15.rs167
-rw-r--r--2022/src/bin/day_16.rs236
-rw-r--r--2022/src/bin/day_17.rs238
-rw-r--r--2022/src/bin/day_18.rs157
-rw-r--r--2022/src/bin/day_19.rs352
-rw-r--r--2022/src/bin/day_2.rs167
-rw-r--r--2022/src/bin/day_20.rs91
-rw-r--r--2022/src/bin/day_21.rs298
-rw-r--r--2022/src/bin/day_22.rs501
-rw-r--r--2022/src/bin/day_23.rs346
-rw-r--r--2022/src/bin/day_24.rs195
-rw-r--r--2022/src/bin/day_25.rs111
-rw-r--r--2022/src/bin/day_3.rs100
-rw-r--r--2022/src/bin/day_4.rs88
-rw-r--r--2022/src/bin/day_5.rs147
-rw-r--r--2022/src/bin/day_6.rs20
-rw-r--r--2022/src/bin/day_7.rs227
-rw-r--r--2022/src/bin/day_8.rs231
-rw-r--r--2022/src/bin/day_9.rs134
-rw-r--r--2022/src/lib.rs1
-rw-r--r--2023/Cargo.lock247
-rw-r--r--2023/Cargo.toml13
-rw-r--r--2023/inputs/.gitkeep0
-rw-r--r--2023/readme.org5
-rw-r--r--2023/src/bin/day_1.rs81
-rw-r--r--2023/src/bin/day_10.rs321
-rw-r--r--2023/src/bin/day_11.rs111
-rw-r--r--2023/src/bin/day_12.rs323
-rw-r--r--2023/src/bin/day_13.rs82
-rw-r--r--2023/src/bin/day_14.rs145
-rw-r--r--2023/src/bin/day_15.rs153
-rw-r--r--2023/src/bin/day_16.rs209
-rw-r--r--2023/src/bin/day_17.rs144
-rw-r--r--2023/src/bin/day_18.rs214
-rw-r--r--2023/src/bin/day_19.rs348
-rw-r--r--2023/src/bin/day_2.rs109
-rw-r--r--2023/src/bin/day_20.rs334
-rw-r--r--2023/src/bin/day_21.rs395
-rw-r--r--2023/src/bin/day_22.rs161
-rw-r--r--2023/src/bin/day_23.rs218
-rw-r--r--2023/src/bin/day_24.rs242
-rw-r--r--2023/src/bin/day_25.rs154
-rw-r--r--2023/src/bin/day_3.rs149
-rw-r--r--2023/src/bin/day_4.rs92
-rw-r--r--2023/src/bin/day_5.rs257
-rw-r--r--2023/src/bin/day_6.rs70
-rw-r--r--2023/src/bin/day_7.rs169
-rw-r--r--2023/src/bin/day_8.rs213
-rw-r--r--2023/src/bin/day_9.rs81
-rw-r--r--2023/src/lib.rs1
-rw-r--r--readme.org6
187 files changed, 10302 insertions, 40276 deletions
diff --git a/.gitignore b/.gitignore
index ea8c4bf..946c65c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-/target
+**/target
+**/inputs \ No newline at end of file
diff --git a/2017/Cargo.lock b/2017/Cargo.lock
new file mode 100644
index 0000000..1318b60
--- /dev/null
+++ b/2017/Cargo.lock
@@ -0,0 +1,233 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "advent_of_code_2017"
+version = "0.1.0"
+dependencies = [
+ "lazy_static",
+ "regex",
+ "structopt",
+ "structopt-derive",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "quote"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
+
+[[package]]
+name = "regex"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+ "thread_local",
+ "utf8-ranges",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7"
+dependencies = [
+ "ucd-util",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "structopt"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "783cb22d520b177a3772e520d04a3c7970d51c3b647ba80739f99be01131b54f"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4da119c9a7a1eccb7c6de0c1eb3f7ed1c11138624d092b3687222aeed8f1375c"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "syn"
+version = "0.11.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
+dependencies = [
+ "quote",
+ "synom",
+ "unicode-xid",
+]
+
+[[package]]
+name = "synom"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "ucd-util"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65bfcbf611b122f2c10eb1bb6172fbc4c2e25df9970330e4d75ce2b5201c9bfc"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"
+
+[[package]]
+name = "utf8-ranges"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/2017/inputs/.gitkeep b/2017/inputs/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/2017/inputs/.gitkeep
diff --git a/2017/inputs/day_1.txt b/2017/inputs/day_1.txt
deleted file mode 100644
index 7a4debd..0000000
--- a/2017/inputs/day_1.txt
+++ /dev/null
@@ -1 +0,0 @@
-21752342814933766938172121674976879111362417653261522357855816893656462449168377359285244818489723869987861247912289729579296691684761143544956991583942215236568961875851755854977946147178746464675227699149925227227137557479769948569788884399379821111382536722699575759474473273939756348992714667963596189765734743169489599125771443348193383566159843593541134749392569865481578359825844394454173219857919349341442148282229689541561169341622222354651397342928678496478671339383923769856425795211323673389723181967933933832711545885653952861879231537976292517866354812943192728263269524735698423336673735158993853556148833861327959262254756647827739145283577793481526768156921138428318939361859721778556264519643435871835744859243167227889562738712953651128317624673985213525897522378259178625416722152155728615936587369515254936828668564857283226439881266871945998796488472249182538883354186573925183152663862683995449671663285775397453876262722567452435914777363522817594741946638986571793655889466419895996924122915777224499481496837343194149123735355268151941712871245863553836953349887831949788869852929147849489265325843934669999391846286319268686789372513976522282587526866148166337215961493536262851512218794139272361292811529888161198799297966893366553115353639298256788819385272471187213579185523521341651117947676785341146235441411441813242514813227821843819424619974979886871646621918865274574538951761567855845681272364646138584716333599843835167373525248547542442942583122624534494442516259616973235858469131159773167334953658673271599748942956981954699444528689628848694446818825465485122869742839711471129862632128635779658365756362863627135983617613332849756371986376967117549251566281992964573929655589313871976556784849231916513831538254812347116253949818633527185174221565279775766742262687713114114344843534958833372634182176866315441583887177759222598853735114191874277711434653854816841589229914164681364497429324463193669337827467661773833517841763711156376147664749175267212562321567728575765844893232718971471289841171642868948852136818661741238178676857381583155547755219837116125995361896562498721571413742
diff --git a/2017/inputs/day_10.txt b/2017/inputs/day_10.txt
deleted file mode 100644
index 6544f8c..0000000
--- a/2017/inputs/day_10.txt
+++ /dev/null
@@ -1 +0,0 @@
-187,254,0,81,169,219,1,190,19,102,255,56,46,32,2,216
diff --git a/2017/inputs/day_11.txt b/2017/inputs/day_11.txt
deleted file mode 100644
index c31c097..0000000
--- a/2017/inputs/day_11.txt
+++ /dev/null
@@ -1 +0,0 @@
-s,s,sw,se,s,nw,nw,ne,n,ne,n,n,n,n,n,n,n,ne,n,ne,ne,se,ne,n,ne,n,n,ne,se,sw,se,s,se,se,se,se,s,se,se,s,se,se,nw,se,se,se,s,s,nw,s,s,se,nw,s,n,s,nw,s,s,s,s,s,s,s,s,s,s,s,sw,s,s,s,s,s,sw,sw,s,sw,s,nw,sw,sw,s,sw,ne,sw,sw,s,se,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,se,sw,nw,nw,sw,sw,sw,s,sw,nw,se,nw,se,nw,sw,nw,nw,se,n,sw,s,s,s,nw,sw,sw,nw,se,nw,sw,sw,sw,nw,sw,sw,nw,nw,nw,nw,ne,n,nw,nw,ne,nw,nw,nw,nw,nw,se,nw,nw,n,nw,nw,nw,sw,n,nw,nw,nw,nw,n,s,nw,ne,nw,s,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,s,sw,n,n,nw,nw,n,n,nw,nw,n,nw,n,n,nw,n,s,n,nw,ne,n,nw,n,nw,n,n,n,n,se,s,n,s,n,s,n,n,n,nw,n,s,n,n,n,n,n,ne,n,n,n,n,s,n,n,n,n,sw,n,n,n,nw,n,n,n,n,nw,se,n,ne,n,n,ne,n,ne,ne,n,n,n,n,ne,n,n,nw,n,n,n,n,ne,se,se,ne,ne,ne,n,ne,n,ne,ne,nw,ne,ne,n,n,n,ne,ne,ne,n,ne,nw,n,s,ne,ne,ne,ne,ne,n,s,ne,ne,ne,n,ne,ne,ne,sw,ne,ne,ne,s,n,ne,ne,n,ne,ne,ne,ne,ne,se,ne,ne,se,ne,ne,ne,ne,se,ne,se,ne,nw,nw,sw,s,n,ne,ne,ne,ne,ne,sw,ne,ne,ne,sw,ne,ne,ne,ne,sw,se,ne,ne,ne,ne,se,s,se,s,nw,ne,ne,n,se,ne,ne,ne,sw,ne,s,s,nw,se,nw,ne,s,ne,se,ne,n,ne,n,s,n,ne,ne,s,ne,se,se,ne,sw,nw,s,n,nw,n,se,ne,se,se,sw,ne,ne,sw,se,se,se,se,sw,ne,se,s,ne,ne,n,se,ne,sw,ne,ne,se,se,nw,se,ne,ne,nw,sw,se,s,s,se,se,se,s,se,nw,se,ne,se,se,se,se,se,se,se,sw,nw,se,se,se,se,se,se,sw,se,sw,ne,se,se,se,se,se,se,se,se,s,se,se,se,se,se,se,ne,se,se,s,sw,s,se,se,se,se,se,se,se,s,se,sw,se,se,n,s,se,s,ne,se,se,se,s,se,s,se,se,ne,se,se,sw,s,se,se,se,se,nw,se,n,ne,s,s,nw,se,se,s,se,n,se,se,s,se,se,s,se,se,ne,se,se,se,s,s,sw,s,s,se,s,se,s,se,s,se,se,se,s,se,s,nw,s,s,se,se,se,se,sw,sw,s,se,s,se,se,s,n,se,se,se,se,s,se,se,s,se,se,se,sw,s,s,s,se,se,s,s,se,s,s,se,s,s,n,s,nw,s,n,s,sw,s,nw,s,s,se,se,sw,s,s,s,sw,se,s,n,s,se,n,s,se,se,se,s,s,s,se,ne,s,se,n,se,s,se,se,s,ne,sw,se,s,s,se,s,s,s,s,s,s,s,s,se,s,nw,s,s,s,s,s,s,s,s,s,s,s,ne,ne,s,s,s,s,s,s,s,s,s,ne,ne,s,s,s,s,s,s,s,s,nw,s,s,se,sw,s,sw,s,s,nw,s,s,s,s,s,s,s,s,s,n,ne,se,s,s,s,s,n,se,s,sw,s,sw,sw,sw,s,s,sw,s,s,s,nw,sw,s,s,s,s,s,ne,sw,s,s,sw,s,s,s,s,s,s,sw,s,s,se,s,s,sw,n,sw,s,s,sw,s,s,s,s,s,sw,s,ne,s,s,s,s,sw,ne,s,ne,n,sw,s,s,s,sw,s,sw,nw,s,s,ne,sw,sw,nw,s,s,sw,sw,s,ne,s,s,sw,se,s,s,sw,s,s,sw,s,sw,sw,s,s,s,s,sw,sw,sw,s,n,ne,s,ne,s,sw,s,se,s,sw,sw,s,sw,sw,sw,sw,s,s,s,s,se,s,sw,sw,sw,sw,n,s,sw,s,s,sw,sw,s,s,n,sw,s,sw,sw,ne,sw,sw,s,sw,sw,sw,sw,sw,s,s,sw,se,sw,sw,sw,sw,s,s,sw,s,sw,sw,nw,sw,sw,se,sw,s,s,nw,nw,s,s,sw,sw,s,n,s,sw,sw,se,s,sw,sw,ne,sw,sw,sw,sw,sw,ne,sw,s,sw,sw,n,sw,sw,sw,sw,s,sw,sw,sw,sw,sw,n,nw,s,sw,s,s,n,ne,sw,sw,sw,sw,n,sw,se,sw,sw,s,se,sw,sw,sw,sw,sw,sw,s,ne,ne,ne,sw,sw,sw,ne,s,sw,sw,sw,sw,nw,s,sw,sw,s,s,sw,sw,n,nw,nw,sw,sw,sw,se,nw,nw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,n,sw,sw,sw,nw,nw,se,sw,sw,sw,sw,sw,ne,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,s,sw,sw,se,sw,s,sw,sw,nw,nw,nw,sw,sw,nw,sw,se,ne,sw,sw,sw,sw,ne,sw,sw,nw,sw,se,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,n,nw,sw,sw,sw,s,sw,sw,nw,n,s,sw,n,nw,nw,sw,sw,nw,sw,sw,se,sw,sw,nw,sw,sw,s,sw,nw,sw,nw,sw,nw,nw,nw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,sw,nw,nw,ne,n,nw,sw,sw,nw,sw,sw,nw,nw,nw,sw,sw,sw,ne,s,sw,nw,nw,sw,nw,sw,s,nw,n,nw,sw,sw,nw,nw,sw,nw,nw,n,sw,nw,sw,nw,sw,n,sw,nw,sw,sw,sw,sw,n,sw,n,nw,nw,s,sw,se,sw,sw,nw,n,sw,sw,sw,n,sw,nw,sw,ne,nw,sw,sw,s,n,nw,sw,nw,nw,nw,sw,sw,sw,nw,nw,ne,sw,s,sw,nw,n,sw,sw,sw,nw,ne,ne,sw,nw,nw,sw,s,s,sw,sw,nw,ne,sw,nw,sw,nw,nw,sw,sw,sw,sw,nw,nw,s,se,nw,sw,nw,ne,s,nw,nw,ne,sw,nw,nw,n,nw,nw,sw,sw,sw,nw,nw,nw,sw,nw,nw,n,sw,sw,nw,s,n,sw,nw,nw,sw,nw,n,nw,nw,nw,nw,nw,nw,sw,sw,n,n,sw,sw,nw,nw,nw,nw,ne,nw,nw,nw,sw,nw,nw,nw,nw,ne,nw,nw,nw,nw,n,nw,nw,nw,s,nw,nw,sw,nw,s,nw,ne,ne,nw,nw,sw,nw,nw,nw,nw,sw,nw,se,sw,nw,sw,nw,nw,ne,nw,n,nw,nw,sw,nw,nw,nw,sw,nw,ne,s,nw,nw,sw,s,nw,sw,sw,nw,nw,nw,sw,s,nw,nw,nw,nw,se,nw,s,nw,nw,nw,se,ne,ne,nw,nw,nw,nw,nw,sw,nw,ne,ne,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,ne,nw,nw,s,nw,nw,ne,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,nw,nw,ne,nw,n,nw,nw,ne,n,nw,sw,nw,n,nw,n,sw,nw,ne,s,se,n,ne,se,nw,ne,nw,ne,nw,ne,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,ne,nw,s,se,nw,n,n,nw,ne,nw,nw,nw,nw,ne,nw,nw,s,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,n,nw,nw,s,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,sw,n,nw,nw,nw,nw,nw,nw,nw,s,nw,se,n,n,n,nw,se,nw,nw,s,s,nw,nw,n,nw,nw,s,nw,nw,nw,se,nw,nw,nw,se,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,n,nw,n,ne,nw,nw,nw,se,ne,nw,nw,nw,n,nw,nw,ne,n,n,nw,nw,sw,nw,nw,nw,nw,se,nw,n,s,nw,nw,n,n,nw,se,n,nw,nw,nw,n,nw,nw,nw,n,nw,se,n,se,sw,s,n,s,nw,nw,nw,nw,n,n,s,nw,nw,se,nw,nw,se,nw,n,n,nw,n,se,nw,n,n,nw,n,nw,n,nw,nw,n,nw,n,s,nw,nw,nw,nw,ne,ne,se,sw,nw,n,n,nw,s,n,nw,nw,n,n,nw,n,nw,nw,nw,nw,nw,n,nw,n,n,sw,n,se,nw,n,n,nw,n,nw,nw,n,s,sw,nw,ne,nw,n,sw,nw,nw,n,nw,sw,s,nw,n,n,nw,se,n,nw,n,ne,n,nw,nw,n,nw,nw,n,nw,n,nw,nw,nw,n,se,sw,nw,nw,nw,sw,nw,nw,nw,nw,se,n,n,ne,n,nw,nw,n,nw,nw,n,sw,n,se,nw,nw,n,n,n,nw,n,nw,n,nw,n,ne,n,n,nw,n,n,n,nw,se,sw,n,sw,n,nw,nw,n,n,n,se,nw,sw,ne,n,se,nw,nw,n,n,n,n,n,n,nw,n,n,nw,sw,nw,n,sw,n,n,se,sw,n,n,n,nw,sw,nw,n,n,n,n,nw,n,n,nw,n,s,n,n,sw,n,nw,ne,s,nw,ne,n,n,n,ne,s,n,n,n,n,n,n,se,nw,nw,n,n,nw,n,n,s,se,n,nw,n,n,n,n,n,n,nw,n,n,n,nw,nw,nw,n,n,n,nw,nw,sw,n,se,n,s,n,n,n,n,n,n,ne,n,se,n,n,n,se,n,nw,n,nw,n,n,n,n,n,n,n,nw,n,n,n,n,n,n,ne,n,n,nw,n,n,sw,n,nw,n,n,sw,n,n,n,nw,se,n,n,n,nw,n,s,n,n,n,n,n,n,n,s,n,n,n,n,nw,n,n,sw,sw,nw,n,nw,nw,sw,n,n,n,n,n,n,n,n,n,n,n,s,n,n,n,n,nw,n,n,n,n,n,n,n,s,n,nw,n,sw,nw,ne,n,nw,n,sw,n,n,n,n,n,ne,n,nw,n,n,n,n,n,n,n,ne,n,n,n,n,ne,n,n,n,n,ne,n,n,n,n,ne,n,n,s,n,n,se,n,n,n,n,n,n,n,nw,n,ne,nw,sw,ne,nw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,ne,n,n,se,n,ne,n,ne,n,n,n,n,ne,n,ne,se,s,ne,nw,se,n,n,n,n,se,n,n,ne,s,n,nw,n,nw,nw,n,n,n,n,n,n,n,n,n,s,n,n,n,s,n,nw,n,n,n,n,n,n,n,n,n,n,n,n,ne,ne,n,sw,n,se,n,n,n,n,n,n,n,se,n,ne,n,ne,n,n,n,n,n,sw,n,n,s,nw,n,n,n,ne,ne,n,n,n,ne,n,n,se,n,n,n,n,ne,n,n,n,s,n,se,ne,n,n,n,n,n,n,n,n,s,ne,s,nw,n,ne,s,ne,n,n,n,n,ne,n,n,n,n,n,n,n,n,n,ne,n,se,ne,n,ne,ne,ne,ne,se,n,n,ne,n,n,n,n,nw,ne,sw,ne,n,n,ne,se,n,n,n,n,se,n,n,n,ne,n,se,ne,ne,n,s,nw,n,ne,n,n,nw,n,n,ne,n,ne,n,sw,n,se,n,ne,nw,ne,ne,n,n,n,ne,n,ne,nw,n,s,n,n,n,n,ne,n,n,ne,n,nw,n,n,n,ne,n,s,n,n,n,n,n,ne,ne,n,sw,n,ne,n,n,sw,ne,n,ne,ne,n,n,ne,ne,ne,n,ne,ne,ne,n,ne,sw,n,n,ne,ne,ne,se,n,ne,ne,ne,n,nw,n,ne,n,n,n,ne,n,n,n,n,n,ne,ne,n,ne,s,nw,ne,n,ne,ne,ne,n,n,n,n,nw,n,n,ne,ne,ne,n,ne,n,ne,ne,n,ne,ne,nw,ne,nw,n,n,ne,se,ne,se,ne,n,nw,n,n,s,n,se,ne,ne,n,ne,n,ne,s,n,n,sw,ne,ne,se,n,ne,n,n,n,n,sw,ne,ne,nw,n,n,ne,ne,ne,n,ne,n,sw,ne,ne,ne,ne,n,ne,se,ne,sw,n,n,n,ne,ne,sw,ne,ne,ne,n,ne,ne,n,ne,se,ne,s,nw,n,sw,n,ne,n,n,n,n,ne,n,sw,ne,ne,nw,n,ne,se,ne,ne,ne,ne,n,ne,ne,n,ne,n,ne,ne,ne,n,s,s,ne,ne,ne,s,ne,ne,ne,sw,n,n,ne,n,s,ne,n,n,nw,n,se,sw,ne,ne,ne,s,n,n,ne,ne,n,ne,ne,nw,ne,ne,ne,s,se,ne,ne,ne,n,ne,nw,n,ne,ne,sw,n,n,ne,ne,ne,n,ne,ne,se,ne,ne,n,ne,ne,ne,sw,s,n,n,n,se,n,s,ne,ne,ne,sw,ne,ne,se,ne,ne,ne,ne,ne,n,s,se,ne,ne,ne,n,ne,sw,se,s,ne,n,ne,ne,n,n,n,ne,n,ne,ne,se,ne,ne,n,ne,ne,ne,ne,ne,s,ne,ne,ne,nw,ne,ne,ne,ne,ne,n,ne,s,ne,ne,ne,n,ne,sw,n,n,n,ne,ne,n,ne,s,n,n,n,ne,ne,n,ne,ne,ne,sw,se,sw,ne,ne,s,ne,nw,ne,nw,se,nw,n,ne,se,n,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,ne,ne,ne,sw,ne,ne,ne,ne,n,ne,s,ne,s,ne,ne,n,ne,se,ne,ne,nw,n,ne,ne,ne,s,ne,sw,ne,n,ne,ne,n,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,se,n,ne,ne,ne,ne,sw,ne,n,ne,se,ne,ne,ne,se,se,ne,sw,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,ne,sw,n,n,ne,ne,n,ne,ne,ne,sw,ne,n,ne,ne,ne,se,ne,ne,nw,nw,sw,ne,ne,ne,ne,sw,ne,se,ne,n,ne,ne,ne,nw,ne,ne,ne,ne,ne,ne,sw,ne,ne,nw,ne,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,s,sw,ne,ne,s,sw,sw,ne,ne,ne,nw,ne,n,se,ne,ne,ne,ne,n,ne,nw,ne,ne,n,se,ne,ne,ne,ne,sw,ne,ne,s,ne,s,ne,ne,ne,ne,ne,ne,ne,nw,ne,ne,ne,se,ne,ne,ne,ne,se,ne,ne,sw,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,n,ne,ne,nw,se,ne,ne,ne,ne,se,ne,sw,ne,ne,n,se,ne,ne,se,ne,sw,nw,ne,ne,ne,ne,ne,ne,s,ne,se,sw,ne,s,ne,se,se,se,ne,ne,s,ne,ne,s,ne,se,ne,nw,s,ne,se,ne,ne,ne,sw,ne,se,ne,ne,ne,sw,ne,ne,ne,ne,nw,ne,ne,nw,ne,ne,s,ne,ne,se,ne,ne,nw,ne,ne,se,se,se,ne,se,ne,se,se,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,s,se,ne,sw,ne,ne,se,ne,ne,ne,ne,s,ne,se,ne,ne,se,n,n,ne,se,s,ne,s,ne,se,nw,ne,se,ne,ne,se,ne,se,se,ne,ne,se,ne,ne,ne,n,se,ne,ne,ne,ne,s,se,se,n,ne,se,se,ne,ne,se,ne,se,se,ne,ne,sw,ne,ne,ne,ne,ne,ne,nw,se,ne,se,ne,se,ne,s,ne,ne,sw,ne,ne,ne,ne,ne,s,se,ne,ne,s,se,ne,ne,ne,nw,ne,ne,ne,se,ne,ne,ne,ne,se,ne,ne,ne,se,ne,ne,se,n,s,ne,ne,ne,se,s,n,se,se,ne,sw,ne,ne,n,ne,se,n,se,n,s,n,s,ne,se,ne,ne,ne,ne,n,ne,se,sw,se,ne,se,nw,ne,ne,ne,se,se,ne,ne,ne,ne,ne,ne,ne,ne,nw,ne,n,s,ne,ne,ne,ne,ne,se,se,se,se,sw,s,n,ne,s,ne,ne,sw,se,se,ne,ne,ne,ne,ne,ne,se,se,s,ne,se,ne,nw,n,ne,se,se,ne,se,ne,ne,se,se,se,ne,ne,sw,se,nw,se,nw,se,se,se,se,ne,n,n,ne,se,se,ne,ne,se,ne,ne,se,ne,sw,ne,se,ne,n,se,nw,sw,ne,ne,se,ne,se,ne,ne,se,ne,se,ne,ne,ne,se,ne,se,se,n,nw,ne,ne,ne,ne,sw,n,ne,ne,ne,nw,ne,se,se,ne,ne,s,nw,n,ne,ne,ne,ne,ne,ne,ne,se,ne,sw,se,ne,s,n,ne,ne,se,ne,se,se,ne,se,ne,se,se,ne,se,se,se,ne,ne,ne,ne,se,ne,ne,nw,ne,ne,se,ne,s,se,ne,se,ne,ne,ne,ne,n,se,ne,se,se,ne,ne,ne,nw,ne,se,se,nw,ne,se,se,ne,sw,ne,ne,ne,n,ne,ne,ne,n,se,ne,se,ne,n,n,se,ne,se,se,se,ne,se,se,sw,se,ne,se,ne,sw,sw,ne,ne,ne,s,n,ne,ne,nw,ne,n,se,se,se,se,ne,nw,ne,ne,ne,se,ne,se,n,n,se,n,se,se,se,se,se,ne,sw,ne,se,ne,se,se,se,ne,sw,se,s,se,se,ne,se,se,se,n,ne,se,se,ne,ne,ne,ne,se,se,ne,se,se,ne,se,ne,ne,se,se,nw,se,se,ne,se,sw,se,ne,n,ne,se,se,se,nw,se,se,se,ne,se,ne,se,se,ne,se,se,ne,ne,se,se,sw,ne,se,se,sw,se,se,s,ne,ne,se,ne,s,ne,se,se,ne,se,nw,n,se,se,s,se,ne,se,ne,ne,sw,ne,ne,n,se,s,n,ne,se,se,ne,nw,ne,ne,se,se,ne,sw,ne,ne,ne,se,sw,ne,se,se,ne,n,ne,se,nw,se,se,se,ne,se,ne,ne,ne,s,ne,nw,ne,ne,ne,se,se,se,nw,se,ne,se,se,se,ne,se,ne,se,se,se,ne,se,se,se,n,se,ne,ne,se,se,se,se,sw,ne,se,se,se,ne,se,nw,n,ne,ne,ne,sw,n,se,n,se,se,n,ne,se,se,ne,se,ne,se,nw,se,se,se,s,sw,ne,se,sw,se,se,se,ne,ne,se,ne,se,se,se,se,ne,se,se,ne,se,se,ne,se,ne,se,se,se,ne,se,ne,ne,se,s,ne,ne,nw,se,ne,n,ne,se,se,ne,se,n,ne,ne,se,ne,se,se,se,ne,se,se,ne,ne,nw,ne,s,se,se,se,se,se,sw,nw,n,se,se,s,se,se,se,nw,se,n,nw,se,ne,ne,se,nw,se,se,se,se,se,se,ne,se,se,se,se,ne,se,se,ne,se,se,se,se,ne,se,se,se,se,ne,ne,nw,se,se,se,se,se,se,s,se,se,se,n,se,ne,ne,ne,se,se,se,se,ne,se,se,ne,se,se,se,se,se,se,se,sw,se,ne,ne,s,se,se,ne,se,se,se,ne,ne,se,se,se,se,se,se,se,s,sw,se,ne,se,se,se,se,se,se,se,n,se,sw,se,se,se,ne,se,se,se,se,se,s,ne,nw,se,se,se,se,se,sw,se,ne,sw,se,ne,se,se,ne,se,ne,n,ne,se,se,ne,se,ne,nw,nw,se,se,se,se,se,se,se,se,se,se,sw,se,se,se,se,se,nw,se,n,se,se,ne,se,se,nw,se,se,se,se,se,ne,nw,nw,se,se,se,se,ne,se,se,se,ne,ne,se,se,se,se,se,se,se,se,se,se,se,sw,s,se,se,ne,nw,se,se,se,se,se,se,sw,sw,se,ne,sw,nw,se,se,se,se,se,n,se,se,ne,se,se,se,nw,se,ne,se,se,se,s,se,se,n,se,se,ne,se,s,se,ne,se,se,se,nw,se,se,n,se,s,n,se,se,se,nw,se,s,sw,se,ne,se,se,se,nw,se,sw,se,se,sw,s,se,n,ne,sw,se,n,nw,se,ne,se,se,se,se,se,ne,se,se,se,se,se,se,se,se,n,se,se,se,ne,se,se,se,sw,se,nw,se,se,ne,se,se,se,se,n,ne,se,se,se,n,se,se,se,se,se,se,se,s,s,se,se,se,s,ne,se,se,se,se,se,se,se,se,se,se,se,se,se,n,n,se,se,se,se,se,se,se,se,se,s,sw,se,se,se,n,nw,se,se,se,se,ne,ne,se,n,se,se,sw,ne,sw,se,se,ne,se,se,se,se,se,se,se,se,se,n,se,nw,se,se,se,sw,s,se,se,se,se,se,se,se,se,ne,s,se,se,se,nw,s,se,n,se,se,se,s,sw,se,se,se,se,nw,ne,se,se,se,ne,s,se,sw,se,se,se,se,se,se,s,se,s,se,sw,se,ne,s,se,se,nw,se,se,nw,n,se,se,se,nw,nw,se,se,se,se,se,nw,s,se,se,ne,se,se,se,se,se,se,se,sw,se,se,se,se,se,se,nw,se,se,s,se,se,se,se,s,s,se,se,se,s,se,se,se,s,s,n,se,se,se,se,n,n,se,sw,nw,se,s,se,nw,se,s,nw,nw,se,s,se,se,se,se,se,se,sw,nw,se,se,s,se,se,se,se,se,se,n,n,ne,se,s,s,se,se,se,se,se,se,s,se,se,s,se,se,n,se,se,s,se,s,se,s,se,sw,se,se,sw,se,ne,se,sw,se,se,se,s,nw,se,ne,n,se,se,nw,se,ne,se,se,se,s,se,se,nw,se,s,se,se,se,nw,se,se,sw,s,se,s,se,se,nw,s,se,se,s,se,se,s,se,se,se,se,se,sw,s,se,se,s,sw,nw,ne,nw,se,nw,se,s,se,se,se,se,se,s,se,se,se,se,sw,s,sw,se,se,se,s,sw,sw,s,n,se,s,se,nw,se,se,se,ne,se,se,se,se,s,se,se,s,nw,s,se,s,nw,se,se,se,se,se,n,s,se,ne,n,se,se,nw,se,s,se,n,se,nw,s,s,s,se,nw,s,s,se,s,se,se,nw,s,se,s,se,se,se,se,n,se,se,s,se,se,se,se,s,s,se,s,se,se,s,se,s,n,se,n,se,se,s,se,s,se,se,s,s,se,se,s,se,se,se,se,s,s,s,se,s,nw,s,se,se,se,ne,nw,se,se,se,se,se,se,n,se,se,se,se,se,se,nw,se,se,se,s,s,nw,se,ne,se,s,se,ne,se,se,nw,se,se,se,sw,n,se,sw,se,se,nw,ne,s,se,sw,se,s,s,s,se,s,se,n,sw,sw,se,se,se,ne,se,s,se,sw,n,se,se,se,s,s,se,s,se,n,s,ne,se,se,s,se,se,s,sw,s,se,se,ne,s,n,se,se,se,s,s,s,se,se,s,s,ne,se,s,se,nw,se,s,se,se,s,s,s,se,n,se,se,ne,se,se,s,sw,se,s,ne,se,se,se,s,s,se,se,se,se,se,se,se,s,ne,se,s,se,s,s,nw,nw,s,s,nw,s,se,se,ne,se,se,se,n,s,s,s,s,se,se,s,s,s,nw,sw,se,s,s,n,se,s,s,s,s,n,s,se,s,s,se,sw,nw,nw,se,se,se,s,sw,se,se,se,s,se,se,s,s,s,se,ne,s,se,s,s,se,s,ne,se,se,se,se,se,se,ne,se,ne,s,se,se,se,se,se,s,s,s,n,se,nw,nw,s,se,sw,se,se,s,se,se,nw,s,s,s,ne,nw,se,se,se,n,ne,se,s,se,ne,se,ne,sw,ne,se,s,sw,se,se,se,s,s,ne,s,se,se,sw,s,s,s,s,se,se,s,s,se,s,se,s,s,nw,s,s,s,s,nw,nw,se,s,s,sw,s,se,nw,s,se,s,se,s,se,n,sw,n,ne,s,s,s,se,se,nw,s,n,se,s,s,s,se,s,s,s,sw,se,se,se,se,se,se,sw,s,nw,se,n,s,se,sw,nw,se,se,se,se,s,ne,se,ne,s,s,se,se,se,s,s,s,s,n,se,sw,n,s,nw,s,se,s,se,se,se,s,se,n,s,se,nw,se,s,s,se,se,se,s,s,n,s,se,s,s,s,se,se,se,s,s,s,s,se,se,s,se,s,s,s,s,s,s,s,s,nw,nw,se,n,sw,s,s,ne,s,nw,s,se,s,s,sw,s,se,nw,se,s,s,s,s,s,s,s,se,se,s,se,ne,s,se,se,se,s,s,s,se,ne,s,ne,s,s,se,s,s,ne,s,s,se,s,s,s,s,s,se,n,sw,n,s,se,se,s,s,nw,s,sw,se,n,s,se,s,s,sw,s,s,s,s,s,nw,s,nw,se,se,s,s,nw,se,s,s,sw,sw,s,se,se,s,s,s,se,s,se,s,s,s,se,s,ne,s,s,se,s,s,se,se,s,s,s,n,s,s,s,s,se,s,s,se,s,s,se,s,s,s,nw,se,s,s,se,se,se,nw,s,se,ne,s,se,s,n,nw,se,sw,se,se,s,se,s,se,s,sw,s,se,se,se,nw,s,s,s,s,sw,s,s,s,n,s,sw,s,s,se,se,se,s,se,s,s,s,se,s,se,se,nw,s,s,se,ne,s,se,s,se,se,se,s,s,s,s,se,s,s,s,s,se,s,s,s,s,se,se,se,sw,s,se,s,s,nw,s,s,se,s,se,s,se,s,sw,s,ne,s,s,ne,s,sw,s,s,ne,n,s,se,se,s,s,s,s,se,se,s,s,se,se,s,nw,s,s,n,s,ne,se,n,s,s,s,s,s,sw,s,n,n,s,s,sw,s,sw,n,se,s,s,s,s,nw,se,s,s,s,s,s,s,se,s,s,sw,s,s,s,se,se,ne,s,s,s,ne,se,se,s,s,se,n,n,se,n,sw,s,sw,se,nw,n,s,n,s,nw,sw,s,se,se,s,s,s,s,s,s,se,s,s,se,s,s,s,s,s,sw,se,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,nw,se,s,se,s,s,s,s,s,s,s,s,se,nw,se,s,s,s,se,nw,s,s,ne,s,s,se,se,sw,s,ne,n,s,s,se,n,ne,se,s,s,s,s,nw,s,ne,s,s,n,s,s,s,s,s,se,s,s,s,s,se,s,s,s,s,n,s,se,s,n,s,s,sw,s,s,s,s,s,se,s,ne,s,sw,n,s,n,se,nw,nw,s,sw,ne,n,sw,n,sw,s,n,s,se,s,se,s,s,s,s,nw,se,s,s,s,se,sw,s,se,s,s,s,s,s,s,s,s,s,s,se,ne,nw,s,s,s,s,s,se,s,ne,sw,se,se,sw,sw,s,se,ne,s,nw,ne,n,s,s,s,s,s,ne,s,s,s,s,se,s,se,s,s,s,sw,s,s,se,s,s,s,s,n,se,s,ne,s,s,s,s,se,sw,se,s,s,s,s,s,se,s,n,n,s,s,sw,s,s,s,s,ne,s,sw,s,s,s,s,s,sw,s,s,n,s,n,s,s,s,n,se,s,s,s,s,s,s,s,s,s,s,s,s,ne,sw,s,s,ne,nw,se,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,sw,s,s,s,nw,s,s,se,se,s,n,s,se,s,s,s,se,s,nw,s,s,s,s,se,s,s,s,ne,s,s,s,se,s,s,s,s,s,s,s,n,s,s,s,s,s,ne,s,s,s,s,sw,s,s,s,s,s,s,s,s,s,s,ne,se,sw,s,sw,s,s,s,se,s,s,s,s,se,s,s,ne,s,s,s,s,se,ne,se,n,n,n,n,n,n,nw,nw,sw,sw,nw,ne,sw,ne,sw,nw,sw,ne,s,sw,sw,sw,sw,s,sw,sw,sw,sw,nw,s,s,s,nw,s,s,s,se,s,se,s,se,n,se,s,se,s,nw,sw,se,se,s,se,se,se,se,se,se,se,se,nw,se,se,se,se,se,ne,se,ne,s,se,se,se,se,se,ne,ne,ne,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,s,ne,nw,ne,sw,ne,ne,ne,ne,ne,ne,ne,se,n,ne,ne,se,ne,ne,n,se,ne,ne,sw,ne,ne,n,ne,n,ne,n,n,n,sw,n,ne,n,ne,ne,se,ne,n,n,ne,n,n,s,n,n,ne,n,s,n,n,n,s,n,ne,n,n,n,n,n,se,nw,nw,n,n,nw,n,se,n,sw,s,n,nw,nw,se,nw,nw,nw,nw,n,n,se,n,n,n,nw,nw,n,nw,ne,n,nw,n,nw,sw,nw,n,n,n,ne,se,nw,n,nw,n,n,nw,n,nw,n,nw,n,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,se,sw,sw,nw,se,nw,s,nw,nw,nw,nw,nw,nw,nw,s,n,nw,nw,nw,sw,nw,se,nw,nw,nw,nw,sw,sw,nw,s,sw,nw,s,nw,nw,sw,nw,sw,sw,nw,sw,se,nw,nw,nw,nw,nw,sw,sw,nw,se,sw,sw,nw,sw,nw,se,sw,nw,nw,nw,n,nw,sw,nw,ne,nw,nw,s,nw,nw,nw,sw,nw,sw,nw,sw,sw,sw,sw,n,sw,nw,s,sw,nw,ne,sw,n,s,sw,sw,sw,sw,ne,sw,sw,sw,nw,sw,s,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,se,n,sw,s,sw,sw,n,sw,sw,s,s,sw,sw,sw,sw,sw,sw,sw,s,s,sw,sw,sw,ne,sw,sw,s,sw,s,nw,sw,sw,se,se,sw,sw,sw,s,s,s,sw,nw,sw,nw,s,sw,sw,sw,sw,sw,sw,s,sw,s,sw,sw,sw,s,sw,s,sw,s,sw,s,sw,s,sw,s,sw,sw,s,s,s,sw,n,sw,s,n,s,s,s,sw,s,n,s,sw,sw,sw,sw,s,s,s,s,s,s,s,s,sw,sw,s,sw,se,s,s,s,sw,s,s,sw,s,ne,s,s,s,s,s,s,s,s,s,n,se,s,s,nw,s,s,s,se,s,s,s,s,s,s,s,s,s,s,nw,se,s,s,s,sw,s,s,s,s,s,s,s,ne,n,s,se,s,s,s,s,s,s,se,se,nw,nw,s,s,s,s,s,se,sw,s,s,se,s,s,s,s,s,s,s,s,s,n,s,s,s,se,s,s,s,s,s,s,se,s,s,n,s,s,se,s,s,s,se,s,s,nw,s,s,s,n,s,s,se,s,se,s,n,ne,s,s,s,s,se,ne,n,s,se,s,se,s,s,se,s,s,s,s,s,se,s,sw,s,se,se,s,se,s,s,ne,s,ne,ne,se,s,ne,se,s,ne,s,se,ne,se,se,se,sw,s,se,se,se,se,se,n,s,s,se,s,se,s,s,se,se,s,s,se,se,nw,se,ne,s,s,se,se,se,se,se,s,se,ne,se,se,s,ne,se,sw,se,se,se,se,se,nw,se,se,se,se,se,se,se,s,ne,n,sw,ne,se,se,se,se,se,ne,se,se,se,se,se,se,se,se,se,n,se,s,s,se,se,sw,nw,s,se,se,ne,se,se,ne,s,se,se,se,se,se,se,se,se,n,se,se,se,se,se,se,ne,se,ne,nw,se,se,ne,nw,nw,se,se,se,se,sw,se,se,sw,n,se,se,sw,se,se,se,se,nw,se,se,se,se,se,nw,sw,ne,ne,ne,se,ne,ne,nw,se,se,nw,se,se,se,se,se,ne,se,s,se,se,s,ne,se,ne,se,se,se,ne,s,se,ne,ne,ne,ne,se,n,se,se,se,se,ne,se,n,ne,se,se,se,ne,sw,nw,nw,ne,se,ne,se,se,se,n,se,ne,se,se,se,se,ne,se,ne,n,se,se,ne,nw,ne,ne,se,se,n,se,se,s,se,sw,ne,ne,ne,se,se,se,ne,ne,se,n,ne,ne,se,ne,ne,ne,se,ne,sw,n,ne,s,se,se,se,sw,ne,se,se,se,sw,ne,se,ne,ne,ne,sw,ne,ne,s,ne,s,ne,se,ne,ne,se,se,se,nw,ne,ne,ne,se,ne,se,se,ne,ne,ne,se,sw,ne,ne,ne,ne,se,ne,sw,ne,sw,ne,n,nw,sw,ne,ne,ne,sw,ne,se,sw,n,ne,ne,se,n,se,ne,n,ne,se,ne,nw,ne,ne,s,n,se,ne,nw,ne,se,ne,ne,ne,se,ne,se,se,ne,ne,ne,se,se,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,se,nw,ne,ne,ne,ne,ne,ne,ne,se,se,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,ne,ne,nw,n,n,ne,nw,ne,ne,sw,se,ne,s,ne,nw,ne,nw,ne,ne,ne,ne,ne,ne,ne,n,n,ne,n,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,n,n,ne,s,ne,ne,ne,nw,se,ne,nw,nw,ne,n,n,ne,ne,nw,ne,n,ne,sw,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,n,ne,ne,ne,ne,ne,n,n,ne,ne,se,sw,ne,n,ne,n,ne,ne,sw,ne,ne,n,ne,ne,se,sw,ne,ne,ne,s,n,n,s,ne,n,se,ne,ne,sw,s,ne,nw,n,n,ne,nw,ne,n,n,s,s,n,ne,ne,n,n,nw,ne,n,ne,ne,ne,ne,n,s,n,se,sw,se,ne,ne,ne,n,ne,ne,ne,n,nw,ne,n,n,ne,nw,ne,ne,sw,n,n,se,ne,n,ne,nw,se,ne,ne,ne,n,ne,ne,n,ne,ne,ne,ne,n,ne,ne,s,n,s,nw,n,n,nw,ne,ne,ne,s,n,s,ne,ne,ne,n,se,ne,ne,nw,n,n,n,ne,s,sw,n,ne,n,n,sw,n,ne,n,ne,n,sw,ne,ne,ne,sw,n,ne,ne,sw,ne,ne,n,n,se,ne,ne,s,ne,ne,n,nw,s,n,n,ne,nw,sw,ne,n,ne,ne,n,ne,n,se,n,ne,sw,sw,n,n,n,ne,ne,n,ne,n,s,ne,se,ne,nw,n,n,n,n,se,nw,ne,n,n,n,n,nw,nw,ne,n,se,ne,n,n,n,ne,n,ne,ne,ne,sw,n,s,n,n,n,ne,se,n,n,ne,ne,ne,sw,ne,ne,n,n,n,n,n,n,ne,ne,n,s,n,n,n,n,ne,ne,ne,n,n,se,nw,n,n,n,n,s,n,ne,n,n,n,n,n,n,n,n,sw,n,n,ne,n,n,n,s,ne,nw,n,nw,sw,n,n,n,n,s,n,n,ne,n,n,n,n,n,n,n,s,s,n,n,n,ne,n,s,ne,n,se,n,n,n,sw,n,n,n,ne,n,n,n,n,sw,se,n,sw,n,n,n,sw,ne,s,n,n,sw,s,se,n,n,n,n,ne,n,n,n,n,se,n,n,n,n,n,n,se,n,sw,n,n,n,nw,s,sw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,sw,n,n,se,n,nw,se,n,sw,n,n,n,n,n,n,nw,n,n,n,n,n,n,n,n,n,sw,n,nw,ne,n,n,n,n,n,n,n,nw,n,n,sw,n,n,n,n,n,n,n,n,ne,n,s,n,n,n,n,ne,n,s,ne,n,n,n,nw,n,n,n,n,n,se,nw,n,nw,sw,n,n,ne,n,n,n,n,nw,n,n,n,nw,n,n,nw,n,n,n,sw,ne,n,n,s,n,n,n,nw,n,ne,n,nw,n,n,nw,nw,n,nw,nw,n,n,n,nw,sw,n,n,nw,sw,sw,n,nw,n,s,nw,n,s,nw,nw,nw,nw,n,se,n,n,nw,sw,nw,n,nw,n,ne,n,n,nw,nw,n,n,nw,nw,ne,nw,se,nw,nw,sw,n,n,n,sw,sw,n,n,n,n,nw,n,nw,nw,n,nw,n,nw,s,n,n,nw,nw,n,n,nw,n,sw,nw,nw,n,n,nw,nw,s,n,n,n,n,s,nw,n,n,n,n,n,nw,n,n,nw,n,nw,n,n,n,nw,n,n,nw,ne,nw,nw,n,nw,nw,n,n,nw,n,nw,ne,n,nw,n,n,nw,nw,nw,ne,nw,nw,n,n,n,se,ne,n,nw,n,n,n,n,nw,nw,n,nw,n,n,s,n,n,n,n,nw,n,nw,nw,se,n,nw,n,n,nw,nw,nw,nw,n,n,n,s,nw,nw,nw,ne,s,nw,nw,nw,n,nw,nw,sw,nw,n,nw,nw,n,nw,nw,n,nw,sw,n,n,n,n,nw,nw,nw,n,n,n,n,nw,n,n,ne,n,nw,nw,nw,ne,ne,n,n,nw,nw,ne,n,nw,nw,nw,nw,n,n,n,nw,nw,n,n,n,ne,nw,nw,nw,se,n,n,nw,n,nw,n,nw,nw,n,s,nw,n,nw,nw,nw,nw,nw,ne,nw,nw,n,nw,n,n,n,nw,n,n,ne,nw,n,n,nw,sw,nw,nw,nw,nw,nw,nw,nw,nw,s,nw,se,n,nw,nw,nw,nw,nw,nw,s,nw,n,nw,n,nw,nw,nw,nw,nw,se,s,nw,se,nw,n,ne,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,n,ne,nw,se,n,nw,nw,nw,nw,sw,n,nw,nw,n,nw,n,nw,nw,ne,n,nw,n,ne,se,n,sw,nw,ne,nw,sw,nw,ne,n,nw,ne,se,nw,nw,nw,nw,nw,ne,nw,n,nw,s,nw,nw,nw,ne,nw,nw,nw,nw,s,nw,n,sw,s,nw,se,nw,ne,nw,n,nw,sw,nw,n,nw,nw,sw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,s,s,nw,nw,nw,se,nw,nw,nw,nw,sw,nw,nw,n,nw,n,sw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,s,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,sw,nw,nw,nw,nw,nw,s,nw,sw,nw,nw,nw,se,nw,nw,sw,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,n,nw,sw,n,nw,nw,se,nw,sw,se,sw,nw,sw,n,nw,nw,nw,ne,nw,nw,nw,se,nw,ne,ne,nw,nw,nw,nw,nw,s,nw,ne,n,nw,ne,nw,sw,nw,nw,sw,nw,se,nw,nw,ne,nw,ne,nw,sw,sw,nw,nw,nw,nw,nw,sw,nw,nw,nw,se,sw,sw,nw,s,sw,nw,nw,nw,nw,ne,nw,ne,nw,nw,sw,nw,nw,nw,sw,nw,nw,nw,ne,sw,s,nw,ne,nw,nw,se,se,n,nw,nw,sw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,n,nw,sw,nw,s,nw,sw,nw,nw,nw,sw,nw,nw,se,nw,n,nw,nw,ne,sw,nw,ne,nw,se,s,nw,nw,n,n,nw,nw,nw,nw,ne,se,sw,nw,nw,nw,nw,se,nw,nw,nw,sw,nw,nw,s,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,sw,nw,sw,nw,nw,nw,ne,nw,sw,nw,sw,nw,sw,nw,nw,nw,sw,ne,sw,nw,sw,nw,se,nw,se,nw,nw,n,sw,nw,nw,nw,nw,sw,sw,nw,sw,nw,nw,nw,nw,nw,sw,sw,nw,nw,nw,sw,nw,nw,nw,nw,ne,nw,n,nw,sw,sw,nw,nw,nw,nw,nw,sw,nw,sw,nw,sw,sw,nw,nw,sw,sw,nw,nw,nw,ne,sw,ne,sw,sw,nw,nw,nw,nw,nw,nw,nw,sw,se,nw,nw,sw,sw,nw,nw,s,nw,nw,sw,nw,nw,nw,n,sw,nw,sw,sw,n,nw,nw,nw,sw,sw,nw,s,nw,nw,nw,sw,nw,n,nw,nw,nw,nw,n,nw,nw,nw,sw,nw,nw,nw,se,nw,sw,nw,sw,sw,sw,nw,ne,s,sw,ne,nw,nw,s,nw,sw,nw,s,nw,sw,sw,sw,s,nw,se,nw,nw,nw,sw,sw,sw,n,nw,sw,nw,nw,nw,nw,nw,nw,sw,n,nw,nw,nw,s,nw,nw,nw,nw,sw,sw,sw,nw,nw,sw,sw,nw,nw,sw,nw,sw,nw,sw,sw,sw,sw,sw,nw,sw,s,nw,nw,sw,sw,sw,sw,nw,sw,sw,nw,sw,ne,nw,sw,nw,nw,sw,nw,se,nw,n,sw,nw,s,nw,ne,nw,se,sw,sw,sw,n,ne,sw,nw,sw,nw,sw,se,s,sw,sw,nw,sw,sw,nw,nw,sw,nw,sw,nw,sw,nw,sw,sw,sw,ne,sw,nw,sw,nw,nw,sw,nw,n,nw,sw,n,nw,nw,sw,sw,se,nw,nw,sw,nw,sw,sw,sw,sw,nw,se,sw,sw,nw,nw,sw,sw,sw,nw,sw,nw,nw,nw,sw,n,nw,sw,n,nw,s,nw,nw,sw,s,sw,sw,nw,sw,sw,sw,nw,ne,sw,ne,sw,s,sw,sw,nw,sw,nw,sw,sw,nw,nw,nw,sw,sw,ne,sw,n,sw,sw,sw,n,sw,sw,nw,sw,n,n,sw,sw,sw,nw,s,sw,sw,sw,sw,nw,nw,sw,nw,sw,sw,s,sw,nw,sw,sw,sw,s,sw,sw,n,nw,sw,n,sw,sw,s,nw,se,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,nw,sw,sw,sw,s,ne,se,nw,sw,sw,sw,nw,s,nw,nw,sw,sw,s,sw,sw,se,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,sw,nw,nw,nw,nw,nw,nw,s,nw,sw,sw,sw,sw,sw,n,sw,se,sw,sw,s,sw,sw,sw,sw,sw,s,s,sw,s,ne,sw,sw,s,sw,sw,nw,sw,sw,sw,sw,ne,se,sw,sw,sw,sw,n,sw,sw,sw,sw,s,nw,se,nw,nw,sw,sw,nw,se,nw,se,sw,sw,sw,nw,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,ne,se,nw,nw,sw,sw,sw,n,s,sw,nw,nw,se,sw,ne,sw,n,s,sw,sw,nw,sw,sw,sw,sw,sw,ne,sw,sw,se,sw,sw,sw,sw,nw,sw,sw,ne,sw,nw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,se,sw,se,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,se,sw,sw,se,sw,sw,ne
diff --git a/2017/inputs/day_12.txt b/2017/inputs/day_12.txt
deleted file mode 100644
index 80e4ce6..0000000
--- a/2017/inputs/day_12.txt
+++ /dev/null
@@ -1,2000 +0,0 @@
-0 <-> 199, 1774
-1 <-> 350, 1328, 1920
-2 <-> 477, 984, 1419
-3 <-> 1465, 1568
-4 <-> 359, 1047, 1215, 1580, 1969
-5 <-> 613
-6 <-> 49, 617, 1213
-7 <-> 1263
-8 <-> 410
-9 <-> 1224
-10 <-> 1157
-11 <-> 304, 1168, 1875
-12 <-> 868, 891, 1369, 1712
-13 <-> 958, 1371
-14 <-> 1814
-15 <-> 261, 556
-16 <-> 830, 1646, 1901, 1933
-17 <-> 962, 1778
-18 <-> 109, 1229
-19 <-> 239, 1070, 1886, 1930
-20 <-> 327, 1307, 1801, 1905
-21 <-> 943, 1950
-22 <-> 1310
-23 <-> 659, 917
-24 <-> 373
-25 <-> 369
-26 <-> 947, 1023
-27 <-> 338, 1901
-28 <-> 1691
-29 <-> 132, 1219, 1699, 1962
-30 <-> 424, 822, 1419
-31 <-> 1444, 1464
-32 <-> 702, 1517
-33 <-> 1639
-34 <-> 909
-35 <-> 690, 1655
-36 <-> 988, 1149, 1166
-37 <-> 649, 1300, 1441, 1699
-38 <-> 1848
-39 <-> 382
-40 <-> 827, 1203, 1510
-41 <-> 714, 1056, 1184
-42 <-> 1018, 1873
-43 <-> 214
-44 <-> 670, 957
-45 <-> 45
-46 <-> 1195
-47 <-> 559, 1504
-48 <-> 1958
-49 <-> 6
-50 <-> 50, 1248
-51 <-> 1151
-52 <-> 52, 521, 1791
-53 <-> 304
-54 <-> 601
-55 <-> 1328
-56 <-> 939
-57 <-> 1583, 1995
-58 <-> 1422, 1694
-59 <-> 395, 1233
-60 <-> 862, 1811
-61 <-> 345, 1694
-62 <-> 62, 276
-63 <-> 280
-64 <-> 199
-65 <-> 117, 930
-66 <-> 364, 697
-67 <-> 1043
-68 <-> 287, 504, 1554
-69 <-> 498, 706
-70 <-> 77, 333, 713, 972, 1299
-71 <-> 1643
-72 <-> 694
-73 <-> 1381
-74 <-> 955, 1790
-75 <-> 1691, 1743
-76 <-> 76, 638, 1429
-77 <-> 70
-78 <-> 1513
-79 <-> 1397, 1716
-80 <-> 897
-81 <-> 968, 1841
-82 <-> 649
-83 <-> 522
-84 <-> 84, 125, 399, 498
-85 <-> 880, 1554, 1888
-86 <-> 86
-87 <-> 579, 1947
-88 <-> 470, 1451, 1750
-89 <-> 805, 1434
-90 <-> 453
-91 <-> 1208
-92 <-> 688, 1358, 1746
-93 <-> 357, 647
-94 <-> 234, 1270, 1520
-95 <-> 620, 1454
-96 <-> 390, 869, 919
-97 <-> 693, 1783
-98 <-> 259, 529, 782, 1018
-99 <-> 678
-100 <-> 1215
-101 <-> 459, 887
-102 <-> 888, 1135
-103 <-> 1006
-104 <-> 1375, 1422
-105 <-> 1657, 1730
-106 <-> 216, 1434
-107 <-> 333
-108 <-> 468, 1654
-109 <-> 18, 1791
-110 <-> 372
-111 <-> 111, 861, 1383
-112 <-> 1359, 1937
-113 <-> 414, 736, 1446
-114 <-> 426, 1457
-115 <-> 1605, 1672
-116 <-> 116, 713, 1584, 1602
-117 <-> 65
-118 <-> 1611, 1897
-119 <-> 541, 1569
-120 <-> 412, 787
-121 <-> 1344
-122 <-> 698, 752, 1693
-123 <-> 1173, 1576, 1634, 1802
-124 <-> 735
-125 <-> 84, 1032
-126 <-> 126, 225, 332
-127 <-> 1350
-128 <-> 128, 319, 327, 1582
-129 <-> 129, 654, 1260
-130 <-> 1080, 1296, 1350
-131 <-> 131
-132 <-> 29, 856, 1064
-133 <-> 659, 1367, 1776
-134 <-> 648, 1147, 1450, 1910
-135 <-> 411
-136 <-> 353, 935, 1590
-137 <-> 228
-138 <-> 194, 452, 1746, 1794
-139 <-> 139, 494, 1635
-140 <-> 681
-141 <-> 1507
-142 <-> 1288
-143 <-> 845
-144 <-> 1516
-145 <-> 502, 1146, 1155, 1809
-146 <-> 146, 750
-147 <-> 1600
-148 <-> 1206
-149 <-> 829, 1457
-150 <-> 675, 915
-151 <-> 651, 1678
-152 <-> 888, 1503
-153 <-> 498, 960, 1515
-154 <-> 1468
-155 <-> 751
-156 <-> 528, 803, 1655
-157 <-> 1486, 1937
-158 <-> 590, 1876
-159 <-> 159, 185, 1287, 1550, 1588
-160 <-> 160, 548
-161 <-> 1303, 1364
-162 <-> 1855
-163 <-> 1181
-164 <-> 442
-165 <-> 490
-166 <-> 1105
-167 <-> 1121
-168 <-> 760, 1129
-169 <-> 747
-170 <-> 1890
-171 <-> 1644
-172 <-> 593, 665
-173 <-> 1092, 1869
-174 <-> 705
-175 <-> 1345, 1999
-176 <-> 234, 606
-177 <-> 557, 688
-178 <-> 373
-179 <-> 1376
-180 <-> 638
-181 <-> 1996
-182 <-> 1094, 1206, 1748
-183 <-> 931
-184 <-> 880
-185 <-> 159, 1058, 1704
-186 <-> 765, 1178, 1877
-187 <-> 732
-188 <-> 188
-189 <-> 189, 1871
-190 <-> 395, 1639
-191 <-> 441
-192 <-> 192, 1034
-193 <-> 494
-194 <-> 138, 995, 1308
-195 <-> 1024
-196 <-> 226, 1632, 1919
-197 <-> 786
-198 <-> 286, 758, 1852
-199 <-> 0, 64, 1646
-200 <-> 314
-201 <-> 459, 658
-202 <-> 321, 492, 599, 1081, 1460
-203 <-> 225
-204 <-> 331, 462, 600
-205 <-> 898
-206 <-> 734, 1321
-207 <-> 558, 991
-208 <-> 397
-209 <-> 1145, 1886
-210 <-> 1343, 1925
-211 <-> 840, 1409
-212 <-> 1308
-213 <-> 1813
-214 <-> 43, 282
-215 <-> 1270
-216 <-> 106, 836, 1275, 1507
-217 <-> 312
-218 <-> 290, 386, 639, 1920
-219 <-> 784, 1001
-220 <-> 220, 322
-221 <-> 1681
-222 <-> 1616, 1653
-223 <-> 436, 1272, 1625
-224 <-> 1398, 1696
-225 <-> 126, 203, 1182
-226 <-> 196, 1655
-227 <-> 623
-228 <-> 137, 923
-229 <-> 253, 1387
-230 <-> 1374
-231 <-> 389, 1499
-232 <-> 442
-233 <-> 473, 1406
-234 <-> 94, 176
-235 <-> 235
-236 <-> 607, 838, 1487, 1856
-237 <-> 818
-238 <-> 387, 628
-239 <-> 19
-240 <-> 818
-241 <-> 1027, 1524
-242 <-> 1085, 1971
-243 <-> 1942
-244 <-> 299, 390, 916
-245 <-> 906
-246 <-> 246, 534, 763, 1427
-247 <-> 531, 1675
-248 <-> 336, 1832
-249 <-> 1497
-250 <-> 1836
-251 <-> 1309
-252 <-> 581, 1104
-253 <-> 229, 877, 1743
-254 <-> 254, 621
-255 <-> 831, 866, 874
-256 <-> 1942
-257 <-> 906
-258 <-> 1224
-259 <-> 98, 316, 419, 718, 1519
-260 <-> 1223, 1516, 1547, 1845, 1944
-261 <-> 15, 278, 1607, 1808
-262 <-> 1112, 1172
-263 <-> 424
-264 <-> 680
-265 <-> 1968
-266 <-> 804, 1252
-267 <-> 1739
-268 <-> 538, 546
-269 <-> 1265
-270 <-> 270
-271 <-> 1150
-272 <-> 272
-273 <-> 1208, 1537
-274 <-> 1427
-275 <-> 1349, 1829
-276 <-> 62, 906
-277 <-> 461, 634, 1887
-278 <-> 261, 1224, 1904
-279 <-> 303, 537
-280 <-> 63, 280, 926, 931
-281 <-> 862, 1041, 1119, 1863
-282 <-> 214, 488, 644
-283 <-> 646, 1124
-284 <-> 860, 1759
-285 <-> 746
-286 <-> 198
-287 <-> 68, 1045
-288 <-> 332, 1133, 1277, 1628, 1744, 1770, 1934
-289 <-> 1578, 1766
-290 <-> 218, 439, 1661
-291 <-> 596, 1377, 1620
-292 <-> 700, 848, 1099
-293 <-> 293, 1592, 1938
-294 <-> 653, 1948
-295 <-> 1505, 1936
-296 <-> 625, 925
-297 <-> 1105, 1185
-298 <-> 298, 544, 1444
-299 <-> 244, 933, 1012
-300 <-> 300, 1461, 1883
-301 <-> 880, 1698
-302 <-> 1221
-303 <-> 279, 375
-304 <-> 11, 53, 967, 1362
-305 <-> 777
-306 <-> 344
-307 <-> 582, 770
-308 <-> 792, 1895
-309 <-> 539
-310 <-> 390, 1482
-311 <-> 441, 1294
-312 <-> 217, 743
-313 <-> 1522
-314 <-> 200, 502, 835, 1084, 1134
-315 <-> 1970
-316 <-> 259
-317 <-> 1302, 1437
-318 <-> 365
-319 <-> 128, 976
-320 <-> 1056, 1466, 1778
-321 <-> 202
-322 <-> 220, 1431
-323 <-> 838, 1465, 1895
-324 <-> 443
-325 <-> 1056
-326 <-> 463, 1741, 1761
-327 <-> 20, 128, 681, 1797
-328 <-> 328, 348
-329 <-> 378, 1738
-330 <-> 459
-331 <-> 204, 331
-332 <-> 126, 288
-333 <-> 70, 107, 1747
-334 <-> 517, 614
-335 <-> 1259
-336 <-> 248, 550, 1485
-337 <-> 337
-338 <-> 27, 1212, 1264
-339 <-> 430, 963
-340 <-> 769
-341 <-> 341
-342 <-> 593, 718, 895
-343 <-> 569
-344 <-> 306, 1440, 1650, 1742
-345 <-> 61, 1006, 1664
-346 <-> 448, 1928
-347 <-> 1022, 1052
-348 <-> 328, 1232
-349 <-> 1232
-350 <-> 1, 526, 1086, 1821
-351 <-> 584
-352 <-> 518, 686, 1324, 1437
-353 <-> 136, 936
-354 <-> 1470
-355 <-> 1173, 1814
-356 <-> 698
-357 <-> 93
-358 <-> 737, 986, 1169
-359 <-> 4
-360 <-> 363
-361 <-> 417, 841
-362 <-> 928
-363 <-> 360, 1751
-364 <-> 66, 364, 1596
-365 <-> 318, 1766
-366 <-> 366
-367 <-> 367
-368 <-> 1897
-369 <-> 25, 369, 1460
-370 <-> 370
-371 <-> 1568
-372 <-> 110, 582
-373 <-> 24, 178, 1924
-374 <-> 374
-375 <-> 303
-376 <-> 1331, 1990
-377 <-> 388, 601, 837
-378 <-> 329
-379 <-> 623
-380 <-> 671
-381 <-> 938
-382 <-> 39, 1458
-383 <-> 383, 1490, 1763, 1844
-384 <-> 832
-385 <-> 745, 1673
-386 <-> 218, 779
-387 <-> 238
-388 <-> 377, 1817
-389 <-> 231, 656, 1038, 1960
-390 <-> 96, 244, 310, 721, 1094, 1501
-391 <-> 438, 819, 1870
-392 <-> 697
-393 <-> 443, 1275, 1463
-394 <-> 480
-395 <-> 59, 190, 1117, 1997
-396 <-> 595
-397 <-> 208, 397, 1727
-398 <-> 1153
-399 <-> 84
-400 <-> 825, 1693
-401 <-> 812
-402 <-> 1191
-403 <-> 1446, 1820
-404 <-> 442, 871, 1637
-405 <-> 426, 1067
-406 <-> 460, 1290
-407 <-> 1951
-408 <-> 1335, 1391, 1897
-409 <-> 984, 1217
-410 <-> 8, 1607
-411 <-> 135, 411, 454, 1393
-412 <-> 120
-413 <-> 1208
-414 <-> 113
-415 <-> 415, 1803
-416 <-> 428
-417 <-> 361
-418 <-> 1129
-419 <-> 259
-420 <-> 628
-421 <-> 1485
-422 <-> 1110, 1785
-423 <-> 1418
-424 <-> 30, 263
-425 <-> 1497
-426 <-> 114, 405, 780
-427 <-> 427
-428 <-> 416, 782
-429 <-> 429
-430 <-> 339, 1513
-431 <-> 886, 1408
-432 <-> 586, 1725
-433 <-> 889, 1753, 1881
-434 <-> 1078, 1120
-435 <-> 660, 1194, 1662
-436 <-> 223, 1332
-437 <-> 1487
-438 <-> 391
-439 <-> 290
-440 <-> 1828
-441 <-> 191, 311, 1003, 1561, 1702
-442 <-> 164, 232, 404
-443 <-> 324, 393
-444 <-> 1215, 1251
-445 <-> 792
-446 <-> 1015, 1392
-447 <-> 777
-448 <-> 346, 1097
-449 <-> 1117
-450 <-> 1395
-451 <-> 1414, 1845
-452 <-> 138
-453 <-> 90, 453
-454 <-> 411
-455 <-> 1801
-456 <-> 456, 791, 902, 1111
-457 <-> 457, 1075, 1384
-458 <-> 770, 1600
-459 <-> 101, 201, 330, 1108
-460 <-> 406, 1529
-461 <-> 277, 839, 1552
-462 <-> 204
-463 <-> 326, 1899
-464 <-> 1098
-465 <-> 764, 1630, 1779
-466 <-> 627
-467 <-> 904
-468 <-> 108, 1849
-469 <-> 469, 603, 780
-470 <-> 88, 1276, 1533
-471 <-> 1492
-472 <-> 472, 1048, 1409, 1518, 1758
-473 <-> 233, 1413, 1826
-474 <-> 780
-475 <-> 1005, 1968
-476 <-> 809
-477 <-> 2
-478 <-> 753
-479 <-> 479, 1296, 1615
-480 <-> 394, 775, 1623
-481 <-> 774, 1604
-482 <-> 763
-483 <-> 522, 591, 1344
-484 <-> 894, 1219
-485 <-> 507, 1114, 1250, 1351
-486 <-> 1099, 1879
-487 <-> 487
-488 <-> 282, 1164, 1189
-489 <-> 900, 1889
-490 <-> 165, 918, 1007
-491 <-> 1800
-492 <-> 202
-493 <-> 615, 899, 1200, 1326
-494 <-> 139, 193
-495 <-> 704, 1988
-496 <-> 496
-497 <-> 1149, 1216
-498 <-> 69, 84, 153
-499 <-> 1125, 1149
-500 <-> 642
-501 <-> 524, 1176
-502 <-> 145, 314
-503 <-> 1330, 1626
-504 <-> 68, 699
-505 <-> 672
-506 <-> 1083
-507 <-> 485, 1743
-508 <-> 520, 1236, 1296
-509 <-> 1676
-510 <-> 875, 1066
-511 <-> 511
-512 <-> 512, 1240
-513 <-> 705, 812
-514 <-> 1758
-515 <-> 1165, 1168
-516 <-> 811
-517 <-> 334, 1132, 1339
-518 <-> 352, 1674
-519 <-> 824, 1396, 1659
-520 <-> 508
-521 <-> 52, 915
-522 <-> 83, 483, 1637
-523 <-> 1317
-524 <-> 501
-525 <-> 525
-526 <-> 350, 850, 930
-527 <-> 527, 1338, 1449
-528 <-> 156
-529 <-> 98
-530 <-> 691, 1175, 1505
-531 <-> 247, 785, 1389, 1623
-532 <-> 1159
-533 <-> 1152, 1297
-534 <-> 246
-535 <-> 1144, 1491, 1622, 1935
-536 <-> 708
-537 <-> 279, 1656
-538 <-> 268, 538, 1756
-539 <-> 309, 802
-540 <-> 1239
-541 <-> 119, 1679, 1741
-542 <-> 1204
-543 <-> 642, 1926
-544 <-> 298
-545 <-> 1971
-546 <-> 268
-547 <-> 1465, 1613, 1614
-548 <-> 160
-549 <-> 820
-550 <-> 336
-551 <-> 1733
-552 <-> 552, 1563
-553 <-> 1654
-554 <-> 554, 1641, 1665
-555 <-> 555
-556 <-> 15
-557 <-> 177, 1204
-558 <-> 207, 1004
-559 <-> 47, 1297
-560 <-> 1189, 1709
-561 <-> 1013, 1709
-562 <-> 762, 912
-563 <-> 563
-564 <-> 585
-565 <-> 1333, 1494
-566 <-> 566, 938
-567 <-> 894
-568 <-> 586, 1397
-569 <-> 343, 1572
-570 <-> 704, 1220, 1459
-571 <-> 1451
-572 <-> 651, 846, 909
-573 <-> 1881
-574 <-> 1866
-575 <-> 1379
-576 <-> 1060, 1210
-577 <-> 1837
-578 <-> 1346
-579 <-> 87
-580 <-> 1509
-581 <-> 252, 1548
-582 <-> 307, 372
-583 <-> 624, 1599, 1753, 1908
-584 <-> 351, 774
-585 <-> 564, 977
-586 <-> 432, 568, 773, 1789
-587 <-> 826
-588 <-> 1854
-589 <-> 719, 845, 1214
-590 <-> 158, 1259
-591 <-> 483
-592 <-> 743, 898
-593 <-> 172, 342, 852, 943, 1053
-594 <-> 594
-595 <-> 396, 928
-596 <-> 291, 596
-597 <-> 597
-598 <-> 1980
-599 <-> 202, 1764
-600 <-> 204
-601 <-> 54, 377, 1340
-602 <-> 1718, 1866
-603 <-> 469, 789
-604 <-> 1006, 1033, 1626
-605 <-> 1535
-606 <-> 176
-607 <-> 236, 911, 1218
-608 <-> 1193, 1825
-609 <-> 1657
-610 <-> 733, 841
-611 <-> 747, 1892
-612 <-> 1098, 1196, 1267
-613 <-> 5, 1372
-614 <-> 334, 1492
-615 <-> 493, 798
-616 <-> 1025, 1940
-617 <-> 6, 666, 1155
-618 <-> 762, 1621, 1895
-619 <-> 1187
-620 <-> 95, 1761
-621 <-> 254
-622 <-> 784, 1476
-623 <-> 227, 379, 1081
-624 <-> 583
-625 <-> 296, 1222, 1882
-626 <-> 905
-627 <-> 466, 1692
-628 <-> 238, 420, 1004, 1412
-629 <-> 1532
-630 <-> 630
-631 <-> 977, 1092, 1458, 1713
-632 <-> 777, 1049, 1404
-633 <-> 994
-634 <-> 277
-635 <-> 635
-636 <-> 703, 1756
-637 <-> 840, 1585
-638 <-> 76, 180, 1373
-639 <-> 218, 639, 1835
-640 <-> 1559
-641 <-> 1800
-642 <-> 500, 543
-643 <-> 1808
-644 <-> 282
-645 <-> 1253, 1475
-646 <-> 283, 646, 864
-647 <-> 93, 1508
-648 <-> 134, 956, 1762
-649 <-> 37, 82
-650 <-> 1480, 1916
-651 <-> 151, 572, 1357
-652 <-> 1261
-653 <-> 294, 653
-654 <-> 129, 1139, 1176
-655 <-> 1251, 1656
-656 <-> 389
-657 <-> 1604
-658 <-> 201, 1208
-659 <-> 23, 133, 1868
-660 <-> 435
-661 <-> 1634
-662 <-> 1667, 1701
-663 <-> 974
-664 <-> 664, 1167
-665 <-> 172, 1370
-666 <-> 617
-667 <-> 1824
-668 <-> 952, 1605
-669 <-> 1822
-670 <-> 44, 670
-671 <-> 380, 1145, 1693, 1906
-672 <-> 505, 693
-673 <-> 1610
-674 <-> 1249, 1302
-675 <-> 150, 777
-676 <-> 1675
-677 <-> 910, 1282
-678 <-> 99, 1004
-679 <-> 679
-680 <-> 264, 917, 1137, 1687
-681 <-> 140, 327, 746
-682 <-> 682
-683 <-> 794, 1315
-684 <-> 1000, 1342
-685 <-> 1111, 1348, 1523, 1932
-686 <-> 352
-687 <-> 979, 1667
-688 <-> 92, 177
-689 <-> 937, 1939
-690 <-> 35, 1608
-691 <-> 530, 691
-692 <-> 1871
-693 <-> 97, 672
-694 <-> 72, 694
-695 <-> 1076
-696 <-> 1954
-697 <-> 66, 392, 1892
-698 <-> 122, 356, 698
-699 <-> 504, 1470
-700 <-> 292, 1407
-701 <-> 1231, 1327
-702 <-> 32
-703 <-> 636, 1083, 1210
-704 <-> 495, 570
-705 <-> 174, 513, 1332
-706 <-> 69, 1088
-707 <-> 1036, 1867
-708 <-> 536, 805, 1958
-709 <-> 709
-710 <-> 915, 1578
-711 <-> 711, 1478
-712 <-> 813, 927
-713 <-> 70, 116, 1469, 1539
-714 <-> 41
-715 <-> 840, 1473, 1562, 1705
-716 <-> 716
-717 <-> 949, 1864
-718 <-> 259, 342, 1557, 1853
-719 <-> 589, 781, 802
-720 <-> 1125
-721 <-> 390, 878
-722 <-> 1026
-723 <-> 1039, 1467
-724 <-> 1535
-725 <-> 883
-726 <-> 1832, 1917
-727 <-> 1245
-728 <-> 1291
-729 <-> 1203
-730 <-> 824
-731 <-> 1984
-732 <-> 187, 1214
-733 <-> 610, 1079, 1198
-734 <-> 206, 872, 1479, 1855
-735 <-> 124, 1371
-736 <-> 113, 736
-737 <-> 358, 1426
-738 <-> 974, 1024, 1717, 1842
-739 <-> 1489
-740 <-> 1634
-741 <-> 873, 1695
-742 <-> 1700
-743 <-> 312, 592, 1493
-744 <-> 948, 1306, 1400
-745 <-> 385, 1029, 1315, 1474
-746 <-> 285, 681, 793
-747 <-> 169, 611, 814, 1548
-748 <-> 748
-749 <-> 1134, 1498
-750 <-> 146
-751 <-> 155, 783, 1856
-752 <-> 122, 1417
-753 <-> 478, 1505
-754 <-> 810, 1742, 1955
-755 <-> 1735, 1847
-756 <-> 978, 1095
-757 <-> 1153, 1730
-758 <-> 198, 1476
-759 <-> 759
-760 <-> 168
-761 <-> 1496
-762 <-> 562, 618
-763 <-> 246, 482, 1258
-764 <-> 465
-765 <-> 186
-766 <-> 1448
-767 <-> 893, 896, 1019
-768 <-> 1730
-769 <-> 340, 1043, 1065
-770 <-> 307, 458, 1453
-771 <-> 1168
-772 <-> 911
-773 <-> 586
-774 <-> 481, 584, 774, 1148
-775 <-> 480, 1485, 1894
-776 <-> 926
-777 <-> 305, 447, 632, 675
-778 <-> 1690
-779 <-> 386
-780 <-> 426, 469, 474
-781 <-> 719, 1543
-782 <-> 98, 428, 903
-783 <-> 751, 1558
-784 <-> 219, 622
-785 <-> 531
-786 <-> 197, 911, 1312
-787 <-> 120, 880
-788 <-> 1089, 1487
-789 <-> 603, 844, 1681, 1731
-790 <-> 790, 1126
-791 <-> 456, 1363
-792 <-> 308, 445
-793 <-> 746
-794 <-> 683, 951
-795 <-> 1732, 1986
-796 <-> 1210, 1878
-797 <-> 804
-798 <-> 615
-799 <-> 1651
-800 <-> 851, 860, 1907
-801 <-> 1110, 1537, 1773
-802 <-> 539, 719
-803 <-> 156, 1528
-804 <-> 266, 797, 1549
-805 <-> 89, 708, 962
-806 <-> 1429
-807 <-> 1800
-808 <-> 873, 1421
-809 <-> 476, 809
-810 <-> 754
-811 <-> 516, 965
-812 <-> 401, 513
-813 <-> 712, 1023
-814 <-> 747
-815 <-> 1145
-816 <-> 1413
-817 <-> 1235
-818 <-> 237, 240, 1506
-819 <-> 391, 857
-820 <-> 549, 1162
-821 <-> 1410, 1607
-822 <-> 30, 1485
-823 <-> 1445, 1454
-824 <-> 519, 730, 1824
-825 <-> 400, 1381, 1472
-826 <-> 587, 1040, 1198, 1618
-827 <-> 40
-828 <-> 1870
-829 <-> 149
-830 <-> 16
-831 <-> 255
-832 <-> 384, 1890, 1913
-833 <-> 1529
-834 <-> 834
-835 <-> 314
-836 <-> 216, 1166
-837 <-> 377, 988
-838 <-> 236, 323
-839 <-> 461, 1825
-840 <-> 211, 637, 715, 1710
-841 <-> 361, 610, 841, 1815
-842 <-> 1669
-843 <-> 874, 1468
-844 <-> 789
-845 <-> 143, 589, 1053
-846 <-> 572
-847 <-> 1285
-848 <-> 292
-849 <-> 849
-850 <-> 526
-851 <-> 800, 1368, 1497
-852 <-> 593, 1798
-853 <-> 1339, 1593, 1749
-854 <-> 1445, 1787
-855 <-> 1026, 1356
-856 <-> 132
-857 <-> 819
-858 <-> 1511
-859 <-> 1191
-860 <-> 284, 800, 1619
-861 <-> 111, 1266
-862 <-> 60, 281
-863 <-> 1605
-864 <-> 646
-865 <-> 873
-866 <-> 255, 924
-867 <-> 871, 1707
-868 <-> 12
-869 <-> 96, 1278
-870 <-> 1307
-871 <-> 404, 867, 1482
-872 <-> 734, 1200
-873 <-> 741, 808, 865, 873
-874 <-> 255, 843, 1201
-875 <-> 510, 1325, 1797
-876 <-> 1504, 1825
-877 <-> 253
-878 <-> 721
-879 <-> 948, 1291, 1847
-880 <-> 85, 184, 301, 787, 1503, 1617
-881 <-> 1688
-882 <-> 882
-883 <-> 725, 1582, 1874
-884 <-> 1352
-885 <-> 885, 1974
-886 <-> 431, 1650
-887 <-> 101
-888 <-> 102, 152
-889 <-> 433, 1016
-890 <-> 890
-891 <-> 12
-892 <-> 1402, 1923
-893 <-> 767
-894 <-> 484, 567
-895 <-> 342, 1123, 1158, 1648
-896 <-> 767
-897 <-> 80, 986, 1418
-898 <-> 205, 592, 1019
-899 <-> 493, 1053
-900 <-> 489
-901 <-> 901
-902 <-> 456
-903 <-> 782
-904 <-> 467, 904, 1924
-905 <-> 626, 1881
-906 <-> 245, 257, 276
-907 <-> 907, 1101, 1826
-908 <-> 908, 1230
-909 <-> 34, 572, 1186
-910 <-> 677, 961
-911 <-> 607, 772, 786, 1196, 1405
-912 <-> 562
-913 <-> 1636
-914 <-> 1892, 1963
-915 <-> 150, 521, 710
-916 <-> 244
-917 <-> 23, 680, 1336
-918 <-> 490, 1483
-919 <-> 96
-920 <-> 1880
-921 <-> 921
-922 <-> 975, 1255
-923 <-> 228, 1202, 1452
-924 <-> 866
-925 <-> 296, 1270
-926 <-> 280, 776, 1170, 1788, 1970
-927 <-> 712
-928 <-> 362, 595, 1103
-929 <-> 929
-930 <-> 65, 526, 1256, 1500, 1722
-931 <-> 183, 280, 1484
-932 <-> 1737
-933 <-> 299
-934 <-> 1387, 1851
-935 <-> 136, 935, 1537, 1775
-936 <-> 353
-937 <-> 689, 1347
-938 <-> 381, 566
-939 <-> 56, 1762
-940 <-> 1559, 1860
-941 <-> 1504, 1671, 1723, 1724
-942 <-> 1293
-943 <-> 21, 593
-944 <-> 1335
-945 <-> 1650
-946 <-> 1556
-947 <-> 26
-948 <-> 744, 879
-949 <-> 717, 1604
-950 <-> 1201, 1322
-951 <-> 794
-952 <-> 668, 1371
-953 <-> 1272
-954 <-> 954
-955 <-> 74
-956 <-> 648, 1870
-957 <-> 44, 1769
-958 <-> 13, 1388, 1660
-959 <-> 959
-960 <-> 153
-961 <-> 910
-962 <-> 17, 805
-963 <-> 339, 1783
-964 <-> 1100
-965 <-> 811, 1677
-966 <-> 966
-967 <-> 304, 1029, 1269, 1910
-968 <-> 81, 1091
-969 <-> 1379, 1693
-970 <-> 1289
-971 <-> 971
-972 <-> 70
-973 <-> 973
-974 <-> 663, 738, 1005
-975 <-> 922
-976 <-> 319
-977 <-> 585, 631
-978 <-> 756, 1628
-979 <-> 687, 979
-980 <-> 1151, 1317
-981 <-> 1199, 1902
-982 <-> 1223
-983 <-> 1931
-984 <-> 2, 409
-985 <-> 985
-986 <-> 358, 897, 1564
-987 <-> 987, 1644
-988 <-> 36, 837
-989 <-> 1275
-990 <-> 990, 1295
-991 <-> 207, 1415
-992 <-> 1242, 1397, 1467, 1579
-993 <-> 1042, 1767
-994 <-> 633, 1595, 1813
-995 <-> 194
-996 <-> 1096, 1369
-997 <-> 1231, 1973
-998 <-> 1367
-999 <-> 999
-1000 <-> 684, 1078
-1001 <-> 219
-1002 <-> 1442
-1003 <-> 441
-1004 <-> 558, 628, 678
-1005 <-> 475, 974
-1006 <-> 103, 345, 604
-1007 <-> 490, 1274
-1008 <-> 1708, 1819
-1009 <-> 1009, 1118
-1010 <-> 1223, 1803
-1011 <-> 1867
-1012 <-> 299, 1923
-1013 <-> 561, 1187, 1477, 1926
-1014 <-> 1861
-1015 <-> 446, 1015, 1858
-1016 <-> 889
-1017 <-> 1435
-1018 <-> 42, 98
-1019 <-> 767, 898, 1764
-1020 <-> 1020
-1021 <-> 1666
-1022 <-> 347, 1022, 1310
-1023 <-> 26, 813, 1109, 1538, 1988
-1024 <-> 195, 738
-1025 <-> 616
-1026 <-> 722, 855, 1337, 1415
-1027 <-> 241, 1309
-1028 <-> 1028
-1029 <-> 745, 967
-1030 <-> 1577, 1689
-1031 <-> 1031
-1032 <-> 125
-1033 <-> 604, 1127, 1194
-1034 <-> 192
-1035 <-> 1992
-1036 <-> 707, 1509
-1037 <-> 1347
-1038 <-> 389
-1039 <-> 723, 1535
-1040 <-> 826, 1245, 1918
-1041 <-> 281
-1042 <-> 993
-1043 <-> 67, 769, 1142
-1044 <-> 1690
-1045 <-> 287
-1046 <-> 1561
-1047 <-> 4
-1048 <-> 472, 1703
-1049 <-> 632, 1816
-1050 <-> 1157, 1899
-1051 <-> 1818
-1052 <-> 347, 1904
-1053 <-> 593, 845, 899
-1054 <-> 1983
-1055 <-> 1599
-1056 <-> 41, 320, 325, 1567
-1057 <-> 1372, 1569
-1058 <-> 185
-1059 <-> 1112, 1939
-1060 <-> 576, 1314, 1557, 1751, 1752
-1061 <-> 1285
-1062 <-> 1162, 1338, 1739
-1063 <-> 1291
-1064 <-> 132
-1065 <-> 769, 1317
-1066 <-> 510
-1067 <-> 405, 1452, 1953
-1068 <-> 1200
-1069 <-> 1069
-1070 <-> 19
-1071 <-> 1361, 1382
-1072 <-> 1307, 1534
-1073 <-> 1282
-1074 <-> 1323, 1653
-1075 <-> 457
-1076 <-> 695, 1703
-1077 <-> 1180
-1078 <-> 434, 1000
-1079 <-> 733
-1080 <-> 130, 1757
-1081 <-> 202, 623
-1082 <-> 1082
-1083 <-> 506, 703, 1279
-1084 <-> 314, 1812
-1085 <-> 242
-1086 <-> 350
-1087 <-> 1524
-1088 <-> 706, 1900
-1089 <-> 788
-1090 <-> 1260
-1091 <-> 968, 1522
-1092 <-> 173, 631, 1850
-1093 <-> 1093, 1390
-1094 <-> 182, 390
-1095 <-> 756
-1096 <-> 996
-1097 <-> 448
-1098 <-> 464, 612
-1099 <-> 292, 486
-1100 <-> 964, 1326
-1101 <-> 907, 1799
-1102 <-> 1927
-1103 <-> 928, 1103
-1104 <-> 252
-1105 <-> 166, 297
-1106 <-> 1106, 1896
-1107 <-> 1107
-1108 <-> 459
-1109 <-> 1023
-1110 <-> 422, 801
-1111 <-> 456, 685
-1112 <-> 262, 1059
-1113 <-> 1267
-1114 <-> 485
-1115 <-> 1115, 1827
-1116 <-> 1596
-1117 <-> 395, 449, 1382
-1118 <-> 1009
-1119 <-> 281, 1670
-1120 <-> 434, 1165
-1121 <-> 167, 1121
-1122 <-> 1809
-1123 <-> 895
-1124 <-> 283
-1125 <-> 499, 720, 1308
-1126 <-> 790, 1526
-1127 <-> 1033
-1128 <-> 1500
-1129 <-> 168, 418, 1642, 1947
-1130 <-> 1454
-1131 <-> 1683
-1132 <-> 517, 1784
-1133 <-> 288
-1134 <-> 314, 749, 1586
-1135 <-> 102
-1136 <-> 1136
-1137 <-> 680
-1138 <-> 1755
-1139 <-> 654
-1140 <-> 1140
-1141 <-> 1141
-1142 <-> 1043, 1862
-1143 <-> 1550
-1144 <-> 535, 1144, 1849
-1145 <-> 209, 671, 815, 1268
-1146 <-> 145
-1147 <-> 134
-1148 <-> 774
-1149 <-> 36, 497, 499, 1652
-1150 <-> 271, 1150
-1151 <-> 51, 980, 1651
-1152 <-> 533
-1153 <-> 398, 757
-1154 <-> 1313
-1155 <-> 145, 617, 1336, 1721
-1156 <-> 1838
-1157 <-> 10, 1050
-1158 <-> 895
-1159 <-> 532, 1708
-1160 <-> 1357
-1161 <-> 1200, 1999
-1162 <-> 820, 1062
-1163 <-> 1821
-1164 <-> 488, 1572
-1165 <-> 515, 1120
-1166 <-> 36, 836
-1167 <-> 664
-1168 <-> 11, 515, 771, 1967
-1169 <-> 358
-1170 <-> 926
-1171 <-> 1666, 1827
-1172 <-> 262, 1439
-1173 <-> 123, 355, 1341
-1174 <-> 1204, 1525
-1175 <-> 530
-1176 <-> 501, 654
-1177 <-> 1311, 1796
-1178 <-> 186, 1536, 1551, 1853
-1179 <-> 1822, 1947
-1180 <-> 1077, 1264
-1181 <-> 163, 1181
-1182 <-> 225
-1183 <-> 1237, 1715, 1798
-1184 <-> 41
-1185 <-> 297, 1185
-1186 <-> 909
-1187 <-> 619, 1013
-1188 <-> 1698
-1189 <-> 488, 560
-1190 <-> 1834, 1933
-1191 <-> 402, 859, 1191
-1192 <-> 1839
-1193 <-> 608, 1438
-1194 <-> 435, 1033, 1754
-1195 <-> 46, 1828
-1196 <-> 612, 911, 1975
-1197 <-> 1503, 1854
-1198 <-> 733, 826
-1199 <-> 981
-1200 <-> 493, 872, 1068, 1161
-1201 <-> 874, 950
-1202 <-> 923
-1203 <-> 40, 729, 1719
-1204 <-> 542, 557, 1174
-1205 <-> 1332
-1206 <-> 148, 182
-1207 <-> 1207
-1208 <-> 91, 273, 413, 658, 1234
-1209 <-> 1995
-1210 <-> 576, 703, 796
-1211 <-> 1227, 1891
-1212 <-> 338, 1362
-1213 <-> 6
-1214 <-> 589, 732
-1215 <-> 4, 100, 444, 1842
-1216 <-> 497, 1745
-1217 <-> 409, 1354
-1218 <-> 607
-1219 <-> 29, 484, 1712
-1220 <-> 570
-1221 <-> 302, 1429
-1222 <-> 625, 1412
-1223 <-> 260, 982, 1010, 1591
-1224 <-> 9, 258, 278, 1506, 1893
-1225 <-> 1906
-1226 <-> 1226
-1227 <-> 1211
-1228 <-> 1773
-1229 <-> 18
-1230 <-> 908
-1231 <-> 701, 997
-1232 <-> 348, 349
-1233 <-> 59
-1234 <-> 1208
-1235 <-> 817, 1994
-1236 <-> 508
-1237 <-> 1183
-1238 <-> 1529
-1239 <-> 540, 1524, 1552
-1240 <-> 512
-1241 <-> 1241
-1242 <-> 992, 1685
-1243 <-> 1934
-1244 <-> 1574, 1839
-1245 <-> 727, 1040
-1246 <-> 1380
-1247 <-> 1506, 1923
-1248 <-> 50, 1610
-1249 <-> 674
-1250 <-> 485
-1251 <-> 444, 655, 1718
-1252 <-> 266, 1862
-1253 <-> 645, 1709
-1254 <-> 1254
-1255 <-> 922, 1255, 1341
-1256 <-> 930, 1346
-1257 <-> 1465, 1844
-1258 <-> 763
-1259 <-> 335, 590, 1259
-1260 <-> 129, 1090
-1261 <-> 652, 1261, 1838
-1262 <-> 1262, 1912
-1263 <-> 7, 1438, 1554
-1264 <-> 338, 1180
-1265 <-> 269, 1265
-1266 <-> 861, 1281, 1423
-1267 <-> 612, 1113, 1289
-1268 <-> 1145
-1269 <-> 967
-1270 <-> 94, 215, 925, 1860
-1271 <-> 1376
-1272 <-> 223, 953
-1273 <-> 1301
-1274 <-> 1007, 1860
-1275 <-> 216, 393, 989, 1275
-1276 <-> 470
-1277 <-> 288
-1278 <-> 869
-1279 <-> 1083, 1755
-1280 <-> 1588
-1281 <-> 1266
-1282 <-> 677, 1073, 1575, 1625
-1283 <-> 1571
-1284 <-> 1828
-1285 <-> 847, 1061, 1641
-1286 <-> 1494, 1649, 1889
-1287 <-> 159
-1288 <-> 142, 1288
-1289 <-> 970, 1267, 1668
-1290 <-> 406
-1291 <-> 728, 879, 1063, 1885
-1292 <-> 1407
-1293 <-> 942, 1318, 1459
-1294 <-> 311, 1754
-1295 <-> 990, 1512
-1296 <-> 130, 479, 508
-1297 <-> 533, 559
-1298 <-> 1839
-1299 <-> 70
-1300 <-> 37, 1886, 1998
-1301 <-> 1273, 1340
-1302 <-> 317, 674, 1485
-1303 <-> 161, 1624
-1304 <-> 1304
-1305 <-> 1410
-1306 <-> 744
-1307 <-> 20, 870, 1072
-1308 <-> 194, 212, 1125
-1309 <-> 251, 1027
-1310 <-> 22, 1022, 1777
-1311 <-> 1177
-1312 <-> 786
-1313 <-> 1154, 1706
-1314 <-> 1060
-1315 <-> 683, 745
-1316 <-> 1793, 1898
-1317 <-> 523, 980, 1065, 1787
-1318 <-> 1293
-1319 <-> 1319
-1320 <-> 1320
-1321 <-> 206
-1322 <-> 950, 1957
-1323 <-> 1074, 1823
-1324 <-> 352
-1325 <-> 875, 1740
-1326 <-> 493, 1100
-1327 <-> 701, 1633
-1328 <-> 1, 55
-1329 <-> 1633
-1330 <-> 503, 1687, 1782
-1331 <-> 376, 1531, 1766
-1332 <-> 436, 705, 1205
-1333 <-> 565
-1334 <-> 1805
-1335 <-> 408, 944
-1336 <-> 917, 1155
-1337 <-> 1026
-1338 <-> 527, 1062
-1339 <-> 517, 853
-1340 <-> 601, 1301, 1708
-1341 <-> 1173, 1255
-1342 <-> 684
-1343 <-> 210
-1344 <-> 121, 483
-1345 <-> 175
-1346 <-> 578, 1256
-1347 <-> 937, 1037, 1735
-1348 <-> 685
-1349 <-> 275, 1594
-1350 <-> 127, 130
-1351 <-> 485
-1352 <-> 884, 1352
-1353 <-> 1604, 1800
-1354 <-> 1217
-1355 <-> 1355, 1985
-1356 <-> 855, 1840
-1357 <-> 651, 1160, 1388
-1358 <-> 92
-1359 <-> 112
-1360 <-> 1455
-1361 <-> 1071, 1909
-1362 <-> 304, 1212
-1363 <-> 791
-1364 <-> 161, 1426
-1365 <-> 1365
-1366 <-> 1366, 1433
-1367 <-> 133, 998
-1368 <-> 851
-1369 <-> 12, 996, 1425
-1370 <-> 665
-1371 <-> 13, 735, 952, 1371, 1857
-1372 <-> 613, 1057
-1373 <-> 638, 1511
-1374 <-> 230, 1593
-1375 <-> 104
-1376 <-> 179, 1271, 1639
-1377 <-> 291
-1378 <-> 1919
-1379 <-> 575, 969
-1380 <-> 1246, 1501, 1903
-1381 <-> 73, 825, 1922
-1382 <-> 1071, 1117, 1541, 1810
-1383 <-> 111
-1384 <-> 457
-1385 <-> 1878, 1966
-1386 <-> 1396
-1387 <-> 229, 934, 1853
-1388 <-> 958, 1357, 1424
-1389 <-> 531
-1390 <-> 1093, 1603
-1391 <-> 408
-1392 <-> 446
-1393 <-> 411
-1394 <-> 1866
-1395 <-> 450, 1851
-1396 <-> 519, 1386
-1397 <-> 79, 568, 992
-1398 <-> 224
-1399 <-> 1443, 1799, 1915
-1400 <-> 744
-1401 <-> 1685
-1402 <-> 892
-1403 <-> 1714
-1404 <-> 632
-1405 <-> 911, 1532
-1406 <-> 233, 1606
-1407 <-> 700, 1292
-1408 <-> 431, 1408, 1416
-1409 <-> 211, 472
-1410 <-> 821, 1305
-1411 <-> 1653, 1993
-1412 <-> 628, 1222
-1413 <-> 473, 816
-1414 <-> 451
-1415 <-> 991, 1026
-1416 <-> 1408
-1417 <-> 752
-1418 <-> 423, 897
-1419 <-> 2, 30
-1420 <-> 1420
-1421 <-> 808
-1422 <-> 58, 104
-1423 <-> 1266
-1424 <-> 1388
-1425 <-> 1369
-1426 <-> 737, 1364, 1847, 1913
-1427 <-> 246, 274
-1428 <-> 1964
-1429 <-> 76, 806, 1221
-1430 <-> 1430
-1431 <-> 322
-1432 <-> 1719
-1433 <-> 1366, 1988
-1434 <-> 89, 106
-1435 <-> 1017, 1730
-1436 <-> 1997
-1437 <-> 317, 352
-1438 <-> 1193, 1263
-1439 <-> 1172
-1440 <-> 344
-1441 <-> 37
-1442 <-> 1002, 1860
-1443 <-> 1399
-1444 <-> 31, 298
-1445 <-> 823, 854
-1446 <-> 113, 403
-1447 <-> 1508, 1720
-1448 <-> 766, 1791
-1449 <-> 527
-1450 <-> 134
-1451 <-> 88, 571
-1452 <-> 923, 1067
-1453 <-> 770
-1454 <-> 95, 823, 1130, 1454
-1455 <-> 1360, 1533
-1456 <-> 1456, 1489, 1529
-1457 <-> 114, 149, 1956
-1458 <-> 382, 631, 1458
-1459 <-> 570, 1293
-1460 <-> 202, 369
-1461 <-> 300
-1462 <-> 1636
-1463 <-> 393, 1659, 1939
-1464 <-> 31
-1465 <-> 3, 323, 547, 1257, 1732
-1466 <-> 320
-1467 <-> 723, 992, 1706
-1468 <-> 154, 843
-1469 <-> 713
-1470 <-> 354, 699
-1471 <-> 1471
-1472 <-> 825
-1473 <-> 715
-1474 <-> 745
-1475 <-> 645
-1476 <-> 622, 758
-1477 <-> 1013, 1645, 1669
-1478 <-> 711
-1479 <-> 734
-1480 <-> 650
-1481 <-> 1481
-1482 <-> 310, 871
-1483 <-> 918, 1504
-1484 <-> 931
-1485 <-> 336, 421, 775, 822, 1302
-1486 <-> 157, 1631
-1487 <-> 236, 437, 788, 1980
-1488 <-> 1560
-1489 <-> 739, 1456
-1490 <-> 383
-1491 <-> 535
-1492 <-> 471, 614
-1493 <-> 743
-1494 <-> 565, 1286
-1495 <-> 1627
-1496 <-> 761, 1496
-1497 <-> 249, 425, 851
-1498 <-> 749
-1499 <-> 231
-1500 <-> 930, 1128
-1501 <-> 390, 1380
-1502 <-> 1713
-1503 <-> 152, 880, 1197
-1504 <-> 47, 876, 941, 1483, 1945
-1505 <-> 295, 530, 753
-1506 <-> 818, 1224, 1247
-1507 <-> 141, 216, 1565, 1726
-1508 <-> 647, 1447, 1521, 1590
-1509 <-> 580, 1036, 1605, 1609
-1510 <-> 40, 1885
-1511 <-> 858, 1373
-1512 <-> 1295
-1513 <-> 78, 430
-1514 <-> 1772
-1515 <-> 153
-1516 <-> 144, 260, 1818
-1517 <-> 32, 1616, 1806
-1518 <-> 472
-1519 <-> 259
-1520 <-> 94, 1542
-1521 <-> 1508
-1522 <-> 313, 1091, 1631
-1523 <-> 685
-1524 <-> 241, 1087, 1239
-1525 <-> 1174
-1526 <-> 1126
-1527 <-> 1835
-1528 <-> 803
-1529 <-> 460, 833, 1238, 1456
-1530 <-> 1784
-1531 <-> 1331
-1532 <-> 629, 1405
-1533 <-> 470, 1455, 1533, 1796
-1534 <-> 1072
-1535 <-> 605, 724, 1039
-1536 <-> 1178
-1537 <-> 273, 801, 935
-1538 <-> 1023, 1734
-1539 <-> 713
-1540 <-> 1748
-1541 <-> 1382, 1683
-1542 <-> 1520
-1543 <-> 781
-1544 <-> 1631
-1545 <-> 1910
-1546 <-> 1942
-1547 <-> 260
-1548 <-> 581, 747
-1549 <-> 804
-1550 <-> 159, 1143
-1551 <-> 1178
-1552 <-> 461, 1239, 1846
-1553 <-> 1553, 1982
-1554 <-> 68, 85, 1263, 1597
-1555 <-> 1713, 1931
-1556 <-> 946, 1556
-1557 <-> 718, 1060
-1558 <-> 783
-1559 <-> 640, 940
-1560 <-> 1488, 1806, 1898, 1949
-1561 <-> 441, 1046
-1562 <-> 715, 1889
-1563 <-> 552
-1564 <-> 986
-1565 <-> 1507, 1689
-1566 <-> 1570
-1567 <-> 1056
-1568 <-> 3, 371
-1569 <-> 119, 1057, 1852
-1570 <-> 1566, 1570
-1571 <-> 1283, 1736
-1572 <-> 569, 1164, 1995
-1573 <-> 1573, 1784, 1987
-1574 <-> 1244, 1574
-1575 <-> 1282, 1575, 1866
-1576 <-> 123
-1577 <-> 1030
-1578 <-> 289, 710
-1579 <-> 992, 1684
-1580 <-> 4
-1581 <-> 1581
-1582 <-> 128, 883
-1583 <-> 57
-1584 <-> 116
-1585 <-> 637
-1586 <-> 1134
-1587 <-> 1587
-1588 <-> 159, 1280
-1589 <-> 1915
-1590 <-> 136, 1508
-1591 <-> 1223
-1592 <-> 293, 1891
-1593 <-> 853, 1374
-1594 <-> 1349, 1886
-1595 <-> 994, 1595
-1596 <-> 364, 1116
-1597 <-> 1554
-1598 <-> 1729
-1599 <-> 583, 1055
-1600 <-> 147, 458, 1600
-1601 <-> 1894
-1602 <-> 116
-1603 <-> 1390
-1604 <-> 481, 657, 949, 1353, 1983
-1605 <-> 115, 668, 863, 1509
-1606 <-> 1406
-1607 <-> 261, 410, 821
-1608 <-> 690
-1609 <-> 1509
-1610 <-> 673, 1248
-1611 <-> 118, 1788
-1612 <-> 1854
-1613 <-> 547
-1614 <-> 547, 1807
-1615 <-> 479
-1616 <-> 222, 1517
-1617 <-> 880, 1989
-1618 <-> 826
-1619 <-> 860, 1807
-1620 <-> 291
-1621 <-> 618, 1957
-1622 <-> 535
-1623 <-> 480, 531
-1624 <-> 1303
-1625 <-> 223, 1282
-1626 <-> 503, 604
-1627 <-> 1495, 1933
-1628 <-> 288, 978
-1629 <-> 1629
-1630 <-> 465, 1872
-1631 <-> 1486, 1522, 1544
-1632 <-> 196
-1633 <-> 1327, 1329
-1634 <-> 123, 661, 740
-1635 <-> 139
-1636 <-> 913, 1462, 1752
-1637 <-> 404, 522
-1638 <-> 1779, 1813
-1639 <-> 33, 190, 1376, 1639
-1640 <-> 1816
-1641 <-> 554, 1285
-1642 <-> 1129
-1643 <-> 71, 1844
-1644 <-> 171, 987
-1645 <-> 1477
-1646 <-> 16, 199
-1647 <-> 1702
-1648 <-> 895
-1649 <-> 1286
-1650 <-> 344, 886, 945
-1651 <-> 799, 1151
-1652 <-> 1149, 1961, 1984
-1653 <-> 222, 1074, 1411
-1654 <-> 108, 553
-1655 <-> 35, 156, 226, 1992
-1656 <-> 537, 655
-1657 <-> 105, 609
-1658 <-> 1658
-1659 <-> 519, 1463
-1660 <-> 958
-1661 <-> 290, 1929
-1662 <-> 435
-1663 <-> 1855
-1664 <-> 345
-1665 <-> 554
-1666 <-> 1021, 1171
-1667 <-> 662, 687
-1668 <-> 1289
-1669 <-> 842, 1477, 1795, 1975
-1670 <-> 1119, 1921
-1671 <-> 941
-1672 <-> 115
-1673 <-> 385
-1674 <-> 518
-1675 <-> 247, 676
-1676 <-> 509, 1987
-1677 <-> 965, 1677
-1678 <-> 151, 1692
-1679 <-> 541
-1680 <-> 1680
-1681 <-> 221, 789
-1682 <-> 1736, 1767, 1947
-1683 <-> 1131, 1541
-1684 <-> 1579
-1685 <-> 1242, 1401
-1686 <-> 1736
-1687 <-> 680, 1330
-1688 <-> 881, 1829
-1689 <-> 1030, 1565
-1690 <-> 778, 1044, 1900
-1691 <-> 28, 75
-1692 <-> 627, 1678
-1693 <-> 122, 400, 671, 969
-1694 <-> 58, 61
-1695 <-> 741
-1696 <-> 224, 1958
-1697 <-> 1935
-1698 <-> 301, 1188
-1699 <-> 29, 37
-1700 <-> 742, 1883
-1701 <-> 662
-1702 <-> 441, 1647
-1703 <-> 1048, 1076
-1704 <-> 185
-1705 <-> 715
-1706 <-> 1313, 1467
-1707 <-> 867
-1708 <-> 1008, 1159, 1340
-1709 <-> 560, 561, 1253, 1976
-1710 <-> 840
-1711 <-> 1711
-1712 <-> 12, 1219
-1713 <-> 631, 1502, 1555
-1714 <-> 1403, 1714, 1902
-1715 <-> 1183
-1716 <-> 79
-1717 <-> 738
-1718 <-> 602, 1251
-1719 <-> 1203, 1432
-1720 <-> 1447
-1721 <-> 1155
-1722 <-> 930
-1723 <-> 941
-1724 <-> 941
-1725 <-> 432
-1726 <-> 1507
-1727 <-> 397
-1728 <-> 1728, 1937
-1729 <-> 1598, 1913
-1730 <-> 105, 757, 768, 1435, 1730
-1731 <-> 789
-1732 <-> 795, 1465
-1733 <-> 551, 1765, 1835
-1734 <-> 1538
-1735 <-> 755, 1347
-1736 <-> 1571, 1682, 1686
-1737 <-> 932, 1795
-1738 <-> 329, 1738
-1739 <-> 267, 1062, 1848
-1740 <-> 1325
-1741 <-> 326, 541, 1952
-1742 <-> 344, 754
-1743 <-> 75, 253, 507
-1744 <-> 288
-1745 <-> 1216
-1746 <-> 92, 138
-1747 <-> 333
-1748 <-> 182, 1540
-1749 <-> 853
-1750 <-> 88
-1751 <-> 363, 1060
-1752 <-> 1060, 1636
-1753 <-> 433, 583, 1873
-1754 <-> 1194, 1294
-1755 <-> 1138, 1279
-1756 <-> 538, 636
-1757 <-> 1080
-1758 <-> 472, 514
-1759 <-> 284
-1760 <-> 1760
-1761 <-> 326, 620
-1762 <-> 648, 939, 1989
-1763 <-> 383
-1764 <-> 599, 1019, 1941
-1765 <-> 1733
-1766 <-> 289, 365, 1331
-1767 <-> 993, 1682, 1767
-1768 <-> 1768, 1859
-1769 <-> 957
-1770 <-> 288
-1771 <-> 1875
-1772 <-> 1514, 1772
-1773 <-> 801, 1228
-1774 <-> 0
-1775 <-> 935
-1776 <-> 133
-1777 <-> 1310
-1778 <-> 17, 320
-1779 <-> 465, 1638
-1780 <-> 1906
-1781 <-> 1969
-1782 <-> 1330
-1783 <-> 97, 963, 1960, 1983
-1784 <-> 1132, 1530, 1573
-1785 <-> 422
-1786 <-> 1786
-1787 <-> 854, 1317
-1788 <-> 926, 1611
-1789 <-> 586, 1829
-1790 <-> 74, 1790
-1791 <-> 52, 109, 1448
-1792 <-> 1860
-1793 <-> 1316, 1981
-1794 <-> 138
-1795 <-> 1669, 1737, 1861
-1796 <-> 1177, 1533
-1797 <-> 327, 875
-1798 <-> 852, 1183
-1799 <-> 1101, 1399, 1964
-1800 <-> 491, 641, 807, 1353
-1801 <-> 20, 455
-1802 <-> 123
-1803 <-> 415, 1010
-1804 <-> 1804
-1805 <-> 1334, 1926
-1806 <-> 1517, 1560
-1807 <-> 1614, 1619
-1808 <-> 261, 643
-1809 <-> 145, 1122
-1810 <-> 1382
-1811 <-> 60
-1812 <-> 1084
-1813 <-> 213, 994, 1638
-1814 <-> 14, 355
-1815 <-> 841, 1996
-1816 <-> 1049, 1640
-1817 <-> 388
-1818 <-> 1051, 1516
-1819 <-> 1008
-1820 <-> 403
-1821 <-> 350, 1163
-1822 <-> 669, 1179, 1927
-1823 <-> 1323
-1824 <-> 667, 824, 1879
-1825 <-> 608, 839, 876, 1965
-1826 <-> 473, 907
-1827 <-> 1115, 1171
-1828 <-> 440, 1195, 1284, 1913
-1829 <-> 275, 1688, 1789
-1830 <-> 1830
-1831 <-> 1831
-1832 <-> 248, 726
-1833 <-> 1833
-1834 <-> 1190
-1835 <-> 639, 1527, 1733
-1836 <-> 250, 1836
-1837 <-> 577, 1970
-1838 <-> 1156, 1261
-1839 <-> 1192, 1244, 1298
-1840 <-> 1356
-1841 <-> 81
-1842 <-> 738, 1215
-1843 <-> 1843
-1844 <-> 383, 1257, 1643
-1845 <-> 260, 451
-1846 <-> 1552
-1847 <-> 755, 879, 1426
-1848 <-> 38, 1739
-1849 <-> 468, 1144
-1850 <-> 1092
-1851 <-> 934, 1395
-1852 <-> 198, 1569
-1853 <-> 718, 1178, 1387
-1854 <-> 588, 1197, 1612
-1855 <-> 162, 734, 1663
-1856 <-> 236, 751
-1857 <-> 1371
-1858 <-> 1015
-1859 <-> 1768
-1860 <-> 940, 1270, 1274, 1442, 1792
-1861 <-> 1014, 1795
-1862 <-> 1142, 1252
-1863 <-> 281
-1864 <-> 717
-1865 <-> 1865
-1866 <-> 574, 602, 1394, 1575
-1867 <-> 707, 1011
-1868 <-> 659, 1868
-1869 <-> 173, 1991
-1870 <-> 391, 828, 956, 1880
-1871 <-> 189, 692
-1872 <-> 1630
-1873 <-> 42, 1753
-1874 <-> 883
-1875 <-> 11, 1771
-1876 <-> 158
-1877 <-> 186
-1878 <-> 796, 1385
-1879 <-> 486, 1824
-1880 <-> 920, 1870
-1881 <-> 433, 573, 905
-1882 <-> 625, 1954
-1883 <-> 300, 1700
-1884 <-> 1884
-1885 <-> 1291, 1510
-1886 <-> 19, 209, 1300, 1594
-1887 <-> 277
-1888 <-> 85
-1889 <-> 489, 1286, 1562
-1890 <-> 170, 832
-1891 <-> 1211, 1592, 1973
-1892 <-> 611, 697, 914
-1893 <-> 1224
-1894 <-> 775, 1601
-1895 <-> 308, 323, 618
-1896 <-> 1106
-1897 <-> 118, 368, 408
-1898 <-> 1316, 1560, 1944
-1899 <-> 463, 1050
-1900 <-> 1088, 1690, 1951
-1901 <-> 16, 27
-1902 <-> 981, 1714
-1903 <-> 1380
-1904 <-> 278, 1052
-1905 <-> 20
-1906 <-> 671, 1225, 1780
-1907 <-> 800
-1908 <-> 583
-1909 <-> 1361, 1940
-1910 <-> 134, 967, 1545
-1911 <-> 1973
-1912 <-> 1262
-1913 <-> 832, 1426, 1729, 1828
-1914 <-> 1914
-1915 <-> 1399, 1589
-1916 <-> 650, 1916
-1917 <-> 726, 1917
-1918 <-> 1040
-1919 <-> 196, 1378, 1919
-1920 <-> 1, 218
-1921 <-> 1670, 1952
-1922 <-> 1381
-1923 <-> 892, 1012, 1247
-1924 <-> 373, 904
-1925 <-> 210, 1935
-1926 <-> 543, 1013, 1805
-1927 <-> 1102, 1822
-1928 <-> 346, 1928
-1929 <-> 1661
-1930 <-> 19
-1931 <-> 983, 1555
-1932 <-> 685
-1933 <-> 16, 1190, 1627, 1933
-1934 <-> 288, 1243
-1935 <-> 535, 1697, 1925
-1936 <-> 295
-1937 <-> 112, 157, 1728
-1938 <-> 293
-1939 <-> 689, 1059, 1463
-1940 <-> 616, 1909
-1941 <-> 1764
-1942 <-> 243, 256, 1546
-1943 <-> 1950
-1944 <-> 260, 1898
-1945 <-> 1504
-1946 <-> 1946
-1947 <-> 87, 1129, 1179, 1682
-1948 <-> 294
-1949 <-> 1560
-1950 <-> 21, 1943
-1951 <-> 407, 1900
-1952 <-> 1741, 1921
-1953 <-> 1067
-1954 <-> 696, 1882
-1955 <-> 754
-1956 <-> 1457
-1957 <-> 1322, 1621
-1958 <-> 48, 708, 1696
-1959 <-> 1959
-1960 <-> 389, 1783
-1961 <-> 1652
-1962 <-> 29
-1963 <-> 914
-1964 <-> 1428, 1799
-1965 <-> 1825
-1966 <-> 1385
-1967 <-> 1168
-1968 <-> 265, 475
-1969 <-> 4, 1781
-1970 <-> 315, 926, 1837
-1971 <-> 242, 545, 1971
-1972 <-> 1972
-1973 <-> 997, 1891, 1911
-1974 <-> 885
-1975 <-> 1196, 1669
-1976 <-> 1709
-1977 <-> 1977
-1978 <-> 1978
-1979 <-> 1979
-1980 <-> 598, 1487
-1981 <-> 1793
-1982 <-> 1553
-1983 <-> 1054, 1604, 1783
-1984 <-> 731, 1652
-1985 <-> 1355
-1986 <-> 795
-1987 <-> 1573, 1676
-1988 <-> 495, 1023, 1433
-1989 <-> 1617, 1762
-1990 <-> 376
-1991 <-> 1869
-1992 <-> 1035, 1655
-1993 <-> 1411
-1994 <-> 1235, 1994
-1995 <-> 57, 1209, 1572
-1996 <-> 181, 1815
-1997 <-> 395, 1436
-1998 <-> 1300
-1999 <-> 175, 1161
diff --git a/2017/inputs/day_13.txt b/2017/inputs/day_13.txt
deleted file mode 100644
index 87bfdb7..0000000
--- a/2017/inputs/day_13.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-0: 3
-1: 2
-2: 4
-4: 4
-6: 5
-8: 6
-10: 6
-12: 6
-14: 6
-16: 8
-18: 8
-20: 8
-22: 8
-24: 10
-26: 8
-28: 8
-30: 12
-32: 14
-34: 12
-36: 10
-38: 12
-40: 12
-42: 9
-44: 12
-46: 12
-48: 12
-50: 12
-52: 14
-54: 14
-56: 14
-58: 12
-60: 14
-62: 14
-64: 12
-66: 14
-70: 14
-72: 14
-74: 14
-76: 14
-80: 18
-88: 20
-90: 14
-98: 17
diff --git a/2017/inputs/day_13_example.txt b/2017/inputs/day_13_example.txt
deleted file mode 100644
index 0de4bec..0000000
--- a/2017/inputs/day_13_example.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-0: 3
-1: 2
-4: 4
-6: 4
-
diff --git a/2017/inputs/day_14.txt b/2017/inputs/day_14.txt
deleted file mode 100644
index 1155654..0000000
--- a/2017/inputs/day_14.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-uugsqrei
-
diff --git a/2017/inputs/day_14_example.txt b/2017/inputs/day_14_example.txt
deleted file mode 100644
index e0ffae2..0000000
--- a/2017/inputs/day_14_example.txt
+++ /dev/null
@@ -1 +0,0 @@
-flqrgnkx
diff --git a/2017/inputs/day_15.txt b/2017/inputs/day_15.txt
deleted file mode 100644
index ffb6d14..0000000
--- a/2017/inputs/day_15.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Generator A starts with 591
-Generator B starts with 393
diff --git a/2017/inputs/day_16.txt b/2017/inputs/day_16.txt
deleted file mode 100644
index 8e74751..0000000
--- a/2017/inputs/day_16.txt
+++ /dev/null
@@ -1 +0,0 @@
-x3/4,pm/e,x15/7,pp/l,x5/8,s15,x2/6,s9,x0/4,s7,x8/12,pc/b,x2/14,pe/d,x10/11,pg/o,x9/14,ph/n,x15/8,s13,pe/i,x3/7,s2,pd/b,x4/15,s11,x0/14,s10,x7/3,s8,x2/1,pj/i,s8,x10/14,s5,x4/1,pa/h,s11,x12/6,s1,x1/14,s11,x5/12,s4,pn/b,x7/9,pj/l,x1/8,pd/e,s6,pp/g,x10/2,pi/o,x15/5,pp/l,x6/13,s3,x5/12,pk/f,x1/8,s4,x11/10,s10,x4/15,pe/n,x1/5,s14,x7/2,pc/i,x4/10,pj/p,x6/15,s12,x5/0,pa/n,x8/12,s14,x3/5,pb/d,x4/12,s3,x9/6,pg/h,x3/1,s5,x4/10,pm/f,x12/2,s11,x15/13,pa/g,x0/2,s13,pj/i,s13,x6/10,pn/a,x2/1,pm/f,x10/12,s4,pi/c,x14/13,s4,x15/0,s7,x14/8,s5,x5/2,pe/d,x3/9,s14,x7/0,s10,x6/14,s8,x3/15,pn/j,x2/1,pf/a,x13/10,pe/m,x8/0,s2,x4/7,pc/l,s4,x2/0,s4,x3/4,s12,x11/2,s3,x5/8,s2,x4/6,pn/f,x15/5,s15,x4/12,s11,x1/13,pm/b,s13,pj/h,s15,x9/3,pd/l,x14/15,po/i,x10/7,pd/g,x11/13,s5,x9/14,s6,x1/0,s7,x5/8,s7,x0/11,s10,x7/12,s2,x8/9,s7,pb/j,x3/2,s10,x6/0,pe/l,x4/8,pf/p,x6/0,po/i,x7/2,s10,x10/3,pb/n,x2/13,s3,x15/3,ph/c,s14,x1/8,s10,x13/10,s5,x14/7,s7,x1/5,pk/f,x7/0,s11,x13/2,pc/d,x8/10,pi/h,x5/1,pe/f,s8,pa/j,x13/10,pc/f,s12,x9/12,pa/h,x7/0,s15,x8/13,s8,x15/11,pl/d,x2/8,s8,x3/14,s1,pa/e,x4/8,pp/n,x0/14,s3,x10/12,pg/c,x14/9,s2,x0/10,s11,x9/3,pn/a,x5/4,s15,x12/1,s6,x14/6,pf/c,s7,x15/5,s1,x12/13,s13,x9/4,s13,pb/p,x10/5,pe/c,x6/15,s7,x2/14,s15,x7/6,s13,x5/10,pb/l,x9/7,s14,x1/3,s12,x9/10,pn/h,x7/12,pc/k,x9/4,s2,x5/15,s10,x9/0,s2,x11/4,pg/e,x8/1,pm/h,x3/4,s14,x12/2,pi/d,x1/4,s15,x11/15,s14,x13/10,pb/o,x9/12,s5,x6/2,s13,x7/4,ph/m,s4,x8/12,pi/n,s15,x2/5,pj/p,x10/0,s4,x15/9,pn/m,x14/13,pd/b,x10/9,s5,x1/5,s2,x15/3,pe/j,s7,x0/6,s2,x8/9,s3,x2/3,s9,x5/12,pp/b,x6/3,pf/l,x9/0,s15,x3/2,s12,pb/m,x14/6,s12,x3/15,ph/f,x5/1,s13,x0/15,s8,x1/9,pa/p,s9,x15/13,s7,pf/b,x2/8,ph/g,x10/3,pi/o,x13/5,s1,x4/3,s7,x7/8,s13,x0/13,pn/h,x12/15,s14,x2/6,pc/d,x8/12,s5,x5/3,s10,x10/9,pb/p,x4/11,pm/k,x14/3,s12,po/h,x6/1,s14,x15/3,s13,x7/5,pe/i,x12/6,s8,x8/13,s2,x12/15,s15,x2/4,s13,x10/7,s11,x15/1,s4,x5/11,s8,x1/15,s15,x8/13,s8,x1/15,s5,pb/c,x11/10,s13,pm/p,x0/8,s12,x2/5,pj/i,x14/3,pl/o,x2/11,pe/j,x13/1,pa/l,x3/10,s11,x7/4,pj/m,x5/10,ph/g,x13/9,s5,x3/4,s1,x15/8,s4,x0/1,s5,pd/j,x9/12,s6,pk/g,x4/6,s4,x1/3,ph/n,s9,x4/10,pf/i,s10,pk/j,x3/1,s11,pe/h,x12/4,s6,x10/5,s12,x12/13,s15,x7/5,pn/l,x12/15,s9,x14/11,s8,x5/10,s2,x12/8,pc/b,x3/10,po/n,s14,x6/14,pl/j,x3/10,s4,x1/13,pe/c,x15/0,pa/b,x8/4,s4,pk/c,x5/12,s2,pi/g,x11/7,pe/l,x14/12,s5,x8/4,pg/f,x1/7,s8,x4/13,s12,x10/14,pc/h,x13/2,s1,x15/11,s3,x3/14,s5,pb/g,x2/7,s13,x9/3,s9,x13/1,s9,x3/14,s6,x5/0,s6,x8/14,s3,x11/13,s9,x1/5,s12,x4/2,pf/m,x6/5,pi/o,x15/2,s5,x12/5,pc/b,s2,x9/8,s9,x14/0,s6,x6/1,pe/n,x8/9,po/k,x15/4,pl/f,x11/14,s3,x7/15,s14,x14/12,pe/o,x15/7,s15,x6/1,s13,x13/12,pg/h,x5/0,pe/b,x1/9,s1,x8/2,s2,x3/1,pl/k,x9/0,s5,x8/2,pi/c,s1,x6/14,ph/p,x11/15,s4,x4/14,pn/i,x0/3,ph/p,x4/5,s6,x3/7,s3,pj/g,x0/4,po/k,x3/13,s14,x12/2,s8,x15/5,s11,x1/10,pj/e,x6/9,s14,x0/3,s12,x8/5,s10,x4/15,s13,x11/2,pi/m,x13/1,s13,x8/10,s9,x0/13,s14,x5/10,pd/a,x12/8,pg/h,s12,x9/0,s2,x5/2,pi/m,x6/0,s8,x15/13,s10,x6/2,pc/b,x10/4,s12,x15/1,s2,x12/5,pe/d,x10/8,pc/f,s10,x14/1,s9,x6/10,s2,x5/1,s2,x10/0,pp/l,x3/7,s8,x8/2,s13,x13/12,s11,x7/14,pc/k,x0/5,s15,x11/12,pa/g,x13/8,s11,x4/2,s14,x11/5,s8,x0/7,s15,x4/2,pj/n,x11/8,s10,pg/a,x6/10,s9,x2/11,po/h,x8/3,s12,pf/l,x0/1,s12,x10/9,pg/m,x5/2,pl/e,x12/6,s9,x1/14,s12,x10/5,pa/k,x6/12,pe/g,x10/7,pj/d,x13/0,s8,pm/k,x5/12,ph/a,x15/3,po/l,x9/6,pk/g,x7/3,s14,x4/14,s7,x10/11,pp/m,x8/14,s11,x15/0,s1,pe/d,x13/12,pa/k,x8/14,s5,x9/7,pm/g,x8/12,pd/j,x1/13,s9,x10/6,s2,x14/5,pf/e,s1,x4/2,s8,x3/13,pi/k,x11/10,pn/j,x3/7,s3,x1/12,s10,x14/2,s13,x0/10,s4,x12/8,pp/e,x6/7,s13,x5/13,s13,x3/10,s4,x9/12,s12,po/b,x5/4,s6,x0/10,s4,x12/5,pf/c,s10,x10/15,pe/l,x4/9,s14,x6/5,s1,x2/9,pb/m,s1,x4/8,s7,x1/12,s13,x0/14,pa/o,x12/7,pk/m,x1/10,s11,x15/13,s10,x9/0,s8,x1/7,s11,x9/12,s1,x10/13,s3,x11/14,s3,x12/2,s3,x13/7,s11,x11/0,pf/l,x8/10,s10,x12/7,s8,x8/5,s5,x15/1,pj/n,s9,pp/i,x6/12,s15,x0/1,pg/a,x10/15,s1,x1/0,s7,x12/14,pm/d,s15,x6/11,s1,x7/12,pa/h,x3/9,s12,x8/5,pm/b,x9/1,pp/j,x8/7,pb/k,x1/5,s12,x10/9,pa/i,x1/4,s15,x2/0,s3,x15/10,s14,x11/9,s14,x6/14,s11,x13/2,pl/g,x7/11,s10,x4/15,s15,x12/0,s8,x3/6,pa/f,x11/2,s6,x13/6,s10,pk/d,x10/9,po/m,x13/12,pc/b,x8/4,s13,x1/11,pn/o,x8/13,s14,x15/0,s8,x13/9,s15,pa/i,x6/2,s8,x15/1,pc/m,x10/9,s6,x6/5,s3,pg/l,x8/3,s13,pa/m,x2/13,s15,x0/12,s12,x5/11,s3,po/k,x1/15,pa/f,x14/6,s15,x1/15,s3,x14/4,s4,x15/9,s15,pm/n,x1/5,s15,x3/2,pp/h,x13/5,s13,pm/e,x7/10,s5,x15/9,s10,pn/g,x10/6,pb/l,x0/8,s9,x13/1,s14,x5/8,s7,x15/11,s2,x13/4,s14,x12/3,s15,pe/n,x4/0,pk/i,x13/9,s14,x5/15,s11,x3/11,pa/e,x4/5,s13,x3/10,pf/d,x14/0,s14,x10/12,pk/e,s1,x0/1,pm/o,x3/8,s13,x15/9,s7,x11/10,pg/n,s6,ph/p,s12,x12/15,pi/a,x9/0,pe/m,x4/13,pi/p,x11/5,pj/k,x7/6,s7,x3/12,s7,x0/9,pa/d,x15/10,s9,x2/11,s4,x6/1,s4,x13/9,pb/c,x0/11,po/n,x13/6,s7,x5/1,pj/e,x4/10,pp/h,x13/11,pc/d,x3/8,s12,x4/9,s5,pg/m,x13/14,pa/f,x15/3,pi/k,x9/5,pb/e,x3/12,s8,x5/10,s8,po/j,x7/2,s10,x10/11,pg/m,x8/4,s14,x9/11,s5,x2/3,s6,x1/14,pf/h,x2/3,s11,pc/b,s1,x5/6,s11,x13/10,ph/j,s8,x14/9,s5,x4/1,pf/n,x6/13,pc/h,s1,x12/2,pa/j,x1/4,s8,x12/5,ph/o,x6/11,s4,x7/2,pl/b,x9/6,s14,x8/10,pk/h,x0/4,s1,x2/10,pd/o,x4/13,s5,x0/14,s11,x4/10,pl/b,s6,x14/7,pf/o,x6/15,s12,x4/1,s4,x12/13,s6,x8/10,pd/h,s9,x11/0,pb/a,x12/5,pg/h,x15/11,s4,x8/12,s11,x7/14,s15,x8/3,s2,x12/4,po/e,x6/15,s10,x8/10,pi/d,x6/4,pk/g,x5/12,pa/i,x2/9,s13,x15/12,pc/g,x11/9,s11,x2/12,s5,x1/5,pj/p,x15/8,s9,x12/1,s1,x0/2,pf/l,s3,x11/6,s8,x0/10,s9,x5/1,pn/i,x9/2,pd/k,x4/1,pp/l,x10/5,s10,x8/3,s2,x6/9,pg/e,x8/4,s13,x9/2,s8,x14/0,pb/m,x15/3,pi/g,x13/11,s2,x4/14,pj/o,x7/12,s10,x5/2,pm/d,x6/14,pj/b,x10/4,s15,x9/14,s1,x13/3,s7,x8/9,s5,x11/10,pc/a,s12,x9/6,s5,x13/8,s9,x15/12,s5,x0/6,s13,x15/1,s2,x6/3,pd/g,s3,x1/14,s13,x15/7,s6,x12/11,ph/n,x13/2,s12,pm/d,x12/15,pc/p,s12,x14/3,s6,x7/12,pl/h,x6/2,s1,x7/0,pn/c,x13/15,pe/b,x6/11,s1,x2/8,s6,x6/9,s7,x14/1,ph/i,s15,x13/3,s14,x5/6,pm/p,x10/3,s7,pn/d,x12/14,s10,x4/7,s5,x9/2,s9,x10/5,s13,x12/13,ph/k,x15/6,pg/c,x11/4,s1,x9/7,s1,x4/15,pf/m,s10,x6/10,pi/o,x12/2,s8,x4/8,pn/h,x9/6,pd/g,x0/3,s9,x1/7,pj/h,x6/12,pk/f,x7/10,pi/n,x12/0,pb/k,x14/3,pc/g,x7/1,po/n,x4/10,s11,x3/8,s9,x12/6,s13,x7/10,pb/k,x13/5,pc/a,x7/15,s2,x9/12,s14,x11/2,s10,pb/j,x14/5,s14,x4/10,s12,x6/14,s3,x3/13,po/n,x14/7,pb/m,x9/2,pa/k,x14/8,pc/l,x6/10,pj/m,s9,x13/12,pn/a,x15/1,s14,x5/8,pm/c,s1,x11/0,pn/d,x5/14,pc/b,x9/1,s14,x2/8,pi/l,x13/15,s14,x11/2,po/b,s11,x12/10,s12,x7/4,s7,x14/13,pd/n,x6/12,ph/m,x3/10,pp/f,x0/2,pl/g,x5/6,s3,x2/12,s11,x6/5,s11,x13/2,s8,x10/1,s7,pp/d,x11/14,s3,x9/13,pk/o,x2/12,s11,x4/7,s7,x15/2,pl/j,x1/12,s1,x5/9,s12,x12/15,s15,x3/7,s2,x5/8,s14,x2/10,po/m,s9,x5/7,s13,x11/9,pk/g,x3/14,pb/m,x5/2,pk/p,x4/11,s7,x3/6,s4,pe/h,x5/10,pn/j,x0/13,pg/k,x3/11,s11,x4/8,s13,x2/7,po/p,x5/9,pi/f,x8/4,s3,pn/j,x3/13,s2,x12/14,s5,x1/5,s8,x11/15,pf/c,x14/10,s10,x12/0,pa/d,x15/8,s8,x3/0,s15,x1/10,s11,x2/14,pb/n,x5/10,ph/j,x2/12,s12,x8/0,pa/d,s1,x9/15,pm/g,x14/4,s5,x11/9,s14,x14/0,pj/f,x15/6,s14,x9/13,s14,x7/4,s3,x12/10,s4,x9/13,pd/l,x10/6,pe/f,x0/13,pm/h,x6/1,s1,x12/9,pf/p,x2/14,s11,x8/7,ph/l,x15/3,s15,x11/5,pf/p,x15/2,pm/g,x0/10,pe/n,s11,x5/8,pl/o,x0/7,pa/e,x14/10,s11,x15/5,s13,x9/6,pl/o,x14/7,s5,x8/13,pp/m,x0/3,s12,x1/10,pd/l,x15/11,pj/f,x14/10,s5,x1/3,pl/p,x4/7,s8,x12/9,pe/m,x8/14,pa/n,x3/12,ph/o,s10,pi/e,x5/0,pm/g,x3/14,s8,x12/8,s13,x3/13,pc/j,x1/14,s2,x10/6,pe/f,x7/4,s13,x15/12,s7,x2/7,s1,x11/0,s6,x10/7,pd/n,s5,x4/0,s2,x12/10,s13,x9/2,s8,x14/13,s2,x12/0,pk/m,s14,x1/10,pj/c,x9/15,pm/p,x5/14,s5,x0/13,s11,x12/15,s7,x0/13,pl/i,x4/5,pn/o,x8/6,s5,x5/1,pp/b,x14/15,pc/m,x4/3,s3,x5/7,pb/f,x6/8,pi/l,x11/0,pb/a,x6/14,s4,x8/13,s9,x9/7,s9,pc/o,x2/14,s9,x15/10,pl/i,x2/1,s15,pp/b,x8/13,pk/n,x3/11,s11,x6/4,s1,x15/13,pd/i,x5/7,s8,x15/14,s4,x12/3,s4,x13/2,s4,x10/3,s10,x1/14,s14,x9/0,s1,x8/14,pp/o,x0/11,pd/c,x12/9,s3,x14/6,s13,x4/11,s2,x9/12,pn/e,x0/6,pk/l,x11/4,s9,pd/c,x7/9,po/a,s14,x14/4,s10,pd/j,x6/15,s4,x4/11,pl/h,x1/8,pj/k,x2/10,s14,x14/1,pl/o,x11/0,s4,x13/10,ph/e,x1/6,s8,pm/j,x0/8,pc/o,x15/10,pf/m,x7/3,s10,x15/0,s1,x6/1,pe/l,x13/7,s10,x8/1,s12,x4/6,s11,x5/15,s15,x14/7,pb/g,x0/12,pf/o,x1/9,s8,x0/7,s10,x1/11,s7,x4/15,pl/j,x3/9,s9,x14/15,s12,x9/1,s7,x5/8,pm/n,x6/13,pk/b,x0/7,s8,x11/10,s3,x13/12,pn/h,x10/4,pa/p,x13/15,s12,x4/14,s13,x2/1,s5,x15/10,s10,x9/3,po/m,x15/11,s11,x8/6,s1,x11/9,s7,pb/l,s8,x8/0,s15,x15/5,s14,x8/10,s5,x15/14,pf/h,x10/13,s14,x5/9,pm/c,x14/8,s9,x9/7,pg/a,x1/11,s14,x8/3,pm/n,x9/4,s4,x2/6,s3,x3/5,pf/a,x9/0,pp/k,x13/14,s1,ph/e,x1/5,s13,x3/15,s5,x12/9,s3,x7/11,s1,x6/12,pm/b,x10/11,s7,x4/1,pn/l,x6/5,s6,x12/7,ph/o,x0/8,pg/f,x12/6,s5,x0/2,s1,x10/9,pa/c,x6/1,s12,pl/j,x4/15,pi/o,x3/11,s6,x6/9,s7,x2/8,ph/j,x9/12,s14,x6/4,s6,pm/k,x13/15,s10,x9/11,pp/c,x7/6,s2,x11/10,s15,x14/8,pl/i,x4/5,ph/c,x13/12,pl/g,x8/11,pd/p,x4/9,ph/e,x12/6,s5,x13/10,pn/c,x3/5,s5,x1/8,pk/d,x14/6,s10,x4/3,s10,x12/11,s2,x5/2,pi/j,s14,x11/15,s9,x1/9,pm/k,x10/15,pp/f,x5/4,s4,x2/7,s5,x10/13,pn/o,x1/11,s10,x0/12,pe/b,x5/4,s15,x12/14,pc/i,s2,x13/4,s14,x14/1,s1,x2/4,ph/m,x14/1,s15,x3/13,pc/b,x14/9,s4,x6/8,s9,x12/14,s5,x10/9,pa/k,x14/13,s3,x5/7,s4,pj/i,x6/4,s1,pe/a,x8/5,s14,x12/9,s9,x13/14,s11,x3/15,s3,x13/11,s6,x12/7,pc/m,x8/11,s11,x10/1,s10,x15/12,pp/g,x3/4,pm/c,x15/13,s12,x10/8,s8,x5/12,pj/h,x13/4,s7,x11/9,s15,x10/12,s7,x2/11,pf/m,s13,x15/4,s4,x5/3,s4,ph/p,x4/8,s6,x9/14,pa/b,x5/4,s11,x11/8,pf/m,x15/7,s7,x4/2,s4,x15/9,pp/g,x5/7,s1,x13/11,pd/m,x5/0,s6,x3/8,pb/e,x12/2,s3,x3/6,s15,x13/2,pg/o,x5/1,s9,x10/13,s1,x2/14,s5,x10/6,s9,x5/1,pj/h,x10/3,pc/b,x2/8,pd/j,x12/1,s9,x13/8,s12,x15/12,s5,x8/9,s15,x13/0,s9,x2/11,pm/i,x8/10,s3,x14/0,s10,x10/8,s12,x2/5,s8,x1/14,pa/d,x2/0,s3,x14/9,s15,x1/0,s8,x13/7,pi/g,x0/1,s10,x10/13,pl/d,s7,x2/8,s10,x0/15,s12,x4/3,pi/k,x11/5,s3,x7/2,s15,pg/f,x4/0,pp/c,x10/15,s10,pj/a,x4/2,pg/o,s13,x9/8,pi/f,x5/7,s12,x12/9,pe/m,x2/6,s5,x11/0,s8,x6/12,pd/a,x0/2,s7,x9/7,ph/e,x14/11,pl/c,x4/3,s11,x7/0,pd/b,x8/2,s7,x15/13,pf/p,x9/11,s9,x0/10,pd/g,x2/4,pa/j,x3/8,s5,x12/1,s12,x15/5,pb/e,x9/10,pj/p,x6/5,pm/k,x11/7,pd/h,x4/0,pf/b,x10/5,pn/a,x14/11,s14,pj/l,x7/1,s9,x5/13,pg/h,x1/11,po/c,s11,x7/12,s12,x2/14,s2,x15/10,pb/d,x8/13,po/h,x12/6,pl/e,x9/11,s6,x14/15,s13,x12/13,ph/d,x9/7,s5,x11/10,pj/b,x5/13,s12,x2/11,s3,x5/6,s11,x10/4,s2,x13/11,s15,x0/2,pa/n,x12/13,pb/h,x14/3,pf/e,x9/6,s8,pj/l,x12/13,pd/k,x15/0,s5,pg/m,x14/10,pe/k,x4/3,s14,x1/9,s1,x15/0,s5,x3/8,s10,x2/1,pn/i,x0/4,s10,pj/p,x7/5,s15,x3/14,s15,x7/5,s4,x15/6,s10,x7/3,s2,x8/12,s13,x10/14,s15,x3/12,pg/i,x1/9,s6,x4/3,ph/b,x0/5,s5,pa/c,s7,x15/8,s8,x0/10,s9,x9/12,s6,x11/7,s2,x15/1,pm/p,x8/2,s15,x3/4,s3,x6/5,pa/f,x14/8,pm/b,x15/11,s2,x0/3,s6,x12/9,pi/e,x15/7,pp/n,x4/2,s15,x15/0,pf/g,x13/14,pj/m,x1/0,pe/i,x10/11,pp/d,x15/6,s2,x10/13,pj/o,x12/9,ph/e,x14/10,pm/a,x3/0,s4,x15/4,s11,x14/8,pp/n,x6/0,s3,x10/3,s3,x13/0,s7,x5/2,s2,x1/13,pk/j,x9/10,pn/a,s14,x13/8,pc/k,x6/10,pi/j,x3/12,s2,x9/8,s7,x3/1,pl/e,x12/15,po/m,x5/1,s1,x2/7,pk/l,x3/15,s10,pi/c,x11/10,s15,x12/0,pj/g,x8/7,pi/k,x11/15,s6,x1/13,s11,x14/8,s11,x13/5,s2,x15/4,s9,x1/9,pm/p,x3/11,pb/g,s13,x9/0,pl/k,x6/2,pb/f,x11/4,s14,x8/3,s6,x4/6,s10,x13/15,s9,x9/6,s6,x14/4,pd/i,x10/12,pl/h,x11/13,po/n,x6/9,pg/p,x14/7,s1,x0/11,s13,x9/3,pi/j,x14/1,s8,x8/13,s12,x4/11,s8,x13/3,pd/e,x6/7,s10,x2/5,s11,x9/14,pl/g,x15/1,pn/a,x14/12,s8,x1/15,s11,x6/9,s8,x3/7,pd/g,x11/0,pj/b,s10,x8/1,pa/m,x4/10,pe/d,x2/6,pg/b,x13/0,s14,x3/12,s11,x9/15,s6,x14/10,pk/p,x6/3,s7,x13/15,s10,x10/3,pa/e,x4/0,s13,x3/7,pl/n,s5,x5/15,pj/b,x0/1,s10,x12/13,s2,x0/6,pl/g,x3/12,pm/c,x5/1,pn/p,x4/6,pk/d,x8/2,s6,x14/12,pi/l,x3/9,s12,x6/5,s1,x2/10,s12,x12/3,pe/n,x15/4,pf/l,x12/14,pb/d,s13,x7/9,s4,x11/3,pe/f,x6/13,po/j,s8,pe/h,s12,x11/12,s15,x1/3,pl/g,s12,x10/13,s9,x5/8,s6,x0/6,s4,x5/3,pj/m,x10/2,s13,x15/7,pe/g,x5/3,s12,x1/9,s12,x2/14,s4,x11/0,s11,x2/7,pi/k,x11/9,po/b,x14/13,s11,x2/12,s10,x6/5,s11,x8/11,s14,x3/4,s3,x12/8,s2,x11/6,s8,x7/5,s9,x3/9,s13,x10/14,s2,x2/0,s8,x5/7,s5,x14/2,s1,x4/13,s5,x14/8,s2,pp/m,s15,x13/1,s5,x6/7,s4,x11/12,s5,x14/3,s2,x8/10,s7,pb/f,s1,x7/6,s7,x15/9,s13,x13/12,pg/h,x3/4,s13,x13/9,s5,x12/6,pk/c,s10,x8/1,s11,x14/0,pm/p,s12,x2/1,pb/h,x0/4,pm/l,x13/6,s3,x5/14,s14,x10/3,po/j,x0/9,s12,x1/5,s9,x8/4,s1,x12/6,ph/g,x10/11,s5,x12/9,pd/n,x1/14,s6,x11/4,pi/e,x2/1,pn/f,x11/13,s1,x5/0,s2,x6/9,pa/e,x0/10,pg/f,x13/15,s9,x5/11,po/c,x15/13,s15,x1/7,pp/l,x6/15,pg/k,x12/14,s7,x10/1,s12,pf/i,x2/7,s9,x13/4,pl/d,x14/10,s10,pm/k,x15/1,pd/e,s1,x11/12,s2,pg/o,x6/9,s14,x14/2,s4,x8/10,s4,x4/14,s15,pa/k,x3/11,s14,x14/15,pl/c,x8/3,s13,x5/1,s14,x14/8,s13,x3/7,pf/p,x13/8,pg/l,x7/6,s2,x11/9,ph/o,x0/2,pd/e,x4/6,s5,x7/2,s2,pj/i,s5,x5/12,s13,x0/10,s5,x7/8,s1,x4/1,s6,x7/9,s10,x3/15,pd/p,x2/11,s9,x0/10,pa/f,x15/4,s1,x6/10,pb/p,x4/14,s7,x2/13,pg/c,x12/10,s1,x13/4,s1,x1/7,s4,x4/5,pn/k,x11/10,pj/i,x1/0,s7,x14/6,s9,x11/5,s10,x4/13,s7,x1/12,s9,x3/14,s13,x0/1,pc/d,x11/10,s7,x8/2,s2,x5/11,s8,x15/6,pf/j,x10/0,s5,pm/d,s5,x7/5,s6,pg/a,x1/9,s4,x3/14,s14,pj/k,x12/10,s4,x15/3,pn/p,x6/11,pa/d,x10/8,s15,x9/11,s2,x2/3,po/g,x12/15,s15,x0/13,pj/p,x4/9,s6,x15/11,pk/g,x5/12,s3,x9/4,pj/a,s6,x0/14,s12,x12/7,pm/k,x2/0,s7,x6/1,pa/l,x14/5,s12,x1/4,s10,pn/g,x14/10,s8,x6/8,po/p,s8,x1/10,pc/a,x9/2,pg/h,s15,x10/11,pc/m,x14/4,s8,x11/7,s13,x9/12,s1,x6/2,pj/b,x1/12,s1,x10/6,ph/i,x3/13,s10,x2/7,s9,x14/4,s8,x3/5,s7,x7/8,pk/m,x12/15,s14,x0/9,s6,x5/4,s13,x0/11,s15,x15/14,pa/h,x4/9,s10,x5/0,s1,x13/14,s8,x12/15,s6,x2/4,pp/l,x5/6,pk/o,x13/3,s3,x8/10,s5,x11/12,ph/a,x5/0,s2,x6/13,pp/m,x5/2,pe/d,x6/13,po/n,x7/9,s13,x14/8,pm/f,x1/11,s6,pj/i,x2/9,s10,x15/5,pf/l,x14/9,s6,x15/1,s2,x4/8,pm/o,x15/13,s10,x8/1,pc/b,s6,x3/7,s1,x13/2,s4,x4/1,s4,x2/11,pe/m,x14/4,s10,x7/9,pd/k,x2/13,po/c,x3/9,s10,x13/8,s14,x4/7,s5,x2/0,pb/f,x12/6,pe/p,x11/9,s9,x12/7,pm/i,x4/3,s6,x2/13,pg/j,x12/0,s3,pl/b,x11/13,s10,x15/8,s2,x9/5,s4,x6/10,s2,x5/13,s13,x7/11,s15,x4/2,s8,x0/11,ph/p,x5/2,pm/n,x4/0,pe/l,x13/8,s13,x10/6,pp/b,x7/9,s14,x1/0,po/i,x3/13,s5,x8/12,pm/e,s10,x9/0,pp/k,x4/13,s8,x5/10,s5,pc/d,x14/4,s5,x12/10,pj/l,x13/11,s2,x8/1,s11,x3/12,s6,x10/2,s6,x0/12,s15,x9/7,pb/p,s7,x2/3,s11,x8/1,pk/m,x5/15,pf/d,x11/6,s10,x1/8,s11,x10/9,pm/p,x7/11,pn/b,s5,x13/6,s2,x8/9,s5,x7/13,s13,x4/1,s12,x3/9,pd/f,x13/14,s8,x2/0,s10,x10/14,pb/h,x11/1,s2,x15/3,s5,x10/6,s11,x8/1,pm/g,x11/12,pa/b,x5/4,s12,x7/12,pg/o,x1/15,pn/d,x13/9,s7,x2/4,s4,x12/14,pm/i,s5,x8/11,pb/g,x9/0,s6,x1/14,s3,x4/9,pd/i,x2/6,s14,x3/7,s4,x8/13,pf/k,x6/9,s7,x10/14,s3,x8/9,s8,x0/15,s1,x8/9,pl/n,x11/12,s12,x3/9,pc/a,x11/4,s2,x1/12,s12,x4/10,pb/l,x3/8,s3,x0/1,s1,x10/8,s6,x7/6,pn/e,s6,x9/8,s12,x7/5,pm/k,x14/0,pb/i,x12/5,s1,x15/3,s14,x6/10,s15,x15/11,pa/f,s7,x3/4,pj/h,s9,x8/2,pb/g,x4/3,s15,x2/11,s9,x1/4,s2,x0/12,pf/c,x13/10,s11,x5/14,s8,x9/0,s9,x11/8,pj/n,x2/15,s8,pf/k,s10,pb/j,x10/6,s13,x13/2,pg/n,x11/10,pi/j,x6/0,s12,x10/9,s10,x12/2,s11,x7/13,pa/d,x3/15,s2,x11/12,s11,x10/5,s6,x8/12,s8,x5/15,s15,x13/6,s3,po/i,x11/12,s9,x15/1,pb/f,s2,x12/6,s9,x13/4,s5,pp/d,x5/2,s6,x0/6,s9,x9/11,s14,pa/o,x15/3,s8,x9/1,s8,x11/12,pe/i,x6/3,s8,x0/4,po/f,x7/11,pm/n,x15/8,pg/o,x12/3,s8,x14/8,pk/b,x12/1,s8,x9/4,s7,x10/12,s12,x4/6,pe/d,x10/2,pb/c,s15,x4/12,s10,x9/1,po/n,s8,x3/2,pm/g,x4/1,pi/p,s11,x13/15,pk/a,x9/0,pe/m,x15/14,s4,x6/7,pl/k,x10/13,s14,x7/3,pg/e,x11/1,ph/k,s9,x15/7,s11,x14/9,pc/i,x6/15,pn/f,s6,x9/3,pk/c,x1/8,s2,x9/4,s8,x7/13,s3,pa/o,s11,x14/15,pm/e,x11/8,s1,x6/0,pb/k,x11/15,s14,x12/6,s4,x1/8,pa/h,s9,x5/0,s4,x10/9,s3,x0/4,s1,x12/7,s8,x5/15,s3,x11/0,s1,x5/12,s7,x0/6,s14,pd/c,x3/7,pa/n,s5,x12/4,s2,x3/13,pg/e,x2/15,s10,x4/1,s12,x8/15,pn/l,x3/14,s4,x1/15,pe/j,x5/4,s6,x14/7,s2,x12/13,pc/g,x2/3,pn/b,x0/6,s9,x10/2,pc/a,x15/8,pf/g,x10/11,s1,x8/13,pe/h,x4/6,pj/g,s15,x9/12,pm/l,x15/10,s8,x7/12,s8,x6/9,pn/i,x4/0,pd/a,x3/1,s7,x2/4,s1,x10/0,s4,x9/11,pe/k,x12/15,s13,pf/i,x14/11,s2,x0/15,s11,x12/13,po/k,x1/7,pi/j,x5/2,pk/m,x0/10,s2,x5/4,pp/d,s6,x8/12,pe/c,x0/14,s6,x11/6,s9,x9/7,s7,x6/0,s10,x5/2,s5,x14/11,s12,x0/4,pp/a,x9/12,pm/d,x14/6,s2,x15/4,pl/c,x11/12,s4,x7/5,po/j,x14/1,s12,pn/e,x10/4,pm/a,x2/13,s10,x12/6,s2,x9/2,s4,x3/6,s6,x2/0,s15,x11/14,pn/c,x15/13,s4,x14/0,s4,x11/9,s13,x2/6,pm/b,s8,x15/1,po/n,x9/10,s10,x5/0,pg/j,x2/8,s13,x0/15,s7,x9/1,s3,x8/6,s9,x4/0,po/l,x14/5,pd/h,x8/4,pa/l,x13/11,s7,x15/14,pb/n,x10/8,pj/f,x15/13,s13,x6/5,s15,x1/11,pd/o,x3/9,s4,x14/11,pb/m,x5/15,pa/h,s6,x1/11,pj/b,x5/14,s15,x15/3,s11,x5/12,pa/m,x9/11,s1,x10/1,s5,x12/11,pc/i,x4/1,s6,x11/13,pl/f,x1/6,s11,x15/11,pi/h,x7/10,s14,x2/9,pd/m,x8/1,s13,x0/3,s3,x7/12,pj/e,x2/14,s7,x9/12,s4,x1/10,pp/g,x9/13,s14,x12/0,s13,x1/3,pi/o,x5/9,s5,x4/12,pf/m,s15,x11/3,s11,x13/4,po/k,x5/0,s11,x7/13,pl/d,x15/11,s14,x13/6,s14,pe/o,s11,x12/14,s14,pc/j,x5/7,pa/g,x6/15,s1,x14/3,pd/j,s15,x1/8,s14,x2/6,s3,x1/0,pb/n,x14/6,pg/e,x4/13,s4,x7/0,pf/n,s10,x6/12,pj/o,x9/14,s10,x11/1,pi/m,x7/8,pf/d,x11/14,s10,pm/b,x4/5,s9,x9/7,po/j,x4/15,pi/b,s4,x8/2,s1,x3/13,s12,x15/1,s11,pm/d,x11/8,s1,x12/6,pf/g,x1/7,pm/p,x15/5,s11,x8/14,pl/h,x0/1,pe/a,x4/10,pm/p,x6/12,po/f,x7/2,pp/m,x14/3,s4,x10/15,pa/f,x0/14,pc/b,x7/11,s1,x15/9,pa/o,x3/5,pd/e,x11/6,po/m,x15/12,s5,x10/6,pb/h,x2/12,s5,x10/4,pg/i,x14/12,s4,x8/1,s13,x3/13,pj/b,x5/0,s3,x6/14,pg/m,x7/3,s4,x10/1,pb/l,s12,x8/15,s6,pm/f,x6/9,s14,x14/3,pg/k,x5/12,pd/n,x6/14,pj/f,x10/12,s1,x14/1,pc/g,x10/7,s11,x4/14,s9,x3/15,s12,x12/11,s8,x5/1,s6,x2/13,s5,x6/8,pm/k,x14/5,pf/p,x0/11,s12,x7/13,s3,x3/14,pj/h,x6/2,pe/k,x4/7,po/h,x3/8,s5,x14/10,s12,x12/4,s7,x13/14,pm/i,x4/0,po/d,x12/7,pp/b,x15/10,s7,x8/5,pl/a,x6/10,s7,x13/15,s6,x3/8,s11,x13/12,s13,x14/6,pb/m,x13/9,pe/j,x15/11,pb/f,x5/13,s3,x4/1,s3,x12/7,s5,pk/c,x15/10,s11,x1/13,s15,x9/5,s1,x14/3,pn/p,s10,x7/15,s2,pl/d,x0/2,pa/m,s7,x1/13,s10,ph/e,x6/12,pn/a,x3/15,pg/i,x10/8,pd/o,x7/13,pc/a,x10/0,pi/b,x3/12,pc/h,x15/1,s1,x0/11,pe/f,x3/15,pm/k,x8/4,pf/b,x7/10,s3,x2/13,po/k,x6/1,pl/h,x7/3,s6,pf/o,x8/1,s10,x14/13,pl/p,x4/8,s5,x14/5,pb/o,x13/2,pf/c,x9/1,pk/o,x6/11,s4,x7/0,s6,x3/11,s3,pc/b,x2/5,s15,x4/15,pm/o,s11,x7/5,pb/n,x12/10,s11,x13/15,pp/c,x8/14,s12,x3/1,s1,pe/g,x4/14,s6,x3/13,pc/p,x10/8,pn/e,s11,x4/11,s1,x7/10,s4,x5/14,pd/g,x2/12,s5,x3/13,s14,pp/b,x14/4,pk/n,x3/1,pd/g,x11/10,pe/p,s6,x9/8,s10,x11/3,s1,x5/10,s13,x8/15,s2,x12/9,s1,x0/10,pa/i,x1/9,pd/o,x5/12,s13,x2/0,s10,x13/9,s14,pb/p,x0/10,pa/h,x9/5,s3,pm/k,x4/8,s10,x6/10,s4,x11/3,s12,x4/7,s13,x9/6,s5,pd/i,x7/10,po/l,x4/14,s1,x0/2,s6,x1/5,s9,pm/c,x14/4,pp/n,x2/5,pl/k,x15/4,s2,x1/14,s9,x0/13,s14,pm/i,s1,x8/2,s10,x12/13,s1,x8/2,s3,x6/1,pb/e,x4/3,s2,x2/12,s6,x0/5,po/j,x8/4,pi/a,x10/2,pp/f,s5,x4/8,pl/g,x1/0,s8,x12/3,s3,x5/15,s4,x3/0,pm/n,x11/6,s5,x14/13,s14,x6/3,s7,x2/1,s15,x7/6,s14,x5/9,s9,x1/15,s9,x6/0,s12,x7/9,s13,x13/12,s14,x14/9,s15,x8/13,s5,x5/14,s8,x11/13,pj/b,x2/3,pn/o,x15/5,s4,x6/13,s6,pd/l,x9/8,s1,x0/14,s10,x6/5,s2,pp/i,x12/9,s7,x14/2,ph/f,s4,pi/l,x15/11,s12,x13/2,pn/h,s6,x4/10,s15,x13/6,s15,x15/8,s5,x4/14,pf/i,x3/7,po/g,x2/4,s5,x14/8,s10,x9/3,s4,x2/13,pf/a,x15/11,pd/c,x12/13,s1,x10/11,s12,x1/7,s10,x14/15,s10,x6/3,s12,x9/15,s14,x3/10,s11,pa/b,x14/2,s12,x5/13,s5,x9/2,pn/k,x7/1,s7,x4/5,s13,x13/6,s5,x15/3,s4,x13/1,pa/h,s8,x3/4,pm/e,x5/10,pb/g,x3/15,pe/i,s7,x4/5,s2,x2/15,s1,pm/a,x6/0,s5,x13/11,pp/b,x5/9,s6,x2/10,pk/o,x1/13,s3,x10/14,s1,x6/5,s11,x2/7,pg/i,s12,x13/9,s8,x2/10,s11,pm/a,x5/14,pg/o,x11/4,s11,x6/13,pd/p,x4/5,s1,x10/13,s15,x0/2,s1,x3/10,s4,x5/9,s11,x3/13,s13,x5/9,s1,x11/8,s14,x14/4,s9,x12/6,pm/f,s15,x7/2,pc/k,x5/6,s14,x13/1,pa/i,s10,x4/9,ph/c,x6/5,s1,x11/14,s1,x9/13,s14,pa/j,x7/14,pi/b,x12/10,pd/a,x0/11,s15,x12/7,pb/i,s12,x9/15,pe/f,x5/3,s7,x10/4,pg/i,s2,x1/6,s15,x8/14,po/j,s10,x9/11,pe/d,x2/3,s11,x14/10,s5,x13/3,pm/l,x7/15,pn/e,x12/6,s12,x8/5,s1,x1/14,s5,x6/7,s2,x3/12,s3,x5/15,s4,x13/3,s2,x11/2,pd/b,x7/0,s10,x13/8,s6,x6/5,s13,x7/8,pg/l,s10,x11/9,pn/a,x8/1,pm/f,s14,x15/14,s14,x2/9,s12,x13/11,s8,x5/2,pk/o,x7/11,pf/j,x15/13,pi/m,x1/7,s15,x13/14,s3,x12/0,s4,x6/1,s9,ph/l,x8/2,s4,x12/10,pm/n,x11/1,pl/j,x2/6,s7,x8/5,s7,x15/13,s6,x8/7,s2,x2/3,pk/p,x0/9,s9,x6/10,po/e,x3/14,pa/p,x8/15,s6,x3/7,s12,x14/9,s13,x2/8,pi/c,x13/15,s6,x1/3,pp/j,x5/10,s8,x15/1,po/f,x13/6,s13,x10/12,pp/j,x2/7,s14,x5/4,pe/a,x3/11,s9,x13/9,s10,x5/11,pg/n,x9/7,pa/l,x1/14,s6,x9/10,s14,x13/3,pn/o,x15/9,s3,x11/10,s7,x13/3,s7,x12/10,s1,x7/14,s4,x9/15,s8,x8/7,s3,x5/14,s7,x11/13,pc/g,x4/9,pi/n,x2/3,s11,x11/10,s13,x5/12,pf/e,x3/2,s4,x10/1,s12,po/m,x9/0,s6,x2/14,pl/f,x12/3,s6,x9/2,s10,x15/6,pi/c,x2/7,s7,x14/0,pl/m,x13/1,pe/p,x9/2,pb/j,x8/1,s11,x3/11,s4,x15/12,s7,x14/9,pg/l,x3/0,pa/p,x13/4,s5,x1/8,s10,x10/3,s6,x6/12,s8,x10/7,s1,x9/13,pk/h,x2/7,s15,pi/b,s5,pe/j,x12/6,pn/k,s14,x4/5,pi/b,x14/15,s15,x7/1,pc/a,x8/10,s6,x0/1,s4,x7/9,s10,x13/1,ph/l,x15/11,pg/a,x7/3,s4,x15/1,s1,x14/7,s13,x6/15,s8,x0/10,pm/o,x4/6,s8,x3/13,s2,x9/6,pg/p,x3/11,pi/k,x6/14,s7,x7/10,pe/l,x8/15,s9,pg/c,x7/11,pf/d,x2/8,s12,x15/11,s6,x5/9,pk/i,s5,x7/10,pa/g,x12/8,s5,x7/15,s6,x13/1,pf/b,x3/7,ph/n,x15/13,s4,x9/4,pc/g,x3/2,s12,x11/12,pm/o,x14/6,s6,pj/i,x3/4,s7,x12/0,pk/b,s11,x15/1,s14,pn/d,x11/0,pg/m,x12/1,s4,x5/7,s8,x9/15,s3,pj/h,x0/1,s10,x2/4,pd/m,x13/14,s11,pb/p,x3/10,s5,x15/8,pm/c,x4/14,s4,x5/8,s2,pa/h,x14/2,pe/i,x15/10,pp/b,x14/5,s15,x13/7,s12,x5/6,pa/c,x11/12,s9,x10/5,s7,x0/13,ph/f,s10,x3/12,s8,x15/2,pp/a,x5/0,s14,x13/11,s2,pn/e,x15/0,s11,x4/13,po/c,x2/5,s13,x11/1,s5,x12/2,s15,x15/13,s14,x9/5,s10,x13/12,pn/e,x10/8,pk/i,x0/9,s8,x2/10,s1,x8/0,po/c,x10/14,pb/h,x0/5,pn/i,x14/10,s2,x3/6,s8,x1/10,s15,x2/0,s13,x15/8,pc/h,x2/3,s15,x5/9,s11,pb/a,x14/4,s10,x13/7,s11,x6/2,s1,x5/4,pj/e,x9/3,ph/l,x15/4,s3,x5/0,s4,x10/3,s4,x4/14,pm/d,x13/9,s3,x15/7,s6,x9/14,s8,x2/10,s7,x0/4,s4,x11/6,pp/a,x13/4,s4,x0/12,s9,x14/8,pc/n,x4/2,s14,x11/9,pj/k,s14,x15/10,pd/g,x6/7,s8,x8/15,s8,pm/j,x11/1,pg/a,x5/8,pk/i,x10/2,s13,x5/14,s15,x1/15,pl/m,x5/14,s3,x10/3,pj/g,x13/9,ph/p,x5/2,pi/o,x15/12,s11,x6/10,pg/l,x8/5,s8,x4/13,pe/k,x3/0,pn/j,x2/5,s3,x10/8,pd/m,s10,x2/12,s14,x0/7,s10,x15/3,s15,x6/13,s14,x4/0,s15,x11/6,s2,x3/13,s8,x4/14,ph/k,s2,x15/6,pe/o,x3/14,s11,x1/7,s7,x2/11,pa/l,x3/0,pf/o,x4/7,s10,x11/6,pg/i,s6,pj/n,s14,x9/4,ph/d,x2/12,s13,x13/0,s13,x3/8,po/p,x14/11,s1,x0/10,pj/m,x12/1,s10,x15/11,pn/a,x2/14,ph/j,s3,x10/11,s12,x6/15,s3,x11/14,pp/c,x5/6,s4,x14/12,s8,x7/15,s2,x10/2,pl/m,x0/12,po/n,x8/5,s3,x4/14,pi/a,s13,x12/5,pd/j,x15/2,s13,x14/7,s5,x5/3,s13,x11/6,pa/c,x4/12,pp/e,x14/0,s13,x8/11,s6,x14/13,s10,x2/11,pk/i,s9,ph/f,x5/9,s5,x7/12,pk/a,x11/8,pb/n,x15/0,s3,x6/4,pl/m,x12/11,s10,x4/15,s15,x13/10,pj/p,x8/14,pg/m,x4/3,s10,x0/2,s15,x6/4,s14,pd/f,x3/12,s3,x14/9,pp/l,x3/15,s10,x4/14,pi/d,x12/1,s1,x4/11,s3,x14/3,s2,x5/8,s12,pj/p,x2/10,s3,x3/12,s14,x11/1,s1,x13/3,s5,x6/0,pl/g,x4/2,s6,x14/10,s11,x0/11,ph/j,x14/2,s13,x3/11,s5,x10/7,s8,x15/12,s8,x4/5,s10,x13/14,s11,x5/8,pg/p,x1/7,s13,x11/8,s8,x1/4,pf/h,s5,x9/12,po/k,x1/4,s10,x3/7,s8,x9/8,s13,x5/1,s11,x13/14,s2,x8/10,pf/e,s1,x12/9,po/k,s10,x11/15,s6,x7/1,s6,x8/9,pe/p,s13,x10/3,s2,x8/9,pb/c,x2/15,s11,x7/11,s3,x9/10,s15,x6/7,s5,x10/13,pa/e,x7/11,s10,x12/10,pm/l,x8/13,s9,pj/n,x15/11,pf/i,s11,x7/2,s14,x0/10,s15,x1/5,s7,x8/3,s8,x5/11,s15,pl/h,x4/2,s10,x6/8,s8,pb/g,x12/2,s11,x6/11,s6,pc/j,x14/12,s5,x6/8,s9,x11/9,s13,x12/5,s5,x3/14,s12,x1/0,pd/b,x4/5,s3,x0/6,s5,x14/15,pa/e,x7/1,s6,x11/15,s13,x14/1,s15,x10/6,pm/i,x13/2,pl/n,x6/15,pj/i,x5/7,s3,x0/8,s4,x2/9,s11,x1/3,pg/c,x11/15,pf/k,x0/9,s11,x10/7,pl/d,s11,x14/1,s1,x0/7,s12,pp/e,x10/6,pf/d,x9/4,pj/c,x7/0,s12,x14/3,s1,x9/12,s2,x15/11,s2,x12/14,s12,x4/5,pp/d,x15/12,po/h,x13/9,s4,x3/6,pa/g,x8/10,po/d,x12/14,s7,x13/9,s4,x7/12,s7,x1/6,pg/m,x2/4,s11,x5/9,s7,pc/i,x13/2,s4,x6/15,pg/o,x8/11,s15,x4/6,s5,x10/12,pe/b,x9/14,pc/a,x4/6,s10,pg/f,s5,x12/9,s9,x13/15,s9,x0/5,s10,x8/10,s1,x6/5,s9,x2/0,ph/e,x4/14,s12,x2/11,pd/k,x13/9,s4,x7/4,ph/n,s11,x8/13,pp/i,x6/11,s2,x5/15,s4,pl/c,x12/3,s10,x1/15,pg/n,s9,x11/4,s3,x9/8,s7,x11/15,s10,po/f,x5/0,s15,pa/g,x14/3,ph/m,x15/12,s8,x8/2,s3,x1/6,s1,pf/b,x7/3,s12,x11/12,po/g,x13/4,s4,pi/n,x6/9,s4,x5/13,pj/f,x6/10,s7,x3/11,s3,pg/p,x1/15,po/k,x6/0,s11,x13/2,pe/m,x0/5,s15,x1/14,s7,x2/6,pf/l,s6,x15/9,s15,x8/12,pg/o,x10/1,s8,x7/9,pa/e,s9,x0/13,pj/d,x15/9,s5,x11/4,s4,x5/7,s15,x12/1,s14,x11/15,s3,x10/0,s13,x9/14,s11,pb/h,x8/12,pn/f,x0/14,pp/l,x8/13,s10,x2/1,s11,po/f,x14/8,pn/j,x2/5,pc/h,x7/10,pn/e,x8/15,s15,x12/11,pd/l,x13/3,s9,x1/11,s3,x12/13,pb/k,x2/9,pd/m,x7/5,pf/g,x13/11,s12,x14/2,s10,x3/13,pj/e,x7/15,s2,x9/10,pc/d,x6/8,s10,x7/9,pm/e,x12/6,s10,x7/8,pp/a,x0/9,s2,pj/i,x8/1,s15,x7/10,s10,x0/3,po/g,x13/14,s4,x15/3,s11,x4/8,s2,pp/d,x7/11,s1,x9/8,s3,x15/5,s15,x3/12,s12,x9/14,pa/j,x8/0,s7,x4/5,pk/o,x7/3,s9,x6/0,s10,x4/7,pe/i,s8,x13/8,s4,x9/0,pd/k,x5/13,s8,x10/15,pf/a,x11/9,s5,x6/7,s3,x5/11,s3,x15/1,pb/d,s11,x2/8,s15,x3/15,pg/c,x2/8,pl/k,x0/9,s9,pg/h,x7/4,pa/f,s3,x13/3,pd/i,x6/12,s2,x13/9,pa/n,x0/5,s5,x3/12,s15,pl/k,x7/6,s1,x2/11,s14,x3/4,s9,x14/12,s15,pj/i,x4/3,pg/p,x15/0,po/a,x7/3,pp/n,x15/4,pd/o,s4,x5/13,ph/c,s3,x1/3,pj/i,x7/11,pd/g,x9/10,po/i,x11/5,pk/h,x8/2,s4,x0/12,pf/l,x9/5,pa/g,s2,x13/3,pk/c,x11/0,s10,x3/8,s10,x10/1,pg/o,x3/11,s11,x9/12,s4,pm/n,x3/14,s5,x15/0,s4,x10/12,ph/b,x15/0,pj/o,x2/1,s6,x9/10,s11,x7/12,pm/l,x1/8,pi/e,x2/12,pb/f,x1/10,pm/j,x14/4,pf/h,x2/3,pc/d,x13/1,s4,x4/7,pk/g,x3/6,s9,x0/14,s6,x6/11,s1,x10/1,s5,x11/12,pp/o,x14/3,s13,x7/5,s8,x11/4,s12,pk/e,x6/5,po/m,x1/15,s3,x8/4,s15,x1/5,s4,x4/15,s9,x13/3,pg/d,s2,x7/5,s9,x13/2,pk/n,s3,x9/4,s1,x0/6,s15,pb/i,x14/10,pl/j,x1/12,pp/i,x14/15,s14,pn/m,s9,pj/b,x6/3,s12,pe/k,x1/10,po/b,x13/6,ph/l,x5/8,pk/e,x6/15,pn/b,x13/7,pe/f,x10/15,s14,x8/5,ph/b,x15/2,pj/k,x9/5,s12,pi/o,x0/2,s13,x4/12,pe/c,x9/5,pg/h,x3/2,pa/m,x0/10,s10,x12/9,pc/g,x1/5,s15,x6/12,pl/m,x1/8,s4,x11/10,pb/k,x12/14,pg/i,x0/7,pj/e,s1,x12/8,s12,x7/11,pm/p,x14/8,pl/e,s14,x9/2,pk/d,x8/10,s9,x6/4,s5,x2/1,pn/j,x5/7,s2,x9/10,s12,x8/12,s7,x3/10,s2,pp/l,x7/11,pf/a,x14/8,s15,x15/4,po/k,x14/2,s7,x11/5,pc/b,x1/9,s1,x8/11,s13,x1/15,pj/p,x9/7,pe/a,x11/0,pg/i,x9/15,s13,x4/8,pa/l,x13/14,pg/d,x15/1,s10,x7/11,s3,x4/3,s9,x7/14,pi/k,x15/9,s3,x8/6,s6,x14/5,pa/m,x8/9,pc/f,s5,x5/6,s11,pi/l,x11/4,s13,x8/7,pm/c,x12/15,pl/g,x0/2,s3,x11/8,ph/m,s3,x3/14,s3,pn/j,x10/4,s5,x6/5,s9,x9/10,pm/i,x0/7,s5,x8/6,pg/e,x11/12,s7,x14/4,s7,x1/8,pn/d,x12/3,pl/f,x5/10,s12,x0/11,s8,x7/3,pg/j,x0/13,s15,x14/9,s2,x8/4,po/p,x13/10,pn/f,x15/9,s8,x5/2,s2,pg/o,x9/11,s7,x12/0,pl/c,x13/11,s11,x7/9,po/j,x5/13,s4,x9/6,s9,x11/5,s1,x1/2,s15,x3/5,s8,x10/15,pb/n,x2/1,s7,x10/4,s1,x3/5,pd/p,x12/1,s1,x11/8,s1,x6/10,s3,x15/1,pf/k,x5/2,pn/h,x3/12,pp/o,x11/5,s11,x3/10,s3,x8/0,s13,pc/d,x15/11,po/a,x13/2,ph/l,s8,pb/i,x1/12,pe/o,x13/5,ph/n,s6,x2/3,s7,x14/1,s13,x8/15,s5,x4/13,pi/b,x8/2,s10,x10/9,ph/k,x6/14,pc/n,x9/12,ph/a,x7/8,s4,x11/1,s10,x12/2,s1,x0/5,po/l,s11,pa/d,x1/14,s13,x10/13,pg/e,s4,x1/7,s5,x4/13,pf/h,x2/6,pi/p,x10/3,s13,x0/5,pg/l,x10/8,s4,x15/2,s15,x13/4,pk/c,x3/14,s5,x4/11,s13,x8/6,s7,x5/2,pi/g,x14/13,s8,x11/5,s9,x10/15,pc/b,x8/2,s15,x5/0,pm/p,x13/4,s11,x5/9,pe/c,x11/0,po/d,x7/9,s6,x11/0,s5,x13/12,ph/k,x3/15,s6,x2/6,s13,x1/10,s14,x9/5,s9,x10/7,s1,x15/6,s7,x4/11,s7,x7/6,pa/j,x0/14,pe/g,x9/6,s7,x10/3,pi/l,x15/12,pk/g,x6/13,s15,x15/1,s3,x11/8,s8,pa/n,x7/15,s10,pi/p,s15,x1/13,s13,pc/a,x8/12,s9,x11/4,pl/m,x14/8,s10,x9/15,pj/p,x7/3,s4,x9/15,pn/b,x6/8,s4,x11/1,pa/g,s9,pk/i,x4/12,s8,x0/13,pn/j,x14/10,s2,x15/7,s5,x9/8,s15,x5/1,s15,x4/11,s6,x8/15,s12,x10/14,s14,x6/1,po/m,x10/3,s6,pe/i,x1/13,pc/l,x4/9,s2,pg/p,x2/13,s9,x3/6,s13,x10/13,s11,x0/8,pe/m,s5,x2/9,pi/c,x13/6,pm/h,s14,x5/4,pa/e,x15/7,s12,x13/2,s6,x1/4,s4,x11/5,s5,x9/14,pn/f,x12/5,s12,x9/0,s3,x15/3,s4,x10/9,po/j,x7/4,s12,x14/5,pb/h,x10/11,po/j,x14/4,s4,x11/5,s12,x12/15,pb/n,x5/13,pl/e,x14/12,pj/m,x3/6,s2,x4/12,s3,x9/5,ph/o,x1/4,s7,x6/5,s2,x0/8,pc/m,x12/4,s13,x7/1,s14,x9/4,s13,ph/k,x10/3,pe/d,x5/7,pb/n,x1/11,s7,x14/12,s4,x5/8,s15,x9/2,s2,x8/10,s15,x4/1,pd/a,x8/3,pk/b,x2/11,pg/o,x15/5,s2,x1/6,pp/n,x0/5,pf/g,s1,x14/12,s11,x2/6,pj/l,x3/7,s1,x4/15,ph/a,x3/6,s14,x2/12,pi/p,x15/13,pd/m,x3/2,pg/l,x5/13,s9,x4/14,pj/c,x5/13,s6,x0/7,s10,x8/10,pm/i,x12/4,s13,x10/0,s2,x5/6,s4,x3/7,pl/j,x12/10,s6,x9/6,s5,x14/8,s2,x1/2,s12,x6/12,pn/m,x11/7,s3,x0/12,s11,pb/p,s15,x10/8,s12,x4/1,s6,x15/5,pi/a,x9/1,s14,x15/5,s11,x8/12,po/g,x4/9,s3,pn/m,s14,pl/f,x3/2,pa/p,x14/4,s9,pe/n,x11/2,pc/b,x13/10,s14,x3/11,s3,pp/d,x14/15,s13,x11/9,s14,x0/12,s7,x6/14,s2,x8/9,s2,x2/10,s13,x14/11,pe/n,x9/6,s5,x5/0,s9,x11/14,ph/d,x1/12,s3,x9/0,pb/c,x6/1,pl/m,x7/0,s5,x2/8,pc/e,x9/11,pk/m,x0/4,pi/p,x7/9,s3,x11/4,s5,x9/15,s10,x7/14,ph/n,s8,x9/5,s14,x8/12,s3,x5/7,s7,x12/3,s7,x13/7,pi/d,x8/2,s15,x3/13,s11,x8/15,s2,x12/7,s13,x3/4,s11,x15/0,pl/o,x4/2,s10,pb/d,x7/8,s12,x10/3,s3,x5/0,pl/k,x9/2,s11,x10/7,s11,pi/h,x13/0,pm/j,x11/14,s8,x7/13,pk/c,s2,x6/14,pn/i,x5/1,s5,x10/8,s11,x9/13,s1,pb/c,x8/2,s13,pd/j,x15/5,s2,x3/2,s8,x11/7,s8,x2/1,s5,x9/10,s6,x4/7,s14,x11/15,s3,x1/14,s7,x7/9,s1,x8/13,pb/e,x6/11,pp/i,x2/5,s13,pa/n,x12/13,s2,x11/7,pi/k,x1/5,s3,x11/9,s2,x2/6,pc/l,x12/9,s6,x2/15,pi/a,x6/10,pn/d,x0/1,s11,x15/6,s13,x4/11,pg/f,s7,x6/9,s14,x1/11,po/m,x14/9,s9,x15/6,s10,x5/0,s12,x3/8,s12,x10/4,s13,pb/d,x11/9,pf/e,x8/6,s10,x9/14,s10,x1/10,s5,pl/n,x12/4,pp/f,x15/8,s5,x0/4,s11,x10/12,s13,x11/1,s6,pm/l,x5/2,s9,pf/a,x10/12,s5,x0/13,pk/p,x10/7,s8,x14/11,pj/f,x0/8,pl/b,x3/9,pe/n,x8/5,pm/d,x15/6,s13,x2/13,pp/n,x6/4,s4,x7/13,s1,x2/11,s3,x14/7,pi/a,x4/3,s3,x15/7,s1,x14/4,s6,x7/5,s13,x0/12,s10,ph/b,x3/10,pn/d,x2/1,pk/f,x3/5,pd/e,s3,x11/7,s8,x14/3,s3,x7/8,s2,x4/1,pm/f,x6/11,s4,x10/7,s9,x11/0,pj/i,s5,x3/1,s6,x5/0,pc/d,x11/13,s14,pf/j,x4/12,s6,x14/0,pm/n,x3/5,po/i,x13/12,pk/b,x0/15,s9,x2/5,s9,pa/j,s6,x3/12,s12,x8/2,pe/m,x13/5,s13,x7/4,s2,x2/15,po/h,x8/0,s15,pj/g,x9/12,s10,x13/6,s13,pl/n,x2/10,s6,x5/12,pe/p,x4/11,s13,x2/14,s14,x10/4,pj/h,x2/11,pi/p,x13/5,s12,x9/0,s14,x2/11,s8,x12/15,s7,x8/10,pe/j,x6/11,s12,pp/m,x5/4,pn/k,x7/6,s13,x12/5,s10,x10/0,s11,x1/6,pm/h,x13/9,pa/d,x10/3,s15,x0/13,s11,x6/1,s2,x0/7,s2,x13/14,pp/h,x0/5,pj/d,x7/9,pb/i,s2,x0/14,s4,x4/5,s11,x11/10,s14,x7/12,s8,x5/6,s12,x8/3,pg/m,x2/13,s12,x9/5,pc/o,x3/6,pe/b,x14/2,s4,x0/1,s14,x13/4,s2,x11/9,pa/k,x12/14,s4,x13/4,pg/p,x5/11,pb/d,x8/7,pa/n,x13/6,pd/g,x10/0,s8,pm/n,x13/4,pk/d,s9,x3/5,s6,x1/4,s15,x9/12,pm/b,x5/11,pl/a,x3/8,s2,x2/1,s11,x7/10,s8,po/c,x12/5,s4,x6/9,pl/p,x1/11,s8,x14/12,pa/i,x10/8,pl/e,x7/13,s14,x10/0,s9,x6/4,s14,x10/11,ph/g,x0/9,s4,x6/2,s10,x3/7,s14,x6/5,pj/k,s2,x3/10,s3,x5/8,pp/d,x9/3,s11,x12/6,s11,x8/10,s6,x5/6,ph/n,x4/1,s13,x2/8,pl/p,s7,x6/5,s5,x3/4,s4,x7/11,s15,x13/14,pb/g,x9/8,po/n,s14,x2/15,s13,x12/3,s15,x9/13,pa/f,x3/6,s13,x1/4,pn/b,x7/0,pl/f,x1/10,pa/c,x2/7,s5,x15/14,pj/g,s13,x3/0,s7,pc/d,x12/6,pa/p,x15/8,s13,x0/9,pm/l,x4/12,pk/a,x0/3,pg/i,x2/12,s13,x4/1,pe/p,x6/0,pm/a,x15/2,pe/l,x0/6,po/f,x11/10,s5,x6/0,s9,x11/15,s5,x1/7,s8,x9/3,pg/i,s4,pb/e,x11/6,pl/k,s3,x2/3,pf/b,x1/13,pk/h,x2/5,s6,x3/6,pn/f,x5/1,pe/h,x14/12,pn/j,x10/2,s3,x1/15,s12,x13/3,s12,x1/6,pm/k,x8/15,s5,x10/14,pg/c,s6,x8/2,s14,x4/12,pj/i,x8/0,s14,x13/15,po/e,s15,x7/1,s11,pj/h,x3/5,pb/n,x11/1,s13,x8/9,s10,x0/14,s8,x9/7,s7,x4/12,s6,pc/m,x13/0,s1,x8/15,s1,x0/2,s6,x10/3,s5,x7/12,s4,x1/2,s12,x13/4,s14,x12/2,pe/n,x0/9,s5,x5/15,s8,x3/0,s4,x5/1,pg/k,x4/6,s9,x13/3,s15,x10/7,s6,x9/15,pp/n,x6/11,pd/j,s10,x1/7,s10,x13/10,s15,x4/1,s6,x2/9,pp/h,x11/14,s6,x4/0,s1,x1/5,pn/c,x8/11,s6,pp/f,x0/13,pe/m,x3/8,s9,x2/6,s12,x8/7,s14,x12/1,s1,x13/3,s1,x4/11,s9,x7/2,pn/j,x15/6,s9,x13/9,s9,x3/0,pk/c,x14/10,pf/e,x13/3,s7,x7/4,pk/p,s8,x14/2,s9,x15/3,s13,x5/6,pd/l,x8/2,s5,pm/c,x11/3,pe/g,x6/5,s4,x15/0,s10,x14/9,pc/l,x7/12,pf/i,x14/2,s2,x11/6,s10,x15/12,pg/l,x3/14,pp/h,x9/8,pl/a,x0/14,pi/m,x7/9,s8,pg/c,x2/0,pe/l,s7,x5/6,s15,x9/0,s12,pf/d,x4/11,s12,x15/1,pi/e,x4/14,pb/k,x3/0,s4,x2/14,s9,x1/6,s7,x11/7,s12,x1/10,pp/n,x15/6,ph/k,x4/11,s11,x7/0,po/g,x15/8,s3,x12/14,pl/j,x11/5,pe/d,x6/13,ph/k,s8,x10/4,s7,x14/11,pn/b,x7/1,s3,x10/3,pj/k,x11/4,s4,x13/5,s14,x1/9,s12,x0/6,s8,x15/11,s1,x5/4,po/c,x14/0,pe/k,x5/8,pb/j,x15/14,s2,x0/10,s9,x11/9,s7,x3/0,s12,x5/14,s11,pc/p,x7/2,s3,x12/1,s5,x6/0,s13,x11/5,pm/b,x14/13,pd/j,x7/1,s10,x11/14,s5,x4/13,s12,x10/8,s14,x5/12,s6,x9/4,pm/c,x10/15,s6,x3/0,pk/o,x6/13,s11,x4/11,ph/e,x1/13,s6,x2/0,s13,x3/13,s7,x14/12,s10,pk/p,x8/9,s11,x10/2,s2,x7/6,pa/l,x14/13,s11,x3/15,s3,x12/11,s10,pb/c,x0/6,pe/n,x10/4,pf/c,x2/5,pj/e,x14/13,s12,x7/3,pd/n,x10/1,pc/b,x4/3,ph/k,x9/13,s2,x14/6,s2,x5/9,s5,x2/14,s7,pa/m,x11/0,s13,x7/3,s2,x4/1,pd/l,x7/13,pp/b,x8/4,s6,x10/5,pe/g,s14,x1/12,s12,x11/6,s6,x5/8,s5,x11/15,ph/c,x6/0,po/m,x4/10,s2,pe/d,s15,x11/15,ph/c,x1/9,s6,x3/8,pf/b,x10/11,pp/n,x5/13,pj/g,s4,x12/9,s14,x4/15,s6,x1/9,s1,pp/f,s4,x15/11,pa/g,x14/2,pn/o,s9,x8/3,s12,x6/13,pa/j,x1/10,pc/h,x3/12,s14,x2/5,pk/l,x12/7,pg/i,x2/15,pk/f,x14/5,pd/g,x4/6,pj/n,x10/13,s1,x15/3,s11,x4/8,s5,x15/12,s14,x9/10,pf/b,x8/3,s2,x0/15,s14,x14/7,po/d,x5/0,s5,x8/14,s2,x3/4,s4,x0/2,s2,x5/4,s9,pb/j,x15/9,pe/p,x0/5,s12,x2/12,s15,x13/0,s15,x10/9,s8,x4/6,po/g,x11/15,pc/f,x10/2,s11,x5/11,s12,x2/1,pd/j,s14,x12/5,s14,x11/6,pi/l,x7/5,s9,x6/2,s3,x7/15,s14,x3/2,s10,x0/10,pp/f,x11/14,s9,x10/13,s3,x9/2,po/e,x12/10,s2,x7/6,s10,x8/3,s11,x11/10,pf/j,x1/5,s9,x15/4,pb/g,x11/0,pk/f,x12/14,s10,x8/2,s5,x6/10,pi/n,s12,x0/8,pm/g,x4/13,s3,x6/3,pn/p,x8/9,s15,x3/4,s1,x5/9,pm/a,x1/4,pe/b,x8/13,s7,x6/7,pk/j,s11,x3/1,s4,x2/9,s14,x6/4,s14,pb/l,s13,x0/3,pf/j,x1/10,s8,x12/11,s12,pe/h,x14/15,s10,x13/3,s11,x6/12,s10,x5/0,s7,x10/14,s11,x4/3,pk/j,x13/0,s8,x14/9,s12,x3/13,pi/m,s11,x9/11,s9,x4/3,s9,x12/7,s3,x0/11,s14,x2/8,pl/h,x5/14,s12,x11/7,s13,x12/2,po/c,x11/8,s3,pm/n,s15,x15/10,pl/c,x8/0,s6,x1/6,pb/p,x4/0,s1,x5/3,pd/i,x2/1,pl/k,x4/13,s8,x3/1,s2,ph/p,x11/4,s5,x9/10,s13,x15/14,pl/f,x2/6,pi/e,x10/0,s3,pn/k,x15/5,s6,x10/9,s8,x8/0,pi/l,x7/1,pg/a,x9/8,pb/p,x7/5,pj/h,x10/0,s9,x11/1,s8,x15/8,s8,x3/9,pd/a,x14/2,pf/c,x10/3,s5,x6/5,s8,x0/10,pd/j,x15/2,s4,pn/o,s13,pj/i,x0/9,pl/b,s12,x11/1,po/g,x13/9,pe/k,x0/15,pl/m,x9/14,po/i,s7,x6/13,s8,x8/1,s3,x12/11,s15,x3/13,s12,x5/0,pk/c,s7,x10/9,pf/m,x3/8,s3,x9/7,s8,x0/4,s7,x14/3,s1,x1/9,pg/a,s3,x5/15,pe/f,x6/13,pb/k,x4/3,po/n,x8/14,pg/i,x11/15,pd/c,s14,x1/0,s13,x15/14,s4,x12/5,s5,x15/7,ph/e,s2,x5/13,s4,pg/k,x2/3,pa/n,x15/5,ph/l,s9,x13/9,s13,x0/8,pb/p,x13/2,s9,x11/4,pk/j,x6/5,s7,x7/1,s5,x5/2,pm/p,x9/14,s11,x2/10,pg/c,x8/9,s5,x4/11,s13,pn/a,x9/0,s13,x5/8,s1,x9/0,s2,pi/p,x4/8,s13,x12/0,pb/m,x4/3,s6,pk/i,x7/12,s11,x11/9,pc/e,x15/14,pn/m,x4/8,pc/e,x9/11,pi/a,x14/6,pl/o,x0/12,pa/g,x9/7,s1,x6/5,s1,x9/3,ph/k,x7/5,s10,x11/1,s4,x5/13,s13,x7/9,pb/c,x5/13,pd/a,s5,x1/6,s5,x13/5,s8,x0/12,pj/g,x13/2,s12,po/e,x5/4,pk/d,x9/13,pp/a,x10/5,pg/n,x0/7,s4,x12/2,pi/k,x5/15,pb/e,s13,po/g,x7/11,pd/a,x12/9,ph/e,x8/2,po/n,x12/7,pg/k,x6/5,s5,x12/4,s2,x10/5,pf/e,s4,x8/2,s5,x5/14,s10,x7/15,s5,x2/9,s8,x3/6,s11,x0/8,s8,pm/a,x3/13,pb/l,x8/4,pa/j,x11/6,s6,pn/k,x7/15,s14,x6/8,pj/a,x14/0,s3,x13/8,ph/i,s13,x3/1,pj/d,x10/14,s10,x7/4,pm/h,x13/10,pp/j,x14/9,pa/h,x2/15,s7,x6/1,s4,x0/4,s6,pj/p,x7/9,s13,x6/4,ph/b,x12/11,pd/f,x4/10,pb/h,x13/7,s8,x11/15,pn/d,x14/3,s11,x12/15,s2,x2/6,s5,x15/3,pk/l,x5/12,s2,x14/8,pc/g,x6/7,pf/p,x8/3,s12,x10/11,pm/o,x7/6,s10,x2/1,pp/j,x15/10,pa/n,x1/0,s9,x8/13,pg/e,x0/4,pd/m,x15/14,pc/j,x1/7,s4,x0/6,pb/o,x9/15,s15,x10/13,s2,pj/d,s9,x12/6,s5,x11/15,s7,x1/0,s6,x4/6,s2,x11/5,ph/n,x6/12,s14,x4/5,s6,x15/6,s8,x12/2,pb/i,x6/9,s15,x8/13,s2,x5/1,s6,x0/10,pe/d,x7/8,s10,x14/1,s13,x8/4,s12,x11/5,pb/m,x7/9,s2,x11/6,s11,x12/9,po/k,x11/4,pc/m,x1/8,pf/o,x3/13,s8,x10/9,s3,x13/12,pb/g,s8,x7/9,s9,x11/4,s4,x10/8,pi/m,x13/3,pa/d,x0/15,s6,x11/10,s14,x8/4,s13,x5/15,ph/n,x10/8,s4,x0/12,s1,x11/14,s5,x6/0,pa/b,s12,x1/11,s7,x3/9,pf/e,x13/15,pm/l,s1,x8/5,ph/f,x6/0,pe/m,x7/14,s1,x5/1,s11,x14/12,po/j,x13/15,pk/f,x4/11,ph/j,x5/8,s11,x15/1,s14,x2/13,s5,x14/1,pl/g,x11/2,s9,x8/7,pb/c,x2/14,s9,x9/12,s3,x4/3,s3,x10/11,s6,x1/15,pl/f,s13,x7/11,pm/n,x3/6,pl/p,x10/4,s10,x7/6,s6,x3/11,s8,x5/2,s1,x15/8,pj/g,x10/0,pa/e,x4/2,pp/c,x12/13,s3,x8/15,s5,x4/2,pf/l,x14/5,s1,x12/10,s4,pi/a,x3/2,po/e,x8/7,pi/c,x5/6,s11,x9/7,s3,x13/12,s15,x10/3,s3,x0/7,s7,x6/8,pj/l,x15/11,s14,x9/7,pp/a,s4,pk/g,x1/2,s7,x14/6,ph/i,x0/9,pp/f,s8,x5/3,s15,pc/b,x10/2,s15,x1/3,s6,x15/12,s6,x9/1,pm/f,x12/11,s3,x10/15,pj/k,x3/5,s5,x4/6,s15,x12/1,s11,x14/2,s14,x1/15,pb/d,x2/10,s4,x14/4,s5,x2/7,s15,pk/l,x10/14,pd/b,x0/1,s11,x14/7,pi/l,s3,x1/11,pb/m,x5/7,s12,x4/1,pk/c,s8,x11/2,s8,x1/13,s11,x3/14,pp/m,s15,x8/10,pk/b,x6/7,pf/j,x14/8,s7,x12/7,s6,x4/11,pe/n,s5,x1/3,s13,x5/14,pm/d,s9,x11/12,s8,x2/1,s2,x0/12,pg/p,x15/13,s14,x3/12,s8,x14/6,pe/j,x0/11,s10,x3/4,pp/b,x6/12,s6,x5/2,pc/h,x8/4,pp/k,x14/5,s14,x7/13,s3,x2/10,s3,x11/1,s4,pl/b,s9,x0/12,ph/i,x15/8,s12,pl/p,x5/0,s1,x2/9,s4,x15/4,s14,po/m,x2/14,s1,x4/7,s14,x8/6,s13,x5/10,s4,x3/11,s5,x9/2,s6,x5/10,pd/a,s11,x8/0,s6,x7/13,s4,pg/i,x11/3,s15,x15/13,pk/d,x7/8,pi/l,x1/2,pk/a,x9/13,s2,x12/14,s8,x13/9,s2,x0/15,pg/f,x11/4,pi/o,x0/7,s7,x6/4,pk/n,x14/5,s10,x13/12,pf/l,x3/14,s13,x8/11,pg/n,x1/9,s12,x5/14,s8,x7/3,s11,pf/j,x10/12,pd/e,x13/11,s13,x1/4,pc/n,x7/8,s9,pa/k,s9,x9/1,s9,x7/11,s10,x9/2,s7,x10/15,ph/d,x7/6,pl/m,x3/2,ph/f,x5/10,pp/g,s13,x12/6,pj/c,x10/8,s3,x6/11,pk/o,x12/15,s12,x10/0,pf/l,x6/1,pc/g,x0/4,s1,x15/7,s10,x9/12,pj/n,s12,x4/5,s7,x9/6,s10,x15/10,s10,x4/9,s10,x0/8,s6,x7/3,pm/g,x15/1,s13,x2/7,s12,x6/15,s2,x5/2,s3,x15/14,s5,x4/3,pc/l,x10/9,pa/e,x3/11,s4,x0/13,s2,x15/10,s8,x0/4,pp/j,x14/13,pl/d,s6,x1/6,pe/o,x14/13,ph/c,x0/6,s3,x1/2,pb/e,x4/5,s11,x1/3,pc/o,x2/9,s14,x12/11,pm/j,x1/7,s11,pi/l,x5/6,s12,x15/8,pj/f,x5/1,s9,x11/12,s3,pb/n,x10/2,s10,x1/4,s11,x12/0,s7,x13/7,s14,x0/3,s9,x8/15,pi/j,x0/11,s5,x13/15,s11,x7/11,ph/f,x8/10,pm/n,x13/12,ph/j,x8/10,s6,x7/5,s7,x4/3,pa/o,x8/15,s4,x3/1,s8,x6/10,s9,ph/c,s6,x12/14,s12,pp/i,s8,x4/9,s1,x8/12,s3,x2/6,s14,x4/11,s2,x8/5,s10,x7/4,s14,x8/12,s4,x5/2,s1,x8/9,s5,x7/12,pb/a,x11/3,s14,x13/12,s4,x9/6,pi/l,x15/2,pk/c,x12/7,pa/d,x9/4,s14,x1/14,pm/e,x6/9,s3,x7/8,s7,x6/14,s12,x3/7,s15,ph/d,s9,x6/12,pc/a,x7/11,s6,x8/12,s1,x3/5,s1,pm/p,x8/15,s14,x0/2,pn/d,x14/8,ph/c,x13/12,pg/i,s5,x8/14,pk/m,x15/2,pp/l,x0/12,s5,x2/7,pk/e,x1/13,pi/h,x6/9,s1,x2/12,s13,x7/10,s12,x12/14,po/k,x11/4,s1,x3/8,s1,x10/2,s9,x5/4,pj/h,x13/10,s8,x8/2,pd/p,x6/3,pi/n,s9,x4/12,pj/e,s5,x8/0,s9,x4/5,s12,x10/7,pm/d,x6/8,pe/i,x0/4,pb/j,s11,x3/13,s8,pg/c,x4/11,s9,x14/5,pl/n,x10/11,s6,x5/0,pk/b,x1/3,s13,x13/4,ph/n,x2/8,s10,x11/3,s6,x7/10,po/c,x3/14,pa/k,s1,x11/8,pb/n,x0/12,s4,x5/9,s6,x2/1,s6,x6/8,s3,x5/13,ph/f,x10/1,pb/l,s9,x12/11,s15,x5/15,s8,x3/1,pd/p,x11/0,s7,x9/15,s5,x0/7,pc/n,x12/10,ph/j,x14/9,s2,x15/0,s1,x7/10,pa/n,x2/15,s1,x11/4,s14,x2/6,pj/i,x13/11,s7,x14/10,pb/f,x8/6,s11,x7/12,pm/i,x13/14,pk/o,x7/12,s12,x3/8,pj/g,x13/7,s15,x1/4,ph/n,x0/15,pl/g,x12/5,s15,pd/h,s11,x9/3,pa/n,s2,x12/6,pk/j,x10/0,s7,x3/8,s13,x0/7,pa/i,x12/11,pj/f,x5/1,s11,x13/12,s9,x15/3,pp/m,x9/5,s8,x8/2,pd/e,s8,pm/n,x10/13,s7,pd/h,x4/9,pj/c,x3/7,s10,pa/l,x12/1,s3,x2/3,pi/o,x10/5,s7,x14/0,pl/m,x2/13,s1,x5/7,s7,x14/1,pi/e,s6,x2/15,s12,x9/3,pf/n,s2,x12/13,s2,x8/1,pa/k,x7/14,pe/p,x11/6,s8,x0/9,s6,x2/15,s13,x7/9,s3,x2/10,pc/o,x3/11,s15,x15/9,pp/k,x4/12,s14,x9/11,pl/i,s13,x6/0,s9,x2/14,pc/g,x9/11,s9,x2/12,s2,x0/3,pd/j,s5,pg/p,x9/6,s8,x10/12,s9,x7/5,s8,x14/13,s13,x8/11,pa/l,x1/0,s8,x11/5,pm/n,x3/10,s2,pc/g,x2/4,pj/d,x15/7,pc/b,s5,x10/12,s8,x15/14,pj/i,x4/11,s8,x1/7,s2,x13/3,pe/p,x15/2,ph/i,x7/10,s12,x13/11,s15,x14/1,s9,x6/11,s12,x1/12,s11,x4/9,s2,x12/8,pd/p,x5/3,po/f,s3,x14/1,s1,x0/3,s9,x8/9,s14,x4/0,s5,x2/6,s2,x0/14,s2,x3/12,s2,x15/9,s6,x6/3,s3,x4/7,pd/g,x2/3,s2,x7/0,s7,x11/6,s10,x9/15,s10,x5/3,s6,x9/2,pf/p,s9,pl/c,s14,x7/11,s3,x5/15,s1,x9/11,s6,x0/13,ph/g,x12/14,s12,x7/4,pm/k,x12/11,s4,x3/7,pl/h,x10/14,s2,pj/g,x0/11,s10,x9/15,s7,x1/7,s14,x3/10,s8,x12/1,s12,x2/5,pp/i,x4/6,s9,x8/2,s14,x0/4,s11,x11/9,s11,x13/6,s8,x0/1,pb/e,x10/5,s3,x2/13,s7,x7/15,s6,x6/8,pn/d,x10/14,s7,x13/5,pf/m,x7/0,pg/l,x8/2,s4,x9/0,pa/m,x2/7,s8,x10/0,pb/f,x15/1,s3,x9/10,pk/d,x14/0,s7,x12/1,pf/h,x9/7,s9,x4/11,pi/n,x0/14,s3,x5/2,s8,x11/0,s11,x15/5,pg/a,x4/6,pk/m,s4,x2/11,s4,x3/8,pi/o,x13/4,s6,x14/9,s14,x3/15,pl/j,x0/9,s12,x2/12,s8,x13/8,ph/n,x10/9,s9,x0/1,s1,x12/5,s3,x3/15,s14,x10/2,pi/p,x1/12,pd/b,s3,x11/2,s13,x10/15,s6,x12/3,s10,x6/15,s3,x10/3,s1,x4/13,s6,x14/5,po/m,x7/0,s6,x5/2,s11,x3/13,pb/d,x7/12,s15,x4/15,pp/c,x5/1,pg/n,x14/15,s13,x12/4,s3,x5/7,s15,x11/4,s3,x13/7,pl/k,x4/0,s3,x1/3,s3,x10/12,s7,pe/i,x11/6,s6,x0/15,s7,x14/12,s9,x10/3,pf/p,x1/11,po/c,s10,x3/15,s10,pi/k,x6/4,pm/g,s11,x1/10,s8,x6/13,s7,x2/14,s11,x15/13,s14,x5/2,pf/b,x13/0,pm/i,s7,x1/2,s13,x11/7,s9,x5/9,s10,x11/15,pb/o,x13/10,s11,x2/6,s4,x8/12,s3,x10/13,pc/n,s14,x7/9,pf/m,x6/8,pi/g,x13/9,s1,x15/3,pl/m,x1/5,s5,x3/4,pd/j,x14/9,s15,pe/f,x6/5,s11,x10/11,s11,x7/15,pp/a,s9,x11/14,po/c,s13,x8/13,s7,x7/11,pi/f,x14/6,s6,x10/15,pj/a,x13/6,s14,x7/1,pl/b,x2/14,s10,x3/15,s2,x9/8,po/d,x12/15,pn/h,x4/1,s5,x2/15,pp/f,s6,x10/7,s8,x3/1,s13,x11/5,s5,x2/1,pb/h,x15/0,s12,x10/4,s13,x9/6,s4,x3/4,s9,x9/8,s15,pj/e,s13,x12/11,s1,x8/14,s7,x12/11,po/g,x4/14,pa/e,s12,x6/2,pp/o,x7/10,s1,x11/5,ph/m,x7/1,pn/o,x5/15,pm/i,s12,x9/0,s3,x5/7,pa/n,x10/11,pk/b,s2,x6/14,pi/f,s2,x9/4,s4,x12/2,s6,x13/14,s13,x10/1,pk/e,s10,x6/3,s5,pd/n,x4/5,s10,pe/i,x1/14,s5,x12/10,pj/f,x0/9,pc/d,x13/14,s11,x3/5,pn/l,x6/2,s10,x1/3,s15,x2/14,s1,x4/10,s13,x7/13,s5,x3/1,s8,x7/2,pi/a,s15,x9/14,s14,x11/0,s5,x1/5,pj/c,x10/6,pp/k,x3/13,s5,x11/12,s13,x15/0,pl/c,x4/11,s2,x10/5,po/b,x8/2,pa/m,x0/11,s14,x6/15,s14,x5/12,pg/j,s5,x9/4,s4,x3/12,po/n,x15/11,ph/m,x4/13,pi/e,s12,x3/6,s13,pd/n,x8/11,s11,x3/0,s12,pc/b,x12/1,pf/d,x3/6,s4,x5/13,s2,x2/4,s2,x15/10,po/g,x14/6,s5,x12/8,s12,x3/7,s7,x14/8,pf/j,s5,x15/11,s8,x3/7,s12,x0/8,po/g,x3/10,pe/m,s13,x15/9,s7,x10/8,s8,x14/15,s13,pl/a,x6/2,s9,x7/9,pe/b,x2/15,s14,x3/13,s7,x14/7,s13,x0/4,s14,x13/9,pk/l,x15/6,s4,x13/4,po/c,x2/1,pa/p,x4/9,s14,x15/10,ph/c,x14/12,pj/g,s8,x2/6,s9,x0/1,s9,x7/11,s10,x5/15,pm/e,x9/14,pb/c,x3/15,s9,x6/7,pk/f,s8,x9/4,pg/b,x0/7,pn/j,x11/15,pf/e,x5/13,pb/m,x12/0,s6,x2/9,s7,x5/6,ph/l,s5,x1/0,pg/f,x8/6,pn/d,x0/14,po/a,x2/15,pb/c,s10,x13/4,po/l,x6/1,pc/h,s10,x2/3,pe/b,x12/7,s15,x9/0,s5,x13/8,s1,x5/6,pk/c,x13/11,s10,x7/14,s2,x10/1,s13,x5/14,pe/l,x8/13,po/b,x11/7,s10,x2/0,s4,x9/13,s13,x3/14,s13,x4/10,s14,x14/2,pj/g,x3/1,s15,x11/6,s3,x13/4,s1,x6/1,s14,x4/14,s6,pk/a,x12/11,s11,x9/15,s6,x12/2,ph/j,x0/1,pe/b,x14/6,s10,x13/7,pi/f,x14/2,s14,x12/0,s7,x1/9,pj/h,x14/13,pg/d,x6/12,s15,x1/7,s5,x9/0,s10,x1/7,pc/e,x15/14,s5,x13/0,s10,x15/7,pj/i,s3,x4/0,s14,x7/3,s15,x14/5,pf/m,x2/1,pb/a,x3/6,pe/n,x9/2,pk/i,x10/15,s2,x4/7,s13,x15/13,s11,x2/6,pp/j,x15/11,s15,x14/5,pn/i,x4/12,s13,x2/6,pg/p,x0/3,pd/a,x15/8,pk/b,x9/14,pf/n,s11,x10/12,pl/a,x2/1,s8,x11/8,pf/h,x12/2,pc/e,x11/5,s6,po/m,x13/9,s5,x0/6,s1,x5/14,s5,x2/8,s11,pj/n,x11/15,s2,x2/3,pe/f,x4/15,s15,x3/6,s14,x0/1,s15,x12/11,pa/c,x5/1,s2,x14/9,pn/p,x0/7,s5,x14/5,s7,pd/c,x11/9,s15,x2/8,pi/b,x15/9,pk/g,x7/3,s15,x2/1,ph/o,x14/6,s7,x12/2,s7,x6/3,s4,x2/8,s3,x4/11,s3,x6/8,s5,x14/15,pe/p,x4/10,s3,x2/6,s2,x15/7,pg/o,x8/11,pc/a,x12/15,s14,x7/13,s4,x14/8,pl/h,s14,pb/p,x12/5,pe/a,x4/7,ph/c,x10/2,pj/m,x6/7,pd/b,s6,x4/9,s12,x10/12,pl/p,x3/8,s13,x10/6,pj/b,x14/15,pn/a,x1/8,s13,x14/6,po/h,x12/9,s7,x5/2,s3,x8/12,s14,x5/14,pe/a,x0/1,s1,x12/3,pl/p,s9,x9/2,s13,x11/1,pg/d,x12/2,ph/f,s10,x11/3,s9,x4/2,pd/e,x14/9,pn/l,x13/6,pi/k,x15/1,s14,x6/12,s6,x15/0,s4,x8/11,pp/j,x9/0,pd/e,x11/4,s15,x8/9,pj/i,x15/10,s3,x5/2,pl/h,x15/8,pe/p,x12/4,s9,x8/2,s5,x10/6,s14,x0/9,s14,x5/3,pm/c,x11/1,pd/o,x9/15,s10,x4/8,s14,x6/7,s12,x14/5,s9,x12/11,s2,x10/13,pi/m,s15,x15/5,s7,x10/2,s6,pk/l,x12/6,pd/h,x11/10,s9,x1/14,s3,x7/12,pf/e,s14,x3/2,s5,x0/12,s8,pc/b,x1/8,s5,x6/9,s3,x10/8,po/m,x14/9,s4,x13/15,pn/f,x3/8,s6,x15/0,ph/d,x13/3,pi/l,s13,pa/p,x12/8,pb/j,x5/13,s2,x3/15,s5,ph/p,x4/1,pj/k,x11/2,s1,pl/o,x7/1,s4,x15/12,s3,x10/4,s10,x0/2,s7,x5/4,s10,x10/1,pb/c,s8,x13/8,s3,pd/p,x6/15,s1,x13/4,s3,x0/7,s8,x8/6,s4,x2/3,s5,x9/4,s4,x3/14,s15,x15/1,s12,x2/5,pg/i,x11/9,pc/d,x3/2,s14,x15/10,pj/p,x7/13,pg/f,x12/15,po/n,x5/1,s14,x6/3,s6,x5/4,s13,x0/7,s1,x1/5,s15,x3/8,s1,x14/11,s11,x5/3,s1,x11/4,s10,x14/9,s4,x13/11,s12,x12/10,s2,x9/2,s6,x12/6,s1,x9/1,pd/f,x10/4,pe/p,x12/3,s9,x2/11,s12,x1/12,s3,x3/4,s1,x9/12,pj/n,x11/10,s3,x6/14,s2,x4/8,s7,x11/14,s3,x9/1,s7,x5/13,po/d,x9/10,pj/e,x1/6,s5,x13/3,pc/d,s8,x4/1,pp/n,x10/11,pd/o,x5/13,s4,x10/8,s13,x12/1,s14,x9/2,s9,x4/0,s6,x11/10,s12,x15/5,s9,x12/6,s7,x15/1,s6,x9/8,s1,x5/15,pm/c,x6/14,s1,x1/10,s2,x11/5,s5,x0/3,s6,x14/1,pl/o,x8/10,s1,x2/14,s6,x15/5,pg/i,x3/8,s1,x0/6,s10,x1/14,s10,x13/2,s7,x6/10,s3,x2/15,s14,x11/0,pk/h,x10/12,s3,x1/6,s8,x10/9,pp/m,x5/7,s14,x8/15,s14,x0/9,pa/l,x13/15,pc/g,s13,x1/14,s5,x15/7,s7,x12/3,s5,x15/4,s8,x13/11,pk/d,x2/15,pp/l,x14/1,s4,x8/5,pm/i,x9/11,po/g,x1/7,s15,x9/13,s12,x3/6,s15,pa/n,x7/1,s14,x15/11,pm/p,x14/6,ph/b,x15/2,s3,x4/9,s4,x5/7,s5,x3/13,s6,x11/14,s8,x2/8,s6,x6/0,s5,x1/10,s6,x14/13,s1,x7/8,pm/e,x1/3,pb/j,x15/4,s10,x6/12,s9,x0/10,s15,pk/p,x5/4,s2,x3/9,pb/l,x10/13,s8,x2/15,pa/f,s14,x12/1,pe/k,x4/14,ph/j,x1/3,pd/l,x0/4,pb/k,x7/11,s12,x4/12,s4,x0/14,s8,x1/15,s9,x13/9,s2,x6/7,s3,x12/13,pg/e,x4/6,pf/c,x0/1,s10,x12/13,s2,x9/10,pe/g,x6/2,pl/f,x7/12,s2,x6/10,pj/g,s11,x3/2,s11,x11/0,po/a,x14/9,pg/l,x4/12,s7,x5/11,pm/b,s11,x12/10,po/a,x5/3,s3,x0/9,s6,x15/4,s3,x6/11,s1,x9/2,s9,x10/6,pe/g,s7,x9/2,s8,x10/13,s11,x6/15,s14,x12/11,pm/a,x7/14,po/c,x9/3,s13,x2/5,pd/f,x13/12,s10,pe/n,x4/9,pk/c,x2/5,s3,x8/10,s1,x1/7,s9,x6/14,s6,x8/4,pf/n,x0/9,s13,x14/2,pl/c,x11/8,pd/a,x2/9,s9,x7/5,pm/b,x1/11,s8,x0/4,pc/f,x12/13,s12,x11/6,s4,x4/3,ph/i,x15/1,pm/g,x4/3,s3,x2/8,s13,x14/0,pj/b,x7/2,pg/i,x11/13,pa/f,x15/7,s11,pn/i,x11/6,pd/g,x9/3,s14,x1/4,s6,x6/11,s10,x15/2,s11,x11/1,s10,x6/4,s6,x14/7,s9,ph/n,x5/11,s8,pj/e,x7/9,s6,x6/11,s2,pc/h,x10/7,s14,x9/1,s7,x15/5,pk/o,s3,x14/7,s7,x0/2,s12,x1/14,pp/a,s8,pk/m,x12/8,s12,x9/13,s6,pj/i,x10/6,s12,x4/15,pp/g,x7/5,s7,x14/15,s6,x5/13,s4,x9/8,pe/a,x0/11,s14,x15/2,pm/o,x11/7,s10,pi/g,x8/5,po/m,x3/12,s5,pg/c,x1/8,pd/o,x11/10,s2,x6/5,ph/p,x14/11,po/b,x9/2,s15,pj/i,s15,x12/14,s10,x11/7,pm/p,s5,x10/3,s10,x7/8,s15,x11/5,po/b,s5,x15/14,s10,x3/6,pd/f,x2/10,pm/e,x4/14,s12,x5/11,s8,x12/8,s11,x10/5,s12,x0/8,s3,x5/2,s10,x11/14,s4,x4/7,pl/n,s10,x14/8,s13,pm/k,x10/15,pi/f,s1,x0/14,s11,x2/13,pc/o,x10/4,pi/g,s1,x13/14,pa/j,x9/5,s1,x4/7,s5,x1/13,s4,x5/9,pi/b,x8/11,pj/a,x2/10,pe/f,x4/12,s10,x0/3,s5,x7/12,s11,x11/6,pi/k,x5/1,s1,x0/2,pl/f,x5/15,pp/c,x14/10,pa/k,s14,x7/11,ph/b,x0/5,pe/a,x14/7,ph/i,x0/13,s9,pb/j,x1/9,pc/k,x3/8,ph/n,x10/6,pi/o,x15/7,s15,x0/14,pj/f,s1,x4/5,s11,x12/11,s4,x3/6,s5,x1/12,pp/l,x2/4,s15,x8/3,s7,x7/12,pj/o,x4/13,pe/d,s2,x6/3,s15,x5/8,s14,x3/9,s1,x7/0,s11,x2/8,pp/i,x12/13,s15,x9/11,s4,x3/4,po/n,s12,x2/11,s14,x7/6,s4,x9/14,pm/a,x2/13,s12,x9/14,s14,x5/3,pp/j,x15/7,pd/k,x0/6,s9,x12/11,pn/i,s8,x5/14,s11,x4/10,s7,x11/6,s7,x5/2,s6,x11/7,s2,x0/9,ph/d,x1/2,s7,x3/8,s11,x6/9,po/e,x0/2,s9,x8/7,s12,x4/0,pb/n,x5/11,s4,x8/1,pm/p,x12/5,s6,x2/7,s9,x6/13,pk/f,x15/3,s15,x0/5,pi/j,x11/14,pl/e,x8/4,s10,x12/9,s3,x6/1,s3,x8/9,pg/k,x6/10,s3,x15/3,s1,x8/0,s1,x6/13,pa/h,x8/7,s4,pb/f,x9/2,s10,pi/a,x1/0,pl/j,x14/3,pf/d,x9/1,pe/i,x8/4,pa/f,x7/12,pc/h,x1/10,s13,x9/15,pb/f,x5/1,ph/j,x14/12,s10,pf/p,x8/1,s4,x6/2,pa/b,x3/7,pp/k,x5/11,ph/f,x10/12,s3,x0/8,pk/d,x10/4,pb/c,x0/13,pg/o,x10/2,s14,pb/k,x5/1,s3,x10/9,ph/j,x4/8,s7,x9/7,s6,x1/5,s9,x14/13,s3,x11/6,s15,x13/9,s4,x5/7,pn/b,x10/12,s8,x1/8,s7,x3/0,s9,pj/f,x7/6,s4,x8/1,s7,x12/5,pe/b,s13,x9/13,pn/d,x14/8,pb/f,x4/7,s9,x9/14,s13,x2/11,s15,x6/4,pn/g,x3/9,s5,x8/14,pp/m,x11/7,s6,pi/e,x15/1,s9,x10/8,s1,x6/1,s6,ph/n,x4/8,pd/k,s10,x9/0,s8,pf/g,x4/8,pk/l,s4,x7/0,s2,x1/10,s9,x8/6,pf/b,x3/11,ph/j,x6/14,pk/l,x2/1,pp/m,x4/10,pa/k,x11/8,pg/j,x6/13,pe/k,x11/9,pg/o,s2,x13/6,s1,x14/4,s2,x3/9,s6,x11/13,s7,x14/15,pe/l,x11/6,pf/d,x9/15,pn/h,x2/4,s7,pg/m,x3/15,s10,x4/11,s1,x7/10,po/d,x12/11,s1,x10/9,s1,x8/7,s6,x1/2,s10,x8/5,s14,x13/9,s10,x2/1,pl/p,x7/4,s12,x0/3,pm/k,x8/1,pp/d,x14/15,s15,x6/11,s4,x9/4,s8,x1/12,pj/a,x8/9,s14,x13/5,pd/f,x8/4,s1,x0/15,pm/p,x4/7,pf/e,x3/5,pp/k,x12/10,s11,x4/14,pn/f,x11/13,s3,x8/2,pi/j,x14/13,s1,x12/15,pd/l,x14/4,po/b,x9/6,s4,x10/2,s2,x1/0,s9,x5/7,pk/g,s7,x14/15,s13,x9/4,s9,pa/m,x1/3,pf/e,x6/2,pd/l,x13/9,s5,pj/n,s11,x4/7,pi/f,x10/3,pb/l,x4/7,pj/g,x15/13,s5,x8/7,s4,pk/l,x9/12,s4,x2/0,s9,po/g,x6/4,pb/k,x5/0,s4,x13/4,pe/l,s11,x14/1,s4,x7/11,s11,x10/6,s10,pj/h,s14,x13/9,s15,x4/1,pe/c,x11/15,s15,x5/2,pd/i,x1/3,pb/a,x2/11,s6,x0/12,s9,pj/i,x1/3,pb/e,s13,x6/15,s7,x7/14,pp/h,s11,x3/15,s6,x7/12,s9,x1/14,pl/m,x6/8,pd/j,x2/11,s7,x15/1,s8,x3/6,s1,x15/9,pi/g,x7/1,pd/b,x6/5,s3,x13/4,s1,x0/2,pp/e,x9/15,pa/n,x8/2,s4,x1/7,s14,x11/6,pg/f,x3/1,pl/o,x6/15,pg/p,x1/12,s12,x0/6,pe/b,x15/10,s6,x3/2,s14,x14/1,s6,x9/12,s2,x14/2,s11,x3/5,ph/a,x10/2,s15,x12/13,pg/n,s2,pe/a,x4/11,s15,x15/7,s7,x14/0,s15,x10/9,pd/l,x12/4,s4,x15/5,pn/i,x10/1,pc/j,x5/12,s13,x2/9,s10,x15/10,s12,x11/9,s13,x13/14,pe/a,x15/8,s7,pj/h,x0/11,s3,x10/6,pe/m,x13/5,pc/k,x11/0,pf/j,x6/4,pe/o,x8/0,pj/c,x15/13,s7,x10/8,s10,x5/6,s1,x2/15,s6,x9/4,pb/h,x8/12,pe/o,x7/9,pp/k,s9,x0/2,s5,x8/14,s2,x0/3,pj/m,x4/12,pg/n,s8,x5/1,s7,x4/14,s15,x5/8,s5,x0/14,s9,x9/2,s4,x14/15,pj/l,x0/13,s4,x14/15,pn/k,x1/8,s15,x2/5,po/c,x6/7,ph/a,s6,x8/1,pm/b,s2,x7/13,s7,x6/5,s14,x0/7,s9,x2/1,s7,x15/14,po/e,x3/13,s8,x14/7,pk/c,x15/4,s14,x5/10,s6,pp/m,x11/6,s10,x5/9,s6,x10/11,s4,x13/14,pa/h,s2,x3/5,s10,x6/11,pm/e,s4,x8/3,s14,pj/l,x1/0,s9,pn/i,x11/3,pg/j,x4/10,pk/n,x0/8,pc/p,x3/15,pd/j,x9/7,pg/i,x12/1,s11,x3/8,pp/a,x0/14,pf/j,x12/13,s14,x8/9,pi/m,x13/3,s3,x7/6,pd/h,s2,x8/0,s5,pa/p,x4/12,s13,x1/2,s1,x8/5,pf/k,x11/1,s12,x10/7,s11,x13/1,s3,x2/6,pc/i,x15/8,s6,x14/7,s7,x11/1,pn/h,x13/5,s10,pj/c,x9/3,po/l,x14/0,pj/p,x8/3,s13,x0/7,s13,x1/14,pl/m,x11/10,s15,x4/2,s11,x13/7,s1,pd/j,x1/4,s4,x6/3,s13,x15/7,s9,x0/3,pi/n,x4/5,pm/e,x14/13,po/n,x5/12,pd/i,x7/3,s2,x8/11,ph/a,x3/14,s4,x5/4,pd/c,x12/3,s15,x10/7,s9,x8/11,pf/n,x5/15,s4,x7/10,pm/c,s14,x15/9,pg/o,x1/7,s6,x9/5,s15,x2/3,pp/d,x13/7,pb/c,x1/8,s5,x2/12,s13,x14/13,s10,x15/9,s10,x8/3,s1,x1/11,s10,x3/9,pi/l,x7/5,s10,x14/1,pn/p,s1,x0/4,s14,x12/11,s6,pg/h,x2/4,pc/a,x14/13,s3,x11/6,pl/k,x3/14,s9,x10/2,pm/o,x3/5,pd/k,x13/4,s7,x3/14,ph/i,x13/4,s6,x5/12,s15,x8/15,s11,x9/3,pc/g,x10/14,s9,x8/5,pe/m,s10,x15/11,pk/h,x4/10,pi/a,x0/11,s4,x3/9,ph/e,x11/8,pn/f,x10/1,pb/h,s12,x2/9,s7,x10/15,pp/d,x11/7,s12,x5/15,pk/h,x8/1,s1,x14/15,s7
diff --git a/2017/inputs/day_17.txt b/2017/inputs/day_17.txt
deleted file mode 100644
index 67bf40f..0000000
--- a/2017/inputs/day_17.txt
+++ /dev/null
@@ -1 +0,0 @@
-371
diff --git a/2017/inputs/day_18.txt b/2017/inputs/day_18.txt
deleted file mode 100644
index 8b74206..0000000
--- a/2017/inputs/day_18.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-set i 31
-set a 1
-mul p 17
-jgz p p
-mul a 2
-add i -1
-jgz i -2
-add a -1
-set i 127
-set p 735
-mul p 8505
-mod p a
-mul p 129749
-add p 12345
-mod p a
-set b p
-mod b 10000
-snd b
-add i -1
-jgz i -9
-jgz a 3
-rcv b
-jgz b -1
-set f 0
-set i 126
-rcv a
-rcv b
-set p a
-mul p -1
-add p b
-jgz p 4
-snd a
-set a b
-jgz 1 3
-snd b
-set f 1
-add i -1
-jgz i -11
-snd a
-jgz f -16
-jgz a -19
diff --git a/2017/inputs/day_19.txt b/2017/inputs/day_19.txt
deleted file mode 100644
index b4826aa..0000000
--- a/2017/inputs/day_19.txt
+++ /dev/null
@@ -1,201 +0,0 @@
- |
- +-----------------------+ +-------------------------------------------------------------------------------------------+
- | | | | |
- +-------------------|-----------------------|-----------------------+ +-----------------------------------------------------------------------|-----+ |
- | | | | | | |
- +-----------+ | +---------------------------------|-------------------------+ | | |
- | | | | | | | | |
- | +-----+ | | | | +---------------------|---------------------------------------+ | | |
- | | | | | | | | | | | | |
- | | | | +---|-------+ +---------------------------|---------------------------------------------------------------------|-----|-------------+
- | | | | | | | | | | | | |
- +-------|-------------------------------|-+ +-+ | | | +---------------------+ +-+ | +-----------------------+ +-------------+
- | | | | | | | | | | | | | | | | | | | | |
- | +---|---------|-----------------------|---|---|---|---------------|-----------------+ | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | |
- | | | +-|-----+ | | | | | | | | +-------------------------------------|-----------------------------------------|-+
- | | | | | | | | | | | | | | | | | | | | |
- | +-------------|-----------------------|---|---|----Y------|-------|-----------------------------------------------------------+ | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | +-----------------------------------------------------------|-----|-------------------|-+ | |
- | | | | | | | | | | | | | | | | | | | | | | |
- | | +---------------------------|-----------|---------------|-------------------------------------------------------------------------------------|-----------------+ | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | +---------------------------+ | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | |
- +-+ | | | | | | | | | | | | +-+ +-------------------------------------|-----------------------------------|-----+ | +-----+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | +-|-|-------------------|-------------|-|---------|---+ | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | +---|-+ | | | | | | | +-----|-------------|-----------|---|-------------------------------------------------------------|-|-----|-----------|-------|-|---+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | +-|---|---+ | | | | | | | | +-------|-----|-|---------|-------|-|-----+ | | | | | | | | +-|---+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | +-|---+ | +---------|---|-----|-------------------------------|-----------------------|-----------+ +-|-------|-|---+ | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | +-|---------------|-------|-----|-------------|-----|---------+ | | +-|---+ | +-------------------+ | +-------------------|---------|-+ | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | +-------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------|---+ | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | +-|---|-|-------|-----------|-----|---------|-------|-------|-+ | | +-+ | | | | +-----------+ | | | +-+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | +-----------------|---|---|-|---+ | +-----------------------|-------+ +-+ | | +-|-|---|-|-------|-+ | | +-+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | +---|-----|-------------|---|-+ +-------|---------+ | | | | | | | | | | | | | | | | | | | | +-+ | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | +-|-|-----|---|-|-|-------------------------------------------|-----|-|-------+ | | | | +-----|---|---------+ | | +-----------|---------+ | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- +-|---|-|-|-+ | +---|---|-------------------------+ | | | | | +---|-------|---|-+ +-|-|---|-|-----------|-----------|-----|-|-----|---|-|-----+ | +---|-----|---+ | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | +-----|-------------------+ | | | | +---|---------+ | | | | | | | | | | +-------|-|-----|-----|-------+ | | | +-+ | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | +---------------------|-+ | | | | | | +-----|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | +-|-|-----|---|---|-|-|-|-|-------------------+ | | | | | | | | | +-|-----+ | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | +-|---|---------------------------|-------------+ | +---+ | | | | | | | | | | | | | | +-----|-----------|-----|-------|---|---+ | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | +---------|-|-|-----------------------|-|-----------|---------------|-----|---|---------|---|-|---|-|-|-----|-----------|-------|---+ | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | E | | | | | | | | | | | | | | |
- | | | | | | | | | | +-----|-----------|---|---------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---|-+ | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | +-|-------------|-|-|-----|----------U----|-|---|-------|-------------|-|-|---|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | +---------------|---------------------------|-----|---------|-----|-------------|-----------------+ | | | | | | | | | +-+ | +-|---|-----------------+ | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | +-|-----+ | +-|-+ +---------------|-|---+ | | | | | | | | | | | | | | | | | +-------|-----------------------|-|---|---|-|-----|---------|-|---------|---------+ T | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | +-----------------------+ | | | | | +---+ | | +-|-----|---|-|-|-+ | | | | | +-------|---+ +-+ +-|-|-+ | | +---+ | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | +-----------|-----|-----------|-----|-----|-----------------|-|---|-------------|---|---|---|-----|---------|---------|-------|-----------+ | +---|-|-|-|-|---|---|-----+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | +---+ | | | | | +-|-----|-----|-------|---------|-+ | | | | | +---|-----|---------|---------|-------------+ | | | +-----------|---|-------|-----+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- +---------|-----|-|-----|-------|-|-----------|-|-|-----|---|-------|-------|---|-|--D------|-|---|-------------|---------+ | +-------------|-|-----------------|-|---|-|-|-------|-------+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | +---------|---+ +-------|---|-------+ | | | | | | | | | | | | | | | +---|---------|---+ | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------------|---|-|-----|-----+ | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------+ +-+ | +-|-----|-----|-----|-|-|-------|-|-------|-|-|-|---+ | | | +-+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | +-|-------|-------|-----------------------------------|-+ | | | | | | | | | | | | | +---------------|---|-|-----|-|-|-------|-|-------+ | | | | +-|-|---|-+ +-+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | +---|-|---------|-|---------|-|---|-|-----|-----|-|-|-----+ +---------+ | | | | | | | | | +---|-|-|-|-+ | | | +-----+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | +-------------|-|-----------------|-----------|-|-----|-----|-----|-|-----+ | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | +-----|-|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------|---+ | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | I | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | +-|---------|-----|---------------------------+ | | | | | | | | | | | | | | | +-|-------+ | | | | | | | | | | | | | | | | | | +-+ | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | +-|---|-------|---|-----|-|-----|---------------|-----|-----|-----------|---|-----------|-|-----|-----|---------------|---------|-|-|-+ | | | +-------|-------+ | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | +---|-|-+ +---------+ | | +-------|-----|-----|---------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- +-|-------|---+ | | | | | | | | +-----------------|-|---------------|---+ | | | | | | | +---|---|-----------|-|---+ | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | +---|---|-|-------------------------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- +-|-------|---|-----|-----|-----------|-------------------------|---|-+ | | | | | | | | | | | | | | | | | | +-----|-----------|---|---|---+ | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- +-------------|-|-|-------|-----|-------|---------|---------|-------------------|-|---------+ +-|---|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- +-|-------------|---------|---|-|-----|-|-------------------|-|-----|-----|---------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | +-----------|---|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | +-----|---|-----------|-|-|---------|-----|-|-------------|---|-------+ | | | | | | | | | | | | | | | | | | | | +---------|-|-----------|---|-+ | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | +---------|-----|---|-|-----|-----|-----|-|-|-----|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-|---|---|---|-------|-----------|-|-+ +-|-|-----+ | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | +-----|-|-+ | | | | | | | | +-----------|---|-----|-|-------|-|---|-|N|-|-----|-------|-|-----------|---|-|-----|-+ | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | +-|-|-------|-|---|-------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----+ | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|-------|---|-+ | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | +---|-----|-----------|-|-|-|-----|-|---|---|-+ | | | | | | | | | | +-|-|-|-+ | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | +---+ +---|-------|---------------|---|---|-------------------|-------------------|-|---|-|-|---|-|-------------------|-----|-----|-|---|---+ | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | +-----|---------------|-----------|---|-------|-----------------|-------|-------|-----------|-------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | +-|---|---|-------------------|-----|-----|-----|-|-|-|-----------+ | | | | | | | +-|-|---+ | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | +-----|---------------|-------|---|---+ | | | | | | | +-----|-|-----|-|---|---|---|-|-|---------|---------|---------|---------+ | +-----------+ | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---------------|---|---|---|-|---------|-|---+ | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | +-------|-|-|-------|-------|---|---------|-------|-----------+ +-|---+ | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | +-------|---------|-----|---------|---------------------|-----|-----------|-|-----------|-+ | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | X | | | | | | | | | | | |
- | | | | | | | | | +-----|-----|-|-|---------+ | | +-----------+ | | | | | | | | | | | | | | | +-----------+ +-|---+ | +-|-------|-+ | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | +-----------------|-|---+ | | | +-------|-|-------------|-------------|-----+ | | | | +-|---|-----|-+ | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- +---------|-----------|-----------------|---|---|-----|-+ | | | | | | | | +-----|-|-|---|-------|-----|---------------|-----|-----|-|---|-----------|-----|---------|-----+ | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | +---+ | | | | | +---------------------|-----|-----|-|-------------|-----|-----|-|-----------|-|-|-|-|---|-------------|---------|-----+ | +-----------|---------|---|-----|-----|-|---|-+ |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | +---|---|-----|---|-----|-------|-------|-----------|---------------------------|-|-|---------------------|-|-|---------------------|---+ | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | +-------|-----|-----------------+ | +-+ | | | | | | | | +-|-|---|-+ | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | +-|-----|---+ | | | | | | | | | | +-|-|-------------|-|-----|---------+ | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | +-|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+ |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- +-----|-|-|-------|---|---------|-------|---------|---|-----|-|-------------------|-------|-------------|-----|-|---------|-|---------------|---|-----------------|-------|-|---|-----------|---------+
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- +---------+ | | | | | | +-----|---|-----|-----|---|-|-------------------------|-|-|-----------|-|-----|---------|-----|-----------------|-----|-----|-|-------|-----------------|---------+
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | +---|-|-----------|-|-|-----|---------|-----|-----------|---|-|---+ | | | | | | | +-----------|-+ | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | A | | | | | | | | | | | | | | | | | | | | | | | | |
- +-----|-----|-|---|-+ | | | +---+ +-----|---|-------------------------+ | | | | | +---------|---------------|-----------|-----|-+ | | | | | | +-|-------------|-|-|-|---|---+
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | +-----|-----------|-+ | | | | | | | | | | | +-+ | | | | | +---|---|---+ | | | | | +---+
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | +-|-----|-|-------|-----------+ | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | +-----|-|-----------|-+ | | | | | | | +-------|-|-------------|-----|-----|-----|---------------------|-|-------|---|-|---|---|---|-----|-----|---+ |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | | +---|---+ | | | | | | +-|-|---+ | | +-+ | | | | | | | | +---|---|-|---|-------|-+
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | +-------------|-+ | | +-|-----------------------------------+ | | | +---|-----+ | | | | | | | | | | | | +-|-----------+ | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- +---|-|-------|-+ | | +---|-------+ | | | +---------------------------|-----------|---|-------|-----|-----|---------------------------------|-------------------+ | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | +-------|---+ +-------------+ +---+ +-|-|-------|-------------|-|---------------------------|-+ | | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- | +-------|---+ | | | | | | | | | | | +-+ +-------------------|-----+ +-+ +-----|-+ | +---+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | | +-----|-------------------|---------|---|-------|-|---+ | | | | | | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- +-+ +---|-----------|-----------------------------------------------------------------------|-------|-----------|-----|-----------------------------------+ | +-------------------+ +-|-+
- | | | | | | | | | | | | | | | | | | | | | | | | | P
- | +-------|---------+ | | +-------------|-------------------------|---------|---|---------|-------------|-------------------------+ | +-----------------+ | |
- | | | | | | | | | | | | | | | | | | | | | | | | | |
- | | | | | | | | +-----------------------------|-----+ | +-------|-------------|---+ | +-----|---+ | | | | |
- | | | | | | | | | | | | | | | | | | | | | | | |
- | +---+ | +-|-------------+ | | | +---------+ +-------+ +-------------+ +---+ | | +---+ |
- | | | | | | | | | | | |
- +-----+ +-----+ +-+ +-----+ +-----------------------------------------------------------------------------------+ +-----------------+
-
diff --git a/2017/inputs/day_2.txt b/2017/inputs/day_2.txt
deleted file mode 100644
index f2f1f5e..0000000
--- a/2017/inputs/day_2.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-493 458 321 120 49 432 433 92 54 452 41 461 388 409 263 58
-961 98 518 188 958 114 1044 881 948 590 972 398 115 116 451 492
-76 783 709 489 617 72 824 452 748 737 691 90 94 77 84 756
-204 217 90 335 220 127 302 205 242 202 259 110 118 111 200 112
-249 679 4015 106 3358 1642 228 4559 307 193 4407 3984 3546 2635 3858 924
-1151 1060 2002 168 3635 3515 3158 141 4009 3725 996 142 3672 153 134 1438
-95 600 1171 1896 174 1852 1616 928 79 1308 2016 88 80 1559 1183 107
-187 567 432 553 69 38 131 166 93 132 498 153 441 451 172 575
-216 599 480 208 224 240 349 593 516 450 385 188 482 461 635 220
-788 1263 1119 1391 1464 179 1200 621 1304 55 700 1275 226 57 43 51
-1571 58 1331 1253 60 1496 1261 1298 1500 1303 201 73 1023 582 69 339
-80 438 467 512 381 74 259 73 88 448 386 509 346 61 447 435
-215 679 117 645 137 426 195 619 268 223 792 200 720 260 303 603
-631 481 185 135 665 641 492 408 164 132 478 188 444 378 633 516
-1165 1119 194 280 223 1181 267 898 1108 124 618 1135 817 997 129 227
-404 1757 358 2293 2626 87 613 95 1658 147 75 930 2394 2349 86 385
diff --git a/2017/inputs/day_20.txt b/2017/inputs/day_20.txt
deleted file mode 100644
index f249f9e..0000000
--- a/2017/inputs/day_20.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-p=<-317,1413,1507>, v=<19,-102,-108>, a=<1,-3,-3>
-p=<1639,477,-2519>, v=<-79,-102,130>, a=<-9,9,12>
-p=<613,-993,-305>, v=<-39,27,-48>, a=<-2,8,11>
-p=<1343,190,-1565>, v=<-82,31,31>, a=<1,-4,5>
-p=<735,-285,2387>, v=<-20,-64,-67>, a=<-2,8,-6>
-p=<963,456,-1888>, v=<-42,-73,88>, a=<-1,5,1>
-p=<-1659,1444,-463>, v=<-14,-25,-77>, a=<10,-5,10>
-p=<-443,-95,-1185>, v=<142,-14,81>, a=<-12,2,-2>
-p=<-2590,3249,-710>, v=<35,-30,36>, a=<10,-14,0>
-p=<-1602,-171,924>, v=<83,-50,-20>, a=<0,6,-3>
-p=<-633,2195,-458>, v=<31,-200,31>, a=<4,0,2>
-p=<-347,-49,-1976>, v=<-19,-50,151>, a=<8,9,5>
-p=<852,314,125>, v=<-56,-83,-22>, a=<-4,9,2>
-p=<-10088,3682,-5210>, v=<52,32,-38>, a=<14,-8,11>
-p=<-4019,1982,4446>, v=<-4,47,-7>, a=<7,-6,-7>
-p=<3444,-2319,-11041>, v=<-171,-89,81>, a=<4,9,14>
-p=<2390,792,2117>, v=<0,47,114>, a=<-4,-4,-10>
-p=<5661,-1318,-1666>, v=<-87,-44,-33>, a=<-5,5,5>
-p=<2856,-1912,743>, v=<-36,59,-174>, a=<-3,0,9>
-p=<4275,5447,-5461>, v=<6,-11,31>, a=<-8,-9,8>
-p=<1263,1223,980>, v=<-98,-69,-68>, a=<0,-3,-1>
-p=<1094,963,1253>, v=<-85,-105,-75>, a=<0,5,-3>
-p=<2641,-922,2124>, v=<-113,61,-142>, a=<-13,2,-3>
-p=<600,859,-398>, v=<-26,-97,-4>, a=<-3,5,5>
-p=<-128,-1533,330>, v=<-12,73,-88>, a=<3,7,9>
-p=<1419,-1507,-528>, v=<-159,29,-15>, a=<7,13,8>
-p=<574,-1299,-1100>, v=<-17,104,113>, a=<-4,0,-4>
-p=<-440,-1923,-8>, v=<-2,131,36>, a=<5,3,-5>
-p=<-1705,-1617,-226>, v=<45,42,123>, a=<0,0,-6>
-p=<708,36,4790>, v=<1,57,-48>, a=<-1,-3,-4>
-p=<2266,9745,3707>, v=<38,-101,-78>, a=<-5,-8,-1>
-p=<7320,-629,-2164>, v=<-134,-62,18>, a=<-3,4,2>
-p=<746,6097,-2544>, v=<-78,-44,-11>, a=<3,-6,4>
-p=<1563,-7678,5873>, v=<115,-13,-57>, a=<-8,11,-5>
-p=<-8146,-3232,-5147>, v=<156,-52,155>, a=<3,7,-1>
-p=<-3966,4235,1389>, v=<7,44,22>, a=<5,-8,-3>
-p=<2171,-5151,14708>, v=<21,-21,-75>, a=<-4,8,-16>
-p=<442,-1232,2730>, v=<9,-20,3>, a=<-2,5,-8>
-p=<-273,-1960,5408>, v=<-58,89,-100>, a=<5,-1,-8>
-p=<-624,-3559,247>, v=<50,137,31>, a=<-2,0,-3>
-p=<2106,-2688,1482>, v=<-82,144,-57>, a=<0,-3,0>
-p=<-2886,1147,2678>, v=<83,-44,-157>, a=<2,0,4>
-p=<1984,472,-191>, v=<-31,-3,63>, a=<-3,-1,-4>
-p=<3604,-6710,-2540>, v=<-21,123,-32>, a=<-8,9,9>
-p=<5305,1390,781>, v=<-182,103,-15>, a=<-1,-11,-1>
-p=<-527,256,-1055>, v=<-22,-107,39>, a=<3,7,0>
-p=<7708,1660,5803>, v=<-131,-19,-103>, a=<-11,-3,-8>
-p=<-5981,-2228,-6671>, v=<68,-15,23>, a=<11,7,16>
-p=<1356,-1869,-687>, v=<39,68,25>, a=<-6,0,0>
-p=<-1052,4725,937>, v=<38,-66,54>, a=<0,-7,-6>
-p=<-1668,10101,-631>, v=<2,-229,23>, a=<4,-9,0>
-p=<-1906,-4165,4255>, v=<-33,-24,37>, a=<7,12,-13>
-p=<-2760,-2373,-2325>, v=<-46,57,40>, a=<10,2,3>
-p=<516,-6601,-1625>, v=<69,63,44>, a=<-6,12,1>
-p=<1062,-6279,-4929>, v=<6,66,17>, a=<-3,11,11>
-p=<1636,-2387,-1205>, v=<-87,72,58>, a=<2,1,-1>
-p=<3099,3807,-117>, v=<-71,-169,77>, a=<-9,-3,-7>
-p=<1009,-3185,-991>, v=<-1,39,-47>, a=<-5,13,10>
-p=<-3228,368,1954>, v=<142,32,-62>, a=<3,-5,-4>
-p=<1180,1793,-896>, v=<-20,-173,-2>, a=<-4,8,5>
-p=<-1936,7,2790>, v=<24,1,-36>, a=<8,0,-11>
-p=<-1214,-2045,3474>, v=<116,9,-132>, a=<-5,10,-5>
-p=<4619,2971,-3480>, v=<-171,-75,104>, a=<-7,-8,8>
-p=<-2088,1166,3018>, v=<112,-40,-28>, a=<0,-2,-13>
-p=<211,653,2410>, v=<21,107,-46>, a=<-3,-14,-8>
-p=<2415,1926,-1580>, v=<-75,50,34>, a=<-5,-15,5>
-p=<1538,-908,976>, v=<-54,31,26>, a=<0,0,-4>
-p=<3539,7415,1788>, v=<-18,-151,-32>, a=<-7,-7,-2>
-p=<3249,4196,-1373>, v=<-23,-25,2>, a=<-6,-8,3>
-p=<2031,-4301,1701>, v=<-41,148,-29>, a=<-2,0,-2>
-p=<2002,11678,-2475>, v=<-25,-148,85>, a=<-3,-17,0>
-p=<2350,-560,-1315>, v=<-52,64,15>, a=<-2,-3,2>
-p=<11423,-875,9878>, v=<-163,-146,-174>, a=<-13,11,-9>
-p=<1751,-5773,2469>, v=<53,156,33>, a=<-7,2,-7>
-p=<-2155,4333,-7110>, v=<51,-122,38>, a=<1,-1,12>
-p=<-5906,7123,1229>, v=<92,-84,-39>, a=<6,-9,0>
-p=<4696,-2115,113>, v=<-106,-74,-35>, a=<-3,9,2>
-p=<-1132,-4533,1322>, v=<34,36,6>, a=<0,7,-3>
-p=<1658,519,-978>, v=<-72,-26,-46>, a=<-5,-1,14>
-p=<83,-426,732>, v=<25,-35,32>, a=<-4,8,-10>
-p=<278,-1926,-1653>, v=<-52,49,79>, a=<4,10,4>
-p=<-787,-6,-183>, v=<-21,57,61>, a=<9,-7,-6>
-p=<-487,1044,612>, v=<-65,-109,32>, a=<12,5,-9>
-p=<2603,-1521,-123>, v=<-135,86,105>, a=<-5,2,-12>
-p=<-562,1044,-1188>, v=<12,-5,160>, a=<3,-8,-10>
-p=<-1715,3425,5361>, v=<-30,-42,-103>, a=<5,-4,-4>
-p=<-2803,721,-5279>, v=<-95,92,48>, a=<11,-7,7>
-p=<957,-303,-5263>, v=<-97,-107,64>, a=<4,7,6>
-p=<829,-943,-7839>, v=<-93,12,62>, a=<4,1,11>
-p=<-2883,4417,-4703>, v=<56,-40,96>, a=<2,-6,3>
-p=<2557,-6319,3889>, v=<51,147,9>, a=<-8,3,-8>
-p=<-7939,-799,-4191>, v=<82,-9,-52>, a=<10,2,11>
-p=<-7470,-439,367>, v=<120,92,9>, a=<17,-6,-2>
-p=<-2134,-94,-898>, v=<20,-115,40>, a=<6,10,0>
-p=<-478,1930,2092>, v=<20,-35,-114>, a=<0,-4,2>
-p=<1040,-1727,551>, v=<-82,28,-59>, a=<3,4,3>
-p=<-2318,-324,2069>, v=<4,63,-77>, a=<8,-4,-1>
-p=<-2249,21,-1220>, v=<73,0,18>, a=<2,0,3>
-p=<2627,-3199,-2577>, v=<17,44,113>, a=<-11,8,0>
-p=<-2732,-1796,482>, v=<-2,103,-68>, a=<10,-2,4>
-p=<441,1243,20>, v=<43,-28,83>, a=<-10,-8,-11>
-p=<1029,-1151,-764>, v=<-104,68,94>, a=<4,2,-5>
-p=<-672,-2551,97>, v=<25,153,40>, a=<3,4,-6>
-p=<1027,1714,-804>, v=<-72,-122,60>, a=<-1,-2,1>
-p=<416,1506,-50>, v=<-32,-22,16>, a=<0,-14,-1>
-p=<-1131,1623,-1103>, v=<150,-108,20>, a=<-9,-3,10>
-p=<1001,-990,-1454>, v=<-63,37,75>, a=<-2,5,6>
-p=<-418,465,403>, v=<-35,5,45>, a=<12,-8,-14>
-p=<682,-734,73>, v=<-21,120,-75>, a=<-7,-9,11>
-p=<-2343,333,-1159>, v=<140,-79,25>, a=<12,8,13>
-p=<924,421,-587>, v=<-43,3,-75>, a=<-7,-7,21>
-p=<-693,-404,293>, v=<44,24,-5>, a=<3,2,-4>
-p=<363,355,183>, v=<-58,-33,-49>, a=<4,0,5>
-p=<-5454,-1885,-2432>, v=<116,-43,149>, a=<13,12,-3>
-p=<342,-793,-941>, v=<-17,15,23>, a=<0,2,2>
-p=<-456,1139,-920>, v=<21,-22,0>, a=<0,-3,4>
-p=<-101,-4352,13169>, v=<23,75,-150>, a=<-1,2,-10>
-p=<-3122,360,-2677>, v=<83,-49,-84>, a=<0,2,8>
-p=<-7093,-2072,800>, v=<51,-24,78>, a=<7,4,-5>
-p=<6397,1082,4505>, v=<8,88,-39>, a=<-9,-6,-4>
-p=<-63,1937,-1005>, v=<22,46,106>, a=<-1,-5,-4>
-p=<-595,1367,-910>, v=<-42,-56,45>, a=<3,1,-1>
-p=<2578,-11667,-1670>, v=<-28,-25,-52>, a=<-2,17,5>
-p=<-3425,-215,4501>, v=<138,8,41>, a=<-2,0,-11>
-p=<-4625,-135,-939>, v=<27,-77,13>, a=<7,5,1>
-p=<479,1913,2117>, v=<-17,-42,-66>, a=<0,-1,0>
-p=<-3015,2181,-3524>, v=<-9,-40,-70>, a=<7,-2,12>
-p=<-2280,-5424,436>, v=<137,74,108>, a=<-4,7,-8>
-p=<6240,-669,-2024>, v=<-54,-7,-89>, a=<-10,2,10>
-p=<-3885,-84,-8054>, v=<51,-11,50>, a=<5,1,14>
-p=<-3345,6336,2956>, v=<2,-8,-69>, a=<7,-13,-2>
-p=<-3465,-1449,-779>, v=<6,-43,-22>, a=<7,6,3>
-p=<-1170,-8754,-1094>, v=<162,92,-27>, a=<-8,13,4>
-p=<6195,2541,886>, v=<-68,10,-31>, a=<-9,-6,0>
-p=<5625,3321,-2279>, v=<-142,-78,90>, a=<-3,-2,-1>
-p=<146,1150,-504>, v=<-34,-42,20>, a=<4,-8,3>
-p=<-64,-2,1992>, v=<16,-63,-110>, a=<-1,10,-9>
-p=<-1138,334,-24>, v=<99,0,-7>, a=<0,-4,1>
-p=<2156,-146,354>, v=<-104,14,-19>, a=<-11,0,-2>
-p=<2224,501,-708>, v=<-92,-21,-46>, a=<0,0,6>
-p=<664,405,960>, v=<98,33,22>, a=<-10,-4,-5>
-p=<1144,2061,-2388>, v=<-47,-36,149>, a=<0,-4,-4>
-p=<-212,-2043,4500>, v=<-78,-65,-113>, a=<7,12,-6>
-p=<1084,4569,-4644>, v=<-57,-28,-32>, a=<1,-13,18>
-p=<-824,5649,-4296>, v=<60,-48,-34>, a=<-2,-15,17>
-p=<88,-591,-3132>, v=<22,-13,30>, a=<-2,3,8>
-p=<2836,1917,-696>, v=<-30,-105,116>, a=<-7,2,-7>
-p=<-4061,279,753>, v=<73,-63,7>, a=<7,4,-3>
-p=<4439,579,-422>, v=<-46,-23,-24>, a=<-10,0,3>
-p=<-2060,11364,-3131>, v=<-39,-107,-127>, a=<6,-14,13>
-p=<6751,672,-9962>, v=<-119,64,97>, a=<-5,-5,12>
-p=<-575,7206,-6068>, v=<-33,-100,13>, a=<3,-7,10>
-p=<2197,2553,-4418>, v=<2,-78,-71>, a=<-4,0,12>
-p=<4045,243,-5342>, v=<31,9,-26>, a=<-9,-1,11>
-p=<358,122,480>, v=<-55,-68,25>, a=<4,8,-8>
-p=<-1021,-158,1908>, v=<156,12,-122>, a=<-11,0,-2>
-p=<939,283,-283>, v=<1,33,-48>, a=<-9,-7,9>
-p=<519,-438,1425>, v=<31,107,-35>, a=<-9,-10,-9>
-p=<904,-641,-388>, v=<-139,54,12>, a=<10,-1,2>
-p=<6864,2454,-491>, v=<65,22,15>, a=<-17,-6,0>
-p=<-272,1750,-3947>, v=<57,11,-9>, a=<-3,-4,8>
-p=<1168,-6842,3589>, v=<78,164,36>, a=<-7,3,-9>
-p=<-2224,4070,-347>, v=<-80,21,-105>, a=<9,-9,7>
-p=<-1872,2102,-875>, v=<41,66,-39>, a=<1,-8,4>
-p=<-5120,-3610,1701>, v=<126,63,-4>, a=<2,3,-3>
-p=<-7936,774,-2043>, v=<115,-74,47>, a=<8,3,1>
-p=<-5770,1949,-1810>, v=<144,-4,67>, a=<16,-10,3>
-p=<1032,524,-993>, v=<66,-119,54>, a=<-12,9,0>
-p=<-241,904,-2703>, v=<23,-39,74>, a=<-1,-1,7>
-p=<1659,-2535,52>, v=<73,32,-11>, a=<-16,10,1>
-p=<-469,790,-214>, v=<-55,97,-77>, a=<8,-14,9>
-p=<-13,-179,356>, v=<31,18,-57>, a=<-3,-1,4>
-p=<899,-312,-2000>, v=<-27,-45,127>, a=<-2,6,-2>
-p=<1545,581,-727>, v=<-11,38,40>, a=<-7,-7,0>
-p=<-3167,1702,-43>, v=<147,49,4>, a=<2,-14,0>
-p=<-526,106,-3919>, v=<8,-17,38>, a=<2,1,17>
-p=<1381,-388,-404>, v=<-175,24,29>, a=<7,2,2>
-p=<-144,-1008,-374>, v=<5,163,59>, a=<2,-12,-4>
-p=<-4344,-3608,1616>, v=<45,54,-4>, a=<6,4,-3>
-p=<-1647,-787,4189>, v=<-10,-53,25>, a=<4,5,-10>
-p=<3965,7621,-1235>, v=<-35,-45,34>, a=<-4,-9,0>
-p=<-6925,-515,4255>, v=<27,33,-26>, a=<9,-1,-5>
-p=<-3361,-7715,-3737>, v=<76,48,122>, a=<1,9,-1>
-p=<4829,5857,-1217>, v=<-96,-107,15>, a=<-2,-3,1>
-p=<1877,-1469,-4079>, v=<-51,41,39>, a=<0,0,4>
-p=<4584,-3664,7121>, v=<124,69,-87>, a=<-17,3,-9>
-p=<4708,-719,1014>, v=<-8,54,-82>, a=<-9,-2,3>
-p=<-4530,3249,1665>, v=<-46,22,73>, a=<12,-8,-8>
-p=<361,-798,851>, v=<-116,55,25>, a=<10,-1,-8>
-p=<-2177,1209,-355>, v=<82,-66,16>, a=<4,0,0>
-p=<784,-573,1544>, v=<-54,52,-23>, a=<1,-2,-7>
-p=<1639,-879,-436>, v=<-73,-121,68>, a=<-2,18,-5>
-p=<1297,1317,-166>, v=<-54,-15,-4>, a=<-2,-6,1>
-p=<3466,1938,-2011>, v=<-70,-78,13>, a=<-13,-3,10>
-p=<-2096,1173,-1561>, v=<11,-83,121>, a=<11,2,-4>
-p=<-548,2163,1724>, v=<-75,-119,-109>, a=<11,0,1>
-p=<469,-2427,1067>, v=<11,3,-63>, a=<-4,14,0>
-p=<919,57,3083>, v=<-33,-78,-118>, a=<-2,8,-6>
-p=<947,-909,986>, v=<-77,0,-36>, a=<1,10,-6>
-p=<609,-857,-925>, v=<-79,73,20>, a=<5,-1,7>
-p=<-4448,-1323,-14360>, v=<54,34,149>, a=<3,0,11>
-p=<1636,4332,-3557>, v=<78,-71,-68>, a=<-6,-2,8>
-p=<-2420,-12321,6739>, v=<2,56,88>, a=<3,13,-13>
-p=<1636,6477,-944>, v=<-42,34,-35>, a=<0,-10,3>
-p=<8812,2148,-5273>, v=<-26,45,96>, a=<-10,-5,2>
-p=<-587,-3195,-14945>, v=<-85,22,84>, a=<5,3,15>
-p=<6394,-3429,3346>, v=<36,88,15>, a=<-10,0,-5>
-p=<-1958,2401,204>, v=<102,-119,-34>, a=<5,-7,3>
-p=<-1090,266,1569>, v=<55,-19,-109>, a=<3,0,0>
-p=<2574,-921,907>, v=<-139,58,-86>, a=<-6,1,3>
-p=<-2718,-298,501>, v=<59,6,-57>, a=<18,2,3>
-p=<-219,-1950,998>, v=<23,94,-40>, a=<-1,6,-4>
-p=<3407,-809,1474>, v=<-116,35,-89>, a=<-17,3,-2>
-p=<-541,-1670,-661>, v=<-14,29,41>, a=<7,12,1>
-p=<-485,451,1803>, v=<-18,-25,-75>, a=<7,-1,-7>
-p=<796,1109,1586>, v=<3,-132,-82>, a=<-8,7,-4>
-p=<5,-438,2104>, v=<22,76,-59>, a=<-3,-6,-12>
-p=<2770,724,137>, v=<-138,8,74>, a=<-8,-8,-11>
-p=<1335,-935,1586>, v=<-133,59,-52>, a=<5,1,-8>
-p=<-600,-494,17>, v=<0,26,-10>, a=<4,0,1>
-p=<-73,1376,-1547>, v=<-13,42,37>, a=<2,-14,6>
-p=<-2198,1750,-1088>, v=<85,-124,10>, a=<5,2,6>
-p=<-955,2741,1118>, v=<87,-214,-96>, a=<0,-6,-1>
-p=<79,398,260>, v=<-1,11,0>, a=<-1,-8,-4>
-p=<-394,112,-873>, v=<90,55,13>, a=<-9,-11,11>
-p=<750,-251,-1390>, v=<-2,-32,72>, a=<-11,9,9>
-p=<-933,-625,-1511>, v=<25,68,77>, a=<10,-2,10>
-p=<-812,673,-1159>, v=<38,-38,153>, a=<6,-4,-8>
-p=<-2490,1276,508>, v=<17,-16,112>, a=<5,-2,-9>
-p=<730,-1902,-4252>, v=<18,-62,21>, a=<-3,9,9>
-p=<-1678,6904,3168>, v=<17,-72,-41>, a=<3,-12,-5>
-p=<-40,-432,-3034>, v=<-56,132,50>, a=<4,-8,4>
-p=<2980,-2943,13263>, v=<-88,-2,-129>, a=<0,5,-15>
-p=<8216,3432,-5165>, v=<-67,-32,-42>, a=<-10,-4,11>
-p=<-2188,11252,-4927>, v=<64,-87,-49>, a=<0,-14,11>
-p=<-2513,-3249,3089>, v=<176,-8,-100>, a=<-6,7,0>
-p=<-5055,223,-4289>, v=<2,24,-22>, a=<10,-2,10>
-p=<-3722,1370,-2274>, v=<7,35,-7>, a=<7,-5,5>
-p=<9201,8581,1004>, v=<-55,-80,114>, a=<-9,-7,-7>
-p=<-315,469,-6640>, v=<-51,-52,-30>, a=<3,2,10>
-p=<5886,-19772,1433>, v=<-70,127,63>, a=<-4,19,-5>
-p=<4716,7333,-7264>, v=<120,12,26>, a=<-12,-10,8>
-p=<2571,4213,-7108>, v=<75,-108,42>, a=<-7,0,7>
-p=<2688,7060,-946>, v=<12,39,-36>, a=<-4,-11,3>
-p=<3195,-4523,-5548>, v=<-41,116,-38>, a=<-2,0,9>
-p=<16182,20203,8375>, v=<-134,-78,-175>, a=<-14,-22,-2>
-p=<-8583,4213,3851>, v=<41,-28,-99>, a=<9,-4,0>
-p=<-29,-291,-717>, v=<-1,26,133>, a=<1,0,-11>
-p=<-1487,-747,-663>, v=<140,90,44>, a=<-2,-4,2>
-p=<-77,-1047,129>, v=<29,63,-48>, a=<-3,4,6>
-p=<1,627,-9>, v=<-62,-5,-4>, a=<10,-7,1>
-p=<-689,225,1479>, v=<28,-4,-89>, a=<5,-2,-5>
-p=<3651,9977,-1851>, v=<-74,-16,28>, a=<-1,-12,1>
-p=<-2004,-10303,2127>, v=<-9,4,-54>, a=<3,13,0>
-p=<1389,4088,-3060>, v=<104,15,-1>, a=<-7,-6,4>
-p=<11256,-2971,-2007>, v=<-129,36,52>, a=<-8,2,0>
-p=<6147,-787,12696>, v=<-98,60,-145>, a=<-3,-2,-9>
-p=<8994,6467,10551>, v=<-51,-186,110>, a=<-9,1,-19>
-p=<2832,3035,2322>, v=<107,62,41>, a=<-9,-7,-5>
-p=<-11559,7286,-5244>, v=<116,-47,-45>, a=<9,-7,9>
-p=<5991,-8704,8679>, v=<-94,-17,-2>, a=<-3,12,-11>
-p=<4718,-4023,8441>, v=<-136,19,-128>, a=<-1,7,-9>
-p=<4625,-861,-1262>, v=<-69,77,73>, a=<-5,-3,-2>
-p=<589,3578,-416>, v=<58,-10,64>, a=<-7,-12,-4>
-p=<1141,-2678,1217>, v=<-50,34,29>, a=<0,7,-7>
-p=<3211,1600,2988>, v=<-44,4,-60>, a=<-8,-6,-6>
-p=<-2056,-33,-1727>, v=<5,51,13>, a=<7,-4,5>
-p=<-3476,6358,-3757>, v=<96,49,73>, a=<1,-16,3>
-p=<2476,-4275,-99>, v=<64,40,-29>, a=<-9,6,2>
-p=<9885,2111,1265>, v=<-47,-86,-41>, a=<-17,1,0>
-p=<-10544,1150,955>, v=<132,121,-31>, a=<13,-10,0>
-p=<-717,-338,-6640>, v=<-41,57,54>, a=<4,-3,10>
-p=<-1306,3785,-502>, v=<-22,-124,-32>, a=<4,0,3>
-p=<-3941,-2105,-5090>, v=<79,-62,-12>, a=<3,8,11>
-p=<-3352,4405,-4067>, v=<108,-32,67>, a=<0,-7,4>
-p=<403,-1972,-1042>, v=<-28,84,-34>, a=<1,-1,5>
-p=<2153,884,-496>, v=<11,69,-68>, a=<-6,-7,6>
-p=<-264,-3603,2640>, v=<26,104,-76>, a=<-1,0,0>
-p=<-754,4587,1100>, v=<22,-58,4>, a=<0,-4,-2>
-p=<4321,-3078,-6425>, v=<93,125,-33>, a=<-12,-2,12>
-p=<-1419,387,-8280>, v=<41,26,92>, a=<0,-2,8>
-p=<681,4902,3760>, v=<-55,-49,0>, a=<2,-5,-6>
-p=<1451,-7348,-10450>, v=<-59,-5,118>, a=<1,12,10>
-p=<4286,2802,-7265>, v=<-122,83,-45>, a=<0,-9,14>
-p=<1337,5510,-5238>, v=<7,-83,58>, a=<-3,-6,7>
-p=<6297,1232,8216>, v=<-89,-25,-184>, a=<-7,-1,-5>
-p=<787,3206,2183>, v=<42,-63,4>, a=<-5,-4,-6>
-p=<-941,3017,-3568>, v=<8,-112,147>, a=<2,0,-1>
-p=<4027,3557,-679>, v=<-134,-104,68>, a=<-1,-2,-3>
-p=<4864,-1438,-2137>, v=<31,67,-46>, a=<-15,-1,9>
-p=<325,164,754>, v=<-74,3,-4>, a=<7,-4,-13>
-p=<610,524,-201>, v=<-75,-22,20>, a=<2,-6,0>
-p=<-215,224,699>, v=<-9,-36,-15>, a=<5,2,-10>
-p=<-495,1334,-1331>, v=<30,-136,133>, a=<3,0,0>
-p=<-390,-6,-861>, v=<25,9,130>, a=<2,-2,-8>
-p=<-595,729,-116>, v=<-4,-59,6>, a=<11,-3,1>
-p=<1360,804,-56>, v=<-139,-72,0>, a=<0,-2,1>
-p=<90,359,-591>, v=<-78,11,92>, a=<12,-9,-6>
-p=<-620,-1566,-231>, v=<48,99,23>, a=<2,10,0>
-p=<-1355,1069,-1321>, v=<94,-126,110>, a=<7,3,4>
-p=<699,-1699,-4607>, v=<5,86,93>, a=<-3,-1,9>
-p=<2056,3131,-329>, v=<-90,8,-141>, a=<0,-12,13>
-p=<-3602,1291,407>, v=<36,-44,-53>, a=<10,-1,3>
-p=<-267,2717,-1870>, v=<83,-142,82>, a=<-6,2,0>
-p=<-704,1636,3903>, v=<6,-47,-109>, a=<2,-2,-5>
-p=<-1946,1429,1626>, v=<0,22,-70>, a=<7,-7,0>
-p=<156,4594,673>, v=<33,8,-18>, a=<-2,-7,0>
-p=<3116,1597,3966>, v=<-28,-6,-31>, a=<-3,-2,-4>
-p=<10812,5334,1672>, v=<-27,-126,-64>, a=<-14,-1,1>
-p=<1414,524,2190>, v=<75,23,131>, a=<-6,-2,-10>
-p=<5336,9663,-6357>, v=<26,-91,58>, a=<-9,-9,6>
-p=<4300,-438,-12758>, v=<73,-46,22>, a=<-10,3,17>
-p=<3967,-3546,-918>, v=<-70,0,44>, a=<-2,5,-1>
-p=<6224,10440,3670>, v=<-112,78,-23>, a=<-3,-19,-4>
-p=<7334,2707,1783>, v=<-66,-55,-48>, a=<-7,-1,0>
-p=<1007,10514,-3175>, v=<-47,-19,86>, a=<1,-14,0>
-p=<-2289,2879,3134>, v=<87,43,-47>, a=<-1,-8,-3>
-p=<1279,9407,-6930>, v=<157,-194,53>, a=<-12,-6,10>
-p=<943,-8481,-1938>, v=<-80,35,-4>, a=<3,14,4>
-p=<-7969,4127,-738>, v=<50,37,-58>, a=<12,-10,5>
-p=<2019,1112,5886>, v=<-99,-85,-7>, a=<2,3,-13>
-p=<4861,6767,-4438>, v=<-137,5,34>, a=<-2,-16,8>
-p=<6427,909,3218>, v=<-56,72,10>, a=<-11,-7,-8>
-p=<1758,2446,-4960>, v=<45,-146,112>, a=<-7,4,4>
-p=<4165,-1469,2000>, v=<-128,124,-128>, a=<-1,-5,4>
-p=<1113,-1854,63>, v=<-47,6,-29>, a=<-3,13,3>
-p=<-1495,-30,2031>, v=<65,28,-84>, a=<3,-3,-5>
-p=<-1055,-998,1583>, v=<-39,148,-56>, a=<12,-10,-5>
-p=<-2071,-654,2647>, v=<135,-1,-216>, a=<-1,5,6>
-p=<769,10,2767>, v=<-51,0,-11>, a=<0,0,-19>
-p=<-1047,3450,943>, v=<20,-45,-16>, a=<5,-20,-5>
-p=<-679,-814,1511>, v=<31,-59,-94>, a=<1,13,0>
-p=<17,-1334,-273>, v=<-4,-18,-42>, a=<0,12,7>
-p=<521,802,-1201>, v=<7,27,84>, a=<-5,-9,-1>
-p=<1041,-686,-737>, v=<-68,69,106>, a=<0,-3,-7>
-p=<5465,-618,2857>, v=<-66,17,-74>, a=<-4,0,0>
-p=<4344,-1207,-15402>, v=<-134,91,75>, a=<1,-3,17>
-p=<-1375,-181,-4002>, v=<-3,-14,87>, a=<2,1,1>
-p=<15288,-9263,3256>, v=<-71,69,-26>, a=<-17,9,-3>
-p=<-6733,-6755,2914>, v=<21,120,22>, a=<8,3,-5>
-p=<88,1567,8025>, v=<17,18,-54>, a=<-1,-3,-8>
-p=<2026,1168,-2577>, v=<-34,-30,30>, a=<-1,0,2>
-p=<-104,1351,-1305>, v=<59,-36,-21>, a=<-4,-1,5>
-p=<2137,1108,-738>, v=<-52,-55,28>, a=<-2,1,0>
-p=<3730,-2807,5013>, v=<29,90,-73>, a=<-12,1,-8>
-p=<2299,-971,1341>, v=<-86,78,-49>, a=<0,-3,0>
-p=<-939,-4363,2031>, v=<35,140,-73>, a=<0,1,0>
-p=<265,2329,5083>, v=<-66,-41,-95>, a=<4,-3,-6>
-p=<-1009,-261,8765>, v=<52,-21,-38>, a=<-1,2,-19>
-p=<2393,1125,2717>, v=<-84,-56,-83>, a=<0,1,-1>
-p=<1035,1125,-3989>, v=<8,2,84>, a=<-3,-3,4>
-p=<-85,4961,7253>, v=<-39,-164,-71>, a=<3,-1,-13>
-p=<6201,-3075,7757>, v=<-191,123,-60>, a=<-2,-1,-15>
-p=<300,-160,-566>, v=<-5,-6,-76>, a=<-2,2,15>
-p=<2281,-1672,-706>, v=<-124,42,84>, a=<-5,10,-5>
-p=<-2836,323,-251>, v=<159,-3,44>, a=<6,-3,-4>
-p=<2169,-573,-706>, v=<-71,31,54>, a=<-11,1,-1>
-p=<1511,-1259,1527>, v=<-9,95,-38>, a=<-13,-1,-10>
-p=<-330,-937,-2071>, v=<-50,-18,84>, a=<10,11,8>
-p=<13,386,1457>, v=<-7,15,-108>, a=<1,-6,0>
-p=<-953,1163,1331>, v=<-28,-33,-144>, a=<13,-7,6>
-p=<-799,-1490,246>, v=<126,149,1>, a=<-9,-6,-3>
-p=<90,-930,1177>, v=<10,64,-43>, a=<-2,0,-6>
-p=<-1763,-994,1921>, v=<95,80,12>, a=<0,-3,-11>
-p=<-1155,-709,-834>, v=<73,-25,67>, a=<-1,6,-2>
-p=<1429,-405,1959>, v=<-33,79,-90>, a=<-4,-6,-1>
-p=<4418,1330,2934>, v=<-78,-60,33>, a=<-4,1,-8>
-p=<-3239,4306,-1902>, v=<57,52,93>, a=<3,-12,-2>
-p=<-2929,-5149,4949>, v=<-65,-11,-160>, a=<10,11,0>
-p=<-511,-778,-6149>, v=<-47,40,22>, a=<4,-1,11>
-p=<5162,4306,-2677>, v=<-38,-188,38>, a=<-8,3,3>
-p=<-1631,-8674,2819>, v=<130,172,-108>, a=<-5,12,0>
-p=<-1761,3091,-1250>, v=<0,-105,8>, a=<5,-1,3>
-p=<-1631,-42,-7022>, v=<-32,110,122>, a=<7,-8,11>
-p=<150,-5333,3664>, v=<-33,3,8>, a=<2,15,-11>
-p=<6923,-3578,-418>, v=<-118,165,57>, a=<-11,-2,-3>
-p=<8873,5795,-5189>, v=<-166,-128,119>, a=<-13,-7,6>
-p=<-2125,2103,-2628>, v=<41,-40,115>, a=<3,-3,-1>
-p=<-2543,858,5229>, v=<21,-7,-67>, a=<3,-1,-5>
-p=<-4668,3476,-3917>, v=<-74,-84,132>, a=<12,-1,-1>
-p=<-8357,6332,-7793>, v=<17,-63,36>, a=<13,-7,11>
-p=<3125,665,3538>, v=<-65,-76,-2>, a=<-1,3,-5>
-p=<-6384,-14838,5203>, v=<59,58,-104>, a=<6,18,-2>
-p=<-908,3810,-1753>, v=<-51,67,8>, a=<4,-9,2>
-p=<-1722,-6180,-6082>, v=<-48,-43,49>, a=<5,11,6>
-p=<-3054,1368,-4565>, v=<83,-38,-49>, a=<0,0,9>
-p=<-2373,1080,365>, v=<-31,-24,53>, a=<12,-2,-6>
-p=<-4430,2169,-614>, v=<51,53,86>, a=<13,-13,-5>
-p=<-924,-3134,591>, v=<79,-14,-49>, a=<-3,18,2>
-p=<-1874,514,-3988>, v=<-1,-26,32>, a=<10,0,18>
-p=<-145,-1747,4486>, v=<8,43,-114>, a=<0,5,-12>
-p=<653,-2032,2320>, v=<-34,108,-70>, a=<0,0,-5>
-p=<881,2243,1294>, v=<-6,-37,-26>, a=<-4,-8,-4>
-p=<-2425,-1101,-1480>, v=<88,-11,70>, a=<4,7,1>
-p=<-2919,1578,1256>, v=<194,-32,46>, a=<-4,-5,-11>
-p=<-2634,856,2320>, v=<-1,-24,-50>, a=<14,-2,-7>
-p=<144,-1759,161>, v=<26,100,-4>, a=<-6,7,-2>
-p=<1464,-673,437>, v=<-32,55,-27>, a=<-14,0,-2>
-p=<72,1133,65>, v=<-20,-37,4>, a=<2,-9,-2>
-p=<-444,-943,-577>, v=<75,19,-53>, a=<-6,9,15>
-p=<-4278,-11885,3366>, v=<-11,163,56>, a=<7,9,-8>
-p=<3984,5233,8190>, v=<0,76,-4>, a=<-6,-12,-12>
-p=<5460,-4091,8892>, v=<-41,39,-5>, a=<-6,4,-13>
-p=<150,-2147,1692>, v=<-60,-52,-27>, a=<3,6,-1>
-p=<-2874,1183,-576>, v=<61,133,-75>, a=<1,-9,5>
-p=<-1956,-1103,1656>, v=<128,104,11>, a=<-4,-4,-3>
-p=<186,-3893,4752>, v=<50,15,-38>, a=<-3,5,-5>
-p=<-591,7845,4320>, v=<-13,-93,-43>, a=<2,-10,-6>
-p=<1889,-5082,-1012>, v=<-29,148,-63>, a=<-2,1,6>
-p=<1858,3040,-2283>, v=<100,-34,74>, a=<-10,-4,0>
-p=<-3691,1862,-299>, v=<103,132,-102>, a=<1,-12,7>
-p=<-6853,2141,1592>, v=<109,-53,13>, a=<7,-1,-4>
-p=<6663,1769,9497>, v=<-55,23,-146>, a=<-10,-5,-10>
-p=<-5309,-4880,2885>, v=<105,126,4>, a=<3,1,-5>
-p=<3021,-8416,6149>, v=<-70,125,-22>, a=<-1,7,-9>
-p=<3949,1547,1981>, v=<-5,21,84>, a=<-11,-6,-12>
-p=<5093,156,1487>, v=<-76,-47,22>, a=<-9,3,-6>
-p=<6094,2899,-5455>, v=<-74,-112,127>, a=<-12,0,6>
-p=<6523,-4615,395>, v=<-131,96,-17>, a=<-9,6,0>
-p=<-2486,1820,-2023>, v=<94,-84,130>, a=<0,1,-4>
-p=<-4028,1467,2219>, v=<128,-43,-17>, a=<10,-4,-11>
-p=<-1472,531,-5062>, v=<-14,9,150>, a=<10,-4,14>
-p=<-608,-954,-1948>, v=<-43,6,110>, a=<8,5,0>
-p=<-3921,1247,5039>, v=<-33,-106,51>, a=<9,4,-12>
-p=<-9267,1214,-175>, v=<61,14,-80>, a=<13,-3,5>
-p=<2646,4481,-6313>, v=<23,-34,-64>, a=<-6,-6,15>
-p=<996,-2548,-3145>, v=<-63,-93,61>, a=<2,10,2>
-p=<-786,-6277,-373>, v=<-26,-14,-40>, a=<3,12,3>
-p=<-2898,-8323,-2122>, v=<157,150,47>, a=<-4,6,1>
-p=<4098,9167,-2617>, v=<-89,-57,113>, a=<-2,-13,-2>
-p=<-225,1808,3752>, v=<42,13,-63>, a=<-2,-4,-3>
-p=<-4219,1852,5263>, v=<73,-68,-70>, a=<6,0,-9>
-p=<-4597,-119,6667>, v=<101,33,-80>, a=<5,-2,-12>
-p=<4637,-3521,2887>, v=<-157,-93,-108>, a=<-1,16,0>
-p=<1505,-4304,538>, v=<-41,62,7>, a=<-1,7,-2>
-p=<-4737,3953,180>, v=<127,-44,-8>, a=<9,-13,0>
-p=<-2154,-1066,-4440>, v=<81,-3,179>, a=<2,5,3>
-p=<2025,-457,4380>, v=<-8,-109,-87>, a=<-8,12,-11>
-p=<870,1916,1125>, v=<-118,-2,-31>, a=<7,-8,-2>
-p=<-33,1076,4338>, v=<-9,-94,-195>, a=<1,4,-1>
-p=<3726,1664,-1143>, v=<-122,43,-22>, a=<-5,-11,7>
-p=<-3855,-142,3645>, v=<85,-14,-19>, a=<9,2,-14>
-p=<-3330,-268,-975>, v=<137,-96,36>, a=<2,10,1>
-p=<3096,4079,2280>, v=<-4,-105,-20>, a=<-13,-8,-8>
-p=<738,943,775>, v=<-36,0,-63>, a=<-7,-16,-2>
-p=<-437,-727,-595>, v=<54,123,63>, a=<-2,-8,0>
-p=<633,-157,-1665>, v=<-86,-33,170>, a=<4,10,0>
-p=<-312,-262,-110>, v=<-8,49,-13>, a=<7,-3,5>
-p=<-897,1478,-1095>, v=<67,-92,113>, a=<4,-9,0>
-p=<548,-502,880>, v=<-61,73,-101>, a=<1,-3,3>
-p=<-957,-77,-260>, v=<18,3,-20>, a=<14,2,9>
-p=<23,-1767,370>, v=<-25,128,-50>, a=<4,10,3>
-p=<9335,-1502,-1376>, v=<-94,46,109>, a=<-12,0,-4>
-p=<-89,-8910,-1472>, v=<19,162,13>, a=<-1,7,2>
-p=<1431,402,7824>, v=<-45,-30,-30>, a=<0,1,-13>
-p=<3607,-1854,-3216>, v=<-80,90,-15>, a=<-2,-2,7>
-p=<-1431,-1856,4713>, v=<-152,52,-127>, a=<10,0,0>
-p=<1418,-8072,-4870>, v=<56,30,132>, a=<-5,10,0>
-p=<-5020,-6592,-2539>, v=<21,-67,12>, a=<6,13,3>
-p=<1418,6284,-4574>, v=<-20,-16,-85>, a=<-1,-8,11>
-p=<-1357,3879,-11493>, v=<36,30,-31>, a=<0,-7,18>
-p=<4779,-2196,-6490>, v=<34,-13,-96>, a=<-9,4,15>
-p=<405,8280,-820>, v=<63,-82,135>, a=<-4,-8,-6>
-p=<-4347,2178,890>, v=<84,-42,-153>, a=<2,-1,7>
-p=<7425,936,6740>, v=<-21,11,-1>, a=<-10,-2,-10>
-p=<2030,-6060,5989>, v=<-94,68,9>, a=<2,5,-9>
-p=<-3113,1562,-3557>, v=<121,-62,20>, a=<-2,1,4>
-p=<15387,8111,-3927>, v=<-132,-11,-27>, a=<-15,-11,7>
-p=<1105,-12905,-1522>, v=<-31,139,-16>, a=<0,11,3>
-p=<-13843,4300,957>, v=<50,-22,12>, a=<17,-5,-2>
-p=<1364,970,-338>, v=<-38,-46,-67>, a=<0,1,4>
-p=<328,-9020,11539>, v=<-67,-23,-160>, a=<3,14,-8>
-p=<1441,1858,-3933>, v=<-114,-33,72>, a=<4,-1,2>
-p=<-12401,-6674,-9819>, v=<67,19,69>, a=<15,9,11>
-p=<5095,6196,567>, v=<25,-24,-16>, a=<-9,-8,0>
-p=<-4751,-4964,10125>, v=<21,27,-152>, a=<6,6,-7>
-p=<-1546,-4772,-2286>, v=<41,141,-34>, a=<1,2,8>
-p=<6784,-1538,4434>, v=<-126,-76,-129>, a=<-8,9,-2>
-p=<-1896,4454,-2356>, v=<68,-58,70>, a=<0,-7,1>
-p=<4166,296,2040>, v=<-47,-11,0>, a=<-7,0,-5>
-p=<-7306,-125,-3525>, v=<148,-33,50>, a=<11,3,7>
-p=<-4356,-8500,-3550>, v=<69,68,168>, a=<8,21,-2>
-p=<1044,-225,-1950>, v=<-95,23,39>, a=<4,-1,3>
-p=<-617,666,-1168>, v=<-14,-32,45>, a=<4,0,1>
-p=<5515,5664,-1714>, v=<-141,-83,71>, a=<-11,-17,1>
-p=<1735,-1329,-1084>, v=<50,96,52>, a=<-12,-3,0>
-p=<1101,-5305,-338>, v=<-82,-26,-62>, a=<3,14,5>
-p=<6843,1974,-4137>, v=<5,-37,-51>, a=<-16,-2,13>
-p=<-206,-91,-1046>, v=<110,-61,68>, a=<-15,12,4>
-p=<520,877,175>, v=<8,-47,-49>, a=<-9,-5,5>
-p=<520,-795,65>, v=<-112,-9,-15>, a=<11,14,1>
-p=<597,-608,-1046>, v=<-101,10,86>, a=<8,8,1>
-p=<-1702,-190,230>, v=<138,2,54>, a=<3,3,-13>
-p=<465,-1136,-1321>, v=<-29,58,87>, a=<-2,8,5>
-p=<-1152,-487,-331>, v=<94,71,39>, a=<2,-4,-2>
-p=<-1733,-1423,-1483>, v=<-61,121,34>, a=<10,-5,2>
-p=<-3583,-148,-2933>, v=<78,-8,27>, a=<5,1,7>
-p=<1292,-548,1717>, v=<-39,125,-16>, a=<-1,-8,-4>
-p=<-333,2677,842>, v=<91,-4,-33>, a=<-6,-8,0>
-p=<1542,4377,1792>, v=<-114,32,20>, a=<4,-16,-7>
-p=<2192,402,-2183>, v=<16,22,36>, a=<-8,-3,4>
-p=<1792,102,3467>, v=<32,-57,-125>, a=<-8,4,-1>
-p=<17,2502,1642>, v=<25,29,-78>, a=<-2,-10,1>
-p=<158,-2993,164>, v=<-42,8,-3>, a=<2,4,0>
-p=<4820,-3011,2756>, v=<-5,-10,36>, a=<-7,5,-6>
-p=<-3151,-4516,-1216>, v=<118,172,1>, a=<3,4,5>
-p=<-1324,1385,-1867>, v=<-46,1,54>, a=<10,-6,3>
-p=<-4012,1028,-2329>, v=<93,40,54>, a=<9,-8,5>
-p=<524,-3697,1829>, v=<31,56,32>, a=<-5,11,-11>
-p=<-7847,-3949,10230>, v=<-49,45,-93>, a=<13,3,-9>
-p=<-969,-3322,-12874>, v=<-152,-69,203>, a=<9,8,7>
-p=<-4579,2131,-1113>, v=<-57,41,69>, a=<9,-5,-2>
-p=<-1140,-6286,-9758>, v=<67,126,121>, a=<-2,2,7>
-p=<399,-8775,5271>, v=<7,16,-99>, a=<-1,11,-2>
-p=<-1390,-740,258>, v=<152,-4,-23>, a=<-6,9,1>
-p=<2276,-2742,11>, v=<-172,213,59>, a=<0,0,-8>
-p=<1522,-714,63>, v=<-107,-62,-1>, a=<-1,17,0>
-p=<-948,1236,492>, v=<-36,-86,8>, a=<16,-1,-6>
-p=<-350,-1195,895>, v=<-68,24,5>, a=<14,10,-10>
-p=<-662,1392,-106>, v=<61,-14,-30>, a=<-1,-13,6>
-p=<2744,547,1090>, v=<-82,-82,-52>, a=<-18,6,-4>
-p=<-714,508,-886>, v=<44,-79,44>, a=<2,6,4>
-p=<91,79,957>, v=<-26,53,12>, a=<3,-10,-17>
-p=<-96,1014,-1573>, v=<3,-80,140>, a=<1,-2,0>
-p=<-393,827,55>, v=<48,-63,-8>, a=<-2,-2,0>
-p=<872,-559,583>, v=<-49,57,-8>, a=<-5,-1,-8>
-p=<-30,673,231>, v=<-57,-61,-60>, a=<10,0,6>
-p=<-613,-702,1793>, v=<2,88,-70>, a=<9,-4,-16>
-p=<663,596,-253>, v=<-48,-90,26>, a=<-2,6,-1>
-p=<-394,705,481>, v=<4,30,-34>, a=<3,-10,0>
-p=<61,-1297,-1430>, v=<84,38,50>, a=<-12,8,7>
-p=<-233,1909,-163>, v=<15,-131,-33>, a=<0,0,6>
-p=<-870,348,2105>, v=<83,-42,-45>, a=<-3,3,-14>
-p=<1664,285,1755>, v=<-113,45,-35>, a=<-1,-8,-12>
-p=<-1269,1545,-415>, v=<89,-60,-30>, a=<0,-6,8>
-p=<-534,-261,1293>, v=<-1,-21,-92>, a=<5,6,0>
-p=<-135,-121,-2557>, v=<-7,44,93>, a=<2,-4,12>
-p=<1223,-415,292>, v=<-74,35,-28>, a=<-2,0,1>
-p=<824,-1430,922>, v=<-68,115,-73>, a=<1,-1,1>
-p=<-640,2303,-1594>, v=<-90,328,-227>, a=<5,-25,15>
-p=<-1065,354,-3254>, v=<-152,47,-462>, a=<10,-3,31>
-p=<2462,751,1569>, v=<346,107,226>, a=<-22,-7,-14>
-p=<-106,-2052,-2044>, v=<-16,-295,-290>, a=<4,15,15>
-p=<-2837,147,1838>, v=<-406,22,262>, a=<24,-6,-22>
-p=<2592,-1392,-608>, v=<374,-198,-87>, a=<-23,12,7>
-p=<1813,1582,-1758>, v=<259,229,-248>, a=<-18,-17,14>
-p=<-1899,1420,658>, v=<-267,200,92>, a=<16,-16,-11>
-p=<1208,-1527,-1923>, v=<172,-215,-275>, a=<-16,10,16>
-p=<2156,-2278,169>, v=<307,-326,27>, a=<-21,22,-1>
-p=<1056,-798,-2596>, v=<147,-116,-372>, a=<-9,7,28>
-p=<-1199,620,2328>, v=<-171,88,326>, a=<14,1,-26>
-p=<-2396,-657,2316>, v=<-338,-95,329>, a=<24,6,-22>
-p=<-824,587,-2484>, v=<-121,82,-353>, a=<8,-2,28>
-p=<1659,739,-2320>, v=<235,105,-333>, a=<-18,-8,23>
-p=<-2673,-573,489>, v=<-379,-75,67>, a=<25,5,0>
-p=<-1570,-2486,60>, v=<-229,-357,7>, a=<14,29,-2>
-p=<-2626,179,257>, v=<-375,24,38>, a=<23,-1,-4>
-p=<849,-331,-2900>, v=<120,-49,-417>, a=<-8,0,31>
-p=<645,1229,2673>, v=<89,177,376>, a=<-6,-14,-28>
-p=<-1480,-2064,-361>, v=<-211,-295,-55>, a=<14,21,5>
-p=<-2665,43,1552>, v=<-381,6,223>, a=<30,3,-17>
-p=<-1459,51,2649>, v=<-202,7,371>, a=<13,-3,-21>
-p=<-1482,-2729,-452>, v=<-211,-391,-64>, a=<14,24,4>
-p=<1608,2630,144>, v=<228,371,14>, a=<-16,-26,4>
-p=<1165,499,2876>, v=<163,71,411>, a=<-12,-9,-30>
-p=<2642,-695,-895>, v=<383,-101,-127>, a=<-23,1,4>
-p=<-2614,-864,-1341>, v=<-370,-122,-187>, a=<26,8,10>
-p=<-1044,729,-2321>, v=<-151,103,-328>, a=<5,-7,22>
-p=<-1018,-916,-2755>, v=<-145,-129,-388>, a=<5,8,23>
-p=<-3177,847,960>, v=<-456,120,143>, a=<30,-8,-2>
-p=<1358,1463,-2332>, v=<194,215,-332>, a=<-15,-12,23>
-p=<-1230,-3445,-695>, v=<-178,-496,-100>, a=<9,34,8>
-p=<284,229,2992>, v=<41,34,427>, a=<-4,-2,-30>
-p=<-1398,-1284,-2531>, v=<-195,-185,-358>, a=<12,18,30>
-p=<280,1690,-1795>, v=<41,241,-252>, a=<-4,-16,19>
-p=<-1556,637,2590>, v=<-215,94,374>, a=<15,-3,-25>
-p=<1970,-1629,2345>, v=<282,-237,335>, a=<-14,13,-29>
-p=<624,-2660,-1245>, v=<92,-377,-177>, a=<-6,27,12>
-p=<2472,-1297,-1889>, v=<352,-187,-272>, a=<-21,11,21>
-p=<1475,-2024,-2192>, v=<216,-292,-316>, a=<-19,18,22>
-p=<2316,-1953,720>, v=<327,-284,103>, a=<-25,21,-5>
-p=<-1493,692,-3102>, v=<-213,100,-443>, a=<14,-7,27>
-p=<1825,1169,2010>, v=<263,164,287>, a=<-18,-10,-16>
-p=<132,-416,2718>, v=<18,-59,390>, a=<-2,7,-26>
-p=<-3328,-231,203>, v=<-477,-34,36>, a=<31,4,-4>
-p=<-1458,911,-2505>, v=<-208,128,-357>, a=<16,-9,26>
-p=<-232,2726,-1244>, v=<-34,389,-177>, a=<-3,-28,9>
-p=<-2076,-2126,878>, v=<-297,-304,128>, a=<21,23,-10>
-p=<3071,-1789,-978>, v=<444,-255,-139>, a=<-32,15,6>
-p=<470,1352,2371>, v=<69,192,338>, a=<-1,-14,-19>
-p=<-366,2757,334>, v=<-51,394,48>, a=<3,-23,-2>
-p=<142,3704,-779>, v=<23,528,-111>, a=<-4,-35,6>
-p=<-2560,678,-902>, v=<-365,96,-128>, a=<26,-4,10>
-p=<-799,-1439,1718>, v=<-115,-205,245>, a=<2,16,-16>
-p=<252,-205,2964>, v=<36,-31,420>, a=<-3,2,-29>
-p=<1111,-2850,-712>, v=<159,-409,-107>, a=<-10,28,8>
-p=<-460,2649,-1121>, v=<-67,382,-159>, a=<7,-32,15>
-p=<3050,-961,419>, v=<434,-142,58>, a=<-31,13,-4>
-p=<-690,583,3314>, v=<-98,86,474>, a=<8,-6,-34>
-p=<1533,1358,-2236>, v=<218,195,-319>, a=<-15,-12,23>
-p=<2116,1539,1334>, v=<296,223,196>, a=<-23,-12,-16>
-p=<-480,-2566,1780>, v=<-70,-372,250>, a=<5,19,-14>
-p=<-157,-2633,1171>, v=<-20,-380,163>, a=<0,30,-8>
-p=<-551,2588,-222>, v=<-81,366,-28>, a=<11,-23,-1>
-p=<-2411,917,589>, v=<-341,131,85>, a=<24,-8,-6>
-p=<-889,-2793,-844>, v=<-130,-400,-122>, a=<12,24,8>
-p=<1520,-2712,-490>, v=<219,-383,-68>, a=<-12,27,6>
-p=<-1591,-1155,1957>, v=<-228,-169,282>, a=<14,15,-18>
-p=<-2439,1395,-500>, v=<-347,199,-73>, a=<28,-12,5>
-p=<-1337,172,-2489>, v=<-187,23,-355>, a=<18,3,23>
-p=<316,-2188,1642>, v=<42,-313,230>, a=<-3,21,-17>
-p=<-165,1828,-2025>, v=<-19,258,-292>, a=<1,-16,18>
-p=<-1747,1095,1978>, v=<-244,154,284>, a=<18,-12,-25>
-p=<-2666,540,-1200>, v=<-379,80,-168>, a=<25,1,8>
-p=<1683,-834,-1770>, v=<240,-119,-252>, a=<-16,5,18>
-p=<-2653,450,-388>, v=<-382,65,-56>, a=<31,3,7>
-p=<2146,-2673,-252>, v=<307,-382,-35>, a=<-25,26,-1>
-p=<-496,-2646,1797>, v=<-73,-379,258>, a=<3,24,-16>
-p=<1530,360,-3009>, v=<217,48,-423>, a=<-15,-1,30>
-p=<-640,-802,-2660>, v=<-88,-114,-376>, a=<7,7,28>
-p=<-811,1540,-2260>, v=<-116,218,-322>, a=<1,-12,22>
-p=<-2796,1328,-710>, v=<-396,191,-100>, a=<27,-13,7>
-p=<129,472,2813>, v=<24,63,404>, a=<4,-2,-26>
-p=<-1420,-2470,-1046>, v=<-201,-355,-153>, a=<21,18,6>
-p=<2451,808,-944>, v=<347,115,-138>, a=<-24,-6,11>
-p=<-40,2324,-1830>, v=<-3,330,-266>, a=<-1,-17,18>
-p=<-82,3079,1442>, v=<-10,440,210>, a=<0,-26,-10>
-p=<2698,-1471,-783>, v=<379,-209,-112>, a=<-26,16,9>
-p=<2894,-1493,-387>, v=<412,-213,-57>, a=<-28,14,-3>
-p=<1417,2516,-12>, v=<198,358,2>, a=<-17,-23,-2>
-p=<747,2897,-1186>, v=<106,417,-165>, a=<-7,-33,15>
-p=<-4,2281,-2417>, v=<-4,328,-340>, a=<6,-23,31>
-p=<1737,-1461,2393>, v=<243,-202,335>, a=<-13,18,-30>
-p=<-902,1843,-2360>, v=<-130,264,-337>, a=<11,-15,25>
-p=<-1582,20,-1857>, v=<-227,-1,-263>, a=<14,-1,23>
-p=<-1830,629,-1964>, v=<-258,85,-278>, a=<10,-8,17>
-p=<-2085,1038,-866>, v=<-292,149,-127>, a=<21,-10,8>
-p=<-1186,2355,1683>, v=<-169,335,243>, a=<11,-23,-16>
-p=<-2259,248,-2209>, v=<-324,35,-314>, a=<22,0,21>
-p=<-1283,-2116,1398>, v=<-186,-301,202>, a=<7,19,-21>
-p=<-645,-3178,1278>, v=<-90,-449,181>, a=<6,26,-15>
-p=<-1736,-2087,-1254>, v=<-249,-297,-181>, a=<17,19,14>
-p=<183,-1786,-1791>, v=<26,-249,-259>, a=<-1,19,17>
-p=<2465,-1286,-188>, v=<355,-185,-26>, a=<-24,12,4>
-p=<234,-1280,-2961>, v=<29,-180,-419>, a=<-2,13,25>
-p=<1084,1772,-2323>, v=<151,254,-331>, a=<-10,-15,23>
-p=<-33,-757,2842>, v=<-7,-110,407>, a=<1,7,-27>
-p=<-62,223,-2854>, v=<-6,30,-407>, a=<4,-2,29>
-p=<-1939,-2234,-470>, v=<-276,-318,-65>, a=<18,23,6>
-p=<-1064,-2485,1011>, v=<-154,-357,141>, a=<10,28,-5>
-p=<-2793,-281,1074>, v=<-400,-36,156>, a=<25,2,-9>
-p=<-2153,1885,362>, v=<-301,274,50>, a=<19,-19,0>
-p=<-1097,2219,-1431>, v=<-157,314,-207>, a=<11,-22,12>
-p=<1795,-2653,694>, v=<256,-382,99>, a=<-18,29,-6>
-p=<-1706,2021,-841>, v=<-238,287,-120>, a=<17,-25,10>
-p=<-163,-1743,1795>, v=<-26,-252,258>, a=<1,17,-17>
-p=<1425,1729,977>, v=<202,243,138>, a=<-13,-17,-10>
-p=<648,2109,-994>, v=<90,303,-143>, a=<-3,-19,14>
-p=<-1738,468,1971>, v=<-249,65,278>, a=<18,0,-20>
-p=<1045,1218,2731>, v=<148,175,394>, a=<-8,-11,-27>
-p=<-540,1940,-2022>, v=<-77,280,-283>, a=<5,-21,17>
-p=<-2979,1549,-239>, v=<-430,222,-34>, a=<27,-21,0>
-p=<-2598,-2175,-183>, v=<-374,-314,-26>, a=<21,19,2>
-p=<-1391,2880,-1142>, v=<-195,410,-163>, a=<9,-28,12>
-p=<-1253,-1245,2513>, v=<-182,-173,362>, a=<12,13,-22>
-p=<771,75,2400>, v=<104,11,342>, a=<-7,4,-25>
-p=<468,988,-2854>, v=<67,143,-403>, a=<1,-13,25>
-p=<-1290,2001,1041>, v=<-180,286,148>, a=<12,-22,-8>
-p=<11,-1463,2584>, v=<-4,-215,375>, a=<0,13,-30>
-p=<1672,-2459,-1046>, v=<233,-348,-149>, a=<-21,24,15>
-p=<-1973,2358,-291>, v=<-279,338,-37>, a=<21,-23,1>
-p=<327,-2775,2079>, v=<49,-396,298>, a=<-4,32,-24>
-p=<-2260,400,-2962>, v=<-327,56,-422>, a=<22,-8,28>
-p=<-431,-282,3083>, v=<-61,-39,440>, a=<1,5,-24>
-p=<-2378,1821,-1219>, v=<-331,261,-174>, a=<14,-22,18>
-p=<187,2556,-1007>, v=<26,368,-146>, a=<-2,-24,10>
-p=<1417,-2451,289>, v=<199,-350,40>, a=<-19,25,-3>
-p=<-2105,292,2336>, v=<-295,42,329>, a=<22,-1,-23>
-p=<1397,2026,1405>, v=<200,289,200>, a=<-8,-19,-11>
-p=<2364,323,-382>, v=<341,49,-58>, a=<-21,-6,4>
-p=<-256,-3019,633>, v=<-36,-430,90>, a=<2,35,-5>
-p=<3025,-164,1078>, v=<429,-21,153>, a=<-29,1,-9>
-p=<2723,-2091,-29>, v=<388,-297,-3>, a=<-29,16,-2>
-p=<197,709,2512>, v=<30,108,362>, a=<-6,-5,-25>
-p=<-1843,874,1771>, v=<-261,131,253>, a=<17,-12,-17>
-p=<2707,-769,818>, v=<382,-107,112>, a=<-26,9,-4>
-p=<164,-239,3326>, v=<20,-36,474>, a=<-5,-2,-35>
-p=<-1484,-1867,1429>, v=<-211,-271,204>, a=<12,18,-16>
-p=<-1091,-1732,-2881>, v=<-154,-248,-411>, a=<8,15,29>
-p=<2142,1579,-1231>, v=<306,223,-177>, a=<-19,-18,6>
-p=<-2977,300,945>, v=<-425,44,133>, a=<30,3,-7>
-p=<1742,1775,-36>, v=<244,253,-7>, a=<-17,-17,5>
-p=<-1594,-2674,495>, v=<-230,-382,74>, a=<13,21,-1>
-p=<-1665,2225,-1776>, v=<-240,314,-250>, a=<17,-21,17>
-p=<142,2432,-376>, v=<18,351,-52>, a=<-2,-16,2>
-p=<-950,1633,1739>, v=<-139,229,248>, a=<9,-16,-17>
-p=<-2816,-480,-893>, v=<-404,-71,-131>, a=<31,6,8>
-p=<-455,932,2810>, v=<-69,135,403>, a=<3,-13,-27>
-p=<-3730,366,-606>, v=<-532,55,-86>, a=<37,-3,4>
-p=<252,-2577,-244>, v=<36,-367,-35>, a=<-6,26,3>
-p=<801,-2233,-1237>, v=<112,-315,-174>, a=<-8,27,13>
-p=<2442,-462,1909>, v=<350,-65,270>, a=<-22,5,-12>
-p=<-2324,1403,-1040>, v=<-332,203,-139>, a=<22,-13,12>
-p=<-2533,1295,-1541>, v=<-361,183,-221>, a=<25,-11,17>
-p=<-1512,-932,1936>, v=<-216,-134,276>, a=<18,9,-18>
-p=<2274,1583,-1494>, v=<319,227,-214>, a=<-21,-17,14>
-p=<-2158,-1734,-2643>, v=<-302,-242,-377>, a=<26,15,26>
-p=<687,954,2298>, v=<94,130,329>, a=<-12,-8,-28>
-p=<-2296,571,-1404>, v=<-334,81,-198>, a=<24,-5,13>
-p=<-431,2980,489>, v=<-55,424,64>, a=<4,-33,-4>
-p=<-2237,-2695,-582>, v=<-316,-385,-83>, a=<21,32,5>
-p=<-1619,759,-2656>, v=<-225,114,-380>, a=<19,-12,26>
-p=<945,447,3126>, v=<130,61,444>, a=<-12,-9,-31>
-p=<2412,-1076,1127>, v=<344,-158,158>, a=<-28,8,-7>
-p=<77,3074,-1824>, v=<14,438,-257>, a=<0,-30,21>
-p=<1306,1552,-1954>, v=<187,222,-281>, a=<-16,-13,18>
-p=<808,2843,1357>, v=<116,408,190>, a=<-9,-28,-10>
-p=<-105,-919,2898>, v=<-15,-129,418>, a=<1,13,-28>
-p=<994,1043,-1978>, v=<140,151,-279>, a=<-9,-9,20>
-p=<3077,70,482>, v=<442,10,68>, a=<-32,-1,-6>
-p=<-2772,1,-1392>, v=<-397,-2,-201>, a=<30,2,13>
-p=<1297,-2205,120>, v=<184,-321,17>, a=<-9,20,0>
-p=<-3102,-5,-1354>, v=<-444,3,-194>, a=<30,-1,12>
-p=<-1621,-2313,374>, v=<-235,-329,52>, a=<18,20,-3>
-p=<1902,-240,2425>, v=<266,-34,348>, a=<-19,1,-25>
-p=<-1803,-1696,-543>, v=<-257,-238,-74>, a=<21,18,4>
-p=<2854,-216,1608>, v=<404,-28,229>, a=<-30,6,-13>
-p=<1502,-1352,-2578>, v=<211,-192,-364>, a=<-15,19,16>
-p=<1559,-2311,-45>, v=<220,-328,-6>, a=<-17,22,5>
-p=<-402,2270,-796>, v=<-58,325,-110>, a=<7,-21,3>
-p=<-1370,-11,-2620>, v=<-196,3,-373>, a=<13,4,31>
-p=<-953,3009,1273>, v=<-138,429,181>, a=<8,-33,-15>
-p=<1782,-1172,-2352>, v=<255,-164,-337>, a=<-20,11,27>
-p=<2237,418,2402>, v=<322,59,341>, a=<-21,-8,-24>
-p=<2252,1657,1721>, v=<320,238,247>, a=<-20,-18,-15>
-p=<-1315,-2410,1308>, v=<-189,-340,189>, a=<10,26,-18>
-p=<48,244,-2745>, v=<2,35,-388>, a=<3,-3,29>
-p=<1665,2253,-689>, v=<237,317,-98>, a=<-17,-21,5>
-p=<1117,-1998,-2158>, v=<161,-285,-308>, a=<-9,21,22>
-p=<-1209,2307,-403>, v=<-172,324,-58>, a=<11,-24,2>
-p=<-2058,1700,1773>, v=<-291,243,254>, a=<20,-17,-18>
-p=<-995,-1138,-2951>, v=<-138,-163,-418>, a=<8,13,27>
-p=<785,-983,2672>, v=<116,-146,383>, a=<-7,10,-26>
-p=<-1923,-330,-1677>, v=<-271,-41,-241>, a=<16,4,16>
-p=<1401,1896,937>, v=<197,268,131>, a=<-16,-15,-10>
-p=<-572,2692,1022>, v=<-83,384,149>, a=<1,-24,-10>
-p=<1741,1338,-1868>, v=<253,193,-269>, a=<-17,-10,17>
-p=<1566,2188,350>, v=<225,312,48>, a=<-16,-21,-4>
-p=<-1734,-1324,-1866>, v=<-244,-188,-269>, a=<17,13,17>
-p=<3149,-129,-952>, v=<449,-16,-132>, a=<-32,-1,11>
-p=<2091,-1276,-782>, v=<293,-179,-108>, a=<-21,10,11>
-p=<1814,2072,315>, v=<260,295,47>, a=<-18,-21,-6>
-p=<-1036,-1282,1829>, v=<-147,-189,265>, a=<10,14,-18>
-p=<-2434,-333,-1071>, v=<-347,-45,-155>, a=<23,2,7>
-p=<2813,315,265>, v=<397,43,35>, a=<-29,-3,-2>
-p=<704,-541,-2684>, v=<100,-81,-383>, a=<-8,2,25>
-p=<180,-1863,-2277>, v=<28,-266,-326>, a=<-2,12,22>
-p=<-537,478,-3146>, v=<-73,72,-449>, a=<1,-3,29>
-p=<-2275,1286,1169>, v=<-326,182,165>, a=<21,-16,-13>
-p=<-3153,-167,839>, v=<-452,-22,117>, a=<31,5,-8>
-p=<-2659,-1005,-62>, v=<-379,-143,-11>, a=<33,14,0>
-p=<-2857,1552,-245>, v=<-403,219,-34>, a=<26,-15,-2>
-p=<-2420,1189,-1497>, v=<-348,165,-213>, a=<22,-10,13>
-p=<-996,-2088,1463>, v=<-141,-296,209>, a=<10,21,-13>
-p=<785,-2777,-89>, v=<111,-396,-11>, a=<-10,22,2>
-p=<-3064,52,457>, v=<-439,3,58>, a=<29,0,-1>
-p=<-2003,1537,-2027>, v=<-286,222,-283>, a=<18,-14,20>
-p=<-2744,192,516>, v=<-390,27,75>, a=<28,-1,-8>
-p=<2627,428,1268>, v=<377,62,183>, a=<-26,-4,-11>
-p=<2370,516,-2130>, v=<335,71,-306>, a=<-25,-4,20>
-p=<-167,2752,-190>, v=<-23,391,-27>, a=<1,-24,0>
-p=<-2333,-1758,399>, v=<-332,-254,59>, a=<23,10,-4>
-p=<115,1289,-2001>, v=<17,186,-285>, a=<0,-12,22>
-p=<-1645,320,-2350>, v=<-235,48,-336>, a=<15,1,23>
-p=<168,539,-2987>, v=<26,80,-429>, a=<4,-6,30>
-p=<550,109,2265>, v=<77,14,323>, a=<-1,-1,-15>
-p=<2314,-1485,1355>, v=<330,-206,194>, a=<-21,21,-13>
-p=<-2350,1553,904>, v=<-337,226,132>, a=<17,-17,-9>
-p=<-1292,2795,-539>, v=<-184,402,-74>, a=<12,-30,8>
-p=<-770,-1190,-2785>, v=<-108,-172,-397>, a=<7,9,30>
-p=<-2348,-1197,1425>, v=<-336,-172,211>, a=<23,14,-13>
-p=<1914,787,1936>, v=<275,112,273>, a=<-19,-8,-16>
-p=<-20,934,-2534>, v=<-2,133,-361>, a=<0,-9,24>
-p=<-1896,-1410,1509>, v=<-269,-201,214>, a=<14,14,-11>
-p=<-3039,-1083,-1197>, v=<-436,-151,-174>, a=<30,14,12>
-p=<-703,-1842,2083>, v=<-100,-263,297>, a=<8,21,-21>
-p=<-865,2968,-1508>, v=<-121,421,-215>, a=<8,-31,19>
-p=<3111,410,1160>, v=<442,62,161>, a=<-26,-4,-15>
-p=<-783,2409,-1292>, v=<-107,344,-184>, a=<7,-24,11>
-p=<3426,56,23>, v=<492,10,-1>, a=<-31,2,0>
-p=<-3055,796,570>, v=<-440,112,73>, a=<28,-6,-8>
-p=<-407,1576,2244>, v=<-62,226,323>, a=<3,-11,-22>
-p=<-1560,2842,919>, v=<-221,405,133>, a=<14,-26,-7>
-p=<2900,635,1073>, v=<411,92,158>, a=<-26,-3,-7>
-p=<-2028,-452,2148>, v=<-286,-59,306>, a=<22,4,-20>
-p=<-2567,1085,45>, v=<-371,157,1>, a=<32,-18,-1>
-p=<-991,1405,2370>, v=<-142,203,340>, a=<9,-14,-23>
-p=<142,-1409,-2144>, v=<15,-199,-308>, a=<0,8,26>
-p=<1497,303,-2973>, v=<213,42,-427>, a=<-13,-6,33>
-p=<-1158,221,2675>, v=<-167,32,380>, a=<9,5,-25>
-p=<-147,-400,3215>, v=<-21,-51,459>, a=<-1,0,-32>
-p=<-1828,-2033,567>, v=<-263,-290,82>, a=<19,26,-4>
-p=<-1953,1811,-2055>, v=<-278,255,-294>, a=<15,-18,14>
-p=<-838,-1721,-2258>, v=<-119,-250,-324>, a=<10,16,25>
-p=<598,-1963,-2331>, v=<84,-274,-335>, a=<-5,21,24>
-p=<-210,400,-2911>, v=<-29,61,-416>, a=<4,-9,31>
-p=<-1336,-1236,2422>, v=<-192,-175,348>, a=<9,11,-27>
-p=<2593,1842,156>, v=<366,258,23>, a=<-26,-22,3>
-p=<683,-2491,2131>, v=<94,-355,301>, a=<-5,26,-19>
-p=<-1754,-1837,-1551>, v=<-249,-262,-221>, a=<15,23,13>
-p=<1971,2423,440>, v=<278,345,64>, a=<-23,-24,-1>
-p=<-398,2348,1947>, v=<-56,333,281>, a=<-2,-23,-19>
-p=<2374,-1106,-1948>, v=<339,-158,-282>, a=<-24,13,22>
-p=<-989,-1488,-1769>, v=<-148,-214,-252>, a=<9,12,12>
-p=<2259,-943,-1333>, v=<318,-135,-185>, a=<-21,9,8>
-p=<2871,-44,150>, v=<412,-7,23>, a=<-26,2,-2>
-p=<876,-1583,-1974>, v=<131,-232,-281>, a=<-12,18,14>
-p=<-597,-2656,690>, v=<-82,-383,91>, a=<5,26,-8>
-p=<3218,-115,-141>, v=<455,-18,-18>, a=<-36,0,5>
-p=<1347,-17,-2874>, v=<195,-2,-410>, a=<-16,-4,28>
-p=<2607,646,1802>, v=<375,90,259>, a=<-30,-7,-18>
-p=<2246,-82,1413>, v=<316,-6,200>, a=<-21,-5,-11>
-p=<-1515,2402,-1329>, v=<-208,341,-188>, a=<16,-22,15>
-p=<-740,-2443,839>, v=<-106,-345,118>, a=<9,27,-9>
-p=<-370,-1496,2055>, v=<-57,-212,293>, a=<5,14,-19>
-p=<-1652,-1944,-1349>, v=<-236,-281,-184>, a=<9,16,13>
-p=<-2499,2057,-233>, v=<-355,294,-32>, a=<24,-21,2>
-p=<307,-2054,1512>, v=<38,-293,216>, a=<-4,19,-16>
-p=<-2617,-1535,-1691>, v=<-371,-221,-238>, a=<26,14,19>
-p=<1419,2503,374>, v=<205,362,55>, a=<-18,-25,-3>
-p=<2882,48,1837>, v=<407,3,267>, a=<-26,-4,-22>
-p=<-563,-3347,223>, v=<-79,-476,34>, a=<7,33,-2>
-p=<-814,-2302,-208>, v=<-116,-326,-29>, a=<7,21,2>
-p=<2886,-461,892>, v=<417,-72,127>, a=<-30,4,-11>
-p=<38,-829,2517>, v=<9,-117,361>, a=<0,6,-29>
-p=<1954,768,-1801>, v=<278,111,-257>, a=<-22,-7,22>
-p=<-1138,-848,2144>, v=<-161,-121,307>, a=<14,13,-20>
-p=<-2676,69,-662>, v=<-388,11,-94>, a=<26,0,6>
-p=<-1190,-2014,1742>, v=<-170,-287,249>, a=<11,21,-20>
-p=<-865,2859,-981>, v=<-126,407,-140>, a=<8,-31,12>
-p=<3060,1455,828>, v=<437,209,118>, a=<-25,-19,-6>
-p=<1292,-1828,-1200>, v=<181,-268,-168>, a=<-13,18,9>
-p=<-2351,-1092,557>, v=<-339,-155,81>, a=<23,13,-3>
-p=<1107,-2033,693>, v=<155,-290,100>, a=<-7,21,-10>
-p=<-962,323,3456>, v=<-140,48,493>, a=<11,-4,-30>
-p=<2434,637,-1784>, v=<348,96,-252>, a=<-24,-9,18>
-p=<2157,1618,59>, v=<308,226,8>, a=<-25,-20,-2>
-p=<849,-62,-2418>, v=<121,-8,-344>, a=<-7,-3,23>
-p=<2762,1436,-1383>, v=<394,207,-197>, a=<-23,-15,11>
-p=<-3036,419,878>, v=<-432,57,124>, a=<24,1,-10>
-p=<2503,1489,-756>, v=<356,217,-109>, a=<-25,-12,4>
-p=<-1397,-2563,-133>, v=<-199,-361,-19>, a=<12,23,1>
-p=<-288,1425,-3042>, v=<-41,207,-432>, a=<1,-13,29>
-p=<24,2975,447>, v=<2,428,63>, a=<-2,-37,-4>
-p=<285,-2013,-2331>, v=<34,-287,-329>, a=<5,25,26>
-p=<-634,-2885,-1380>, v=<-90,-410,-196>, a=<4,31,16>
-p=<-2550,-1613,1326>, v=<-369,-228,189>, a=<22,15,-12>
-p=<-260,-1885,1699>, v=<-40,-269,242>, a=<7,18,-16>
-p=<-632,1319,2283>, v=<-91,186,323>, a=<4,-18,-22>
-p=<-865,-2642,-279>, v=<-126,-373,-39>, a=<3,24,0>
-p=<2223,-1977,880>, v=<317,-281,130>, a=<-23,20,-8>
-p=<42,2810,-450>, v=<10,401,-65>, a=<0,-24,0>
-p=<-950,2330,2037>, v=<-134,332,291>, a=<4,-23,-18>
-p=<1044,286,3174>, v=<151,40,451>, a=<-8,-1,-30>
-p=<-932,2492,-342>, v=<-135,352,-53>, a=<9,-25,-1>
-p=<3318,808,-839>, v=<473,112,-125>, a=<-33,-7,8>
-p=<2190,802,1373>, v=<314,108,196>, a=<-21,-10,-13>
-p=<-110,2227,2514>, v=<-13,321,357>, a=<1,-26,-22>
-p=<-762,-2542,1571>, v=<-107,-363,219>, a=<7,27,-15>
-p=<-843,1461,-2501>, v=<-121,208,-360>, a=<6,-15,25>
-p=<1037,-2192,-1862>, v=<146,-314,-266>, a=<-9,21,16>
-p=<1428,-2502,783>, v=<208,-357,117>, a=<-12,24,-1>
-p=<-1519,802,-2626>, v=<-214,115,-375>, a=<12,-10,21>
-p=<-2483,1663,1263>, v=<-349,237,180>, a=<19,-18,-17>
-p=<1246,-500,2566>, v=<175,-69,366>, a=<-15,2,-25>
-p=<-2286,-1779,-461>, v=<-327,-255,-65>, a=<22,23,2>
-p=<350,3135,1064>, v=<50,449,152>, a=<-3,-31,-6>
-p=<-506,275,-2858>, v=<-70,47,-408>, a=<6,-1,29>
-p=<2283,2049,-751>, v=<328,292,-107>, a=<-18,-23,12>
-p=<-1926,-1360,-1240>, v=<-279,-194,-175>, a=<19,15,14>
-p=<1343,457,-2363>, v=<185,63,-333>, a=<-13,-2,23>
-p=<-1206,2687,-982>, v=<-173,379,-140>, a=<8,-22,15>
-p=<2187,30,2741>, v=<312,5,391>, a=<-21,2,-25>
-p=<2627,1354,-644>, v=<375,193,-92>, a=<-23,-13,-2>
-p=<2234,1551,-629>, v=<314,221,-87>, a=<-21,-15,6>
-p=<-2224,181,-1582>, v=<-317,28,-226>, a=<19,-2,18>
-p=<-1203,943,2568>, v=<-174,137,364>, a=<12,-2,-28>
-p=<1723,2089,584>, v=<247,300,80>, a=<-17,-19,-9>
-p=<1087,-867,2921>, v=<156,-126,421>, a=<-10,7,-29>
-p=<359,-2816,1809>, v=<51,-402,255>, a=<0,28,-19>
-p=<1010,1125,-2626>, v=<144,160,-377>, a=<-13,-17,27>
-p=<-2218,1407,-767>, v=<-321,206,-110>, a=<24,-16,1>
-p=<-3075,459,556>, v=<-436,65,76>, a=<28,-5,-5>
-p=<-711,3207,1693>, v=<-97,457,242>, a=<10,-35,-20>
-p=<2313,-442,-2190>, v=<330,-64,-315>, a=<-19,2,18>
-p=<-1225,2747,-653>, v=<-177,394,-93>, a=<8,-30,5>
-p=<1874,-2001,-949>, v=<267,-285,-133>, a=<-18,21,8>
-p=<1135,-2961,-1056>, v=<159,-420,-148>, a=<-9,25,9>
-p=<-992,1847,1999>, v=<-139,262,285>, a=<7,-22,-23>
-p=<355,2681,-983>, v=<50,383,-140>, a=<-4,-27,15>
-p=<-366,-2446,1278>, v=<-52,-353,183>, a=<4,27,-12>
-p=<1878,-2548,244>, v=<268,-365,33>, a=<-18,27,0>
-p=<2552,811,567>, v=<366,110,84>, a=<-25,-8,-8>
-p=<3105,498,303>, v=<444,68,45>, a=<-31,-5,-2>
-p=<167,-2030,-2095>, v=<20,-290,-300>, a=<2,16,26>
-p=<637,2069,1692>, v=<83,294,243>, a=<-9,-20,-18>
-p=<279,-2256,1998>, v=<45,-322,285>, a=<-6,21,-14>
-p=<1300,-1475,2240>, v=<185,-210,320>, a=<-13,10,-26>
-p=<-909,1932,1771>, v=<-128,280,256>, a=<4,-20,-20>
-p=<-2564,-1688,925>, v=<-368,-238,129>, a=<27,16,-11>
-p=<-1016,-2945,738>, v=<-147,-419,106>, a=<9,33,-5>
-p=<-53,-2665,-2270>, v=<-11,-379,-324>, a=<-2,28,19>
-p=<1575,642,2511>, v=<223,94,355>, a=<-17,-1,-16>
-p=<1038,2769,151>, v=<144,397,21>, a=<-12,-27,-3>
-p=<2607,805,-1130>, v=<372,115,-161>, a=<-27,-9,11>
-p=<2070,170,2504>, v=<298,21,356>, a=<-24,-4,-26>
-p=<-2063,152,-2561>, v=<-295,24,-365>, a=<16,-4,31>
-p=<2655,-493,-835>, v=<379,-69,-115>, a=<-26,8,7>
-p=<-2780,900,-676>, v=<-397,132,-100>, a=<29,-11,6>
-p=<252,2668,1762>, v=<39,379,250>, a=<-2,-29,-17>
-p=<-2790,-731,-1001>, v=<-395,-101,-140>, a=<26,6,13>
-p=<-1229,497,-2048>, v=<-171,72,-295>, a=<12,1,23>
-p=<2491,1388,1334>, v=<356,203,191>, a=<-29,-14,-12>
-p=<2321,-1287,2441>, v=<333,-179,351>, a=<-24,14,-23>
-p=<1460,2731,-68>, v=<209,390,-5>, a=<-15,-28,7>
-p=<1398,618,2852>, v=<202,87,407>, a=<-11,-1,-32>
-p=<47,1927,2446>, v=<9,271,348>, a=<-1,-25,-19>
-p=<757,2073,-2212>, v=<113,296,-317>, a=<-6,-25,21>
-p=<-1045,2707,-1885>, v=<-145,385,-264>, a=<5,-27,18>
-p=<-1495,-818,-1857>, v=<-215,-118,-262>, a=<14,9,12>
-p=<-2627,-718,-1764>, v=<-378,-101,-252>, a=<25,9,18>
-p=<2024,960,1742>, v=<293,135,254>, a=<-27,-9,-21>
-p=<1784,2855,-138>, v=<252,406,-15>, a=<-16,-32,1>
-p=<-2160,-710,-1609>, v=<-304,-103,-223>, a=<17,6,17>
-p=<-2478,-2089,95>, v=<-353,-299,15>, a=<28,23,1>
-p=<2435,527,2073>, v=<347,75,296>, a=<-27,-4,-20>
-p=<-1352,2955,791>, v=<-193,424,117>, a=<13,-31,-6>
-p=<3003,1189,678>, v=<424,169,100>, a=<-30,-9,-10>
-p=<604,-799,2066>, v=<89,-115,292>, a=<-10,10,-17>
-p=<-2506,-1768,406>, v=<-354,-247,58>, a=<30,16,-2>
-p=<-1310,-352,-1934>, v=<-188,-48,-276>, a=<13,6,19>
-p=<1378,-2170,834>, v=<196,-312,122>, a=<-13,22,-8>
-p=<-714,2923,-799>, v=<-107,414,-115>, a=<8,-30,7>
-p=<906,232,-2566>, v=<128,32,-362>, a=<-9,2,18>
-p=<-2288,-1476,1309>, v=<-327,-210,183>, a=<22,14,-13>
-p=<1697,1613,308>, v=<240,226,45>, a=<-16,-18,-4>
-p=<2453,773,-1994>, v=<353,111,-283>, a=<-25,-6,24>
-p=<2094,-2409,33>, v=<295,-347,4>, a=<-15,25,2>
-p=<526,-1113,2073>, v=<77,-157,294>, a=<-5,12,-21>
-p=<-2442,591,-1823>, v=<-349,83,-262>, a=<24,-1,17>
-p=<-335,-2835,592>, v=<-43,-406,86>, a=<4,28,-4>
-p=<-2785,-972,229>, v=<-394,-135,36>, a=<23,11,-1>
-p=<-1100,-1480,1796>, v=<-154,-210,257>, a=<10,17,-20>
-p=<2325,1914,-452>, v=<332,272,-60>, a=<-23,-21,2>
-p=<2180,1218,2887>, v=<313,177,412>, a=<-19,-12,-29>
-p=<2374,-881,-1454>, v=<334,-132,-207>, a=<-22,13,16>
-p=<-1748,2499,-1372>, v=<-248,359,-196>, a=<17,-23,16>
-p=<1727,-1109,1790>, v=<246,-160,255>, a=<-19,13,-19>
-p=<905,1527,-2078>, v=<121,218,-303>, a=<-5,-16,19>
-p=<2420,-59,2292>, v=<347,-12,329>, a=<-24,0,-16>
-p=<2287,-1783,1206>, v=<328,-257,170>, a=<-21,20,-14>
-p=<-2664,-152,-1382>, v=<-374,-23,-198>, a=<26,1,13>
-p=<-1081,1292,-2263>, v=<-158,184,-324>, a=<5,-11,24>
-p=<2446,-545,-2289>, v=<350,-75,-328>, a=<-25,7,22>
-p=<2235,-1381,-2054>, v=<322,-198,-298>, a=<-22,16,26>
-p=<-3257,-154,-718>, v=<-466,-23,-101>, a=<29,-2,7>
-p=<1673,1690,516>, v=<244,239,70>, a=<-19,-22,-6>
-p=<1385,-2456,418>, v=<196,-350,58>, a=<-17,25,-4>
-p=<2985,-884,-799>, v=<428,-119,-111>, a=<-33,5,7>
-p=<-1513,2311,-173>, v=<-212,328,-23>, a=<15,-20,-4>
-p=<-2074,-1496,-1222>, v=<-297,-214,-176>, a=<24,18,12>
-p=<-2057,-370,-2301>, v=<-294,-52,-326>, a=<21,6,23>
-p=<-2227,-2336,-145>, v=<-320,-339,-18>, a=<22,22,-3>
-p=<2914,1632,652>, v=<414,227,94>, a=<-28,-16,-6>
-p=<-1038,-2308,1378>, v=<-152,-333,198>, a=<13,31,-15>
-p=<643,-1788,-2511>, v=<94,-255,-361>, a=<-2,21,23>
-p=<902,2772,-1464>, v=<131,400,-212>, a=<-10,-23,17>
-p=<1063,-1453,2430>, v=<156,-209,349>, a=<-10,16,-22>
-p=<-224,3075,442>, v=<-29,439,67>, a=<-1,-31,1>
-p=<-1373,-2192,-921>, v=<-196,-313,-132>, a=<13,24,8>
-p=<-3353,295,495>, v=<-481,42,66>, a=<31,-1,-10>
-p=<-1853,809,2625>, v=<-260,110,375>, a=<17,-4,-26>
-p=<78,-1196,2121>, v=<9,-171,303>, a=<2,6,-18>
-p=<3114,913,1260>, v=<443,123,184>, a=<-28,-10,-8>
-p=<2387,-357,370>, v=<341,-48,51>, a=<-29,2,-3>
-p=<-2301,-1677,-546>, v=<-328,-241,-75>, a=<22,16,3>
-p=<1126,2571,-1330>, v=<157,367,-193>, a=<-13,-25,13>
-p=<1806,345,2195>, v=<258,46,317>, a=<-20,-3,-18>
-p=<1375,2815,-293>, v=<194,400,-43>, a=<-13,-28,0>
-p=<2393,-1081,1055>, v=<342,-154,156>, a=<-23,13,-10>
-p=<-74,1914,-2448>, v=<-14,273,-350>, a=<2,-17,23>
-p=<2018,-1928,814>, v=<287,-279,114>, a=<-23,12,-10>
-p=<-89,1458,2267>, v=<-14,213,322>, a=<-1,-16,-22>
-p=<-2310,1272,-1141>, v=<-328,178,-156>, a=<23,-12,10>
-p=<1157,2183,885>, v=<162,309,120>, a=<-11,-19,-5>
-p=<-2528,2520,163>, v=<-360,364,20>, a=<25,-29,4>
-p=<1873,1210,2281>, v=<268,176,327>, a=<-22,-10,-25>
-p=<-654,-2387,-1867>, v=<-91,-341,-267>, a=<1,22,17>
-p=<1619,-1540,-1714>, v=<226,-222,-247>, a=<-20,13,17>
-p=<-2781,1254,-451>, v=<-399,186,-64>, a=<26,-13,0>
diff --git a/2017/inputs/day_21.txt b/2017/inputs/day_21.txt
deleted file mode 100644
index 280e26d..0000000
--- a/2017/inputs/day_21.txt
+++ /dev/null
@@ -1,108 +0,0 @@
-../.. => ..#/#../.#.
-#./.. => #../#../...
-##/.. => ###/#.#/#..
-.#/#. => ###/##./.#.
-##/#. => .../.#./..#
-##/## => ##./#.#/###
-.../.../... => ##../.#../#.#./....
-#../.../... => ..../##.#/...#/##.#
-.#./.../... => ###./####/#.../#..#
-##./.../... => ###./.##./...#/..##
-#.#/.../... => .###/.##./#.../#.##
-###/.../... => ##.#/#..#/#.#./#.##
-.#./#../... => #.#./.###/#.../#.##
-##./#../... => #.../####/#.##/....
-..#/#../... => #.##/..#./...#/...#
-#.#/#../... => #.##/####/.#.#/#.#.
-.##/#../... => #.../##../##.#/.##.
-###/#../... => ..../#.#./.###/#...
-.../.#./... => .#.#/#..#/##../#.##
-#../.#./... => ###./.###/.#.#/..#.
-.#./.#./... => ..##/.##./..##/.#.#
-##./.#./... => ..#./##../###./...#
-#.#/.#./... => ..##/.##./.###/###.
-###/.#./... => ..#./.###/###./#.##
-.#./##./... => ###./..../.#../#...
-##./##./... => .#.#/##../##.#/...#
-..#/##./... => ##.#/.##./.###/..##
-#.#/##./... => .###/..#./#.##/####
-.##/##./... => ##.#/..#./..##/###.
-###/##./... => ..../.#.#/.#../#...
-.../#.#/... => ###./.#.#/.#../#.##
-#../#.#/... => ####/#..#/..../....
-.#./#.#/... => #.../..##/#.##/#.#.
-##./#.#/... => #.#./###./##../#.#.
-#.#/#.#/... => ...#/.##./.##./.#..
-###/#.#/... => ..../.##./####/#.#.
-.../###/... => .###/.#../.###/#.##
-#../###/... => ..##/..##/.##./##..
-.#./###/... => .#.#/..#./..##/##.#
-##./###/... => ...#/#.##/#.#./##.#
-#.#/###/... => #.##/.##./...#/###.
-###/###/... => ##../...#/..##/####
-..#/.../#.. => #.##/#.../.#../#.#.
-#.#/.../#.. => .##./.##./.#.#/.##.
-.##/.../#.. => .#.#/#.##/...#/##.#
-###/.../#.. => ##../..#./...#/##..
-.##/#../#.. => ##../..##/#..#/#..#
-###/#../#.. => ##../..#./#.#./....
-..#/.#./#.. => .##./##.#/##../####
-#.#/.#./#.. => ####/...#/.#.#/..#.
-.##/.#./#.. => .#.#/..#./##.#/.#..
-###/.#./#.. => #.../#.##/..../##.#
-.##/##./#.. => #.#./#.#./#.##/#.#.
-###/##./#.. => ...#/###./.##./.#.#
-#../..#/#.. => ####/####/..../.##.
-.#./..#/#.. => #.##/...#/..#./####
-##./..#/#.. => ..#./#.../..##/####
-#.#/..#/#.. => #.../#.##/#.##/..##
-.##/..#/#.. => ####/..../##../####
-###/..#/#.. => ..../##.#/.##./####
-#../#.#/#.. => ...#/..##/###./#..#
-.#./#.#/#.. => #..#/..#./.###/##.#
-##./#.#/#.. => ###./####/#.##/..#.
-..#/#.#/#.. => ##../##.#/..##/.##.
-#.#/#.#/#.. => .#.#/.##./#.../##.#
-.##/#.#/#.. => .#.#/#..#/.##./..#.
-###/#.#/#.. => ...#/.#../.##./##.#
-#../.##/#.. => ###./##../#.#./####
-.#./.##/#.. => .#../##../#.#./.#.#
-##./.##/#.. => ##.#/.#../.#.#/####
-#.#/.##/#.. => ####/.#.#/..../....
-.##/.##/#.. => ####/##../#..#/####
-###/.##/#.. => .###/##.#/.#../#.##
-#../###/#.. => #..#/###./####/.#.#
-.#./###/#.. => ..##/##../##.#/.#.#
-##./###/#.. => #..#/.#../####/...#
-..#/###/#.. => ##../##.#/...#/#..#
-#.#/###/#.. => ..#./.##./#..#/....
-.##/###/#.. => #..#/#.../..../.#..
-###/###/#.. => ..#./#.##/.##./#...
-.#./#.#/.#. => .#.#/.##./##.#/.##.
-##./#.#/.#. => #..#/.###/.#.#/.##.
-#.#/#.#/.#. => #.../##../#.../.###
-###/#.#/.#. => ###./.###/###./....
-.#./###/.#. => .#../####/...#/##..
-##./###/.#. => ####/###./..../....
-#.#/###/.#. => ...#/.###/..../####
-###/###/.#. => ..../#.../..#./.###
-#.#/..#/##. => #.#./#.../####/#.##
-###/..#/##. => .#.#/#..#/.###/#...
-.##/#.#/##. => ..##/..#./..../##..
-###/#.#/##. => #.#./##.#/####/#..#
-#.#/.##/##. => ..../.#../#.#./##.#
-###/.##/##. => ..../..../.#../##.#
-.##/###/##. => #.#./.###/#.#./#.##
-###/###/##. => ##.#/##.#/.###/..#.
-#.#/.../#.# => #..#/.#../#.../...#
-###/.../#.# => ##../.#../##.#/..#.
-###/#../#.# => ..##/#.#./####/.#..
-#.#/.#./#.# => ...#/...#/#..#/#.#.
-###/.#./#.# => ..../####/.##./.#.#
-###/##./#.# => #..#/.#.#/..##/####
-#.#/#.#/#.# => #.#./..#./...#/.#..
-###/#.#/#.# => ...#/##.#/.###/.#..
-#.#/###/#.# => .#.#/###./.#../.##.
-###/###/#.# => ...#/.###/.#.#/###.
-###/#.#/### => #.##/.#.#/...#/.#..
-###/###/### => ..##/.#../#.#./.#..
diff --git a/2017/inputs/day_21_example.txt b/2017/inputs/day_21_example.txt
deleted file mode 100644
index f6d24df..0000000
--- a/2017/inputs/day_21_example.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-../.# => ##./#../...
-.#./..#/### => #..#/..../..../#..#
diff --git a/2017/inputs/day_22.txt b/2017/inputs/day_22.txt
deleted file mode 100644
index 1343456..0000000
--- a/2017/inputs/day_22.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-.##..#.#.##...#....#..###
-####.#...###.####..#.....
-#.#.#####....######.###.#
-#.#..###.#.#####....#..#.
-####.#.#...#.##.##..#.###
-#.####..#####.#.#....#.##
-.#.####.#....###..##....#
-..##.#..##.#.#.###.##.#..
-##....#....######.###.###
-.#.##.###.###.###.#..#.#.
-#.##.#.#..#.#.....###....
-####.....#..###..##..##..
-##....#.#...####...#.#.#.
-...#.##..###..##..#......
-#....#..##.##.#..#.###..#
-...#...##.##.##...#.#.#..
-.##....#.####.#..##.#...#
-#.######......#.#...#.##.
-#.##....###...###.###....
-#..#.#.#.#.#..#.#.....#..
-...##..##.###....#.###...
-.######.#...###.###.#.#.#
-####..###.####...#..#####
-.##.#.##...##..##...#.#.#
-###...##..#..##.##..#..#.
diff --git a/2017/inputs/day_22_example.txt b/2017/inputs/day_22_example.txt
deleted file mode 100644
index 3105a0b..0000000
--- a/2017/inputs/day_22_example.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-..#
-#..
-...
diff --git a/2017/inputs/day_23.txt b/2017/inputs/day_23.txt
deleted file mode 100644
index 9d29443..0000000
--- a/2017/inputs/day_23.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-set b 99
-set c b
-jnz a 2
-jnz 1 5
-mul b 100
-sub b -100000
-set c b
-sub c -17000
-set f 1
-set d 2
-set e 2
-set g d
-mul g e
-sub g b
-jnz g 2
-set f 0
-sub e -1
-set g e
-sub g b
-jnz g -8
-sub d -1
-set g d
-sub g b
-jnz g -13
-jnz f 2
-sub h -1
-set g b
-sub g c
-jnz g 2
-jnz 1 3
-sub b -17
-jnz 1 -23
diff --git a/2017/inputs/day_24.txt b/2017/inputs/day_24.txt
deleted file mode 100644
index 1fbfe25..0000000
--- a/2017/inputs/day_24.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-42/37
-28/28
-29/25
-45/8
-35/23
-49/20
-44/4
-15/33
-14/19
-31/44
-39/14
-25/17
-34/34
-38/42
-8/42
-15/28
-0/7
-49/12
-18/36
-45/45
-28/7
-30/43
-23/41
-0/35
-18/9
-3/31
-20/31
-10/40
-0/22
-1/23
-20/47
-38/36
-15/8
-34/32
-30/30
-30/44
-19/28
-46/15
-34/50
-40/20
-27/39
-3/14
-43/45
-50/42
-1/33
-6/39
-46/44
-22/35
-15/20
-43/31
-23/23
-19/27
-47/15
-43/43
-25/36
-26/38
-1/10
diff --git a/2017/inputs/day_25.txt b/2017/inputs/day_25.txt
deleted file mode 100644
index 892ee98..0000000
--- a/2017/inputs/day_25.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-Begin in state A.
-Perform a diagnostic checksum after 12667664 steps.
-
-In state A:
- If the current value is 0:
- - Write the value 1.
- - Move one slot to the right.
- - Continue with state B.
- If the current value is 1:
- - Write the value 0.
- - Move one slot to the left.
- - Continue with state C.
-
-In state B:
- If the current value is 0:
- - Write the value 1.
- - Move one slot to the left.
- - Continue with state A.
- If the current value is 1:
- - Write the value 1.
- - Move one slot to the right.
- - Continue with state D.
-
-In state C:
- If the current value is 0:
- - Write the value 0.
- - Move one slot to the left.
- - Continue with state B.
- If the current value is 1:
- - Write the value 0.
- - Move one slot to the left.
- - Continue with state E.
-
-In state D:
- If the current value is 0:
- - Write the value 1.
- - Move one slot to the right.
- - Continue with state A.
- If the current value is 1:
- - Write the value 0.
- - Move one slot to the right.
- - Continue with state B.
-
-In state E:
- If the current value is 0:
- - Write the value 1.
- - Move one slot to the left.
- - Continue with state F.
- If the current value is 1:
- - Write the value 1.
- - Move one slot to the left.
- - Continue with state C.
-
-In state F:
- If the current value is 0:
- - Write the value 1.
- - Move one slot to the right.
- - Continue with state D.
- If the current value is 1:
- - Write the value 1.
- - Move one slot to the right.
- - Continue with state A.
diff --git a/2017/inputs/day_3.txt b/2017/inputs/day_3.txt
deleted file mode 100644
index ce15bc4..0000000
--- a/2017/inputs/day_3.txt
+++ /dev/null
@@ -1 +0,0 @@
-325489
diff --git a/2017/inputs/day_4.txt b/2017/inputs/day_4.txt
deleted file mode 100644
index b9f9e0e..0000000
--- a/2017/inputs/day_4.txt
+++ /dev/null
@@ -1,512 +0,0 @@
-kvvfl kvvfl olud wjqsqa olud frc
-slhm rdfm yxb rsobyt rdfm
-pib wzfr xyoakcu zoapeze rtdxt rikc jyeps wdyo hawr xyoakcu hawr
-ismtq qwoi kzt ktgzoc gnxblp dzfayil ftfx asscba ionxi dzfayil qwoi
-dzuhys kfekxe nvdhdtj hzusdy xzhehgc dhtvdnj oxwlvef
-gxg qahl aaipx tkmckn hcsuhy jsudcmy kcefhpn kiasaj tkmckn
-roan kqnztj edc zpjwb
-yzc roc qrygby rsvts nyijgwr xnpqz
-jqgj hhgtw tmychia whkm vvxoq tfbzpe ska ldjmvmo
-nyeeg omn geyen ngyee rcjt rjuxh
-qpq udci tnp fdfk kffd eyzvmg ufppf wfuodj toamfn tkze jzsb
-rrcgxyp rbufd tfjmok vpyhej hcnz ftkojm
-jnmomfc jnmomfc bkluz izn ovvm flsch bkluz
-odisl hzwv hiasrhi hez ihihsra qpbmi ltwjj iknkwxf nbdtq gbo
-gjtszl gjtszl fruo fruo
-rdapv gaik cqboix sxnizhh uxmpali jdd usqnz advrp dze
-flooz flooz qad tcrq yze bnoijff qpqu vup hyagwll
-lnazok dze foi tqwjsk hpx qcql euzpj mwfrk
-ilb fmviby ivybmf gtx xtg
-rpauuu timere gyg wcolt ireetm safi
-croe szwmq bbhd lciird vhcci pdax
-hnc ykswt qqqmei goe bri wmyai hnc qpgqc pberqf bzs
-hsnrb wdvh iezzrq iezzrq rdbmpta iezzrq kemnptg alkjnp wymmz
-ngw don ddvyds nlhkoa aaf gptumum ugtpmmu
-vmccke qbpag kvf kvf tgrfghb kvf bhpd sglgx
-obomgk bkcgo yso ttft vbw ckl wjgk
-fli qvw zhin dfpgfjb udsin nihz ovr tiewo
-tgmzmph hauzieo jmg tdbtl lvfr qpaayq qapaqy ausioeu jun piygx
-jkp guqrnx asdqmxf vmfvtqb tloqgyo ioix gajowri tmek ilc puhipb
-uycn zxqm znft ayal znacus kvcyd ekv qqfpnh
-fqghur xtbtdd ztjrylr bpuikb ziyk
-rvakn uqbl ozitpdh uqbl dsej xehj
-laxp haz jyd xnkrb ijldth woy xapl iqgg alpx gnupa ukptmmh
-dyiy dyiy ihb qcyxr
-wbwkd hdwu zvgkn hdwu wjc sakwhn zxujdo npllzp uyr uyr
-fxczpmn cininu akcxs ggslxr riyxe ojisxe
-ppbch sampq dnct afikor dnct edsqy pnzyzmc afikor
-jnvygtn hijqjxl vsd jnvygtn nqcqv zns odq gkboxrv kolnq wrvd
-mroq mroq flsbu flsbu
-fyshor xvpaunj qmktlo xoce wkiyfu ukcl srndc ugwylwm ozcwdw mtqcste kpokr
-cfh cxjvx cfh cfh uewshh
-bpspbap bpspbap fquj mxmn bwls iirhvuk dmpkyt exrn mxmn
-tvyvzk ezszod ntxr xtnr och
-knfxhy kbnyl knfxhy xhkssx lxru uprh nkxpbx oodolxr tpvyf
-nblmysu iwoffs upgof tyagwf aan vovji ajk ywzq oyfi sfulz
-aushzkm lcaeki mkuzsah ynxvte rsntd refk pcm
-mgguob gobmug dzenpty gmogbu
-yvq eepof rgnree nerger fpb stfrln ernger
-hrgkbl mzwvswk rsrsbk ieru holco pajvvn ztgsr qkyp fyeg owpcmoj
-fowda gmsqdca yugj mcrroxv mqcbojd fjnqfji qdfsc jqs
-qnc rvjfz vvxk sjd xrma ucdjvq sbw zydyt dfzww
-ocajazv cozaajv tqunkla udwf ecnnmbz lsakqg bki njnda zsdu ccfqw rxpc
-qqm qdfya qxyx qmq qfday uqnfttt
-rnbirb iapor qet iapor hxkhz dfvzig pedl ybyb
-mkgamxg xkniv meb hbzmxjn dhbj zhbxjmn hdjb
-ilteux pyutyfx mau lrr bacak
-sjjonmn dbbbgs crxyuu jztstgd ezb uiabyaa
-tra fle ufzlvf nnaw kec hiwnnlj tei wld iyt syk hjdczb
-qmd jtlud dgh dbanock fzp dsjgqru wwvo jwvxwgv xlemfij jcacd
-rpkx oxesil snazcgx fly miiyc ikmtmp oefyyn egbw
-ypfpeu wldnyd acchppb yqwcaw wldnyd turbz megci nbgxq xkc ypfpeu
-iqqv iqqv neui iqqv
-ypsxm icqyup zyetrwq nbisrv
-viommi toszx dpueq eyy cunjou ffcjc jaeez djefra pxvkj liudlig yye
-fhnacbg jghchh ghjhhc iue hwqmo
-vbjw lpn cizba ltnsfpz tzoweml irewlc uzckhpd mszal obd
-yeos utxkft hflxkfe fxczge qpgigkc ksgr vuumql vhlvv
-xzmkv xzmkv krecdi klpem jsbu nwcmik emfzxf cjmpgnj
-vtkjo pmiv zou gxo qdiyxsf hwyinjk jhkgf rjq
-dyuoc ywiyvch irfgl ywiyvch fxb fxb
-tuz onhr syu rqya abkaf bcfx mbknex juwoor zmksl
-oheg spjorx ksdy vwtq fxz phvtazk tcze lrxg
-hew lbup botaj ltr jpd
-dxgc tzinkej gnz hxvvub adsqmc dxgc asgpp rqbdcra goy pmamdua bhiacva
-xqv ygb kihxqz vyv pjcny vmyvsdv cgsi nfyx
-tqga ssshrw ndq qlbvwh huyd pxbgj qbxk dkkbf jxy chsobw pph
-hxl iwph iwph xnr otifm ljhre
-zlgvpd kapxpoc dve rklk ogh hgnp rbrmc zzkz hhmcx aklmo
-sar gfor nkf hek nkf aql shc aql
-dtcrw kfjzcjx qyhi bldson whwdayo mqtgt xhqzp ttqmg
-omspdml isze jdl nvwo qrkm wztfg ssfgyh dryj jhp unsmty
-jxt cszylng ifht ixtuna azoi xutqlv jtx tjx
-usgm azuayp fgkby ezpyq jqwl ezofj
-tnhvil nrvg moyrpqs sldx qymoff megflxh pyhqwms xmdw
-zomy zcquwnv lzx bvcna yods mjp dgsez
-blklyf xokd gpit tiysj yrwfhm tofx
-dtig vhdp omuj vhpd
-fogwxim qvdwig emdiv jvhl euwbzkg xvxb hwmqo ujdmlp epmykj
-sjxll sjxll pedvgb sjxll
-drvay gtzhgtx yrt okz nqf
-haxfazn pvkovwb pgu tgshw mxcjf pbe nwoymzc mxcjf pbe hydwy jradcr
-prjsloa ahylvj okbsj qbdcdjt pmfo pagyoeg vkmhjzt khzmjvt opfm xfrji gyjqyel
-lzypt jdbtrad ogr jdbtrad heink
-rcoucuq gdxewa rcoucuq whlw zhhm rcoucuq azaqohe mzyli rdvaf
-yuag ebcf yuag nsotg qqzuxr jfmao vyucw wmoye
-qwvk xemm hgqrr wyxkpp tojndm xlvzypw jus bgnu bgnu nklfwhs
-daqi knenmku ccm xkiuy vkexsbc kvvdagx umopitw yaocnx yoakqql mllmsp
-mrxgl gywit mfopia ncnsvw vdxek axuiot rsejua nei prndudz mnu
-egqn gaa qgen urs mix zbn rhn
-ewharq aihy udkdaob kgrdd kgrdd kugbjtj fcef llqb pduxaq wcexmm
-dwtiw nelq hppad algxgf gcc upou akm efnb mxmhrud
-yxqaa ups okbhgt iet qns tqn rnjqxgp
-npmhdm cgds ldexvr typi jyivoqk zkgq vfyxu xgfo
-dkwnmr umm dkwnmr okpjw wqx jpztebl eqsib dkwnmr
-dxbild wpbup evscivq dxbild dxbild geqp ojfbpl jshvqej
-cxdntxs csfocjd pyy tuhws teb boyloz xfw scxh pxhonky
-lteucke xrgwy hszgzu hnyrcvb
-pfgsgwg dxzh fworek qbstod
-usemcrf psczxu gcjtr brls
-hjol efxczux bqdn gvrnpey yyoqse gbam ndzyj lbwb bhzn unsezg
-bapw xifz blupk qqdk bofvqpp wnbuwyt rnwocu lzwgtt zucag pov
-xkre lqvd juf lqvd xio xyg xyg
-tzdao ztheib aymcf aorg iyawrch hetcxa iyawrch czdymc ccv
-ucgl azlppu jvxqlj pest
-dvwlw fuuy mnhmm okrp ualnqlm uyuznba fzyejk yaq crl ctprp
-odfq knox mkbcku pxucmuf lpjpol phl
-ixongh hfs ruorbd auy qyssl kykwcix aytsm rlj aytsm duq segpqhk
-izufsk wedpzh podjkor eamo vqvev ifnz podjkor xrnuqe
-twyfps bmdbgtu qye qkwjms
-wlav htym vhsnu cocphsj mdsuq vhsnu jflgmrp
-opajag itwjhfu purnnvk opajag
-hpkopqp vnj aialpt lzrkzfs nwucez nwuezc
-mcx hzcjxq zbxr dsx tpknx fva
-rlvgm xrejsvn ghawxb efyos xty wdzdgh olahbtn rga efyos vhtm nsr
-cni mbab qtgeiow ulttn rckc kmiaju jvbq emyvpew cdlxldn ulttn brhkprx
-eykpffp rapik qki fhjgdyu tome ehjuy bibjk htxd vexvag
-wrk dpxt gwkuiov gbkif ike gbkif pcd wpj toywyf qzsa aol
-yqwzh uujn ujun ujnu
-srs ralwxrz yxvvmgp sjhbhk waasid cqtxoxf whcladv jkmaq khjbsh dlavcwh
-mdvsjh xaj etvxlsy fxgiy rgjesel rlegesj ptriz ebdyhkp kugxm dxv egljser
-lhehwrs mqevb ygmv gri izop qgb ivm
-loqqam alojlwg hgen hbyw qlwpun loqqam worgnwk kope
-phozre todsknr todsknr ibj mvllsar
-wuripy ruwlfbh wukbkey qhq iishw tvtvci xawvxc vxacwx hsiwi ogq
-xryq vxwupqa zhqex aquxpwv bnvxrba dtbxki
-yvvwh zvsm vqskhp vqskhp ggqqlw bpn wbuv
-kqz tdy goqwge ygn jgd
-szjjhdk zkpoo nxexz ebicc
-wzuemcj oyd qupulju iaakzmt vzkvz
-nppahov umm wpzev wxkgfxd owgekp bhhb bbhh dgviiw kdfgxwx wryb
-bnc rhes lmbuhhy kwbefga bnc rtxnvz bnc
-ani mggxf mcoixh zdd nai hbhzl mes bdpqr
-mjn uinoty jjegvze bjgqg yhqsxbt coj obylb hddude xqi rhfbhha alood
-cbjzj drmihy tfkrhsd nuhav hihzx bvblqpl tdd szmp gjgfv box
-uumhdxd cmwgyf vepr rwqdkj exwk
-hwvr ydvw bqefu kghes gvbhp awms iqsqes khgse
-mrey jqfw fwvzhps komj dayvs fbui zmtd cofn mrey
-dsjds fdpx irjj usndok qcctsvf fgk wvg txwxcl dxs llp zyilwtq
-xmkelgk fdukc cye legkxkm wwly
-enlny eynln cccku brkz dpof mwfoxcd yftmnqh wpebvyc
-ggdn jnysl dsacffw ukj hdae cmzxku
-uqhm gcachmn kxndfrl htmfis jfnajz fiqiypr kekho kekho ndcw ckrndub dejfna
-keazuq ertql rauwl keazuq obmh rauwl ksrotm
-jppp poigqhv repfsje grjk xwkyuh pkx ayzcj hoxzv
-yhjw pcuyad icie icie icie hwcsuy wcd yihjh jnrxs
-gaug ivvx ceb xujonak hbtfkeb ttciml cctoz
-dggyyi dggyyi gqlyumf yasu fwdfa cbb nncn verhq
-rhgcw gpcyct kiuhbg kiuhbg gpcyct jlmleo nhumm
-wulxxu jyjek hclcp ogob viex wiqcupq
-tthu nxgzpid kcnj mss ukapgkp nnc bxjocv qwxs oejwsif aywqtu brahkb
-dtde bgvb smu vbbg zhlu
-lyo nwjjmep ldbok wgxhto wwuh qfgjknk wnsl
-lleyr onha hkwulbm jfg
-bybjwd uoxvbh mvj iqfpnxs bybjwd zqtszp wvc lbazjr zkzenja cev
-rbuyyr divtslq yuqmyt ajyveb smxsjb nlk tzqhq ims fewg wpjhr gqh
-kpewfd beq klilis klisli eeezut
-euqh hueq ldoo crqurv lvrwh tmaewp oodl
-bqi lzrf jyhvxfh bqi jyhvxfh nbztd lwpdn cuzi
-srjylou phavzjd wost uxkaq byh sluryoj
-ihrdk bcegkpq nygrs qbcq wyjg dvzme pgzhjl vibg kvv
-ijsx iedemek ktlz gtga tbal lbki gtga
-vmiaxn kefig kefig vngxz
-vrdmfvi qts vlvhq vlvhq dihmq
-cfz dyrz zlw qnt vok fwvahg skshbqf hbwozdc ntana jdb uflp
-rimbj bxemw sfps krtk umta vnk ewmbx nrlje ymrtqrz mxewb kjxunbt
-egnuti ozat eltl ngueti
-qtcwoxq rmaf qtcwoxq qtcwoxq
-zws gcoa pydruw qsrk lrkybdf ugr wkrxoj nyvf vitwn
-tmr hhd dojid zwrj bhsim righ keqlep flzunou
-lwoquvy acjowxk tqudk oenvioh nyavyl
-rgh dfhgyke iff cpxhuz hui koe iff hui dmukrei
-bjiumig lcbmbgh vleipx sfawua rnf
-gftfh qwb tfdroe xbno qhgofm vqfoe mux
-ljdrr gyfggai iun nju xrucbis mhrcrh fukr obvuqc whlalfe xrucbis nju
-nxjmjr egqwg arllu xqaahri lzc ivt uhsti
-sqiepba rcmts kvesv nvp
-tiksw tiksw rjni gbhvzm ctbq zuqfyvz
-ibsnm kfka aoqigwo sqouih rxz
-jmymq lxio adtmk umyu sxvzquq bporqnb heol fow
-mepa eckq rqviawv dkqoei ifmngpp jiava rtklseu
-yuycd jiufjci yuycd uowg yuycd udq izkicbr csxobh
-nwu tfsjavb rruoxbn oepcov elxf rruoxbn rruoxbn azglwth jcjm ksqiqpv
-dthfwip zqnwa zqnwa zqnwa
-gso wruece ufl crgnlxv vllsm dpyfm wpa ctxko
-wvpze seodz lpq lpq pmtp wsxs ffppx
-yfxquj phvjn rtwieq rtwieq kgxztyu vbjvkc prqqd lyzmdo ojbrt ojbrt qiqjz
-esaezr rpggiy jey kbzrhu uthus osr xxaiijd qfxlf auhzbx gkigoqw
-yfhcj uvgck cds gjhhrg cmempgj yfhcj cjb
-yxi voxvtuw unwg jqqm
-igvjr ljz rus sru gbjtjt qfeg ztu zjl
-leof ocxns hbkoysh hbkoysh leof
-hab lyxmf yhh qeks fwhfxki xmbcak okqjii nfgzyg bhtfgdj lpmjn
-mgognh tad herere lvwnzx ixwqs zphmuuc etdjz kczsf
-mtej rlolsnn zbl uykek dpkan gmz etxtgj
-mihuieo emjgbp jgks mihuieo iexrfw mjdnr bvp mcuzea xkbusvi
-jvqpj bwt jvqpj bwt gxr
-qpnd fpt tpor bibbpcg hmvguez wqc afl ckviua gpi
-dntmcg jglm sxtnu sxtnu sxtnu
-fzkbptw cbfwo ozvwov wbv gcdd izqo ovwzov lolewo xikqpw
-nkxyxzd kpn datf fki werq mwidqx oiibor zizcjph
-xvgyxym zor ijoy lvwsf fjuara idvvq rreit mqyyy ctio tzwqqhj rnpee
-maqkfpk maqkfpk xukg sfdmnlg xjopvr xjopvr irf
-liujcd vnlkouy dxkwc gto vhjvtw
-swhqhj cas aupsd swhqhj cas bvbooii jquck dtdm
-igh iqicicf ghi pcxt srcrjx gmf gyscphv
-drplj drplj wopgpnk wytag wopgpnk
-zexe ilcqoh qiefb txkuv lirfzv
-ovvpn ovvpn uqeurqx uwzn hgmucj ovvpn sjxulms
-rox silka irhsvym kutus otasof tdneav pcagds
-mkja omu tyshbfq onp trxs lxa tftbv bnpl djhnc zdqfs muo
-tjj rmmqas cbbkxs qio pikk ykyew gxlxt nhsyl ykyew
-frcprg njrz oaxcmhc qben pedm ecvtga nzxwpb ior gaklot dpem
-zyt kncau spoe qlchg sqys wkpbng yflju qlchg vkve bzadbpa
-qtq pkaicl qtq mfkfqvr dnleiq brrjxsx uoyxh pkaicl yvmlug
-firwy imtlp ywl qfa dqrbazz ztzb pcsbwhn zesmlag
-ivey ivey mtvc mtvc
-lhize acwf moa cdeoazd voktshy qmvqq jvmuvk ljfmq tsanygc
-xreiqkc aawrovl pofcsg xreiqkc xreiqkc
-cjbzvn ozds iniqu sdoz gqmki bablvll krs vjzcbn
-izsod htkeqz entxn qtns prpcwu omfnmoy
-kwfb tctzda aztctd tadtcz gyt wunbcub ydiwdin xxk
-epnl ijcp giq ltfk zjcabve zfksmz epnl giq xxxbsom
-ulyukpa mdjsbn dydko uhkdt qms aaaj hustlwu
-zlsbu ohx jcwovf egf zlvpqgx qhejm wrywdmw
-uhxqrzr mmu kjxcalj unuohiq rri yzngnb ikvlxry mfiym qbksdx
-khqciz som yklmm jceb khqciz jspy jceb
-ncwggv njvi nqox krtsn lnm
-bgtqme xaxcoq qbtgme obqual vorfk baoqul lgrb
-jli tsbb nlxjc pkwzmz dlxrj hmho gzguko ilj iyaasm
-wlmw grkumg dynwtyo emxhhqr huluk slpqu uhqcmd absmr ufirmwr
-pbs pcammxv dplfr tzvmav nccyy blvyq ffhnz bccutq
-hgge ghge vxmvz hqxgjdg zab guo gheg
-ylj bucoyoq udndc wpgyrbx ueh udndc gxdsdh hdoz wwgqlg
-cjdeh gttyqe kdkm ltzd lfeozse quvjq mnwhokm kdv oojxm nxt
-mfkzus knqxt saxkqww njx zumsfk sbmcyad cpt agvbuv
-tukn vyco yobvsn bzgnn klrnzy kea thzk pxpwq ryfff nxzm
-ylbm lxlz lybm lzxl
-wgtxoij zad slgsi cvnxfg iomswwl vmx
-hkm yinhnkj kmh kwkw kayknck chur styjif yknakck
-rtfwhkq rtfwhkq zsf zsf
-sldq zlntr ueegiw kajivqc ozcbm ceft snvugom pdyc elppeed nnqrp prwwf
-lhk xjonc muc tudag tsafx mmivb dvrjbp qgrew
-hnzer fbgqp aazta aazta lxaz lmgv aazta
-victgxu victgxu mlpd ummrnbx cazjgnw isxcyp efy zfa cyusj
-gyojxo onzq gyojxo uxufp awi ilhl wefwfxr gcjlt tmliynw uxufp pdcnxah
-wjwachn xkuhfbp oky oky ybaeqkr rbuix yreoaw wepmye brvon aasb
-kiidorw vxtxiqx wtqvbrv efdth isel qbom vcssyc vxtxiqx wtqvbrv riafzsw mqzsj
-eurpjd vkhdamt tmfx czeoot hiz ykz lmixzq tfur jhzr
-ipuftpj qbll sqkkdw fwncmiv bri oeeh lehd ioh wag
-suima nanngc imrmc krq atxdo woy atxdo akev qlr aezco qlr
-cfc efwbzck ozkmcxv moczkvx ccf
-bnekky iakrk sask uwgnjp iyi rynev bdnas ldh kass
-sicmw vvjbvv cap nsumc xgvrlm wsoo uoqdu psykckm
-ugg mtr wnzhmmh tjxc ehwnji lwhu mdsckk yvmk enubrqo
-grb oxmxz ohu ytetedv ssx apzlppg fdkamm sxofc jdt ynmu wyejok
-umoep rbyqm eqfk twqnog cptbbi dragna ngqs ffb cexxnc rbyqm
-utizi ormkel wvwur bdx ecelqbv xiccama aag glfvmj
-znb rsuqoa uxo svc
-obs lbifa cffi catpd
-qkxwian ajlzjz wewduzp bbyv qmt fsr qgiu epinp ghmf
-hatg bfgmb aght ghat
-kuq inp dun cknbun wmwsu drlmmg kyxc bdl
-bddybth swdbf jhi fva qpobio bjwm wjaztp jywi
-mgckz vhveu zkemhp zdf xtiqqew mlx wazgd
-umbjq pya lvvxf jeavij rhrxvew bwjqgpr piz
-xaycpwo vjcuc qksc yuixhni sfbfb dydyaq gdfvb tggg xidphvf bpjdrl goskxym
-agxfoip gguif wvo agxfoip ntkbaw fbyggy ooft zxih
-nzvsu ffwq uxvfbl qrql olhmhom qhdltg ymwz krtndtx olhmhom nfsv krtndtx
-qdp jqk ustz xjripzv mnk grnodk pjwdsj uug zqxjqj
-mufrcox zunisfs ocvcge acamm xua vor bsde kxr vor kxr orccxx
-ncycbp anvcxay bmm wndmeaw oso knmk mmb wamenwd kmkv ppdd
-motdcn xzagzwu vuzt utffrn yuqxzrh uvzt ujttq
-tauoqy coiy ybesz tauoqy wpmr trquyne ahxbj jzhems dsdy
-aczq ypw pgmzz srfn quatjgf
-cih ypapk bfxvr euvhkk gugru auhqui
-vyf pssgfvy dnhvbfl xpacme dnhvbfl mzdv iynq hcqu
-lbzvbu hhxiq hdfyiiz iyzihfd xhqih uzdqyxr
-iapbdll vdr cprmrkk vdr dfjqse mlry flpqk vdr
-grrfkq xcpxd grrfkq dxc bjpr prvwh swoc swoc
-bopo chvwuhf qhd ieesl xey ieesl fnjcbe
-kic fyq hsucnu agwyl pzzmd hqksh psw
-mxf uau iti lcoz lpg zbu ocre wqlocmh mxf nidqj lcoz
-bypmix ptzxgmf xmtzgpf hrvzzq
-lbfw zwusma lbfw tuyyy
-lrf uej unswvh obgsb npbl zajr kenea uej qnyjcu wzufim qpzkgya
-qcrxj llyu kligt hlm ehwtbx dda lgsvhdt xewfcv uikn
-nfzjx izqdbq mfbxs imiuc yqxb xlmvix izqdbq eflqfq wku omgtuu izqdbq
-lasdwg hiy btzt eefd eyoep icn nnmhg otml rek luixac nyzgn
-vekteds utsuxdx utsuxdx vekteds
-feyov qrij zbebwg ijrq seplram wttkwm zewbgb kzuhuh
-dmkgtv wohgqo ddtqmv zatahx mym hqowog tkmvdg
-vhha wjrmuyx kqh vyyrj xzchbi ejsdq orlxg vyyrj dlrc
-yetngqn zdtuqox hkarjei fqpsgh eaqwbg zsssog ghb gddqqzr hbg
-obldb zsrhz zxp uxphnev mwnbc pfjft fms xwslk vjm fxy
-nfij dbfykv ttq gyjgac igxuyqi gtiioqx ilhdex dbfykv uyp bdiwya gqf
-pffzruz vogfosh dcs wje
-pohhf fhpoh oon yyz
-xxuam afwm qxl lnt syyr bwxhhf sozauq shlhfmz kwnn milav ochq
-wefcqrt gejw cwerqtf fttf gjew
-jfsvnmr osca epwtle pgfif sxom
-exlfzmq nakp rgdnx rrcvth vhrrct aajjdrt ryyg dsozd jdqlqj pakn iruv
-rmcvo txszcs xxhyxz hbsozk wshkocf rmcvo rcbnt
-kitz yjgney yvkymef nauj hmllsgl kyhm kqr pzsu rcf pzsu qpte
-cdinpx bfur mkj naz ihkheyr nohhoe
-ylris xeqcgup wap bbfih tgfoj
-ina gnlnm zyeqhij cudfuf ipufae bvkdzni aat teqsg cudfuf bjokrbl teqsg
-aedx edax dnfwq qndwf
-rdngdy jde wvgkhto bdvngf mdup eskuvg ezli opibo mppoc mdup zrasc
-qcnc iaw grjfsxe gnf gnf
-zbjm snznt zelswrk gkhlnx dqxqn qqxnd dmro
-zisecvx ztezof uzbq otnrtj qsjzkwm ewvcp rlir bfghlq tgapdr qxmr
-ipnqj opjf vabyoe wkwnd
-wyf mfqxnrf apm snarf jqu aaghx pwecbv lvghayg
-acncv jmmbwlg oiphlm ifuo cvt
-pvmb egansnd zmh gcuzzci rrxpslv ubith
-uoleptg xbouzn xbmg cfh cpn wpqi xbouzn xtxis sxzpns
-rilybri kurbpq vfmjpck tjyogho hfyxad svfofx lfbbhxj khaerfs iqr
-seaebgz wlmtkre qguv qguv wlmtkre
-sgo edkxya zdqgwtt gxu nibuu rairqoq mzxli dci qsv
-tsol mdhzqr rmaqnru ggvcq arbwkn hlkcnj ljkcuof
-mmliphp ocup puoc eijjv
-gmajqpb ijki ijki kvz
-pmqss unhlpcj dlkll nuhlcjp expe tlurzmv nsy vlumtzr tgseozl
-gkvaoni hsba hsba viuedv phyoclp fdq phyoclp febld nqfs
-rxvdtw abn pntv qrqfzz slsvv abn lrxix mnu npot
-ghlfjp woy xwkbmv bkahpkj jve cncvk jvdype fwgvoju yrkwjp gwfvln mvkv
-kmluh mie bby fwer chsinb ojglqr nqk mie
-yzmiu igkgca ybnsqja jpfejtp yjddy xsosxfi ingx qwuhb emrkwpx idqjmmm
-btrllw mphm dkvo ewdl dchcul yah btrllw kmqi mtvgk wtb
-hxsgard yuikc lykt tdee adprp gpougod klnzk mzsmlb
-hdn znblw ifoblur bwzln dbv
-smofpbs vjuyiro llk lfzesga tybu tybu
-gffnpug xaup iqiyz fjkpnkz drrk fwyxw lwzfskz gslwpmv vjxylva tbkyo nib
-evydmb nhwuiiu fkerq nkgbuyy uclrs ydjgglh xhotwbm riirgzt
-bsub eavbt uvd dpzwyt rhn khrbptt xszckc djnfxju axofhat powmso nvdffrv
-xtuykl fjz mbikc xpnx hmey fjz fjz
-rkls nwdcsyx rkls rkls
-tygml untequ ybdfumz nqffbq uipc sove hfnqj
-ytecew vven koqn royynd qsn ksl qsn sdw
-hknlw qwho whoq oqwh
-lzmmtqu qvhyeo cnofuj utpwkjz gnirz yhhu aodbnd
-zsr axw kwtzcv tydzo kwtzcv lkxsm
-rbjtqe nihifd gvdxd bpxzy rxteky vgcgllv vbbua anygiup rqo
-dpd wblfwp wblfwp wblfwp ygahc tqjbaq
-gsw gsw pacgj xmrcz zmxhmch xmrcz
-pdq rhe xqmq lgpkhg fyffrot ovnqh wle
-tbjavke ypzzrj jizx gdxoh icjsat otfh fmygumv
-snch nxlgjgp jeyn sxoqfj jtage jtage iuice
-rtb coefuj grwg grwg rtb krhqnma vfhgbr
-vhegtl btorwxg szcev kbvkx itsk nlzpbed
-hiukrf ilzkm yllhh xsgwkdp zyy kjbv
-rfcg tdorci zcj wzftlv rfcg rfcg
-lgbc lzizat vsno pau nvv vsno bbr lzizat qhtb gwp
-sfwnio tcugjk bsfsz ykyfwg ibkap fsrvy mygk kzunawx zyhyh
-mpavlh qps bylh lttjkz rqabgk vewb bwev tlzkjt gzrbxga ktmso prpkj
-gpf ims ynh ffrs vpa iemp gofh cgbauje
-secys qks mcnfhwh drog kqs pajy zoltkw lfihnb myb ioxptu
-ytq nrta ouk ajqblf yuwwcd zdy blyoxbw dakk nvgi bzrhzaa
-nkoych sufiia xkdvw crtldee zycl qblab egqhr qblab
-nllno muxaf vds qjnitmw zkpj wskyhft kmqct xamuzpw qcai cdjtbt kaxv
-qzdytpe osr fuw osr qzdytpe whperd rydwdcl knoa
-zkdznhd peh duoygr zamrgl irnvj otpe pltpq jdkecg
-byzgw rece iigdug ehif tpgje
-ccnn foqdran gbctca tefdjxh ntcr rjciii xip xlss crl wvvhzqm twyohf
-dqyii milqqc qjgkojp qjgkojp ryde
-tdkyj tbrcud tsba vqtmb cjwxnf
-hqhmq wemvrce nagig pwnw nagig epg nagig vlsi
-tqgvw luoplw hccti npjm rytdruq cylrsun rytdruq vjsbjl rytdruq ppti
-itgt tuwc itgt rvp itgt tigns eipl ksmru
-pdw wdhtkn nbdbpn wff zhuuipg rvemv qxr
-qgkwdq cjilayh ymeks mrpuzai dwgs stfstgz ucvqhb yout oiq
-vpxik ypfr qytimvu qms oxbmw ppyfx
-fwwidn gdhd pyuexk snsz iwndfw
-lfcb sllxjna lfcb hpzahfg mmvgaa svny jhuzd
-unyg gicmzd fwc spkciy toyq wjupckd vzzx iuqgka ytqycb pxsufj
-goj tnrcml eyizngj txa xrkiw zvu igduz
-wek xrrlkna clyof rrlnxak
-cjm rmyuku vjom gtf
-buk cfae awstd dywgqp hxo wcxvf laihqw xdqfes wdbh qceh uzlwj
-sudguo dxwplto rlebdh bkamu dxwplto
-crwkyxm yuz kjtdhom crwkyxm
-trhc sduorxr aizfryh rsudxor gbyc
-pczkyl bptp qnn nxmpwsx udrg hhlb rubtrmx twzodlp xygnht
-jmqct cden yfajtkz fevcw sxonbxz sxonbxz qkzkm hhngr fbv
-sdsnm mwvicr wypfi cty ndbowr woiz mrauwzd qlno mwvicr
-vteyo fng lvr lxytn txpj milg
-wjx ahtmgo cgwcaj kaxae fhlvlqf
-ezj eetqhzu upwda iiefwlk vyvby
-imalvy yeghqe jwcu mvrod cwju
-bxnmsa yhfu npsdar tsbri hfuy sirbt oofxmy
-fkndt elbjtn vepqtxt elvpf fpelv bzkgag qttexpv prblwb
-rmq iqs yvprnyy iezqrzm wlqsrr
-yviovq lekxghj oey qwhzj lxknxw qiyovv ksnt jptz
-tyrg cifxt hugqf tyrg ffuiv jmax qyw fozfosq ffuiv
-nmg rsl jpzazd qbtlf yxqtsj czwmdfd bamge lbjdof uqy jssc
-cbx boozjip pwgvzlq rjz kxy kxy hszacok fvsq jhnir cnsba gafz
-sbcuxb wfur nnnfqjj fdwg huhe sbcuxb
-icwk qelbxs uevp qped zsnhh wpuok wddxsln ftnzupr ruxol cgxjb jbhh
-izcp htykj xxmndoq amnspe htykj
-vverol oixwlny vqd tvfzu henc gnyrwr
-ytxio etytsx choynep zqapo hfjit
-lkvgr oyzfa taiqr jok djatvy ckif tmdw oyzfa zroy
-jlgpyp kkqysg oqjki hjohoug hbhta muilz zft
-sumfyu wftcu bwwdcy lezimwa qwvxv zwh mqyv bmfot aii torcol rnt
-tpdj xrw ccsbnh fhptv fwkxjfm dmqaokd bjci
-zxi vmf vmf dpyg
-sfzxysw lcms bkojtv bkojtv
-opywo qll ipkitr mtwp tudrr svhyp huz bxsdpn xomfy
-gkod luo qrosbp orbd rpsjzyd rlh gdok tze
-nusiuq nusiuq zeys ahufexc
-veno jntg avtmtdn qojxru zegdcql odfcetz pgehau
-uqun vigjm ykac ozlelj danmji bibugox
-rpuozh ajwru rbvuevv uhzsq
-iawoe tyb aewio ymf byt inijv ctu fcys micsgzl pbby alt
-gktyxp ris mqpfm bkqsfl nrg idbbcxg jhcf
-qibt invvv qibt luitx rnm eby hrfbmwl wnap sgkzvb qlwc hrfbmwl
-jwkv qecsjbw lycgldd wjvk tjcp dycldgl pzrvr zrlcf kji
-nzsrmiq nmhse ilivrk kqv
-besmyzi imkgpt iekbjax abxeijk uvzs wwv
-jdocl uki ltswp tjkljc ymce iuepze qygqxzs tei lkry
-hhyfy gvzd mqksxlq czn afe mesnag eep frwgekg mqksxlq phpy
-ehg connnza ekt ddgokw
-mpbsoms uzhzl xevww ztt uzhzl
-lftybr firc awsud dsxdkk ltf ipjv dtx lcymth
-vkcpb gxtxq yioeq fexj xxgqt
-srvca fslnnvf nfmkpvt egw wemumq jie vznf dzsjw cukf kcvyir
-yxjkl lyjkx jyxlk kgc xtz
-tpoe xzov csp leleoqo noyre tdhf cyib sjgtdx raehdw nmcxp
-qvt uhznqe bpvos vtq ddlebtd tqv
-xlw utsxs gpia rvlvnts elkxr dddihy tnrslvv ibf wlx bxg
-cwqnnrt rkkqyf dye yde fzl pthanj
-boc rqjenpp xjqte jteqx pvoofc pidqe ruoucy gvnro ognrv
-qhalb gnazwc fhl iuti
-clnbjfo nnfs nnfs heymvr oarew oarew nxu
-lwtrotg hiaxwj ymzbly nvhzjhj zlsaheg nvhzjhj ymzbly
-rrvi tsjp tsjp tsjp killji
-rpx hiclj cmwq ibhj nfd
-pvwymn iebkd xmpw vuhhkap ksw zigzy mzzyyxy rmuh iwwhea cglfq
-rlwelgy sffml jin qsdzro xlsty mgqzuu etxjuo emzd jgnoyq tkjuy vfvb
-tkctdj hhkuc viskmy obw
-zvjkuj akeky ikj jqd hfhzbwe bkc
-btev nrdo hcyiuph stf qharfg vpmel mpfz nvs ytgbbc
-ieepn ndueuw svmdr tcvumw mceyrn mrjwhyl tbdj mgrgvz
-uxrs ckyi xpmqm czzrkl cjp
-nlliwd wrqkrkz yjmng nlliwd zirde hcjjn wco ysf mgl
-dxti lcahe ommare izlwf ramsfb nzgfvo ijvm fwymrdu bndq
-isxy jpvuzu tdduyhw dixp cfa fkzbteg ytoi kepk ysf yqcpi
-qmeprfj soqo ncgeor cqsuuj grzy wogxy vyblnbg slvtry vdols kka
-ltykfp gtzl olrp gxend vapee deq
-emywfbn dbfiut rkt wvwe dbfiut bwffhea yuzcxv gogpicp wvwe
-vqvmrp ofbk dlfabd jwllzxk obx vqpwjj umvng tqwis fstxy fstxy
-miha zgvyux rmraszo xwf
-kjaagk btm kjaagk wkewjrg kjaagk
-lbmli aizs omrdr gzktnx asiz ptanzpa xlo ljre ckyb wob
-svz dlk rijagg avxmg fkzwhk uro gegm
-dzplum temdw jqnm tvxcww bmg tftttpp deuw comxey xfimzjx caluczi nqn
-uwvhxa ztkd nlsdyt vihl julkwwv uzch dwakhs
-wkhuihh ycrc cxff vzcfhpp uegfd gaok kcnvz lhzogq lwa tyrypvu
-idp zmrrzp zmrrzp nktp xsnx rjsxn
-eybrnib ivgntl vaxsbpi eybrnib
-nzvnq xvbfa pbhwwh ylju runvsj imlx vztesn
-nfdohd nfdohd gtevnky pivjyct ihvd fzcsrq lko fmqk
-kwpkks ecikxu bcxswlt qvrxm sbcqmh
-kdjrmj piuh kdjrmj vnaf gyedkg vptxgm xezssxx zsg qjzpo zsg
-oqo sley aqx qmpqb fgmylbj egd zivj kepxizv kuakyn lunbnd
-hmcf hmcf xlhgc hmcf cdlm buofnx
-onjcj yluonz kzmk phqo phqo phqo
-ohaafy efl bnkkjww wwjnyoj dxeaig ywnjjwo slk hrbebw ohlyju elf
-msohiqz aunk njki bfktdgi htmyrj mgx
-numlzrl rmnlulz glb ltt fhbajz gqxpu
-gko hco oai ryq xwy sdqosft spjkiu cxfhg ycwpglh noy rah
-btzpjem brpk vqr atxu rhlh rqv jmg fvyus
-phmxxgj ejx xje qtk hsb kqt npwj gqt
-hujyjp nwmsd ant zipuya lrkahww uwqal vzlo qmbo twkjkse ufivi
-zfbnyz fwvh xrnrw usn zin daq iwjzj
-yykyg iwypfy hehqnl cjvk cevdrec
-gui muuto wsta glqmx gfo rdmbv mxwz gffzt eejpw gion
-lpng nduid iqbpu nduid knrqd
-xwxn oefpckv gjaua ugaaj gjuaa
-qxk aeql trqdmqc crzlinj crzlinj trqdmqc rijcne ewyf
-rfv qmbe fvr bmeq
-upqyfw lowzq wpen upqyfw gfskbil sljuzh wpen
-bdcara qyhx rtaez qyq gbyr
-evzls qxtxq clzd svbgqi zxlzgss vtrre fko eebo qjyl
-zaapeo kpwhz tygknau nyd pch trp xqe
-ypzcafg rnqmbh qtteg sncu ssojhhm zonfym thir xmgheb wqj gpjg ssojhhm
-wvcwyn xrf muozyya lasdp xpjgu kpqv zkiihiv ifje cbdlavg xbied hfnaa
-qqqb rettz rycukl ihpkhh
-dnxzxqv znb znb fbxj azxtezb xvxa
-peqkd xlzqkov esgnw ucku hrwpfxd xtd vnig vlmfp ajte qswr kqoj
-dpwy oavzkk dwyp ehij upqxgii pydw
-amfc hfv xmqa nqvn cal rqmcq oej amqx cla ntxj
-hqhhe qkbhwli wmhlcq xaczs peywuo
-vcr xfv xfv kymo qpszwzo xfv
-nmrbur tswo xbo ljlrzo bmhpgc pev zovkznz lok wbbhtkk
-tojj lxqgr rhjavrm ndsdup gdbjwaq cqpnl wfaxivl rfry ryfr udspnd
-beffod sknlph amb feobdf
-mldgn jxovw yuawcvz kzgzwht rxqhzev fsdnvu vluuo eycoh cugf qjugo
-tlnd qcxj ker fdir cgkpo nrqhyq raef uqadf iahy rxx
-mhvisju lhmdbs tcxied xeidtc ujry cditex gvqpqm
-cgc jazrp crgnna uvuokl uvuokl uoiwl sknmc sknmc
-rvbu czwpdit vmlihg spz lfaxxev zslfuto oog dvoksub
diff --git a/2017/inputs/day_5.txt b/2017/inputs/day_5.txt
deleted file mode 100644
index 3b5dd14..0000000
--- a/2017/inputs/day_5.txt
+++ /dev/null
@@ -1,1070 +0,0 @@
-2
-2
--1
-1
--1
-1
-1
--5
--5
--1
-0
--8
--2
--11
--4
--5
--10
--4
--9
--9
-1
-1
--11
--8
--19
--14
--6
--2
--1
--11
--23
--8
--7
--9
--26
--1
--8
--11
--34
-0
--22
--17
--41
--12
--43
--33
--15
-0
-2
--41
--41
--26
--48
--52
--47
--30
--38
--20
--4
--21
--17
--19
--55
--32
--12
--55
-1
--34
--8
--15
--59
--56
--16
--23
--43
--5
--41
--56
--32
--67
--14
-0
--28
--32
--7
--54
--19
--9
--24
--63
--2
--60
--5
--78
--11
--84
--50
--36
--72
--14
--30
--4
--62
--6
--1
--69
--17
--33
--32
--45
--71
--87
--71
--60
--19
--80
--11
--106
--45
--27
--23
--51
--77
--67
--103
--17
--98
--109
--91
--125
--68
--39
--34
--96
--49
--64
--38
--105
--31
--100
--89
--108
--69
--36
--94
--38
--124
--123
--79
--92
--42
--14
--87
--68
--17
--36
--21
--54
--98
--79
--142
--25
--60
--112
--99
--64
--15
--78
--37
--64
--15
--129
--32
--102
--74
--112
-1
--146
--151
--147
--153
--4
--181
--22
--176
--4
--57
--151
--86
--121
--38
--137
--160
--156
--72
--73
--149
--64
--182
--117
--146
--180
--195
--27
--194
--191
--108
--153
--40
--149
--100
--120
--207
--83
--94
--73
--200
--95
--155
--94
--76
--9
--149
--70
--125
--49
--146
--223
--68
--139
--26
--132
--142
--165
--2
--45
--154
--129
--130
--185
--60
--34
--173
--91
--37
--40
--153
--189
--236
--95
--128
--46
--14
--53
--245
--67
--9
--208
--244
--198
--74
--62
--104
--51
--251
--48
--50
--115
--76
--79
--32
--82
--65
--185
--124
--32
--189
--124
--174
-1
--273
--223
--275
--238
--200
--184
--229
--195
--152
--63
--150
--73
--44
--54
--187
--49
--250
--192
--290
--282
--266
--214
--117
--199
--83
--104
--251
--176
--262
--296
--39
--259
--87
--132
--166
--67
--194
-1
--294
--8
--3
--264
--217
--228
--233
--241
--294
--210
--72
--307
--259
--33
--101
--103
--235
--100
--110
--253
--292
--134
--269
--52
--265
--15
--29
--272
--126
--210
--151
--308
--40
--40
--112
--268
--185
--346
--237
--287
--34
--302
--41
--25
--191
--29
--170
--95
--315
--278
--160
--220
--99
--126
--224
--33
--350
--76
--138
--340
--284
--268
--128
--238
--197
--93
--110
--120
--190
--140
--64
--217
--296
--103
--363
--199
--254
--233
--190
--282
--136
--174
--309
--61
--206
--18
--105
--111
--163
--287
--188
--145
--294
--251
--398
--265
--273
--50
--250
--376
--5
--357
--6
--8
--198
--20
--82
--158
--122
--196
--97
--183
--48
--428
--36
--88
--424
--35
--380
--109
--209
--323
--394
--102
--276
--153
--229
--320
--391
--7
--328
--127
--430
--102
--372
--447
--222
--401
--184
--183
--49
--239
--413
--101
--187
--289
--12
--418
--248
--279
--318
--134
--443
--272
--456
--143
--3
--209
--276
--414
--189
--302
--238
--241
--106
--332
--375
--400
--476
--9
--95
--412
--52
--127
--442
--278
--25
--446
--411
--39
--55
--80
--234
--361
--223
--384
--283
--47
--164
--18
--38
--87
--393
--93
--380
--493
--73
--150
--241
--378
--211
--516
--349
--520
--38
--397
--406
--16
--461
--276
--448
--316
--376
--156
--369
--216
--431
--309
--400
--135
--523
--40
--508
--87
--25
--151
--355
--141
--3
--495
--153
--438
--343
--161
--66
--455
--70
--248
--278
--548
--300
--337
--290
--551
--200
--68
--540
--476
--395
--245
--318
--424
--112
--556
--541
--94
--148
--542
--100
--120
--199
--569
--471
--298
--16
--453
--469
--50
--500
--84
--435
--579
--287
--522
--77
--83
--347
--437
--171
--231
--139
--350
--357
--221
--214
--224
--148
--125
--385
--255
--38
--320
--254
--517
--532
--80
--286
--58
--97
--390
--309
--548
--319
--323
--238
--297
--12
--312
--517
--434
--466
--103
--621
--448
--503
--72
--601
--287
--61
--577
--87
--143
--33
--482
--275
--529
--340
--279
--130
--512
--63
--109
--528
--22
--549
--317
--375
--377
--385
--23
--191
--138
--509
--40
--565
--559
--14
--547
--28
--159
--153
--585
--508
--582
--431
--580
--637
--561
--513
--243
--420
--298
--485
--132
--613
--157
--521
--596
--61
--420
--498
--577
--563
--354
--662
--264
--273
--111
--597
--466
--389
--345
--306
--102
--57
--596
--1
--45
--12
--619
--47
--43
-0
--323
--9
--319
--529
--402
--238
--191
--487
--315
--65
--386
--110
--605
--363
--461
--6
--95
--95
-2
--596
--454
--618
--83
--481
--283
--386
--247
--417
--707
--564
--603
--17
--712
--140
--336
--567
--443
--36
--476
--251
--735
--589
--198
--197
--476
--49
--736
--422
--383
--569
--732
--1
--104
--261
--352
--453
--273
--344
--66
--307
--698
--158
--238
--280
--207
--624
--491
--765
--506
--146
--616
--711
--650
--655
--393
--19
--315
--311
--572
--675
--533
--156
--373
--744
--142
--582
--491
--796
--777
--125
--483
--426
--510
--560
--700
--778
--407
--440
--409
--238
--738
--477
--147
--152
--317
--110
--323
--788
--601
--202
--517
--487
--726
--300
--1
--554
--448
--15
--191
--531
--568
--466
--527
--132
--254
--290
--8
--400
--655
--788
--376
--249
--662
--315
--378
--41
--793
--163
--29
--327
--839
--133
--124
--129
--673
--32
--605
--393
--664
--374
--135
--366
--717
--93
--601
--763
--788
--494
--802
--282
--443
--491
--461
--197
--83
--96
--162
--97
--161
--232
--144
--472
--118
--429
--387
--724
--789
--636
--298
--484
--720
--526
--382
--102
--449
--846
--525
--547
--696
--524
--272
--843
--286
--247
--838
--447
--489
--797
--483
--386
--775
--340
--772
--158
--293
--256
--432
--812
--273
--93
--487
--264
--594
--330
--712
--798
--131
--591
--539
--677
--455
--470
--108
--573
--57
--845
--383
--273
--890
--747
--913
--648
--625
--650
--544
--137
--490
--434
--734
--182
--355
--859
--835
--141
--536
--874
--102
--940
--359
--83
--800
--894
--712
--470
--687
--578
--435
--935
--400
--780
--814
--458
--892
--481
--371
--761
--348
--388
--891
--764
--297
--536
--695
--314
--336
--978
--379
--462
--597
--533
--561
--9
--474
--292
--560
--420
--828
--721
--769
--874
--157
--495
--771
--899
--571
--98
--282
--233
--203
--982
--416
--142
--993
--540
--979
--851
--506
--238
--292
--184
--695
--195
--632
--575
--962
--76
--546
--705
--13
--271
--222
--124
--380
-2
--1003
--251
--525
--228
--644
--159
--624
--477
--912
--712
--343
--263
--88
--745
--85
--374
--675
--804
--610
--854
--511
--612
--964
--731
--358
--495
--946
--466
--364
--1053
--57
--101
--829
--155
--600
diff --git a/2017/inputs/day_6.txt b/2017/inputs/day_6.txt
deleted file mode 100644
index b16e11b..0000000
--- a/2017/inputs/day_6.txt
+++ /dev/null
@@ -1 +0,0 @@
-4 10 4 1 8 4 9 14 5 1 14 15 0 15 3 5
diff --git a/2017/inputs/day_7.txt b/2017/inputs/day_7.txt
deleted file mode 100644
index faa4be1..0000000
--- a/2017/inputs/day_7.txt
+++ /dev/null
@@ -1,1091 +0,0 @@
-yjmbbu (75)
-zdhvqrl (40) -> fpbsu, fwpfjjd, viqhfi
-dywqvqh (9)
-gewgn (31)
-xfekjt (67)
-zezowe (31)
-wgqkdcr (79)
-ljhwzvv (258)
-vustse (1584) -> ffnabs, qinmi, qhafxnl
-idfwjgx (112) -> buoakk, itwbpot
-lxesg (71)
-qkbnq (99)
-jppgd (27)
-ztghd (125) -> bcibchp, aaheijb
-qcrpdy (29)
-fwidkbp (152) -> mnkwo, ehjooz, jvccsp, cyrrjtx, imynb, chnkkj, agywjrs
-nymhem (52)
-cazid (93)
-olspit (121) -> bqtas, fhuiyrl
-ayteb (92)
-hjucki (58)
-wrqtk (305)
-jfjemon (217) -> bjhickt, uacjhqx
-mcmqliy (925) -> coopirx, ekohgo, ioywk
-rsancy (70) -> aeuub, vchuc, heacb
-zjwpbzs (23) -> jysaup, pgubexv, lckuoqf, eeguu
-qflouyn (90)
-nswximo (65478) -> ibjvonk, sdhtguj, dxyifeb
-rymkqd (102) -> vgqeyx, zezowe
-wlujpl (92) -> sjwhig, wymfopy, ylfsnz
-imcczga (95)
-xehdglb (52)
-twubx (46) -> goimlra, vlimzz, xaoncma, gfzbp, spdhhoe, fhmauag, cyapi
-yjhes (72)
-ymcuygn (81)
-yatbsip (19) -> bkdtinl, nzqcq, tkmed, ysbrui
-yipoeia (58)
-chophr (27)
-tdwtlf (305) -> epuaii, idfwjgx, nwikpdm
-emzrj (119) -> aimav, dtscjna
-vbxmpc (7)
-nrpxx (21)
-wgexpa (103) -> paxzd, vgdwm
-vnrmx (359) -> knzppj, gkkgkp, ttwfig, vcixs
-knltna (677) -> zbhtee, ztzwh
-ojvlwm (52)
-bgflw (27)
-lsdrwz (73)
-hswzo (40)
-spwgm (351) -> mizab, cyzkk
-jlnyr (16)
-nwikpdm (36) -> ihwaeuw, wwkeej
-qbmtmcs (34)
-djirpp (19)
-pkfhp (59)
-qfypnb (76)
-jzequar (272) -> mtcrswx, wkcyd
-tttle (71) -> xlskkfi, ayteb
-zbhtee (48)
-iriun (9)
-dwezv (73)
-tojyt (58) -> dwezv, nbngkou, wnjtb, rarkunn
-bsorz (27)
-qvkotfd (337)
-azxjd (268) -> exeub, lryzkx, nqvxs
-wpxxh (998) -> wrqtk, yosnw, vyxfljc
-gwournc (85)
-aghdlll (88)
-lejgcu (19)
-lxlbt (363) -> oiosol, mpchqe, bsorz, jbpjt
-nbeagw (94)
-vbbgeo (19)
-lqfyzo (21) -> tggkm, zdbqs
-vqclii (331) -> dmkbnot, omdpc
-lhmnd (216) -> onnylx, khaupo
-wwkeej (60)
-laczal (99)
-xrbjn (20)
-qvteg (64)
-ogbsm (92) -> xpzhy, mhsjkm
-ymckwqo (41)
-ghsjtj (271) -> hhmwlo, faixe
-sjrxs (259) -> mnijdlk, hygfoe
-hdvel (197) -> upuxd, dtstgj
-lckuoqf (78)
-yppydul (91)
-frirj (6)
-duftj (42)
-dnmvzeg (64)
-cpazlc (19)
-krxyaak (198) -> maqgick, xbnmvd
-oyczfgb (395) -> rxcnn, ktpte, qybmgto
-oxiuaz (12)
-wfphcf (6)
-ihtnbb (87)
-omsroa (45)
-lybkeg (6022) -> oyczfgb, jzequar, yrcgsnx, ujulj
-agywjrs (184) -> anpnrdt, hgdbaol, hcjmsd, kzbvrxk
-tiujei (34)
-lwencl (28) -> ieusgd, mthhq, fsuzqyz, miwoup, isrtfc
-wekya (34)
-bkdtinl (1167) -> ojsjuts, euoclfs, xbkeua, mykrcq, jjsvfy, aazxafl
-qinmi (1896) -> qshbt, ruozmjk
-yfmxvay (46)
-kgpwo (52)
-fgjjwep (14)
-odvtiti (76)
-ienye (19)
-tcvabyz (99)
-ycclns (7)
-njogewi (30)
-bfchbs (87) -> jykbb, qnbfk
-dlbzng (99)
-xnmvtem (51)
-ccciux (94)
-xwlmsqy (25)
-wekkbw (17)
-yipzce (21)
-hcjmsd (10)
-upvhfmn (68) -> fvlfq, ivmndi, ussmw, ccciux
-hacwv (50)
-redqvw (269)
-dtpexjq (52)
-kmlwj (84)
-mluykm (19)
-ucbbun (114) -> hrqzqqh, ccuarv
-kymhbse (155) -> tznudmk, hnlgkv
-xomnhw (185)
-nsmoh (65) -> ceuygh, acpfsnb, vgubuy, apkwi, yoeau, pdosfg, lfpzff
-zvepqr (51)
-wnotwt (99)
-lcrwbqi (27)
-hdlqvlg (27)
-iphgmyt (160) -> woolxv, ewyzqg
-ujulj (50) -> cazid, npmwcx, yeooycn, dmeee
-zjaklmn (52)
-bjrpalu (53) -> rhodopg, tcospq, cvrcvgp
-azdei (48)
-snzfrer (149) -> bhsbd, tgdzl
-zsxizw (18)
-fwpfjjd (89)
-fndxl (36)
-uzrnud (14)
-igyxt (41)
-vxdkej (135) -> diomq, qokscr
-gjuekv (5)
-uzufet (143) -> fgjjwep, uzrnud
-vzuqbye (87) -> eviqjr, cgxsmq, egmfbdq
-zirocl (29)
-jonshpm (99)
-zmlth (154) -> zhxhkgf, cokzlht
-bujroda (51)
-bdvtvcu (74) -> tvcod, ouamzwh
-jdrdxu (36)
-troyu (29)
-nrczsn (86)
-aihow (92)
-gaihmf (84)
-ehjooz (124) -> hgwsl, mefxonk
-omydd (6)
-raevpsw (64)
-aylmbfh (188) -> ddspu, thdwfw, kxnkbs, rziezq, jfjemon
-diomq (65)
-jjyjrtr (87) -> fjduphn, yjvgwdl
-zsiziaa (38)
-lyptirp (8)
-lctdjj (56)
-pbtks (85)
-jxhrar (227) -> barnhza, iqovqp
-neqfzm (13)
-dhwauy (48)
-qvjqfi (80)
-ivstcsm (72)
-aabrjf (72)
-jvccsp (86) -> gukuqw, hpmbkwb
-ddspu (113) -> yjmbbu, dzbrgb
-zgevpxx (48)
-qrrey (588) -> bhvmgw, wgexpa, xiotwdk
-ncodn (62)
-rbcqgqv (75) -> imcczga, xzurwza
-fpxtub (11)
-ldfopw (30)
-ewyzqg (49)
-iuhlc (6)
-oqphsw (2722) -> iueejt, ekdqf, btbxk, jdshuob
-eysrnaa (71)
-ojsjuts (176) -> njxyw, dzasw, rpzaqc
-ozyexx (83)
-nnldikq (316) -> upwlxnb, vbxmpc, dgwcz
-tfmtk (69)
-hwctdr (76)
-rothisa (66)
-qnbfk (91)
-qcgxvx (99)
-igyiie (237) -> knirl, trbzi, auxvur, rvhxik
-cverrt (52)
-orrutjs (93)
-ffloi (25) -> kflize, icgwppo
-phrxnli (21)
-eopxpo (41)
-vlfouc (62)
-fdnom (87)
-wuxhvnx (86) -> ikfpktb, zcvipz
-flefy (38)
-yoeau (206) -> rfwgtb, drmyco
-ozatmpe (34)
-ydbri (66)
-tufds (42)
-pprhx (57) -> xitzb, zqyua, dtpexjq, zyradhz
-zhxhkgf (29)
-qwzmv (52)
-paxzd (53)
-cyzkk (60)
-gyjxkl (37)
-pzpjw (54)
-svayf (89)
-xxxqpkx (7)
-imihjj (69) -> yygqky, qlkslp
-tkpvf (47)
-tljdqy (81) -> sxllorg, yatfpqx, zbznuyf, kymhbse, rfmeug, tetmzw
-iphzyj (260) -> omsroa, mxupea
-xiotwdk (177) -> jlnyr, nsqqw
-eyyzy (274) -> opuaau, qolnvo, jxhrar
-baewpe (55) -> svkdyq, hitoud, zvnxfa, emfctr, facrq, vykqcnj, bckuyxm
-barnhza (20)
-oafnfo (51)
-pjcttzo (50)
-aooni (205) -> xrvbzya, gvjrx
-scchi (48)
-zcgrnt (73)
-pmsdv (93) -> pyypotx, marzlxh, zvepqr
-kngbqid (89)
-iwhqlr (949) -> ztkgsyt, ffloi, hzgig
-vyxfljc (92) -> pyrlph, wdsiq, eysrnaa
-hddzn (69)
-cxvqvjz (136) -> kfrti, nslettz
-tcospq (96) -> aabrjf, dllgpye
-mnmwzz (142)
-xfblj (40)
-vfwegiu (46)
-iphncut (138) -> wslsg, qhnaxuy
-algqhtz (37) -> qeojk, sybpano
-dmoxr (73)
-tozktyo (29)
-npjxq (46)
-uvfyo (675) -> lxlbt, gnjvf, nfsuzef, spwgm
-ollhxuy (821) -> vefzbc, faecnr, geldsqv, xneoi, cxvqvjz, jgkvfa, xtwdx
-ksvfdcc (72)
-avycyh (180) -> hwosyg, alqim
-nsqqw (16)
-nsfsj (99)
-tpphe (64887) -> yatbsip, syzlt, uttujj
-miwoup (40) -> gyjpoco, apgjv, eknui
-iljwgzf (92)
-bfuywyg (82)
-aaqdb (44)
-fgbyre (11)
-kywfqzv (41) -> lajidkr, gyjxkl, wfhyr, evhsybt
-aiovxpk (95) -> yoxvx, pbtks
-hrovawq (50)
-ajenoz (48)
-aeuub (53)
-gxjvj (163) -> yiusa, nrczsn
-ippzix (9)
-ttllx (73)
-rorqy (43)
-dqash (96)
-lwvnbzs (24)
-ckheb (34)
-rgfndsx (18) -> qkbnq, welll, bkextqn, wnotwt
-rsazi (62)
-rpfmi (52)
-uxslfay (72)
-aemgsa (40)
-jfmnsqg (85)
-ggnsa (114) -> xhmfmo, azdei
-lndaa (175) -> qvjqfi, iyuuh
-kjdoubx (128) -> eopxpo, igyxt
-dzasw (47)
-emfctr (9120) -> qzckx, fsaoa, bjrpalu, mdneq, tdwtlf, hswrbpz, knltna
-srqntb (137) -> raevpsw, qvteg
-wweusm (66)
-hawsl (13)
-cupsjm (146) -> baiaa, pcqyagx
-ppqlc (42)
-tadnt (47) -> ufefj, rwxggm, rorqy
-rvhxik (11)
-vijkx (32)
-lqcar (71)
-dhkahb (49)
-ftuemb (19)
-ewdqb (50)
-npmwcx (93)
-wwezydn (97)
-fuvru (98)
-cdpwklz (83)
-dtscjna (46)
-exuusj (7)
-ouamzwh (88)
-ggvbqrp (145) -> opohwq, yrmgc, gewgn
-ekdqf (467) -> ugvqayz, ysgsry, ogbsm
-torxqh (90) -> dzwol, lepja
-hpmbkwb (69)
-ripqyzr (48)
-eiklbh (32)
-omdlwm (168) -> ihtnbb, hjjkx, bomho
-lbwzat (74) -> iivncbz, dmoxr
-pyypotx (51)
-bjabd (7)
-auzbdlz (95)
-sxfilp (72) -> livlj, lgenxz
-kxvlprg (60)
-rfmeug (121) -> apygt, viwns, chtlcwq, wekkbw
-xajjyba (164)
-kzltfq (94288) -> vnrmx, lrihy, arqoys, nsmoh
-mbhld (73)
-rwxggm (43)
-vapwxei (61)
-ufefj (43)
-oajawn (34)
-dgnjf (335) -> yxseri, nscbsob
-xaoncma (296) -> yipzce, nrpxx, rrfbngi
-kqlsniq (95) -> qwsxpnc, mqmbcl, gtbbuvb
-jrvbacq (49)
-oavluo (21)
-qpldch (54)
-ieusgd (295)
-tifgptk (100) -> ddldgex, ggvbqrp, focqhgt, cncak, ksvpnt, weuwc
-lhradm (583) -> vusxa, lbwzat, ucbbun
-apgjv (85)
-cbibo (99)
-jxhngrl (48)
-qwsxpnc (96)
-ysbrui (1293) -> iqggu, upvhfmn, kpqyb, wdeuy
-ekvall (209) -> jxhngrl, aplvqql, drwfop
-mkwfj (35)
-pjiqvd (87)
-pgubexv (78)
-vbhnmr (2850) -> iftfc, kunzpa, qrrey, tljdqy
-sjwhig (93)
-zyradhz (52)
-wcexum (116) -> eiklbh, vijkx
-cdcye (53) -> izppmg, rxvyqsp
-bdinafh (10)
-rziezq (145) -> taiho, pkfhp
-nslettz (10)
-svhbd (109) -> xcvxle, fqzsq, jopjvd
-limljj (68)
-kauphp (231) -> dyxsmz, yzxzo
-caryo (7)
-nahovfk (109) -> flefy, cfztpc
-qolnvo (267)
-cmqwplb (9)
-cfhuce (71) -> cecsr, josdslh
-zwnvqu (88)
-mhjtjp (91)
-apkwi (222) -> rxragg, zsxizw
-ioywk (16) -> ozyexx, eikmns, ktjav
-yrmgc (31)
-kqzemkv (96)
-rxvyqsp (60)
-hnlgkv (17)
-raryuo (73)
-bomho (87)
-rixnft (85) -> cpndnx, fpxtub
-zoewj (193) -> ohbuhy, ymckwqo
-hnyqq (34)
-tkmed (1959) -> tuqmup, jwgchxu, sjforw, zmsosb, tqikxkp
-wlpyulp (10)
-pixjzh (158) -> fgjwz, lsknlg, hlcghe, txhfuoh, hdvel
-likvlm (62)
-xhmfmo (48)
-rgrxpe (69)
-weuwc (84) -> xtwdau, muncur
-uevcwul (92)
-kpxqlr (155) -> nbbyqsa, ilkqp
-fqzsq (98) -> tiujei, yhubw
-ubovv (6)
-knirl (11)
-lzvniiz (60)
-cwtdf (29)
-qeojk (99)
-ycxzfkf (131) -> bgflw, chophr
-thjulip (20)
-vgdwm (53)
-myhch (25)
-bovno (175)
-uqlso (48)
-rhnkdt (59) -> rsazi, ncodn, pwizhzr, likvlm
-acpfsnb (204) -> nmlcne, vfsttaj
-wzfkk (99)
-oqlpz (81)
-nscbsob (24)
-mzmfygf (171) -> jxyoypa, ippzix
-rvrlma (211)
-pfphng (90)
-mdiqsgg (12)
-jtzkva (274) -> flomey, ukvvt
-tvwxmur (64) -> yodoqn, ksvfdcc, ivstcsm, pvgzz
-aplvqql (48)
-qybmgto (9)
-mtcrswx (75)
-aphpzub (29)
-vchsdif (105) -> ofisj, zwnvqu
-dllgpye (72)
-lfzahrm (79)
-oiosol (27)
-geldsqv (80) -> ienye, eeppf, ftuemb, vbbgeo
-vlbba (81) -> ewdqb, vfzby, pjcttzo, abddskq
-nfsuzef (75) -> dlbzng, cbibo, wzfkk, jonshpm
-lryzkx (71)
-mhndszl (190) -> tbrfk, xprzeeb
-jbepak (66)
-nmlcne (27)
-gfffvbp (8)
-bqtas (93)
-fhmauag (221) -> vantwg, kzwqzqf, vfwegiu
-misyfn (82) -> uixlx, oupzsh, bovno
-jtauf (13) -> xskehl, bmfhjm, srhirm, kjfmqkt, qzxaqvy
-eerktn (85) -> npjxq, kasfuwe, ljbss, theau
-ktaet (58)
-eeppf (19)
-vgqeyx (31)
-qhnaxuy (31)
-xrvbzya (35)
-nzqcq (66) -> vewgrvp, vfngjd, sjrxs, hvjtn, ecokyy, gcaxntb, omdlwm
-sybpano (99)
-ebsniof (39)
-urzul (9)
-srmiagk (292) -> dvdgowj, vqpeg, gjuekv
-uexdnv (82)
-pgspysb (40)
-wymfopy (93)
-nqhdt (164) -> mkwfj, gjwaqu, sxmbcwp
-twzpqip (41)
-bniti (66)
-yfjenp (295) -> qxfce, zsiziaa
-meoeea (60) -> laczal, tcvabyz
-heacb (53)
-focqhgt (238)
-dtstgj (36)
-kkmqko (7)
-vcjjo (98)
-nnnkeh (445) -> gzzpja, bhuyfk, xnukvni, tttle, snzfrer
-baesyhf (1013) -> tznkwk, hcjxz
-hygfoe (85)
-wtxbqe (87)
-vwzglf (58)
-hswrbpz (254) -> flcqsb, sbguah, cdcye
-axtqrx (29)
-auxvur (11)
-iqggu (444)
-kceusl (42)
-jykbb (91)
-nxzkuj (75)
-xzurwza (95)
-rrflox (52)
-kfmzbvk (10)
-mnkwo (212) -> jyskb, wfphcf
-dfvhic (82) -> fhmazv, hwctdr
-gfzbp (197) -> ymcuygn, mxzbcqn
-tlednk (39)
-lgenxz (54)
-emwbbut (9)
-exoft (17)
-woolxv (49)
-auxqbbc (87)
-wvocz (67)
-hvjtn (325) -> cverrt, kfxoi
-aunhcg (613) -> kjdoubx, ggnsa, acknlp
-absdwf (39)
-wajnxjj (40) -> imjzf, wwezydn
-hgdbaol (10)
-cfztpc (38)
-chlxm (46)
-ljbss (46)
-gauumxf (230) -> tkiraal, lyptirp
-nhlittn (22)
-gcaxntb (405) -> mdiqsgg, oxiuaz
-lfxew (66)
-bamxg (66)
-wdsiq (71)
-mykrcq (98) -> zcgrnt, raryuo, okrdziq
-erpvue (91)
-kmwbbz (93)
-vsgaam (7)
-hokyk (66)
-pjzpmq (38)
-iqovqp (20)
-mmcychg (65)
-guncf (259) -> proshun, wxjka
-jatnl (216) -> oavluo, phrxnli
-nhkvp (100) -> rgrxpe, nscav, illjvf
-hcjxz (31)
-mqrroj (243) -> jtjcj, dnmvzeg
-lvksghj (18)
-mhsjkm (84)
-popplum (89)
-vusxa (30) -> ieadjz, mzmtuw
-dmkbnot (26)
-httit (18)
-tbrfk (19)
-ztzwh (48)
-imjzf (97)
-rypdxr (105) -> qyoqb, lejgcu, djirpp
-qzckx (35) -> qzzkvf, pmsdv, gauumxf
-xbnmvd (76)
-ouymke (47)
-rajtef (365) -> iriun, ezaypy
-itngcua (65)
-orxoo (66)
-tcdwurt (18)
-auqoj (99)
-sqnvvbg (36)
-rxragg (18)
-kpqyb (258) -> sqkcdf, iqxwh, vnhvilk
-proshun (47)
-uscufoy (15)
-tpipb (61)
-owhjmt (155) -> vsruoi, ifxcrug
-bkvle (9)
-yosnw (32) -> ilymgq, yppydul, yamclb
-iynywq (66)
-nxpexoq (92)
-eviqjr (25)
-trbzi (11)
-rfvomn (95)
-ohbuhy (41)
-vkpltts (73)
-ktpte (9)
-bbgwzg (79)
-bgcigo (8) -> bruzfkf, lxcbjgy, vlmcmcu
-ecokyy (357) -> iaphzk, httit, vztnh, owmni
-jwgchxu (32) -> rfvomn, auzbdlz
-xlskkfi (92)
-uxjasn (36)
-dcumfo (73)
-wpnqet (87)
-ilqol (88)
-bhsbd (53)
-flcqsb (115) -> meypo, aphpzub
-yvqtyi (85)
-oyvhouc (37) -> cdpgoi, bbgwzg, xoziel, lfzahrm
-bjhickt (23)
-hmvwl (32) -> nswximo, tpphe, baewpe, hghnmib, kzltfq
-oiijtm (20)
-ylfsnz (93)
-imynb (146) -> absdwf, cikaze
-yygqky (82)
-yuswp (68)
-izppmg (60)
-itwbpot (22)
-hwosyg (42)
-mkrzp (211) -> laxsl, zirocl
-vqpeg (5)
-gddkqw (244) -> vhtyadn, lvksghj
-bhuyfk (79) -> aghdlll, ilqol
-yrfqaga (103) -> jqinti, zjaklmn
-bnfopv (118) -> cjmxed, zlzers, qrlggma
-welll (99)
-ehuzoq (77)
-nqyok (77)
-rrfbngi (21)
-yoezrpw (38)
-rpzaqc (47)
-qxlucvg (84)
-tehyhc (13)
-gqrfok (231) -> kfhnhm, aituccf, qrkhol
-zvnxfa (10022) -> aylmbfh, lwencl, pixjzh
-gzzpja (255)
-ofrwmq (205) -> iigvpqy, wweusm
-qanbo (50)
-obslyn (13)
-hwovhvw (915) -> qdhrchr, nahovfk, xomnhw, ycxzfkf
-smlfbc (1615) -> wnjwnr, pprhx, aiovxpk
-xbkeua (157) -> pgspysb, aemgsa, xfblj, hswzo
-btklib (51)
-owmni (18)
-qzzkvf (108) -> aobitc, tsrogy
-umtrod (22)
-vxajmkg (71)
-jmlmzpz (62)
-plurwe (228)
-jyskb (6)
-xnuoujm (16)
-nakmo (10)
-uzhlers (50)
-umlkxqv (20) -> ecimj, wudjf, jfmnsqg
-ziqwzzy (204) -> uscufoy, fooyrq
-ymrogz (272) -> ebsniof, tlednk
-lpuass (28)
-qrkhol (9)
-hpkpw (38)
-gtzcxq (73)
-gvjrx (35)
-ieadjz (95)
-tcukgv (66)
-ifxcrug (55)
-thxtoc (178) -> trtgn, fdnom
-puwvse (414)
-pvppi (246) -> qlwxeb, nuqyqh
-vcixs (260) -> noipcz, frohei
-cichyqw (71)
-ugvqayz (126) -> xfekjt, wvocz
-hrqzqqh (53)
-qedst (18)
-wnjtb (73)
-kjfmqkt (138) -> pzpjw, qpldch
-ussmw (94)
-sxmbcwp (35)
-dqdfv (73)
-ptyxo (13)
-upuxd (36)
-fppcif (209) -> uxslfay, yjhes
-kxykfr (82) -> twzpqip, qymwy
-yodoqn (72)
-mnzbkuh (28) -> jtouvtb, wdvwub
-omdpc (26)
-ccrftvw (62)
-bmfhjm (222) -> lyvyhkm, sbyxyf, kblshw
-fwgqj (1924) -> zmcgfdp, vzuqbye, rypdxr
-rlbom (79)
-livlj (54)
-ybvgki (8)
-zcvipz (97)
-xyohoxa (928) -> qkkzzlm, lmuyfcw, avycyh
-dchts (99) -> lctdjj, oevyknd
-ksfok (217) -> gfffvbp, ybvgki
-hoomyh (88) -> aaqdb, ljfqvk
-qijarlh (58)
-tznudmk (17)
-cyrrjtx (124) -> oqbdf, xwlmsqy, ulztj, rjsnth
-nuqyqh (52)
-oblsboq (85)
-imnhql (94)
-hxswghs (126) -> dwwsu, hdlqvlg, jppgd
-ulztj (25)
-hgwsl (50)
-ksvpnt (96) -> fqlezvk, lqcar
-mjpzp (10)
-fsaoa (89) -> dbwmq, uzufet, arwmalf, gobrf
-iftfc (159) -> thxtoc, jtzkva, tvwxmur
-zjpsm (83)
-vwfhi (9)
-opuaau (75) -> dqash, kqzemkv
-mxupea (45)
-dmkyzy (15) -> ttllx, horqcc, dcumfo
-sxllorg (69) -> kxvlprg, lzvniiz
-txhfuoh (219) -> lwdqnj, myhch
-chtlcwq (17)
-hlcbqu (104) -> ccrftvw, jmlmzpz
-ivmndi (94)
-lficpr (62)
-ortqc (99)
-dvzlq (33)
-acknlp (56) -> aozoac, ehuzoq
-jqxnf (60)
-hfftu (52)
-ihzvygq (94) -> kmwbbz, orrutjs
-rarkunn (73)
-hitoud (5511) -> vcktg, rqbjbio, xtyzy, ssdgbnh
-sdhtguj (58) -> uklsrym, mcmqliy, nnnkeh, clinrg, fwidkbp, hzmhm, xyohoxa
-hrlkgen (99)
-vuyzhsh (61)
-nzzfer (85) -> qcgxvx, ortqc, auqoj, ilfzi
-tuqmup (222)
-zbznuyf (137) -> ptyxo, qwtzc, neqfzm, hawsl
-qwtzc (13)
-vykqcnj (71) -> jitzj, nkhadt, tcsbho, fhxpkd, fwgqj, smlfbc
-mjzksjz (7)
-yfdtz (36)
-faixe (56)
-tejnuve (209) -> jgmisxl, dhkahb
-opohwq (31)
-lsknlg (95) -> vwzglf, hjucki, yrkvb
-fhmazv (76)
-egmfbdq (25)
-rxcnn (9)
-tboizos (250)
-glwhd (122) -> ceoav, troyu
-ykehxw (19)
-bruzfkf (91)
-rjjlus (87)
-ocnna (18)
-qshbt (73)
-raakduh (85) -> fuvru, vcjjo
-wudjf (85)
-ihwaeuw (60)
-kfxoi (52)
-oewzluz (39)
-coopirx (251) -> exuusj, rvimq
-cokzlht (29)
-uacjhqx (23)
-tznkwk (31)
-mthhq (111) -> uevcwul, nxpexoq
-uixlx (7) -> kmlwj, gaihmf
-nqvxs (71)
-ktjav (83)
-eknui (85)
-fhuiyrl (93)
-fktsu (65)
-vugnug (65)
-ilymgq (91)
-clinrg (1033) -> rsancy, jrqorlo, lvklj
-bkextqn (99)
-ekohgo (251) -> xxxqpkx, wkphn
-alkneau (34)
-mnijdlk (85)
-dyxsmz (38)
-mefxonk (50)
-lajidkr (37)
-uiuokpq (89)
-oupzsh (43) -> bzmade, bamxg
-cijptz (18)
-khibjj (89)
-yamclb (91)
-okrdziq (73)
-sbyxyf (8)
-zknziw (18)
-fobzai (75)
-rjsnth (25)
-iaphzk (18)
-lufgosn (10)
-rzkcu (34)
-xlhfyw (471) -> yuswp, limljj
-tcsbho (1842) -> mnmwzz, mnzbkuh, zpidc, cpqti
-docln (85)
-neeqb (7)
-tvcod (88)
-uklsrym (40) -> bbhniy, gddkqw, lhmnd, ihzvygq, nhkeb, wuxhvnx
-qkkzzlm (76) -> imnhql, nbeagw
-qywkuqu (20)
-fvgbg (191) -> iwkntdi, jdrdxu, sqnvvbg, yfdtz
-qlkslp (82)
-iqxwh (62)
-mdneq (623) -> uzhlers, qanbo, tedplb
-msmgk (173) -> fygmpjn, exoft
-euoclfs (241) -> pjzpmq, hpkpw
-vlimzz (19) -> yvqtyi, gwournc, docln, oblsboq
-zoqni (189) -> chlxm, yfmxvay
-oignan (206) -> hdaqxlh, fgbyre
-zpidc (40) -> bujroda, btklib
-aazxafl (215) -> xnmvtem, oafnfo
-yhubw (34)
-xneoi (138) -> vwfhi, cmqwplb
-vefzbc (138) -> dywqvqh, emwbbut
-ruozmjk (73)
-jrwfehi (75) -> kcnim, bdvtvcu, tfsoxgb, tboizos
-iivncbz (73)
-ccuarv (53)
-lrihy (185) -> vchsdif, bgcigo, raakduh, vlbba, igyiie, zoqni
-vewgrvp (73) -> dntphko, svayf, uiuokpq, popplum
-iigvpqy (66)
-fjduphn (91)
-uttujj (11755) -> glwhd, sxfilp, wcexum
-tluap (6)
-exeub (71)
-dzwol (61)
-ilfzi (99)
-cdpgoi (79)
-hxckb (71)
-yoxvx (85)
-theau (46)
-vwnjh (233) -> jqxnf, qfpwln
-jbpjt (27)
-zmsosb (14) -> rrflox, ovluts, rpfmi, ojvlwm
-yoivja (59)
-towlhi (36)
-zcrjb (253) -> qhohy, uwaiki
-josdslh (59)
-xoziel (79)
-fsuzqyz (169) -> duftj, ppqlc, kceusl
-chwjiub (96)
-fpbsu (89)
-qyoqb (19)
-dfeomzr (38)
-kfhnhm (9)
-oevyknd (56)
-buoakk (22)
-wduqgix (77)
-qokscr (65)
-oqbdf (25)
-jjsvfy (199) -> yoivja, gdnsat
-ssdgbnh (887) -> qtsjbq, plurwe, mhndszl, hlcbqu, pgskth, oignan
-lrsedv (213) -> eaqjcju, cekpxgj
-iwkntdi (36)
-qfgzmtz (73)
-rfwgtb (26)
-alcvj (7)
-bvdxf (30)
-ofisj (88)
-mpchqe (27)
-pwizhzr (62)
-wkcyd (75)
-mxzbcqn (81)
-npzdqeg (227) -> tufds, msxhvo, pcsucog
-illjvf (69)
-iyuuh (80)
-fygmpjn (17)
-dvdgowj (5)
-hlcghe (91) -> khibjj, kngbqid
-zvurtb (77)
-ouspx (46)
-dbvxai (76)
-facrq (13496) -> fkbla, ffvprc, yrfqaga, msmgk, hxswghs
-xbcgipi (66)
-wfhyr (37)
-ziyata (221) -> oqlpz, jjtrisl
-muncur (77)
-vlvss (183) -> odvtiti, fazqw
-kvdkwy (96)
-ddldgex (84) -> nqyok, wduqgix
-trtgn (87)
-jitzj (65) -> fvgbg, nbfqgr, zjwpbzs, lndaa, vlvss, gxjvj, zcrjb
-hkhoyje (95) -> frirj, iuhlc
-gtbbuvb (96)
-tfsoxgb (250)
-rohvy (95)
-qhohy (41)
-goimlra (227) -> orxoo, lfxew
-hubbqbi (95)
-vchuc (53)
-svkdyq (9559) -> akmgfo, lhradm, jtauf, aunhcg
-fazqw (76)
-flomey (39)
-apygt (17)
-wjptb (43)
-srhirm (147) -> bicsjoc, dvzlq, olykwbi
-wdeuy (254) -> hubbqbi, rohvy
-yeooycn (93)
-qoyzgsp (28)
-sqkcdf (62)
-rgbvlc (49)
-qinzaf (813) -> aooni, zoewj, ogzrdrk, umlkxqv
-kflize (84)
-isrtfc (201) -> vmutyru, ouymke
-nkhadt (292) -> fppcif, vwnjh, oyvhouc, ekvall, guncf, npzdqeg
-nbbyqsa (40)
-ikfpktb (97)
-maqgick (76)
-xtwdx (156)
-sbyzsq (10)
-vgubuy (74) -> iljwgzf, aihow
-taiho (59)
-cpndnx (11)
-vhtyadn (18)
-aaheijb (54)
-rykadr (19)
-onnylx (32)
-gukuqw (69)
-fooyrq (15)
-zqyua (52)
-vsruoi (55)
-ikmvhid (2745) -> hwovhvw, arsuc, yzrdupu
-vztnh (18)
-khaupo (32)
-cpqti (142)
-qtsjbq (126) -> wekya, rzkcu, alkneau
-pcsucog (42)
-lepja (61)
-ibjvonk (10277) -> xlhfyw, svhbd, misyfn
-rqbjbio (29) -> mqrroj, hjeysaa, wlujpl, vooac, rrggg, yfjenp
-ceuygh (90) -> aqxsjq, qxlucvg
-qzxaqvy (78) -> fwskxtt, jlgvplm
-fwskxtt (84)
-yrkvb (58)
-thdwfw (219) -> umtrod, nhlittn
-zpkbe (73) -> cwtdf, tozktyo, qcrpdy, axtqrx
-hjjkx (87)
-jxyoypa (9)
-ilkqp (40)
-akwvj (238) -> jatnl, iphgmyt, meoeea, gqrfok, ljhwzvv
-lkcddrg (2238) -> lqfyzo, rixnft, hkhoyje
-xprzeeb (19)
-rhodopg (94) -> qfgzmtz, dqdfv
-ttwfig (340) -> rykadr, ykehxw
-kueyf (85) -> ulbbc, nzzfer, azxjd
-zmcgfdp (136) -> tehyhc, obslyn
-ffnabs (20) -> guehoas, nnldikq, ofrwmq, lrsedv, qvkotfd, shfdaba
-arwmalf (143) -> vsgaam, bjabd, ycclns, kkmqko
-gyjpoco (85)
-drmyco (26)
-arqoys (1859) -> urzul, bkvle
-nscav (69)
-tsrogy (69)
-qhafxnl (1337) -> xbcskih, kpxqlr, algqhtz
-yiusa (86)
-zdbqs (43)
-xzppxad (58) -> ltxkw, ollhxuy, qinzaf, wpxxh
-dxyifeb (1862) -> twubx, lkcddrg, uwqgz, uvfyo
-zlzers (49)
-gkkgkp (358) -> wlpyulp, nakmo
-abddskq (50)
-tggkm (43)
-dgwcz (7)
-bhvmgw (29) -> qflouyn, pfphng
-guehoas (283) -> qedst, cijptz, zknziw
-marzlxh (51)
-mizab (60)
-jgkvfa (120) -> ocnna, tcdwurt
-jopjvd (80) -> dnouufu, wjptb
-lwdqnj (25)
-xpzhy (84)
-noipcz (59)
-bbhniy (20) -> itngcua, mmcychg, vugnug, fktsu
-jtjcj (64)
-tgdzl (53)
-gobrf (25) -> gtzcxq, lsdrwz
-arsuc (65) -> rbcqgqv, huwsoc, bnfopv, srqntb, vxdkej, owhjmt
-ogzrdrk (101) -> vztbn, wtxbqe
-oxbkwyr (91)
-yatfpqx (109) -> xrbjn, qywkuqu, thjulip, oiijtm
-jlgvplm (84)
-bcibchp (54)
-glgnecl (16)
-tqikxkp (222)
-bhcal (7)
-vmutyru (47)
-kzwqzqf (46)
-evhsybt (37)
-gdnsat (59)
-cikaze (39)
-jrqorlo (229)
-ovluts (52)
-nbfqgr (169) -> cdpwklz, zjpsm
-nbngkou (73)
-wslsg (31)
-aobitc (69)
-htgxu (24)
-wjolzt (46)
-hzgig (95) -> jrvbacq, rgbvlc
-ulbbc (217) -> bniti, jbepak, iynywq, xbcgipi
-wkphn (7)
-fkbla (207)
-jqinti (52)
-yhiogu (256) -> neusnw, tkpvf
-ebjsluk (39)
-shfdaba (76) -> wpnqet, rjjlus, pjiqvd
-anpnrdt (10)
-jdshuob (491) -> kywfqzv, zpkbe, cfhuce, mzmfygf
-vooac (341) -> lufgosn, sbyzsq, mjpzp
-frohei (59)
-baiaa (15)
-pyrlph (71)
-cgxsmq (25)
-ukvvt (39)
-gaujsyk (26) -> ktaet, yipoeia, qijarlh
-gnjvf (375) -> ajenoz, ripqyzr
-hghnmib (47802) -> vbhnmr, vustse, lybkeg, ikmvhid, oqphsw, xzppxad, gvkcsad
-yrcgsnx (270) -> qfypnb, dbvxai
-kwqrbav (34)
-wdvwub (57)
-viqhfi (89)
-akmgfo (243) -> zhvji, iphncut, oyxbblb, gaujsyk, ybftt
-faecnr (80) -> dfeomzr, yoezrpw
-xskehl (228) -> ubovv, omydd, tluap
-pdosfg (21) -> rlbom, lbjwlov, wgqkdcr
-tkiraal (8)
-aimav (46)
-ecimj (85)
-eikmns (83)
-fqlezvk (71)
-qrlggma (49)
-ztkgsyt (29) -> bfuywyg, uexdnv
-tedplb (50)
-cvrcvgp (86) -> zvurtb, dkcix
-bckuyxm (11306) -> eyyzy, jrwfehi, baesyhf
-ffvprc (65) -> vxajmkg, cichyqw
-jjtrisl (81)
-vantwg (46)
-vlmcmcu (91)
-qdhrchr (89) -> dhwauy, uqlso
-ceoav (29)
-bhrbod (50) -> oxbkwyr, erpvue, zhrnwk, mhjtjp
-yxseri (24)
-kzbvrxk (10)
-kcnim (76) -> zjoxibi, auxqbbc
-ltxkw (30) -> eerktn, nqhdt, jjyjrtr, bfchbs, redqvw, mkrzp, nymguj
-rrggg (371)
-uwqgz (1923) -> torxqh, zmlth, lnctft
-dbwmq (117) -> bmecxwd, lcrwbqi
-kasfuwe (46)
-btbxk (755) -> xajjyba, kxykfr, rymkqd
-njxyw (47)
-fvlfq (94)
-zhvji (162) -> cpazlc, mluykm
-aozoac (77)
-chnkkj (86) -> tfmtk, hddzn
-dkcix (77)
-lxcbjgy (91)
-mofks (30)
-yzrdupu (719) -> wajnxjj, dfvhic, dmkyzy, ziqwzzy
-wxjka (47)
-xitzb (52)
-rvimq (7)
-qddsx (30)
-lvklj (97) -> ydbri, tcukgv
-sjforw (208) -> alcvj, neeqb
-yjvgwdl (91)
-fhxpkd (261) -> kauphp, zdhvqrl, rhnkdt, nhkvp, tejnuve, olspit, srmiagk
-eaqjcju (62)
-ybftt (122) -> oewzluz, ebjsluk
-jgmisxl (49)
-hdaqxlh (11)
-cjmxed (49)
-aqxsjq (84)
-cekpxgj (62)
-tetmzw (121) -> ozatmpe, qbmtmcs
-mqmbcl (96)
-xtyzy (155) -> yhiogu, iphzyj, pvppi, tojyt, krxyaak, ymrogz
-drwfop (48)
-pgskth (86) -> hxckb, lxesg
-pvgzz (72)
-kunzpa (687) -> tadnt, cupsjm, hoomyh
-nhkeb (252) -> caryo, bhcal, mjzksjz, ufitse
-cncak (182) -> qoyzgsp, lpuass
-aituccf (9)
-qfpwln (60)
-laxsl (29)
-yzxzo (38)
-lnctft (116) -> zgevpxx, scchi
-lyvyhkm (8)
-vcktg (1556) -> ztghd, imihjj, ksfok
-dzbrgb (75)
-xbcskih (85) -> fobzai, nxzkuj
-jtouvtb (57)
-ufitse (7)
-upwlxnb (7)
-jysaup (78)
-ysgsry (228) -> glgnecl, xnuoujm
-horqcc (73)
-vfsttaj (27)
-gvkcsad (5412) -> ghsjtj, dgnjf, ziyata, rajtef, kqlsniq, vqclii
-lbjwlov (79)
-vnhvilk (62)
-dntphko (89)
-syzlt (6183) -> tifgptk, iwhqlr, akwvj, kueyf
-hzmhm (1087) -> rvrlma, dchts, emzrj
-neusnw (47)
-vfzby (50)
-cecsr (59)
-uwaiki (41)
-msxhvo (42)
-fgjwz (113) -> qwzmv, xehdglb, kgpwo
-lmuyfcw (164) -> hrovawq, hacwv
-zjoxibi (87)
-viwns (17)
-olykwbi (33)
-meypo (29)
-sbguah (49) -> vlfouc, lficpr
-oyxbblb (92) -> towlhi, fndxl, uxjasn
-bzmade (66)
-lfpzff (238) -> bdinafh, kfmzbvk
-epuaii (88) -> ckheb, kwqrbav
-dwwsu (27)
-xnukvni (207) -> htgxu, lwvnbzs
-zhrnwk (91)
-vfngjd (325) -> hfftu, nymhem
-vztbn (87)
-kxnkbs (19) -> tpipb, vuyzhsh, vapwxei, wbxdta
-bmecxwd (27)
-nymguj (123) -> vkpltts, mbhld
-qlwxeb (52)
-kfrti (10)
-xcvxle (106) -> qddsx, bvdxf
-wbesqn (99)
-kblshw (8)
-qymwy (41)
-ezaypy (9)
-dnouufu (43)
-cyapi (227) -> rothisa, hokyk
-itbsk (30)
-alqim (42)
-hjeysaa (251) -> mofks, itbsk, njogewi, ldfopw
-ljfqvk (44)
-iueejt (5) -> rgfndsx, bhrbod, puwvse
-knzppj (81) -> hrlkgen, nsfsj, wbesqn
-wnjwnr (197) -> hnyqq, oajawn
-xtwdau (77)
-dmeee (93)
-qxfce (38)
-pcqyagx (15)
-bicsjoc (33)
-eeguu (78)
-wbxdta (61)
-gjwaqu (35)
-mzmtuw (95)
-huwsoc (173) -> ouspx, wjolzt
-spdhhoe (167) -> chwjiub, kvdkwy
-hhmwlo (56)
-icgwppo (84)
diff --git a/2017/inputs/day_8.txt b/2017/inputs/day_8.txt
deleted file mode 100644
index 7b63126..0000000
--- a/2017/inputs/day_8.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-ev dec -705 if cag != 2
-b dec -195 if ty >= -8
-red dec -404 if v > -7
-d inc -971 if k >= -9
-k inc 303 if k > -8
-cag inc 539 if ev > 697
-ev inc -11 if d <= -963
-alf inc -634 if xoc < -2
-eb dec 927 if b <= 201
-e dec 67 if eb >= -930
-he dec -29 if qby < 8
-cox inc 193 if b >= 188
-red dec 340 if alf >= -7
-k dec 8 if red > 57
-eb inc -606 if e <= -75
-xoc inc 337 if red == 64
-xoc inc 186 if mk == 0
-cox inc 840 if npo >= -5
-s inc -449 if anb != -3
-eb inc -233 if npo < 2
-npo inc -808 if mk <= 9
-eb dec 139 if eb > -1161
-ty inc -929 if ty > -7
-mk inc 789 if d > -977
-red dec 915 if k < 299
-anb inc 852 if mk == 789
-red dec 242 if swy == -6
-e inc -29 if cag < 546
-alf dec -219 if cag > 535
-red dec -298 if ty < -921
-tm dec 175 if obo <= 2
-alf dec 553 if eb != -1298
-alf inc -870 if s != -449
-v dec 744 if cox < 1036
-d dec -720 if he > 24
-ty inc -201 if k <= 301
-xoc inc 956 if v > -744
-s dec 539 if e >= -100
-mk dec -37 if anb != 852
-mk dec 833 if tm < -167
-ev dec -410 if ev < 686
-s dec 77 if cag != 539
-anb inc 917 if swy >= -2
-obo dec -5 if s >= -997
-qby inc -231 if tm == -175
-ev dec 378 if tm <= -167
-b dec -106 if s < -985
-s dec 301 if e < -89
-npo inc 232 if b == 301
-red dec -960 if mqk < -9
-he inc -789 if k == 300
-npo dec 826 if cox < 1033
-e inc 101 if k > 291
-v inc -898 if he > 27
-alf inc 141 if anb > 1767
-red inc -613 if e < -2
-tm inc -151 if cag >= 530
-k inc -346 if b != 305
-he dec 967 if cag <= 546
-ev dec -931 if cag < 543
-swy dec 309 if qby < -228
-d inc 437 if cox > 1030
-ty dec 586 if ev <= 1249
-alf dec 299 if e <= -2
-d inc 977 if xoc == 523
-d inc 594 if s <= -1282
-ev inc 21 if swy < -306
-qby dec -722 if cag < 543
-k inc -381 if ev < 1259
-alf inc 847 if anb > 1764
-k inc 126 if s <= -1292
-eb inc -109 if mqk > -4
-obo dec 900 if swy < -300
-obo dec 364 if mk <= -35
-swy inc -211 if eb >= -1416
-ty dec -680 if mqk <= 1
-ty dec -235 if cox > 1024
-cag dec -261 if red <= -559
-obo dec -897 if mqk == 0
-tm inc -981 if mk < -49
-ty inc -805 if eb >= -1402
-mk inc 278 if red < -552
-ev inc 63 if v > -1645
-swy dec -388 if xoc <= 530
-mqk inc 187 if obo != -357
-s inc 416 if b < 309
-qby inc 399 if mqk >= 185
-red inc -680 if mqk != 188
-he inc -981 if eb >= -1407
-d inc 225 if tm >= -327
-he dec 158 if d <= 1991
-d dec 74 if qby == 890
-k dec -930 if anb <= 1770
-s dec -546 if mqk == 179
-ty dec 733 if k >= 874
-ev dec 581 if obo == -362
-cox dec -922 if obo == -362
-obo dec 922 if e == 5
-d inc -948 if tm == -326
-cag inc 161 if mk <= 241
-eb inc -580 if e != -1
-anb inc -632 if qby != 889
-red dec -285 if mk <= 239
-qby inc 550 if eb >= -1997
-e dec 930 if k > 869
-eb inc 604 if swy > -138
-obo inc 383 if he != -1100
-s dec -89 if eb <= -1377
-qby dec -821 if ty < -1532
-ty inc 940 if qby >= 2257
-alf inc -421 if swy != -123
-qby inc 787 if b != 293
-alf inc -80 if b < 301
-b dec 205 if eb <= -1378
-qby dec 870 if obo != -892
-d inc 183 if swy == -132
-s dec -81 if mqk != 187
-swy inc 976 if d >= 1138
-red dec 281 if anb == 1138
-xoc inc 681 if d < 1141
-v dec 14 if obo > -902
-he dec -525 if xoc <= 530
-v inc -866 if red >= -955
-cag inc -835 if mk != 240
-qby inc -549 if s <= -781
-eb dec 584 if mk >= 229
-qby dec -711 if obo >= -904
-ev inc -400 if anb <= 1144
-k inc 82 if swy >= 840
-e dec -415 if mk != 229
-red dec -923 if anb > 1128
-v dec 602 if b != 86
-ty dec -699 if ev > 346
-xoc dec 549 if k > 968
-k inc 317 if qby < 2343
-npo dec 919 if d >= 1137
-e inc 421 if e > -519
-eb dec -104 if ev <= 351
-b inc 368 if qby != 2342
-mk dec -987 if ev == 357
-eb dec -509 if alf <= 236
-obo dec -380 if v != -3127
-npo dec -790 if b < 455
-xoc inc 405 if k < 1287
-obo dec -56 if b < 465
-swy dec 194 if k != 1281
-red inc -562 if tm <= -326
-swy dec 75 if e <= -86
-obo dec -4 if ev == 350
-e inc 533 if xoc < 931
-cox inc -584 if d < 1146
-swy inc 506 if eb >= -1354
-obo dec 458 if k >= 1279
-swy inc 447 if e > 447
-qby dec 847 if cox <= 1377
-xoc inc 225 if xoc < 931
-obo dec 301 if b > 462
-cag inc -740 if e > 438
-tm dec -83 if e <= 447
-tm dec -151 if cag <= -866
-npo inc 26 if s < -784
-v inc 12 if cox != 1368
-eb inc -399 if ev > 340
-eb dec 780 if d == 1143
-e dec 87 if tm == -91
-k dec -13 if anb <= 1139
-v dec 829 if swy >= 567
-k dec -229 if ev < 351
-qby inc 972 if xoc == 1143
-s inc 609 if s >= -789
-mk dec -931 if ev > 346
-mqk inc -605 if cag > -880
-v inc 302 if anb <= 1139
-mk dec 342 if v > -3647
-xoc inc -905 if k <= 1523
-qby inc -412 if qby == 1493
-v dec -548 if d > 1142
-xoc inc 311 if obo >= -771
-npo inc -955 if xoc < 551
-swy inc -885 if mk > 821
-ty dec 91 if ty >= 100
-s dec -840 if npo <= -1492
-qby inc 158 if ev > 342
-ev inc 227 if cag >= -878
-alf dec 612 if tm <= -92
-ev inc 395 if he <= -572
-s inc 570 if swy > -311
-s inc 283 if alf > -382
-xoc inc 297 if tm >= -94
-v dec 100 if d != 1153
-cag inc 928 if ty <= 19
-tm inc 829 if obo > -765
-alf inc -94 if ty >= 8
-ty inc -224 if cox <= 1367
-obo dec -352 if d > 1137
-mqk inc 223 if ev <= 580
-cag inc 55 if eb >= -2541
-red dec 969 if alf > -474
-alf inc -564 if e != 447
-qby inc -97 if obo < -400
-red dec -530 if cag > 107
-ev inc -579 if he > -574
-tm dec -788 if eb <= -2528
-alf inc -217 if v > -3191
-tm inc 635 if cox >= 1362
-tm inc -217 if mqk < -189
-cag dec -547 if v != -3191
-red dec -241 if alf > -1045
-red inc -492 if b <= 473
-he inc 46 if b > 454
-xoc inc 86 if ty > 8
-d dec -755 if qby < 1140
-mk inc -347 if obo <= -405
-v dec 870 if npo >= -1497
-npo inc 216 if red != -1287
-anb inc -574 if obo > -414
-ev inc -364 if eb == -2534
-anb dec -825 if npo < -1277
-k dec 587 if cox < 1372
-anb inc -888 if obo > -401
-swy dec -435 if npo != -1283
-e dec 551 if e != 444
-swy dec 772 if alf == -1036
-tm dec -339 if e == 444
-swy dec 259 if mk == 470
-xoc inc -224 if ev >= -359
-ty inc 265 if red >= -1279
-obo dec 449 if mqk > -202
-d inc 891 if e >= 438
-cag dec 606 if b >= 461
-mk inc -894 if v != -4064
-cag dec -128 if d != 2034
-eb dec 723 if eb <= -2528
-swy inc -12 if s < 1525
-s inc -569 if d == 2032
-npo inc 326 if alf >= -1038
-cox dec -213 if anb == 1379
-obo dec -222 if d > 2026
-ev dec 809 if anb == 1393
-s inc -637 if alf != -1037
-s dec -892 if xoc == 942
-eb inc -248 if cag != -491
-b dec 499 if qby != 1142
-b dec 543 if d <= 2033
-mk inc 345 if mk < -411
-ty dec -284 if npo != -960
-d dec -327 if eb < -3498
-cag inc -743 if mqk > -196
-cag dec 708 if ev > -374
-eb inc 935 if swy == 113
-d dec -908 if swy == 113
-npo inc -753 if swy == 113
-cag dec -227 if alf > -1045
-red dec -658 if v <= -4061
-cox inc -66 if anb < 1397
-cag dec -209 if b > 463
-cox inc -245 if alf != -1037
-alf dec -212 if s >= 2402
-d inc 590 if d >= 3273
-xoc inc -325 if xoc > 935
-red inc 935 if he >= -519
-tm dec 332 if ev >= -366
-cag inc 583 if xoc <= 615
-e inc -892 if e >= 439
-npo inc -628 if obo > -629
-red inc -819 if tm <= 1958
-qby dec -960 if ev > -372
-red dec -781 if tm < 1959
-cox inc -831 if xoc < 621
-b inc -830 if ty >= 559
-anb inc 654 if cag < -1507
-cag dec 995 if red >= -659
-npo inc 356 if b < -361
-tm dec 286 if qby > 2093
-mk dec 369 if ty <= 569
-mk dec -971 if qby != 2112
-swy inc 137 if xoc > 617
-alf dec -743 if npo > -1355
-alf inc 39 if ty < 569
-tm dec -42 if s <= 2413
-anb inc -685 if alf != -48
-ty dec 660 if anb <= 1360
-npo dec 313 if ev < -359
-cag inc -611 if obo >= -646
-tm inc 728 if v <= -4067
-swy inc -4 if cag != -3124
-npo inc 359 if xoc >= 613
-obo inc 694 if b != -358
-obo dec 439 if e >= -452
-npo dec -160 if xoc <= 626
-red inc -659 if e <= -439
-b inc -445 if obo == -382
-red dec 543 if k > 931
-s dec 274 if qby != 2093
-cag dec -338 if k <= 934
-alf dec -211 if alf == -45
-v dec -451 if tm == 1706
-obo dec -465 if v > -3606
-k inc 415 if qby > 2100
-anb dec 220 if swy == 109
-alf inc -3 if cox < 477
-d dec 164 if s > 2131
-qby dec -974 if alf >= -40
-cag dec 891 if anb < 1146
-d dec -337 if qby > 2100
-cag dec -628 if d != 3442
-k dec -648 if alf == -46
-red dec -329 if k == 1996
-e inc -891 if alf <= -38
-cox inc -626 if ty >= -99
-mqk inc -349 if mqk >= -204
-alf inc 388 if qby > 2092
-mk inc -430 if d > 3443
-eb dec 338 if alf < 352
-mk inc -215 if cox == -147
-e dec 171 if b >= -819
-alf dec -205 if d != 3433
-d inc -490 if qby == 2102
-e inc 612 if he > -528
-anb inc -811 if mqk > -543
-he inc 685 if cox >= -154
-red dec -748 if anb <= 1129
-ty dec -872 if ty >= -97
-b inc -920 if eb == -2908
-s inc -701 if mqk >= -548
-tm inc 136 if alf > 545
-he dec -100 if e != -898
-qby inc 552 if anb >= 1132
-xoc inc 700 if xoc == 617
-xoc dec 827 if obo != -385
-anb inc 738 if d != 2956
-eb inc 476 if mqk == -544
-s dec -100 if ev == -366
-obo inc -602 if e == -898
-tm inc -80 if xoc == 490
-eb inc 160 if eb == -2432
-he inc 229 if he == 159
-tm inc 453 if b > -1739
-obo dec 786 if qby < 2655
-swy inc -120 if qby != 2651
-ev dec -382 if obo != -1770
-qby dec 41 if eb < -2265
-cox inc -991 if obo > -1765
-cag inc -713 if obo > -1773
-he inc -958 if red <= -1522
-ty inc -426 if mqk != -551
-k inc 902 if ty == 349
-npo dec -550 if eb < -2274
-swy inc -30 if d < 2954
-anb dec 990 if npo < -1139
-ty dec 301 if red >= -1529
-ev inc -687 if ty > 347
-ty dec 261 if he <= -802
-b dec -313 if ev < -1043
-alf dec 231 if k != 2889
-npo inc 956 if qby >= 2618
-cag inc -39 if npo <= -1135
-he dec 117 if qby > 2605
-v inc -574 if cag > -4421
-npo inc -179 if mk <= 538
-v inc -737 if he < -910
-npo inc 722 if swy < -37
-mk inc 200 if alf != 313
-npo dec -604 if mqk == -544
-ev dec -794 if ev > -1048
-eb inc -384 if npo == 3
-he dec -10 if qby != 2614
-e dec -317 if e > -906
-e inc -662 if d >= 2946
-s inc 941 if npo != 0
-xoc inc 765 if e <= -1235
-b inc 434 if ty > 354
-e inc 513 if anb > 880
-cox inc 146 if mk > 734
-mk inc -31 if alf == 316
-qby inc 887 if mqk == -547
-obo dec -87 if mqk != -536
-he inc -230 if tm != 2217
-e dec -469 if alf < 326
-alf inc 608 if d != 2950
-mqk dec -78 if v < -4355
-b inc -865 if ty < 356
-s dec 57 if npo < 7
-npo dec -100 if cag > -4428
-cag inc -217 if red > -1522
-b dec 338 if k == 2898
-npo inc -324 if k <= 2906
-mk dec -763 if obo >= -1687
-e inc 760 if d > 2945
-e dec 984 if v == -4350
-obo inc 651 if he <= -1126
-red dec -380 if d >= 2950
-b inc 11 if k > 2888
-v dec -406 if red <= -1142
-anb dec -900 if e <= 501
-ty inc -2 if mk != 1471
-tm dec -655 if qby > 2619
-k inc 142 if mqk < -540
-ev inc -346 if xoc != 1265
-xoc dec -284 if k >= 3032
-d inc -908 if k == 3040
-e inc 36 if swy == -41
-xoc dec 372 if alf != 930
-s dec -327 if xoc != 1159
-e inc 56 if ty < 343
-v inc -445 if npo == -221
-xoc dec 265 if s >= 2746
-k dec 604 if swy >= -42
-alf inc 918 if eb > -2662
-mk inc -227 if cox != -150
-cox dec -693 if qby <= 2614
-d inc 88 if k != 2434
-tm dec -278 if k > 2428
-v dec 384 if red <= -1145
-npo inc 854 if ev != -1390
-he inc 69 if xoc >= 893
-d inc 587 if eb <= -2650
-b dec 873 if anb == 1785
-tm dec -557 if mk != 1230
-k dec -335 if k <= 2437
-d inc -215 if cag != -4424
-obo dec -754 if red == -1140
-d inc 369 if v != -4766
-tm dec -12 if red >= -1155
-anb dec -836 if xoc <= 892
-s inc -170 if cag <= -4422
-k dec -717 if mk != 1234
-npo inc -790 if k >= 2764
-obo dec -87 if red <= -1157
-v dec -894 if ev >= -1401
-cag inc -440 if swy >= -49
-e inc 31 if d > 3091
-v dec -581 if he != -1057
-anb dec 760 if k <= 2775
-swy dec 513 if v != -3295
-s inc 840 if mk > 1242
-npo dec -359 if mqk > -549
-red dec -958 if ev >= -1403
-ty dec -246 if qby != 2617
-k inc -28 if cox <= 544
-npo inc -881 if cox > 545
-ty dec -733 if ev < -1391
-e dec 750 if cag <= -4863
-cox dec -44 if alf < 1843
-mk inc 751 if ev < -1390
-he inc -968 if mk > 1980
-d dec -431 if npo != 202
-v inc 406 if xoc != 902
-tm inc 635 if mk <= 1991
-npo dec 401 if anb <= 1022
-v dec 940 if obo >= -1034
-npo dec 572 if qby < 2619
-swy inc 934 if anb != 1021
-eb inc 499 if swy == 893
-mqk inc 17 if s < 2568
-mqk dec -704 if alf != 1836
-ty inc -301 if mqk != 162
-npo dec 29 if cox >= 579
-alf inc -677 if npo > -409
-mk dec -399 if npo == -399
-cox dec 639 if e == -213
-ev inc 602 if qby < 2617
-ev dec -238 if eb != -2149
-mqk inc 26 if k > 2734
-anb dec -153 if v > -4238
-b inc -331 if cox != 584
-mk dec 411 if s > 2574
-xoc dec -631 if xoc == 902
-mqk dec 795 if d != 3083
-swy dec -911 if anb > 1184
-anb dec 368 if e >= -217
-b dec 463 if qby != 2612
-qby dec -127 if v <= -4226
-alf inc -848 if npo != -409
-obo dec -499 if s >= 2571
-swy dec 165 if v < -4225
-alf dec 71 if mqk == -609
-b dec -717 if d != 3090
-cag inc 721 if tm <= 3694
-xoc inc 304 if ty > 1033
-swy inc 728 if d < 3096
-tm inc -690 if eb >= -2163
-qby inc 979 if ty == 1025
-s dec -175 if swy >= 1449
-s dec 639 if he > -2038
-mqk dec 615 if red <= -189
-he dec 481 if cox >= 578
-anb inc -329 if xoc <= 1532
-anb inc 350 if red != -192
-obo inc 720 if s != 2108
-ev dec -316 if s > 2111
-mqk inc 322 if alf == 246
-d dec -723 if cox > 580
-b inc -301 if alf >= 254
-cox dec 847 if xoc > 1528
-v dec -298 if cox <= -254
-eb dec -842 if cag != -4874
-he inc 483 if eb != -1324
-b inc -160 if npo >= -400
-tm dec 885 if obo == 187
-anb inc -505 if tm <= 2129
-red dec 387 if e < -212
-e dec 761 if npo <= -397
-he dec 303 if tm == 2128
-s dec 308 if b < -3718
-mqk dec -207 if he > -2041
-ev inc -655 if xoc != 1533
-s inc -601 if d > 3809
-ev dec 666 if cox < -256
-ty inc 384 if he != -2041
-v inc -560 if ty >= 1403
-ty inc 446 if obo != 194
-obo inc -570 if cag != -4868
-obo inc 21 if k == 2743
-cox dec -183 if mk != 1973
-s inc -780 if eb <= -1306
-b inc -173 if tm != 2131
-b inc 489 if v > -4488
-swy inc 337 if s < 431
-ty inc 36 if alf >= 240
-xoc inc -941 if s < 427
-xoc dec -533 if xoc <= 600
-eb dec 269 if swy == 1795
-eb inc -718 if swy < 1796
-xoc dec 319 if eb <= -2039
-ev dec 855 if npo < -390
-v inc 208 if d >= 3805
-d inc -846 if tm == 2122
-red inc -636 if mk <= 1977
-d dec 695 if ev == -1764
-e dec -864 if cox == -268
-v dec -913 if d == 2270
-alf inc -364 if cox > -270
-he dec -211 if cag != -4862
-b dec 624 if b != -3887
-v dec -953 if b < -4514
-ty dec 631 if b < -4518
-e dec -496 if obo <= -367
-d dec -911 if cag >= -4872
-mk inc -549 if xoc >= 1117
-alf dec -586 if e <= -971
-cag dec -919 if k == 2743
-qby inc -803 if cag <= -3943
-k dec 18 if k > 2734
-ty dec 537 if qby > 2909
-swy dec 973 if tm >= 2122
-d dec -502 if qby == 2916
-ty inc 50 if he >= -1816
-cag dec 344 if e > -985
-cag inc -967 if anb < 311
-ev inc 193 if npo != -393
-ev inc -934 if cag >= -5265
-ev dec 416 if d == 3683
-ty inc -963 if d < 3688
-s dec -904 if s <= 424
-b dec 52 if b >= -4524
-alf inc -427 if obo <= -363
-red dec -686 if cox > -268
-b dec 551 if mqk == -695
-xoc dec -670 if v > -2428
-anb inc 310 if ty >= 401
-ev dec 768 if red < -519
-tm dec -391 if k == 2725
-b inc -624 if xoc < 1797
-s inc -962 if ty != 391
-xoc inc -482 if mqk > -703
-alf inc -110 if v < -2418
-mqk inc -812 if s < 1329
-cag dec -584 if red >= -529
-qby dec -503 if npo >= -405
-npo dec -592 if npo <= -396
-anb inc -611 if anb < 313
-anb inc -537 if red < -538
-eb inc 781 if cag < -4664
-xoc dec -241 if he >= -1821
-k inc -974 if swy >= 816
-eb dec -649 if ev > -3690
-he dec 258 if b > -5750
-cag inc -618 if tm >= 2513
-b inc -132 if npo == 190
-cox inc -187 if mk > 1427
-tm dec 244 if npo <= 198
-cag inc -21 if alf != 350
-npo inc -332 if ev >= -3696
-obo inc -144 if ev < -3698
-npo inc 652 if k >= 1744
-anb inc 682 if b > -5739
-mk dec -585 if eb > -607
-ty dec -395 if red <= -521
-d dec -118 if cox < -260
-obo dec 97 if d < 3797
-mk inc 561 if s != 1327
-mqk inc 341 if xoc < 1558
-eb dec 136 if xoc >= 1546
-eb dec -144 if b == -5744
-b dec 416 if xoc < 1560
-e inc -688 if red <= -520
-cag inc -846 if cox <= -264
-e inc 858 if mk >= 2009
-d inc 120 if mqk < -1165
-eb inc 275 if anb < -304
-d dec 426 if e <= -801
-obo inc -175 if alf == 358
-b inc 411 if v > -2433
-anb dec -285 if qby != 3420
-e inc -899 if cox != -257
-ty inc 764 if xoc >= 1552
-eb inc 157 if tm == 2273
-alf dec 416 if xoc <= 1562
-mqk inc -251 if d <= 3498
-s inc -405 if e != -1698
-he dec 280 if v < -2419
-mqk dec 783 if e == -1705
-s dec -530 if mk > 2013
-cox dec 601 if qby >= 3421
-alf dec -214 if cox <= -253
-cox inc -280 if v < -2418
-obo inc -617 if k > 1749
-tm dec 400 if v >= -2427
-obo inc -810 if swy == 820
-cag inc 245 if red < -524
-k inc 939 if obo < -1973
-xoc inc -867 if d != 3499
-ev inc 930 if ev >= -3690
-npo inc 490 if npo == 513
-obo dec -127 if tm <= 1874
-v inc -937 if cox < -539
-cox inc 806 if eb < -315
-tm inc 868 if b == -5749
-d inc 370 if cox != 264
-mk dec 735 if d >= 3488
-v dec 651 if tm >= 2736
-d dec 751 if d == 3495
-eb inc 73 if eb == -320
-anb inc 946 if mqk >= -2202
-k inc -879 if tm != 2731
-cag dec 329 if cag >= -5075
-v dec 110 if npo <= 998
-cox inc -324 if v != -4012
-s dec -43 if xoc <= 688
-xoc inc 154 if ty <= 1552
-npo dec 126 if e == -1705
-mqk inc 631 if qby < 3428
-obo dec 875 if k < 882
-eb inc -159 if d >= 2737
-ty inc 158 if mk < 1266
-cox inc -726 if cox != -65
-red inc 699 if he <= -2352
-anb dec 348 if he == -2353
-mqk dec -25 if cox <= -792
-he inc -72 if ty == 1550
-tm dec -396 if obo >= -2712
-mqk inc -730 if alf >= 153
-ty inc 950 if b <= -5741
-qby inc 711 if b <= -5747
-he inc 990 if ty == 2500
-eb inc 691 if cag <= -5394
-v dec 315 if v >= -4001
-cag inc 831 if k == 872
-cag dec -285 if s != 974
-tm inc 500 if k >= 865
-ty inc -407 if ev >= -2761
-ev dec -960 if v >= -4019
-anb dec 698 if cox < -781
-swy dec 265 if cox <= -783
-e dec -962 if anb < 237
-he dec -152 if swy != 555
-npo dec -416 if alf < 159
-red dec 450 if qby > 4127
-cag inc 253 if s <= 964
-cox dec -969 if tm <= 3634
-e dec 442 if qby < 4135
-mk dec 890 if qby > 4128
-cag dec -934 if ty != 2085
-cox dec 905 if k != 876
-red inc 595 if k <= 862
-b inc 105 if npo > 1286
-obo dec 502 if mk == 394
-ty dec 533 if obo != -2718
-ev inc -6 if mk < 386
-npo inc -144 if d < 2746
-e inc -232 if ev >= -1813
-alf inc -78 if ty > 1553
-eb inc -637 if ev != -1796
-tm dec 132 if e != -1425
-swy inc 667 if alf == 78
-red dec -166 if mk <= 387
-swy dec -173 if v >= -4014
-qby inc 788 if qby > 4121
-ty dec 172 if qby <= 4919
-red dec 447 if tm == 3501
-obo dec 366 if alf == 78
-he dec -842 if mqk != -2305
-xoc inc -10 if d >= 2736
-ev inc 517 if cox != -726
-mqk dec 865 if npo != 1151
-obo inc 29 if red <= -552
-qby inc -337 if b == -5644
-cag dec -970 if mqk != -3172
-e dec 343 if xoc != 827
-d dec -890 if v == -4017
-v dec 793 if anb > 220
-cox dec -442 if he == -599
-eb dec -759 if anb > 225
-obo dec 45 if k == 872
-obo dec -534 if e > -1764
-cag inc 344 if npo >= 1149
-eb inc -458 if e <= -1764
-obo dec 55 if mqk > -3167
-s dec -487 if v > -4813
-xoc dec -51 if d >= 2744
-ty dec 568 if ty >= 1387
-cag inc -698 if cox <= -276
-cag dec 162 if mqk > -3170
-k inc 563 if qby > 4579
-alf inc -784 if tm >= 3498
-mqk dec 520 if obo > -2624
-npo inc -780 if qby > 4576
-alf dec 152 if he >= -602
-v inc -614 if eb <= 415
-he dec 659 if k < 1445
-ev inc -49 if d >= 2740
-e dec 302 if v >= -5424
-ty dec -877 if alf < -867
-qby inc 368 if swy != 1394
-anb inc 732 if swy < 1396
-mk inc 61 if ev > -1344
-b inc -66 if cox == -280
-npo inc 11 if swy <= 1397
-swy inc 292 if alf >= -852
-red inc -606 if mqk == -3684
-e dec -460 if cox > -272
-s dec -469 if cag > -2898
-tm dec -717 if obo > -2618
-xoc dec -796 if cag != -2893
-ev inc -145 if tm < 4222
-e dec 892 if red == -1167
-red inc -403 if red == -1164
-tm dec 519 if npo != 389
-cag dec -107 if cag <= -2900
-ev inc -385 if d > 2743
-qby inc -444 if alf <= -857
-ev inc -201 if swy != 1398
-npo dec -851 if s >= 1922
-s inc 975 if s <= 1923
-alf inc -906 if v != -5413
-obo dec 870 if ty >= 815
-obo inc -26 if anb == 959
-e dec -65 if e <= -2951
-ty dec -835 if anb == 958
-anb dec -49 if swy > 1394
-mk inc -253 if mqk <= -3680
-e dec -862 if b != -5708
-qby dec -293 if s == 2896
-s inc -845 if cox != -271
-xoc inc 509 if npo >= 387
-obo dec -758 if mqk >= -3675
-v inc 370 if b < -5703
-cox dec -986 if red >= -1172
-b inc -682 if d >= 2739
-k dec 568 if v >= -5055
-mk inc 451 if alf == -1764
-ty inc -56 if mk <= 645
-eb dec 173 if s <= 2051
-s inc 836 if ty != 764
-alf dec 345 if cag <= -2887
-cox dec 206 if k != 867
-eb inc 44 if s > 2053
-d dec -294 if cag <= -2891
-he dec 904 if swy >= 1386
-ty dec 499 if swy < 1399
-e dec 891 if tm > 3698
-b dec -732 if v < -5057
-qby inc 722 if red != -1168
-e inc -609 if npo != 379
-b inc 741 if e < -3525
-b inc -833 if tm >= 3701
-red inc 282 if ev > -2072
-obo dec 441 if b < -5647
-xoc dec -612 if anb != 1005
-s dec 67 if mk > 647
-cox dec -341 if red > -879
-v inc 316 if qby <= 5519
-mk inc -251 if ty == 271
-ty dec 587 if b <= -5658
-anb dec 204 if d < 3044
-he dec -358 if qby < 5521
-s dec -594 if obo < -3946
-xoc dec -802 if d > 3029
-alf dec -536 if alf <= -2105
-tm dec 209 if cox <= 711
-s inc -142 if anb > 809
-s inc -571 if mqk >= -3676
-npo inc 607 if alf == -1563
-swy inc -438 if swy >= 1388
-b inc 325 if xoc != 3092
-k dec 338 if s <= 2650
-cag dec -748 if he == -1804
-npo inc -186 if npo <= 382
-cag inc -920 if tm != 3483
-swy dec 288 if mk >= 652
-ty dec 362 if mqk != -3685
-alf inc 291 if anb == 811
-mqk inc 203 if red == -890
-swy inc 712 if eb >= 231
-ty dec 327 if v > -5052
-npo inc -453 if mqk == -3684
-cox inc 747 if mqk < -3685
-qby dec 844 if cox >= 698
-cag inc 785 if swy != 1659
-red dec -820 if xoc > 3086
-anb inc -2 if cox < 709
-cox inc 91 if cag <= -2280
-cox inc 988 if mk <= 643
-ev inc 895 if ty != -433
-red dec -411 if npo == -259
-npo dec 831 if npo > -261
-k dec 799 if mk == 643
-qby inc 373 if v != -5054
-e inc 949 if swy > 1668
-qby inc 278 if d > 3037
-eb inc -839 if obo != -3946
-mk dec 758 if anb <= 800
-npo inc -662 if s != 2642
-e inc -807 if e < -2575
-cag inc 755 if swy <= 1669
-e dec -532 if swy > 1662
-alf dec -4 if eb <= -596
-swy dec -552 if ev <= -1170
-d dec -857 if cox != 1700
-anb dec -31 if anb > 798
-eb dec -482 if npo < -1759
-ty inc 820 if d == 3897
-xoc inc -846 if v >= -5054
-alf dec 312 if d != 3895
-obo dec -531 if npo >= -1752
-b dec 722 if ev > -1177
-d inc 912 if ev == -1173
-e inc -497 if cag <= -1514
-b dec 551 if eb <= -599
-mqk dec -130 if alf >= -1576
-obo dec 426 if s >= 2649
-mqk inc 672 if cox >= 1698
-red inc -879 if alf <= -1568
-he dec -503 if cox != 1687
-tm dec 117 if ev != -1173
-he dec 237 if mk < 645
-qby inc 189 if eb != -601
-k inc 820 if k < -279
-mqk inc -594 if obo <= -3421
-k dec 375 if v > -5041
-cag dec 298 if d != 4807
-b inc 985 if ev != -1163
-tm inc -697 if cox >= 1687
-v dec -940 if swy >= 2212
-k inc -260 if d >= 4806
-ty dec 73 if k < -526
-swy inc -530 if s <= 2654
-mqk dec 636 if swy >= 1686
-d inc 32 if qby <= 5516
-v inc -809 if v <= -4103
-e dec 380 if k != -540
-ev inc -651 if b == -5939
-qby inc 352 if alf >= -1576
-v inc -256 if obo > -3416
-mqk dec 28 if red <= -527
-alf inc 395 if npo > -1762
-ev dec 317 if d < 4837
-cag inc 74 if red >= -528
-mk dec -575 if anb == 833
-cag dec 744 if obo == -3421
-mk dec -455 if qby == 5868
-k inc 350 if cag <= -2266
-d inc 730 if npo <= -1749
-ty dec 180 if mk != 1673
-xoc inc 364 if cox == 1694
-anb inc 937 if cox == 1694
-s dec 459 if tm >= 2785
-cox inc -594 if cag != -2271
-cox dec 874 if cox > 1102
-xoc dec 289 if alf > -1178
-e inc -178 if obo < -3413
-red dec -965 if obo >= -3416
-npo dec -47 if ty == -497
-alf inc -264 if npo < -1697
-v inc -518 if alf == -1429
-red dec -264 if swy == 1697
-k inc 540 if obo > -3415
-ev dec 208 if tm != 2799
-npo dec -967 if tm >= 2788
-xoc inc 106 if swy == 1691
-eb dec -276 if s >= 2185
-b inc -151 if mqk == -4812
-he dec 120 if he <= -1534
-e inc -236 if cox >= 1091
-tm dec -25 if alf == -1436
-xoc inc 618 if s == 2186
-b dec 269 if qby != 5876
-cag inc -911 if cag != -2267
-mqk inc -68 if he == -1658
-alf inc -267 if ev > -2035
-cag dec -228 if npo < -733
-k inc -527 if cag > -2043
-qby inc 341 if red == -533
-xoc dec 539 if mqk >= -4879
-d dec 884 if ev == -2032
-mk dec -837 if ty == -497
-tm inc -879 if k == -707
-k dec -32 if tm > 1907
-e dec 771 if ev > -2026
-qby inc -732 if s <= 2192
-ev dec 629 if swy < 1700
-obo dec -799 if e > -4138
-e dec -954 if k >= -683
-ev inc 177 if eb == -329
-d inc -151 if cag < -2032
-b dec 967 if alf > -1711
-e dec 836 if b == -7326
-he dec -543 if eb > -337
-d inc 478 if alf == -1705
-mqk dec 251 if xoc < 3047
-v inc 235 if anb == 1770
-xoc inc 94 if mqk > -5134
-swy dec -106 if s > 2176
-cox inc 591 if xoc != 3138
-eb dec -594 if eb == -329
-he inc -389 if qby == 5469
-swy dec 680 if ty != -487
-alf inc 713 if ev < -2483
-mqk dec 533 if b != -7332
-mk dec -282 if tm <= 1920
-d dec -878 if tm >= 1913
-ev inc -821 if b > -7327
-s dec -229 if qby > 5475
-tm dec -671 if swy > 1115
-mk dec 703 if eb > 262
-cag inc 96 if v == -4682
-alf inc -771 if mqk != -5672
-eb inc 140 if b > -7322
-swy inc -493 if eb != 270
-he inc 826 if eb == 273
-v inc 82 if s <= 2408
-anb inc -898 if tm <= 2585
-mk dec 735 if red <= -531
-obo inc -704 if eb >= 262
-cag dec -145 if tm == 2585
-k dec -952 if swy > 620
-mqk inc 818 if eb == 265
-he inc 229 if b > -7325
-v dec -717 if npo != -746
-npo inc -329 if d == 5890
-xoc inc 820 if v > -3957
-ev inc -751 if alf != -1768
-he inc -105 if npo == -1066
-tm inc -86 if swy <= 627
-npo inc 83 if qby < 5486
-npo inc 829 if mk != 1347
-swy dec -554 if tm >= 2504
-anb inc 836 if red <= -524
-npo dec -878 if b > -7328
-cag inc -276 if alf != -1763
-red inc 215 if qby >= 5469
-eb inc -509 if d >= 5884
-xoc dec -707 if he >= -1119
-s dec 42 if cag > -1801
-s dec 63 if obo >= -4125
-mk dec 358 if cag <= -1793
-eb inc 95 if cag <= -1793
-eb dec -637 if b >= -7323
-ty inc -617 if xoc != 3854
-mqk dec 510 if ty < -1112
-he inc -285 if tm != 2499
-ev inc -547 if qby < 5487
-mk dec -915 if npo < 730
-eb inc -953 if e > -4036
-obo dec 412 if he >= -1108
-npo inc -925 if d < 5888
-ev inc 930 if cag < -1792
-v inc 658 if npo <= 726
-ev inc 892 if mk <= 1918
-ev inc 756 if b == -7326
-qby inc -574 if s > 2307
-npo inc -638 if red >= -326
-tm dec 248 if mk < 1913
-cox inc 865 if s < 2317
-cox dec -950 if d <= 5893
-mk dec -632 if he <= -1108
-v inc 176 if d <= 5893
-mk inc -805 if ty != -1120
-ev dec 973 if npo < 89
-swy dec -601 if s < 2308
-e dec -146 if cox < 3509
-mqk inc 321 if cag > -1803
-xoc inc -534 if alf >= -1764
-d dec 747 if ev >= -3004
-npo inc -826 if obo != -4120
-xoc inc -343 if ev < -2994
-b dec 415 if anb <= 1708
-b dec 323 if xoc > 2976
-b inc 697 if ty <= -1118
diff --git a/2017/inputs/day_9.txt b/2017/inputs/day_9.txt
deleted file mode 100644
index eb4d605..0000000
--- a/2017/inputs/day_9.txt
+++ /dev/null
@@ -1 +0,0 @@
-{{{{{<!!!>!>'!!!>!!!!!!!>u!!!!!>},<'>,<!>e{o!!!>!'>}},{{{<!!u<>},<!!!!!>!'!!a}!!!>,<!>!!!!!i!!,e!>,<i{o!>},<!!>}},{{},{{<e},!>},<!{"!!'e'>},<auu<oa{!!!>!i>},{<a!!,'<!>>,{<a}!!!>a>}}},{{{{<!!'!>,u!!,}!!!>!!"'!!!>,i!!e>},<!!}<!>},<!!!!'i!!!>ii{!>},<!>,<!!"!>">}},{<!!ua<!>},<{!!!>!>},<!<e''!!!>ou!!!!!>!"!!!!!!!>!!>,{<!>},<u!!a!>,<!><"ui!!,u'!>,<!!!>!!o!!a>}},{{<"!!<<!>,<!>},<o{<e!!!>!!"<!>},<o>}}}}},{{{{{{{{{<!>!>,<,>},{<!>,<,}!>},<!a"!!!>},<,!!!>,<!!!>!!!>'>}},{{<{}!!e!!!!>},{<e!!!><!!!!'!>,<ea!!u'i,e{!i>,<""a!!!>},<o>}},{<!>,<!u<!!!!au!!!>!eia'!>},<!>,<!<>,{}}},{<,oo>,{{<!>},<ei,{<oeo,!!'a!!!>!>},<''>,{<{e!!!>!!!>}>}},{{}}}},{{<i!!'}u!>>}}},{{{{<!>,<oe}'u<!>,<e"e!a>}},{{}},{{{{<!!!!!>o!!!>!!"o!!!>>}},{<'>}},{<e>}}},{{<!>,<!!o<<!>i>}},{}}},{{{<a!>!>},<!!!!{!a,!!!>{!"i!}oie>},{<e!!!!!>,<,">}}},{{{},{{{{{{<{uu{'!!>},{<>,<!aeoae>}},{{{<!!!>,<!<<!>,<!!!!i<!!!ue!>,<ui}o!!e>}},<!>,<!!e"i!!'{"'>}},{}}},<'i!!ueiu,!>},<!>},<!>!!<"}!!!>,<!>},<>}}}},{{{{<,!>},<',!!',ei!>!>},<!}!!!>i!!}ee,>,{{}}},{{{<'a'!!e!"i!>o!!!>!!!>!!!>{!!!>,<,>},<ei!<!!<!{e{ua>},{<!!!>,<{!!!!!>!!,!!!>>,{<,!!>}},{<!>,<!>!>}e!>},<!!!>}{'!!!>o>}},{}},{{{<!!!uu!!!!!!!i<>,{<,}"!>!!!>}o!>,<>}}},{{{{{<!>,<u!oo!>,<!!}a<>},{<!!!'!>o>}},<o!>,<!<!>,<<ii>}},{},{{<<!>,<>},{<i!>"o!!aue,>,<i!>},<!>},<<!!e!!i>}}},{<!>},<!!{"!>,<!o!}!>},<o,o'!>!!a,e!!!!!>,<>,{<u"!!!>!>},<!!>}}}},{{{{{<!>},<!!!>!>,<o>,{<!!!!!>!!!!o!>},<!>u!>,<!!!>i!o!>!e<!!!>''!>!>i>,{{<,u'!>i"o!!"}>}}}}},{<!!!!'}{>}},{<!>"}{!>},<!>},<i<!!!>,<i<>,<"!>,<"u>},{{}}},{{{{{<!!'e!!!!!>>,<!!a{o!>u,,o}"{>},{<!>,<<,!!!>,!>o!,!>,<!!!!'>}}},{{{<uo!!!>!>},<!>,<e>,{}},{<!!'a",!}!!!>!!i>,{{},{<!!!!!e!!"e!>},<'{<!!!>},<o!!u!!!!!>{{!>,<>}}}},{{<,<!,!!">},{{{}},<!"o<o!!}!>},<!>,<{!!!!!>"o!!<,e!o!!!!!>},<!>},<>},{<i!>},<>}},{{<'!>!>!>,<>},<"io!!!''!!!>!!o!!o!!!>,<<i<i!!!>!>,<>}},{}},{{{<'i!!!'}!!!>!>!!u!!!u!>oo!>},<>},{<!!,i!>,<!!a!>!>,<u!>},<ae>}}}},{{<{i!!iu!,!!'!!!!{"!!!>>,{<!a'>}},{{<",!>a{a!!{i!>,<!>},<}u!>,<!>!!oii>},{{<'u!!"!!!>}a!!e!aa!>,<i!!!>!!!>,<<>},<!>},<"}"!!!>i!>,<>}},{{<!!u!a',"{>,{<'}"!!!o!>},<!!'!!<a,,"!!,uo>}},{<e!>,<e{!!,}<!!<!!eu<<uui>,{<{!>,<"!>,<,!!,!!,e!!{{a,!!!!!>},<<a>}}}},{{<}!>'!!{,<!}!!"!!e!!u"e,!!i>,<!!!>e!>,<!>},<!!!!!>>},{{{{{{<!!""!!!a!u>}}},{}},{{<eio>}}}}}}},{{{{},<!!'<!!!>},<u!>!!!!i}e!!},!>,<{!>,<!!!>>},{<'!'''!>o"},!!e{!"o!>,<u!!!>{!>u>,{}}},{{{<!>,<u"o"{!!!>!>!!o!!}iou>}},{{{},<io<!!'"!>,<!>,<!!!>a<>},{<!>,<a!>},<<o!!!>{i!!o>,<!ao!>,<!!"!!u{!!{!!!!<!!e<!!a}{u}{!!!!a>}}}}},{{{{<!!!><!>},<!>},<a!"!>,<,!!!!!!,!!!>,<a!!e>}},{{<!!o<!u!!ee{>},{<!!!><<o<"e>,{<!>},<{!,!!u!!!!!!!!!>},<!!!>,!!!>i!!{<!>,<!!>}}},{<!!!!!>o!>'<!{<{!!{!!>,{<"!>!>!>},<!!!><'{o{e!>,<,a}!!i>}}},{{},{},{<!!!!a!>},<!!!}!>,<!!!>e!!!!!!!!e}!!!!a!!'}">}},{{{{<!>},<i!!!>!>},<uu<o{io>},<e<!!!>!!!>i}!>,<<>},{},{{{},{<i"!!a!!i!!!!}!>},<!}{<!'o!uu,>}},{<u!!eo!!{eo!>,<'!!!>{!!>}}},{{},{<!!!>'""!o!>,<>,<i<!>!!!>ue!!!>i{'!u<<!!!>,!,>},{{<e>}}},{{{},<!>,<!!!>,i}},!>,<!!e!!>},{{<!!!!}e!!i!'"!iu!>},<!!{!!u>},<u!>>}}},{{<"}<!!!>},<ou!o}!>,<>,<!!!>'!!!'u!!!!!u!!}>},{{<!!!>!>},<}>},<!!<!"!,'u!!!>!!,a','>},{{<u>,{}}}}},{{{{{{}}},{{{{{<aa,,!>!>,<>}},{{<oo>}}},{<}!>,<,{i!!}!>},<!!!>>},{{{{<a!!!>,<!'<!>"!!!>u<i!>},<a}'}!<ie>,{<!>,<o!!!!!>i"a}!!}a!>i<!>},<!!!>!!a!!!>>}}},{{},{}},{{{{<!>,<"u<!!}ui!!e<!a}u!>},<!!",>}},{}},{{{<">,<!>},<!!!>!!u>},{<!>,<{>,{{<"ie!}!>a!e>,{}}}},{<}i''ua{!>},<>}},{{},{<!>},<!>!>},<o},!!!>!>},<<!>,<u{,!>},<,a,>}}}}},{{},{{<,"u{>},{}}}}},{{<,!!i!!i!!!!"a"!!!>!>,<>,<e,a,}!>,<<!!!<>}},{<!!!!!>!!ou>,<<!>},<}u!!!!!>{!!,!>,<i!>,<>}},{{{<a!>{!>},<!>">},<a!o!!!>!i"!><!>,<"i}!>!>!>a>}}},{{{{<a>,<!!!>!>e!!>},{<!!a!!>},{{{},{<i>}},{}}},{{{<!>},<>,<"'<<!,">}},{{<e!!""!e!>"iaa,a>}}},{{{}},{{}},{}}},{{{},{<!i>}},{{}},{{{{<<!>},<{a!!!>!!!>}ua!!!!!>a>},{<ea!!{i!!,!!a"}!!}{u'!>ae!!!>'>}},{<>}},{{<!>},<!',!<<,!>,<>,<{,"ea>}},{<u,o!!u>,{{},<}!!{!>},<i!!!"<!!}!>},<ieo!>!>,<{!>},<!{!<!>,<!!u>}}}},{{<!!"',u"}u!>,<>}},{{{<u!>,<!a!!o>},{<!>},<!>{!>'!!u!!!!'!>,<!!<!>,<!!!>},<},!!!!'>}},{},{{{{<<ou!!e!>},<i>},{<}{!>},<!>,<!>"''!!!>a<!!!>o!!!>ue>,<!<,'!>,<<!>,<o}!!!>,<!!!>}o!!ea}>}},{{<!>eo,a!>!>},<<a!'!>},<"!u!{i!!!!e!>,<,!!u>},<{}>}}}}}},{{{}}}},{{{<,au'!>},<oo!>,<!i},}"!>},<>,<i!!!!!>},<{!!!>!>!!o'"!>!,"}!">}},{{<!!'ia!!o{e}'!>!>!!!>",!!!!!!!!!!!<!>},<>,{<!!""}!'<"{!!!>>}},{{{}}},{{<!!!>i!!!>!>},<!!!!!>!>e!!!>,<!>},<!!}eei<i!!!!uu>},{}}},{{<>},{{<!i<!!a}u!!!>"!>,<'!!!>,!>},<<!>},<ui!>,<>},<<!>o<"!!!!e}}!!!!}!!!>!!">},{{<,<!!!>e>,<!e!i!>i{<!}!>},<}!!!>>},{{<"e""!}u"!!!>!>,<!!">},{<!!!>!>},<oo!!!>'!!e!!!>!>,<!!!>,<{iau!>},<eo'>,<!>{u{e!!"}u!!<!'o>}},{}}}},{{{{{<!o!>},<>,{<o{ee!>}"!!!>},<!!o!>!!!!!>!!!>},<!>!>,<oa>}}}},{{{{<{i!!uu',",u>},<a!>,<"!!,i,!!a!>!!o!>,<!a!!e,!>},<>},<,o<!!!>!!!>o!>o>},{},{<'u!>,<!!!!>,{<i!!!>!>},<!!i!!""{!!e}u!>},<i}!!'e!!!>{'>}}}},{{{<e!>},<,!>>,{<""a'oa<!a}!!!>!>,<>,{<!>},<>}}},{<ou!!!>,!!!>,<>}},{{{<e{!!{!!!>!!!>a!!!o!!!>!!'e!>,<}o{!>},<!!">,<,'>},<!!!,!}i!>oa!>,<i"<!!<',!o>},{<i!>},<>}},{}},{{{{<,{!!o!>i>}},{<oe!>,<,"o!>},<a>}},{<i'!',!>,'>,<o<a!>},<<!>},<!!!>"!!!!o<a>},{}}}},{{{{{<a!iaou>},<!!!!!!!>ua,!>o"}e!>},<e,>},{{<,!!!>!!!><o!>,<!>,<<!>},<!>{a{i!>},<u>}}},{{{<>,{<!>,<u'i!o!>},<>}},{{}}},{{{<>}},{{<'!>,<!>},<",!!o}}{!>},<oo!!!>>},{{{{<'}!!!>,{a>},{}},{<!!!>o'!u"!!!>,<!!!!!>!a!!!>>}},{{<'!!!>,<'"}>}},{}},{{<!!!>e,o<uao>,{<<">}},{},{{{},{{<{e!!!>{!!!>},<"!"!!!>!>},<>},{<o'!!!>{>}}},{{{<'!>},<,!!e>}}}}}},{{<aioa!>{{!>,<",!>,<!!o!!a>,{{<}!>,<<!!!!!>!>},<,'{,}!>{uiu,!!i">},<!!!>u>}},{{<!!!>!!!!!!!!!>ae}'"!ua<i,!!!>,<oe!!!>>},<}!>},<!!!>}}ui!}u>},{{},{}}}},{{},{<!!!>,<!!!>o!!!!o'!!!!!>{u!>,<!>},<'i,!!}<!!,>}}},{{{<u'a,!!!>i>}},{{{{{<!!!>}e,""!{!!!!""!>!!!>ea>}}},<!!!!",'!!!>,<!!!>!!!>!<!!!>,<}>},{{<'!!!'!>ee!>,<>,<!!}!'>},<""!!!>},<i!o<!>,<eie!!",!>e>}},{<!!!>},<i!!!>'"!!!>!!<!>},<a!!,!>},<>}}},{{{{{<!>},<u!>,<!>,<!!{'!>},<!>},<<<>}},{<a!!!!!!!>!>},<<!o<"u<a'">,<!!!>,<'<!>},<!!!e!>},<!!!>oe,!!<>}},{{{{<u''!a",<io!>,<!>'a!!!>,<!!{"!!u'>},{<'!>},<!>,<!!a!>!>},<a!a!!,>}}},{{<!>},<oa>,{{{<!>},<!!o,>}},<i}u!>},<a!>},<<<!}!!!>!"e<!!!>!>},<}i>}}},{<{>,{<!>},<!>,<}{a!>,<u!>},<e!o>,{<!{e!!!>!>,<e!,!!o',>}}}},{{<'!<<i,a!!!!!o>},{{<<"}'!>},<<ao>},{<!!o!<!!!>>}},{{{},{{<!aoa{!>,<i!!e!{!!!!e!'ao!!!>,<}!>!!!>e!!{>}}},{},{{<i!>,<!>},<!>},<!>iaeo>},{{{{<!!u}!!!!,!!!!"uo!>,<<'o!>,<!>},<'i!!!>},<">},{<ii>}},<,>},{{<!>},<!>},<>,{<u>}},{<!>},<!!!!!!'"!!!>!>},<{!!!>i!>ao!>i>}},{{}}},{<i!!'!!!>e<{o"!!!!!>'>,{}}}}},{{{{<ou!{"!>},<!>},<>},<!!!>iauiui!>},<>},{<!!}e}e'!>,<!!!>>}}}}},{{{},{<!!!>}eoei!!!>u!>},<ie!!!>">,{{{<e!o!>},<}!>},<!>!!ie!,!!!i!oi!!!>},<!!!>>}}}}},{{<}!!e!iieu!!'>},{{<!>,<!!!!!>>,<}o!!!>>}},{{<!>!!u!!!>>}}},{{<!>},<<!>},<},,!!!<'u,!!o!!i<u{">,{<!>,<}!>,<!>!>,<!!!!!>!!!>!!!!}u"}i>}},{{{{<{e!>,<e{'i!oiu>},{{{{<>},{<"e!>},<ie">}}},<uu'<{<!>,<,}!!!>!!!!!>,<!!'o!!u'{>}}},{},{{},{<!!,'}!>!!!!!!!>,o!<!!!>'!>,<>,<o}!>!>,<{!!e!!,!>!!e!>,<!>i!!<{>},{}}}},{{{}},{{{<!!eu!!{o!!!>!>!!!!!!"!!!!>}},{},{<!!!>!!!!!>'oaii!!!>e!>,<!!!!!!!!!>!!!>o!>},<!!!>a>,<!!!>'!!i}u'{e!'!>e!>'!}!!>}},{{<!!!>!>},<o!!!}!!!>}'!!!>>,{}}}}}},{{{{{},{{<}u!!!!i<e!!a,i>}}}},{{<!!<}{<<u}u!>{ioe!!>,<''!!'e}!>>},{<u}eai>}},{{<'!,o>},{{}}},{{}}},{{{{{},<!!<u!!{o!}!!!>"<!>,<!,>},{{{},{}},{{<i,!>!>,<"<!}'!>,<!{>},{<!!!>}a!>ae!!!>o!!u!!"e!!<'o{>,<u<!{!>},<{>}},{{{<{}eeoua!!!>},<!!o"'{{>}},{<u!!!>!!}!!!!!>!u>},{{{<!!!>!>,<'a!>}!>!!<,u"!>!,{e<>},{{<!!eu!e!aa"'o'"!>u"'<!>>,<!>},<!!>}}},{<,eo'}o!'{>,<ia,!>i!!a"!!!>!>},<}!a!!!>!!!!!>,<ee>}}}}},{{{<!>u!!o'!!}!!!!!>!!!>>},<e<!>},<u!!>},{{<,!>!i!!<!>,<!>},<!>!>,<!!!!ao{<ae,,!>},<>,<<"e!>!>!>,<u!!!!u!!!!!>,o!>,<o!!!!!>},<a>},{{}}},{}}},{{{{},{},{<"!"<"!,!!!!!>eau!>,<,>}}}},{{{{{{}},<o<i!!!>,!>,<a,!!!>!!!>!!!>!<<<>},{<a{ue>,{<a!>!>"i!o,!!{!>},<a!!!!>}},{<"ia,i>,<'!>ioi!>},<>}},{{{<>},<!!<,e'au!!!!'>},{},{{<i',e!<!>,<'u,>}}}},{{{<o'i'!!<{!>,<a!!o!!e!!,!u!!o>},<,!>,<<o!>,i!>>},{{{<},}!!",!>!!!><>}}},{{},{{{<!!!'',u'a!<a!!!>},<ou!!!>!!a>},{{},{}}},<}a!!!,'a',!>u>},{{<!u!!!>ia{!!o!!!>},<!>,<!!<!>},<!!!>"!>,<!!!!}i>},{<!>,<!>!!,!>,!>>,{<}i>}},{{},{{<''!!e<!>},<a!!!>e{!e>}}}}}},{{{{{<"u!>!!!!>,<a!!o!>},<}!>},<!>i!}'>}}},{{{{{{<,,!eaa!u!!oie!<,!!!>!>},<!>,<!>{u{!!i>},{<"<i,!a"!!eo>,{}}},{{},{<!!!!e!>},<'!!!!,!!!>!!",>}}},{}}}},{{{<i{}'>},{<{!!!>,,!!e!>,<!!!!!>a"!u!!!!e!>,<{!!!!!',<>}},{{<!!u!!,!<}}<,<>},{<"!,!>},<{a!>},<}}>}},{{<<!!!>}!!"!>,<}!!i""'!!!>{>,<!!!>},<!>,<{!u!!'<io!o{>},{{{{{}},{<!!}!>!'u>,{<'u!!!>,<!eo<!>,<!!!>{>}}},{{<a{o!!!>"!!!>'}e!>,<}>},<!>,<}{!!!>!!!!"!"!>!!!!,}<<>}}}}}}},{{{},{{{{<,!!!>,!>},<!>,<!>},<>}}},{<!>},<>}},{}},{},{},{{},{{<u!>},<ieo!{!!<'"!u<!!!>!!!>,>,{}},{},{{{<o>},<,>},{<<i!a{{{<<!!!>!!!!o>,{<!!{<a!!!>u!>},<,!!!!oo!!!>!!u"!>}!>,<>}},{}}},{}}}},{{{{{{<<!!!!!>i!>!oi}oeuu>},{{<,{!>!>!!!>!!!>},<!!!>!!!>!!!>!!,'!},o!}>}}},{{<!>a!!iu{!e>},{{{<{!!{!!o!,!!!>>},{<!>},<!>},<"oi!"!!!>!>},<>}},{<!>},<i!!i}>},{<ue'!!a"uu{!>,<!>},<uuaa{!"!!!>>,<ee>}},{{},{{{},{}},{{<a!!!>!!!!!!{!"{e}e!!,!>ae!!'},!>},<!!!!o!>},<>}}}}},{{<!!!>},<>},{<u!!!>!><,!!!>},<!!!!<>}}},{{<{<e!<,!>},<'i!"{!>},<!>,<!>,<ie}>,<{,!{},!>e!!!!!!!>!","ua!}!!<'!!u'>},{{{{<!!!>!>,<!!e'u"'<"!"',,i!!i}<a>},<aoie}!>},<'}o,<>},{<'!a!!{"u!e!><i!!'!!"o!>,<>}},{<!>!!i!{{o!!!!!>,<!{!!i<e!!{">,<e!o'u,!!!!uu!!!}!>},<,!!}>},{{{{<!!!>,i""{!!!>},<!a,>,{}},{{<!}!!!>,o!>}"!!o,!!>},{<!>},<"u}!>"!ae!{!<>}},{{<oao}}a"i{!!!>,<o{>},{<o!!!><a!!!>u>}}},{{},{}}},{<!>!!!><",{}!>ee!>,<!'!!!eu!!!><!!>}}}}},{{{<e}!>},<!!!>!!o!!!!{{!!!>!>"a!>!!!!!!>},<!>!!!!!>!!!>e>},{{<!!a!!!>}!!{ie,!!<!>!!<e!}eo!>},<,}>,<!!!!}!>i!>,<,!!"!>},<}!>o!"oo'o!>},<>},{{<{{!!!>ua'ei'!!<>},{}}}}},{{{{{{}}}}},{{},{{<!>iu'!>>}},{{<!!ouo,!>},<i!ii!>},<o!!!>,<>},{}}},{{{{{<}<!!!>},<"}<oa!!''!>'!oe!>,<!>,<iu>},<{o<<a>}},{<!,<!!!>},<>,<>}},{{}},{{{{<!ua""<o{<!!!>!>},<'i<"!",>}},{<a{!!!>,!!i!",!>,<!!i{>},{{<a!>"{aia<!!!>!!!>,<u'!!u,>}}},{{<i!>},<!{!!!!!>},<,,!!}'!!!!ae"!>,<"i!>,<o}>,{{{<,!{o<!>},<!!a}}i>,<!!'!>!oi!!!>!u<'"e!!,{i>}},{<uu{!e!!!>}}a!,o!!a!{a>}}},{}},{{{<{!>,<!!}i!>,<}{!!!>!!!>,<i"!>,<oi"}'>},{<o!>,<!!!!!!!>,!>},<!<!"!!<!>!!!>e,>,{<!>},<!!<o!!'<}i!>!>,<u!>,<!>},<!>,<!>,<!a!>,>,{}}}},{{},<aee}}u!!<}!>i!>,<>},{{{{{},{<!!!>!!"'{!!,'}>}},{{},{<!!!<>}}},{{<'a"!>e!>},<',>},<io,,a!!!>!>,<i!e!!,!>,<,,eu!!!>!!u!>,<>},{{{{<,!}<!!!!{!>,<{!!!><ia}e!>},<{}e>}},{<!!!!!!{a,>}},{{{{<i,e!!{!!!>"o{uu!>},<>},<!>},<!>!!!'!!i!>!"a!!}!>,<"'!'!>>},<{!!!>,<!!!>a!!!!{""!>"!!"'u!!!!!><!!!>>}}}},{{<!!}!>,<!>},<'!!"!"<!!,<!!!!!>!>>},<!>{}!>!>},<}}"ao!!!!ua!!{!><">},{{<!!!!!!ou<!!'u!>!>},<!>,<{!>!><>}}}}}}},{{{{<'}u!>,<{!!,}!>},<'!"'{!>},<!>>}}},{{{<{a!!!>u!>!>!!!>ae}!>!>},<{!!ua>},{{}}},{{<,!!!>},<!>!!!>>},{<}!!!uu{,!!!!i!>},<{!!!>},<ie<!a"e>}},{{<ou{!>!!!>a!!}!!>},{{{{}},{<!,u'!!!>,<u!>,<ui,}u!!!'!!!>{a!>a>,<,,"!!a!!>}},{<!!!>!>},<o!!{!>oa!!{!!!>a}a!!{>},{{<!>},<a>,{<!!o!>,<!"}!!'!!a",!a!>,<i!!!>o!!e!>,>}},{<,!>},<"{}}}"<!>},<!!e!!!e!!!>,<!!!>,<<!>},<>,{}},{<!!iao!>},<}!!!ea{!!!>,<'uui>,<i"!!!>!>,<u!a"ea!!!>,<>}}}}}},{{{{{{{}},{<,!>},<a{!>},<eoei<<o>,<>}},{},{<i!!!>!>!!!>ii!>!'<!!!>"},},!!>}},{{{{{<,,!i,,ae{!!!,!>!!!>},<!,!!o!!}!!!>}>,{{<}!!!>!!!>'!!!>"!{{!>!!!>>}}},{<!!a!>,<{oia}ueue!!!>eai>}},{{<!>},<!}!!!>!!!!!!ei!io}!!!>!!ue>},{<}!!!>!>i}!!!>,<!>u!>,<!a!!!>!>,<"o!>,<!>,<a!>},<!>,<>}}},{{<!>eo,o!'!!!>'<!!e>}}},{{{{{<!e!>!>,<!!<!!!>!!!!!>}>}},<!>!>'}}!!!>!>!>,<!>!u>},{<!o!!!{>,<!>},<'''!>},<">}},{<<,iiu!'iu!><>,{<,!!{e!!!>o!ai'!!'!!!!{a!>>}},{{<a},!>},<!!!!!><,i{!>"}>},<'<ui<!!a!!''!aa!!!!!>!!!>u'ao!!<!'>}},{{{<!u<e!>,<'{"a'!>,<!>},<!!!>>,<!i'>},{}},{{<'!,e!>},<!!>},{},{{{<<euu!>,<!!,!e!>,<!!!!},!>},<a}!!!!!>a{>},{{<!<ee!>},<o<{i!!}!!!>'!u!>,<>},<}!!!!eai!!!>,<e!>!>!!!!!>>}},{<!!!!!u!!!>!!a{oo,i>}}},{{{}},{},{<!!!>,<{'a!!'a!!!>{<!<e!>},<!!'!io>}}},{{{<i!!,!!e!!aee!!!!!>},,!!'>},{{},<e"o!!u{!>,<{!>},<,>}},{<",!>,<'!>,<!!!>!!u!!{'{!>},<}!!{!oa!!!!e'!>>,{<!>,<!>},<!>,<uie!!,!>,<{!>!!!!!!!>>}},{{<>},{{<!>,<!!a!}!!o'!>!>,<>}}}}},{{{{{{<>}},<u{!>},<e'!>,<,!>},<>},{{},<>},{{<',!,ioe!>u>,{<!>}o!>},<}>}},{{<{a'e,i!>"u>},{{{<!>},<!!!>,i,eo!!!!!>},<eo!>>},{}}}}}}},{},{{},{{{{{},{<a!!a!!!>,<e{>}}},{{<>},{{{<!>},<>}},<<ea,},!!!>!>!!"{,uei!>},<}>}},{<!!',eu'"a}!>o'}!<!>!a!!o!eu>}},{<>,<!!!>>},{<!,!!o!!!>,!,u!!}'!{ee!!i!>,<!!!>!!!>!>>}}}},{{<uo!!">},{<!!u!a!!">,<!!!>!!,}o{>},{<iuoa{!}u',{!!,}'!>,<>,<!!!>!!a!>!!!>u!>,<!>},<!>,<!'!>,<!!!!!><!!!>},<!!<>}}},{{{<!!!>},<!e>,{}},{}},{}},{{{{<,e!!,!>,<!>},<,!!!>a!,!!'ie!>,<o!>},<>},{{<e!!'i!>},<!!!>,!e!!!>!!!e"}uu!>},<u!i'>},{{},{{{<o!><!!o<"!'!!!>,<!>},<!!!>!!!>e'u!!!>o!!u!>},<}>},{}}}},{{{<!i<!i>,<{'!!i!>,<>},{{}}},{}}},{{<>,<,<e!!!>,>},<{>}},{<!!!>,<e!>,<<!!,!<!!,ou>,<!!!>o'!!!!!!!>"a!!eeu!o,!>},<o<>},{{<!>},<!!,!!,o,>},{}}},{{<!>,<'o>},{{<aeei{o}i>},{}}}},{{{{},<>},{<{!>},<!!!!!!<!!'e!>'e>,{{}}}},{{{{{{<!>,<e!{!>,<i!u!!!!<!>,<!!!>>},{}},{<oo">}},{{},<',i!!"<>}},{{{<!>,<!!,u,u'}i<!>},<!!!>!!!>{!>},<!i>},{}},{{<!oe!>}'iou!{u!!!!!!}!<!>u<a>,{<{!!'oa}!!!>!!!!,ii!>,<oa!!i!!a>}},{{{<{a}o}!,!!!!!>,<'}{>}},{{{<!>!!i"eeeuo!>},<<aa!{!!!>!!!!!>!>,<>},<{!!'>},<!>,<<<a!!,{'!!<>}},{{<'!>ao!{u!!!>"!i{}i'u,},>,{<!!!>!!iuee!!!>'!!!>,<>}},<!!!>!>},<!o!>,<e!!!!"!>,'e'a<!!}>}},{{{<eou!>o}i!>!!u}>}}}}},{{{<!!}u!>o!>,<u!!u"u!!a",a!>,<>,{}},<}}"!>,<o!>,<!}'!>>}},{{<>,<!>!>'!!!>!>!>,<!!!ai!,>},{<}}!!!><!>!!!>!!!>},<!><!>!!{!{!!}o!}>,<}i!!"!!!>,<,,!!!!!>>},{{<!!!>'!!}!!!>!!!!!>>}}}}},{{{}},{{{{<!'i!>,<ae>}},<!aa!,">}}}},{{{<!!a,"!iu!!e!"'{>},{{{{<uu'i<!!!><!>!>}uieo!!!>!>,<"o>},<}!>}!>,<>}},{{<!!!>'<!>,<!>},<ua{!>},<i!i!}!!i>},{}}},{{<!!u}!!!><a{!u!>"o!!!>!!!>",e">,<{}i!!!>!!!,!!u!!,"}!>,<!>,<i>},{<!!'o!!!!{>},{{{{<!!!>a!}e!!e"!>},<!><!o>},{{<"a""!>},<!!!!,!>}!>},<}'!!u!!!!!>!>},<>}}},{{},<}>},{{<ioo!!u}!>},<<{"!!!!ui!!{>},<"!iui!!!>!!!>'"!!!!,!!o''!>},<}u!!!>{>}},{{},{<a!!oi>}}}}},{{<"o!>},<,!}!!!>"<ao'>,{<e!>,<eu>}},{{},{{<<}!!o!{!i<!!!>,<!!!>,!>},<o"!!!>!>},<!>,<>},{<!!"u!>,<!!oa"'!!!!>}},{<!>},<o!><<<,>,{{{<!!!>{!!'u!>,<!!{o}"!>},<!>,<>}},<!!!>!!>}}},{}},{{<!!!>},<,!>ei'!e!!!>},<u,u!!!>'aui>,{}}},{{{{{<!>,<"oia!!e!!!>!!{!!u!>,<>,<!!>},{<!'!i!!!>o!o{>}},{<',!!{",<>,{<o!!<}'ii!!!>!>},<''!!!>>}},{{}}},{{{},{<!!!>{{!!!!!!a,e!'<!>,<!!!>!!!>u"i!,i!e>},{{<{<}>},{<!>,<!>{>}}},{{},{<i!!},u}'!<>,<!><o!>>},{}},{{{<a!!!!!>{!>,<o>,{<!!!>!>},<!!'a!>ii!!!>u!!oa}}"">}},{<!ai!ua!!<!!!>,<<e}a!>>}},{<u!ea"ue,!!<!<,>,{{<!}"a!>>}}},{<oa!!!>,<{!>},<e!,!>!!!!<u!!i}!>>,{{<,{{"!>},<<!>,<!>u!>!>},<}'{!!!ao>},{<!!!>},<>}}}}}},{{{{<{o'oi!>,<o!>},<ue!>},<ao>},{<!>,<a!!ia!,i}{!>,<!!!>>}}},{{{<!!o!>,<o!>},<!>},<,,{!>},<i!>u!>,<i}>,<e!!!>,<!>,<'!><a<e!>,<!>},<e,",!{!!!>,<i>},{{<!>,<"!>},<!!}!!!!!!!>!!aa!!o'!>},<!>},<>,{{}}}}},{{{<<ea!!!!}!o!!,!!,!!!>!>i!>,<"''!>!!}>,{<,,!!!!!>},<"!>!!!!!>,<o>}}}},{{<!>},<u{!a<"!!>,{<}!>,<}'e!!"<!>},<>}},{{<a!!'}{!>},<{!!!>!!!>,oa"!>,<}''!!!>,<!!}u>}},{<!!'!!'a!>},<!!!>!!!!>,{<!!!>},<{a"u}!>},<!!,!>,<i>}}},{}},{{{}},{{<"!>},<!!,uii"a!>},<a!>>},<aa!>>},{{<!!'>},{<!>!>,<e!!a''!>"!!!>o>}}},{{{<!>},<u'<'!>,<o'"!>,<,"a!>,<!!a!{!>,<!!>},{{{}}}},{{},{{{{<}}}!!!!!>,<!iiue!!"!!>},{}},{<!>!!!!!><!!!!!>!a!!!>!!,<!>},<<aa'!!<u!>,<!">},{{},<>}},{{<e!!!>a<{!!!!'}!>oi!!<!!!!!}>,{{{{<!>}}a"!!,"!!!>!>,<e!!i!!!!!>a'!!e>,{<>,{<{ue!!!!!>!!}!!!>o>,{<!>,<!>}!>!<!>!>},<!!!!!oa!!!>!>},<!>},<}<'>}}}}},<!!"u>},{}}},{<>},{<ii}!!!>}i>}},{{},{<}!>,<!>},<<">,<!>{>},{{{<'>},<>}}},{{{<!{ia!>,<a!!<'!!!",<!}e>}},{},{{{<'u}>}},{<}i!>},<}<!!o}'a,}!>!}!>i<>}}}},{{{{<>},{<!i!!"!!!>},<"!!e}u!!!>},<'!!>,{{<o!>,<!!a"!!<!>,<'!>,<,}!!!!!{!>a!!!!ea>}}},{{<!>,<<!>},<{ao}>},<>}},{{{{<uo!>,<>},{<}<!!>}},{<,u!>},<!>,<}i>}},{{<a!>,<,!!!>o!>!>},<"{oa>,{{<o!>,<!!!>,!{!>},<"}i!!!o!!!>>}}},{<,o!!!i!a{<!>,<!!!!"!,!!!>>}}}},{{<e!!ai!e,!>>,<i{,e}e!>!>},<!!'!!a<>}},{{{<i!>},<!>,<!>},<!!o>,{<"!!!>!>,<>}}},{{},{<!>},<<i>,<<!>,<oi!!!!!>!a!>,<!'"!>,<!>},<"!!!>{>}}},{{<eao!>},<a{a<e"!>!>},<>},{{{{<!!!>!'!!!!!>e!>},<!!",>},<!o<!!!!!>,!!'!!!!,i!>o!!!!!>{!'"u}>}},{{},{{{{<i!<!!,!!!!!>!!!>>}},<!!!>!{}a!!!!!>},<i",>},{},{<>,<{!><o!o!!!!!!!>i"uo}o!!"!!{>}}}}}}},{{{{<,e!!}">},<!>},<e!>,<u!!!>,<'!>},<<!!u!>!!>},{{},{}}},{{<<!>,<{<!!!u>},{{<!,!,>},{<<!>},<}a!!{!><>,{<e!>!>},<,oai!>!>},<!{>}}},{{<"u!>,<<!>},<i!>,<i'<!>!!e!{!>},<!!i,>}}},{{<}!!<!>},<i!!!!<<!!!>,<!>,<!!i!!!!!>!>},<!!!>},<ao,!>},<>},{<i!!!>"a'!!}!!{"{>,{{<!!u!!"!>,<'>},{<!!""u!e!!!!u!>,<io!>,<"u!>,<{'">}}}}},{{<!>!!<oe!>!!!>'!!,<!!<!!!>}!>>,{{{}},<!!!>,!!!>!>"ii>}},{{{<'u!!!>!!!>,<>},<u>}}}}},{{{{<i!!!{,!"!!o"i}!>,<!!!{{>}},{{{}},{{{<ao!>,<!}'!}"e,o!!!!>},<!>!>,<a{e,a<!!!>",'oe<>},{<ae,!!oue}>,{<','a!!!>a!!<!iu!a!!u!!!i>,{<}!!,!>},<!!!>,a>}}},{{<}>}}},{{{},{<i!!o!!!>"!>!!ou!}i!!oo!>},<'!!!!!>>}}}},{<!>!!u}!>,!>i!!!!!!,"!!,!>},<u!!,'>,{<}a'ua!>o!>},<!}!>},<!!u>}}},{<!>,<!!!!!>},<!!e!o!>'!!"!>,<>,{<eu,e!uiioe{>}}},{{{}}}}}},{{{<>,{}},{<o!>},<'>}},{},{{{{{{}},{{<!>},<!!,'ii!>,<!!o,!>},<"!!i'"u}a!"e>}}},<!,<i>},{<!"!e"''!>,<iau!>!>},<i'>,{{}}},{{},<!!!>,<ea!>,<!a!'}<!!!>,<!!!>!>},<!!!!!!!,>}},{{{{<e<e>},{<>}},<!'au!>!!!!!>!>,<'!!',ea'!!o!}}!!}>},{{<!!!>a{!!,!!""oue{o"!>!!}>,{}},{}}},{{{},<a"!><a!!u!>!>,<u{!>!!">},{{{<!!o!>},<ao,o!!!>,<,i<i>}}}}}}}},{{{{{<"e}uu!!,!!i!!!>!>},<"!>>,{<}<!>!!!>!>,<i!!{!!",a<!>},<!>},<!o!>o>}}},{{{{<iuu>,{{{<,>},<!>},<e!>,<}!!!><o!>},<o!!!!}>},<{a>}}},{{<!!!>ie}i<!"a{!!i>}}},{<!>u!e,e!!!!!>e"e!!!!!>ue{{!!"!>},<u>},{{{<,!a!>!,!>},<,,e!!,!,<ui>},{{<auei!!!>{!!!!!!>},<!!!>'}!>,<a!!!>e'"o!>!>"{ou}}!!}>}}}},{{{<!>,<!!'u!u!>!!!>!>,<!!,!!!>i!>,<o"!>,<}>,{}},{<>}},{{{<a'o<!>,<i!'ia!!e!!!"!!!>u'!o>},{<}!!e!!!>>}}},{{<e!>!>},<>}}},{{{},{{{{<!!!!a!!!!!!<u>}}},<'!'<!au!!!>a!<'{e,,!!{a'!!}>}},{<,>,<!!!>!!>}}},{{{{},{<>},{{<!!!>},<"!}{!!'{!!!}e"o!>,<}!>!}ou,!!<>}}},{{<<}!>},<>},{{<!>!>,<!!!>o,""eu!!'u!!i>}}},{{<!>},<iu!>,<e>,<!>},<',o,,{a!!!!o<!<e!>,<>},{{<'!>,<o!>,<!>,<>},{}}}},{{{{}},{{<}!!e!!}!}}!!!>{{>}}},{{},{{{{{{<!>"iu!<!!,i!!!>>},{<u'>,{}}},{},{}},{{<o<}u'e!>,<!!u{a!>,<eaoa>}},{<!>},<{i!>},<o>,{<,!eo!!}>}}},{{{{<!!!!!!!!!><!!!>>},<!!!!!!e{}!>,<!>,<{!,e{}aoo!!{{}>},{<!>},<u!>},<!!!<'>}},{{{},{}}}},{<!!ue!>},<!!""}{!!!>,,{a!{{!!"!!!>,<e>,{<ou,,"}!!!>!!!>!!!""!>,<o,e!}"!!!>a>}}}},{<e!!!>!>},<!>},<u>,<u'!>},<"a"!!!>,!!!>>}},{{{},<eoeo'<eiaa!!,,>},{<!!,!!!>{!!!'!>},<{!>,<ou!}!!!>,'!!!!o>},{{<o!!aa!>!!!>!>,<"!'!!!>!!!!{"a!!!>io<!>},<!>},<>}}},{{{<o"!!!>!!!>},<e!>},<o!!a>,{<ieoie!>,<u!!a!>">}},{{<!!!>!!a!>,<a!!!,!>},<!>},<u!>u">}},{{{}},{<io!!i!>,<!!e{aa!>},<>,{{<!>},<!!!!ui!!,!>!!!!{o}}!>},<>},{{}}}}}},{{{<"!!!>!>,<!>},<,a!'}!!}!>},<u"}!!,>}}}}},{{{<a'"<>},{{<!>u!>{!!i>},{{<!>{!!!>},<o!o!!"!>},<e}i!!!>o>},{<aei<e{",!!>}}},{{{<!!!!!>!o!!!>!>!>},<u{<!!}i!!!>,<!!!!<"'ei>}},{<{e!>"!>,!a!!!>,<!!!{!!!>!!!>{<!>,<!!!>,<>}}}},{{{{{<}u>},<i"!<u}!!u,!>,<>},{<!!!>!>},<}{!!"oeu>}},{{<,"'u}!>!<{'o>,<{!!}!>,!!!!!!,!>,,"!>,<!eu!>},<!>},<<>},{<!>},<'!!!>!>!>},<}<!"!><oua!<'ou>}},{{{<>},<>}}},{{{{<ai!>,<}''!>},<o!"i!>>},{<{!>u!eu{!!!>}'e>}},{<,{!e!!}!!!>,<,i>}},{<!!"i{{>},{}}},{{{{<ui>},{}},{{{}},{{<<!>,<{!!a<!>},<!!!!"a!!!>},<e'!!>}}},{{<u!>},<i!">},{{<e,!}!aea!"!'!!ea>,{<a!>},<!>,<o!>},<!>,<!>>}},{}}}},{},{{{{},{<"!!e!!"!>},<"}!><{}"!>>,{{<!o!!!>uo!!,o!!!!io!!!>'>}}},{{{<a>}},{<e,,!>,,!!i<!}!!{!!!!!>!>e!>},<u>}}},{}},{{<!!!!!!">},{{{},{<uo<!>""!>,<!!}"!>!!!>i!>>}}},{{{<!>,<e!>o!!!>o!>{,'u}!!u',!>},<}>}},{}}}},{{{}},{{{<<!>!!!>,<!>>},<{i"<uu{a!!a!}!>},<!>},<!!!}}>},{{<oaa!>!>},<'>},<!!!!aie>},{<e!>,<u,}<!>},<{iu}'!>}!!<'i>,<oea!>},<!><!u}<a"!>{>}},{<>,{}}}}},{{{},{{{<e}e<u>},{{<a"!>!!!>!!!>'>,<{,'!>!!}!>u<}!!,!!i!!!ei}>},<a!"!!!>>}}}},{{<'!!!>!!o!>,<}',!>o<o!>},<!!i>,{<!>,!>},<>}},{<{!!,!!{<ouu>}},{{{{{<o!{!}!i!io!>!!!!e!!!>!>!>!!!>!>'>}},{}},{<!!!>>,<!!!u!>""!,!>},<i}!>},<ou!>!>{,!>'o>},{}},{{<ua>,{<!!!!!>a,!}!>,<!>iaa>}},{<>}},{{{}}}}},{{{{{<!!!>!>},<{e>},{<!>,<!>,,<i}!!!!!uu,!!!>>,{<!i">}}},{{<!,!u>},{{<!>},<"uoa<au!!!>a!!,}>}}},{<!!aa}!>,<!>,<au!!!<o>}},{{{<!>!,!!u!!!>'<!>,<,!>!!>},{<!!e!>uo!!'ai{a!>>,{}},{{<o{!><i{!!!>!!!>!>>}}},{{{{<!>!>},<a!}!a!!!!>}},<!>},<,<'o!!!!,uiu>},{<!!e}{"u!!!i!>},<!!a!>!!!!!}'>},{}}},{{<!!'!!!>,!""!!!>,'!>},<{o!!}!o<>,{<"o!!"!!uu>}},{},{{}}},{{},{{{<!>},<{!!!!,!>,<>,{}},{{<oie!!i!eo!!!>{!>},<<<>}},{{}}},{{<!>},<!>!!ae!>,<>},<!>,<!{!>!>!>},<'i!!>},{<i}!!!a!>u!<'>}},{{{<!!aee!!!>!>,<!!!>u"}!!"!!i!>!e,i!!{,>},<e'oa{!!e!!}'a!!!!!>>},{{}}},{{{<a!!e!>{,i"i!!!>}!!"!!!!!>},<uu!>},<">}},{<!>!>},<!"a}ee"!>,<{!>,<,oe!!!>!>!>,<!>>}}}},{{{{{<!>,<{!!o>,{<{,!>e}!e!>,<>}},{},{<!>},<<!>,!>u,!>,<!!!!!>ae'>,{<!>},<'!!o!>},<!!e}o}!!!>!>,<e!>},<'i{!!o>}}},{{{<"!!{}"!!,,!>},<i<"e}>,{<>,{}}}},{{<u'<!!'!>},<!!!>>}},{{<!>e!!!>},<!>,<!!!>i!>!>},<ae,{u!iu!!!>u}!!e>},{<!!!>a'i!!au!{u!>},<!>},<o},u>}}}}},{{{{{<!!!ee"!>},<!>,<a!>},<a!>a!>},<}<!!"!!!>>}},{{<!!!u{<",ao!!u,!>,<'!!!>},<!!!>u>},{<ueea}!!!>{!!!!!!!!!!!>!>},<!!>,{<!!!!!>o'>}}}}},{{{<'!!!>!>o{""<i"}!"!>},<!!e!!!>!>},<{>},{<!>!!u!>},<!!,'u!>},<!>"u!>"!}!>{a!!!>},<}>},{{<!>},<e!!!>}"i{>,{}},{{{<a'!>,<,o!!!>,<e'}>}},{<!!u'!!<,e{e!><i!!!>a<>}},{<o{!!'!!!>!!{}!!<{}!>!>,<!!}>}}},{{{}}},{<!>o"u!{u"{!>,<'!!!!!>!>!>},<>,<!,a<{!!!>!!,i!>!>},<e<<!>a>}},{{<,>,{}},{{<!!o"!!!>>},{{{}},<ea">}}}},{{},{{<!!eeou{!!!>ai!>,u!!!>,<!}'!>,<!<{>,{<!!!'!<e>}}},{},{{{{<u!!!>u!>,<!!'!>,<}a!!,!>},<i!>,<>},{}},{<i{!>,<!!!>{!>!>},<!>},<{a>,<oi!i{!>o!>!!{e!>,<}!!!>>}},{},{{{<>}},{{{<!!!'!,!>e!>o<e!>i!>,<>}},{}}}}},{{{{{{{{},<!>},<o!>,<!!'eo!!!>},<!!i!"!>,<!!!>!>ie"ae>},{<!!{au!{!!!i!}a!!!>,<o!u}}!!!>!!!>,<!!!>>}},<ui!!!"","'}!>,<,!!!>e!!,!>,<!>},<!!e!!!>,<!!!!i>},{{<!>!!}"e}{!oe!'}!>!>a,>},{<!{!!u!>},<>}},{<!!!,!>,<o!!!>'''!{!!!>'!!!!!>"!>},<!!>}},{<o!>,<o"i'!>!eo>,{{{<u!!!>,,!!!>!>!>,<!>,<>},<!}!!!>e!a}ao!i!>aau,!!!!!>e>},{<!ee!o,}!!!!!>>,{<!!">}}}}},{},{{},{<!!'a!{!!!>!!{,!>!!u}!!!>,<>}}}}}},{{{},{{{}}},{}},{{{{<uu!i{}!>,<'!i>},<{aa!>,<<e!>},<<!>a!>>},{{<<a<ue!>},<o!!!!!>},<{!!eea!>,<>},{}},{<!>},<"eo!!!!o,a!!"u!!>}},{{{<}}!>,<!!o!>},<e>},{<!!!!ao!>,<!!!!!!!!!>!>!'e<<<!!!,o,!!!>!>,<>}},{<}},'!>e!!!>!!!>!a}<!>,<!!!>e}!>},<!!!>>},{<,e>,{<!>,<eu}!!!!'e"!!"!i!!!>o!!i!>"!>>,{<'}o!!u<!!!>!>},<<a<!>},<!!i<{!>,<u>}}}},{{{{{{<!>!>},<"io>}},{<'!e{!>!>},<!>,<!>,<ii}>}}},<u!!"!!!!!>,<i'e!>},<'i!!!>i{>},{{{{<!>,<a<"<{>},<u!'!>},<!!!!}{!>!!!>!>},<o>}}}},{{{{},{{},<a!!!>!o!>},<i!!!>,<'"e<}!!>}},{{}}},{{<{,!!!,!!!>},<"!>!!!>},<!!!>"'"'!!!>!!!>!>,<>}},{{},{<!!>}}}}}},{{{{<aao!!!>,<'{u"u>},{<!>},<{!>},<i!>ii!>},<!>"a<i!!>}}},{{{{{}},{<"i!!{>,{{{<!><!>},<a,,!{!!!i,!!',,'ae>}},<euio!iu!!!>!!""!>a!>},<"oa>}},{{},{<!!'}!>,<<},!!u,,!!!>!!!!,!!!{',{!<!!o!!!>>,<e{!!>},{{<<!>},<}"">,<a'<!!ouo!>,">},{}}}},{{{<{{!!"!>},<""{!o!>},<!>,<!!!>!>i!!!>!>,<}>},{<!!,"!!!}uu>,{<i!!u<!>},<uo!>,<!!ia!>,<>}}},<!!<!!a<!!!>i<!!!!!a!!ouo!!!!!!!>e>},{<o!{o}o!!!>,!>},<aa!',!!>,{<!!"!!!>},<!>i{>}}},{{<!>!}!>a'>,{{<"a}'eo!!!>,!!!>,<{",!>!>>}}},{},{<!!i!>!!}>,{}}},{{{{{},{{}}},{{}},{{{{<!>>},<}ao!!,'!!u!>,<'}{!!!>o!>},<<!!"a>},{{<e!!i!!}'!!!!!!!>},<!!!!!!i{eiu!>},<!!!>!i!>},<<!>!!!!!>!>,<>}},{{{{},{}},{<!!uo!>,<"!!e!!!!!>,'!!}>}},{<!!}!!!>!>,<>}}},{<!!e"!uuu>},{{<,>},{{},{{}}}}}}},{{},{{<,{e!>},<!,!!ue>}}},{{{{<{!>},<>,{<}"!>!>,<!}"!>,<!!!!a!>},<ea!!!!{>}}},{<!!'o!!!>u<>,{<!i!{>}}},{{<'oa!>},<>},<iio!>!>,<!<!>,<!ie!!{"<}<!!!!!>!>},<!>>}},{{<!>,o!!oe!!{!>,<"e!!!>!>>}}}},{{{},<!>},<}!!a!!!>e!!,!!!>,!!!>!>},<<o!!i!>},<>},{<!i!!!>!>},<!!!!!!!>,<<!!"!!!!a!!!!!><u!>,<>,{{<'''>}}},{{{<!>o'!>i{!>},<!>},<a">},{{<!!e>},{{<>},{{{<"<!!iia!>,<a<a!>},<!i,!>!!!!o!>},<!!!>,<u">},{<}!!,!>ii<!>,<o}io>}}}}},{{<!'"!<"!!!>,<!>!>},<!}!!a!!"!e<u"oi!>,<>,<!!!>,!i!>},<'i>},{<<o!!'oiue!!!>!eiu}!>,<!>},<!>},<>}}},{{}},{{<!>},<!!!!!>>},{<!>,"!!!!!>!i!!!>!>!><{ae!!!>o!>},<>}}}},{{{<!!!!!>}!!!>u"o''"!ai!>,<!!!!>,{{<!!!>!!!!,!>},<{!>,<!>{<eo{,!!o!>},<'i!<'>},{<!!!>>}}},<!>,<!!!>i>},{{<!!!!!{,iu!a{!>!!!>"!>},<a!>a>}}}},{{{{{<!!!>,<!!!!"<"!!<!a!>,<'!>,<<u!>,<">},<!>,<!!!>},<!>,<e!!!>!!o!!o!!!!o!!!!>},{{<'u!>a!>,<>},<!!!>!i<o!a!!!><}aouu'<,>},{{{<!!!>"!!!>,}ea!!}!>!><!!'"!!<{>,<e!!!>!>!a<!!o!!!>i}!!}>},{{{<!>},<!">}},{<,!!!!!!!><>}},{{<!!!>},<'e>,<i!>,!i,!!!>ea>},{{<,>,<!!!>o!u,i!>u!!!!u!!!!!!!>},<}{!!>}},{{<}!>,,>}}}},{<i}}iu}{!>},<!>{<u!!!!!!o'>,<}<!!<<<,!>,<!<!!"u!>,<u>}}},{{{<!>},<!>},<!!'!>,<!!o!!oa!}!>!>!!!!"{>}},{}},{{{<<!>e!ooa!!!>},<<!!!>",!>},<!u{!!!!<e!!<>},{<}}u{!!"!>},<"!!o!!!><!<!!!>,<e!!!>u!!a!!!>},<>}},{{},<a!>'{"!>},<}!>,<!!!>"e>},{{<!>},<>,{<oe!!!>!!u>}},{<!!!!!>},<!>,<!>!!i!>,<!>}},!!!!e",>},{{<}!!!>!>},<!!a'oi<>,{{<"ou!!{{!>,<''euu>}}},{{<i<<o>},{}}}}}},{{{{<uu!!!>,<!>,<e!{,!>,<!!!!!>'!!>}},{{<o,>,{<{}oe}!o!>!!!!>}},{{}},{{<<o'!<!>,<{{,!!!>},<'e!!!!!!,!!!>!!!!!!!!>}}}},{{},{{}},{{<ai!>},<}!>,}<!!"e<!>,<!o>}}},{{{<<}o!!!>!}!}>},<"i"ei<}!!!!ae,!>,<!u!!i!>!!u>},{{{<!!!>"{o!!!>!!!>ii!!!!!}!!"!!u!!!>,<!!!>e!!<>},{<uu!>'ou!'""!"i!!!>,>}},<!o!>,<<!!!!<e!>},<"!>,<>}},{{}}}}},{{{{{},<'e!!'>},{{<!!,!>!e,!>},<,'!>},<!!!!!>!!!>},<,!!a,ie!!o!>},<!u>,{<a}"!a!>!!!!!>!>},<eao!>!!oi>}},{<!a!}!>o!!!>e!>,<!!!>,<!!!>,!!a"!!,{a,>}}},{{<!!!>a!!!!!>!!!>>},{{{<!!!>}!ueae!>!>{o!!!!!>!!"!!!>!>!ua>}},<!!!>}>}},{{{{<'u,!e!{"!!{!!{"''"a}{u!}>},<!!!oo'!>,<!!!>},<!!!!!!!>},<!!!>},<!>},<o!}!!!}>}},{{{<i!>,<!!!>ui!!!>!>}i<e>},{{{<!>,<!!e!>},<"!,'!!!!aa'!!!!,>}},{<u!!"!!!>!>},<!!!>{!!!!">}}},{{<'u!!{!}{>,<!e!>,<}e}!>},<>}},{<ea!!'!>!>,<o}<!!!!!!",e!!!'}>,{<>}}},{{<{!>},<o!!!>,<,>},{{{},{<u,e!!!>},<{u!>,<'au>}},{{<{a!o,!!{<!!!>{"!>!!!>!>},<'{'<>}}}},{}},{{{{<!>{!>,<<'ei!,!!!>iu!>e!!!>!!>}},<!>,<!>},<!!o'}}u!!!>,<!>!!!>},<eu>},{{<i<"{!"}!!!<o>},{<ao!!!i!!}!!!>!>!<oae<>}},{{{},{},{<}"!>,!!}'!>},<i!!!o}!!oo!!!>!!!>i!!>,{<<!!<e<!!!!!!eo!>},<!!o!a!!!>ei!!!>!>,<!!','<u>}}},{}}}}},{{{<}>},{<!!!>eu>,{<ui<!'!!{!!!>!!!>},<o!!!>o"u!!>,<}!!!>i!!!!!!!>!>},<!<uo<''!!,ii>}},{{},{<'e'!>!>},<!!!a!>!!i!!!>!!!!<!>"{<}>}}},{{<!>,<{i>,{{<a'!eu!>"!!!>>}}},{{<!>,<o!!!>,<o<!e}"!!!>!!!>"!},,e>}},{{{{<!>,<>},{<!!a!>,<u!!<,!!o"!'{>}},<!>!>,<o"<!!!,!><<!>u>},{},{{{<e!>,<o!>,<,!>,<!>,<>},{}},{}}}},{{{{<>},{<uo>,{{{<!!!>o!>},<}e}a"{e!!!>,<!>,<u<"!!"!>},<>}}}}}},{{{<,!{>}},{<o>}},{}}}},{{{{},{{<<!!{!!!>!!!!!!!>!>},<!>},<!!a!!!>},<,!!!>'!!!!!>,!!!>''">,{{},{<{}{'!>>}}}},{}},{{{}},{{{<>}},{<a"{!>},<>}}},{},{{{{},{<!!!>>}}},{{{<!"!>},<!!<<{!>,<!!a>},<{aoi'!!>}}}},{{{{{},{<'!>}!!!>,<!!!>i!o!!!>i!!!>},<"!>,!>!!{!>,<o>,<i<!>,<!!}",>},{<i!>},<a!>!!e>,{<<!}{!>},<!!!>!!!>!>,<!>},<!!!!!>!>!!>}}},{{<!!{"!!!{!!u!!!>'!!!>!!e!!!,'>}}},{{{}},{{{<!>},<>},<}e!'i>},{{{<!>ue!!!>},<{uu!!!>}!!{'>,{{<!!!>!e!>,<ooa}ou{!>''!}",!a'>}}},{{<i!!!<}u!!,}u!!!>"!!!>},<}{!!}>},{<!!'o,!>},<o}}',!>},<<!>},<!!,a"!>,<!"!>,<a>}}},{{<i{}o!!>,{<}i!!!>!>,<!!!>!!,!!!>{>,<!>},<!>,<!<!!'!!!"}!!!>e!>,<u<>}}}}},{<!!!u,!>!>,<u>,<e{!!!>u{eu!>},<!!<<!>,<u>}},{{{<!!}!>},<'!!'ii,"!!uu!>!'e>}}},{{{{<!a<'!>,<,>},<>},{<!!,}>}}}},{{<aoo,'!>!!,!>},<!i!!u>,{}},{{}}}},{{{<{!!'e!!!>!>},<!!!>"o!!,!>},<ooi!!!><>},{{<!!!!!>},<ee!!!>,<'!!!>a{!!,e!!!!!>a!>,!<!i!>,<>}}},{{{<ua}!>o>,{<!>,<!>'a{!!!>,<!>>}},{{{<,oiu{!!!!!!!>},<eo>},{<<e>}}}},{<!>},<""!!!>!>,<,ooe!!{!!!>},<!>,<>}},{{<i!!!><>},{},{{{<!!e{!>,<!!o!!!>,<e<!}!!"!!!>!>},<,>},{<!>},<!!oo}!a!!!>!!<'u>}},{{<e>},<>}}},{{<!}{a<!'}"a!>,<a!!o'i>,<!!!>},<!!!>i"!!!!{!!!!}ao!>},<}!!'i!!!!!!>},{{<!>},<!!,!>a!"!!u!!"a!!e>},<o,e!>,<!>,<}!!e!>},<!!'a,ii!o!>},<!!ai">},{{<o"!!!>!!!>}}!!!!!>i!>},<!>},<">,<!!!!!!!><{!!u!!,a'o{!>,<!">},{{<<a<>,<{>},{{{<!>o!>!>e}i">},{{<!!!!!>!>,<<!>},<!{a<a<!!>},{<!!'ue"e{ua>,<!>'!!}o!!!>!!!>a!>,<<!!!>!!!!!!{!>>}}},<{<a"!!"}o'io>},{<ue!>},<}e'e{>}},{{<'!>,<o!!!>},<!>!!!>oi'!!!>},<'o<>},{{{<!>!>!!!>!>},<!!!>},<u,!>,<!o}>},{}},{<!!!!}!u{!o!!ieea",u!!!!!>!!!>!><!!"">}},{<!>},<<}!!aa"!>},<"!>}a{!>},<!!!!!>!uo>}}}}}}},{{{{<{!}>},{{}},{}},{},{{<,!>"!!!>!>,<!!oo!!!>},<}i!'u'!!!>!>!>},<{a>,{<a!!!>!!!>!>,<!!!'!>!a",!>},<!!o!>},<a!!!!}}{>}},{<{u!>{,!>!!<!i>,<e<!>o!i!!!>!!!!"uo"!>,<u'"!>},<,!i>}}},{{{<<iee!!a"!>},<!>,<,>,<,!!!!!>}o!>,<oo!>!>,<"io!>},<}!',"!o>},{<}!!{'{!!!!<{!ai!!!>"!<ou!!a!{<!!">},{<!>},<!>,<i!e!!!>a!>,<!!o!>!>},<!>},<!!!>aa>,{<u"{<!>},<}!!o'"i!!u<}a>}}},{{{{{<>},{<<}uoa,'!e!!e!!!>!{o!!!i>}}},{<ai!!!>eou!!!>!a!!!ei}!{u!!!a!!!<!!ei>,<aue}!!!!}!>,<a{o!>,<!!!!>}},{{<!!o!!ieu!>,<!u',aeaia!!}">},{{{},{<!!'"<}i>}}}}}},{{},{{{{<'!!e!i!>u!><e,!">},{<!<<!>!!uu"!>},<!!u<iia!!}!">,{}}},{{}}},{{<a!!a<!>,<'!>,<!>,<,',!>,<>,{{{<!!!!!!!>e}"!!i<>}},<e!}'!>},<!>!>},<!!a!!'i>}},{<"!a',"a>}}},{{{<<,!>},<!>,<!o<!>},<<!!!>u>},{{{}},{<!!!!e<!!!!!>o!>,<o{!>!>,<>,<>},{}},{{},{<"!>,<!i>,{<>}}}},{{{<{!"!>i"!!<i"{}>}},{<>,<oi,i'>}},{{{<{!!!>oe!'!!!!!>!>!>},<!>,!!!e{a>}},{{<"!>,<!>u!!,!>a{<!!'a,>,{<i"!>},<u!>,<,,'!,!o!>},<!!!!i>}},<i!>},<io<!!a!!,!!!>}!"'"o!!o!>}>},{<!>'ue!!!>,<'ia}{!>},<!>,<{o<u!>,<>}},{{{{{<>}},<!o!!!>},<!!!>!>},<!!{ae!!e!!!!!!!!!!!>i>},{{},{{<o!>},<}{o!>,<!!!!!>!!!>,<!>!!!>!>,<u>}}},{{{<!>,a"!!i!>},<!!"!!"!!u}ue!!"o!!e>},{}},{<!>,<!!!>!!!>{ue!e,!>,<o<o{!>,<!>,<!!!>,<>}}},{{<!>},<i}!!<<!!e!>>}}}}},{{{<,>,<{!>},<{!,{,>},{<<e"}u}}!!!>!>!!!>a!>},<!>,<oea'u!!!>>,<i!>,o<!>!!"!>a!!!>,<!'!>!!!>>},{<{o{uuo<,o!!!>!!!>!!!>}>,{}}}},{{},{{{},{}},{{<i{ie"!o'{!!!>},<!a}!!!>},<>},<!!,e<e!>},<!>},<!!!>a!!e!>i>}},{{{{{{{{{<!>u!!!>!!!>!ui'{!>},<>}},{}},{}}},{<o!!!>>},{}},{{{{}},{{{<}ue<!!!!!>i!>},<!!a}a<!>,<!>,<>}},{{<!!{!>i!!!>},<a<!!!>!>},<!>},<u}{ao!!!!>},<o!>,<o!!!>!!!>i!!!><!>oe}!o>},{{{<!>!>,<!>ee!!!a!>!!!>>}}}},{{<a!!!>!!<<!!!!u!!e>,{}}},{{{<!>},<eu!>i!!'!>!!!!!>!>,<">},{{<'!!!!!>u!>,<ue"{,i!a}"{!!!>!!o!>,<>}},{{},{}}},{{{{},{{{<!>,<!'>}}},{<!i!>,<oe}!!o''<!>},<>}},{{{<ee!>!!>}},{<a{>,<!>!!{!>,<>}},{{{}},{{{{<!!a>},<>},<{!!!>,<o>},{{<{<<>},<!!!"!>,<!!!!!>!!e!!!>!>!!>}}},{{<!!,u{!!}"uie!!}!>,<o>},{{{<}!!!>!>,<!>},<a>}},{<!!!>!>,<<ea{"!>}aua}!>},<}!!!>!!!o'>,{<'",}"}>}}}}}},{{{<e!>},<!>>},{{<!>!>"'!!!<}!io!!!!u!!!>!><i!a!!!!!>>}}},{}},{{}}}},{{{<>},{{<!!!!!}!!i!><!!!>>}},{{<!!!!!>'>}}},{{{<{!!!><!!!>e!>!!!>e"!,}u>},{<!>}>,<!!!>'!"ae<a>},{{<i!>,<"!>},<!!!!!>},<ae!>>},{}}},{{{{<>}},{<o<!!!>e>,{{<oa!>,<"!}'u!>,<o'!>!"",!!!>>},{<!!a!>,<!!}!>},<!>},<!!!!!>,<u!>,<e<!!<a!{a!,!!!>!!!>>}}},{{<}'{!!a!!!>!!o!>!{!>},<!!!!!!""'>},{<{!!!>{>}}},{},{{{{{}},{{{<!!{"eu>},{}},{<!!'ia!}a''!>}>,{{<<},!>,<,ea!oi!!'a!!!"!!!>!>,<!!!>u>},<>}}}},{{<>}},{{{{<!>,<{!e!>,<au<,}>},{<!>!>},<"<e!>!"o',ua'"!>},<!!!{>}},{<!"!>},<!!}!!"e!!!>{{!!'u!e!>,<"!>,<>}},{{{<o!!!>!!"!"o!>!>,<!!!>>},<,a<!>},<!>,<!!o{ioo!"!>>},{{}},{{{<}'!!!!!>},<}{>}}}}}},{{<}e{!!ieia"a!>!eeu!!i!>>,{<!!!!!>"i>}},{{<'<,!'!!!>!>},<e>,<a!>>},{{<!!u<a'!!!><"!ou>,<!!!>!,!!>}}},{{<}u!o>},<!>!>,<ui>}}},{{<uu!i!<u!<u!!!>{!!!ii!!!>>},{<!!,,!<!{!>},<!!!>>,<<i!"}!!!>"oi}"o'!>!'!>!u>},{{<<i!!a!>!!"o!!i!!,e}{!!"i!!!><>},{}}}}},{{{{{},<a"!!!>!>'>}},{{<'>},{<,!!eie!>},<!!!>},<o!!!>!!!>'"!!!!<!>>,<o!>ou<>},{{<a!i!!io,>}}},{{{{<!!!>!>},<!!'!!,"!!!>!}"}!>},<}!!u>,<<a!!!>"!>,<"!!"o!>},<>},{{}}}}}},{{{<u!!!>"!>!!!>oi{!!!!<a!>},<i{!>!>"<}>},{{<}!!ee!>!!!!ea!!!!!!!><,!>>},<i!!!>,<u<i}"!!!>,iii{a}a!o>}},{<!>,<!>},<!!,}!!<!!!>'!!!>'!!!>},<!!!a>,{<!<}!>,<!!!>,!{{<o!>,<a!!!>!{u!>,<}!!!!!!,>}},{<o>}},{{{<!e!!!!!>,<,}a!!o!e}!!<i,a!!!!!>!>>}},{{<'!>},<!!<i!>!>a!><!>,<!!!>'>}}},{{{{<}!>,<!>},<>}},{<}!!!>!!!>!!e!>,<ooia!<>}},{{<}"i,i{!>,<<,}!>}!<!!}!!!!,{!!>},<<ii}!!!>!i>},{}}}},{{{<i,,a"!!oie!>,<u>}}}},{{{<>},{<!ua}>}}},{{},{},{{{},{<'!ou{>}},<!!!>!>!>},<{!>,<oeu>}}},{{<!!!!o!>!!"!!!>!>,<!"!>!!!>!>,<{u!!!>},<!!!>"!!>}},{{{<!>!},<!!{<>},<!>},<o}e!>,<}>},{{{},{{<aio{<!{!!u!>'{a,o!!ii">}},{<ei!>},<},!'<!!o'!!<!!{!>,<a!{>,{{}}}},{},{{<!!!>!>},<,!!!>}!>}!!ou!}ia'i>,<!e!!!!!!i!>},<!!!>!>!>},<!>,<!!!>},<e'!!'u!!!a{>},<u'i}!!!!}!>e">}},{<{!!auo!>,<e!>},<<i!!i!>,<'!!!>ie}"u>}}},{{<>,{{}}},{{{{<!!<a!!<,!!a!!!!!!e<>},<!>>},{<a}!!!>!>},<{!>},<u!>},<,!>},<'>}},{},{<"!!!!i!!{"o!!a}!o!!!>!>'>}}},{{<ou<!>,<>,{<!>,<!!,{'a,'!!,!>,<!!u!>,<!>!<<!>,<">}},{<<'>}}}}}}
diff --git a/2018/Cargo.lock b/2018/Cargo.lock
new file mode 100644
index 0000000..4a73762
--- /dev/null
+++ b/2018/Cargo.lock
@@ -0,0 +1,76 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "advent_of_code_2018"
+version = "0.1.0"
+dependencies = [
+ "arrayvec",
+ "im-rc",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9"
+dependencies = [
+ "nodrop",
+]
+
+[[package]]
+name = "im-rc"
+version = "12.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e882e6e7cd335baacae574b56aa3ce74844ec82fc6777def7c0ac368837dc3d5"
+dependencies = [
+ "rustc_version",
+ "sized-chunks",
+ "typenum",
+]
+
+[[package]]
+name = "nodrop"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "sized-chunks"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d3e7f23bad2d6694e0f46f5e470ec27eb07b8f3e8b309a4b0dc17501928b9f2"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
diff --git a/2018/inputs/.gitkeep b/2018/inputs/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/2018/inputs/.gitkeep
diff --git a/2018/inputs/1.txt b/2018/inputs/1.txt
deleted file mode 100644
index 079567f..0000000
--- a/2018/inputs/1.txt
+++ /dev/null
@@ -1,968 +0,0 @@
-+11
-+9
-+15
--17
-+8
-+16
-+5
-+13
-+8
--6
-+12
--17
--16
-+13
-+16
--15
--5
-+11
-+19
-+5
--8
-+20
-+18
-+15
--4
--12
-+8
-+2
-+15
-+12
--13
--4
--1
--14
--15
--6
--9
--13
-+18
-+13
-+6
--8
--3
--19
-+8
-+17
-+8
-+5
--11
-+15
--7
-+9
--18
--9
-+17
--14
--19
-+4
--6
-+4
-+1
--12
-+4
--1
--9
-+4
-+19
-+20
-+11
-+8
-+19
--13
-+17
-+6
-+8
--11
-+5
-+9
--15
-+17
--12
-+6
--19
--2
-+17
--18
-+7
--5
-+19
-+15
-+5
--6
-+2
-+5
-+18
-+11
-+2
-+5
--14
-+17
-+17
-+1
-+17
--9
--1
-+5
--11
-+5
--17
-+2
-+14
-+16
--3
-+17
-+18
-+1
--16
-+19
--11
--10
-+3
-+8
-+17
-+19
--18
-+6
--1
--2
-+14
--2
-+12
-+11
-+1
--19
--1
-+18
-+13
--6
--10
--13
-+12
--11
-+19
-+14
-+17
--2
--18
--4
-+11
--12
--2
--21
-+7
--1
--5
--13
--18
--18
--7
-+9
-+12
-+6
--12
-+20
--19
-+6
--19
-+3
--16
-+20
--17
--8
-+4
-+8
--21
-+18
--6
--13
-+2
-+5
--14
--16
--19
--17
-+4
--15
--11
--3
-+6
-+13
-+18
--16
--16
--15
--15
--2
-+1
--3
-+13
-+25
-+1
-+14
--8
--8
--19
-+7
-+11
-+20
-+5
--9
-+8
-+19
--9
-+3
-+1
-+1
--12
-+18
-+15
--5
-+11
--1
-+18
--2
--18
--14
--1
--16
-+12
-+12
--20
-+10
-+25
--13
--17
--20
--13
-+11
--40
--19
-+5
--21
--9
--15
--6
-+3
-+13
--5
--2
-+33
-+3
--7
-+42
-+32
--13
-+2
-+37
--1
--20
-+30
-+3
-+8
-+10
-+11
--5
--26
-+35
-+16
--12
-+9
-+16
-+18
--13
--15
-+19
-+6
-+18
-+16
-+11
-+16
--2
--10
-+1
--2
-+17
-+7
--1
-+17
-+6
-+15
-+7
--5
--6
-+9
--4
--17
--14
--1
--21
--2
-+15
-+3
-+8
--18
--17
--14
-+6
--17
-+20
-+13
-+14
--1
--1
-+3
--11
-+19
-+19
-+7
--18
--9
-+11
--12
-+11
-+4
-+2
-+8
--2
-+6
--20
-+5
-+6
--13
--8
-+6
-+11
-+8
-+2
-+7
-+11
--7
-+18
-+11
-+15
--16
--18
-+6
-+10
-+6
-+15
-+13
-+4
-+4
-+14
-+14
--47
-+17
--7
--20
--1
-+19
-+16
--23
--13
--17
-+13
--8
-+6
--20
-+4
-+15
-+4
-+19
-+19
--7
--24
--17
--19
--2
-+19
--13
-+8
--4
--19
--9
-+29
-+21
--29
-+2
-+15
-+22
-+1
-+21
--13
--14
-+12
--57
--5
--49
--10
--19
--19
--6
-+7
-+21
--12
--13
--13
-+4
--15
-+9
-+21
--7
-+19
-+32
-+31
--27
--21
-+25
--101
-+69
--75
-+26
--22
--45
--30
-+5
--40
--15
--880
--60727
-+14
--13
--18
-+7
-+2
--5
-+6
-+14
-+5
-+5
--18
--15
--9
-+7
--10
-+19
-+4
-+7
-+6
-+3
-+21
-+2
-+5
--19
-+15
--11
--19
--7
--1
--16
-+4
--12
--15
-+3
-+5
--6
--14
-+11
--16
--7
--15
-+8
-+12
--2
--9
--12
--17
-+19
--5
--19
-+16
--10
--13
--14
--1
--10
--18
--6
--11
-+8
--11
-+4
-+14
-+9
-+8
--18
--9
-+8
--19
--5
--14
-+13
-+19
-+13
-+16
-+19
--4
--4
-+3
-+19
--4
--7
--15
-+6
--9
--15
-+12
--14
-+6
--17
-+9
-+13
--4
--20
-+17
--9
--12
-+16
-+6
--9
-+19
-+10
-+11
-+17
--19
--1
-+12
-+12
-+1
--6
--1
-+4
--12
-+11
--14
-+19
--3
--9
--6
--23
--2
--13
-+18
--2
-+10
-+2
-+8
--9
--20
--17
--21
--14
-+11
--5
--15
-+2
--9
-+4
--7
--12
-+9
--1
--11
-+1
--10
-+11
--17
--10
--17
--3
--10
-+11
-+15
--19
--14
-+1
-+2
-+18
-+17
-+3
-+17
--18
--15
-+2
--3
--14
-+9
-+9
-+6
--18
-+13
--21
--18
-+12
-+7
-+13
--11
-+20
-+12
-+1
-+15
--14
-+4
-+11
-+18
--2
--7
--12
--11
-+5
-+10
-+6
-+8
-+18
-+6
--13
-+19
--5
--3
-+14
--3
--20
--3
--3
-+16
--15
--12
-+8
--24
--16
--13
--3
-+13
-+6
--12
--31
-+7
--18
-+17
--13
-+1
--15
-+16
-+4
--1
--17
--1
-+16
--4
-+13
-+8
-+3
-+33
-+8
--6
-+20
--4
-+2
-+13
--29
--17
--22
--24
--5
-+2
--12
--1
-+2
--15
-+2
--11
-+6
-+1
--2
-+5
-+4
--22
-+5
-+19
--13
--7
-+16
-+6
-+2
--22
-+19
-+9
-+8
--9
--12
--18
--13
-+1
-+5
--9
-+10
--11
--10
-+16
--15
--2
--16
-+1
--15
--17
--3
-+6
-+11
-+4
-+11
--16
--3
-+6
--1
-+13
-+18
-+6
--2
--6
--4
--5
-+20
-+19
--8
-+1
--13
-+16
-+1
-+10
--25
--19
--4
-+9
--8
-+17
-+6
--19
--2
-+5
-+12
-+7
--21
--12
-+3
--7
--11
--3
--18
-+2
-+12
-+20
--23
--19
--17
-+9
--19
-+1
--14
--5
--4
--9
-+17
-+4
-+3
-+15
--13
-+1
--12
--17
-+8
-+8
--20
--17
-+15
--16
-+10
-+7
-+2
--10
--2
-+8
-+19
--6
--17
--8
-+9
-+17
-+25
--5
--18
-+4
-+18
-+9
-+18
--14
--2
-+11
-+14
--17
--15
-+38
-+12
--2
-+14
-+4
-+21
-+16
-+12
-+15
-+23
--1
-+6
-+9
--24
--6
--13
--3
-+33
--13
-+62
-+81
-+11
--5
--27
-+9
--7
-+20
--19
--4
-+27
-+28
--29
-+82
-+11
--10
-+8
--22
-+42
-+34
--24
--15
-+19
--66
--70
--34
--18
--548
-+408
--1249
--60542
-+6
--17
--4
-+6
--7
-+3
-+14
-+2
-+15
--6
--5
-+19
--17
--10
-+6
--11
-+2
--4
-+10
--5
--11
--13
--12
--14
--10
--9
-+17
-+9
-+15
-+1
--10
--10
-+14
-+16
--17
--15
-+7
--6
--16
--10
-+15
--2
--7
--3
--5
--14
--8
--9
-+16
-+7
-+17
--22
-+12
--16
-+18
-+5
-+15
-+10
-+20
-+11
--5
-+12
--16
-+8
--16
-+13
-+14
--5
--12
--9
--16
--5
-+16
--18
-+21
--9
--13
--8
--10
-+14
-+18
--17
--16
-+8
--15
-+2
--4
-+3
--21
-+17
--16
-+18
-+18
--3
--21
-+1
--19
--3
--2
--4
--5
--20
--19
-+6
--19
-+3
--12
-+124236
diff --git a/2018/inputs/10.txt b/2018/inputs/10.txt
deleted file mode 100644
index 3c77538..0000000
--- a/2018/inputs/10.txt
+++ /dev/null
@@ -1,369 +0,0 @@
-position=<-30052, -9918> velocity=< 3, 1>
-position=< 20349, -50260> velocity=<-2, 5>
-position=< 40505, -40169> velocity=<-4, 4>
-position=< 30444, 50599> velocity=<-3, -5>
-position=< 40549, -50259> velocity=<-4, 5>
-position=< 30454, -30087> velocity=<-3, 3>
-position=< 50623, 20347> velocity=<-5, -2>
-position=< 30439, -50262> velocity=<-3, 5>
-position=< 50623, 40516> velocity=<-5, -4>
-position=<-40143, -30090> velocity=< 4, 3>
-position=< 50594, 50602> velocity=<-5, -5>
-position=< -9884, -30087> velocity=< 1, 3>
-position=<-19958, -40168> velocity=< 2, 4>
-position=< 20357, 40513> velocity=<-2, -4>
-position=<-50240, 30431> velocity=< 5, -3>
-position=< 20351, 40516> velocity=<-2, -4>
-position=<-50257, -20005> velocity=< 5, 2>
-position=<-30073, 10253> velocity=< 3, -1>
-position=<-50265, 50597> velocity=< 5, -5>
-position=<-40154, 50601> velocity=< 4, -5>
-position=<-19987, -40168> velocity=< 2, 4>
-position=<-19987, -30087> velocity=< 2, 3>
-position=<-50257, 30425> velocity=< 5, -3>
-position=< 40558, 30425> velocity=<-4, -3>
-position=<-19990, 10256> velocity=< 2, -1>
-position=<-19979, 30425> velocity=< 2, -3>
-position=<-19976, -50254> velocity=< 2, 5>
-position=< 30446, -40172> velocity=<-3, 4>
-position=<-40157, 40515> velocity=< 4, -4>
-position=<-40143, 20342> velocity=< 4, -2>
-position=< 30467, -50255> velocity=<-3, 5>
-position=<-30040, 50606> velocity=< 3, -5>
-position=<-30037, 50605> velocity=< 3, -5>
-position=< 20382, -30086> velocity=<-2, 3>
-position=< 50594, 10262> velocity=<-5, -1>
-position=< 20342, 40515> velocity=<-2, -4>
-position=<-19963, -50258> velocity=< 2, 5>
-position=<-40135, 50599> velocity=< 4, -5>
-position=< 40558, 10262> velocity=<-4, -1>
-position=< 20366, -40177> velocity=<-2, 4>
-position=< -9888, -9919> velocity=< 1, 1>
-position=<-19998, 40511> velocity=< 2, -4>
-position=< 50608, 40516> velocity=<-5, -4>
-position=< 10263, 40520> velocity=<-1, -4>
-position=< 40521, -40171> velocity=<-4, 4>
-position=< 30427, -20005> velocity=<-3, 2>
-position=< 20333, -9916> velocity=<-2, 1>
-position=< -9909, -9913> velocity=< 1, 1>
-position=< 50628, 40511> velocity=<-5, -4>
-position=< 50610, 30430> velocity=<-5, -3>
-position=<-50248, 30433> velocity=< 5, -3>
-position=< 50612, 50599> velocity=<-5, -5>
-position=<-50253, -40170> velocity=< 5, 4>
-position=< -9880, 40513> velocity=< 1, -4>
-position=< 20362, 10256> velocity=<-2, -1>
-position=< -9877, -30087> velocity=< 1, 3>
-position=<-40182, -30082> velocity=< 4, 3>
-position=<-50240, -20003> velocity=< 5, 2>
-position=<-40138, 10255> velocity=< 4, -1>
-position=<-50221, 20348> velocity=< 5, -2>
-position=< -9896, -9917> velocity=< 1, 1>
-position=<-50209, 40516> velocity=< 5, -4>
-position=< 20352, 50602> velocity=<-2, -5>
-position=< 50607, -19998> velocity=<-5, 2>
-position=<-19995, -30087> velocity=< 2, 3>
-position=<-20003, 40517> velocity=< 2, -4>
-position=<-50219, 30431> velocity=< 5, -3>
-position=< 40521, -20001> velocity=<-4, 2>
-position=<-30036, 20339> velocity=< 3, -2>
-position=< 50624, 10257> velocity=<-5, -1>
-position=<-50224, 40517> velocity=< 5, -4>
-position=< -9907, 20344> velocity=< 1, -2>
-position=< 40534, -40169> velocity=<-4, 4>
-position=<-30065, -20003> velocity=< 3, 2>
-position=< -9922, 20339> velocity=< 1, -2>
-position=<-30052, 50602> velocity=< 3, -5>
-position=< 10276, -50263> velocity=<-1, 5>
-position=< 50594, 10258> velocity=<-5, -1>
-position=< -9876, 10258> velocity=< 1, -1>
-position=<-20001, -30091> velocity=< 2, 3>
-position=<-50253, 50602> velocity=< 5, -5>
-position=<-40159, -20002> velocity=< 4, 2>
-position=<-50224, -30091> velocity=< 5, 3>
-position=<-20001, 40511> velocity=< 2, -4>
-position=< 20357, -40173> velocity=<-2, 4>
-position=< 50615, 10255> velocity=<-5, -1>
-position=< -9877, -50254> velocity=< 1, 5>
-position=< 30440, 40516> velocity=<-3, -4>
-position=< 30427, 50605> velocity=<-3, -5>
-position=< 30419, -30090> velocity=<-3, 3>
-position=< 20376, -20001> velocity=<-2, 2>
-position=< 10255, 20344> velocity=<-1, -2>
-position=< 30419, 20344> velocity=<-3, -2>
-position=< 50595, -40169> velocity=<-5, 4>
-position=<-30081, 40513> velocity=< 3, -4>
-position=<-40143, -30090> velocity=< 4, 3>
-position=< 40553, 20344> velocity=<-4, -2>
-position=< 40529, -40170> velocity=<-4, 4>
-position=< 30427, -50262> velocity=<-3, 5>
-position=<-50240, -19996> velocity=< 5, 2>
-position=<-50245, -30090> velocity=< 5, 3>
-position=< 30448, -30087> velocity=<-3, 3>
-position=< -9875, -40171> velocity=< 1, 4>
-position=< -9900, 50599> velocity=< 1, -5>
-position=<-19954, -40168> velocity=< 2, 4>
-position=< 40526, 40518> velocity=<-4, -4>
-position=<-20011, 30428> velocity=< 2, -3>
-position=< 10283, 10257> velocity=<-1, -1>
-position=<-40175, 40520> velocity=< 4, -4>
-position=< 50636, -9915> velocity=<-5, 1>
-position=< -9904, 10255> velocity=< 1, -1>
-position=< 30435, 40520> velocity=<-3, -4>
-position=< 30424, -50254> velocity=<-3, 5>
-position=< 20393, 50602> velocity=<-2, -5>
-position=<-50261, -30083> velocity=< 5, 3>
-position=<-30065, 10254> velocity=< 3, -1>
-position=<-30052, -40177> velocity=< 3, 4>
-position=< 50625, -50263> velocity=<-5, 5>
-position=<-40142, -20001> velocity=< 4, 2>
-position=< 20338, -19996> velocity=<-2, 2>
-position=< 50599, 50604> velocity=<-5, -5>
-position=< 40534, -40176> velocity=<-4, 4>
-position=<-50235, 20339> velocity=< 5, -2>
-position=<-30068, -9918> velocity=< 3, 1>
-position=<-40173, 20339> velocity=< 4, -2>
-position=<-30054, -9915> velocity=< 3, 1>
-position=< 10255, 20348> velocity=<-1, -2>
-position=<-40162, 40520> velocity=< 4, -4>
-position=<-40158, -9918> velocity=< 4, 1>
-position=< 40508, 20348> velocity=<-4, -2>
-position=< 10307, -40177> velocity=<-1, 4>
-position=< 40545, -50261> velocity=<-4, 5>
-position=<-30073, -40172> velocity=< 3, 4>
-position=<-50209, -9918> velocity=< 5, 1>
-position=< -9913, 40515> velocity=< 1, -4>
-position=< -9873, -50262> velocity=< 1, 5>
-position=< -9877, 10261> velocity=< 1, -1>
-position=<-50245, -30084> velocity=< 5, 3>
-position=< 30440, 50606> velocity=<-3, -5>
-position=<-40167, 40514> velocity=< 4, -4>
-position=<-30076, -50255> velocity=< 3, 5>
-position=< -9891, -19996> velocity=< 1, 2>
-position=< -9877, 20340> velocity=< 1, -2>
-position=< 20365, -9911> velocity=<-2, 1>
-position=<-50256, 10253> velocity=< 5, -1>
-position=< -9909, -19996> velocity=< 1, 2>
-position=< 30479, -9919> velocity=<-3, 1>
-position=<-30065, 10257> velocity=< 3, -1>
-position=< 50652, -9919> velocity=<-5, 1>
-position=< 20338, -9914> velocity=<-2, 1>
-position=<-30062, 20339> velocity=< 3, -2>
-position=< 20360, 10259> velocity=<-2, -1>
-position=< 40537, 50604> velocity=<-4, -5>
-position=<-50221, 50603> velocity=< 5, -5>
-position=< 40505, -30090> velocity=<-4, 3>
-position=< -9890, 20339> velocity=< 1, -2>
-position=<-30097, -50261> velocity=< 3, 5>
-position=<-19995, -30086> velocity=< 2, 3>
-position=< 20341, 10255> velocity=<-2, -1>
-position=<-19977, -20005> velocity=< 2, 2>
-position=<-30053, -50259> velocity=< 3, 5>
-position=<-30065, -40173> velocity=< 3, 4>
-position=< 50617, 50601> velocity=<-5, -5>
-position=< 50631, -40171> velocity=<-5, 4>
-position=< -9925, -9915> velocity=< 1, 1>
-position=<-40150, 10262> velocity=< 4, -1>
-position=< 40526, 40516> velocity=<-4, -4>
-position=<-30055, -9915> velocity=< 3, 1>
-position=<-50264, 30432> velocity=< 5, -3>
-position=< 10287, -20003> velocity=<-1, 2>
-position=< 40534, 20348> velocity=<-4, -2>
-position=<-19960, -19998> velocity=< 2, 2>
-position=< 30464, -40173> velocity=<-3, 4>
-position=<-50220, -50259> velocity=< 5, 5>
-position=< 40537, -9919> velocity=<-4, 1>
-position=< 20357, 20346> velocity=<-2, -2>
-position=< 40510, 50598> velocity=<-4, -5>
-position=< 50607, -40172> velocity=<-5, 4>
-position=< 40537, -19996> velocity=<-4, 2>
-position=< 50636, 10261> velocity=<-5, -1>
-position=< -9896, 30425> velocity=< 1, -3>
-position=< -9917, 10255> velocity=< 1, -1>
-position=<-50248, 50606> velocity=< 5, -5>
-position=<-50237, -9919> velocity=< 5, 1>
-position=<-30073, -20005> velocity=< 3, 2>
-position=< 40529, 50606> velocity=<-4, -5>
-position=< 50650, -30082> velocity=<-5, 3>
-position=<-30093, 10258> velocity=< 3, -1>
-position=< 30456, -40177> velocity=<-3, 4>
-position=< 40521, -40170> velocity=<-4, 4>
-position=< 30468, 10257> velocity=<-3, -1>
-position=< 10276, -50261> velocity=<-1, 5>
-position=< 30421, -9919> velocity=<-3, 1>
-position=< -9877, 20346> velocity=< 1, -2>
-position=< 10258, -40177> velocity=<-1, 4>
-position=<-50264, 40516> velocity=< 5, -4>
-position=< -9883, -40173> velocity=< 1, 4>
-position=<-40127, -50256> velocity=< 4, 5>
-position=< -9885, 20343> velocity=< 1, -2>
-position=< 20382, -9914> velocity=<-2, 1>
-position=<-30076, -19998> velocity=< 3, 2>
-position=<-30073, 50601> velocity=< 3, -5>
-position=< -9893, 20345> velocity=< 1, -2>
-position=< -9904, 10258> velocity=< 1, -1>
-position=< 20393, -40171> velocity=<-2, 4>
-position=<-19984, 50603> velocity=< 2, -5>
-position=< -9889, 20343> velocity=< 1, -2>
-position=<-19982, 40512> velocity=< 2, -4>
-position=<-20009, -40168> velocity=< 2, 4>
-position=<-30069, -19997> velocity=< 3, 2>
-position=<-19987, -30085> velocity=< 2, 3>
-position=< 10252, 10259> velocity=<-1, -1>
-position=< -9917, 30428> velocity=< 1, -3>
-position=< 10287, 20342> velocity=<-1, -2>
-position=<-50245, -20000> velocity=< 5, 2>
-position=<-40165, -40177> velocity=< 4, 4>
-position=<-40135, -50262> velocity=< 4, 5>
-position=<-19984, -30085> velocity=< 2, 3>
-position=< 30428, -30091> velocity=<-3, 3>
-position=<-30089, 30431> velocity=< 3, -3>
-position=< 30467, 20344> velocity=<-3, -2>
-position=<-19987, 40520> velocity=< 2, -4>
-position=<-30037, 40512> velocity=< 3, -4>
-position=< 40557, -50255> velocity=<-4, 5>
-position=< 40550, 10254> velocity=<-4, -1>
-position=<-40159, 10258> velocity=< 4, -1>
-position=< 40539, 20343> velocity=<-4, -2>
-position=< 30440, 50605> velocity=<-3, -5>
-position=< 30453, 30434> velocity=<-3, -3>
-position=< 40550, -30088> velocity=<-4, 3>
-position=<-40151, 10256> velocity=< 4, -1>
-position=< 10276, 40514> velocity=<-1, -4>
-position=< 10280, 20348> velocity=<-1, -2>
-position=<-20009, -30091> velocity=< 2, 3>
-position=< 30467, 50601> velocity=<-3, -5>
-position=< 30439, -20000> velocity=<-3, 2>
-position=< 10276, -20005> velocity=<-1, 2>
-position=< 40562, -30082> velocity=<-4, 3>
-position=<-19986, -20004> velocity=< 2, 2>
-position=< 20333, 10259> velocity=<-2, -1>
-position=<-50224, -9911> velocity=< 5, 1>
-position=< -9872, -9919> velocity=< 1, 1>
-position=< 10295, -30085> velocity=<-1, 3>
-position=<-19990, 30429> velocity=< 2, -3>
-position=< 10295, -30084> velocity=<-1, 3>
-position=< 30429, 40515> velocity=<-3, -4>
-position=< 20365, -30086> velocity=<-2, 3>
-position=< 50618, 10258> velocity=<-5, -1>
-position=<-20010, -9910> velocity=< 2, 1>
-position=< 20373, -40169> velocity=<-2, 4>
-position=< 10307, -50261> velocity=<-1, 5>
-position=< 20381, 10256> velocity=<-2, -1>
-position=< 40513, 40517> velocity=<-4, -4>
-position=< -9865, 20345> velocity=< 1, -2>
-position=< -9909, 20347> velocity=< 1, -2>
-position=< 10284, 20348> velocity=<-1, -2>
-position=<-30073, 20342> velocity=< 3, -2>
-position=<-30078, 30425> velocity=< 3, -3>
-position=< -9899, 20342> velocity=< 1, -2>
-position=< 20333, 30429> velocity=<-2, -3>
-position=< 10306, 10253> velocity=<-1, -1>
-position=<-50261, 10260> velocity=< 5, -1>
-position=< 30459, -9912> velocity=<-3, 1>
-position=< 10292, -40176> velocity=<-1, 4>
-position=< 20389, -30083> velocity=<-2, 3>
-position=<-40166, 20340> velocity=< 4, -2>
-position=< -9901, 20345> velocity=< 1, -2>
-position=< 40557, -20004> velocity=<-4, 2>
-position=<-40158, -30090> velocity=< 4, 3>
-position=<-50209, 10255> velocity=< 5, -1>
-position=<-50265, -40172> velocity=< 5, 4>
-position=<-50245, 50605> velocity=< 5, -5>
-position=< 30443, -40177> velocity=<-3, 4>
-position=< -9916, 20339> velocity=< 1, -2>
-position=< 50640, 50601> velocity=<-5, -5>
-position=<-19971, -20005> velocity=< 2, 2>
-position=< 40522, -9914> velocity=<-4, 1>
-position=< 50607, -19999> velocity=<-5, 2>
-position=<-50243, 40515> velocity=< 5, -4>
-position=<-50240, 10260> velocity=< 5, -1>
-position=< 40561, -19998> velocity=<-4, 2>
-position=<-50211, -50254> velocity=< 5, 5>
-position=<-40143, 30431> velocity=< 4, -3>
-position=< 30430, -50259> velocity=<-3, 5>
-position=< 30479, -20002> velocity=<-3, 2>
-position=<-30092, 20344> velocity=< 3, -2>
-position=<-30092, -40168> velocity=< 3, 4>
-position=< 50601, 10257> velocity=<-5, -1>
-position=< 20373, 40515> velocity=<-2, -4>
-position=< 30479, -19997> velocity=<-3, 2>
-position=<-40175, 50605> velocity=< 4, -5>
-position=< -9880, -40173> velocity=< 1, 4>
-position=< 20349, -50255> velocity=<-2, 5>
-position=< 20362, -9914> velocity=<-2, 1>
-position=<-30089, 50601> velocity=< 3, -5>
-position=< 30467, 10253> velocity=<-3, -1>
-position=< 40565, 30429> velocity=<-4, -3>
-position=<-40142, 10257> velocity=< 4, -1>
-position=< 50609, -50263> velocity=<-5, 5>
-position=< -9881, -40173> velocity=< 1, 4>
-position=< 50639, 40515> velocity=<-5, -4>
-position=<-50269, -40170> velocity=< 5, 4>
-position=< 40553, -9910> velocity=<-4, 1>
-position=< 30455, 30434> velocity=<-3, -3>
-position=< 20362, 10258> velocity=<-2, -1>
-position=< 40505, 50603> velocity=<-4, -5>
-position=<-19990, 10260> velocity=< 2, -1>
-position=< 30447, -19998> velocity=<-3, 2>
-position=<-40150, -30087> velocity=< 4, 3>
-position=< -9907, -40172> velocity=< 1, 4>
-position=<-30044, 20348> velocity=< 3, -2>
-position=<-40178, -9913> velocity=< 4, 1>
-position=<-50261, 30428> velocity=< 5, -3>
-position=<-40151, 20348> velocity=< 4, -2>
-position=<-50224, 30432> velocity=< 5, -3>
-position=< 50652, -50263> velocity=<-5, 5>
-position=<-19952, 50606> velocity=< 2, -5>
-position=< 30431, 40511> velocity=<-3, -4>
-position=< 30459, -30088> velocity=<-3, 3>
-position=< 50651, 20347> velocity=<-5, -2>
-position=< 10292, -30082> velocity=<-1, 3>
-position=< 20366, 10257> velocity=<-2, -1>
-position=<-19987, -9913> velocity=< 2, 1>
-position=< -9865, -40170> velocity=< 1, 4>
-position=< -9889, 50597> velocity=< 1, -5>
-position=<-30065, -50262> velocity=< 3, 5>
-position=< -9921, 20347> velocity=< 1, -2>
-position=<-30084, 10253> velocity=< 3, -1>
-position=< 10248, -20005> velocity=<-1, 2>
-position=< 20345, -9915> velocity=<-2, 1>
-position=< -9882, -9915> velocity=< 1, 1>
-position=<-30065, 50602> velocity=< 3, -5>
-position=< 40565, 50599> velocity=<-4, -5>
-position=< 20349, -50261> velocity=<-2, 5>
-position=<-19960, -19998> velocity=< 2, 2>
-position=< 10255, -50258> velocity=<-1, 5>
-position=< -9901, -50255> velocity=< 1, 5>
-position=<-50219, -9916> velocity=< 5, 1>
-position=< 40524, -30086> velocity=<-4, 3>
-position=< 40550, 50600> velocity=<-4, -5>
-position=<-50233, -30091> velocity=< 5, 3>
-position=< 30440, -50257> velocity=<-3, 5>
-position=< -9920, 50605> velocity=< 1, -5>
-position=< 40507, 20339> velocity=<-4, -2>
-position=< 10264, 30426> velocity=<-1, -3>
-position=< 40556, 20341> velocity=<-4, -2>
-position=< -9875, -9913> velocity=< 1, 1>
-position=<-30068, -50254> velocity=< 3, 5>
-position=< -9889, 30425> velocity=< 1, -3>
-position=<-20011, -40172> velocity=< 2, 4>
-position=<-50269, 10259> velocity=< 5, -1>
-position=<-40132, 30432> velocity=< 4, -3>
-position=< 40553, -9913> velocity=<-4, 1>
-position=<-30073, 10256> velocity=< 3, -1>
-position=<-30092, 20340> velocity=< 3, -2>
-position=< 40542, 50606> velocity=<-4, -5>
-position=<-50224, 20347> velocity=< 5, -2>
-position=<-40143, 50606> velocity=< 4, -5>
-position=<-19971, -20000> velocity=< 2, 2>
-position=< 40553, 20340> velocity=<-4, -2>
-position=<-30081, -20001> velocity=< 3, 2>
-position=<-30037, -40172> velocity=< 3, 4>
-position=< -9865, 30428> velocity=< 1, -3>
-position=< 30479, 20340> velocity=<-3, -2>
-position=< 30429, 20343> velocity=<-3, -2>
-position=<-19971, -40172> velocity=< 2, 4>
-position=< 30431, 50601> velocity=<-3, -5>
-position=<-19982, 10256> velocity=< 2, -1>
-position=< 20344, 20343> velocity=<-2, -2>
diff --git a/2018/inputs/12.txt b/2018/inputs/12.txt
deleted file mode 100644
index 6d801ae..0000000
--- a/2018/inputs/12.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-initial state: ###..#...####.#..###.....####.######.....##.#####.##.##..###....#....##...##...##.#..###..#.#...#..#
-
-.###. => .
-..#.. => .
-.#### => .
-.##.. => #
-#.#.# => .
-..#.# => #
-#.##. => #
-#...# => #
-..... => .
-##..# => #
-.#.#. => .
-..##. => #
-##.#. => .
-###.. => .
-.#... => #
-..### => .
-#..## => .
-...#. => .
-###.# => #
-.##.# => .
-.#.## => .
-....# => .
-##### => .
-#.#.. => #
-...## => #
-#.... => .
-#.### => #
-##... => #
-.#..# => .
-####. => .
-#..#. => #
-##.## => #
diff --git a/2018/inputs/13.txt b/2018/inputs/13.txt
deleted file mode 100644
index a2195f8..0000000
--- a/2018/inputs/13.txt
+++ /dev/null
@@ -1,150 +0,0 @@
- /----------------------------------------------------\ /----------------------------\
- /-------->-------\ | /----+----------+----------------------------+----------\
- | /+-----+-----------------------------------------------+----+----------+-\ /---+-------\ |
- | /-------++-----+-----------------------------------------------+----+----------+-+---\ | | | |
- /--+-------+-------++-----+-----------------------------------------------+---\| | | | | | | |
- /----------+--+-----\ | || | /----------------------------------+---++----------+-+---+----\ | | | |
- | | | /---+-+-------++-----+------------+--------------->------------------+---++----------+-+\ | | | | | |
- | /-----+--+-+---+-+-------++-----+------------+----------------------------------+---++---\ | || | | | | | |
- | | | | | | | || | | /-------------------+---++---+--\ | || | | | | | |
- /+----+-----+--+-+---+-+-------++-----+------------+\ | | || | | | || | | | | | |
- || | /---+--+-+---+-+-------++-----+------------++-------------+-------------------+---++---+--+-\ | || | | | | | |
- || | | | | | | | || /-+---------\ || | | || | | | | || | | | | | |
- || | | | | | | | || | | | || | | || | | | | || | | | | | |
- || | | | | | | ^ || | | | || | /-----+---++---+--+-+-+-++--+----+-------------+---+--\ | |
- || | | | | | | | ||/--+-+---------+--++-------------+------->-----+-----+\ || | | | | || | | | | | | |
- || | | | | | | | ||| | | | || /-------+-------------+-----++--++---+--+-+-+-++--+----+-------------+---+\ | | |
- || | | | | | | | ||| |/+---------+--++-----+-------+-------------+-----++--++---+--+-+-+-++--+----+-------------+---++\| | |
- || \-+---+--+-+---+-+-------+++--+++---------+--++-----+-------+-------------+-----++--++---/ | | | || |/---+-------------+---++++----+--+\
- || | | | | | | ||| ||| | || | | | || || | | | || || | \---++++----/ ||
- || | | \-+---+-+-------+/| ||| | || | | | |v || | | | || || | |||| ||
- || | | | | | | |/-+++-----\ | || | | | || || | | | || || | |||| ||
- || | | | | | | || ||| | | || | | | || || /----+-+-+-++--++---+-----------------++++-------++--\
- || | /+----+---+-+-------+-++-+++-----+---+--++-\ | | | || || | | | | || || | |||| || |
- || /--+--++----+---+-+--\ | || ||| | | || | | | /------+-----++--++-+----+-+-+-++--++---+-----------------++++--\ || |
- || | | || | | | | | || ||| | | || | | | | /-+-----++-\|| | | | | || || | |||| | || |
- || | | ||/---+---+-+--+----+-++-+++-----+---+--++-+---+--->---+-\ | | | || |||/+----+-+-+-++--++---+-----------------++++--+----++--+\
- || | | ||| | | | | | || ||| | | || | | | | | | \-----++-+++++----+-+-+-++--++---+-----------------+++/ | || ||
- || | | ||| | | | | | || ||| | | || | /+-------+-+----+----+-------++\||||| | | | || || | ||| | || ||
- || | | ||| | | | | /+-++-+++-----+---+--++-+--++-------+-+\ /+----+-------++++++++----+-+-+-++--++---+-----------------+++-\ | || ||
- || | | ||| /-+---+-+--+---++-++-+++-----+---+--++-+--++-------+-++--++----+------\|||||||| | | | || || | ||| | | || ||
- || | | ||| | | | | | || || ||| | | || | || | || || | ||||||||| |/+-+-++--++---+-----------------+++-+-+\ || ||
- || | | ||| | | | | | || || ||| | | || | || \-++--++----+------+++++++++----/|| | || /++---+------------\ ||| | || || ||
- || | | ||| | | | | | || || ||| | | || | || /++--++----+---\ ||||||||| || | || ||| | | ||| | || || ||
- || | | ||| | | | | | || || ||| | | || | || ||| || | | ||||||||| || | || ||\---+------------+----+++-+-++---+/ ||
- || | | ||| | | | | | || || ||| |/--+--++-+--++-------\||| || | | ||||||||| || | || || | | ||| | || | ||
- || | | /+++-+-+---+-+--+---++-++-+++-----++--+--++-+--++-------++++--++----+---+--+++++++++----\|| | || || | | ||| | || | ||
- || | | |||| | | | | | || || ||\-----++--+--++-+--++-------++++--++----+---+--++++++/|| ||| | || || | | ||| | || | ||
- || | | |||| | |/--+-+--+---++-++-++------++--+--++\| || /----++++--++----+---+--++++++-++----+++-+-++-++----+------\ | ||| | || | ||
- || | | |||| | || | | | || || || || | |||| || | |||| || | | |||||| || ||| | || || | | | ||| | || | ||
- || | | |||| | || | | | || || || /++--+--++++--++--+----++++--++----+---+--++++++-++----+++-+-++-++----+------+-----+----+++-+-++---+---++\
- || | | |||| | || | | | || || || /---+++--+--++++--++--+----++++--++----+---+--++++++-++----+++-+-++-++\ | | /+----+++-+-++---+--\|||
- || | | |||| | || | | | || || || | ||| | \+++--++--+----++++--++----+---+--++++++-++----+++-+-++-+++---/ | || ||| | || | ||||
- || | | |||| | || | | | || || \+-+---+++--/ ||| || | |||| || | | |||||| || ||| | || ||| | || ||| | || | ||||
- || | | |||| | || | | | || || |/+---+++------+++--++--+----++++--++\ | | |||||| || ||| | || ||| | || ||| | || | ||||
- || | | |||| | || | | | || || ||| ||| ||| || | ||||/-+++---+---+--++++++-++----+++-+-++-+++----------+----++----+++-+\|| | ||||
- || | | |||| \-++--+-+--+---++-++--+++---+++------+++--++--+----+++++-+++---+---+--/||||| || ||| | || ||| | || ||| |||| | ||||
- || | | |||| || | | | || || ||| ||| ||| || | ||||| ||| | | ||||| || ||| | || ||| | || ||| |||| | ||||
- || | | |||| || | | | || || ||| ||| /----+++--++--+----+++++-+++---+---+---+++++-++----+++-+-++-+++----------+----++---\||| |||| | ||||
- || | /+-++++---++--+-+--+---++-++--+++---+++-+----+++--++--+----+++++-+++\ | | ||||| || ||| | || ||| | ||/--++++-++++\ | ||||
- || |/++-++++---++--+-+--+--\|| || ||| ||\-+----+++--++--+----/\+++-++++--+---/ ||||| || ||| | || ||| | ||| |||| ||||| | ||||
- || |||| |||| || | | | ||| || ||| || | ||| || | ||| |||| | ||||| || /-+++-+-++-+++---\ | ||| |||| ||||| | ||||
- |\---++++-++++---++--/ | | ||| || ||| || | ||| || \------+++-++++--+-------+++++-++--+-+++-+-++-+++---+------/ ||| |||| ||||| | ||||
- | |||| |||| || | | ||| || ||| || | ||| || ||| |||| | ||||| || | ||| | || ||| | ||| |||| ||||| | ||||
- | |||| |||| || \--+--+++-++--+++---++--+----+++--++---------+++-++++--+-------+++++-++--+-+++-+-++-+/| | ||| |||| ||||| | ||||
- | ||||/++++---++-------+--+++-++--+++---++--+----+++--++---------+++\|||| | ||||| || | |||/+-++-+-+---+-----------+++--++++-+++++--+\ ||||
- | ||||||||\<--++-------+--+++-++--+++---++--+----+++--++---------/||||||| \-------+++/| || | ||||| || \-+---+-----------+/| |||| ||||| || ||||
- | |||||||| /++------\| ||| || /+++---++--+----+++--++----------+++++++----------+++-+-++--+-+++++-++---+---+---------\ | | |||| ||||| || ||||
- | |||||||| ||| ||/-+++-++-++++---++--+-\ ||| || ||||||| ||| | || | ||||| || | | | | | |||| ||||| || ||||
- | |||||||| ||| ||| ||| || |||| || | | ||| || ||||||| /+++-+-++--+-+++++-++\ | | | | \--++++-++++/ || ||||
- | |||||||| ||| ||| ||| || |||| || | | ||| || ||||||| |\++-+-++--+-+++++-+++--+---+---------+-+----++++-++++---/| ||||
- | /--++++++++---+++------+++-+++-++-++++---++--+-+--+++\ || ||||||| | || | || | ||||| ||| | | | \----++++-++++----+-/|||
- | | |||||||| ||| ||| ||| || |||| || | | |||| || ||||||| | || | || | ||||| ||| | |/--------+----\ |||| |||| | |||
- | | |||||||| ||| /+++-+++-++-++++---++--+-+--++++-++----------+++++++---\ | || | || | ||||| ||| | || /------+---\| |||| |||| | |||
- | | |||||||| ||| |||| ||| || |||| || | | |||| || /-----+++++++---+---\ | || | || | ||||| ||| |/--++-+------+---++-++++-++++----+-\|||
- \-+--++++++++---+++-----++++-+++-++-++++---++--+-+--/||| || | ||||||| | | | || | || | ||||| ||| || || | | || |||| |||| | ||||
- | |||||||| /-+++-----++++-+++-++-++++---++--+\| ||| || | ||||||| | | | || | || | ||||| ||| || || | | || |||| |||| | ||||
- | |||||||| | ||| |||| ||| ||/++++---++--+++---+++-++----+-----+++++++---+---+-+-++-+-++--+-+++++-+++--++--++-+------+\ || |||| |||| | ||||
-/--+--++++++++-+-+++-----++++-+++-+++++++---++--+++---+++-++----+-----+++++++---+---+-+-++-+-++--+-+++++-+++\ || || | || || |||| |||| | ||||
-| | |||||||| | ||| ||||/+++-+++++++---++--+++---+++-++----+-----+++++++---+\ | | || | |\--+-+++++-++++-++--++-+------++--++-++++-++++----+-+/||
-| | |||||||| | ||| |||||||| ||||||| || ||| ||| || | ||||||| || | | || | | | ||||| |||| || || | || || |||| |||| | | ||
-| | |||||||| | |||/----++++++++-+++++++---++--+++---+++-++----+-----+++++++---++--+-+-++-+-+---+-+++++-++++-++\ || | || || |||| |||| | | ||
-| | |||||||| | |||| |||||||| ||||||| /-++--+++---+++-++----+-----+++++++---++--+\| || | | | ||||| |||| ||| || | || || |||| |||| | | ||
-| | |||||||| | |||| |||||||| ||||||| | || ||| ||| || | ||||||| || ||| || | | | ||||| |||| ||| || | || || |||| |||| | | ||
-| | |||\++++-+-++++----++++++++-+++++++-+-++--+++---+++-++----+-----+++++++---++--+++-++-+-+---+-++/|| |||| ||| || | || || |||| |||| | | ||
-| | ||| |||| | |||| ||||||||/+++++++-+-++\ ||| ||| || \-----+++++++---++--/|| || | | | || || |||| ||| || | || || |||| |||| | | ||
-| | ||| |||| | |||| |||||||\++++++++-+-+++-+++---+++-++----------+++++++---++---++-++-+-+---+-++-++-/||| ||| || | || || |||| |||| | | ||
-| | ||| |\++-+-++++----+++++++-++++++++-+-+++-+++---+++-++----------+++++++---++---++-++-+-+---+-/\-++--+++-+++-++-+------++--++-++++-+++/ | | ||
-| | ||| | || | |||| ||||||| |||||||| | ||| ||| ||| ^| ||||\++---++---++-++-+-+---+----++--+++-+++-++-+------++--++-++++-++/ | | ||
-| | ||| | || | |||| ||||||| ||||||\+-+-+++-+++---+++-++----------++++-/|/--++---++-++-+-+---+----++--+++-+++-++-+-\ || || |||| || | | ||
-| | ||| | || \-++++----+++++++-++++++-+-+-+++-+/| /-+++-++-------\ |||| || || || |v | v | \+--+++-+++-++-+-+----++--++-++++-++------/ | ||
-| | ||| | || |\++----+++++++-++++++-+-+-+++-+-+-+-+++-++-------+--++++--++--++---++-++-+-+---+-----+--/|| ||| || | | || || |||| || | ||
-| /+--+++-+-++---+-++----+++++++-++++++-+-+-+++-+-+-+-+++-++-------+--++++--++-\|| || || | | /+-----+---++-+++-++-+-+----++--++-++++-++-----\ | ||
-| || ||| | \+---+-++----+++++++-++++++-+-+-+++-+-+-+-+/| || | |||| || ||| || || | | || | || |\+-++-+-+----++--++-++++-++-----+--/ ||
-| || ||| | | |/++----+++++++-++++++-+-+-+++-+-+-+-+-+-++-------+--++++--++-+++---++-++-+-+--++-----+---++-+\| || | | || || |||| || | ||
-| || ||| | | |||| ||||||\-++++++-+-+-+++-+-+-+-+-+-++-------+--/||| || ||| || || | | || /---+---++-+++-++-+-+----++--++-++++-++---\ | ||
-| || ||| | /+---++++----++++++--++++++-+-+-+++-+-+-+-+-+-++-------+---+++--++-+++---++-++-+-+--++-+--\| || ||| || | | || || |||| || | | ||
-| || ||| | || /-++++----++++++\ |||||| | \-+++-+-+-+-+-+-++-------+---+++--++-+++---/| ||/+-+--++-+--++---++-+++-++-+\| || || |||| || | | ||
-| || ||\-+-++-+-++++----+++++++-++++++-+---+++-+-+-+-+-+-++-------+---+++--/| ||| | |||| | || | || || ||| || ||| || || |||| || | | ||
-| || || | |\-+-++++----+++++++-++++++-+---+++-+-+-+-+-+-++-------+---+++---+-+++----+-+++/ | || | || || ||| || ||| || || |||| || | | ||
-| || || | | | \+++----+/||||| \+++++-+---++/ | | | | | || | ||| | ||| | ||| | || | || || ||| || ||| || || |||| || | | ||
-| || || | | | |\+----+-+++++--+++++-+---++--+-+-+-/ | || | ||| | ||| | ||| | || | || || ||| || ||| || || |||| || | | ||
-| || || | | | | | | ||||| ||||| | || | | | /+-++-------+\ ||| | ||| | ||| | || | || || ||| || ||| || || |||| || | | ||
-| || || \-+--+--+-+----+-+++++--+++++-+---++--+-+-+--++-++-------++--+/| | ||| \-+++--+--++-+--++---/| ||| || ||| || || |||| || | | ||
-| || || | | | | | ||||| ||||| | || | | | || || /----++--+-+---+-+++------+++--+--++-+--++----+-+++-++-+++----++-\|| |||| || | | ||
-| || ||/---+--+-\| |/---+-+++++--+++++-+---++--+-+-+--++-++--+----++--+-+---+-+++----\ ||| | ||/+--++----+-+++-++-+++----++-+++-++++-++---+\| ||
-| || ||| | | || || | ||||| ||||| | || | | | || || | || | | | ||| | ||| \--++++--++----+-+++-++-+++----++-+++-++++-++---+++----/|
-| || ||| | | || || | ||||| ||||| | || | | | /++-++--+----++--+-+---+-+++----+-+++-----++++--++----+-+++-++-+++----++-+++\|||| || ||| |
-| || ||| ^ | || || | ||||| ||||| | || | | | ||| || | || | | | ||| | ||| |||\--++----+-+++-++-+++----++-++++++++-++---/|| |
-| || ||| | | || || | ||||| ||||| | || \-+-+-+++-++--+----++--+-+---+-+++----+-+++-----+++---++----+-+++-++-+++----++-++++/||| || || |
-| || ||| | | || || | ||||| ||||| | || | | ||| || | /-++--+-+---+-+++----+-+++-----+++---++----+-+++-++-+++--\ || |||| ||| || || |
-|/++--+++---+--+-++-++---+-+++++--+++++-+--\|| |/+-+++-++--+--+\|| | | | ||| | ||| ||| |\----+-+++-++-+++--+-++-++++-/|| || || |
-|||| ||| | | || || | ||||| ||||| | ||| /+++-+++-++--+--++++--+-+---+-+++----+-+++-----+++---+-----+-+++-++-+++--+-++-++++\ || || || |
-|||| ||| | | || || | ||||| |\+++-+--++/ |||| ||| || | |||| | | | ||| | ||| ||| | | ||| || ||| | || ||||| || || || |
-|||| ||| | | || || | ||||| |/+++-+--++---\|||| ||| || | |||| | | | ||| | ||| ||| | | ||| || ||| | || ||||| || || || |
-|||| |\+---+--+-++-++---+-+++/| ||||| | |\---+++++-+++-++--+--++++--+-+---+-+++----+-+++-----+++---+-----+-+++-++-+++--+-++-+++++-++-++----++-----/
-|||| | | | | |\-++---+-+++-+--+++++-+--+----+++++-+++-++--+--++++--+-+---+-+++----+-+++-----+++---+-----+-+/| || ||| | || ||||| || || ||
-|||| | | | | | /++---+-+++\| ||||| | | ||||| ||| || | |||| | | | ||| | ||| ||| | | | | || ||| | || ||||| || || ||
-|||| | | | /+-+-+++--\| ||||| ||||| | | ||||| ||| || | |||| | | | ||| | ||| ||| | | | | || ||| | || ||||| || || ||
-|||| | | | || | ||| || ||||| ||||| | | ||||| ||| || | |||| | | | ||| /-+-+++-----+++---+----\| | | || ||| | || ||||| || || ||
-|||| | | | || | ||| /++-+++++--+++++-+--+----+++++-+++-++--+--++++-\| | | ||| | | ||| ||\---+----++-+-+-++-+++--+-++-+++++-++-++----/|
-|||| | | | || | ||| ||| ||||| ||||| \--+----+++++-+++-++--+--++++-++-+---+-+++--+-+-+++-----++----+----++-/ | || ||| | || ||||| || || |
-|||| \-+--<+-++-+-+++-+++-/|||| ||||| | |\+++-+++-++--+--++++-++-+---+-+++--+-+-+++-----++----+----++---+-++-+++--+-++-++++/ || || |
-|||| | | || | ||| ||| |||| ||||| | | ||| ||| || | |||| |\-+---+-+++--+-+-+++-----++----+----++---+-++-+++--+-++-++++--++-+/ |
-|\++----+---+-++-+-+++-+++--++++--+++++----/ | ||| ||| \+--+--++++-+--+---+-+++--+-+-+/| |\----+----++---+-/| ||| | || |||| || | |
-| || | | || | ||| ||| |||| \++++---------+-+++-+++--+--+--++++-+--+---+-+++--+-+-/ | | | || | | ||| | || |||| || | |
-| || | | || | ||| ||| |||| |||\---------+-+++-+++--+--+--++++-+--+---+-+++--+-+---+-----+-----+----++---+--+-+++--+-++-++++--+/ | |
-| || | | || | ||| ||| |||| ||| /----+-+++-+++--+--+--++++-+--+---+-+++--+-+---+-----+--\ | || | | |||/-+-++-++++--+--+------+-\
-| |\----+---+-++-+-+++-+++--++++---+++-----+----+-+++-++/ | | |||| | \---+-+++--+-+---+-----+--+--+----++---+--+-++++-+-++-++++--+--/ | |
-| | | | || | ||| ||| |||| ||| | | ||| || | | |||| | | ||| | | | | | | || | | \+++-+-++-+/|| | | |
-| \-----+---+-++-+-+++-+++--++++---+++-----+----+-+++-++---+--+--++++-+------+-/|| | | \-----+--+--+----++---+--+--/|| | || | || | | |
-| | \-++-+-+++-+++--++++---+++-----+----+-+++-++---+--+--++++-+------+--++--+-+---------+--+--/ || | | || |/++-+-++--+---------+-+---\
-| | |\-+-+++-+++--+++/ /+++-----+----+-+++-++---+--+--++++-+------+--++--+-+---------+--+-------++---+--+>--++-++++-+-++--+-------\ | | |
-| | | | ||| ||| ||| ||\+-----+----+-+++-++---+--+--++++-+------+--++--+-+---------+--+-------++---+--+---++-+++/ | || | | | | |
-| | | | ||| ||| ||| || | | | ||| || \--+--++++-+------+--++--+-+---------+--+-------++---+--+---++-+++--+-++--/ | | | |
-| | | | ||| ||| \++---++-+-----+----+-/|| || | |||| | | || | | | | || | | || ||| | || | | | |
-| | | | \++-+++---+/ || | \----+--++-++------+--++++-+------+--++--+-+---------+--/ || | | || ||| | || | | | |
-| | | | || ||| \----++-+----------+--++-++------+--++++-+---->-+--+/ | | | || | | || ||| | || | | | |
-| | | | || \++--------++-+----------+--++-++------+--++++-/ | | | | \----------++---+--+---++-+++--+-++----------+-/ | |
-| | | | || || || | | || || | |||| | | | | /--------------++---+--+---++-+++--+-++-----\ | | |
-| | | | || || || | | || || | \+++--------+--+---+-+-----+--------------++---+--+---++-/|| | || | | | |
-| | | | || || || | | || || | ||| | | \-+-----+--------------/| | | || || | || | | | |
-| | | | || || /++-+----------+\ || \+------+---+++--------+--+-----+-----+---------------+---+--+---++--++--+-+/ | | | |
-| | | | || || |\+-+----------++-++--+------+---+++--------+--+-----+-----+---------------+---+--+---++--++--+-+------+----/ | |
-| | | | /++--++-------+-+-+----------++-++--+------+---+++-\ \--+-----+-----+---------------+---+--+---/| || | | | | |
-| | | | ||| || | | | || \+--+------+---/|| | | | | | | | | || | | | | |
-| | | | ||| || | | | |v | | | || | | | | | | | | \+--+-+------+--------+---/
-| /-+-----+--+-+++--++-------+-+-+----------++--+--+------+----++-+---------+-----+-----+---------------+\ | | | | | | | |
-| | | | | ||| |\-------+-+-+----------++--+--+------+----++-+---------/ | | || | | | | | | | |
-| | | | | ||| | | | \----------++--+--+------+----++-+---------------+-----+---------------++--+--+----+---/ | | | |
-| | | | | ||| | | | || | \------+----+/ | | | || | | | | | | |
-| | | \--+-+++--/ ^ | || | | | | | | || | | | | | | |
-| | | | ||\-----------+-+------------++--+---------+----+--+---------------/ | || | | \------+-+------+--------/
-| | | | || | | || \---------+----/ | | || | | | | |
-\-----+-+--------+-++------------+-+------------++------------+-------+---------------------+---------------/| | | | | |
- | | | |\------------+-+------------++------------+-------+-<-------------------+----------------+--/ \-----------+-/ |
- | | | | \-+------------+/ \-------+---------------------+----------------+-----------------/ |
- | | | \---------------+------------+---------------------/ | | |
- | | | \------------/ \----------------+--------------------------/
- \-+--------+-------------------------------------------------------------------------------------------/
- \--------/
diff --git a/2018/inputs/15.txt b/2018/inputs/15.txt
deleted file mode 100644
index 0bd71e0..0000000
--- a/2018/inputs/15.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-################################
-#######################.########
-#######################.########
-########..#############.########
-#######.....#########....#..####
-#######.....##########......####
-######....#..########.......#..#
-#######.G...########...........#
-####..GG....G######..........###
-########....G..###..E.......#.E#
-########...G..#....G..G.....E..#
-########...G...G.G...........E.#
-####....G.....#####..E......#E.#
-####.####.#..#######....G.....##
-####.G#####.#########..........#
-####G#####..#########..........#
-####.####..E#########..........#
-####...#..#.#########.G........#
-####.....G..#########.........##
-####..G....E.#######........####
-####G.........#####...##....####
-#####G................###..E####
-#####..####...............######
-####..#####.............########
-#####.#######...........########
-#####.########.........#########
-#####.########.....E..##########
-#.....#########...#.############
-#..#############....############
-################....############
-##################.#############
-################################
diff --git a/2018/inputs/16_1.txt b/2018/inputs/16_1.txt
deleted file mode 100644
index 755acda..0000000
--- a/2018/inputs/16_1.txt
+++ /dev/null
@@ -1,3143 +0,0 @@
-Before: [2, 3, 2, 2]
-0 3 3 0
-After: [0, 3, 2, 2]
-
-Before: [1, 1, 2, 3]
-6 0 2 0
-After: [0, 1, 2, 3]
-
-Before: [1, 0, 2, 2]
-6 0 2 0
-After: [0, 0, 2, 2]
-
-Before: [1, 1, 1, 1]
-11 2 1 0
-After: [2, 1, 1, 1]
-
-Before: [3, 0, 0, 2]
-0 3 3 2
-After: [3, 0, 0, 2]
-
-Before: [1, 1, 2, 2]
-9 1 0 2
-After: [1, 1, 1, 2]
-
-Before: [3, 2, 1, 1]
-5 2 1 1
-After: [3, 2, 1, 1]
-
-Before: [1, 1, 0, 3]
-7 1 3 0
-After: [0, 1, 0, 3]
-
-Before: [1, 2, 1, 3]
-5 2 1 0
-After: [2, 2, 1, 3]
-
-Before: [0, 2, 2, 0]
-8 0 0 0
-After: [0, 2, 2, 0]
-
-Before: [2, 0, 0, 1]
-3 0 3 0
-After: [1, 0, 0, 1]
-
-Before: [3, 1, 2, 2]
-4 1 3 1
-After: [3, 0, 2, 2]
-
-Before: [2, 2, 1, 1]
-5 2 1 1
-After: [2, 2, 1, 1]
-
-Before: [1, 1, 2, 2]
-6 0 2 2
-After: [1, 1, 0, 2]
-
-Before: [1, 1, 1, 2]
-4 1 3 0
-After: [0, 1, 1, 2]
-
-Before: [2, 1, 3, 1]
-13 1 3 0
-After: [1, 1, 3, 1]
-
-Before: [0, 1, 2, 1]
-13 1 3 1
-After: [0, 1, 2, 1]
-
-Before: [2, 1, 0, 2]
-4 1 3 1
-After: [2, 0, 0, 2]
-
-Before: [2, 1, 0, 1]
-2 0 1 3
-After: [2, 1, 0, 1]
-
-Before: [3, 1, 2, 1]
-12 1 2 2
-After: [3, 1, 0, 1]
-
-Before: [1, 1, 3, 2]
-4 1 3 3
-After: [1, 1, 3, 0]
-
-Before: [2, 2, 1, 3]
-7 1 3 0
-After: [0, 2, 1, 3]
-
-Before: [1, 3, 2, 1]
-6 0 2 1
-After: [1, 0, 2, 1]
-
-Before: [2, 1, 2, 1]
-13 1 3 1
-After: [2, 1, 2, 1]
-
-Before: [2, 1, 3, 0]
-14 2 0 3
-After: [2, 1, 3, 1]
-
-Before: [1, 1, 2, 3]
-6 0 2 3
-After: [1, 1, 2, 0]
-
-Before: [1, 1, 1, 3]
-11 2 1 2
-After: [1, 1, 2, 3]
-
-Before: [2, 2, 3, 2]
-0 3 3 0
-After: [0, 2, 3, 2]
-
-Before: [1, 2, 0, 2]
-1 0 2 3
-After: [1, 2, 0, 0]
-
-Before: [2, 1, 0, 0]
-2 0 1 3
-After: [2, 1, 0, 1]
-
-Before: [0, 2, 1, 1]
-5 2 1 3
-After: [0, 2, 1, 2]
-
-Before: [0, 3, 2, 1]
-10 3 2 3
-After: [0, 3, 2, 1]
-
-Before: [3, 3, 2, 2]
-0 3 3 0
-After: [0, 3, 2, 2]
-
-Before: [1, 1, 2, 0]
-12 1 2 0
-After: [0, 1, 2, 0]
-
-Before: [0, 2, 1, 3]
-5 2 1 0
-After: [2, 2, 1, 3]
-
-Before: [0, 3, 2, 1]
-8 0 0 0
-After: [0, 3, 2, 1]
-
-Before: [1, 1, 1, 3]
-11 2 1 1
-After: [1, 2, 1, 3]
-
-Before: [0, 1, 1, 2]
-11 2 1 2
-After: [0, 1, 2, 2]
-
-Before: [1, 1, 1, 1]
-13 1 3 1
-After: [1, 1, 1, 1]
-
-Before: [1, 3, 0, 0]
-1 0 2 1
-After: [1, 0, 0, 0]
-
-Before: [2, 2, 3, 1]
-14 2 0 1
-After: [2, 1, 3, 1]
-
-Before: [0, 3, 0, 3]
-8 0 0 3
-After: [0, 3, 0, 0]
-
-Before: [0, 0, 1, 1]
-8 0 0 2
-After: [0, 0, 0, 1]
-
-Before: [0, 3, 2, 1]
-8 0 0 2
-After: [0, 3, 0, 1]
-
-Before: [2, 1, 2, 3]
-12 1 2 1
-After: [2, 0, 2, 3]
-
-Before: [3, 2, 2, 3]
-14 2 1 2
-After: [3, 2, 1, 3]
-
-Before: [2, 2, 3, 0]
-15 2 2 2
-After: [2, 2, 1, 0]
-
-Before: [2, 3, 3, 2]
-15 2 2 0
-After: [1, 3, 3, 2]
-
-Before: [1, 1, 0, 0]
-1 0 2 3
-After: [1, 1, 0, 0]
-
-Before: [3, 2, 2, 2]
-0 3 3 3
-After: [3, 2, 2, 0]
-
-Before: [1, 3, 2, 2]
-6 0 2 3
-After: [1, 3, 2, 0]
-
-Before: [2, 1, 0, 1]
-3 0 3 1
-After: [2, 1, 0, 1]
-
-Before: [3, 3, 1, 3]
-7 2 3 0
-After: [0, 3, 1, 3]
-
-Before: [0, 2, 1, 0]
-5 2 1 3
-After: [0, 2, 1, 2]
-
-Before: [1, 1, 1, 2]
-4 1 3 2
-After: [1, 1, 0, 2]
-
-Before: [0, 3, 1, 2]
-8 0 0 1
-After: [0, 0, 1, 2]
-
-Before: [2, 1, 3, 3]
-7 1 3 0
-After: [0, 1, 3, 3]
-
-Before: [3, 2, 2, 1]
-10 3 2 0
-After: [1, 2, 2, 1]
-
-Before: [2, 1, 0, 1]
-3 0 3 3
-After: [2, 1, 0, 1]
-
-Before: [2, 1, 1, 1]
-13 1 3 2
-After: [2, 1, 1, 1]
-
-Before: [2, 2, 0, 3]
-7 1 3 1
-After: [2, 0, 0, 3]
-
-Before: [2, 2, 0, 1]
-3 0 3 0
-After: [1, 2, 0, 1]
-
-Before: [2, 2, 3, 1]
-3 0 3 3
-After: [2, 2, 3, 1]
-
-Before: [1, 2, 0, 0]
-1 0 2 1
-After: [1, 0, 0, 0]
-
-Before: [2, 2, 2, 2]
-14 3 2 1
-After: [2, 0, 2, 2]
-
-Before: [3, 1, 1, 2]
-4 1 3 1
-After: [3, 0, 1, 2]
-
-Before: [2, 1, 1, 1]
-2 0 1 3
-After: [2, 1, 1, 1]
-
-Before: [1, 1, 0, 0]
-1 0 2 1
-After: [1, 0, 0, 0]
-
-Before: [1, 3, 0, 2]
-1 0 2 1
-After: [1, 0, 0, 2]
-
-Before: [1, 1, 1, 3]
-9 1 0 2
-After: [1, 1, 1, 3]
-
-Before: [3, 1, 2, 2]
-12 1 2 2
-After: [3, 1, 0, 2]
-
-Before: [0, 1, 2, 1]
-12 1 2 2
-After: [0, 1, 0, 1]
-
-Before: [3, 2, 0, 3]
-7 1 3 3
-After: [3, 2, 0, 0]
-
-Before: [2, 1, 2, 3]
-7 2 3 2
-After: [2, 1, 0, 3]
-
-Before: [3, 1, 3, 1]
-13 1 3 0
-After: [1, 1, 3, 1]
-
-Before: [2, 1, 1, 1]
-11 2 1 0
-After: [2, 1, 1, 1]
-
-Before: [0, 1, 1, 0]
-11 2 1 3
-After: [0, 1, 1, 2]
-
-Before: [2, 1, 3, 3]
-7 1 3 2
-After: [2, 1, 0, 3]
-
-Before: [2, 3, 2, 1]
-10 3 2 1
-After: [2, 1, 2, 1]
-
-Before: [1, 1, 2, 2]
-4 1 3 1
-After: [1, 0, 2, 2]
-
-Before: [1, 3, 0, 1]
-1 0 2 0
-After: [0, 3, 0, 1]
-
-Before: [1, 3, 0, 3]
-1 0 2 3
-After: [1, 3, 0, 0]
-
-Before: [2, 3, 3, 1]
-3 0 3 1
-After: [2, 1, 3, 1]
-
-Before: [2, 1, 1, 2]
-11 2 1 3
-After: [2, 1, 1, 2]
-
-Before: [2, 1, 1, 1]
-2 0 1 1
-After: [2, 1, 1, 1]
-
-Before: [3, 1, 2, 2]
-4 1 3 0
-After: [0, 1, 2, 2]
-
-Before: [2, 0, 2, 1]
-10 3 2 1
-After: [2, 1, 2, 1]
-
-Before: [1, 3, 0, 1]
-1 0 2 1
-After: [1, 0, 0, 1]
-
-Before: [1, 1, 0, 2]
-9 1 0 0
-After: [1, 1, 0, 2]
-
-Before: [2, 3, 2, 1]
-3 0 3 2
-After: [2, 3, 1, 1]
-
-Before: [1, 2, 2, 1]
-0 3 3 3
-After: [1, 2, 2, 0]
-
-Before: [3, 1, 2, 2]
-12 1 2 1
-After: [3, 0, 2, 2]
-
-Before: [0, 2, 3, 1]
-8 0 0 1
-After: [0, 0, 3, 1]
-
-Before: [0, 0, 2, 1]
-10 3 2 2
-After: [0, 0, 1, 1]
-
-Before: [3, 2, 1, 3]
-15 0 0 3
-After: [3, 2, 1, 1]
-
-Before: [1, 3, 2, 2]
-6 0 2 2
-After: [1, 3, 0, 2]
-
-Before: [1, 2, 2, 3]
-6 0 2 3
-After: [1, 2, 2, 0]
-
-Before: [1, 1, 3, 2]
-4 1 3 2
-After: [1, 1, 0, 2]
-
-Before: [1, 2, 2, 1]
-10 3 2 3
-After: [1, 2, 2, 1]
-
-Before: [1, 2, 2, 1]
-6 0 2 2
-After: [1, 2, 0, 1]
-
-Before: [1, 2, 1, 3]
-7 2 3 1
-After: [1, 0, 1, 3]
-
-Before: [1, 2, 2, 1]
-10 3 2 0
-After: [1, 2, 2, 1]
-
-Before: [2, 3, 3, 1]
-3 0 3 3
-After: [2, 3, 3, 1]
-
-Before: [2, 3, 2, 3]
-14 2 0 2
-After: [2, 3, 1, 3]
-
-Before: [2, 1, 3, 1]
-2 0 1 3
-After: [2, 1, 3, 1]
-
-Before: [0, 3, 3, 0]
-8 0 0 1
-After: [0, 0, 3, 0]
-
-Before: [2, 1, 1, 3]
-7 2 3 2
-After: [2, 1, 0, 3]
-
-Before: [0, 2, 2, 1]
-10 3 2 3
-After: [0, 2, 2, 1]
-
-Before: [3, 2, 1, 3]
-5 2 1 3
-After: [3, 2, 1, 2]
-
-Before: [3, 1, 1, 2]
-0 3 3 2
-After: [3, 1, 0, 2]
-
-Before: [0, 3, 1, 3]
-7 2 3 3
-After: [0, 3, 1, 0]
-
-Before: [2, 0, 2, 1]
-10 3 2 3
-After: [2, 0, 2, 1]
-
-Before: [2, 2, 1, 0]
-5 2 1 2
-After: [2, 2, 2, 0]
-
-Before: [2, 1, 2, 2]
-4 1 3 3
-After: [2, 1, 2, 0]
-
-Before: [1, 3, 1, 1]
-0 2 3 2
-After: [1, 3, 0, 1]
-
-Before: [1, 1, 0, 3]
-1 0 2 3
-After: [1, 1, 0, 0]
-
-Before: [1, 0, 0, 3]
-1 0 2 2
-After: [1, 0, 0, 3]
-
-Before: [2, 1, 1, 0]
-11 2 1 0
-After: [2, 1, 1, 0]
-
-Before: [2, 0, 0, 1]
-3 0 3 3
-After: [2, 0, 0, 1]
-
-Before: [3, 3, 0, 1]
-14 0 2 2
-After: [3, 3, 1, 1]
-
-Before: [0, 1, 2, 0]
-8 0 0 1
-After: [0, 0, 2, 0]
-
-Before: [2, 0, 1, 1]
-3 0 3 2
-After: [2, 0, 1, 1]
-
-Before: [1, 3, 2, 0]
-6 0 2 1
-After: [1, 0, 2, 0]
-
-Before: [3, 3, 2, 0]
-2 0 2 3
-After: [3, 3, 2, 1]
-
-Before: [2, 1, 0, 1]
-13 1 3 2
-After: [2, 1, 1, 1]
-
-Before: [1, 1, 2, 1]
-13 1 3 2
-After: [1, 1, 1, 1]
-
-Before: [1, 3, 2, 0]
-6 0 2 2
-After: [1, 3, 0, 0]
-
-Before: [3, 1, 3, 2]
-4 1 3 1
-After: [3, 0, 3, 2]
-
-Before: [2, 3, 2, 2]
-15 0 0 3
-After: [2, 3, 2, 1]
-
-Before: [2, 3, 2, 1]
-3 0 3 3
-After: [2, 3, 2, 1]
-
-Before: [2, 1, 1, 2]
-4 1 3 0
-After: [0, 1, 1, 2]
-
-Before: [1, 1, 1, 1]
-13 1 3 0
-After: [1, 1, 1, 1]
-
-Before: [3, 1, 1, 0]
-11 2 1 2
-After: [3, 1, 2, 0]
-
-Before: [3, 1, 1, 1]
-11 2 1 0
-After: [2, 1, 1, 1]
-
-Before: [3, 1, 0, 2]
-4 1 3 0
-After: [0, 1, 0, 2]
-
-Before: [3, 3, 1, 3]
-15 0 0 3
-After: [3, 3, 1, 1]
-
-Before: [1, 2, 2, 1]
-10 3 2 1
-After: [1, 1, 2, 1]
-
-Before: [1, 1, 1, 0]
-11 2 1 3
-After: [1, 1, 1, 2]
-
-Before: [1, 1, 1, 2]
-11 2 1 0
-After: [2, 1, 1, 2]
-
-Before: [3, 2, 2, 2]
-14 2 1 2
-After: [3, 2, 1, 2]
-
-Before: [0, 0, 3, 3]
-15 2 2 3
-After: [0, 0, 3, 1]
-
-Before: [0, 3, 2, 2]
-0 3 3 0
-After: [0, 3, 2, 2]
-
-Before: [1, 0, 2, 1]
-10 3 2 1
-After: [1, 1, 2, 1]
-
-Before: [2, 1, 2, 2]
-14 3 2 1
-After: [2, 0, 2, 2]
-
-Before: [1, 0, 0, 3]
-1 0 2 1
-After: [1, 0, 0, 3]
-
-Before: [3, 2, 1, 3]
-7 2 3 1
-After: [3, 0, 1, 3]
-
-Before: [3, 1, 1, 2]
-11 2 1 0
-After: [2, 1, 1, 2]
-
-Before: [1, 3, 2, 1]
-6 0 2 0
-After: [0, 3, 2, 1]
-
-Before: [2, 0, 3, 1]
-3 0 3 0
-After: [1, 0, 3, 1]
-
-Before: [3, 1, 2, 2]
-12 1 2 0
-After: [0, 1, 2, 2]
-
-Before: [3, 1, 2, 0]
-12 1 2 3
-After: [3, 1, 2, 0]
-
-Before: [2, 1, 2, 0]
-2 0 1 3
-After: [2, 1, 2, 1]
-
-Before: [1, 1, 3, 1]
-14 2 3 2
-After: [1, 1, 0, 1]
-
-Before: [1, 3, 2, 3]
-6 0 2 0
-After: [0, 3, 2, 3]
-
-Before: [1, 1, 2, 3]
-12 1 2 0
-After: [0, 1, 2, 3]
-
-Before: [3, 0, 2, 1]
-10 3 2 1
-After: [3, 1, 2, 1]
-
-Before: [1, 0, 2, 0]
-6 0 2 1
-After: [1, 0, 2, 0]
-
-Before: [2, 3, 1, 3]
-7 2 3 2
-After: [2, 3, 0, 3]
-
-Before: [1, 1, 1, 1]
-11 2 1 3
-After: [1, 1, 1, 2]
-
-Before: [2, 1, 2, 2]
-2 0 1 0
-After: [1, 1, 2, 2]
-
-Before: [1, 2, 1, 3]
-7 2 3 3
-After: [1, 2, 1, 0]
-
-Before: [1, 1, 2, 2]
-12 1 2 0
-After: [0, 1, 2, 2]
-
-Before: [2, 0, 2, 1]
-10 3 2 2
-After: [2, 0, 1, 1]
-
-Before: [0, 1, 2, 3]
-12 1 2 2
-After: [0, 1, 0, 3]
-
-Before: [2, 1, 1, 3]
-11 2 1 0
-After: [2, 1, 1, 3]
-
-Before: [2, 1, 3, 1]
-13 1 3 3
-After: [2, 1, 3, 1]
-
-Before: [0, 2, 1, 1]
-8 0 0 1
-After: [0, 0, 1, 1]
-
-Before: [1, 0, 0, 2]
-1 0 2 1
-After: [1, 0, 0, 2]
-
-Before: [2, 1, 3, 3]
-2 0 1 1
-After: [2, 1, 3, 3]
-
-Before: [0, 1, 2, 2]
-4 1 3 2
-After: [0, 1, 0, 2]
-
-Before: [1, 1, 2, 1]
-13 1 3 0
-After: [1, 1, 2, 1]
-
-Before: [1, 1, 3, 0]
-9 1 0 1
-After: [1, 1, 3, 0]
-
-Before: [1, 1, 0, 1]
-1 0 2 1
-After: [1, 0, 0, 1]
-
-Before: [2, 2, 3, 1]
-3 0 3 1
-After: [2, 1, 3, 1]
-
-Before: [3, 2, 1, 2]
-5 2 1 0
-After: [2, 2, 1, 2]
-
-Before: [1, 1, 2, 0]
-12 1 2 1
-After: [1, 0, 2, 0]
-
-Before: [3, 0, 2, 3]
-2 0 2 3
-After: [3, 0, 2, 1]
-
-Before: [2, 1, 3, 3]
-2 0 1 2
-After: [2, 1, 1, 3]
-
-Before: [3, 1, 3, 1]
-15 0 0 0
-After: [1, 1, 3, 1]
-
-Before: [0, 1, 3, 2]
-4 1 3 1
-After: [0, 0, 3, 2]
-
-Before: [3, 2, 3, 3]
-15 2 0 0
-After: [1, 2, 3, 3]
-
-Before: [1, 3, 3, 1]
-0 3 3 0
-After: [0, 3, 3, 1]
-
-Before: [0, 0, 2, 3]
-7 2 3 0
-After: [0, 0, 2, 3]
-
-Before: [0, 2, 1, 3]
-7 2 3 2
-After: [0, 2, 0, 3]
-
-Before: [3, 0, 2, 1]
-2 0 2 0
-After: [1, 0, 2, 1]
-
-Before: [2, 2, 2, 1]
-10 3 2 2
-After: [2, 2, 1, 1]
-
-Before: [1, 2, 0, 1]
-1 0 2 0
-After: [0, 2, 0, 1]
-
-Before: [1, 2, 0, 0]
-1 0 2 2
-After: [1, 2, 0, 0]
-
-Before: [3, 1, 2, 1]
-2 0 2 1
-After: [3, 1, 2, 1]
-
-Before: [0, 0, 3, 1]
-8 0 0 1
-After: [0, 0, 3, 1]
-
-Before: [0, 1, 1, 2]
-11 2 1 3
-After: [0, 1, 1, 2]
-
-Before: [0, 1, 3, 1]
-13 1 3 2
-After: [0, 1, 1, 1]
-
-Before: [1, 1, 1, 2]
-11 2 1 2
-After: [1, 1, 2, 2]
-
-Before: [2, 0, 3, 1]
-3 0 3 3
-After: [2, 0, 3, 1]
-
-Before: [0, 2, 1, 2]
-8 0 0 0
-After: [0, 2, 1, 2]
-
-Before: [1, 0, 2, 1]
-6 0 2 1
-After: [1, 0, 2, 1]
-
-Before: [1, 1, 0, 2]
-4 1 3 3
-After: [1, 1, 0, 0]
-
-Before: [2, 2, 1, 1]
-3 0 3 2
-After: [2, 2, 1, 1]
-
-Before: [1, 2, 1, 2]
-5 2 1 2
-After: [1, 2, 2, 2]
-
-Before: [2, 0, 2, 1]
-3 0 3 3
-After: [2, 0, 2, 1]
-
-Before: [2, 1, 0, 1]
-3 0 3 2
-After: [2, 1, 1, 1]
-
-Before: [2, 2, 1, 2]
-5 2 1 1
-After: [2, 2, 1, 2]
-
-Before: [1, 1, 2, 2]
-9 1 0 3
-After: [1, 1, 2, 1]
-
-Before: [2, 2, 1, 3]
-15 0 0 3
-After: [2, 2, 1, 1]
-
-Before: [3, 1, 0, 1]
-13 1 3 3
-After: [3, 1, 0, 1]
-
-Before: [3, 3, 2, 1]
-10 3 2 2
-After: [3, 3, 1, 1]
-
-Before: [0, 1, 3, 2]
-4 1 3 3
-After: [0, 1, 3, 0]
-
-Before: [0, 1, 1, 0]
-11 2 1 2
-After: [0, 1, 2, 0]
-
-Before: [3, 1, 3, 1]
-14 3 1 0
-After: [0, 1, 3, 1]
-
-Before: [0, 1, 3, 3]
-8 0 0 3
-After: [0, 1, 3, 0]
-
-Before: [0, 1, 2, 1]
-10 3 2 0
-After: [1, 1, 2, 1]
-
-Before: [2, 1, 2, 1]
-3 0 3 2
-After: [2, 1, 1, 1]
-
-Before: [0, 2, 1, 3]
-5 2 1 3
-After: [0, 2, 1, 2]
-
-Before: [1, 0, 0, 3]
-1 0 2 0
-After: [0, 0, 0, 3]
-
-Before: [2, 3, 0, 1]
-3 0 3 0
-After: [1, 3, 0, 1]
-
-Before: [2, 1, 2, 1]
-12 1 2 1
-After: [2, 0, 2, 1]
-
-Before: [2, 1, 3, 2]
-4 1 3 0
-After: [0, 1, 3, 2]
-
-Before: [1, 2, 1, 0]
-5 2 1 3
-After: [1, 2, 1, 2]
-
-Before: [3, 1, 3, 1]
-13 1 3 1
-After: [3, 1, 3, 1]
-
-Before: [1, 2, 1, 0]
-5 2 1 1
-After: [1, 2, 1, 0]
-
-Before: [3, 1, 2, 1]
-10 3 2 1
-After: [3, 1, 2, 1]
-
-Before: [1, 1, 1, 1]
-13 1 3 2
-After: [1, 1, 1, 1]
-
-Before: [2, 1, 2, 1]
-13 1 3 2
-After: [2, 1, 1, 1]
-
-Before: [1, 2, 1, 3]
-7 1 3 1
-After: [1, 0, 1, 3]
-
-Before: [0, 0, 2, 2]
-14 3 2 3
-After: [0, 0, 2, 0]
-
-Before: [2, 2, 1, 3]
-15 0 0 1
-After: [2, 1, 1, 3]
-
-Before: [2, 1, 3, 2]
-4 1 3 1
-After: [2, 0, 3, 2]
-
-Before: [1, 2, 1, 3]
-5 2 1 2
-After: [1, 2, 2, 3]
-
-Before: [2, 2, 1, 0]
-5 2 1 3
-After: [2, 2, 1, 2]
-
-Before: [2, 0, 2, 1]
-3 0 3 2
-After: [2, 0, 1, 1]
-
-Before: [1, 0, 0, 1]
-1 0 2 0
-After: [0, 0, 0, 1]
-
-Before: [2, 1, 1, 0]
-15 0 0 0
-After: [1, 1, 1, 0]
-
-Before: [0, 0, 3, 3]
-8 0 0 0
-After: [0, 0, 3, 3]
-
-Before: [1, 1, 1, 2]
-4 1 3 3
-After: [1, 1, 1, 0]
-
-Before: [1, 2, 0, 3]
-1 0 2 1
-After: [1, 0, 0, 3]
-
-Before: [1, 1, 0, 2]
-9 1 0 1
-After: [1, 1, 0, 2]
-
-Before: [3, 1, 1, 1]
-11 2 1 3
-After: [3, 1, 1, 2]
-
-Before: [1, 1, 0, 3]
-7 1 3 1
-After: [1, 0, 0, 3]
-
-Before: [1, 1, 1, 3]
-7 1 3 2
-After: [1, 1, 0, 3]
-
-Before: [1, 1, 2, 3]
-6 0 2 1
-After: [1, 0, 2, 3]
-
-Before: [2, 1, 1, 2]
-4 1 3 3
-After: [2, 1, 1, 0]
-
-Before: [2, 2, 2, 3]
-7 1 3 2
-After: [2, 2, 0, 3]
-
-Before: [1, 3, 2, 1]
-0 3 3 3
-After: [1, 3, 2, 0]
-
-Before: [0, 0, 3, 3]
-8 0 0 3
-After: [0, 0, 3, 0]
-
-Before: [3, 1, 3, 1]
-15 0 0 1
-After: [3, 1, 3, 1]
-
-Before: [1, 0, 0, 2]
-1 0 2 2
-After: [1, 0, 0, 2]
-
-Before: [0, 0, 0, 1]
-0 3 3 1
-After: [0, 0, 0, 1]
-
-Before: [1, 1, 1, 2]
-9 1 0 0
-After: [1, 1, 1, 2]
-
-Before: [1, 3, 0, 1]
-1 0 2 2
-After: [1, 3, 0, 1]
-
-Before: [1, 1, 3, 3]
-9 1 0 0
-After: [1, 1, 3, 3]
-
-Before: [2, 1, 3, 1]
-13 1 3 2
-After: [2, 1, 1, 1]
-
-Before: [2, 1, 3, 2]
-4 1 3 3
-After: [2, 1, 3, 0]
-
-Before: [2, 1, 2, 1]
-13 1 3 3
-After: [2, 1, 2, 1]
-
-Before: [1, 0, 2, 2]
-6 0 2 1
-After: [1, 0, 2, 2]
-
-Before: [1, 1, 2, 1]
-10 3 2 2
-After: [1, 1, 1, 1]
-
-Before: [3, 2, 1, 3]
-5 2 1 2
-After: [3, 2, 2, 3]
-
-Before: [0, 1, 2, 0]
-12 1 2 2
-After: [0, 1, 0, 0]
-
-Before: [2, 1, 1, 3]
-2 0 1 0
-After: [1, 1, 1, 3]
-
-Before: [1, 2, 2, 3]
-14 2 1 2
-After: [1, 2, 1, 3]
-
-Before: [1, 2, 0, 3]
-1 0 2 0
-After: [0, 2, 0, 3]
-
-Before: [0, 1, 2, 2]
-8 0 0 2
-After: [0, 1, 0, 2]
-
-Before: [0, 2, 1, 0]
-5 2 1 1
-After: [0, 2, 1, 0]
-
-Before: [2, 0, 0, 1]
-15 0 0 2
-After: [2, 0, 1, 1]
-
-Before: [2, 2, 1, 3]
-5 2 1 0
-After: [2, 2, 1, 3]
-
-Before: [3, 2, 2, 1]
-10 3 2 2
-After: [3, 2, 1, 1]
-
-Before: [0, 3, 2, 2]
-14 3 2 2
-After: [0, 3, 0, 2]
-
-Before: [1, 2, 0, 1]
-1 0 2 2
-After: [1, 2, 0, 1]
-
-Before: [0, 1, 1, 0]
-11 2 1 0
-After: [2, 1, 1, 0]
-
-Before: [1, 2, 2, 3]
-14 2 1 3
-After: [1, 2, 2, 1]
-
-Before: [2, 1, 3, 1]
-3 0 3 3
-After: [2, 1, 3, 1]
-
-Before: [0, 1, 2, 3]
-7 1 3 3
-After: [0, 1, 2, 0]
-
-Before: [2, 1, 2, 2]
-2 0 1 1
-After: [2, 1, 2, 2]
-
-Before: [2, 2, 1, 0]
-5 2 1 1
-After: [2, 2, 1, 0]
-
-Before: [3, 2, 1, 3]
-5 2 1 0
-After: [2, 2, 1, 3]
-
-Before: [1, 1, 2, 1]
-0 3 3 1
-After: [1, 0, 2, 1]
-
-Before: [1, 0, 2, 1]
-6 0 2 3
-After: [1, 0, 2, 0]
-
-Before: [1, 3, 0, 2]
-1 0 2 0
-After: [0, 3, 0, 2]
-
-Before: [0, 1, 1, 3]
-11 2 1 2
-After: [0, 1, 2, 3]
-
-Before: [1, 1, 3, 3]
-9 1 0 1
-After: [1, 1, 3, 3]
-
-Before: [3, 1, 2, 3]
-12 1 2 1
-After: [3, 0, 2, 3]
-
-Before: [0, 1, 1, 1]
-13 1 3 0
-After: [1, 1, 1, 1]
-
-Before: [1, 1, 2, 3]
-9 1 0 1
-After: [1, 1, 2, 3]
-
-Before: [0, 3, 1, 3]
-7 2 3 0
-After: [0, 3, 1, 3]
-
-Before: [3, 1, 2, 1]
-13 1 3 2
-After: [3, 1, 1, 1]
-
-Before: [1, 0, 1, 3]
-7 2 3 1
-After: [1, 0, 1, 3]
-
-Before: [1, 1, 0, 3]
-1 0 2 0
-After: [0, 1, 0, 3]
-
-Before: [2, 1, 2, 2]
-12 1 2 2
-After: [2, 1, 0, 2]
-
-Before: [3, 0, 1, 3]
-14 3 0 0
-After: [1, 0, 1, 3]
-
-Before: [3, 1, 3, 3]
-7 1 3 3
-After: [3, 1, 3, 0]
-
-Before: [1, 1, 0, 0]
-1 0 2 0
-After: [0, 1, 0, 0]
-
-Before: [1, 1, 1, 1]
-0 2 3 2
-After: [1, 1, 0, 1]
-
-Before: [2, 1, 0, 1]
-2 0 1 2
-After: [2, 1, 1, 1]
-
-Before: [1, 1, 2, 1]
-14 3 1 1
-After: [1, 0, 2, 1]
-
-Before: [0, 0, 2, 3]
-7 2 3 3
-After: [0, 0, 2, 0]
-
-Before: [3, 2, 0, 0]
-14 0 2 1
-After: [3, 1, 0, 0]
-
-Before: [0, 0, 2, 3]
-8 0 0 0
-After: [0, 0, 2, 3]
-
-Before: [3, 1, 1, 0]
-11 2 1 1
-After: [3, 2, 1, 0]
-
-Before: [1, 2, 1, 1]
-5 2 1 2
-After: [1, 2, 2, 1]
-
-Before: [0, 2, 1, 3]
-7 2 3 3
-After: [0, 2, 1, 0]
-
-Before: [3, 1, 2, 2]
-15 0 0 3
-After: [3, 1, 2, 1]
-
-Before: [0, 0, 0, 2]
-8 0 0 2
-After: [0, 0, 0, 2]
-
-Before: [3, 1, 3, 1]
-13 1 3 2
-After: [3, 1, 1, 1]
-
-Before: [1, 1, 2, 3]
-9 1 0 2
-After: [1, 1, 1, 3]
-
-Before: [1, 2, 0, 2]
-1 0 2 2
-After: [1, 2, 0, 2]
-
-Before: [2, 1, 2, 3]
-2 0 1 3
-After: [2, 1, 2, 1]
-
-Before: [1, 2, 0, 3]
-1 0 2 2
-After: [1, 2, 0, 3]
-
-Before: [1, 0, 2, 0]
-6 0 2 3
-After: [1, 0, 2, 0]
-
-Before: [1, 0, 3, 1]
-0 3 3 2
-After: [1, 0, 0, 1]
-
-Before: [1, 3, 2, 1]
-6 0 2 3
-After: [1, 3, 2, 0]
-
-Before: [1, 1, 1, 1]
-9 1 0 3
-After: [1, 1, 1, 1]
-
-Before: [0, 3, 2, 1]
-0 3 3 1
-After: [0, 0, 2, 1]
-
-Before: [1, 1, 3, 1]
-13 1 3 3
-After: [1, 1, 3, 1]
-
-Before: [2, 2, 0, 3]
-7 1 3 0
-After: [0, 2, 0, 3]
-
-Before: [0, 3, 2, 1]
-0 3 3 0
-After: [0, 3, 2, 1]
-
-Before: [1, 0, 0, 1]
-1 0 2 2
-After: [1, 0, 0, 1]
-
-Before: [2, 1, 2, 1]
-2 0 1 2
-After: [2, 1, 1, 1]
-
-Before: [1, 2, 2, 2]
-6 0 2 2
-After: [1, 2, 0, 2]
-
-Before: [0, 1, 1, 1]
-13 1 3 3
-After: [0, 1, 1, 1]
-
-Before: [2, 1, 1, 0]
-11 2 1 2
-After: [2, 1, 2, 0]
-
-Before: [0, 1, 3, 1]
-13 1 3 1
-After: [0, 1, 3, 1]
-
-Before: [3, 2, 0, 2]
-0 3 3 1
-After: [3, 0, 0, 2]
-
-Before: [1, 1, 2, 1]
-10 3 2 3
-After: [1, 1, 2, 1]
-
-Before: [2, 1, 2, 1]
-13 1 3 0
-After: [1, 1, 2, 1]
-
-Before: [2, 1, 0, 1]
-13 1 3 1
-After: [2, 1, 0, 1]
-
-Before: [2, 1, 2, 2]
-12 1 2 3
-After: [2, 1, 2, 0]
-
-Before: [0, 1, 2, 0]
-12 1 2 1
-After: [0, 0, 2, 0]
-
-Before: [3, 1, 2, 2]
-4 1 3 2
-After: [3, 1, 0, 2]
-
-Before: [1, 1, 0, 2]
-1 0 2 1
-After: [1, 0, 0, 2]
-
-Before: [0, 2, 1, 1]
-0 2 3 2
-After: [0, 2, 0, 1]
-
-Before: [1, 1, 2, 0]
-6 0 2 0
-After: [0, 1, 2, 0]
-
-Before: [0, 3, 1, 2]
-8 0 0 3
-After: [0, 3, 1, 0]
-
-Before: [1, 3, 0, 0]
-1 0 2 2
-After: [1, 3, 0, 0]
-
-Before: [1, 1, 2, 0]
-12 1 2 2
-After: [1, 1, 0, 0]
-
-Before: [2, 1, 0, 2]
-0 3 3 1
-After: [2, 0, 0, 2]
-
-Before: [0, 3, 3, 3]
-8 0 0 1
-After: [0, 0, 3, 3]
-
-Before: [3, 3, 0, 1]
-0 3 3 0
-After: [0, 3, 0, 1]
-
-Before: [3, 1, 1, 2]
-4 1 3 3
-After: [3, 1, 1, 0]
-
-Before: [2, 1, 2, 3]
-12 1 2 3
-After: [2, 1, 2, 0]
-
-Before: [3, 1, 2, 1]
-12 1 2 3
-After: [3, 1, 2, 0]
-
-Before: [1, 0, 2, 2]
-6 0 2 3
-After: [1, 0, 2, 0]
-
-Before: [1, 1, 0, 1]
-0 3 3 1
-After: [1, 0, 0, 1]
-
-Before: [1, 1, 0, 3]
-9 1 0 2
-After: [1, 1, 1, 3]
-
-Before: [3, 0, 2, 1]
-10 3 2 3
-After: [3, 0, 2, 1]
-
-Before: [2, 2, 3, 3]
-14 3 2 3
-After: [2, 2, 3, 1]
-
-Before: [3, 1, 2, 2]
-12 1 2 3
-After: [3, 1, 2, 0]
-
-Before: [0, 1, 2, 1]
-10 3 2 1
-After: [0, 1, 2, 1]
-
-Before: [0, 1, 3, 0]
-8 0 0 2
-After: [0, 1, 0, 0]
-
-Before: [3, 1, 2, 0]
-12 1 2 1
-After: [3, 0, 2, 0]
-
-Before: [1, 3, 2, 0]
-6 0 2 3
-After: [1, 3, 2, 0]
-
-Before: [2, 0, 1, 3]
-7 2 3 3
-After: [2, 0, 1, 0]
-
-Before: [3, 2, 2, 1]
-10 3 2 3
-After: [3, 2, 2, 1]
-
-Before: [1, 2, 0, 0]
-1 0 2 3
-After: [1, 2, 0, 0]
-
-Before: [2, 1, 1, 1]
-0 2 3 0
-After: [0, 1, 1, 1]
-
-Before: [3, 2, 1, 1]
-5 2 1 3
-After: [3, 2, 1, 2]
-
-Before: [3, 1, 3, 1]
-14 2 3 0
-After: [0, 1, 3, 1]
-
-Before: [2, 1, 1, 3]
-14 2 1 1
-After: [2, 0, 1, 3]
-
-Before: [0, 1, 1, 2]
-8 0 0 0
-After: [0, 1, 1, 2]
-
-Before: [2, 3, 3, 2]
-15 2 2 2
-After: [2, 3, 1, 2]
-
-Before: [0, 1, 2, 3]
-7 2 3 1
-After: [0, 0, 2, 3]
-
-Before: [1, 1, 0, 2]
-4 1 3 2
-After: [1, 1, 0, 2]
-
-Before: [0, 2, 3, 0]
-8 0 0 2
-After: [0, 2, 0, 0]
-
-Before: [0, 1, 1, 1]
-11 2 1 1
-After: [0, 2, 1, 1]
-
-Before: [2, 1, 1, 1]
-13 1 3 0
-After: [1, 1, 1, 1]
-
-Before: [2, 3, 1, 3]
-7 2 3 0
-After: [0, 3, 1, 3]
-
-Before: [2, 1, 2, 3]
-12 1 2 2
-After: [2, 1, 0, 3]
-
-Before: [2, 2, 1, 3]
-5 2 1 3
-After: [2, 2, 1, 2]
-
-Before: [3, 1, 1, 3]
-11 2 1 0
-After: [2, 1, 1, 3]
-
-Before: [0, 0, 1, 3]
-7 2 3 1
-After: [0, 0, 1, 3]
-
-Before: [1, 3, 2, 1]
-10 3 2 2
-After: [1, 3, 1, 1]
-
-Before: [3, 2, 1, 2]
-15 0 0 2
-After: [3, 2, 1, 2]
-
-Before: [1, 2, 1, 1]
-0 2 3 1
-After: [1, 0, 1, 1]
-
-Before: [1, 1, 1, 3]
-9 1 0 3
-After: [1, 1, 1, 1]
-
-Before: [1, 1, 0, 3]
-9 1 0 3
-After: [1, 1, 0, 1]
-
-Before: [0, 1, 1, 1]
-11 2 1 2
-After: [0, 1, 2, 1]
-
-Before: [0, 1, 2, 1]
-13 1 3 2
-After: [0, 1, 1, 1]
-
-Before: [1, 1, 2, 2]
-4 1 3 2
-After: [1, 1, 0, 2]
-
-Before: [3, 1, 1, 2]
-11 2 1 3
-After: [3, 1, 1, 2]
-
-Before: [2, 2, 3, 2]
-0 3 3 3
-After: [2, 2, 3, 0]
-
-Before: [0, 0, 1, 1]
-0 2 3 1
-After: [0, 0, 1, 1]
-
-Before: [0, 1, 2, 2]
-12 1 2 1
-After: [0, 0, 2, 2]
-
-Before: [2, 0, 3, 1]
-3 0 3 2
-After: [2, 0, 1, 1]
-
-Before: [1, 0, 2, 0]
-6 0 2 0
-After: [0, 0, 2, 0]
-
-Before: [0, 2, 1, 1]
-5 2 1 0
-After: [2, 2, 1, 1]
-
-Before: [1, 3, 3, 0]
-15 2 2 0
-After: [1, 3, 3, 0]
-
-Before: [0, 3, 2, 0]
-8 0 0 2
-After: [0, 3, 0, 0]
-
-Before: [2, 2, 2, 1]
-0 3 3 1
-After: [2, 0, 2, 1]
-
-Before: [3, 1, 1, 2]
-4 1 3 0
-After: [0, 1, 1, 2]
-
-Before: [1, 2, 1, 0]
-5 2 1 0
-After: [2, 2, 1, 0]
-
-Before: [2, 2, 3, 3]
-15 0 0 0
-After: [1, 2, 3, 3]
-
-Before: [2, 1, 0, 0]
-2 0 1 1
-After: [2, 1, 0, 0]
-
-Before: [1, 2, 2, 3]
-6 0 2 2
-After: [1, 2, 0, 3]
-
-Before: [1, 0, 0, 1]
-1 0 2 1
-After: [1, 0, 0, 1]
-
-Before: [2, 2, 0, 1]
-3 0 3 1
-After: [2, 1, 0, 1]
-
-Before: [3, 2, 1, 2]
-5 2 1 1
-After: [3, 2, 1, 2]
-
-Before: [2, 1, 3, 2]
-14 2 0 1
-After: [2, 1, 3, 2]
-
-Before: [1, 1, 0, 0]
-9 1 0 2
-After: [1, 1, 1, 0]
-
-Before: [2, 2, 3, 3]
-15 2 2 2
-After: [2, 2, 1, 3]
-
-Before: [0, 2, 1, 0]
-8 0 0 2
-After: [0, 2, 0, 0]
-
-Before: [1, 1, 0, 1]
-9 1 0 0
-After: [1, 1, 0, 1]
-
-Before: [0, 1, 2, 2]
-4 1 3 0
-After: [0, 1, 2, 2]
-
-Before: [1, 1, 0, 0]
-9 1 0 0
-After: [1, 1, 0, 0]
-
-Before: [2, 3, 2, 1]
-3 0 3 1
-After: [2, 1, 2, 1]
-
-Before: [1, 2, 1, 3]
-5 2 1 3
-After: [1, 2, 1, 2]
-
-Before: [2, 1, 1, 3]
-11 2 1 2
-After: [2, 1, 2, 3]
-
-Before: [1, 1, 3, 0]
-9 1 0 2
-After: [1, 1, 1, 0]
-
-Before: [2, 1, 1, 3]
-11 2 1 1
-After: [2, 2, 1, 3]
-
-Before: [2, 1, 3, 2]
-2 0 1 2
-After: [2, 1, 1, 2]
-
-Before: [0, 2, 1, 3]
-5 2 1 2
-After: [0, 2, 2, 3]
-
-Before: [1, 0, 0, 2]
-1 0 2 3
-After: [1, 0, 0, 0]
-
-Before: [1, 1, 1, 2]
-9 1 0 3
-After: [1, 1, 1, 1]
-
-Before: [2, 1, 3, 2]
-4 1 3 2
-After: [2, 1, 0, 2]
-
-Before: [1, 0, 2, 2]
-6 0 2 2
-After: [1, 0, 0, 2]
-
-Before: [3, 1, 1, 3]
-11 2 1 1
-After: [3, 2, 1, 3]
-
-Before: [3, 1, 2, 3]
-2 0 2 0
-After: [1, 1, 2, 3]
-
-Before: [1, 2, 0, 2]
-1 0 2 0
-After: [0, 2, 0, 2]
-
-Before: [3, 1, 2, 1]
-10 3 2 2
-After: [3, 1, 1, 1]
-
-Before: [1, 0, 2, 3]
-7 2 3 0
-After: [0, 0, 2, 3]
-
-Before: [3, 1, 2, 3]
-12 1 2 0
-After: [0, 1, 2, 3]
-
-Before: [2, 1, 1, 3]
-7 2 3 1
-After: [2, 0, 1, 3]
-
-Before: [0, 2, 1, 2]
-5 2 1 3
-After: [0, 2, 1, 2]
-
-Before: [3, 1, 1, 0]
-11 2 1 0
-After: [2, 1, 1, 0]
-
-Before: [1, 1, 3, 1]
-9 1 0 0
-After: [1, 1, 3, 1]
-
-Before: [1, 1, 2, 2]
-9 1 0 1
-After: [1, 1, 2, 2]
-
-Before: [2, 1, 1, 3]
-11 2 1 3
-After: [2, 1, 1, 2]
-
-Before: [1, 1, 1, 2]
-4 1 3 1
-After: [1, 0, 1, 2]
-
-Before: [3, 1, 0, 1]
-13 1 3 0
-After: [1, 1, 0, 1]
-
-Before: [1, 2, 2, 3]
-6 0 2 0
-After: [0, 2, 2, 3]
-
-Before: [1, 3, 0, 3]
-1 0 2 0
-After: [0, 3, 0, 3]
-
-Before: [2, 1, 1, 0]
-2 0 1 2
-After: [2, 1, 1, 0]
-
-Before: [0, 1, 2, 1]
-12 1 2 3
-After: [0, 1, 2, 0]
-
-Before: [2, 3, 1, 1]
-3 0 3 3
-After: [2, 3, 1, 1]
-
-Before: [2, 1, 3, 3]
-2 0 1 3
-After: [2, 1, 3, 1]
-
-Before: [1, 3, 2, 1]
-10 3 2 3
-After: [1, 3, 2, 1]
-
-Before: [1, 1, 3, 3]
-9 1 0 3
-After: [1, 1, 3, 1]
-
-Before: [1, 1, 3, 2]
-9 1 0 1
-After: [1, 1, 3, 2]
-
-Before: [1, 1, 0, 1]
-13 1 3 2
-After: [1, 1, 1, 1]
-
-Before: [3, 0, 2, 0]
-2 0 2 1
-After: [3, 1, 2, 0]
-
-Before: [2, 0, 0, 0]
-14 0 1 2
-After: [2, 0, 1, 0]
-
-Before: [0, 1, 2, 1]
-13 1 3 3
-After: [0, 1, 2, 1]
-
-Before: [2, 1, 3, 0]
-14 2 0 1
-After: [2, 1, 3, 0]
-
-Before: [2, 1, 0, 1]
-13 1 3 0
-After: [1, 1, 0, 1]
-
-Before: [2, 1, 0, 1]
-2 0 1 1
-After: [2, 1, 0, 1]
-
-Before: [0, 3, 2, 1]
-10 3 2 0
-After: [1, 3, 2, 1]
-
-Before: [0, 1, 3, 1]
-0 3 3 2
-After: [0, 1, 0, 1]
-
-Before: [0, 2, 1, 1]
-5 2 1 1
-After: [0, 2, 1, 1]
-
-Before: [2, 1, 1, 2]
-15 0 0 3
-After: [2, 1, 1, 1]
-
-Before: [1, 1, 2, 0]
-6 0 2 2
-After: [1, 1, 0, 0]
-
-Before: [1, 1, 2, 1]
-6 0 2 0
-After: [0, 1, 2, 1]
-
-Before: [0, 2, 1, 3]
-7 1 3 1
-After: [0, 0, 1, 3]
-
-Before: [1, 0, 0, 0]
-1 0 2 3
-After: [1, 0, 0, 0]
-
-Before: [2, 1, 2, 3]
-2 0 1 2
-After: [2, 1, 1, 3]
-
-Before: [0, 2, 0, 2]
-0 3 3 1
-After: [0, 0, 0, 2]
-
-Before: [0, 2, 3, 0]
-15 2 2 2
-After: [0, 2, 1, 0]
-
-Before: [1, 2, 2, 2]
-14 2 1 3
-After: [1, 2, 2, 1]
-
-Before: [0, 1, 3, 1]
-8 0 0 2
-After: [0, 1, 0, 1]
-
-Before: [3, 3, 3, 2]
-15 0 0 3
-After: [3, 3, 3, 1]
-
-Before: [3, 3, 0, 2]
-14 0 2 1
-After: [3, 1, 0, 2]
-
-Before: [0, 1, 1, 3]
-11 2 1 0
-After: [2, 1, 1, 3]
-
-Before: [1, 1, 0, 1]
-9 1 0 2
-After: [1, 1, 1, 1]
-
-Before: [0, 1, 2, 1]
-10 3 2 3
-After: [0, 1, 2, 1]
-
-Before: [2, 2, 2, 1]
-10 3 2 1
-After: [2, 1, 2, 1]
-
-Before: [0, 1, 2, 2]
-4 1 3 3
-After: [0, 1, 2, 0]
-
-Before: [1, 2, 2, 1]
-10 3 2 2
-After: [1, 2, 1, 1]
-
-Before: [2, 1, 1, 2]
-11 2 1 1
-After: [2, 2, 1, 2]
-
-Before: [1, 1, 2, 1]
-12 1 2 3
-After: [1, 1, 2, 0]
-
-Before: [3, 3, 1, 1]
-0 2 3 1
-After: [3, 0, 1, 1]
-
-Before: [0, 1, 2, 2]
-4 1 3 1
-After: [0, 0, 2, 2]
-
-Before: [0, 3, 2, 2]
-8 0 0 3
-After: [0, 3, 2, 0]
-
-Before: [2, 1, 2, 1]
-2 0 1 0
-After: [1, 1, 2, 1]
-
-Before: [1, 1, 0, 3]
-1 0 2 1
-After: [1, 0, 0, 3]
-
-Before: [3, 3, 3, 2]
-15 0 0 0
-After: [1, 3, 3, 2]
-
-Before: [0, 1, 1, 2]
-4 1 3 2
-After: [0, 1, 0, 2]
-
-Before: [1, 3, 0, 3]
-1 0 2 1
-After: [1, 0, 0, 3]
-
-Before: [1, 1, 0, 1]
-1 0 2 2
-After: [1, 1, 0, 1]
-
-Before: [2, 1, 0, 2]
-4 1 3 0
-After: [0, 1, 0, 2]
-
-Before: [3, 2, 2, 2]
-2 0 2 2
-After: [3, 2, 1, 2]
-
-Before: [0, 2, 2, 1]
-10 3 2 1
-After: [0, 1, 2, 1]
-
-Before: [0, 1, 0, 2]
-4 1 3 2
-After: [0, 1, 0, 2]
-
-Before: [0, 1, 0, 2]
-4 1 3 3
-After: [0, 1, 0, 0]
-
-Before: [1, 1, 2, 1]
-10 3 2 1
-After: [1, 1, 2, 1]
-
-Before: [1, 1, 0, 1]
-13 1 3 0
-After: [1, 1, 0, 1]
-
-Before: [1, 3, 2, 2]
-6 0 2 1
-After: [1, 0, 2, 2]
-
-Before: [0, 1, 2, 1]
-13 1 3 0
-After: [1, 1, 2, 1]
-
-Before: [0, 1, 1, 3]
-11 2 1 1
-After: [0, 2, 1, 3]
-
-Before: [3, 2, 1, 0]
-5 2 1 3
-After: [3, 2, 1, 2]
-
-Before: [2, 1, 2, 3]
-7 2 3 3
-After: [2, 1, 2, 0]
-
-Before: [1, 1, 1, 1]
-11 2 1 2
-After: [1, 1, 2, 1]
-
-Before: [2, 1, 1, 1]
-3 0 3 2
-After: [2, 1, 1, 1]
-
-Before: [0, 1, 1, 3]
-8 0 0 1
-After: [0, 0, 1, 3]
-
-Before: [3, 2, 3, 3]
-7 1 3 3
-After: [3, 2, 3, 0]
-
-Before: [0, 3, 0, 0]
-8 0 0 2
-After: [0, 3, 0, 0]
-
-Before: [1, 1, 2, 1]
-6 0 2 1
-After: [1, 0, 2, 1]
-
-Before: [0, 1, 1, 2]
-4 1 3 0
-After: [0, 1, 1, 2]
-
-Before: [1, 1, 2, 1]
-9 1 0 1
-After: [1, 1, 2, 1]
-
-Before: [3, 1, 2, 0]
-12 1 2 0
-After: [0, 1, 2, 0]
-
-Before: [1, 3, 0, 3]
-1 0 2 2
-After: [1, 3, 0, 3]
-
-Before: [1, 1, 0, 3]
-9 1 0 1
-After: [1, 1, 0, 3]
-
-Before: [0, 2, 2, 2]
-8 0 0 1
-After: [0, 0, 2, 2]
-
-Before: [0, 1, 1, 1]
-13 1 3 1
-After: [0, 1, 1, 1]
-
-Before: [1, 1, 3, 1]
-13 1 3 0
-After: [1, 1, 3, 1]
-
-Before: [0, 1, 2, 1]
-8 0 0 0
-After: [0, 1, 2, 1]
-
-Before: [2, 1, 2, 1]
-12 1 2 2
-After: [2, 1, 0, 1]
-
-Before: [1, 0, 2, 3]
-6 0 2 1
-After: [1, 0, 2, 3]
-
-Before: [3, 0, 3, 1]
-15 2 0 2
-After: [3, 0, 1, 1]
-
-Before: [0, 1, 1, 1]
-0 2 3 0
-After: [0, 1, 1, 1]
-
-Before: [3, 0, 0, 3]
-14 0 2 1
-After: [3, 1, 0, 3]
-
-Before: [3, 1, 1, 1]
-0 2 3 1
-After: [3, 0, 1, 1]
-
-Before: [0, 1, 2, 3]
-7 2 3 3
-After: [0, 1, 2, 0]
-
-Before: [3, 1, 0, 1]
-13 1 3 1
-After: [3, 1, 0, 1]
-
-Before: [0, 0, 3, 0]
-8 0 0 1
-After: [0, 0, 3, 0]
-
-Before: [1, 1, 0, 2]
-1 0 2 3
-After: [1, 1, 0, 0]
-
-Before: [2, 1, 1, 2]
-4 1 3 1
-After: [2, 0, 1, 2]
-
-Before: [3, 2, 3, 0]
-15 2 2 3
-After: [3, 2, 3, 1]
-
-Before: [0, 2, 0, 3]
-7 1 3 0
-After: [0, 2, 0, 3]
-
-Before: [1, 1, 3, 2]
-9 1 0 2
-After: [1, 1, 1, 2]
-
-Before: [0, 3, 1, 3]
-8 0 0 1
-After: [0, 0, 1, 3]
-
-Before: [3, 1, 2, 1]
-2 0 2 0
-After: [1, 1, 2, 1]
-
-Before: [1, 1, 3, 1]
-9 1 0 2
-After: [1, 1, 1, 1]
-
-Before: [2, 1, 3, 0]
-2 0 1 3
-After: [2, 1, 3, 1]
-
-Before: [2, 1, 1, 0]
-11 2 1 1
-After: [2, 2, 1, 0]
-
-Before: [3, 1, 1, 1]
-13 1 3 0
-After: [1, 1, 1, 1]
-
-Before: [2, 2, 1, 3]
-5 2 1 1
-After: [2, 2, 1, 3]
-
-Before: [0, 0, 2, 1]
-10 3 2 3
-After: [0, 0, 2, 1]
-
-Before: [3, 3, 0, 2]
-0 3 3 1
-After: [3, 0, 0, 2]
-
-Before: [0, 2, 1, 0]
-8 0 0 0
-After: [0, 2, 1, 0]
-
-Before: [3, 3, 0, 2]
-15 0 0 3
-After: [3, 3, 0, 1]
-
-Before: [1, 0, 2, 3]
-6 0 2 0
-After: [0, 0, 2, 3]
-
-Before: [0, 0, 1, 1]
-8 0 0 1
-After: [0, 0, 1, 1]
-
-Before: [1, 0, 2, 1]
-10 3 2 0
-After: [1, 0, 2, 1]
-
-Before: [1, 2, 1, 2]
-5 2 1 1
-After: [1, 2, 1, 2]
-
-Before: [2, 1, 3, 1]
-14 2 0 1
-After: [2, 1, 3, 1]
-
-Before: [2, 1, 2, 0]
-2 0 1 0
-After: [1, 1, 2, 0]
-
-Before: [1, 1, 2, 2]
-6 0 2 3
-After: [1, 1, 2, 0]
-
-Before: [2, 1, 1, 3]
-2 0 1 2
-After: [2, 1, 1, 3]
-
-Before: [2, 3, 3, 2]
-14 2 0 2
-After: [2, 3, 1, 2]
-
-Before: [1, 0, 0, 2]
-1 0 2 0
-After: [0, 0, 0, 2]
-
-Before: [3, 3, 2, 2]
-15 0 0 0
-After: [1, 3, 2, 2]
-
-Before: [0, 1, 1, 2]
-4 1 3 3
-After: [0, 1, 1, 0]
-
-Before: [2, 2, 1, 2]
-5 2 1 3
-After: [2, 2, 1, 2]
-
-Before: [2, 1, 2, 0]
-12 1 2 0
-After: [0, 1, 2, 0]
-
-Before: [3, 1, 0, 1]
-13 1 3 2
-After: [3, 1, 1, 1]
-
-Before: [1, 2, 1, 1]
-5 2 1 1
-After: [1, 2, 1, 1]
-
-Before: [2, 1, 2, 2]
-4 1 3 2
-After: [2, 1, 0, 2]
-
-Before: [0, 1, 0, 2]
-4 1 3 0
-After: [0, 1, 0, 2]
-
-Before: [3, 1, 0, 2]
-4 1 3 2
-After: [3, 1, 0, 2]
-
-Before: [1, 1, 3, 2]
-4 1 3 1
-After: [1, 0, 3, 2]
-
-Before: [3, 1, 1, 1]
-13 1 3 2
-After: [3, 1, 1, 1]
-
-Before: [0, 0, 2, 0]
-8 0 0 3
-After: [0, 0, 2, 0]
-
-Before: [1, 1, 3, 2]
-9 1 0 0
-After: [1, 1, 3, 2]
-
-Before: [3, 2, 1, 0]
-5 2 1 1
-After: [3, 2, 1, 0]
-
-Before: [1, 1, 0, 2]
-1 0 2 0
-After: [0, 1, 0, 2]
-
-Before: [2, 1, 0, 1]
-13 1 3 3
-After: [2, 1, 0, 1]
-
-Before: [3, 1, 2, 0]
-12 1 2 2
-After: [3, 1, 0, 0]
-
-Before: [3, 2, 2, 3]
-2 0 2 0
-After: [1, 2, 2, 3]
-
-Before: [1, 1, 1, 0]
-11 2 1 1
-After: [1, 2, 1, 0]
-
-Before: [0, 0, 1, 2]
-8 0 0 3
-After: [0, 0, 1, 0]
-
-Before: [1, 1, 0, 0]
-9 1 0 3
-After: [1, 1, 0, 1]
-
-Before: [1, 1, 3, 0]
-9 1 0 3
-After: [1, 1, 3, 1]
-
-Before: [1, 1, 1, 1]
-11 2 1 1
-After: [1, 2, 1, 1]
-
-Before: [3, 0, 0, 0]
-14 0 2 3
-After: [3, 0, 0, 1]
-
-Before: [2, 1, 1, 3]
-7 1 3 3
-After: [2, 1, 1, 0]
-
-Before: [0, 3, 3, 2]
-8 0 0 2
-After: [0, 3, 0, 2]
-
-Before: [3, 1, 2, 1]
-12 1 2 1
-After: [3, 0, 2, 1]
-
-Before: [3, 0, 2, 3]
-7 2 3 0
-After: [0, 0, 2, 3]
-
-Before: [3, 1, 1, 1]
-14 3 1 1
-After: [3, 0, 1, 1]
-
-Before: [1, 1, 1, 3]
-9 1 0 0
-After: [1, 1, 1, 3]
-
-Before: [0, 0, 3, 3]
-8 0 0 2
-After: [0, 0, 0, 3]
-
-Before: [3, 1, 3, 3]
-7 1 3 1
-After: [3, 0, 3, 3]
-
-Before: [1, 1, 2, 2]
-12 1 2 1
-After: [1, 0, 2, 2]
-
-Before: [1, 1, 0, 1]
-1 0 2 3
-After: [1, 1, 0, 0]
-
-Before: [2, 2, 2, 1]
-3 0 3 2
-After: [2, 2, 1, 1]
-
-Before: [2, 0, 3, 0]
-14 0 1 1
-After: [2, 1, 3, 0]
-
-Before: [1, 1, 2, 2]
-4 1 3 3
-After: [1, 1, 2, 0]
-
-Before: [1, 1, 2, 3]
-12 1 2 2
-After: [1, 1, 0, 3]
-
-Before: [1, 2, 1, 3]
-7 2 3 2
-After: [1, 2, 0, 3]
-
-Before: [3, 0, 0, 1]
-14 0 2 2
-After: [3, 0, 1, 1]
-
-Before: [3, 2, 1, 0]
-5 2 1 0
-After: [2, 2, 1, 0]
-
-Before: [2, 3, 2, 1]
-3 0 3 0
-After: [1, 3, 2, 1]
-
-Before: [0, 1, 3, 2]
-8 0 0 3
-After: [0, 1, 3, 0]
-
-Before: [2, 2, 1, 1]
-3 0 3 3
-After: [2, 2, 1, 1]
-
-Before: [3, 2, 3, 1]
-0 3 3 3
-After: [3, 2, 3, 0]
-
-Before: [2, 1, 1, 0]
-14 2 1 3
-After: [2, 1, 1, 0]
-
-Before: [2, 2, 1, 3]
-7 2 3 1
-After: [2, 0, 1, 3]
-
-Before: [2, 3, 3, 1]
-3 0 3 2
-After: [2, 3, 1, 1]
-
-Before: [1, 1, 2, 1]
-9 1 0 2
-After: [1, 1, 1, 1]
-
-Before: [0, 3, 2, 1]
-10 3 2 1
-After: [0, 1, 2, 1]
-
-Before: [0, 1, 0, 1]
-13 1 3 3
-After: [0, 1, 0, 1]
-
-Before: [1, 1, 1, 3]
-11 2 1 3
-After: [1, 1, 1, 2]
-
-Before: [3, 1, 1, 2]
-11 2 1 2
-After: [3, 1, 2, 2]
-
-Before: [1, 3, 2, 3]
-6 0 2 3
-After: [1, 3, 2, 0]
-
-Before: [0, 1, 2, 3]
-8 0 0 2
-After: [0, 1, 0, 3]
-
-Before: [3, 0, 1, 3]
-14 3 0 2
-After: [3, 0, 1, 3]
-
-Before: [2, 1, 2, 0]
-12 1 2 3
-After: [2, 1, 2, 0]
-
-Before: [0, 1, 1, 1]
-11 2 1 0
-After: [2, 1, 1, 1]
-
-Before: [2, 3, 2, 1]
-0 3 3 2
-After: [2, 3, 0, 1]
-
-Before: [1, 1, 0, 2]
-0 3 3 3
-After: [1, 1, 0, 0]
-
-Before: [1, 0, 0, 1]
-1 0 2 3
-After: [1, 0, 0, 0]
-
-Before: [3, 2, 1, 3]
-7 2 3 3
-After: [3, 2, 1, 0]
-
-Before: [3, 1, 1, 3]
-11 2 1 2
-After: [3, 1, 2, 3]
-
-Before: [0, 1, 2, 2]
-12 1 2 3
-After: [0, 1, 2, 0]
-
-Before: [3, 3, 2, 1]
-10 3 2 0
-After: [1, 3, 2, 1]
-
-Before: [1, 1, 3, 1]
-13 1 3 1
-After: [1, 1, 3, 1]
-
-Before: [2, 2, 1, 1]
-3 0 3 1
-After: [2, 1, 1, 1]
-
-Before: [2, 1, 2, 2]
-4 1 3 0
-After: [0, 1, 2, 2]
-
-Before: [1, 1, 1, 1]
-9 1 0 2
-After: [1, 1, 1, 1]
-
-Before: [1, 3, 2, 1]
-10 3 2 0
-After: [1, 3, 2, 1]
-
-Before: [2, 0, 2, 1]
-10 3 2 0
-After: [1, 0, 2, 1]
-
-Before: [1, 1, 0, 3]
-1 0 2 2
-After: [1, 1, 0, 3]
-
-Before: [1, 2, 0, 1]
-1 0 2 3
-After: [1, 2, 0, 0]
-
-Before: [1, 3, 0, 0]
-1 0 2 0
-After: [0, 3, 0, 0]
-
-Before: [2, 1, 1, 3]
-14 2 1 0
-After: [0, 1, 1, 3]
-
-Before: [1, 1, 1, 2]
-9 1 0 1
-After: [1, 1, 1, 2]
-
-Before: [1, 1, 0, 1]
-13 1 3 1
-After: [1, 1, 0, 1]
-
-Before: [2, 0, 0, 2]
-15 0 0 0
-After: [1, 0, 0, 2]
-
-Before: [2, 3, 1, 1]
-3 0 3 0
-After: [1, 3, 1, 1]
-
-Before: [0, 1, 2, 0]
-12 1 2 3
-After: [0, 1, 2, 0]
-
-Before: [1, 2, 1, 2]
-5 2 1 0
-After: [2, 2, 1, 2]
-
-Before: [2, 0, 2, 2]
-14 3 2 2
-After: [2, 0, 0, 2]
-
-Before: [0, 2, 2, 1]
-10 3 2 0
-After: [1, 2, 2, 1]
-
-Before: [2, 1, 0, 2]
-4 1 3 3
-After: [2, 1, 0, 0]
-
-Before: [1, 3, 0, 2]
-1 0 2 2
-After: [1, 3, 0, 2]
-
-Before: [0, 0, 2, 3]
-8 0 0 1
-After: [0, 0, 2, 3]
-
-Before: [2, 1, 1, 3]
-7 1 3 0
-After: [0, 1, 1, 3]
-
-Before: [3, 1, 2, 1]
-13 1 3 0
-After: [1, 1, 2, 1]
-
-Before: [2, 0, 1, 1]
-3 0 3 1
-After: [2, 1, 1, 1]
-
-Before: [1, 1, 2, 1]
-13 1 3 1
-After: [1, 1, 2, 1]
-
-Before: [0, 1, 2, 1]
-12 1 2 1
-After: [0, 0, 2, 1]
-
-Before: [2, 2, 3, 3]
-14 3 2 2
-After: [2, 2, 1, 3]
-
-Before: [3, 1, 1, 1]
-13 1 3 3
-After: [3, 1, 1, 1]
-
-Before: [3, 3, 3, 2]
-15 2 0 1
-After: [3, 1, 3, 2]
-
-Before: [2, 1, 2, 1]
-3 0 3 1
-After: [2, 1, 2, 1]
-
-Before: [3, 1, 2, 0]
-2 0 2 3
-After: [3, 1, 2, 1]
-
-Before: [1, 2, 1, 2]
-5 2 1 3
-After: [1, 2, 1, 2]
-
-Before: [3, 2, 1, 1]
-5 2 1 0
-After: [2, 2, 1, 1]
-
-Before: [0, 1, 2, 1]
-12 1 2 0
-After: [0, 1, 2, 1]
-
-Before: [2, 1, 1, 1]
-3 0 3 0
-After: [1, 1, 1, 1]
-
-Before: [3, 1, 1, 2]
-11 2 1 1
-After: [3, 2, 1, 2]
-
-Before: [1, 1, 1, 3]
-11 2 1 0
-After: [2, 1, 1, 3]
-
-Before: [1, 1, 2, 0]
-9 1 0 3
-After: [1, 1, 2, 1]
-
-Before: [0, 2, 2, 3]
-8 0 0 3
-After: [0, 2, 2, 0]
-
-Before: [0, 0, 2, 1]
-10 3 2 1
-After: [0, 1, 2, 1]
-
-Before: [0, 2, 3, 3]
-14 3 2 0
-After: [1, 2, 3, 3]
-
-Before: [2, 1, 0, 3]
-2 0 1 2
-After: [2, 1, 1, 3]
-
-Before: [3, 1, 2, 0]
-2 0 2 0
-After: [1, 1, 2, 0]
-
-Before: [3, 1, 0, 2]
-14 0 2 0
-After: [1, 1, 0, 2]
-
-Before: [2, 1, 3, 0]
-2 0 1 1
-After: [2, 1, 3, 0]
-
-Before: [1, 1, 1, 0]
-9 1 0 3
-After: [1, 1, 1, 1]
-
-Before: [1, 0, 0, 0]
-1 0 2 1
-After: [1, 0, 0, 0]
-
-Before: [0, 3, 2, 2]
-8 0 0 2
-After: [0, 3, 0, 2]
-
-Before: [3, 3, 2, 2]
-2 0 2 0
-After: [1, 3, 2, 2]
-
-Before: [0, 2, 1, 2]
-5 2 1 1
-After: [0, 2, 1, 2]
-
-Before: [3, 3, 2, 2]
-2 0 2 3
-After: [3, 3, 2, 1]
-
-Before: [0, 2, 1, 2]
-5 2 1 0
-After: [2, 2, 1, 2]
-
-Before: [1, 0, 2, 1]
-10 3 2 2
-After: [1, 0, 1, 1]
-
-Before: [0, 1, 0, 1]
-13 1 3 2
-After: [0, 1, 1, 1]
-
-Before: [3, 1, 1, 1]
-14 2 1 1
-After: [3, 0, 1, 1]
-
-Before: [0, 1, 0, 1]
-13 1 3 1
-After: [0, 1, 0, 1]
-
-Before: [2, 2, 0, 1]
-3 0 3 2
-After: [2, 2, 1, 1]
-
-Before: [3, 2, 1, 3]
-14 3 0 0
-After: [1, 2, 1, 3]
-
-Before: [1, 1, 2, 2]
-4 1 3 0
-After: [0, 1, 2, 2]
-
-Before: [3, 1, 2, 3]
-7 1 3 1
-After: [3, 0, 2, 3]
-
-Before: [3, 0, 3, 0]
-15 2 2 1
-After: [3, 1, 3, 0]
-
-Before: [0, 2, 2, 2]
-14 2 1 3
-After: [0, 2, 2, 1]
-
-Before: [1, 1, 2, 3]
-12 1 2 1
-After: [1, 0, 2, 3]
-
-Before: [3, 1, 1, 1]
-13 1 3 1
-After: [3, 1, 1, 1]
-
-Before: [2, 1, 1, 1]
-13 1 3 3
-After: [2, 1, 1, 1]
-
-Before: [2, 2, 2, 3]
-7 2 3 3
-After: [2, 2, 2, 0]
-
-Before: [2, 3, 3, 3]
-15 0 0 2
-After: [2, 3, 1, 3]
-
-Before: [3, 1, 2, 1]
-13 1 3 3
-After: [3, 1, 2, 1]
-
-Before: [3, 3, 3, 2]
-15 0 2 0
-After: [1, 3, 3, 2]
-
-Before: [3, 1, 0, 2]
-0 3 3 0
-After: [0, 1, 0, 2]
-
-Before: [2, 0, 3, 2]
-14 0 1 1
-After: [2, 1, 3, 2]
-
-Before: [1, 0, 2, 1]
-10 3 2 3
-After: [1, 0, 2, 1]
-
-Before: [1, 3, 3, 1]
-0 3 3 2
-After: [1, 3, 0, 1]
-
-Before: [0, 2, 2, 1]
-10 3 2 2
-After: [0, 2, 1, 1]
-
-Before: [2, 2, 1, 0]
-5 2 1 0
-After: [2, 2, 1, 0]
-
-Before: [2, 3, 0, 1]
-3 0 3 2
-After: [2, 3, 1, 1]
-
-Before: [1, 2, 2, 2]
-6 0 2 1
-After: [1, 0, 2, 2]
-
-Before: [0, 1, 2, 2]
-12 1 2 0
-After: [0, 1, 2, 2]
-
-Before: [1, 1, 0, 2]
-9 1 0 2
-After: [1, 1, 1, 2]
-
-Before: [0, 1, 2, 2]
-12 1 2 2
-After: [0, 1, 0, 2]
-
-Before: [2, 1, 2, 0]
-12 1 2 2
-After: [2, 1, 0, 0]
-
-Before: [2, 3, 3, 0]
-15 0 0 3
-After: [2, 3, 3, 1]
-
-Before: [2, 2, 0, 1]
-15 0 0 0
-After: [1, 2, 0, 1]
-
-Before: [2, 0, 3, 2]
-0 3 3 2
-After: [2, 0, 0, 2]
-
-Before: [3, 0, 3, 2]
-15 2 2 3
-After: [3, 0, 3, 1]
-
-Before: [2, 3, 2, 1]
-10 3 2 3
-After: [2, 3, 2, 1]
-
-Before: [2, 1, 2, 1]
-3 0 3 3
-After: [2, 1, 2, 1]
-
-Before: [1, 3, 0, 0]
-1 0 2 3
-After: [1, 3, 0, 0]
-
-Before: [3, 1, 2, 3]
-2 0 2 3
-After: [3, 1, 2, 1]
-
-Before: [2, 1, 1, 2]
-11 2 1 2
-After: [2, 1, 2, 2]
-
-Before: [1, 3, 2, 3]
-7 2 3 1
-After: [1, 0, 2, 3]
-
-Before: [0, 0, 0, 0]
-8 0 0 3
-After: [0, 0, 0, 0]
-
-Before: [1, 0, 3, 1]
-14 2 3 2
-After: [1, 0, 0, 1]
-
-Before: [3, 2, 0, 3]
-14 0 2 3
-After: [3, 2, 0, 1]
-
-Before: [3, 2, 2, 1]
-2 0 2 1
-After: [3, 1, 2, 1]
-
-Before: [2, 1, 2, 1]
-3 0 3 0
-After: [1, 1, 2, 1]
-
-Before: [2, 2, 0, 1]
-3 0 3 3
-After: [2, 2, 0, 1]
-
-Before: [0, 3, 3, 2]
-8 0 0 0
-After: [0, 3, 3, 2]
-
-Before: [3, 2, 0, 1]
-14 0 2 1
-After: [3, 1, 0, 1]
-
-Before: [1, 1, 1, 3]
-9 1 0 1
-After: [1, 1, 1, 3]
-
-Before: [0, 1, 0, 1]
-13 1 3 0
-After: [1, 1, 0, 1]
-
-Before: [1, 1, 1, 0]
-9 1 0 1
-After: [1, 1, 1, 0]
-
-Before: [1, 3, 2, 2]
-6 0 2 0
-After: [0, 3, 2, 2]
-
-Before: [2, 1, 1, 1]
-14 3 1 0
-After: [0, 1, 1, 1]
-
-Before: [1, 1, 3, 0]
-9 1 0 0
-After: [1, 1, 3, 0]
-
-Before: [2, 1, 3, 1]
-3 0 3 2
-After: [2, 1, 1, 1]
-
-Before: [2, 1, 1, 1]
-3 0 3 1
-After: [2, 1, 1, 1]
-
-Before: [3, 2, 1, 3]
-7 1 3 3
-After: [3, 2, 1, 0]
-
-Before: [2, 0, 3, 3]
-15 0 0 2
-After: [2, 0, 1, 3]
-
-Before: [3, 0, 2, 1]
-10 3 2 2
-After: [3, 0, 1, 1]
-
-Before: [1, 1, 2, 3]
-9 1 0 0
-After: [1, 1, 2, 3]
-
-Before: [1, 2, 1, 1]
-5 2 1 0
-After: [2, 2, 1, 1]
-
-Before: [0, 1, 2, 3]
-12 1 2 1
-After: [0, 0, 2, 3]
-
-Before: [1, 3, 0, 1]
-1 0 2 3
-After: [1, 3, 0, 0]
-
-Before: [2, 1, 0, 1]
-2 0 1 0
-After: [1, 1, 0, 1]
-
-Before: [3, 2, 2, 3]
-2 0 2 1
-After: [3, 1, 2, 3]
-
-Before: [1, 2, 0, 1]
-1 0 2 1
-After: [1, 0, 0, 1]
-
-Before: [1, 2, 2, 0]
-6 0 2 0
-After: [0, 2, 2, 0]
-
-Before: [2, 1, 1, 2]
-11 2 1 0
-After: [2, 1, 1, 2]
-
-Before: [3, 1, 1, 3]
-7 1 3 2
-After: [3, 1, 0, 3]
-
-Before: [2, 2, 1, 3]
-5 2 1 2
-After: [2, 2, 2, 3]
-
-Before: [3, 1, 1, 1]
-11 2 1 1
-After: [3, 2, 1, 1]
-
-Before: [2, 1, 2, 2]
-4 1 3 1
-After: [2, 0, 2, 2]
-
-Before: [1, 1, 2, 1]
-12 1 2 0
-After: [0, 1, 2, 1]
-
-Before: [1, 1, 0, 2]
-9 1 0 3
-After: [1, 1, 0, 1]
-
-Before: [3, 3, 2, 3]
-2 0 2 0
-After: [1, 3, 2, 3]
-
-Before: [1, 1, 2, 3]
-9 1 0 3
-After: [1, 1, 2, 1]
-
-Before: [2, 1, 2, 1]
-12 1 2 0
-After: [0, 1, 2, 1]
-
-Before: [1, 1, 0, 2]
-4 1 3 1
-After: [1, 0, 0, 2]
-
-Before: [1, 2, 2, 0]
-6 0 2 3
-After: [1, 2, 2, 0]
-
-Before: [2, 1, 1, 0]
-11 2 1 3
-After: [2, 1, 1, 2]
-
-Before: [1, 1, 0, 1]
-13 1 3 3
-After: [1, 1, 0, 1]
-
-Before: [3, 1, 2, 3]
-7 1 3 3
-After: [3, 1, 2, 0]
-
-Before: [0, 2, 1, 3]
-8 0 0 0
-After: [0, 2, 1, 3]
-
-Before: [3, 2, 1, 3]
-7 1 3 0
-After: [0, 2, 1, 3]
-
-Before: [1, 2, 2, 2]
-6 0 2 3
-After: [1, 2, 2, 0]
-
-Before: [1, 1, 1, 1]
-13 1 3 3
-After: [1, 1, 1, 1]
-
-Before: [2, 1, 3, 2]
-15 2 2 1
-After: [2, 1, 3, 2]
-
-Before: [2, 1, 0, 3]
-2 0 1 0
-After: [1, 1, 0, 3]
-
-Before: [1, 1, 2, 1]
-12 1 2 2
-After: [1, 1, 0, 1]
-
-Before: [1, 1, 3, 2]
-4 1 3 0
-After: [0, 1, 3, 2]
-
-Before: [2, 3, 2, 3]
-7 2 3 2
-After: [2, 3, 0, 3]
-
-Before: [2, 2, 1, 1]
-5 2 1 3
-After: [2, 2, 1, 2]
-
-Before: [0, 0, 2, 1]
-10 3 2 0
-After: [1, 0, 2, 1]
-
-Before: [3, 1, 0, 3]
-7 1 3 2
-After: [3, 1, 0, 3]
-
-Before: [2, 1, 3, 2]
-2 0 1 1
-After: [2, 1, 3, 2]
-
-Before: [2, 3, 1, 1]
-3 0 3 1
-After: [2, 1, 1, 1]
-
-Before: [2, 2, 1, 3]
-7 1 3 3
-After: [2, 2, 1, 0]
-
-Before: [3, 3, 3, 1]
-15 0 2 1
-After: [3, 1, 3, 1]
-
-Before: [0, 1, 1, 0]
-11 2 1 1
-After: [0, 2, 1, 0]
-
-Before: [1, 1, 1, 0]
-11 2 1 0
-After: [2, 1, 1, 0]
-
-Before: [3, 1, 3, 1]
-13 1 3 3
-After: [3, 1, 3, 1]
-
-Before: [0, 1, 3, 2]
-8 0 0 1
-After: [0, 0, 3, 2]
-
-Before: [2, 2, 0, 3]
-7 1 3 3
-After: [2, 2, 0, 0]
-
-Before: [1, 0, 2, 1]
-6 0 2 2
-After: [1, 0, 0, 1]
-
-Before: [1, 3, 0, 2]
-0 3 3 3
-After: [1, 3, 0, 0]
-
-Before: [1, 1, 0, 1]
-9 1 0 3
-After: [1, 1, 0, 1]
-
-Before: [1, 2, 2, 3]
-7 1 3 1
-After: [1, 0, 2, 3]
-
-Before: [1, 1, 2, 2]
-12 1 2 3
-After: [1, 1, 2, 0]
-
-Before: [1, 1, 2, 0]
-12 1 2 3
-After: [1, 1, 2, 0]
-
-Before: [0, 1, 0, 2]
-4 1 3 1
-After: [0, 0, 0, 2]
-
-Before: [1, 1, 1, 0]
-9 1 0 0
-After: [1, 1, 1, 0]
-
-Before: [1, 1, 2, 0]
-9 1 0 0
-After: [1, 1, 2, 0]
-
-Before: [1, 2, 1, 1]
-5 2 1 3
-After: [1, 2, 1, 2]
-
-Before: [3, 0, 3, 2]
-15 2 2 0
-After: [1, 0, 3, 2]
-
-Before: [2, 2, 1, 3]
-7 2 3 3
-After: [2, 2, 1, 0]
-
-Before: [3, 1, 2, 2]
-4 1 3 3
-After: [3, 1, 2, 0]
-
-Before: [3, 1, 2, 1]
-15 0 0 1
-After: [3, 1, 2, 1]
-
-Before: [2, 3, 2, 1]
-10 3 2 0
-After: [1, 3, 2, 1]
-
-Before: [2, 1, 2, 2]
-0 3 3 1
-After: [2, 0, 2, 2]
-
-Before: [1, 2, 0, 2]
-1 0 2 1
-After: [1, 0, 0, 2]
-
-Before: [3, 3, 2, 0]
-2 0 2 0
-After: [1, 3, 2, 0]
-
-Before: [0, 1, 1, 2]
-11 2 1 1
-After: [0, 2, 1, 2]
-
-Before: [3, 1, 2, 1]
-13 1 3 1
-After: [3, 1, 2, 1]
-
-Before: [3, 1, 3, 3]
-15 2 0 3
-After: [3, 1, 3, 1]
-
-Before: [0, 1, 0, 1]
-8 0 0 3
-After: [0, 1, 0, 0]
-
-Before: [2, 3, 2, 1]
-0 3 3 3
-After: [2, 3, 2, 0]
-
-Before: [2, 1, 1, 2]
-4 1 3 2
-After: [2, 1, 0, 2]
-
-Before: [0, 1, 3, 1]
-13 1 3 0
-After: [1, 1, 3, 1]
-
-Before: [2, 2, 1, 1]
-5 2 1 0
-After: [2, 2, 1, 1]
-
-Before: [3, 1, 2, 0]
-15 0 0 0
-After: [1, 1, 2, 0]
-
-Before: [1, 1, 1, 1]
-9 1 0 0
-After: [1, 1, 1, 1]
-
-Before: [1, 1, 2, 2]
-12 1 2 2
-After: [1, 1, 0, 2]
-
-Before: [1, 1, 2, 1]
-10 3 2 0
-After: [1, 1, 2, 1]
-
-Before: [2, 0, 1, 1]
-3 0 3 3
-After: [2, 0, 1, 1]
diff --git a/2018/inputs/16_2.txt b/2018/inputs/16_2.txt
deleted file mode 100644
index 6f6f812..0000000
--- a/2018/inputs/16_2.txt
+++ /dev/null
@@ -1,1014 +0,0 @@
-8 0 0 2
-5 2 2 2
-6 3 1 1
-8 0 0 3
-5 3 0 3
-9 2 3 1
-8 1 3 1
-8 1 2 1
-11 0 1 0
-10 0 0 1
-8 0 0 2
-5 2 3 2
-6 3 0 3
-8 2 0 0
-5 0 1 0
-12 3 2 0
-8 0 3 0
-11 1 0 1
-10 1 1 3
-6 1 2 0
-8 1 0 1
-5 1 0 1
-6 0 0 2
-5 0 1 1
-8 1 3 1
-11 3 1 3
-10 3 3 2
-6 3 0 3
-6 2 1 1
-4 3 1 0
-8 0 3 0
-11 0 2 2
-10 2 0 1
-8 1 0 0
-5 0 1 0
-8 3 0 2
-5 2 0 2
-6 2 1 3
-8 0 2 3
-8 3 3 3
-8 3 3 3
-11 3 1 1
-10 1 1 3
-6 3 3 2
-6 0 0 1
-8 0 2 0
-8 0 1 0
-8 0 1 0
-11 3 0 3
-10 3 0 0
-6 2 2 1
-6 1 0 3
-13 1 2 1
-8 1 2 1
-11 1 0 0
-10 0 3 2
-6 2 0 0
-6 3 1 1
-6 2 0 3
-9 0 3 1
-8 1 1 1
-8 1 3 1
-11 1 2 2
-10 2 0 0
-6 3 1 1
-6 2 1 2
-6 0 2 3
-7 3 2 1
-8 1 2 1
-8 1 2 1
-11 1 0 0
-10 0 3 3
-6 3 1 2
-6 1 2 0
-6 0 1 1
-6 2 1 1
-8 1 1 1
-11 3 1 3
-10 3 3 1
-6 2 0 3
-8 0 0 2
-5 2 0 2
-6 2 2 0
-15 0 3 0
-8 0 1 0
-8 0 2 0
-11 0 1 1
-10 1 0 0
-6 3 1 1
-6 0 0 3
-6 2 1 2
-7 3 2 2
-8 2 2 2
-11 2 0 0
-10 0 1 1
-6 1 0 3
-8 0 0 0
-5 0 2 0
-8 0 0 2
-5 2 0 2
-3 0 3 2
-8 2 3 2
-8 2 2 2
-11 1 2 1
-10 1 1 3
-8 2 0 2
-5 2 3 2
-6 3 2 0
-6 1 3 1
-8 1 2 2
-8 2 1 2
-11 2 3 3
-6 1 1 0
-8 1 0 2
-5 2 0 2
-6 2 0 0
-8 0 3 0
-11 3 0 3
-10 3 3 2
-6 2 1 0
-6 2 2 3
-6 0 1 1
-9 0 3 0
-8 0 1 0
-8 0 1 0
-11 0 2 2
-10 2 3 3
-6 3 1 1
-8 3 0 2
-5 2 1 2
-6 1 3 0
-5 0 1 0
-8 0 2 0
-11 0 3 3
-10 3 0 0
-6 1 3 3
-8 0 0 2
-5 2 0 2
-6 0 1 1
-5 3 1 2
-8 2 2 2
-11 0 2 0
-10 0 2 3
-6 2 1 1
-6 2 0 2
-6 3 3 0
-13 1 0 1
-8 1 2 1
-11 1 3 3
-10 3 2 2
-6 1 1 3
-6 0 2 1
-6 0 2 0
-5 3 1 3
-8 3 2 3
-11 2 3 2
-10 2 3 3
-6 1 3 0
-6 0 0 2
-6 3 1 1
-8 0 2 1
-8 1 3 1
-11 3 1 3
-10 3 0 1
-6 2 2 0
-6 2 1 3
-6 3 3 2
-9 0 3 2
-8 2 2 2
-8 2 3 2
-11 2 1 1
-10 1 3 3
-6 0 3 2
-8 2 0 1
-5 1 3 1
-2 0 1 1
-8 1 1 1
-11 1 3 3
-10 3 3 2
-6 3 0 1
-6 1 1 3
-3 0 3 1
-8 1 3 1
-11 2 1 2
-10 2 1 0
-6 2 1 1
-6 1 3 2
-6 2 0 3
-9 1 3 3
-8 3 3 3
-11 3 0 0
-10 0 3 2
-6 2 3 0
-6 1 0 3
-3 0 3 3
-8 3 2 3
-11 2 3 2
-10 2 2 1
-6 1 2 3
-6 2 3 2
-3 0 3 2
-8 2 1 2
-8 2 2 2
-11 2 1 1
-10 1 0 2
-6 3 2 1
-6 3 3 0
-11 3 3 1
-8 1 2 1
-8 1 2 1
-11 2 1 2
-6 2 1 1
-13 1 0 0
-8 0 3 0
-8 0 1 0
-11 0 2 2
-10 2 1 3
-8 1 0 0
-5 0 1 0
-6 0 0 2
-8 0 2 0
-8 0 3 0
-8 0 2 0
-11 3 0 3
-10 3 3 1
-6 3 3 2
-6 2 1 0
-6 2 2 3
-15 0 3 3
-8 3 2 3
-11 3 1 1
-10 1 3 2
-6 3 1 1
-8 2 0 3
-5 3 0 3
-4 1 0 1
-8 1 2 1
-11 2 1 2
-10 2 0 1
-6 3 1 2
-6 1 1 3
-6 1 0 0
-8 3 2 3
-8 3 2 3
-11 1 3 1
-10 1 2 3
-6 2 1 1
-6 2 1 2
-10 0 2 2
-8 2 1 2
-11 3 2 3
-6 0 0 1
-6 2 1 2
-10 0 2 0
-8 0 3 0
-11 3 0 3
-10 3 1 2
-8 2 0 3
-5 3 0 3
-6 1 1 0
-11 0 0 3
-8 3 2 3
-11 3 2 2
-10 2 3 3
-6 2 1 1
-6 3 2 2
-6 2 2 0
-0 0 2 0
-8 0 1 0
-11 0 3 3
-10 3 3 2
-6 2 1 3
-6 2 0 0
-6 3 0 1
-15 0 3 3
-8 3 1 3
-8 3 3 3
-11 3 2 2
-10 2 3 1
-8 1 0 0
-5 0 1 0
-6 3 3 2
-8 0 0 3
-5 3 1 3
-8 0 2 3
-8 3 1 3
-11 3 1 1
-10 1 1 3
-6 0 0 1
-6 2 1 2
-10 0 2 1
-8 1 2 1
-11 1 3 3
-10 3 2 0
-8 0 0 2
-5 2 0 2
-6 3 2 3
-6 3 3 1
-12 3 2 1
-8 1 1 1
-11 1 0 0
-10 0 0 3
-6 3 2 1
-6 2 2 0
-6 3 3 2
-0 0 2 0
-8 0 3 0
-8 0 1 0
-11 0 3 3
-10 3 3 2
-6 1 3 1
-8 1 0 3
-5 3 2 3
-8 0 0 0
-5 0 2 0
-1 1 3 0
-8 0 1 0
-11 2 0 2
-6 3 1 1
-6 2 0 0
-4 1 0 1
-8 1 2 1
-11 2 1 2
-10 2 1 1
-6 3 0 2
-6 1 2 3
-3 0 3 0
-8 0 1 0
-11 0 1 1
-8 3 0 2
-5 2 2 2
-6 2 0 3
-8 2 0 0
-5 0 3 0
-2 2 0 2
-8 2 1 2
-11 1 2 1
-10 1 2 0
-6 3 0 1
-8 0 0 2
-5 2 0 2
-14 2 3 1
-8 1 2 1
-11 1 0 0
-10 0 2 3
-6 3 3 2
-6 1 3 0
-8 3 0 1
-5 1 1 1
-11 1 0 2
-8 2 3 2
-8 2 3 2
-11 3 2 3
-10 3 3 1
-6 2 2 2
-6 0 2 3
-7 3 2 0
-8 0 2 0
-8 0 2 0
-11 1 0 1
-10 1 2 3
-6 3 2 0
-8 2 0 2
-5 2 0 2
-8 1 0 1
-5 1 3 1
-0 2 0 0
-8 0 3 0
-11 0 3 3
-10 3 2 1
-6 1 1 0
-8 3 0 3
-5 3 0 3
-6 1 1 2
-6 3 0 2
-8 2 2 2
-11 2 1 1
-10 1 3 2
-8 3 0 1
-5 1 1 1
-6 3 1 3
-11 0 0 1
-8 1 1 1
-11 1 2 2
-10 2 1 1
-6 1 2 2
-6 3 2 0
-6 2 1 3
-12 0 2 0
-8 0 3 0
-11 1 0 1
-10 1 1 2
-6 2 3 0
-8 2 0 3
-5 3 1 3
-6 3 1 1
-5 3 1 3
-8 3 2 3
-11 2 3 2
-6 0 3 3
-6 3 0 0
-8 2 0 1
-5 1 2 1
-13 1 0 0
-8 0 1 0
-11 0 2 2
-10 2 3 1
-6 2 1 2
-6 1 2 3
-6 3 0 0
-2 2 0 3
-8 3 3 3
-11 1 3 1
-10 1 2 3
-6 1 3 0
-6 3 0 1
-5 0 1 1
-8 1 2 1
-11 1 3 3
-10 3 3 2
-6 1 3 3
-8 0 0 1
-5 1 0 1
-8 1 0 0
-5 0 2 0
-3 0 3 1
-8 1 2 1
-11 2 1 2
-6 1 1 0
-6 0 2 1
-8 3 0 3
-5 3 2 3
-5 0 1 0
-8 0 3 0
-8 0 2 0
-11 0 2 2
-6 1 0 1
-6 2 1 0
-15 0 3 3
-8 3 3 3
-11 3 2 2
-6 0 2 1
-6 2 3 3
-6 3 3 0
-4 0 3 1
-8 1 2 1
-11 2 1 2
-6 0 1 3
-8 0 0 0
-5 0 2 0
-8 3 0 1
-5 1 2 1
-6 3 0 0
-8 0 2 0
-8 0 3 0
-11 0 2 2
-10 2 1 3
-8 2 0 2
-5 2 3 2
-6 1 1 1
-6 2 3 0
-1 1 0 2
-8 2 3 2
-11 3 2 3
-10 3 0 0
-6 0 3 3
-8 3 0 1
-5 1 0 1
-6 2 0 2
-7 3 2 2
-8 2 2 2
-11 0 2 0
-10 0 0 3
-6 2 3 1
-8 3 0 2
-5 2 0 2
-6 3 3 0
-13 1 0 2
-8 2 3 2
-8 2 3 2
-11 3 2 3
-8 3 0 2
-5 2 2 2
-2 2 0 1
-8 1 3 1
-11 3 1 3
-10 3 2 2
-6 1 3 3
-6 3 3 1
-6 2 0 0
-3 0 3 3
-8 3 3 3
-11 3 2 2
-10 2 2 0
-6 1 1 1
-6 2 1 3
-8 2 0 2
-5 2 0 2
-14 2 3 2
-8 2 2 2
-8 2 3 2
-11 2 0 0
-10 0 1 3
-6 3 0 1
-6 3 2 2
-6 2 0 0
-6 2 1 0
-8 0 2 0
-11 3 0 3
-10 3 0 1
-6 0 1 3
-6 2 3 2
-8 3 0 0
-5 0 0 0
-7 3 2 3
-8 3 3 3
-8 3 2 3
-11 1 3 1
-10 1 1 2
-6 2 0 0
-8 0 0 3
-5 3 1 3
-6 1 1 1
-1 3 0 1
-8 1 2 1
-11 1 2 2
-10 2 2 3
-6 0 2 1
-6 3 1 0
-6 2 2 2
-2 2 0 1
-8 1 3 1
-8 1 1 1
-11 1 3 3
-10 3 1 2
-6 1 0 1
-6 2 2 3
-1 1 3 0
-8 0 2 0
-8 0 3 0
-11 2 0 2
-10 2 3 1
-6 2 0 0
-6 2 0 2
-15 0 3 3
-8 3 1 3
-11 3 1 1
-10 1 0 3
-6 3 0 2
-6 1 3 1
-0 0 2 2
-8 2 3 2
-11 3 2 3
-10 3 3 0
-6 1 2 3
-6 3 1 1
-6 0 0 2
-12 1 2 3
-8 3 3 3
-8 3 3 3
-11 3 0 0
-10 0 3 1
-8 1 0 0
-5 0 2 0
-8 1 0 2
-5 2 2 2
-6 0 2 3
-7 3 2 2
-8 2 2 2
-11 2 1 1
-10 1 2 3
-6 2 3 1
-6 3 1 2
-13 1 2 0
-8 0 3 0
-11 0 3 3
-10 3 1 1
-6 1 2 3
-6 3 1 0
-8 3 2 0
-8 0 1 0
-11 1 0 1
-6 1 3 0
-6 2 2 2
-6 3 0 3
-10 0 2 0
-8 0 1 0
-11 0 1 1
-6 3 0 0
-2 2 0 3
-8 3 1 3
-11 3 1 1
-10 1 2 3
-6 1 2 2
-8 1 0 1
-5 1 1 1
-6 2 2 0
-1 1 0 0
-8 0 3 0
-11 3 0 3
-10 3 1 0
-6 2 0 3
-6 2 0 2
-1 1 3 3
-8 3 1 3
-11 3 0 0
-10 0 0 3
-6 3 2 1
-8 3 0 0
-5 0 2 0
-6 3 2 2
-0 0 2 2
-8 2 1 2
-11 3 2 3
-10 3 3 0
-8 0 0 3
-5 3 0 3
-6 1 3 1
-6 2 2 2
-7 3 2 3
-8 3 1 3
-8 3 3 3
-11 0 3 0
-10 0 0 3
-6 3 2 2
-6 2 1 0
-0 0 2 1
-8 1 3 1
-8 1 2 1
-11 1 3 3
-8 1 0 2
-5 2 2 2
-6 3 1 0
-6 3 3 1
-2 2 1 1
-8 1 1 1
-11 3 1 3
-10 3 1 1
-6 3 2 3
-6 2 0 0
-6 3 0 2
-13 0 2 3
-8 3 3 3
-8 3 1 3
-11 3 1 1
-10 1 2 3
-8 2 0 0
-5 0 1 0
-8 3 0 2
-5 2 2 2
-8 0 0 1
-5 1 0 1
-11 0 0 1
-8 1 2 1
-11 3 1 3
-10 3 3 0
-6 0 1 3
-6 3 3 1
-6 3 1 2
-14 3 2 3
-8 3 3 3
-11 0 3 0
-10 0 2 3
-6 1 0 1
-6 1 0 0
-6 2 3 2
-10 0 2 1
-8 1 1 1
-8 1 2 1
-11 1 3 3
-6 1 1 2
-6 0 3 1
-5 0 1 2
-8 2 3 2
-11 3 2 3
-10 3 2 1
-8 3 0 3
-5 3 2 3
-8 1 0 0
-5 0 2 0
-6 3 3 2
-0 0 2 3
-8 3 2 3
-8 3 1 3
-11 3 1 1
-10 1 2 0
-6 1 3 3
-8 3 0 2
-5 2 1 2
-6 0 1 1
-5 3 1 3
-8 3 1 3
-11 0 3 0
-10 0 3 1
-6 1 3 0
-6 0 3 3
-8 1 0 2
-5 2 2 2
-7 3 2 3
-8 3 2 3
-11 3 1 1
-6 0 0 2
-6 2 3 3
-6 0 3 0
-14 2 3 0
-8 0 1 0
-8 0 1 0
-11 0 1 1
-10 1 0 3
-6 3 0 2
-6 2 2 0
-6 2 0 1
-13 0 2 1
-8 1 3 1
-8 1 1 1
-11 3 1 3
-10 3 2 1
-6 3 1 3
-6 1 2 0
-8 0 2 2
-8 2 3 2
-11 1 2 1
-6 1 0 3
-6 3 3 2
-11 0 0 2
-8 2 2 2
-11 1 2 1
-10 1 2 3
-6 0 3 0
-8 1 0 2
-5 2 2 2
-6 3 2 1
-2 2 1 2
-8 2 1 2
-11 3 2 3
-6 0 0 2
-6 1 3 1
-8 1 2 0
-8 0 3 0
-8 0 2 0
-11 0 3 3
-10 3 2 2
-6 2 2 0
-6 1 2 3
-3 0 3 0
-8 0 2 0
-11 2 0 2
-10 2 3 3
-6 0 0 1
-6 2 0 0
-6 3 3 2
-0 0 2 2
-8 2 1 2
-8 2 1 2
-11 2 3 3
-10 3 1 0
-6 2 3 1
-6 2 3 3
-8 3 0 2
-5 2 0 2
-14 2 3 2
-8 2 3 2
-11 2 0 0
-10 0 0 1
-8 2 0 2
-5 2 0 2
-6 1 0 0
-1 0 3 3
-8 3 2 3
-8 3 2 3
-11 1 3 1
-6 2 2 0
-6 2 0 3
-6 1 3 2
-15 0 3 0
-8 0 2 0
-11 1 0 1
-10 1 2 0
-6 3 0 1
-6 0 3 2
-6 1 1 3
-12 1 2 1
-8 1 1 1
-11 1 0 0
-10 0 1 2
-6 3 1 1
-6 3 1 0
-5 3 1 3
-8 3 3 3
-11 2 3 2
-10 2 1 0
-6 0 2 3
-6 2 3 2
-8 1 0 1
-5 1 0 1
-7 3 2 3
-8 3 1 3
-8 3 1 3
-11 3 0 0
-6 2 1 1
-6 3 0 2
-6 0 1 3
-14 3 2 2
-8 2 2 2
-11 2 0 0
-8 2 0 2
-5 2 0 2
-6 1 1 3
-6 2 3 1
-8 1 3 1
-11 0 1 0
-10 0 0 1
-6 2 1 0
-6 3 1 2
-1 3 0 0
-8 0 2 0
-11 0 1 1
-10 1 3 0
-6 0 3 3
-6 1 1 1
-14 3 2 1
-8 1 2 1
-11 0 1 0
-10 0 3 2
-6 2 3 1
-6 2 0 0
-6 1 1 3
-1 3 0 0
-8 0 1 0
-11 0 2 2
-10 2 0 1
-6 0 2 2
-6 2 0 3
-6 2 1 0
-15 0 3 3
-8 3 2 3
-8 3 3 3
-11 1 3 1
-6 3 0 0
-8 0 0 3
-5 3 1 3
-11 3 3 3
-8 3 1 3
-8 3 1 3
-11 3 1 1
-10 1 3 3
-6 2 0 0
-6 3 0 2
-8 0 0 1
-5 1 2 1
-0 0 2 1
-8 1 1 1
-8 1 1 1
-11 1 3 3
-10 3 1 2
-6 2 0 1
-6 2 3 3
-15 0 3 1
-8 1 1 1
-8 1 1 1
-11 1 2 2
-10 2 1 0
-6 0 2 3
-6 3 3 1
-6 2 1 2
-7 3 2 3
-8 3 3 3
-11 3 0 0
-10 0 0 2
-6 2 3 0
-6 0 0 3
-2 0 1 3
-8 3 3 3
-11 2 3 2
-10 2 2 3
-6 1 0 2
-6 1 0 1
-1 1 0 1
-8 1 1 1
-11 3 1 3
-8 1 0 1
-5 1 3 1
-2 0 1 1
-8 1 3 1
-11 3 1 3
-10 3 0 2
-6 2 2 3
-8 2 0 1
-5 1 3 1
-15 0 3 1
-8 1 1 1
-8 1 1 1
-11 2 1 2
-10 2 3 0
-6 3 0 1
-6 1 0 3
-6 2 1 2
-2 2 1 2
-8 2 2 2
-8 2 3 2
-11 0 2 0
-10 0 0 1
-6 1 0 0
-6 2 2 2
-10 0 2 2
-8 2 1 2
-11 1 2 1
-10 1 2 0
-6 3 1 1
-6 2 0 3
-6 2 0 2
-9 2 3 2
-8 2 1 2
-11 0 2 0
-10 0 2 2
-6 1 1 3
-6 0 2 1
-8 0 0 0
-5 0 1 0
-5 3 1 3
-8 3 2 3
-11 3 2 2
-10 2 0 1
-6 1 2 2
-6 2 1 3
-1 0 3 2
-8 2 2 2
-11 2 1 1
-6 3 3 2
-6 2 3 0
-15 0 3 2
-8 2 2 2
-11 2 1 1
-10 1 2 0
-6 2 1 1
-6 3 3 2
-9 1 3 3
-8 3 3 3
-11 0 3 0
-10 0 2 1
-6 0 0 2
-6 2 0 0
-6 1 1 3
-1 3 0 2
-8 2 1 2
-8 2 1 2
-11 2 1 1
-10 1 0 0
-6 2 2 1
-6 0 0 3
-6 3 2 2
-13 1 2 2
-8 2 3 2
-11 0 2 0
-10 0 0 2
-6 2 2 3
-8 2 0 0
-5 0 0 0
-6 3 1 1
-6 3 0 0
-8 0 3 0
-11 0 2 2
-10 2 0 1
-6 0 1 2
-6 3 2 0
-6 0 1 3
-12 0 2 3
-8 3 1 3
-8 3 2 3
-11 3 1 1
-10 1 3 2
-6 2 2 1
-6 2 3 0
-6 3 2 3
-4 3 1 1
-8 1 2 1
-11 2 1 2
-10 2 0 0
-8 3 0 3
-5 3 1 3
-6 1 1 1
-6 3 3 2
-8 3 2 3
-8 3 2 3
-11 0 3 0
-6 2 3 2
-6 2 0 1
-6 2 0 3
-9 1 3 3
-8 3 1 3
-11 0 3 0
-10 0 1 2
-6 1 3 3
-6 2 2 0
-11 3 3 3
-8 3 2 3
-11 2 3 2
-6 2 0 3
-6 3 1 1
-15 0 3 0
-8 0 2 0
-8 0 2 0
-11 2 0 2
-10 2 2 3
-8 2 0 0
-5 0 1 0
-8 3 0 1
-5 1 1 1
-6 0 0 2
-8 1 2 2
-8 2 2 2
-8 2 1 2
-11 3 2 3
-10 3 2 0
diff --git a/2018/inputs/17.txt b/2018/inputs/17.txt
deleted file mode 100644
index 1e2ccdd..0000000
--- a/2018/inputs/17.txt
+++ /dev/null
@@ -1,1713 +0,0 @@
-y=1181, x=576..579
-y=434, x=498..503
-x=647, y=653..675
-y=1204, x=593..595
-y=268, x=475..498
-x=599, y=619..638
-y=1130, x=452..478
-x=439, y=1365..1377
-y=652, x=589..595
-y=1552, x=560..577
-x=439, y=852..867
-x=605, y=292..298
-x=489, y=709..718
-x=567, y=1087..1097
-y=1774, x=631..634
-x=649, y=592..612
-x=610, y=533..555
-x=564, y=996..1008
-x=651, y=416..441
-y=1106, x=502..519
-y=1015, x=479..487
-x=572, y=25..35
-x=630, y=849..865
-x=573, y=884..897
-x=614, y=667..688
-x=464, y=1542..1567
-x=645, y=258..270
-y=1029, x=656..662
-y=1502, x=483..511
-x=589, y=1553..1555
-x=535, y=1792..1795
-x=469, y=166..193
-x=484, y=1117..1142
-x=655, y=1277..1295
-x=598, y=162..170
-y=620, x=430..455
-x=665, y=1205..1212
-x=501, y=1347..1364
-x=661, y=664..684
-x=583, y=131..142
-x=542, y=722..727
-x=475, y=748..761
-x=602, y=1386..1393
-x=578, y=1651..1662
-y=1711, x=598..603
-y=164, x=642..660
-x=488, y=1176..1183
-x=644, y=207..221
-x=654, y=1678..1691
-y=1673, x=448..454
-x=630, y=1299..1312
-y=695, x=472..474
-x=465, y=1022..1045
-x=645, y=1216..1243
-x=623, y=423..437
-x=625, y=200..219
-x=565, y=1153..1166
-x=490, y=1510..1519
-x=553, y=941..947
-x=634, y=1101..1126
-x=515, y=111..113
-y=1146, x=427..438
-y=1096, x=451..460
-x=464, y=1339..1346
-x=612, y=1383..1396
-y=500, x=516..532
-x=555, y=941..947
-x=528, y=1243..1270
-x=646, y=1136..1146
-y=887, x=470..484
-x=617, y=316..343
-x=575, y=1060..1069
-y=1047, x=443..455
-y=1120, x=527..580
-x=514, y=126..135
-y=292, x=484..500
-x=556, y=75..91
-y=646, x=494..518
-x=644, y=552..568
-x=509, y=8..17
-y=735, x=591..614
-x=586, y=1215..1228
-y=1335, x=443..465
-y=495, x=522..526
-x=610, y=864..867
-y=221, x=639..644
-y=1346, x=464..469
-x=489, y=967..983
-x=602, y=1277..1289
-x=620, y=1348..1375
-x=575, y=1736..1744
-x=629, y=462..466
-y=270, x=645..652
-x=518, y=1244..1270
-x=576, y=1151..1162
-x=483, y=970..973
-y=1349, x=606..610
-y=1335, x=634..655
-y=1671, x=650..657
-x=619, y=243..265
-x=585, y=558..563
-x=536, y=1876..1887
-x=652, y=551..559
-x=593, y=1256..1268
-x=440, y=1480..1496
-y=1401, x=520..541
-x=624, y=1297..1306
-x=501, y=1510..1528
-x=587, y=567..575
-y=1470, x=560..580
-y=776, x=519..523
-x=601, y=981..983
-x=516, y=655..666
-y=1803, x=573..578
-x=504, y=1654..1677
-y=1931, x=537..667
-x=540, y=145..163
-x=616, y=204..210
-x=473, y=1856..1859
-x=547, y=241..259
-x=664, y=932..939
-x=475, y=306..316
-y=1572, x=622..628
-x=641, y=985..1001
-x=527, y=1572..1575
-x=447, y=1116..1124
-x=595, y=650..652
-y=1326, x=616..619
-x=626, y=822..835
-x=583, y=1063..1075
-x=576, y=1212..1222
-y=1206, x=486..495
-x=602, y=1885..1910
-x=460, y=1781..1805
-y=996, x=521..527
-x=591, y=1083..1103
-x=569, y=1563..1574
-y=785, x=560..579
-y=857, x=522..524
-x=599, y=804..805
-x=651, y=1724..1736
-y=637, x=449..467
-x=455, y=815..842
-x=476, y=1327..1345
-y=1533, x=615..624
-y=1268, x=633..655
-x=653, y=295..299
-x=522, y=388..415
-y=1365, x=462..487
-y=1430, x=428..438
-x=487, y=488..499
-y=1150, x=599..608
-x=559, y=1922..1927
-x=664, y=170..193
-y=1531, x=441..444
-y=1315, x=600..604
-x=603, y=1541..1543
-x=664, y=1401..1420
-x=580, y=322..345
-x=449, y=627..637
-y=1749, x=497..511
-x=577, y=1060..1069
-y=289, x=492..494
-x=443, y=1330..1335
-x=487, y=405..416
-x=603, y=18..33
-y=1312, x=612..630
-x=605, y=625..633
-x=546, y=1230..1232
-x=553, y=1126..1142
-x=441, y=936..943
-y=1715, x=544..641
-y=1693, x=594..596
-x=649, y=1151..1170
-x=490, y=405..416
-x=602, y=1602..1623
-y=142, x=580..583
-x=574, y=646..660
-y=789, x=479..485
-y=1093, x=640..655
-y=1200, x=501..508
-y=225, x=557..572
-x=591, y=727..735
-x=515, y=1653..1665
-x=467, y=489..499
-y=193, x=459..469
-x=593, y=1143..1162
-x=461, y=489..493
-x=547, y=198..217
-x=522, y=61..73
-x=626, y=1767..1779
-y=446, x=437..448
-y=840, x=443..451
-x=496, y=597..601
-x=650, y=1004..1013
-x=429, y=936..943
-x=557, y=812..822
-x=542, y=1633..1635
-x=469, y=1607..1615
-y=1654, x=624..626
-x=504, y=787..798
-x=569, y=1868..1875
-y=902, x=641..644
-y=1170, x=649..651
-x=606, y=532..555
-x=493, y=1509..1528
-x=452, y=1410..1425
-x=535, y=468..480
-x=599, y=1150..1158
-y=1486, x=429..437
-y=415, x=518..522
-x=511, y=1490..1502
-x=634, y=1765..1774
-x=539, y=869..879
-x=470, y=1413..1418
-x=516, y=1641..1648
-y=598, x=432..434
-x=494, y=807..818
-x=477, y=1875..1898
-x=577, y=77..98
-x=477, y=324..337
-x=451, y=1510..1535
-x=590, y=838..849
-x=565, y=1872..1898
-x=516, y=825..831
-x=541, y=869..879
-y=695, x=427..444
-x=437, y=1166..1194
-x=593, y=1279..1292
-x=518, y=469..480
-x=532, y=1851..1861
-y=1861, x=532..536
-y=1485, x=636..652
-y=1887, x=493..496
-x=436, y=749..766
-y=1268, x=593..610
-y=1145, x=512..520
-y=334, x=482..485
-y=1351, x=553..565
-x=491, y=1547..1556
-y=1908, x=530..549
-y=521, x=607..634
-x=602, y=1687..1698
-x=631, y=1725..1736
-y=1792, x=432..456
-x=530, y=1572..1575
-x=584, y=1154..1166
-x=620, y=1286..1292
-x=537, y=1918..1931
-x=608, y=1474..1489
-x=461, y=989..1006
-x=477, y=1672..1678
-y=1287, x=492..495
-y=1318, x=532..554
-x=463, y=12..30
-x=628, y=595..608
-x=560, y=778..785
-y=1624, x=472..480
-y=673, x=486..489
-x=475, y=1241..1254
-y=1479, x=472..485
-x=458, y=468..477
-y=1298, x=494..497
-x=641, y=1437..1447
-y=973, x=464..483
-y=1695, x=594..596
-x=460, y=1084..1096
-x=613, y=293..298
-x=503, y=1548..1556
-x=574, y=915..931
-y=25, x=482..501
-x=637, y=529..549
-x=441, y=1440..1453
-y=91, x=556..567
-x=432, y=1695..1711
-y=1375, x=620..644
-y=1912, x=553..556
-y=413, x=595..598
-x=584, y=1257..1281
-y=131, x=551..556
-x=493, y=573..576
-x=551, y=860..864
-x=469, y=79..91
-x=462, y=1144..1150
-x=513, y=812..814
-y=1789, x=582..607
-y=1246, x=590..592
-x=544, y=1703..1715
-y=677, x=480..496
-x=432, y=588..598
-x=566, y=556..559
-y=1926, x=511..515
-y=592, x=455..478
-x=610, y=1647..1659
-x=651, y=213..238
-y=1622, x=543..565
-x=451, y=90..104
-x=576, y=1174..1181
-y=1243, x=645..651
-x=553, y=1343..1351
-x=572, y=201..225
-x=648, y=947..970
-x=581, y=444..462
-x=459, y=36..59
-x=642, y=147..164
-x=561, y=1634..1635
-x=593, y=697..707
-x=557, y=200..225
-y=1077, x=457..461
-y=1429, x=600..626
-x=631, y=781..785
-x=565, y=1343..1351
-x=651, y=891..905
-x=445, y=1827..1843
-y=1711, x=432..460
-x=491, y=1819..1821
-x=558, y=725..730
-x=434, y=991..1012
-x=634, y=434..442
-x=452, y=527..540
-x=618, y=1479..1484
-x=644, y=621..626
-x=533, y=1526..1544
-y=831, x=490..516
-y=466, x=629..649
-y=1228, x=568..586
-x=567, y=1062..1075
-x=640, y=1747..1758
-x=579, y=777..785
-x=549, y=812..822
-y=1732, x=638..640
-y=490, x=576..594
-x=516, y=1495..1518
-x=620, y=1297..1306
-y=254, x=460..468
-x=475, y=254..268
-x=482, y=12..25
-y=1183, x=468..488
-x=587, y=666..675
-y=68, x=479..500
-x=524, y=1789..1801
-x=613, y=1046..1058
-x=580, y=567..575
-y=879, x=539..541
-x=448, y=533..537
-x=658, y=1363..1375
-y=410, x=427..438
-y=176, x=501..504
-x=491, y=783..794
-x=570, y=351..373
-y=259, x=521..547
-y=480, x=518..535
-y=633, x=605..607
-x=523, y=767..776
-y=898, x=552..556
-x=606, y=1340..1349
-x=494, y=631..646
-x=496, y=1688..1695
-y=821, x=634..642
-y=1393, x=602..605
-x=443, y=1175..1177
-x=531, y=851..861
-y=582, x=442..546
-y=864, x=551..570
-x=562, y=996..1008
-y=575, x=580..587
-x=529, y=1763..1775
-y=40, x=502..506
-y=73, x=522..529
-y=798, x=504..526
-y=628, x=513..529
-x=520, y=1657..1662
-y=1648, x=516..536
-y=1142, x=484..495
-x=492, y=302..315
-x=586, y=1176..1187
-y=512, x=516..518
-y=218, x=502..504
-y=515, x=516..518
-x=516, y=512..515
-x=444, y=690..695
-y=626, x=624..644
-x=637, y=1276..1295
-y=1370, x=592..595
-y=1860, x=609..620
-x=620, y=900..915
-x=614, y=727..735
-x=437, y=1464..1486
-y=1254, x=457..475
-y=910, x=583..585
-y=294, x=429..436
-y=398, x=481..501
-x=642, y=1768..1779
-y=1845, x=500..524
-y=1898, x=561..565
-y=712, x=571..573
-y=735, x=489..491
-y=887, x=586..589
-y=1518, x=516..521
-x=466, y=551..560
-x=472, y=1613..1624
-x=561, y=701..715
-y=33, x=599..603
-x=538, y=896..908
-x=568, y=1456..1464
-y=559, x=566..568
-x=515, y=328..356
-x=662, y=1020..1029
-x=624, y=355..377
-x=480, y=1612..1624
-y=1139, x=570..574
-y=1795, x=530..535
-x=516, y=490..500
-x=462, y=1830..1837
-x=437, y=202..223
-x=661, y=1504..1509
-x=451, y=470..481
-x=515, y=1836..1840
-x=633, y=189..191
-x=467, y=708..718
-x=528, y=900..902
-x=497, y=232..241
-x=588, y=1686..1698
-y=1306, x=620..624
-x=480, y=667..677
-x=493, y=9..21
-y=1416, x=490..515
-x=624, y=1507..1533
-x=436, y=290..294
-y=708, x=571..573
-x=462, y=601..615
-y=595, x=628..638
-y=1205, x=621..626
-x=582, y=1130..1142
-x=487, y=1000..1015
-x=651, y=1695..1703
-x=544, y=891..902
-x=459, y=165..193
-x=549, y=1897..1908
-y=1484, x=616..618
-x=556, y=1887..1912
-y=1868, x=462..480
-x=621, y=1177..1205
-x=561, y=1873..1898
-x=624, y=1475..1489
-y=1377, x=439..451
-y=943, x=429..441
-y=1553, x=610..615
-x=509, y=1048..1074
-x=483, y=915..928
-x=480, y=606..608
-x=580, y=1027..1043
-x=630, y=978..996
-x=516, y=1875..1887
-x=501, y=1190..1200
-y=377, x=624..632
-y=481, x=451..470
-y=555, x=606..610
-x=445, y=1542..1567
-x=514, y=1231..1233
-x=572, y=62..72
-y=1097, x=548..567
-x=593, y=1784..1786
-x=556, y=29..31
-x=514, y=34..44
-x=651, y=29..31
-x=601, y=1342..1352
-x=439, y=177..182
-x=522, y=853..857
-x=638, y=110..114
-y=1166, x=565..584
-x=549, y=447..457
-x=508, y=1896..1898
-x=525, y=1763..1775
-x=572, y=350..373
-x=583, y=273..301
-x=496, y=148..158
-x=427, y=690..695
-x=506, y=449..461
-x=622, y=592..612
-x=492, y=497..521
-x=554, y=962..972
-x=543, y=827..840
-y=91, x=469..487
-x=446, y=614..616
-x=477, y=453..456
-x=501, y=366..376
-y=487, x=564..568
-x=495, y=1188..1206
-x=530, y=1896..1908
-x=436, y=123..147
-x=471, y=1856..1859
-x=486, y=664..673
-y=770, x=573..583
-x=565, y=1403..1411
-x=599, y=18..33
-y=1599, x=556..577
-y=1411, x=565..567
-x=541, y=986..1012
-x=601, y=1083..1103
-y=1825, x=486..502
-y=1695, x=480..496
-x=440, y=122..147
-x=476, y=364..376
-y=409, x=449..463
-x=446, y=1143..1150
-x=536, y=1614..1619
-y=290, x=510..514
-y=600, x=454..459
-y=1837, x=562..579
-x=462, y=1851..1868
-x=544, y=278..297
-y=902, x=544..563
-x=580, y=1438..1447
-x=546, y=570..582
-x=644, y=1874..1875
-x=447, y=306..316
-x=556, y=277..297
-x=626, y=424..437
-y=806, x=549..557
-x=596, y=1693..1695
-y=936, x=444..451
-y=1156, x=486..510
-y=1567, x=445..464
-y=779, x=514..530
-x=536, y=1851..1861
-y=992, x=504..509
-x=535, y=329..356
-y=814, x=513..519
-y=210, x=604..616
-x=491, y=731..735
-x=558, y=1084..1093
-y=352, x=642..648
-x=425, y=591..601
-x=634, y=1586..1603
-x=554, y=599..608
-x=605, y=397..419
-x=514, y=267..290
-y=263, x=554..568
-x=473, y=911..937
-y=897, x=573..579
-x=595, y=1401..1409
-x=613, y=367..370
-y=1535, x=433..451
-x=573, y=767..770
-x=665, y=41..45
-y=1093, x=558..561
-x=454, y=1666..1673
-x=495, y=1662..1672
-x=566, y=220..222
-x=492, y=1268..1287
-x=534, y=808..818
-x=480, y=1852..1868
-y=282, x=590..616
-x=502, y=218..221
-y=1187, x=566..586
-x=598, y=317..343
-x=562, y=1833..1837
-x=499, y=470..481
-y=113, x=456..478
-y=1703, x=649..651
-x=454, y=598..600
-x=474, y=1058..1074
-x=498, y=434..436
-y=1680, x=481..483
-x=662, y=851..868
-y=987, x=563..565
-y=299, x=653..660
-y=1590, x=617..625
-y=608, x=476..480
-x=538, y=527..540
-y=246, x=488..504
-x=455, y=611..620
-x=490, y=345..356
-x=566, y=602..604
-y=1603, x=634..650
-x=608, y=1150..1158
-x=454, y=363..376
-y=1679, x=596..623
-x=483, y=1569..1571
-x=554, y=1309..1318
-x=660, y=146..164
-x=442, y=752..755
-x=514, y=850..861
-y=1142, x=531..553
-y=1509, x=653..661
-x=509, y=1836..1840
-x=604, y=1301..1315
-x=488, y=426..440
-x=475, y=1733..1758
-x=543, y=41..67
-x=527, y=1107..1120
-y=660, x=574..577
-x=502, y=1081..1106
-x=469, y=1428..1434
-y=564, x=488..492
-x=430, y=1435..1455
-x=547, y=919..929
-x=641, y=1560..1563
-x=480, y=646..657
-y=715, x=478..480
-x=622, y=193..215
-x=445, y=271..274
-x=612, y=1280..1292
-y=938, x=608..621
-x=526, y=1897..1898
-x=610, y=441..443
-x=610, y=666..688
-y=1887, x=516..536
-x=625, y=1287..1292
-x=512, y=1204..1207
-x=505, y=1292..1303
-y=1045, x=465..485
-x=485, y=327..334
-x=574, y=570..587
-x=463, y=394..409
-x=485, y=1460..1479
-y=457, x=549..552
-y=456, x=477..479
-x=453, y=758..770
-x=660, y=360..381
-y=1895, x=616..620
-x=530, y=93..101
-x=589, y=861..887
-x=657, y=41..45
-y=31, x=556..564
-y=1823, x=512..656
-x=542, y=381..398
-y=1897, x=616..620
-x=610, y=1922..1927
-y=675, x=635..647
-x=535, y=938..950
-x=525, y=180..188
-x=635, y=654..675
-y=356, x=515..535
-x=520, y=1525..1544
-x=469, y=1799..1801
-x=478, y=1780..1805
-x=604, y=204..210
-x=456, y=490..493
-x=504, y=1875..1898
-x=527, y=1013..1027
-x=521, y=974..996
-x=583, y=737..760
-x=598, y=410..413
-x=476, y=493..496
-x=478, y=588..592
-x=438, y=1134..1146
-x=639, y=172..182
-x=471, y=1826..1843
-x=489, y=731..735
-x=427, y=888..914
-x=490, y=215..224
-y=1287, x=644..649
-x=655, y=729..747
-x=493, y=1788..1792
-x=596, y=763..765
-y=1236, x=446..456
-x=442, y=590..601
-x=600, y=1277..1289
-y=1224, x=590..608
-x=452, y=1102..1130
-x=504, y=165..176
-x=494, y=1296..1298
-x=615, y=511..516
-x=512, y=1465..1469
-x=649, y=1280..1287
-x=656, y=1811..1823
-x=567, y=76..91
-y=111, x=502..510
-y=867, x=439..444
-x=638, y=595..608
-y=87, x=531..549
-x=484, y=278..292
-y=1364, x=501..511
-x=454, y=1848..1872
-x=607, y=821..835
-x=504, y=218..221
-y=1402, x=626..640
-x=468, y=244..254
-x=554, y=1735..1744
-y=540, x=452..538
-x=472, y=493..496
-x=434, y=1757..1760
-x=502, y=97..111
-x=630, y=1250..1254
-y=1479, x=616..618
-x=549, y=788..806
-x=522, y=198..217
-x=577, y=1539..1552
-x=639, y=206..221
-x=591, y=697..707
-x=514, y=1554..1581
-x=647, y=1325..1330
-x=597, y=192..215
-x=461, y=1058..1077
-y=1528, x=493..501
-x=503, y=191..203
-y=1348, x=431..435
-y=1898, x=477..504
-x=487, y=79..91
-y=1074, x=509..519
-x=601, y=1361..1373
-x=579, y=499..504
-x=640, y=243..265
-y=1922, x=435..438
-y=1267, x=429..448
-x=650, y=156..158
-x=449, y=1439..1453
-x=545, y=417..419
-y=521, x=492..504
-x=517, y=895..908
-y=315, x=492..510
-x=644, y=1280..1287
-y=666, x=512..516
-y=395, x=490..494
-x=433, y=1434..1455
-x=510, y=1595..1617
-x=588, y=763..765
-x=631, y=1550..1552
-x=612, y=1102..1126
-y=1635, x=542..561
-x=526, y=787..798
-x=580, y=1497..1511
-x=603, y=1709..1711
-x=471, y=947..963
-y=730, x=558..564
-x=496, y=168..180
-x=435, y=1331..1348
-y=983, x=489..501
-y=257, x=597..613
-x=617, y=1343..1352
-x=598, y=498..504
-x=580, y=78..98
-y=104, x=441..451
-x=500, y=279..292
-x=626, y=1419..1429
-x=613, y=254..257
-x=610, y=1552..1553
-y=1418, x=470..472
-x=470, y=1038..1041
-y=1375, x=652..658
-y=230, x=457..467
-x=547, y=1370..1395
-x=597, y=1324..1349
-x=504, y=235..246
-x=499, y=728..739
-y=1910, x=602..627
-y=1830, x=456..462
-x=487, y=445..459
-x=525, y=590..610
-y=238, x=651..654
-x=587, y=367..370
-y=1336, x=554..575
-y=462, x=566..581
-x=452, y=1167..1194
-y=798, x=626..643
-x=507, y=507..518
-x=554, y=1523..1525
-x=536, y=1766..1778
-x=539, y=1465..1469
-x=465, y=1329..1335
-x=516, y=1697..1722
-y=970, x=644..648
-y=739, x=483..499
-x=625, y=1584..1590
-x=631, y=1765..1774
-x=598, y=1709..1711
-y=1330, x=645..647
-y=914, x=427..455
-y=1177, x=443..445
-x=618, y=1142..1162
-x=434, y=588..598
-y=560, x=450..466
-x=621, y=921..938
-y=481, x=478..499
-x=620, y=1857..1860
-x=577, y=843..845
-x=486, y=1647..1649
-x=589, y=534..537
-x=576, y=216..223
-y=606, x=476..480
-x=500, y=1831..1845
-x=450, y=644..650
-x=490, y=1401..1416
-x=581, y=63..72
-x=547, y=543..563
-x=605, y=1386..1393
-y=1249, x=575..599
-x=518, y=632..646
-y=563, x=581..585
-y=1805, x=460..478
-x=551, y=125..131
-x=483, y=366..376
-y=1013, x=645..650
-y=1560, x=641..649
-x=664, y=1267..1295
-y=462, x=543..560
-y=221, x=502..504
-x=604, y=101..107
-y=1263, x=602..604
-x=624, y=621..626
-y=996, x=630..632
-y=1659, x=567..571
-y=851, x=606..608
-y=928, x=483..486
-y=840, x=523..543
-y=1649, x=463..486
-x=592, y=1358..1370
-y=1615, x=457..469
-y=1295, x=546..550
-x=581, y=855..868
-y=698, x=462..480
-x=594, y=864..867
-x=593, y=216..223
-x=552, y=723..727
-y=707, x=591..593
-y=1142, x=565..582
-x=496, y=127..135
-x=637, y=1197..1223
-x=608, y=839..851
-x=641, y=1703..1715
-y=745, x=506..518
-x=536, y=1205..1207
-y=1233, x=502..514
-x=447, y=1732..1758
-x=627, y=529..549
-y=1008, x=562..564
-y=1784, x=593..598
-x=496, y=407..421
-x=583, y=163..170
-x=595, y=1193..1204
-x=519, y=1049..1074
-x=509, y=971..992
-y=785, x=631..634
-x=495, y=1117..1142
-y=1563, x=641..649
-x=540, y=591..603
-x=572, y=838..849
-y=1898, x=508..526
-y=568, x=642..644
-y=1571, x=576..585
-y=1001, x=453..455
-x=448, y=1702..1704
-x=553, y=141..164
-y=559, x=647..652
-y=297, x=544..556
-x=451, y=925..936
-x=626, y=1400..1402
-x=467, y=1058..1074
-x=502, y=1230..1233
-y=376, x=454..476
-x=487, y=1354..1365
-x=537, y=1554..1581
-x=495, y=1269..1287
-y=1212, x=656..665
-x=519, y=1082..1106
-x=628, y=728..747
-x=552, y=1652..1662
-x=510, y=98..111
-x=640, y=1730..1732
-y=1035, x=539..558
-x=616, y=1479..1484
-x=472, y=1460..1479
-x=626, y=771..798
-x=520, y=1395..1401
-y=163, x=533..540
-y=931, x=574..578
-y=1455, x=430..433
-x=552, y=674..689
-x=579, y=1832..1837
-x=467, y=208..230
-x=650, y=1587..1603
-x=464, y=969..973
-x=565, y=1129..1142
-x=660, y=294..299
-y=180, x=496..513
-x=622, y=1566..1572
-y=1556, x=491..503
-y=516, x=612..615
-y=1006, x=445..461
-x=574, y=404..411
-x=485, y=787..789
-x=548, y=1086..1097
-x=538, y=7..25
-x=504, y=971..992
-x=517, y=9..17
-x=615, y=803..805
-x=570, y=998..1012
-x=519, y=767..776
-x=571, y=708..712
-y=1295, x=637..655
-y=215, x=597..622
-x=569, y=737..760
-y=1779, x=626..642
-x=549, y=81..87
-y=135, x=496..514
-x=644, y=848..865
-x=543, y=417..419
-x=551, y=591..603
-y=939, x=585..591
-x=498, y=947..963
-x=568, y=1214..1228
-x=588, y=1477..1489
-x=586, y=1196..1207
-x=514, y=749..761
-x=455, y=548..557
-y=1162, x=576..578
-x=481, y=1326..1345
-y=1069, x=575..577
-x=573, y=1777..1803
-x=483, y=1490..1502
-x=595, y=410..413
-x=636, y=1463..1485
-y=1001, x=641..655
-x=486, y=1189..1206
-x=488, y=190..203
-x=493, y=1883..1887
-x=560, y=1539..1552
-x=455, y=992..1001
-x=564, y=482..487
-y=1292, x=593..612
-y=587, x=559..574
-x=436, y=37..59
-x=549, y=872..885
-x=456, y=177..182
-y=991, x=552..572
-y=812, x=513..519
-x=469, y=1338..1346
-x=500, y=1570..1571
-x=518, y=721..745
-y=1821, x=491..493
-x=429, y=1239..1267
-x=430, y=749..766
-x=470, y=471..481
-x=532, y=491..500
-x=612, y=1796..1805
-x=478, y=1103..1130
-x=478, y=471..481
-x=647, y=931..939
-y=983, x=601..622
-x=628, y=1565..1572
-x=631, y=1197..1223
-y=1489, x=570..588
-x=460, y=926..934
-x=542, y=112..113
-x=444, y=482..503
-x=557, y=789..806
-x=446, y=12..30
-x=635, y=1557..1567
-x=660, y=1197..1200
-x=565, y=977..987
-y=549, x=627..637
-x=654, y=213..238
-y=504, x=579..598
-x=565, y=1627..1640
-y=885, x=531..549
-x=474, y=683..695
-x=531, y=380..398
-x=445, y=1175..1177
-y=1455, x=548..550
-y=1235, x=536..556
-x=627, y=1249..1254
-x=595, y=1358..1370
-x=459, y=598..600
-x=496, y=910..937
-x=580, y=1108..1120
-y=1840, x=509..515
-x=499, y=324..337
-x=575, y=1893..1914
-x=593, y=1892..1914
-x=599, y=1239..1249
-x=520, y=1137..1145
-y=343, x=598..617
-x=575, y=1238..1249
-y=947, x=553..555
-x=568, y=482..487
-x=556, y=1224..1235
-y=241, x=495..497
-x=454, y=124..138
-x=550, y=1438..1455
-x=645, y=1004..1013
-y=1722, x=514..516
-x=486, y=915..928
-y=768, x=547..561
-x=499, y=1789..1792
-x=531, y=871..885
-y=1805, x=606..612
-x=437, y=1757..1760
-y=1158, x=599..608
-x=480, y=713..715
-x=541, y=1396..1401
-x=441, y=89..104
-y=493, x=456..461
-x=648, y=359..381
-x=552, y=1043..1053
-x=634, y=1318..1335
-y=1345, x=476..481
-x=620, y=1895..1897
-y=223, x=437..442
-x=432, y=271..274
-x=429, y=1463..1486
-x=579, y=884..897
-x=577, y=1585..1599
-y=141, x=610..633
-y=1075, x=567..583
-y=1270, x=518..528
-x=572, y=980..991
-y=35, x=551..572
-x=656, y=1205..1212
-y=1914, x=575..593
-x=441, y=1516..1531
-y=1801, x=524..550
-x=439, y=614..616
-y=604, x=566..572
-y=222, x=563..566
-x=531, y=674..689
-y=1281, x=559..584
-x=590, y=1222..1224
-x=633, y=120..141
-x=451, y=1365..1377
-x=595, y=534..537
-y=219, x=625..635
-y=1413, x=588..608
-x=470, y=445..459
-y=615, x=462..486
-y=1659, x=610..632
-x=585, y=950..974
-x=603, y=1583..1596
-y=747, x=628..655
-y=1519, x=472..490
-x=643, y=771..798
-x=578, y=914..931
-y=1678, x=461..477
-x=498, y=1531..1542
-y=101, x=627..641
-x=667, y=1918..1931
-x=455, y=587..592
-x=632, y=979..996
-y=1331, x=603..625
-x=519, y=792..794
-y=1223, x=631..637
-x=560, y=1458..1470
-y=1511, x=556..580
-x=610, y=998..1020
-x=441, y=532..537
-y=608, x=628..638
-y=158, x=650..653
-x=568, y=253..263
-y=608, x=554..578
-x=488, y=552..564
-y=1778, x=520..536
-x=430, y=610..620
-x=493, y=1532..1542
-x=497, y=1743..1749
-y=223, x=576..593
-x=500, y=878..881
-x=512, y=427..440
-y=822, x=549..557
-x=551, y=181..188
-y=1640, x=565..618
-x=432, y=1788..1792
-y=437, x=623..626
-x=608, y=1403..1413
-y=1786, x=593..598
-y=1289, x=600..602
-x=477, y=1590..1599
-x=467, y=628..637
-x=513, y=627..628
-y=164, x=553..565
-x=658, y=1400..1420
-x=438, y=645..650
-x=554, y=1422..1437
-x=514, y=1696..1722
-x=492, y=553..564
-x=632, y=1136..1146
-x=648, y=1679..1691
-x=472, y=1412..1418
-y=421, x=479..496
-x=444, y=1745..1773
-x=454, y=645..657
-x=479, y=1000..1015
-x=493, y=1819..1821
-x=490, y=382..395
-x=472, y=683..695
-x=543, y=1609..1622
-x=616, y=1895..1897
-y=881, x=500..515
-y=557, x=455..459
-x=657, y=1656..1671
-y=356, x=468..490
-x=584, y=1028..1043
-y=537, x=589..595
-x=580, y=702..715
-y=657, x=454..480
-x=642, y=810..821
-x=572, y=602..604
-x=474, y=1038..1041
-x=655, y=985..1001
-x=563, y=890..902
-y=107, x=604..614
-x=571, y=1654..1659
-x=609, y=947..963
-x=526, y=488..495
-x=612, y=511..516
-x=466, y=925..934
-x=575, y=542..563
-x=456, y=1224..1236
-y=1927, x=559..610
-y=1124, x=428..447
-x=641, y=899..902
-x=490, y=824..831
-x=600, y=1302..1315
-x=616, y=172..182
-y=527, x=565..567
-y=1596, x=581..603
-y=21, x=491..493
-x=566, y=443..462
-y=1792, x=493..499
-x=607, y=493..521
-y=381, x=648..660
-x=545, y=1519..1530
-y=67, x=535..543
-x=506, y=37..40
-x=529, y=626..628
-y=1043, x=580..584
-x=464, y=784..794
-x=500, y=54..68
-y=934, x=460..466
-y=477, x=458..464
-x=550, y=1789..1801
-x=460, y=245..254
-y=274, x=432..445
-y=204, x=604..616
-x=591, y=919..939
-x=438, y=1915..1922
-x=592, y=1563..1574
-y=1623, x=592..602
-x=445, y=989..1006
-y=1150, x=446..462
-x=567, y=501..527
-x=474, y=125..138
-x=501, y=11..25
-y=1396, x=590..612
-x=652, y=1463..1485
-x=478, y=102..113
-x=479, y=408..421
-x=578, y=1151..1162
-x=461, y=122..135
-x=640, y=111..114
-x=461, y=1671..1678
-x=489, y=1654..1677
-y=135, x=461..466
-x=536, y=1225..1235
-x=579, y=843..845
-y=170, x=583..598
-x=524, y=1832..1845
-x=501, y=165..176
-x=457, y=1059..1077
-x=466, y=122..135
-x=652, y=1442..1456
-x=565, y=500..527
-y=1792, x=530..535
-y=1295, x=659..664
-x=427, y=386..410
-y=31, x=648..651
-x=509, y=597..601
-x=585, y=1324..1349
-x=623, y=1668..1679
-x=435, y=1849..1872
-x=445, y=147..158
-y=1544, x=520..533
-x=592, y=1243..1246
-x=556, y=1585..1599
-x=624, y=947..963
-y=781, x=631..634
-x=626, y=1654..1656
-x=527, y=973..996
-x=442, y=1340..1350
-y=1662, x=520..530
-x=602, y=1260..1263
-x=606, y=1796..1805
-x=633, y=890..905
-x=494, y=35..44
-x=456, y=1788..1792
-x=498, y=255..268
-y=1656, x=624..626
-y=1162, x=593..618
-x=510, y=1154..1156
-x=633, y=1258..1268
-x=547, y=765..768
-y=217, x=522..547
-x=444, y=926..936
-x=581, y=1582..1596
-x=593, y=1193..1204
-x=471, y=1799..1801
-x=483, y=1589..1599
-y=849, x=572..590
-y=1837, x=456..462
-x=496, y=666..677
-x=458, y=753..755
-x=468, y=345..356
-x=511, y=214..224
-x=444, y=853..867
-y=1469, x=512..539
-x=523, y=589..610
-y=761, x=475..514
-x=439, y=326..335
-x=597, y=255..257
-x=579, y=1212..1222
-x=426, y=954..975
-x=489, y=1293..1303
-x=615, y=1551..1553
-x=582, y=1541..1543
-x=650, y=1656..1671
-x=575, y=1324..1336
-x=568, y=1519..1530
-y=147, x=436..440
-x=638, y=189..191
-x=627, y=77..101
-x=518, y=512..515
-x=515, y=1400..1416
-y=684, x=657..661
-y=1654, x=567..571
-y=1856, x=471..473
-y=1875, x=631..644
-x=494, y=382..395
-x=524, y=853..857
-x=645, y=1478..1480
-x=552, y=447..457
-y=612, x=622..649
-x=645, y=169..193
-x=462, y=1354..1365
-y=1555, x=589..606
-x=428, y=1746..1773
-x=590, y=1383..1396
-x=647, y=552..559
-y=503, x=444..446
-y=25, x=523..538
-y=1672, x=495..498
-y=794, x=511..519
-x=663, y=1557..1567
-y=1012, x=425..434
-x=495, y=232..241
-x=478, y=713..715
-x=484, y=861..887
-y=1464, x=568..571
-x=655, y=1319..1335
-y=1373, x=584..601
-y=576, x=493..532
-x=574, y=1127..1139
-y=1456, x=652..665
-x=455, y=888..914
-y=1859, x=471..473
-x=649, y=461..466
-x=579, y=1174..1181
-y=1425, x=445..452
-y=1194, x=437..452
-x=556, y=124..131
-y=496, x=472..476
-y=718, x=467..489
-x=652, y=1363..1375
-x=627, y=1884..1910
-y=794, x=464..491
-y=1437, x=554..561
-x=550, y=999..1012
-x=578, y=598..608
-x=446, y=481..503
-x=581, y=558..563
-x=481, y=384..398
-x=559, y=1256..1281
-y=937, x=473..496
-x=585, y=1568..1571
-x=465, y=758..770
-y=867, x=594..610
-y=805, x=599..615
-y=1395, x=547..575
-x=511, y=792..794
-y=675, x=568..587
-y=1207, x=512..536
-y=845, x=577..579
-x=470, y=860..887
-x=481, y=1675..1680
-x=642, y=553..568
-y=974, x=585..599
-x=479, y=55..68
-x=583, y=768..770
-x=518, y=387..415
-x=443, y=1020..1047
-x=480, y=686..698
-x=616, y=620..638
-x=592, y=1602..1623
-x=612, y=1300..1312
-x=550, y=1273..1295
-y=461, x=506..525
-y=316, x=447..475
-x=638, y=1730..1732
-x=634, y=781..785
-x=521, y=1496..1518
-x=563, y=977..987
-y=1496, x=440..465
-x=510, y=266..290
-x=519, y=812..814
-x=497, y=1595..1618
-x=438, y=387..410
-x=448, y=436..446
-x=658, y=224..247
-x=455, y=1021..1047
-y=459, x=470..487
-x=479, y=453..456
-x=443, y=833..840
-x=528, y=1614..1619
-x=448, y=1240..1267
-x=542, y=1230..1232
-x=632, y=354..377
-x=511, y=1743..1749
-y=1027, x=513..527
-y=963, x=471..498
-x=464, y=468..477
-y=939, x=647..664
-x=433, y=1510..1535
-x=511, y=1346..1364
-x=553, y=1886..1912
-x=602, y=441..443
-x=551, y=26..35
-y=376, x=483..501
-y=1698, x=588..602
-x=640, y=1400..1402
-x=536, y=414..424
-x=506, y=722..745
-x=502, y=1809..1825
-y=1691, x=648..654
-x=449, y=395..409
-x=643, y=1478..1480
-x=600, y=1418..1429
-x=502, y=37..40
-y=908, x=517..538
-y=1074, x=467..474
-y=1662, x=552..578
-x=514, y=1596..1617
-y=441, x=651..663
-x=445, y=1411..1425
-y=894, x=552..556
-y=1058, x=613..628
-x=645, y=1325..1330
-y=1568, x=576..585
-y=370, x=587..613
-x=515, y=878..881
-x=442, y=203..223
-x=435, y=1914..1922
-y=1420, x=658..664
-x=530, y=1792..1795
-y=443, x=602..610
-x=598, y=1784..1786
-x=607, y=625..633
-x=537, y=1653..1665
-x=524, y=900..902
-x=561, y=1084..1093
-x=468, y=1175..1183
-y=766, x=430..436
-x=645, y=1891..1908
-x=663, y=416..441
-x=425, y=992..1012
-x=457, y=1608..1615
-y=1349, x=585..597
-y=1760, x=434..437
-y=1200, x=656..660
-x=513, y=1013..1027
-y=688, x=610..614
-x=523, y=828..840
-y=59, x=436..459
-y=715, x=561..580
-x=570, y=1127..1139
-x=585, y=998..1020
-x=501, y=385..398
-x=590, y=1243..1246
-x=536, y=1747..1758
-y=835, x=607..626
-y=424, x=536..552
-x=622, y=980..983
-x=604, y=1260..1263
-x=648, y=343..352
-x=645, y=435..442
-x=536, y=1640..1648
-y=770, x=453..465
-x=552, y=894..898
-x=606, y=839..851
-y=1736, x=631..651
-x=564, y=29..31
-y=1434, x=469..490
-x=521, y=242..259
-y=114, x=638..640
-y=765, x=588..596
-x=577, y=647..660
-x=606, y=1552..1555
-x=653, y=1505..1509
-y=1617, x=510..514
-y=499, x=467..487
-y=915, x=607..620
-y=1908, x=637..645
-x=463, y=1646..1649
-x=483, y=1674..1680
-y=1677, x=489..504
-y=373, x=570..572
-x=624, y=1654..1656
-x=453, y=1897..1912
-x=585, y=919..939
-x=626, y=1177..1205
-x=529, y=61..73
-x=531, y=1125..1142
-x=450, y=550..560
-y=1012, x=550..570
-x=583, y=906..910
-x=592, y=1869..1875
-y=865, x=630..644
-x=490, y=1428..1434
-x=582, y=1773..1789
-x=655, y=1258..1268
-x=608, y=1223..1224
-x=558, y=1023..1035
-x=486, y=601..615
-x=635, y=201..219
-x=659, y=1267..1295
-x=576, y=1568..1571
-y=1704, x=448..453
-x=503, y=434..436
-y=72, x=572..581
-x=657, y=663..684
-x=665, y=1443..1456
-x=453, y=1702..1704
-x=580, y=1459..1470
-x=588, y=1404..1413
-x=524, y=1854..1867
-y=905, x=633..651
-x=567, y=1044..1053
-x=499, y=701..713
-y=601, x=425..442
-y=1883, x=493..496
-x=492, y=276..289
-y=193, x=645..664
-y=442, x=634..645
-x=610, y=121..141
-x=570, y=1478..1489
-x=427, y=1133..1146
-x=652, y=257..270
-y=1126, x=612..634
-x=568, y=667..675
-x=559, y=403..411
-y=224, x=490..511
-y=537, x=441..448
-x=642, y=343..352
-y=518, x=507..529
-x=561, y=765..768
-x=586, y=862..887
-x=614, y=102..107
-x=451, y=1083..1096
-x=533, y=144..163
-x=522, y=488..495
-x=557, y=322..345
-y=1775, x=525..529
-x=585, y=906..910
-x=644, y=899..902
-y=610, x=523..525
-x=476, y=606..608
-y=1041, x=470..474
-y=603, x=540..551
-y=1574, x=569..592
-x=594, y=476..490
-y=1254, x=627..630
-x=610, y=1340..1349
-x=510, y=301..315
-x=535, y=40..67
-x=485, y=1023..1045
-x=644, y=948..970
-x=459, y=548..557
-y=1409, x=595..599
-y=1665, x=515..537
-x=653, y=156..158
-y=247, x=658..662
-x=483, y=728..739
-y=861, x=514..531
-y=1801, x=469..471
-y=17, x=509..517
-y=818, x=494..534
-x=610, y=1257..1268
-y=1489, x=608..624
-x=649, y=1560..1563
-y=950, x=535..561
-y=713, x=499..511
-y=301, x=570..583
-x=463, y=816..842
-x=573, y=961..972
-y=335, x=439..453
-x=496, y=1883..1887
-x=556, y=1523..1525
-x=515, y=1904..1926
-x=656, y=1197..1200
-x=456, y=103..113
-x=617, y=1583..1590
-y=1543, x=582..603
-x=570, y=274..301
-x=460, y=1696..1711
-y=1758, x=536..640
-x=437, y=435..446
-x=465, y=1479..1496
-y=1020, x=585..610
-x=641, y=77..101
-y=929, x=527..547
-x=618, y=1627..1640
-y=601, x=496..509
-x=651, y=1217..1243
-x=494, y=276..289
-x=656, y=1021..1029
-x=616, y=266..282
-x=619, y=1324..1326
-y=616, x=439..446
-x=514, y=770..779
-x=616, y=1324..1326
-y=899, x=641..644
-y=1103, x=591..601
-y=1710, x=659..663
-x=542, y=1853..1867
-x=488, y=234..246
-y=1352, x=601..617
-x=523, y=6..25
-x=630, y=1231..1233
-x=444, y=1339..1350
-y=975, x=426..434
-x=438, y=1412..1430
-x=546, y=1272..1295
-y=1530, x=545..568
-x=590, y=266..282
-y=868, x=656..662
-x=603, y=1320..1331
-x=457, y=1241..1254
-x=498, y=1662..1672
-x=573, y=856..868
-x=634, y=494..521
-x=552, y=979..991
-x=532, y=573..576
-x=428, y=1412..1430
-y=158, x=445..496
-x=644, y=1347..1375
-y=182, x=616..639
-x=491, y=9..21
-x=532, y=1309..1318
-x=442, y=1896..1912
-x=520, y=1765..1778
-x=497, y=1296..1298
-y=1233, x=620..630
-y=1296, x=494..497
-y=1447, x=580..641
-x=659, y=1709..1710
-x=615, y=1507..1533
-x=564, y=726..730
-x=462, y=685..698
-x=640, y=1075..1093
-x=632, y=1647..1659
-x=576, y=476..490
-x=482, y=327..334
-x=559, y=569..587
-y=345, x=557..580
-x=656, y=851..868
-x=456, y=1830..1837
-x=607, y=1773..1789
-y=755, x=442..458
-y=101, x=530..550
-x=561, y=939..950
-y=1744, x=554..575
-y=1567, x=635..663
-x=556, y=894..898
-y=1525, x=554..556
-x=655, y=1076..1093
-y=1618, x=490..497
-x=442, y=571..582
-x=649, y=1694..1703
-y=1453, x=441..449
-y=1575, x=527..530
-y=1843, x=445..471
-x=512, y=1811..1823
-y=650, x=438..450
-x=434, y=954..975
-x=662, y=223..247
-x=472, y=1511..1519
-x=568, y=556..559
-x=453, y=992..1001
-y=398, x=531..542
-x=619, y=1550..1552
-x=561, y=1421..1437
-y=337, x=477..499
-y=44, x=494..514
-x=457, y=208..230
-x=511, y=701..713
-x=620, y=1232..1233
-y=1146, x=632..646
-y=1872, x=435..454
-x=451, y=834..840
-x=565, y=142..164
-y=419, x=543..545
-y=1875, x=569..592
-y=1552, x=619..631
-x=490, y=1595..1618
-x=578, y=1777..1803
-x=543, y=434..462
-y=113, x=515..542
-y=1350, x=442..444
-y=963, x=609..624
-x=587, y=398..419
-y=1572, x=527..530
-x=501, y=966..983
-x=563, y=220..222
-x=566, y=1177..1187
-x=429, y=289..294
-y=972, x=554..573
-x=554, y=1323..1336
-x=584, y=1360..1373
-y=419, x=587..605
-x=565, y=1610..1622
-x=486, y=1810..1825
-y=1571, x=483..500
-y=30, x=446..463
-x=512, y=656..666
-y=1599, x=477..483
-x=530, y=1657..1662
-y=138, x=454..474
-y=1773, x=428..444
-y=1619, x=528..536
-x=486, y=1154..1156
-x=550, y=92..101
-y=1581, x=514..537
-y=440, x=488..512
-x=634, y=809..821
-x=599, y=1401..1409
-y=1222, x=576..579
-x=552, y=413..424
-y=265, x=619..640
-x=599, y=951..974
-x=504, y=496..521
-x=532, y=985..1012
-x=508, y=1189..1200
-y=188, x=525..551
-y=727, x=542..552
-x=631, y=1873..1875
-y=638, x=599..616
-x=556, y=1498..1511
-y=1292, x=620..625
-x=513, y=167..180
-y=1912, x=442..453
-x=531, y=82..87
-x=589, y=651..652
-x=637, y=1892..1908
-x=560, y=435..462
-y=411, x=559..574
-y=416, x=487..490
-y=1542, x=493..498
-x=602, y=1195..1207
-x=573, y=708..712
-x=575, y=1370..1395
-y=1480, x=643..645
-x=489, y=664..673
-x=428, y=1116..1124
-x=651, y=1152..1170
-x=625, y=1319..1331
-y=45, x=657..665
-x=453, y=325..335
-y=760, x=569..583
-x=628, y=1047..1058
-x=530, y=769..779
-y=842, x=455..463
-x=596, y=1669..1679
-x=571, y=1456..1464
-x=448, y=1667..1673
-x=648, y=29..31
-y=868, x=573..581
-y=1207, x=586..602
-y=1758, x=447..475
-x=444, y=1516..1531
-y=1303, x=489..505
-x=567, y=1404..1411
-y=689, x=531..552
-y=182, x=439..456
-x=570, y=861..864
-y=1012, x=532..541
-x=608, y=920..938
-y=563, x=547..575
-x=525, y=450..461
-y=1232, x=542..546
-x=539, y=1023..1035
-x=480, y=1689..1695
-y=191, x=633..638
-x=548, y=1437..1455
-y=1243, x=590..592
-x=431, y=1330..1348
-y=1053, x=552..567
-x=594, y=1693..1695
-x=479, y=787..789
-x=567, y=1654..1659
-y=902, x=524..528
-y=98, x=577..580
-x=554, y=253..263
-x=609, y=1856..1860
-y=203, x=488..503
-x=527, y=918..929
-x=607, y=901..915
-x=511, y=1905..1926
-y=436, x=498..503
-x=446, y=1224..1236
-x=580, y=131..142
-x=663, y=1708..1710
-x=512, y=1138..1145
-x=529, y=508..518
-y=298, x=605..613
-y=1867, x=524..542
diff --git a/2018/inputs/18.txt b/2018/inputs/18.txt
deleted file mode 100644
index 9e354bc..0000000
--- a/2018/inputs/18.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-#.#.|..#|.||.#...|...#.|.......##|##..#..||.||....
-#.......#.....|##..#|..#.##..##|.|.#..|.#...|....#
-.|..........#.|..|.....|..|#.#...##|#|.|#|##|...#|
-#|....#|##..#|.|||.#.|.#...#.##.......#||..#......
-.#|....|.|..#..||...#||...|......###.#.#...##..#..
-..||#...|.#.|||||.....|.......##...#.#....|..#....
-###|..##...|.#|..|.#|#...|.#.|....||.|...#|.|#...#
-|.#.|#.#.|###.|..#..|....#....#|.#..||.||.....#..#
-.#..|.#..#|##..|.....|.#.|.#.#|.......#..|...#..|.
-...|||##...|..#.#|#|..#.#..#|.|.|#..##........##.#
-|#.#..||....|...|#..|....|#|...#.#.#.##|.|.#......
-|..|...|.|#.........|..#|...|.#.|##....|..|..|#.||
-|....#..||..|...#|......|||||.|#....||....|.#|.#..
-......#||.#.#.||..|.......|....||#||#.|.#.|.##||#|
-.##.#....##.#.|....|...###..#...|.#....|.#...|..##
-.##..#|#.#.##.||..|.#|..|.|.##|....|...#||||.|..#.
-|.|..|#|....|.#.#..||.....|.....##....||....|.||..
-#|.|.##...||...........|..#.||.|.#..##..|#||......
-||..||.||..#.##.#...|.#|.....|###....#.....#...|..
-|.#.##|.|...||#.#...||....|.|#..|.#....##........#
-..|....|.#.##|....|||#....#.|.|.##....|##|.|#.....
-.|.....#|.#....|###|..#|||........||#.#..||..|..#.
-#..#...|#|.#...|.||##..#.|..|.|.#.|..#.#.|.....#.#
-|#||.##..#..|||.......#|..#...#..##....#||.#|.....
-.|.#.....|..#...#...##...|.#...|.#|.......|..#...|
-.||.......|..##..##.#|.|..|...#.|.#..#.|....#.|#.|
-....#..#|##|....#..|.#..|||..#....#.#|...||.#..|..
-#......#|.##..|..|....|.##.#|...#..#.|..|..|..|##.
-...|||.#|#.#.|..|||.#.#.#...||...||..##..#.....|..
-..#..|.|#.#..|..##|..#....#.|..|.......|||#.|.|.|#
-.##|..#...#..||..|.........|#.|#.....|...##.|..||#
-#.....||....#.....|#.||......|.#|.#|....||.||.#.#.
-#..|#..|......|.#.#.#.##..||.|.#.|......#|#||#.|.#
-..||..||.....|.#..###.#.|#..|.......|....#||.|..#.
-.#...###|#|#|||...|...#.#|.#|..|...#..#.|#|.#...|.
-...|..#||....##|..#...#....#||#.......|....#.|###.
-..#....|#..#|.....|.#|..#..|#....||......|.|.#.|#.
-..|##....#.|..#..#.|.#..||....#...|.....|..#.....|
-.......#||..#||...|.#.|#...#....|.|.||.#.|...#.##|
-.|.|||.....#............#..#..|..|..#.|.#..|......
-|...|.|####..#.....#..#..|#|#..#..|......|...|.#|#
-|.|...#..#..|....|.....#|#||..#.||..|#|..|||.|.|.|
-..#...|#.......||.#.#.#....#.........##|.|..#.##||
-#|#..|..|#|.##.|.|#......||......|.....#||###.|###
-....#..#.|..|...#|#|..|#..|.#|....||#|.||.|#|.....
-|..#.|..#.|#......#...#|.#|#|.....|#...###....##..
-...##..#..|..#..#.#...|.#..#|...|#.##|.#|..##..#.#
-|.|.|...#.|..##.|.|....|..#..|...|..##|...|..|....
-.#|..|..|..|.|..#...|.||#...#......||.#.#.........
-.#.##..|............|.||.....#||..|##.|..|.....#.|
diff --git a/2018/inputs/19.txt b/2018/inputs/19.txt
deleted file mode 100644
index 1207b7b..0000000
--- a/2018/inputs/19.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-#ip 4
-addi 4 16 4
-seti 1 7 2
-seti 1 1 5
-mulr 2 5 3
-eqrr 3 1 3
-addr 3 4 4
-addi 4 1 4
-addr 2 0 0
-addi 5 1 5
-gtrr 5 1 3
-addr 4 3 4
-seti 2 7 4
-addi 2 1 2
-gtrr 2 1 3
-addr 3 4 4
-seti 1 3 4
-mulr 4 4 4
-addi 1 2 1
-mulr 1 1 1
-mulr 4 1 1
-muli 1 11 1
-addi 3 3 3
-mulr 3 4 3
-addi 3 9 3
-addr 1 3 1
-addr 4 0 4
-seti 0 1 4
-setr 4 9 3
-mulr 3 4 3
-addr 4 3 3
-mulr 4 3 3
-muli 3 14 3
-mulr 3 4 3
-addr 1 3 1
-seti 0 6 0
-seti 0 7 4
diff --git a/2018/inputs/2.txt b/2018/inputs/2.txt
deleted file mode 100644
index 1edb865..0000000
--- a/2018/inputs/2.txt
+++ /dev/null
@@ -1,250 +0,0 @@
-krdmtuqjmwfoevnadixyclzspv
-yrdmtuqjiwfoevnabfxyclzsph
-kqjvtuqjgwfoevnabixyclzsph
-krdmtuqjgwjoevnaolxyclzsph
-krdmtnqjgwfoevnabiiyxlzsph
-lrymtuqjgwhoevnabixyclzsph
-krdmguqjgwfoevnabixkclzsah
-krdmtuqjgwfoevnibinyclzdph
-krdmtucjgwfoevnabhxyclzspv
-krdmtuqjgwfoevtabixyulzsuh
-krdmtuqqgwfoevnabixdblzsph
-krdmtuqjawfsevnabiyyclzsph
-krdmtuqjgwfoevnabzxccldsph
-krdmtcqegwfhevnabixyclzsph
-krdmtuqjgwforvnaxixycgzsph
-krdmtuqjgwfoqvnaxixyclzskh
-krdmtutjgwfoevyajixyclzsph
-krdmtuqmgwfoevnabixycxzspc
-krdptuqjgwhoevkabixyclzsph
-krdttuqjhwfoevnabixyclzspa
-krdmtuqjgwfoevnabibyhnzsph
-krdmtuqjywfoevntbidyclzsph
-krdmtojdgwfoevnabixyclzsph
-krdmtuqjgpfuevnauixyclzsph
-krdmtoqjgwfrevjabixyclzsph
-krdmtuqjgwfoyvndbixyclzyph
-krdmtxqjgwfomvnayixyclzsph
-crdmtuqjgwfoevnabixyoxzsph
-krdmtpqjgwfdevnabixycqzsph
-krdmtuqjgwfoevuabfxsclzsph
-krdmtuqjgwfoevnybixycdzskh
-krdmtusjgwfoevnabixxclzdph
-krdmtuqjgwfoevnaboxyglzjph
-zrdmtuqjgrfoevnalixyclzsph
-krdmtuqjclfoevnabixyclzsih
-kqdmtlqjgwfoevnabtxyclzsph
-krdmtuqggwpoevnabixyclzlph
-krdmtuqjgwfobwnrbixyclzsph
-krdmtuqjgwfoevwabkxycnzsph
-kldmtuqjgwfogvyabixyclzsph
-krdmtuqvgwfoevnabixtcrzsph
-krdmtuqjgwroevnabixyrlzspw
-krdmtuqjgjfoevnabixyelzrph
-krdmtuqjgffoevnaaixyclzspa
-krdmtuqjgwfoevxabifywlzsph
-krdmtuqjgwfoevlabixycrzsrh
-krdmtuqjgwfpevnabixocqzsph
-krdmtuqjgwfoevdabixycnhsph
-krdmtmqjgwfoevnajixyclvsph
-krdmtuqjjvfoevnabgxyclzsph
-krzmtuqjgwfoevnabioyckzsph
-kodmtwqjgwfoevnabieyclzsph
-ehdmthqjgwfoevnabixyclzsph
-krdmtuqjxwioevnabixyclbsph
-grdmkutjgwfoevnabixyclzsph
-krdutuqjgwfoebnabixaclzsph
-krdmtuqjgwfoebnabixyclcjph
-krdmteqjgwfoevnlbixycizsph
-krdmtegjgwhoevnabixyclzsph
-krdmtuqjgwfdrvnabixbclzsph
-krdmtuqjgyfoevidbixyclzsph
-krdmtubjawfoevnabixyclzuph
-krdmtuqjgwfoavjabixyclzssh
-krdmtuqjgwfoeonabixyclzsvo
-vrdmtuqjgwffevnabixpclzsph
-krdmtuqonwfoevnabixycfzsph
-krdmtumjgwfpevnubixyclzsph
-krdmtutjgwfoevnaciyyclzsph
-krdrtuqjgwfoevnwbixyglzsph
-krdmtuqjgwfoevbabixyclesdh
-krdmtuqcgwfoevnabixyqdzsph
-krdmtuqjgwfogvnabrxycezsph
-krdmujqkgwfoevnabixyclzsph
-krdmtuqjgtooevnabixyclzzph
-jrdntuqjgwfoevnabixyclrsph
-krdmtuqjgzfoevkebixyclzsph
-krdmtuqjgwfosvnaeixyclztph
-krdmtuqjgwfoevzabixydlzaph
-krdmtuqzgwfoavnabiqyclzsph
-krdmtuqvgwfoevnabixycwzspv
-krdmvuqjgwteevnabixyclzsph
-krdmtujjgwfoevgybixyclzsph
-kydmtuqjgwfoeunacixyclzsph
-krdmtuqjgifoqvnabicyclzsph
-krnltiqjgwfoevnabixyclzsph
-krdmtuqjgwfoevnabhxyclzsgi
-kfdmtuqjnwfowvnabixyclzsph
-kmdmtuljgwfoevnabixycvzsph
-krdmtxqjgwaoevvabixyclzsph
-kramduqjgwfoevnabixyclzwph
-krdutuqjgwfoennabixyclziph
-krdmvuqfgwfoevnacixyclzsph
-krdmtuqogwfoevnabmvyclzsph
-krdmfuqjgwfoyvnabixyclzseh
-krdmtuqjgweoelnabixyclzspd
-krdmtumjgwfoevnabixyclzypo
-krdmtuqjgkfoevhabixyclzsqh
-kjdmtuqjgwfoevgabixyclzsah
-krdmtuqjgwfoevnlbixyclzsbw
-mrdmtxqjgwfoevnabgxyclzsph
-krdmtuqpgwfoevnhbixycltsph
-krdmtuqjgwfmqvnabixyclzslh
-krqmtuqogwfoevnaqixyclzsph
-krdmtusjggfoevnabicyclzsph
-krcmtuljgwfoevlabixyclzsph
-krdmtuojgwfoeknabixyclzsrh
-krdmtuqjtwfoevnabiypclzsph
-krvmtupjgwfoevnabixycldsph
-krdmtuxjgwfoevaabxxyclzsph
-krdmtvqlgwfoehnabixyclzsph
-wrdmtuqjgwfoevnabixyclzdpy
-krdatuqlgwfoevnabixyclzsjh
-krdmtuqjgwfoevpabkxyclzsjh
-krdmtuqjgwqvsvnabixyclzsph
-krdmtwqjgwfoevnobixyclzspm
-krdmtuqjgssoevnabixyclgsph
-krdmtuqjgwfoevnafixyclzbpp
-krdmtuqjowfoevxabiuyclzsph
-krdmtuqrgwfoevntbixyclzspu
-krdmtucjgwfoevnabixcnlzsph
-krddtuojgwfoevnabixyclzzph
-krdmtuqjgwuoevnabiqycldsph
-kpdmpuqjgwfoevnabixyclzslh
-krdmtuqjgwfoewnabixyzxzsph
-krdmtuejswfoevhabixyclzsph
-krdmtuqggwfoevntbikyclzsph
-krdmtuqjgwfoevnabixydlhnph
-krdmtcqjglfoevnaxixyclzsph
-krumyuqjgwfoevnrbixyclzsph
-kgdmmuqjgwooevnabixyclzsph
-krdmteqjgwfqevwabixyclzsph
-krdmfuqjgwfpevnabixyclzspq
-erdmtycjgwfoevnabixyclzsph
-krdmcuqjgwfoevnabixjglzsph
-krdmtuqjgtfoeunabixiclzsph
-krdmtuqjgwfoevmqbixyclzspu
-krlmtuqjvwfoevnabikyclzsph
-krdotuqjgwfoevnagrxyclzsph
-krdmtuqbgwfoefnabixyclasph
-kwdmtuqjgwfosjnabixyclzsph
-kydmtuqjgwfoevcabixycezsph
-crdmtuqjgwloevnabixkclzsph
-krimtuqhgwfoevnbbixyclzsph
-krdmjuqagwfoevnabicyclzsph
-krdmtuqdgzfoevnabixydlzsph
-krdmtuqjgwwoevnaqixyclzspf
-krdmtuqjgwfoevnabdxyzvzsph
-krdmtuqjgwaofvnabixyclzsnh
-krdmturjgwfmevnabixyclzspn
-krdmvuqjgwboevnabixyolzsph
-krdmtuqjgwfomvnabijyclzspx
-bedmtuqjgwfoevnabixyslzsph
-krdmtenjgwfoevnabixyclzsqh
-krdmtuqugwfoevnabixpcdzsph
-krdmtuqjgiloevnabrxyclzsph
-krdmtupjcwfoevnabixyclwsph
-kremtuqjgwfoevnabixyyjzsph
-krdmtuqjgwnoovnabixyclzshh
-qrdmtuqjgwfoevnabixyciasph
-krdituqjgbfoevnagixyclzsph
-krdmnoqjgwfoqvnabixyclzsph
-krdmtuqegwfoevhkbixyclzsph
-krdmkucjgwfoevnabixnclzsph
-krdmtuqbnwpoevnabixyclzsph
-krdmttqjgwfoevnabixyclbspz
-srdmtubjgwfrevnabixyclzsph
-krdmruqjzwfoevnabixyclesph
-ardmtuqfgwwoevnabixyclzsph
-yrumtuqjgwhoevnabixyclzsph
-rrdmtuqjgwfoevnabsxycwzsph
-krpmtuqjgwfoevdabixyclzzph
-krdmuuqjgwfoevnabixyclriph
-krdmtuqjgwfobvnabixyvgzsph
-krdmbuujgwfoevnabixycczsph
-krhmtuwjgwfoeqnabixyclzsph
-krdwtuqjgwfoevnkbixyclzzph
-krdmtuqjgwkoeqnabixyvlzsph
-kadmtuqjgwfoednabcxyclzsph
-krdmtyqqgwfoevnabizyclzsph
-krdmtuqjgnfoevnabiyycmzsph
-krdmtuqjcwfouvnabixyclznph
-krdmtuqjjwfcevnqbixyclzsph
-krdmtuqfgbfoevgabixyclzsph
-kkdmtuqjgwfoevnapixyclzsth
-nrdmtuqjgwtoevnakixyclzsph
-krdmtuqjglfoevlabixdclzsph
-zrdmtuqjgwfoevndbixbclzsph
-krdmeuqjgwfoeenabixyclrsph
-krdmoaqjzwfoevnabixyclzsph
-krsmtuqjgwfoevnwbixyclzsfh
-kadmtuqjgwfoqdnabixyclzsph
-krsmtuqjgofoevnabixkclzsph
-krdmtuqjdwfoevnibixdclzsph
-mrdmtuqjgwfouvnabixyclzfph
-trdmtlqjgwfoevnabixyclzjph
-trdmyuqjgwfozvnabixyclzsph
-krdmtiqjgwroevnabixyclzspk
-erdmtutjgwftevnabixyclzsph
-krdwyuqjgwfoevnaaixyclzsph
-krdmthqbgwfoevnabixyclksph
-krdmttqjgwfoivnabixyclvsph
-krdmtuqjgwfoefnabixyflgsph
-khdmtuqjgwfoevnajixyvlzsph
-krdmtuqvgwfoevnasixyclzspt
-krdmtuqjgkwogvnabixyclzsph
-krdmtuqjgwfoevnaboxpglzjph
-kadmtuqjgwfoxvnabixyclziph
-krdmtuqjfwfoevnabaxycbzsph
-krdjtuqjgwfoevnabiryhlzsph
-krdvtuqjgpfoevnabcxyclzsph
-brdmtuqjgwfoevnafixyqlzsph
-krdmtuqjgwfoevnavixxcllsph
-krdhtuqjkwfoevfabixyclzsph
-krdmtuqjgjfoevnawixyclzsuh
-krddtuqjgwfoeqnabiwyclzsph
-krhmtuqjgwfnevnabinyclzsph
-kedmtuqjgzfmevnabixyclzsph
-qrdmtuqjgwfoevntbixyclzxph
-krdmtuqsgwfoevnabixvclzrph
-scdmtuqjgwfoevnabixtclzsph
-krymtuqjgjfolvnabixyclzsph
-krdmtuqjgwfkevnablxyclzskh
-krymtuqjswfoevnabixyclzvph
-krdmtuqjhwfoevnabixycwzspd
-krdmtuxjgwfoevnabyxyclzzph
-krdmtlqjgwfovvnabilyclzsph
-krdmtuqjgwfoevnaaijcclzsph
-krdatrqjgwfokvnabixyclzsph
-krdmtuqjgwfoevnaxifyclzkph
-krddtuqjgwfoevnabixccozsph
-krdmtuqngwfoevnabiyycxzsph
-krdmtumdgwfoevnqbixyclzsph
-krdmtuqjgwfoevnabixyxlmsch
-krdmtudzgwfoevnabixtclzsph
-krdmtuqjgwfoevnpbixyclhspl
-krdmtqqjgwjoevnabexyclzsph
-kydmtuqzgwfoevnabixyclwsph
-krdmeucjgwqoevnabixyclzsph
-krdmtuqjghfoevjabixyclzspp
-krdmtuqjgjfwevnabixyclzskh
-krdmkuhjgwfoevnabipyclzsph
-krdytuqjgwfoevnabibyclztph
-krdmtuqjgwfpevnabisyzlzsph
-kmdmtgqjgwfsevnabixyclzsph
-krdmtuqjgsfoevnabijyclzszh
-krdmtuqjgwfoevnabivyclzuuh
-krdstuqjgrfoevnabixyclzspu
-jrdmtuqjgwfotvnabixyclzspj
-krdmrumjgwfoevnabixeclzsph
-krpmtusjgwfoevnabioyclzsph
diff --git a/2018/inputs/20.txt b/2018/inputs/20.txt
deleted file mode 100644
index 620f018..0000000
--- a/2018/inputs/20.txt
+++ /dev/null
@@ -1 +0,0 @@
-^ESEEEESSWNWSWSEESESENENNNW(SSWENN|)NENWWWWWNWNWWS(SWSEESE(SSWSWNWSSSESWWSSSSEEESWWSESSEENN(WSNE|)NENEEEEESSSEENNNNENEEENNWWS(WWNNNENWW(NENNNNNEEENWNNWWWWWWWSWNNNWNNEES(SENNNWNNWNNNWWNWSWNWNNENNEENNNWSWNNNWWNWWWSWWSEEEE(NWES|)SENESSS(EE|WNWSSSSE(NNESNWSS|)SWWNNNNNWN(E|WWWWNNWSWWSWWWWWNNESEENNEEE(SWWSNEEN|)NWWNWNNWWSESWSE(E|S(WWNNNNWNWWNNENNWNWNNNNWSSWWNENWWWNWSSSWSSENESEEEE(NWWWNWNE(WSESEEWWNWNE|)|SSE(SWSWNNNWSSWSSSWNWSWNNWNNN(NWSWWNENWWNWWNWWNNNESSEEES(W|ENNENNESENNWWNNWWNWNNNWWWSEESSWSSENESESE(N|SSWSWNW(S|NWN(EESEWNWW|)WWNNE(NWWNNE(SEEWWN|)NWWSWWWN(WSWSEEEEESSSE(SSSSWSSWNWSSWNWWWNENEE(SWEN|)ENE(S|NN(ESSNNW|)NWSWNWSWWSW(NNNEN(NNN(WSSSNNNE|)E|ES(SWEN|)EEEN(ESNW|)WW)|SE(SWSSSEEESWSSESSSENNNENEN(WWSWENEE|)EEESSWW(NEWS|)WSWSEENESSEEENNNW(SWSEWNEN|)NNE(SESEE(NWNWESES|)SSSWSW(NNNESNWSSS|)WSWSSWWNENWN(EE|WSSSWSWWNWWNWSW(NNNNNESSE(NNNWWNNE(NWES|)S|EEENE(SSSW(S|WN(W(WW|S)|E))|E))|SESWSSSESESEEEESWWWSSWWNENWNW(N|SSSSSSEEENN(WSWNSENE|)EEENWWNEEESSSSSENENNENNNNWWW(SEESSW(N|SS)|NNNWWSS(ENSW|)WNW(NW(S|WNENNESSE(S|NEEENEEEESWSWNWS(WWW|SSSEENN(WSNE|)EEN(W|NEENENEEEEESSWWN(WWSWSEE(SENEESENNENEESSW(N|SEENNNEEEE(SWWSEESWSWSSSSSSESSENNEESESSWSWWWSWNWSWNWSSWNWWWWWSWWNWNWSWWNNE(NWWW(NENNNENEENNNEE(NWWNWSSSSWNW(NEWS|)SS|ESWWSEESSWNWSSESWWNNWSSW(SEESES(W|EENN(NNEESWSSEEN(W|NEENESENENE(NWWWNWSS(EE|WSWNNWNNESE(NN(E(SEEES(ENN(N(E|NN)|WWW)|W)|NN)|WW(WSSSSE|N))|S))|SSWSSEE(NWES|)S(WWWWNWSW(NNEEES|WS(WNWSW(S|W)|EEE))|EEEN(N|E))))|W(S|W)))|N))|SWSESWSWNNWWSWNWWWN(WWSESWSESESSEEEEENESSWSESWSESSENESENNNNWSW(SEWN|)NNENENENN(W(WS(SW(S|NWWN(WSSWWNENWW(SS|N(WSNE|)E)|N))|E)|NNN)|ESEE(NWES|)SSWW(NEWS|)SESSSWNW(N(N(N|W)|E)|SSESSESSSSSWWNENNNWN(WWWWWSWSESWWWNWWWNNW(NEEEEES(WS(WWNE|ES)|ENN(ESNW|)NNWSWS(WNWSWWNNE(S|EENE(S|N(EESWENWW|)WWSWNW(NN(ESNW|)N|S)))|E))|SSSEESE(ESSWNWWW(NEWS|)SSESEESSENESESWWWWWW(SSSSSSSSEESESSEENESEENENENESSWSESSESWSEENESSWSEENEESENNENWNNENEEEEENWWNWNWWNWNNEENNWSWWWSESSSSSE(SWSWSESSWNW(S|NWNENNNE(NWWWW(NEENWNNWNWSSWNNWSSSES(ENENSWSW|)WWWWWNNNENEE(NWN(ENNW(NNNWS(S|WWN(WWNWESEE|)ENNNESES(W|EEEE(NWWWN(W|NESENNE(NWWSWN|S(ENSW|)S))|ESSESENENN(WSWNSENE|)NNNNESENEENWWNNENEEEENEENNNNESSEESSENNNWWNNWN(WWS(E|WSWSWWSWNWSWSW(SSWSESSENNNEN(W|NESENENES(SWEN|)ENNE(N|SS))|NNENEENESENENWN(EESNWW|)WSWWWSE(WNEEENSWWWSE|)))|EN(ESSSENESENEEEEESESENESENEESSENNNESSSESESWWSSENES(ENNNNENENE(NNNNWNN(WWNWWWSESE(SSEE(NNWSNESS|)ESWWWSSW(SE(ENEN(E|W)|S)|NNWWWSWWWWWNWNENNNNWNWW(NEENWWNEEESEESWS(WNSE|)ESSSW(SSES(EENNNW(S(W|S)|NENEE(N(EEE|NNWSWNNEENWN(WSWWNWN(EE(EE|S)|W(NEWS|)SWS(WNWSWNWWSWNW(NE(EEEEEE|N)|SSES(W|ENE(SE(N|S)|N)))|EESEESSS(S|EE)))|E))|SSW(N|SSENE(SENSWN|)N)))|W)|NN)|SESESSWSSWNNN(WSSSWWWN(WS|EENWW)|N|E)))|N)|EES(SSESWENWNN|)W)|SSWSWSEEE(SESEEN(EN(EES(EENWESWW|)S(SSSS|W(N|W))|W)|W)|N(W|N)))|SSWSWWSWSEEEE(N(NESE(E|N)|WW)|SSSWWNENWWSSSWSSESENN(W|NESSSSWWWNWWSESESSESENNWNEEESWSSESWSWWWSESENEENEN(NNWESS|)EEESSEEEENWWNW(S|NNEEEE(NNWWWS(EE|W)|SS(WNW(S|W)|EEN(EEENWNENN(WSNE|)NESENESEENNNEESWSSEEN(W|NEESENENENWNNWWNWNENESEENNENWWWS(ESNW|)WNWNEEENNESSEENWNENNENESSEESEESWSWSWNN(WSW(NN(N|EE)|SSSW(SSW(SS(WNNWWEESSE|)EEENNN(WSSWENNE|)EENESENNN(WSWWSWNN(SSENEEWWSWNN|)|NESSSEENWNENWNWNNNESSENNNWNWSWSSWNNWW(SEWN|)NNNWWNENNWNENESSEENNNW(SS|NNWWNENEEENNEESSW(SESSWSW(SSESSEENNW(S|N(W|NEES(ENENWNENEENWNWSWWW(NNENNWNWNEENNWSWWWSESSS(E(N|E)|WWWWSS(EENWESWW|)WSWSWWNNNWNNENNWSWWNWWWSWSWSWWSESEEN(NESESSENENE(NNWWNWS(SE(S|E)|W)|SSSE(SSWWWSESSSSSSWWWSEESENESSSENNNNESE(NNWNNNE(SSEWNN|)NENWNW(SWS(SSSW(S(S|E)|NNNN)|E)|NEESEESW(ENWWNWESEESW|))|EESWWSW(SSWWWSWS(E|WWSWWSWNNENWNNWNEENE(ESE(N|SE(ENWESW|)SWWS(E|W(S|NN(WSNE|)(N|E))))|NNWNWNEEENWNNENWNWWSWWSEEE(SWWS(EE|SWSESSE(E|SWWWSW(SSEE(N(N|W)|ESWWSESWSSWNNWSW(SSSEN(N|ESEESENENN(WSW(NNENNSSWSS|)W|ESSEE(SSESSENESSWWWNWN(NWSWS(E|WSS(WNNNEN(ENEEWWSW|)WWSWNW(SWS|NEE)|S))|E)|NENWW(NEWS|)S)))|N))|WNWSWNNEEE(EN(ESNW|)WWNNNEE(SWSEWNEN|)N(ESNW|)NWNNNWWWWWNWNNNEENNENWWSSWWSWWSESSWWWS(ESEEEN(NNN|ESSSEEENWWNEEEESSS(W(NN|WWWWSEEESSWWN(E|W(SSSSES(ENNWNEEENNN(SSSWWWEEENNN|)|WWW)|WNNNW(NEWS|)S)))|E)|WW)|W(W|NNEE(E|NNNNNEENESS(WWSEWNEE|)ENNNWWNWWSS(ENSW|)WNW(SSEWNN|)NWNNNEENNESESSS(WW(S|N(EN|WS))|ENNEENNWNWNWS(SESEWNWN|)WNNENNWNNESEENWNEESSESEENWNNNW(SS|WWWNNESEEEEEENNNEENNNNWWWN(EEEESSSSSENNENWNEN(EEESESSWWN(E|W(NEWS|)SSSSSSSENESSWWWWWSEEESESWSESENENWNEN(NEEESENNWWWNW(NWNENWW(NEEESESEEENWNNENESESW(W|SEEEEENNNENESSSSENENNESEESESESSENNNESESWSSWSEEENWNEESENNWWNEENNNESESWSSSESENNWNEESE(SWSESWWWSESWSESSSSWNNNWNNNN(WSSWN(N|WSSEESSSSSWSSEEN(N(NNN|ESENESE(NNWNENNW(NNNESS|S)|SSSSSSSWNNWSSSEESSSSSWNWSWWNENWWSWWNNWWNWNENWNWSSSWSWNNW(NNENNNWS(S|WNNEENENESENENESE(SSESSEEE(ENE(NWW(NEE|SWNWS)|S)|SSSSSES(SENNSSWN|)WWNNNWSSSW(NNNNEENWWWNWWWS(EES(SE(SSWNSENN|)N|W)|WNNN(WSSSSS(W|S)|EEE(NWES|)S(E|WW)))|S))|NNENWWNWNWSWSES(WS(WWWS(E|WWS(EE|WWNENEENNENENE(ENNWSWWSWWNWWWSWWWWWWSEEESWWWWSEEESENENEESS(W(N|WSEESWWWSWWWSESSWS(WWNEN(E|WWWWWSS(ENESE(S|N)|WNNWSSWS(SWWWWNENNNWSWNNWNNNESSEENWNNNNNWWSSWNN(NEENNNN(WWWSSENESSW(ENNWSWENESSW|)|NES(ENNN(WSWNSENE|)ESSSENNNNN(SSSSSWENNNNN|)|SSSSEESWSSESEESSWNW(WNSE|)SSS(WW|SES(WSESWENWNE|)ENNN(WSNE|)EES(EENNNENNWSWSWW(SEESNWWN|)NEN(WWNW(NNNWWEESSS|)(S|W)|ENEEESE(SWSESWWSSENESENNENE(SENE|NWWS)|NNWWWNNNESSEEE(N(ENWNENWNN(ENESENESEESWWSWSW(SSENESENN(W|EEENESENNESENNEE(NWNWNWSWSWS(EENEWSWW|)WW(N(WW|NNN|E)|S(SWWEEN|)EE)|SESWW(N|S(EEESEE(NWES|)S(SESENSWNWN|)WW|SWW(NEWS|)(S|WWWWWS)))))|NN(E|W))|WSWWN(WNSE|)E)|WW)|S)))|W))))|WWSWWS(WNNE(NWWSSNNEES|)E|SEESEN(N(WW|N)|E(EENNSSWW|)SSWWSW(SWSS(WNNSSE|)ESENENN(WSWENE|)E(NWES|)SESWSEE(E|SSSESWSWSWNN(WSSSES(EEESES(WSNE|)ENENEN(WWSWNN(E|W(WS(W|E)|NENNEE))|ESE(NN|EEE(N|S(WWS(WNWWEESE|)SSESW(W|SESWS(E|WW))|E))))|WWNWNE)|NNE(NWW(WW|N)|SS)))|NN))))|E)))|SENENNEN(W|ENESENESEE(NWES|)SWWS(WWN(WSWSESE(N|SS(ENSW|)WNWSWN(NEWS|)WWSS(SE(ENWN|SWS)|W))|E)|E))))|ENEENN(WNWS(SEWN|)WWW|E))|SSSW(N|W))))|E)|E(E|N))))|SSS(SWEN|)EEESESESESENN(WNWN(WNWESE|)E|ESE(N|SWSWSSWSSSWSWWNNE(S|NWNW(NENN(WSNE|)E(ESWSSE(NENSWS|)SS|N)|WSWWSESSSWSW(WWWSWNW(S|NNWNEESE(NN|S(W|ENEE(SW|EN))))|SESSSESWS(W|SSSENEESESESESSWSSESSENNN(W|NENNESESEEESWSWWWN(N|WSSEEESSSWWNENWWSSWWN(E|WNWWNWSSSSSWNWNNE(NNWSWSSWWSEESWSEE(N|SSSWSEESENNESEESENNWNEENENNESENN(WWWSWNWNWW(NEWS|)SSE(N|SE(N|E(E|SWWS(S|WNNWSW(N|S(E|S))))))|EEENWNNEN(W|ESE(NNNW(SWEN|)NNWNENE(SSS|NWWSWSSWNNNENNNENESE(NNWWNNWWSSS(ENNSSW|)SWSWWSWSW(SE(ENEE(S(S|W)|N(ENSW|)W)|SS)|WNNW(S|NEEE(SWSNEN|)NWNWWS(WSSWWNENNENENENEEENENNNEESEESESS(SE(SWEN|)NNNNNNNWNENNWWS(SSWWS(EES(E(S|N)|W)|WNNW(SWS(SSWS(E|SWWN(E|WSWS(WN(NENNW(NENSWS|)S|WSSSENE(WSWNNNSSSENE|))|E)))|E)|NEEE(SWEN|)NNEN(WWSSW|EESW)))|E)|WWWNN(ESEWNW|)W(SSSSSSWNW(SSEWNN|)WNEN(WWSWENEE|)E(S|N)|N))|E)))|SWWSEE))|SSSW(NNWESS|)SESSWWN(E|NWWSESSSSWSWNWNN(ESENNWW(EESSWNSENNWW|)|WSSSESEEESWWSWWWWWNWSSSWNNNWN(ENESEESEN(ESEWNW|)NNN|WSWWWSWNWNWSWSESSEN(N|EEESEEE(SEESENESSSENESESEESESESWSSWWSESESEENE(NNWSW(S|W|NNEENNW(S|NENNNNNWSSWNNWNNN(ESSENE(S|NWNWNN(ENE(NNWSW(S|N)|SS(S|W))|W))|WSWWSSEE(NWES|)SESWW(WN(E|WNW(S|NENWWWSE(WNEEESNWWWSE|)))|SEEEESW(W|S)))))|SSSSSWSSWSESE(SSSWNNWWSESWWWS(WNNNENWNNNESSES(SSWENN|)E(E|NNWNNENWNEN(WWSWSS(ENSW|)WNNNWWSSE(SSWSWWWNENWWWSSWSESEESESENESSS(ENNE(SS|NWNWWN(EEE(N(W|N)|S)|W(WWNNSSEE|)S))|WNWWS(E|WNN(NWSWNWN(WSSWSES(WWWWNEENNENWNNWSWWNNE(NNWWWNENENNNWSWWWNEENNWNENNNNEEESSEEESEENNW(NENNWWS(E|WNWN(EENESEESE(N|EESESSSESWWSEESWWSESSWNWWSESESESS(WWN(WSWNNWWNWNWWSSS(W(NNNNEEENNEN(WWSSWWNENN(WWW(NNESNWSS|)SE(SSWNSENN|)E|E)|ESSWSSEE(S(ESEWNW|)W|N(NNNEE(SWSEWNEN|)NNNN(ESSNNW|)NWWSSE(SSWNSENN|)N|W)))|W)|SSEENWNE(NWNSES|)ESSE(ESWWSW(NWW|SEEN)|NN))|E)|E(S(E|S)|NNN(W|NNESSEENE(NWNW(NNW(SSWENN|)NEESES(S|W|EENWN(E|NW(WNWSWNWNN(SSESENSWNWNN|)|S)))|SS)|ES(WSNE|)E)))))|WWNENWNNWWNNENNNNWNENESSEENEE(SSW(N|WWWSEESWS(EEESEN(EESWENWW|)NN(NNES|WWSE)|SW(W|NN)))|NWWW(S|NEENNENE(NNNWSSWNWSS(SWS(WNWNEENNW(WS(E|WSSWNW(NNE(S|E)|SSESWWNW(NENSWS|)SWWSWSSWSESWSSESSSESSSSESSEENWNNNEESENNN(EESWSSE(SWS(WSSSSWNN(NNN(WNSE|)E|WSSSSWWSESWSWWNWNENNNES(EENWNENWWSWNNWSSWSESSWNWNWWNEENWNNNNESSSE(S|NNEE(NWWNEENWNWWWNEEN(ESNW|)NWSWWWWNEENE(S|EENWNWNNWSWSS(E(E|N)|WNNW(SWSSSSE(NN(EE|N)|SESWWSSWNNWWWNWNN(EEENWN(WSWNSENE|)EE(NWES|)SSSWW(SEEEWWWN|)W|WSWSWWWNWSWSEEEEESSSENNE(NWNSES|)SSSSSWNNWSSWNNWSWWSSSWWWWSESWSESEEEENWWNW(NEESEENWNEESSSEESWSEESESESEENWNEEENNNENE(NWNWSWWSSWWNWSS(EEEE(NNEWSS|)SWWW(W|S)|WNNNWNN(W(WWWNE|SSSE)|ESENENNENN(ESSSWSS(ENE(ENESE(ENWNNWSWW(NNE(EENWN(WSNE|)ENE(NWES|)SES(WSSS|ENE)|S)|S)|S)|S)|WS(ESNW|)W)|NWN(WSSS(ENSW|)SS|E))))|SENESSSEN(ESSWWWNWSW(NNEEWWSS|)SWWSESESWSESENENWNN(NEESS(WNSE|)EESSEEEENWWWNNEN(W(WSWNSENE|)N|ESS(ENEESWSESWSEESWWWWN(E|WSWSWWNEN(E|WW(NNESNWSS|)WSSSSEESENN(WWNNSSEE|)ESSENNNESSENEN(ESESENEE(SSW(N|WSS(EEEN(WW|NEENNWSWN(SENESSNNWSWN|))|WWWWNN(ENESESWW(EENWNWESESWW|)|WSSWNWSWNWSWWWWWWWNENENESS(W|EN(ESENSWNW|)NNNWWWWSWNWSWWNENEENEE(NWWNN(ESENSWNW|)WSSSWWWNNESENNWWNE(NWNWWSWWNWWWWSSWWSWWWNNESENEENWNE(EEEEEE(ENWNSESW|)S|NWNNWWSESWSWWS(EEENSWWW|)WSSWSWSSESWSESESWWWSSWWNWWNNWSSSWWNNNE(SS|NWNENENNWWS(E|WS(E|SWWWWSSSESWSSES(ENN(ENWNENN(WSWNSENE|)ESSSSSEEES(WWWWNSEEEE|)EEEN(WWNEWSEE|)EEEES(EENENNW(SW(S|WN(WSNE|)E)|NEESSSS(W|ENESEEENEENWWNWNNEENWNEENNWNNW(NEESSENESSSW(SSWSEEESSEE(SEEN(W|ESE(EN(ENEEWWSW|)W|SSWNWSWWN(E|WSWNN(E|WW(SS(ENSW|)WW|NN(ESNW|)WW(SEWN|)W)))))|NWNN(E(E|S)|WN(WSNE|)ENNW(NNE(N|S)|S)))|N)|SSS(WSSWSWNWS(WWNENEENWWN(EEE(ENWESW|)SS|WSSWS(WNNN(W|NE(SS|NN))|S))|SEESWWSEESEN(SWNWWNSEESEN|))|E))))|WWW)|W)|WWWNENNNWWSS(ENSW|)WWNNWSSWSES(WWWWNENE(S|NWWSWSSWNWSWNNWSWNWNEENWWWWWSESSS(WNWWW(SEEWWN|)NNNENWNEENNNENNWNNWSW(SSSE(SSWNSENN|)N(E|N)|NNENNW(S|NENESSSSENENENNNWSW(S(S|E)|NWNWNW(NNNEESWSEES(W|ES(EEEEESWWWSESEEN(W|ESSSWWWSWW(SSESSENEENNW(W(SEWN|)W|NEESSSEESSSWSEESENEESWSE(S(S|WWWN(WSSWNNN(WWNWNEE(S|NENWWWS(E|WWSESSWS(EE(N|ESSE(SEWN|)NN)|WWNEN(E|WW(SSWSSS(WNSE|)E|NENE(NWN(E|NN(WSNE|)N)|S))))))|E)|E))|EEE(SS|ENWNENNNEEESWS(EENENWNEENNWWWNWNNNNNNWNENESSESENNWNNENNWWS(WWS(W(NNENN(WSWENE|)EES(WSNE|)ENESEESWSSS(SSSSSSESWWNWW(SESEEEENNESSSSENNNNNNNESENEEENENNNNNWWNWWSESWSSWWNNWSSWNW(SSEEES(WWWSSEE(SWW|NW)|ENEEE(SWWEEN|)ENWN(WS|ENW))|NENNNEESS(WNSE|)E(SS|NNENNEEEESWS(WWNEWSEE|)SEESESSSSW(NNN|SSWSSWWSWSWNW(NEENEE|SSESWSS(SSEESESSE(NNNWNNNW(NEN(NESESE(NNE(EENWNENENNNNNENWWNW(NEENWWW(W(NNNNNEENE(SSWWSSSEENN(WSNE|)ESES(W|SEEEE(SWSEESWWSEE(EENNW(N(EESE(SWEN|)N|W)|S)|SSWWWN(EE|NNNW(SSSSW(SE(SWSEWNEN|)EEEE|N)|N(WSWENE|)E)))|NWNW(SWNSEN|)NEENEE(NWES|)S(WSWENE|)EEE(SWEN|)E))|E(NWNNWNWWWWWWNNNESSENNEEE(SSWWNE|NWNNWSSWNNNENENEENNE(ENNWSWWWNNNWSWWNENEENN(WWNWNWSSES(WS(SWSSSEEEN(WWNSEE|)ESSS(ENESNWSW|)SWSWWNENENWWWWNWSWSWNNENEENNNWNW(NEN(W|EE(SWSES|NW))|SSWWWW(NENWESWS|)WSSWWSESSWWSSWSWNWN(WWSSE(N|ESESWSSSWNNNW(NEWS|)SSW(SESESS(ENNESENNWNEENEENWNEESESESEESENNEEE(SWSSW(WSWSWWSSESSEEESWSEE(NNESENNESSES(ENNWNNNN(EESWSEE(ENWN|SWW)|WSWS(WNN(E|N(WSSSS(WWNW(N(EE(S|N(N|W))|W)|S)|E)|NN))|E))|WWW)|SWWWNNWWNWSS(WWNENWW(NW(SWNWESEN|)NNNNEESSW(SEES(E(NNWNENENWN(EES(S|E)|WN(E|WWSS(WNSE|)E(ESNW|)N|N))|E)|W)|N)|S)|ESWSESEN(NN|EEEE)))|NN)|EENNWSWNWWS(E|WWNNNEEENN(WSWWWSWWWN(NENN(WSNE|)NNESE(SWSS(EN|SW)|EN(EENSWW|)W)|WWSES(WWSWS(SWEN|)E|EEEESS(SE|WNW)))|E(SSS(WWWSNEEE|)EE|E))))|WWN(NWWS(WNWSWWNNE(S|NEN(NNWSWNWSSE(E|S)|ESEESWWW(EEENWWEESWWW|)))|SE(SES(SSENSWNN|)W|N))|E))|N))|NESENNNE(SEWN|)NWW(W|NEEEEN)))|E)|EE)|EESE(NN|EE(E|SWSWWN(E|W(N|SSSENEEE(SSENEWSWNN|)N)))))|SSSWWS(ESWSEE(SWSEWNEN|)NEN(W|N)|W)))|EE))|W)|S)|SSESWSSS(ENNSSW|)W(S(SW(N|S(W(S|W)|E))|E)|N))|S)|SWSW(NN|S))|W)|SW(SEWN|)N)|S(WS(WNNW(SS|WN(NESE|WS))|S)|E))|WWWW(SWSSW|NENW))))))|NEENWWN(SEESWWEENWWN|))|W)|WSE(SSWNWSWNW(N|WSWSEE(N|SSWNWSSSESESSSENNNNWN(EENNN(WSSNNE|)ESESE(NNWESS|)SSWNW(N|SWSSEESES(EN(NWNWWEESES|)E(EE|S)|WWW(NEWS|)SESWS(E|SSWNNNWSWWWNENNW(S|NWNEE(NWWNW(SSS|NNESE(NNWNNE(S|N(WWSS(WNNWWWNEENNWSWWWW(SESENSWNWN|)WNENNWSWWNEN(EEESESWSEENNN(ESES(E(NNWNSESS|)SSES(ENSW|)W|W)|W)|NNWW(NEWS|)SESWSS)|S)|E))|S))|SE(N|SS(EE|S)))))))|W)))|E))|EE)|E)|SW(SESWENWN|)NN))))|NEN(EEE|N)))|W))|SS(S|E)))))|EE(NWNNSSES|)EE))|EEENWW))))))|E)|ES(WW|EE))))))|NWW(W|NNESENN(E|WWWNNNE(EN(E|WWWW(NENNE(E|NN)|W))|SS))))|W)))|W))|W)|N))|S)))|NENN(WSNE|)ES(ENEES(W|ENE(SSWS(WNSE|)S|EN(EE|N)))|S))))|S(ESNW|)W))|SSS))|EEE(NWES|)ESEESWW(EENWWNSEESWW|))|N)|WWS(WNW(NENWNNEEESSS(WNNWESSE|)ENNNNWWNNWNEESE(NN(ENNESE|WWWWSSW(N|SS(EENWESWW|)S(SSS|W)))|S(ESSNNW|)W)|SSS)|E))))|NNNEEEES(WSWNWS|EESS(EEEEE(SEWN|)NWNEN(WN(NW(SSSWW(SEEWWN|)NWN(W(S|W)|EE(NWES|)S)|N)|E)|E)|S)))|E)|E)|S)))))|S)|S)|EN(EESWENWW|)N)|E)|E)))|N)|ESE(SWSSWENNEN|)N))|EEEEE)|NNN))|NNWW(SEWN|)W)))))))))|S))|EE))))))))|W)))|W))|N)|NNNNWNN(ESNW|)WWS(ES(SSENSWNN|)W|WWWSWSW(SEENSWWN|)WNWNWSS(E|WNWNN(E(S|EEEES(ENEEEWWWSW|)(S|W))|WS(WNWW(S(SS|E)|WWWSWWSESSWNW(S|NNW(S|WN(WSWSWSW(SESNWN|)NW(S|NN(ESENEWSWNW|)W)|EEEE))))|S))|S))))|SS)|S)|WW))|W)|WWSWNWSSSWWNNN(ESSNNW|)WWSESSWWN(NNWSWWSEESSSEEEN(WW|ESS(WWWWSSESENN(ESSSWWSWNNWSSWNWWNNENENWNNN(ESE(S(W|SSSWSW)|N)|NWNWWSWNN(EEEE(EE|S)|WWWWSWNWSSWSEEEN(W|ENESE(SWWSSEEN(W|EESSSWWSESWWNWSWSWSESENESEENESSENESEN(NWWNW(NNE(NNE(S|NNNW(N|SS|WW))|S)|WW(WW|S))|EEESE(S(E|WWNWSSESWWSWNNENWWWWWWN(EE|WWSWNNWWSWSWNWNNWNEENNENNEENN(WSWNWNWSSWSWWNWNEE(S|ENNNN(WWSSS(ENNSSW|)WNWNWN(EESNWW|)WSWSEESWWWSWSWNNWSWNW(WWNNESEEEEE(ENN(E|WSWWN(WSWNWWWSS(NNEEESNWWWSS|)|E))|S)|SSEESSENESS(EENENEE(ESESES(ENN(W|E(SS|EN(W|N)))|SSWNW(SSSEEN(ESSSE(N|SENEEE(ESSSWSW(SEESW(W|SEEENNNW(NEENNN(EEEESSSSESWWWWSSSE(EEEEE(SEWN|)NNNNW(N(W|ENEE(SWSE|ENNWS))|SSWS(WWN(WSNE|)E|E))|SWW(N(WWSEWNEE|)NNNNENESENNWWNEE(WWSEESNWWNEE|)|SS))|W(WSSENSWNNE|)N)|SS|W))|WNENN(ESNW|)WSWWWW(S(ESENES|W)|N(NNWESS|)E))|N(W|N)))|W)|N(NWSWW(NENEWSWS|)WW|E)))|NWN(ENSW|)WWS(WS(S|E)|E))|WWSWWSSW(S(ESENNENW(ESWSSWENNENW|)|W)|N)))|EEES(ENSW|)S(WNWSNESE|)S))|EESWSSWWSSE(EN(ENEN(E(EENSWW|)S|W)|W)|SSWW(WSEWNE|)N(N|E)))))|N)))|N))))|W)|EESEENNEE(SWSEWNEN|)NNEE(SWEN|)NWWW(N|WWSES(ENSW|)WWWSEES(NWWNEEWWSEES|))))|E)))))))|S))|N))|N)))|N))|NN))|W))|SE(SWSEWNEN|)E)|W)))|NN(E|NW(W|SS)))|N)))|NN)|NN))|E))|W)))))))|W)))))|S)|WWS(E|SWNWN(WWSESESESSWS(WWNEN(WN(E|N)|E)|ES(W|S(EEN(EE(SWSNEN|)E|W)|S)))|E)))|SSW(WSEEWWNE|)N)|SSEE(NWES|)SWWSES)|SS))|EN(WN|ESE))|NN(EESWENWW|)N)|N))|N)))|EEENWNEESS(NNWWSEWNEESS|)))|S)|NNWNWWSS(E(E|N)|WWWWW(N(EENN(N|ESE(NEN|SW))|WWWNWWNNW(SWSES(EE|WSWW(SEWN|)N(ENW|WS))|NNESE(SSEWNN|)N))|S))))|N)|E)))))|S)))))|NWWNW(SWWEEN|)NENNNE)|EEEN(WW|E))))|N)|EE)|S))))|ESSEE(SWEN|)NN(WS|ES))|E|N))|S))))|W)|SWSESSWNWWSWSWS(WW(S|WWWNEEEENWNNEES(S|W|EN(EE|NWNWSW(W(SSSWWEENNN|)W|N))))|EEEEE(SSS|N(WW(W|N)|E))))|E)|E)|E)$
diff --git a/2018/inputs/21.txt b/2018/inputs/21.txt
deleted file mode 100644
index aaebbac..0000000
--- a/2018/inputs/21.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-#ip 2
-seti 123 0 4
-bani 4 456 4
-eqri 4 72 4
-addr 4 2 2
-seti 0 0 2
-seti 0 1 4
-bori 4 65536 1
-seti 16031208 7 4
-bani 1 255 3
-addr 4 3 4
-bani 4 16777215 4
-muli 4 65899 4
-bani 4 16777215 4
-gtir 256 1 3
-addr 3 2 2
-addi 2 1 2
-seti 27 3 2
-seti 0 9 3
-addi 3 1 5
-muli 5 256 5
-gtrr 5 1 5
-addr 5 2 2
-addi 2 1 2
-seti 25 7 2
-addi 3 1 3
-seti 17 4 2
-setr 3 1 1
-seti 7 5 2
-eqrr 4 0 3
-addr 3 2 2
-seti 5 1 2
diff --git a/2018/inputs/22.txt b/2018/inputs/22.txt
deleted file mode 100644
index e2e94a0..0000000
--- a/2018/inputs/22.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-depth: 7863
-target: 14,760
diff --git a/2018/inputs/23.txt b/2018/inputs/23.txt
deleted file mode 100644
index 306c4ad..0000000
--- a/2018/inputs/23.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-pos=<61981295,70302690,50074583>, r=86817788
-pos=<-39574082,11593440,52034024>, r=86226353
-pos=<-22613800,41560771,22762338>, r=83067593
-pos=<-12414843,51978293,68300191>, r=85018769
-pos=<-12727191,34870716,52975971>, r=52899633
-pos=<-32063168,40924402,49558575>, r=74871596
-pos=<18752046,16372097,-9651854>, r=70068867
-pos=<3474631,29804741,98417262>, r=77072884
-pos=<18354169,57026789,74027645>, r=65025959
-pos=<22104105,74882695,61927007>, r=67031041
-pos=<-42133805,38530007,57591711>, r=90581205
-pos=<-47869746,22599340,42855147>, r=77956291
-pos=<-27020782,-4791281,34203354>, r=93149809
-pos=<-18487970,40655084,49627122>, r=61095611
-pos=<10137288,54171533,97007570>, r=93367254
-pos=<21836035,43430190,47217893>, r=78376026
-pos=<8216569,21003453,101684850>, r=78676489
-pos=<-40466865,34952266,70038151>, r=97782720
-pos=<72670731,-8427298,58419388>, r=97862747
-pos=<-26904810,19437248,39548346>, r=63460381
-pos=<-14862223,38537164,6158587>, r=88895667
-pos=<-4093645,28809183,65079634>, r=50307904
-pos=<-13276886,43613687,45971502>, r=55187766
-pos=<49089034,29003918,14560017>, r=57321614
-pos=<-13807521,-29104885,50131321>, r=99255387
-pos=<48476757,37188242,72540714>, r=62665037
-pos=<7140081,51751715,-8561127>, r=94827577
-pos=<-43249072,32737116,53752441>, r=82064216
-pos=<6641528,98591490,47271959>, r=91547386
-pos=<-23305462,10475650,56073326>, r=75115096
-pos=<6053316,21990329,84119652>, r=62287689
-pos=<7023331,60698763,57949984>, r=63950985
-pos=<-36608889,31399128,35446137>, r=74217136
-pos=<6817093,34966536,98116734>, r=78591704
-pos=<4957605,61740316,52702032>, r=61810336
-pos=<-2269508,-8851147,43341014>, r=63321024
-pos=<12839874,52090204,58609561>, r=50185956
-pos=<-24117273,33915884,49793440>, r=60152075
-pos=<74759590,28034712,42456610>, r=54126256
-pos=<-48197949,37668470,48713802>, r=86905688
-pos=<-465248,41562365,60498029>, r=54851108
-pos=<10694430,32208520,48027772>, r=61692668
-pos=<-8548512,14246214,83247198>, r=83761331
-pos=<43950964,33755026,90173201>, r=72338199
-pos=<-14628694,43441676,58236468>, r=68632319
-pos=<106381567,34503222,46141825>, r=91485627
-pos=<-42403687,53189612,46049581>, r=93968393
-pos=<3940021,35797440,82233626>, r=66416478
-pos=<-12215361,4082478,43661351>, r=60012674
-pos=<19860123,68466722,60165468>, r=61097501
-pos=<70777186,32758921,32118468>, r=65206073
-pos=<-38591125,46522298,54596946>, r=92035892
-pos=<22636563,105345403,45688673>, r=80723037
-pos=<-3951303,29434316,22353040>, r=52688125
-pos=<-176419819,31194464,52039201>, r=76587195
-pos=<-3596358,48726226,78390625>, r=83038642
-pos=<7182613,37282188,20126279>, r=51628082
-pos=<-25240363,51483969,55323702>, r=84373768
-pos=<21428319,64401806,57994375>, r=53293330
-pos=<-5939048,7790261,21935573>, r=71754303
-pos=<-14391272,30291007,70042112>, r=67049881
-pos=<-22323827,29920141,55916312>, r=60485891
-pos=<13475129,52193445,63897921>, r=54942071
-pos=<-3994272,15505795,89454649>, r=84155011
-pos=<475865,1537450,69193888>, r=73392255
-pos=<-10815135,44879964,69035166>, r=77056155
-pos=<11306358,28884419,64442081>, r=91273574
-pos=<14678811,33694651,48185622>, r=71901550
-pos=<3756099,71276526,21743645>, r=87431573
-pos=<40262582,59466852,61256380>, r=65445301
-pos=<11616060,70966185,64722364>, r=76397938
-pos=<3872060,39650278,107716165>, r=95819913
-pos=<9586133,45083261,78735554>, r=66558242
-pos=<77865670,42917012,73695024>, r=98936729
-pos=<-1745961,55327607,42088395>, r=56640112
-pos=<26855240,67981174,26878283>, r=61746856
-pos=<-14224458,28877026,31495228>, r=53261041
-pos=<15850501,66941649,70246547>, r=73663230
-pos=<-22483771,25856673,49504583>, r=52343508
-pos=<9442908,53159770,55875115>, r=51917541
-pos=<1959101,903989,50510107>, r=53859027
-pos=<7569188,-24881655,45995388>, r=69519533
-pos=<1336123,50534199,50773018>, r=52296589
-pos=<-6780305,30188574,97998637>, r=87293233
-pos=<-27347231,32710526,48539527>, r=60922750
-pos=<-54109318,45563567,46755290>, r=98753653
-pos=<-23931716,34591305,51177382>, r=62025865
-pos=<1842700,54313361,57870403>, r=62666497
-pos=<9906862,47176518,46588813>, r=49926624
-pos=<-5650338,36212767,99081721>, r=93270578
-pos=<-9210222,73861103,51071528>, r=86469031
-pos=<-48605170,28058111,39410284>, r=78908074
-pos=<6277738,31698726,83207681>, r=60954109
-pos=<5935953,25376812,52194560>, r=66482724
-pos=<-33349449,32090950,46515684>, r=64281651
-pos=<-1144497,68829923,72349587>, r=94649606
-pos=<68150356,106204720,129297951>, r=83514523
-pos=<8426203,98908672,49758875>, r=92566786
-pos=<16538168,48418035,65737293>, r=49942650
-pos=<19573131,82515397,58801909>, r=74069662
-pos=<98906639,46422007,45986912>, r=95774562
-pos=<12340098,62609442,59505078>, r=62099865
-pos=<-28251146,31055125,25461712>, r=75499853
-pos=<19758085,59632651,60443124>, r=52643379
-pos=<-63046046,25663836,40121278>, r=92801960
-pos=<-37359413,31532323,71313730>, r=92530910
-pos=<53387378,31226416,70902974>, r=59975761
-pos=<-111343725,90010574,65438544>, r=96905196
-pos=<39565178,36023094,48981621>, r=96285986
-pos=<-18425354,35959496,54078093>, r=60788536
-pos=<4117058,66844365,17924670>, r=86457430
-pos=<4823188,-14314294,64385895>, r=80088678
-pos=<20323219,61060408,10757887>, r=71634602
-pos=<89860271,38268711,51332073>, r=83920073
-pos=<6829746,30401653,100430131>, r=76327501
-pos=<-18163621,73955629,42658058>, r=91116552
-pos=<-9868198,28983545,82688052>, r=73865474
-pos=<-3955635,32776886,7789254>, r=70598099
-pos=<22115720,88382733,50485824>, r=69078561
-pos=<-25241164,31938266,56917737>, r=66422608
-pos=<14985873,-15753032,55823238>, r=62802267
-pos=<16643466,61628684,29386869>, r=57253552
-pos=<21580242,42328478,123256438>, r=96330398
-pos=<-25199672,13587085,61865724>, r=79689986
-pos=<25598120,-21677261,57401363>, r=63021973
-pos=<20683805,43416073,80207144>, r=55264851
-pos=<-12206963,28525784,76317729>, r=69375956
-pos=<66517337,40023722,63765750>, r=74765959
-pos=<21046583,32632182,66997632>, r=92540759
-pos=<-13138431,65411819,48286547>, r=79162230
-pos=<-33524737,76477821,155964131>, r=73103463
-pos=<-33331228,9961241,69359006>, r=98940886
-pos=<39564979,28572472,53811503>, r=61407169
-pos=<-48869811,21665479,51245298>, r=84661484
-pos=<-8710194,53780076,47547665>, r=62363657
-pos=<-7314943,55087956,46146524>, r=60875047
-pos=<-61837954,25859003,56641091>, r=98831768
-pos=<-5695240,58983811,70577156>, r=87581649
-pos=<-25981379,35101300,31842886>, r=70894580
-pos=<3669996,59130810,1907555>, r=95208068
-pos=<34776272,-4188188,70499131>, r=67808809
-pos=<-35530241,30475154,50076449>, r=68407314
-pos=<-8155622,43149031,72681791>, r=76311918
-pos=<6666752,64359993,46401448>, r=56420132
-pos=<14935236,11018971,47709423>, r=95072999
-pos=<-31457362,28416643,49636691>, r=61836519
-pos=<-16109927,48371152,51014763>, r=67821289
-pos=<42694611,33011663,86560963>, r=66726260
-pos=<10684191,49511278,21069239>, r=59412987
-pos=<-423180,40569321,15553431>, r=67093941
-pos=<-32350990,31916431,66781337>, r=83374335
-pos=<-40417062,33333028,20729982>, r=94675000
-pos=<-5784232,29640751,62496121>, r=50246685
-pos=<-15428974,17471422,52568175>, r=56737766
-pos=<-2932788,33823267,68046768>, r=57128261
-pos=<63579456,43455645,46047101>, r=57541191
-pos=<15403015,31974701,112979009>, r=81876224
-pos=<-24087841,19769551,56050682>, r=66580826
-pos=<-11649390,82772147,39945831>, r=96130620
-pos=<20266288,41030544,49627298>, r=52471876
-pos=<15271488,104802139,55747920>, r=97604129
-pos=<-17294454,29095937,38121063>, r=49924113
-pos=<-28047432,15028531,34900811>, r=73659132
-pos=<63036558,50019938,71871561>, r=89387198
-pos=<-34801957,36642230,53036734>, r=76806612
-pos=<-38144076,30407351,68440798>, r=89317810
-pos=<3512495,54767308,49076598>, r=52656960
-pos=<14274088,34274498,46377106>, r=89548213
-pos=<39329258,25136254,46456590>, r=73770931
-pos=<-43496380,31317940,30852295>, r=85616814
-pos=<14184631,31298574,54769039>, r=52386260
-pos=<80496193,20583845,74488856>, r=92746549
-pos=<-23389071,63823214,32693625>, r=96173548
-pos=<-25690209,44737890,68493032>, r=91246752
-pos=<-27606431,29594954,78055471>, r=87582356
-pos=<72441600,37663099,5449732>, r=98443349
-pos=<64033149,70075201,56633740>, r=95201164
-pos=<-41252112,41584295,58764742>, r=93926622
-pos=<-12824950,60182885,70449830>, r=95783330
-pos=<63858499,1902299,56897189>, r=77198605
-pos=<-35302433,28371559,42263514>, r=63065421
-pos=<-50193553,13029004,178032706>, r=87155339
-pos=<-10241339,30475433,65035094>, r=58077303
-pos=<27176667,88255399,39199151>, r=70021298
-pos=<3789738,63200642,58556644>, r=70293009
-pos=<-29026962,17065408,63626804>, r=81800634
-pos=<-15528112,28599049,55171449>, r=51624044
-pos=<67553889,-12734884,46684710>, r=85318716
-pos=<-22058789,25579659,47800035>, r=50491043
-pos=<65502868,77153034,48367762>, r=95482653
-pos=<52012555,29111973,69892338>, r=55475892
-pos=<7094796,39275693,83735416>, r=68242166
-pos=<1860284,40455320,92877446>, r=83797940
-pos=<11928924,-2446863,70048662>, r=66778312
-pos=<7667696,94196419,41409153>, r=86774357
-pos=<-47571004,37469854,46817463>, r=84183789
-pos=<-4156736,84010739,52365610>, r=92858630
-pos=<6056924,12888978,84519517>, r=71785287
-pos=<-47345906,30387796,45986301>, r=76045882
-pos=<-14305750,38815805,53464135>, r=58911123
-pos=<-5509681,53176769,46879448>, r=57891332
-pos=<-12499446,35923605,56390435>, r=57139055
-pos=<-52764985,37485922,49356853>, r=91933283
-pos=<-995676,157395073,-3073485>, r=52828911
-pos=<20007537,18034710,53163539>, r=53689323
-pos=<14489164,16396768,90904833>, r=66230860
-pos=<-56656961,29846250,59765242>, r=98593988
-pos=<12580077,72518760,77049199>, r=89313340
-pos=<100504676,32770164,49001641>, r=86735485
-pos=<56363428,40982042,51325603>, r=53130348
-pos=<67579027,45292106,26873551>, r=79786057
-pos=<26991023,51464352,68172728>, r=51087111
-pos=<-2477721,38040811,90549029>, r=83393046
-pos=<39812282,49420172,27946843>, r=55074069
-pos=<-7592987,58715561,48320434>, r=66954427
-pos=<7777052,28459937,51985707>, r=53419415
-pos=<-34825568,30793001,25736210>, r=81537269
-pos=<-24303136,54965408,48394944>, r=79988927
-pos=<-23117889,8738217,68644161>, r=89235517
-pos=<-25024083,8306905,47947646>, r=70876621
-pos=<2007442,56985136,59636415>, r=66939562
-pos=<-13687550,71578246,57121637>, r=94712935
-pos=<-16345760,32983233,89061217>, r=90715694
-pos=<86368374,35824210,61445425>, r=88097056
-pos=<-35743614,53334234,57645839>, r=99049305
-pos=<-15191744,62377081,28606960>, r=90616727
-pos=<15180924,74088799,62177344>, r=73410680
-pos=<87747671,31399471,31905651>, r=81030076
-pos=<490300,35168974,87629502>, r=74633619
-pos=<-7639730,47107985,53037366>, r=60110529
-pos=<-15154000,47565888,46724248>, r=61769578
-pos=<-15930553,8949295,49890450>, r=63083820
-pos=<-2085646,59550216,190147611>, r=69262241
-pos=<7225777,50890764,62861738>, r=58852281
-pos=<90275849,20142660,46920592>, r=75399045
-pos=<-26764544,42182428,46746825>, r=68019674
-pos=<76321467,29233298,55996378>, r=66010239
-pos=<-72399950,54572749,137176788>, r=75623903
-pos=<20511710,69381130,54777605>, r=55972482
-pos=<11171812,-1838585,60251989>, r=57130513
-pos=<-15322219,34977106,95397324>, r=98022178
-pos=<45186029,75515109,54316351>, r=79476635
-pos=<-33243023,32685580,54621141>, r=72875433
-pos=<-61584462,35077699,48778369>, r=97765970
-pos=<-2080973,32701858,77315532>, r=64423903
-pos=<-28378799,39591108,22227847>, r=87396852
-pos=<-8099746,62641467,55946146>, r=79012806
-pos=<-24720179,45274695,48132554>, r=70452861
-pos=<20784250,45013508,95099754>, r=71654519
-pos=<-30064753,33988072,46097252>, r=62475758
-pos=<34563348,30488217,55672227>, r=86287854
-pos=<-16742541,7677207,74209817>, r=89487059
-pos=<48717911,60141573,64839376>, r=78157946
-pos=<11980231,77201897,12503508>, r=94373076
-pos=<-35767666,29757894,59267775>, r=77118779
-pos=<-22126819,32362172,682297>, r=95461509
-pos=<-20183006,18654168,80542091>, r=88282618
-pos=<29158741,90530365,43109268>, r=70368234
-pos=<78589607,47357015,57145573>, r=87551217
-pos=<53822697,51713673,83991488>, r=93986944
-pos=<-37287747,28688663,72807970>, r=91110215
-pos=<13542941,37989744,51992083>, r=61754737
-pos=<14525371,30291586,55624740>, r=74352172
-pos=<65594982,25847880,72811378>, r=70903881
-pos=<85028254,32319009,59775298>, r=81581589
-pos=<-47952231,24568531,49936283>, r=79531659
-pos=<-21321958,21913518,49475661>, r=55095834
-pos=<-48453939,34233126,49830769>, r=84843339
-pos=<99391685,35202974,43142729>, r=85240537
-pos=<22710331,34170304,55092906>, r=91207796
-pos=<-12135705,32243191,63938331>, r=60642766
-pos=<-12338157,43480193,54115729>, r=62259632
-pos=<8622864,24881999,3805702>, r=58230495
-pos=<34000374,4364405,71395390>, r=59376643
-pos=<-19712623,50327429,47038637>, r=69404671
-pos=<-8596487,17062414,87164926>, r=84910663
-pos=<-18913938,45008114,51843283>, r=68090880
-pos=<19472967,181579393,106030809>, r=56142937
-pos=<-17173370,-3226764,55066991>, r=81678816
-pos=<63850431,62835473,23871657>, r=96602589
-pos=<-3798894,30299579,101412001>, r=87836232
-pos=<9068586,62089120,57368844>, r=62714847
-pos=<-22474207,29499886,47923819>, r=52223751
-pos=<-45651602,35036414,46323892>, r=79337438
-pos=<-12419250,32111741,56514558>, r=53370983
-pos=<12664542,52854651,103268523>, r=95784065
-pos=<22357114,12328694,108875611>, r=80401468
-pos=<-6746842,50055566,49180574>, r=58308458
-pos=<-27320265,33686937,48286622>, r=61619350
-pos=<-5359976,29458721,92619986>, r=79764181
-pos=<10052919,30248699,46342959>, r=64500134
-pos=<31603672,24458394,109318746>, r=74809324
-pos=<15363324,39635782,101274262>, r=77872183
-pos=<13846270,53578231,29556061>, r=51830690
-pos=<-15354477,46149883,46658194>, r=60488156
-pos=<-569362,85626876,46006904>, r=84528844
-pos=<10749296,42284246,82711135>, r=66571646
-pos=<-14856420,53289609,77345425>, r=97817094
-pos=<-23825436,15929136,64937891>, r=79045870
-pos=<89568342,30383137,46009564>, r=70420359
-pos=<13145554,32649278,85217834>, r=57047183
-pos=<554467,16643477,85598183>, r=74612189
-pos=<36666635,41828463,88364574>, r=71318747
-pos=<12602990,89529451,67821002>, r=97072935
-pos=<-33112360,18329619,59694200>, r=80688742
-pos=<-15561603,38236853,67667639>, r=73791835
-pos=<3519076,58523179,5256274>, r=91402635
-pos=<37058015,73816180,6497217>, r=98165326
-pos=<-485820,34664283,76480969>, r=63956703
-pos=<8046540,50222182,60417372>, r=54918488
-pos=<6698732,2095928,57478145>, r=54895175
-pos=<-110267625,103715108,49404770>, r=83596582
-pos=<14488717,37517183,47868787>, r=90880734
-pos=<11594929,31481958,92334208>, r=64546675
-pos=<13142664,33433973,51871828>, r=78783673
-pos=<14725843,21079396,84588725>, r=54995145
-pos=<17991922,28746415,53178977>, r=62665596
-pos=<21345476,109893878,54658351>, r=95532225
-pos=<99514509,32213492,45962288>, r=82149323
-pos=<37772543,40405568,108402968>, r=91040181
-pos=<16477866,1889108,-9755558>, r=86930037
-pos=<6066766,45074819,93307079>, r=84640752
-pos=<63259627,39790194,63298460>, r=70807277
-pos=<85870661,25697065,48142683>, r=66661876
-pos=<-20063299,13270466,81943036>, r=94947530
-pos=<9219021,14187810,110350611>, r=93155487
-pos=<11396690,79601451,29059476>, r=80800086
-pos=<-5992626,63895408,63403216>, r=85617223
-pos=<13745746,56178190,15154849>, r=68932414
-pos=<-19200598,41415603,54301128>, r=67242872
-pos=<66801369,67709049,33790327>, r=94508881
-pos=<-58054899,31429373,50412427>, r=92222250
-pos=<17725131,19747008,101361033>, r=70100661
-pos=<16315702,21937157,109577476>, r=77536345
-pos=<-21450279,31429149,47689387>, r=52894343
-pos=<16503867,46780903,71008828>, r=53611297
-pos=<-10617311,71781674,53581209>, r=88305651
-pos=<-18369624,34464166,58808640>, r=63968022
-pos=<-44338154,47516775,49329347>, r=93509756
-pos=<7546939,23561808,74615854>, r=49718921
-pos=<-23553075,43233473,30179868>, r=78262286
-pos=<-33728549,33419608,75400040>, r=94873708
-pos=<4130401,-415851,60422323>, r=62919529
-pos=<12199308,42656684,46658363>, r=62914010
-pos=<-10823045,40017720,87358982>, r=90525236
-pos=<54855928,43498518,54679995>, r=57493498
-pos=<12261573,29515175,45893575>, r=97366173
-pos=<15817533,48376146,72425161>, r=57309456
-pos=<22499943,43484899,49303866>, r=84870164
-pos=<15087449,40820405,15442472>, r=51945357
-pos=<2380830,39189079,87564730>, r=76698440
-pos=<10292232,61644825,58639264>, r=62317309
-pos=<-25063352,29824290,49726684>, r=56939825
-pos=<9247300,60592893,82851862>, r=86522910
-pos=<34974237,51631378,71206261>, r=62271044
-pos=<11115341,39008866,88216499>, r=68435471
-pos=<-47347839,33255463,54507917>, r=87436830
-pos=<-12385471,35476634,66586332>, r=66774052
-pos=<40297014,43609070,76102045>, r=64467152
-pos=<-25028316,48459326,70188306>, r=96001387
-pos=<29716238,95743100,36047260>, r=83200834
-pos=<-2195894,57161709,59974579>, r=71657615
-pos=<-34897564,36092514,37195303>, r=75449626
-pos=<-34350080,30930206,62762967>, r=80368703
-pos=<-13299160,-1305686,52546724>, r=73363335
-pos=<74203994,40071747,39943051>, r=68121068
-pos=<-30255218,53252625,55149209>, r=90982504
-pos=<-23708755,36047177,30518158>, r=70892646
-pos=<-42225041,28551593,47086408>, r=70188476
-pos=<45093813,91953991,40089158>, r=90747011
-pos=<20989497,-9578662,65146013>, r=59947021
-pos=<-9469151,9360043,19787978>, r=75862353
-pos=<-10455182,76182076,47046337>, r=86009032
-pos=<1489674,30920418,49075947>, r=50871653
-pos=<-1805815,40895592,59548754>, r=54575822
-pos=<22434664,50411195,76723826>, r=57025799
-pos=<1351173,-35240030,57415985>, r=97516622
-pos=<-32995557,45695405,31582059>, r=88763841
-pos=<96147879,48598772,48672050>, r=97877850
-pos=<71556712,165083816,80525352>, r=61212474
-pos=<-26738516,51821211,51973287>, r=82858872
-pos=<-45126452,24625563,45768892>, r=72481504
-pos=<-1724534,91435747,47738636>, r=93224354
-pos=<-42642617,17009143,50075464>, r=81920769
-pos=<52222152,55156460,54199932>, r=66037534
-pos=<8639285,85433958,47459393>, r=76579513
-pos=<10141717,61817092,48597374>, r=52598556
-pos=<47916267,47143215,50290112>, r=49808644
-pos=<-1999143,50275699,76700962>, r=81301257
-pos=<-41681257,20679616,56340422>, r=83553725
-pos=<35884408,41646080,79776061>, r=61765620
-pos=<4301038,52856724,21630776>, r=68579717
-pos=<-40960612,30439627,37255922>, r=75799466
-pos=<35444048,43762938,84706440>, r=68372926
-pos=<79975658,29137911,50197120>, r=63769730
-pos=<93007,44307904,61961116>, r=58501565
-pos=<-32671755,39076539,66101849>, r=90175907
-pos=<-19991034,51969552,46041742>, r=70328104
-pos=<-35314188,37602800,46861313>, r=72103772
-pos=<37201145,71666894,82972323>, r=96299533
-pos=<-49234235,28079826,57132180>, r=86771712
-pos=<8312877,40022919,72604965>, r=56640475
-pos=<39181205,52790049,92153926>, r=88584204
-pos=<7068698,47606987,62510305>, r=55374127
-pos=<30603349,56814294,106942634>, r=98819430
-pos=<16115552,28332758,35601360>, r=54887656
-pos=<10074393,95989908,47950308>, r=86191298
-pos=<-5591354,49710053,47446079>, r=55073040
-pos=<-16059874,70092354,52417407>, r=90895487
-pos=<-3286599,20110685,83441267>, r=72828890
-pos=<-6936335,22574502,22140566>, r=57762340
-pos=<32992478,36116750,76761537>, r=50329801
-pos=<-89483882,3641127,125934475>, r=84985845
-pos=<45083402,48971622,84039680>, r=82553733
-pos=<16543763,-12232511,59927146>, r=61828172
-pos=<-128930120,71482570,52773218>, r=59057806
-pos=<-3321066,36249470,10553454>, r=70672189
-pos=<11035114,-4452527,60224262>, r=59853336
-pos=<-26291008,49849603,66835908>, r=95302073
-pos=<7937807,81400916,47819246>, r=73607886
-pos=<16576233,48187487,42040402>, r=56973312
-pos=<4344158,75290424,35788694>, r=76812485
-pos=<32189900,-55403075,49857150>, r=95795351
-pos=<17696418,36185949,87820170>, r=58635317
-pos=<777488,12020182,61326632>, r=54740630
-pos=<33863194,35023084,109647702>, r=82992971
-pos=<27201238,50703815,113905343>, r=96269385
-pos=<13342983,51362786,14113529>, r=65561106
-pos=<-3406344,1514525,71500197>, r=79603699
-pos=<-4003952,88211664,52599168>, r=97140440
-pos=<7364870,66805533,30929588>, r=70166122
-pos=<4337235,69741240,49137686>, r=66867686
-pos=<39289283,41543331,80086140>, r=65377837
-pos=<31061019,37187231,96617615>, r=69325024
-pos=<12227872,90873558,49623164>, r=80594302
-pos=<-29205869,34879980,48574906>, r=64986227
-pos=<-23428908,25034353,70988758>, r=75595080
-pos=<31236415,75651801,72043812>, r=83391270
-pos=<-35663336,33550704,50545521>, r=72085007
-pos=<-25373194,33271630,48939058>, r=59909386
-pos=<81186014,21770112,48774152>, r=66535373
-pos=<-36266473,21205391,64408172>, r=85681063
-pos=<46509791,41930052,-8736829>, r=90965014
-pos=<-22028107,15234691,51487555>, r=64492638
-pos=<-20542339,31539802,48757530>, r=53165383
-pos=<13662571,56928981,15523678>, r=69397563
-pos=<-12746344,18867316,85938166>, r=86028894
-pos=<-301007,47558794,60352290>, r=60537813
-pos=<32207624,60299805,78729522>, r=75695968
-pos=<100081770,31328053,46754080>, r=82623316
-pos=<-48070787,30652729,47098499>, r=78147703
-pos=<3499835,47702960,54008261>, r=50536940
-pos=<-30212070,27990135,63986849>, r=74514607
-pos=<-15832151,28224015,56445561>, r=52827166
-pos=<-67978767,28737500,46365512>, r=95407212
-pos=<-30015019,22627881,66498575>, r=80097431
-pos=<-3376964,87518399,46889764>, r=90110663
-pos=<-12133745,41888151,15297059>, r=80379652
-pos=<-3430750,43859378,-4475364>, r=93420295
-pos=<10612582,58698878,71450281>, r=71862044
-pos=<-16853417,30239412,55512427>, r=54930714
-pos=<9856655,-15034177,76105296>, r=87495006
-pos=<19700487,14896792,94233323>, r=65848189
-pos=<90908533,40366432,47407308>, r=83141710
-pos=<53053613,45815347,47231085>, r=50559042
-pos=<91606120,30241005,62870344>, r=89176478
-pos=<6549177,28253488,45947118>, r=89716871
-pos=<-54966251,31984766,51327953>, r=90604410
-pos=<11739879,47302011,70593259>, r=58480946
-pos=<17782015,-43385757,45900297>, r=77715722
-pos=<-22321136,33175591,26785779>, r=70365922
-pos=<7447288,64317364,46803776>, r=55999602
-pos=<7212096,101522192,49782085>, r=96417911
-pos=<9756698,57513943,50726200>, r=50809212
-pos=<53938302,42703477,85380074>, r=86480889
-pos=<6127018,32634301,81765609>, r=60598446
-pos=<16024259,75089269,42148970>, r=58570841
-pos=<-14467950,30833664,53148474>, r=50775521
-pos=<1055620,-8213227,49647151>, r=63016576
-pos=<20109959,34289334,98011242>, r=64516119
-pos=<-51406886,30261849,39781808>, r=83541835
-pos=<21609187,48166640,103039225>, r=81922186
-pos=<-37318020,42076555,46223326>, r=77943551
-pos=<-9802864,50149053,57309602>, r=69587023
-pos=<8892924,30956296,4508427>, r=59209772
-pos=<17951962,38815438,50096954>, r=68485096
-pos=<12306030,97501425,46533603>, r=84054466
-pos=<-37463875,31083117,49553934>, r=70426366
-pos=<92230728,52683980,47015111>, r=96388808
-pos=<9364608,56647782,54993450>, r=54602057
-pos=<8684942,36838535,105538060>, r=86017275
-pos=<-35827611,42789189,57956518>, r=88898907
-pos=<5807845,31720781,7757680>, r=59810369
-pos=<-25365859,48253374,51239130>, r=77183993
-pos=<-13706311,23188045,2328735>, r=83730603
-pos=<-1053434,40958215,58697392>, r=53034540
-pos=<16686564,43884661,76779893>, r=56303739
-pos=<94046858,44171067,48044994>, r=90722205
-pos=<-59177933,25088148,47504944>, r=87806389
-pos=<-18654288,54793837,56331529>, r=82105172
-pos=<113519092,134203172,41554166>, r=95154840
-pos=<9436438,34715386,46078979>, r=73810378
-pos=<49732913,61362619,75247356>, r=90801939
-pos=<-54495041,22320842,50939618>, r=89325794
-pos=<12427539,17900057,11259909>, r=53954136
-pos=<16888421,45562882,95425764>, r=76425888
-pos=<-13394846,17877372,48322242>, r=50051600
-pos=<-20925432,28703245,52084455>, r=54038872
-pos=<8561924,38380609,101695915>, r=83840427
-pos=<76633366,35686884,48280680>, r=65060182
-pos=<15355031,32838431,53406732>, r=83822095
-pos=<-22241568,21612015,21308708>, r=74861862
-pos=<-45540364,39478825,56854957>, r=94199599
-pos=<-130761639,-7225545,18556230>, r=71625415
-pos=<12371981,60358241,50483820>, r=50795545
-pos=<-52881118,38556375,50525246>, r=94288177
-pos=<-5508845,44982595,39309821>, r=52836406
-pos=<-12223578,42705080,48054452>, r=55308618
-pos=<19782229,-391087,65138940>, r=51959480
-pos=<11688897,65712575,56641017>, r=62990663
-pos=<26728983,4877916,77607591>, r=57803924
-pos=<-66749809,31885857,41453884>, r=98836603
-pos=<12947494,40474371,72186292>, r=52038612
-pos=<22710949,73206326,90156950>, r=92977765
-pos=<21418285,58754538,74497516>, r=64159328
-pos=<-14006029,39388620,45791459>, r=51511854
-pos=<32331392,-9548718,53912995>, r=54138363
-pos=<-11103143,48665873,60597818>, r=72692378
-pos=<8404016,40264319,-15387292>, r=88902405
-pos=<-60697351,19761606,51535474>, r=98682907
-pos=<113332017,31654847,49314512>, r=98760760
-pos=<-17968649,23774520,26514627>, r=63220547
-pos=<-7891448,38548696,51246202>, r=50011819
-pos=<-36243928,28580831,31232834>, r=75246710
-pos=<2236746,78152395,33336820>, r=84233689
-pos=<-42646767,27988371,50996303>, r=73957310
-pos=<-12975938,19343337,62716304>, r=62560618
-pos=<-6698310,59281250,50138827>, r=68443906
-pos=<-29169469,6610144,55165008>, r=83936144
-pos=<-859099,48228088,68790664>, r=70203324
-pos=<-53259426,43091307,49454062>, r=98130240
-pos=<40051035,15273208,52961854>, r=55405641
-pos=<8599969,22173989,57555102>, r=96158345
-pos=<11561358,34996323,107452493>, r=83213190
-pos=<12971841,75769901,53455514>, r=68579059
-pos=<-24609077,31137632,12599716>, r=84801836
-pos=<39964941,58818274,67271078>, r=70513393
-pos=<11590874,44091058,16246818>, r=57908243
-pos=<11534010,42492557,73281128>, r=56565109
-pos=<46029692,44356665,33034407>, r=51140346
-pos=<230818789,28332006,48666836>, r=77009932
-pos=<-49307134,28877489,51162598>, r=81672730
-pos=<-24858611,61344602,49583599>, r=88112245
-pos=<-33971422,31026034,46645662>, r=63968617
-pos=<-14920621,60364341,48024490>, r=75635084
-pos=<-18886432,44383739,46645651>, r=62241356
-pos=<63367787,57050728,56716295>, r=81594314
-pos=<-29235501,30020585,46865414>, r=58446946
-pos=<-1116549,51739608,46803263>, r=51985095
-pos=<-12898335,8922965,49532990>, r=59720175
-pos=<11377440,35121435,54012286>, r=63237886
-pos=<-28362629,38084006,47961632>, r=66733755
-pos=<-32732759,53759806,34185847>, r=93961530
-pos=<-2049132,35100887,26872869>, r=51932182
-pos=<10307391,63192491,78308824>, r=83519668
-pos=<-11173886,50879581,47031969>, r=61411041
-pos=<-6714487,69428860,48945046>, r=77413940
-pos=<-35145310,126288277,94537390>, r=86514887
-pos=<15372059,77344628,57152598>, r=71450857
-pos=<-5534049,28501573,47802916>, r=70800310
-pos=<30282369,-27855631,57777471>, r=74260879
-pos=<27578388,34577846,94631718>, r=61246950
-pos=<5377307,28529784,46392652>, r=82994735
-pos=<-9288964,40034367,85892017>, r=87541479
-pos=<32663376,50111633,96347262>, r=83581281
-pos=<64590061,24883190,74402048>, r=72454312
-pos=<6011059,52895297,-9651139>, r=98190405
-pos=<-40075559,29164760,46796031>, r=68361786
-pos=<-27324257,33280398,58797836>, r=71727947
-pos=<65478625,51242475,73962244>, r=95142344
-pos=<-8161052,44514515,51881665>, r=56882708
-pos=<37117480,70516429,65453164>, r=77546136
-pos=<-66556175,24793456,46807708>, r=94782274
-pos=<6745175,-9697218,46249405>, r=55413236
-pos=<-15842202,54067556,49741202>, r=71976478
-pos=<-26234670,32761687,62384539>, r=73706383
-pos=<27047080,45210798,96262259>, r=72979567
-pos=<-54875381,19475504,41999639>, r=88941400
-pos=<15588049,51830394,45712337>, r=63164637
-pos=<78521098,9084198,53510654>, r=81292772
-pos=<-35117158,30884180,40930824>, r=66725315
-pos=<38517388,31310367,53377273>, r=93263507
-pos=<-34824848,35863485,57039123>, r=80052924
-pos=<87999262,21593229,36952685>, r=77127999
-pos=<-14970039,39281480,31602555>, r=64303877
-pos=<30996868,32710257,-7944148>, r=65439616
-pos=<-46544578,32730823,48455778>, r=80056612
-pos=<-25655223,54235827,24268664>, r=97277174
-pos=<-31661104,34739101,46810221>, r=65535871
-pos=<-15725105,33623089,58648908>, r=60322582
-pos=<30366481,48524611,105759957>, r=89110268
-pos=<7896511,67058144,60224279>, r=71711348
-pos=<8886133,36820409,69879921>, r=50139913
-pos=<-35009499,24967338,48346229>, r=64600051
-pos=<12236743,61232811,36406256>, r=54244674
-pos=<32133015,71147471,65672434>, r=73411928
-pos=<-4312430,48491142,58819757>, r=63948774
-pos=<-11255504,48618070,49019953>, r=61218979
-pos=<-36126448,28661597,45905741>, r=63019487
-pos=<6995492,-14641677,39110487>, r=64076982
-pos=<-494882,62507397,74981307>, r=90309172
-pos=<21658971,20515757,32538766>, r=68078733
-pos=<-42721200,2165630,50987236>, r=97754561
-pos=<-46441522,14810192,60365689>, r=98209160
-pos=<48051150,31166319,50307623>, r=70921992
-pos=<28821739,29694631,-1122960>, r=53427671
-pos=<-54273229,34572094,50463893>, r=91634895
-pos=<14673784,34863932,82993530>, r=55509157
-pos=<-32934723,17649588,51138183>, r=72635067
-pos=<-50994378,41060824,52259311>, r=96639953
-pos=<-13412903,29052830,62027839>, r=56819094
-pos=<16028543,72922360,86313287>, r=95532757
-pos=<-29190239,30088199,43593943>, r=57339282
-pos=<-67676350,28809916,49909454>, r=98721154
-pos=<-43374507,39597274,53913745>, r=89211024
-pos=<-27366900,30364601,50115222>, r=60172177
-pos=<16917628,52399768,64291470>, r=52099066
-pos=<41279617,21014635,54307699>, r=93725431
-pos=<1365818,19740622,70504983>, r=55610202
-pos=<-54647289,29012271,49857475>, r=85842468
-pos=<44221414,66917783,53886884>, r=69485079
-pos=<-9940873,70529264,26788845>, r=95336159
-pos=<-2891536,43027095,81243592>, r=79487809
-pos=<16856578,70770998,65638794>, r=71878974
-pos=<48647431,57474901,3221288>, r=96689472
-pos=<18398962,37387340,106423442>, r=77737407
-pos=<6875506,40281303,93455690>, r=79187050
-pos=<2454291,28249463,81600089>, r=59720809
-pos=<-1468549,29220087,631469>, r=71712205
-pos=<1576323,77863026,52114347>, r=80726896
-pos=<11328724,-1103809,57250256>, r=53237238
-pos=<14166873,32412130,88906135>, r=59476952
-pos=<68172516,66679724,50794113>, r=90105431
-pos=<-4882904,63239852,64521058>, r=84969357
-pos=<-39573626,43281992,58908860>, r=94089955
-pos=<47082853,25450033,45728957>, r=77686997
-pos=<30259034,36081601,79825507>, r=50625134
-pos=<13485963,34007713,111156423>, r=84003646
-pos=<-103414983,93539548,30098680>, r=85922019
-pos=<-6802701,-3790574,59234245>, r=76039201
-pos=<82390172,51540341,50478214>, r=88867872
-pos=<5396715,-12159909,37977747>, r=64326869
-pos=<60082922,38998779,61741375>, r=65282109
-pos=<-16364819,10714145,61687053>, r=73549544
-pos=<-58301485,30719708,55794510>, r=97141432
-pos=<16352057,56953747,89166657>, r=82093799
-pos=<-34630538,59464956,51639108>, r=98060041
-pos=<490228,30703545,109025168>, r=91563918
-pos=<-6013632,8426824,52874814>, r=56673453
-pos=<-36209880,25159205,51113229>, r=68375671
-pos=<17796723,1411910,80111570>, r=67114697
-pos=<-31889116,28510083,45862954>, r=58587653
-pos=<19168448,33254095,39684567>, r=98395168
-pos=<-6095859,46062067,73594989>, r=78078378
-pos=<-304797,59105732,57302395>, r=69038374
-pos=<55099745,36449947,86305322>, r=82314003
-pos=<33473188,6098096,-4438050>, r=79487709
-pos=<-31472777,36089404,51315048>, r=71202749
-pos=<15962314,28423814,-7317040>, r=61433573
-pos=<7998189,2801039,69890583>, r=65303215
-pos=<130870385,104831832,11196492>, r=68126888
-pos=<-5327566,58947831,12940865>, r=92989660
-pos=<3824920,57094208,49926985>, r=55521839
-pos=<-1717656,36673098,102114555>, r=92830763
-pos=<-6542148,37528701,53564176>, r=49960544
-pos=<-14811298,29054822,83783336>, r=79975290
-pos=<-37201984,61523961,41570442>, r=98810391
-pos=<20636169,30198837,103026121>, r=64914223
-pos=<10371395,31519349,55590694>, r=62337567
-pos=<31884149,40789942,72870652>, r=50003827
-pos=<-30398435,29198407,42512686>, r=58738952
-pos=<43939568,28346223,78157090>, r=54901870
-pos=<9128846,67552702,83250788>, r=94000232
-pos=<-2588856,30760371,91977867>, r=77653177
-pos=<15962420,82995471,76760935>, r=96119428
-pos=<-33661280,31365698,48813484>, r=66166075
-pos=<-16115499,43852463,46308402>, r=58601848
-pos=<-6987272,33841983,84781289>, r=77936013
-pos=<-485860,34594456,81980122>, r=69386193
-pos=<-15363694,37898885,53146470>, r=58734501
-pos=<-17124380,71830052,45774058>, r=87053925
-pos=<8219084,70226598,55923252>, r=70256199
-pos=<-3903209,29453615,46544603>, r=75288840
-pos=<-9159457,25097083,71581481>, r=61856037
-pos=<-6436575,16618931,70357346>, r=66386656
-pos=<-8806699,29246129,72352585>, r=62730916
-pos=<68862343,36688765,49225208>, r=59235344
-pos=<-79171684,112113447,67348279>, r=92995215
-pos=<2638935,25190324,85791990>, r=64174419
-pos=<14827988,29466545,48474491>, r=98818958
-pos=<-14381380,32037768,62743833>, r=61488450
-pos=<3154619,88011848,41382872>, r=85129150
-pos=<51747013,31306559,79606148>, r=67118845
-pos=<4782291,34063349,70169217>, r=51776099
-pos=<-39091050,45657329,51675336>, r=88749304
-pos=<-26634338,29826468,49344705>, r=58131168
-pos=<28955639,11886714,83389681>, r=58803847
-pos=<-13895377,39956378,49929456>, r=56106810
-pos=<-20174467,38776446,18529455>, r=82076331
-pos=<11908029,50316295,76200518>, r=66934331
-pos=<79036827,16924288,76062556>, r=96520365
-pos=<9584540,67893747,64596741>, r=75231780
-pos=<1999297,28072699,90660851>, r=69059706
-pos=<-4999516,1406744,49697518>, r=59502059
-pos=<-12138046,52832626,53760320>, r=71057036
-pos=<14911107,50532270,74102432>, r=62049081
-pos=<-28076669,-5209886,42939079>, r=85888492
-pos=<-1381979,35962916,89448258>, r=79118686
-pos=<-27555180,38443112,78090455>, r=96414564
-pos=<-45684157,22499678,51249216>, r=80645467
-pos=<-33262343,42412693,21018032>, r=96311801
-pos=<-24933943,30266769,36206604>, r=60648927
-pos=<47087640,55749463,76069992>, r=83366515
-pos=<40948562,39725308,77828570>, r=62961879
-pos=<-21047756,32265813,60780681>, r=66419686
-pos=<37924327,42452651,67877724>, r=52713763
-pos=<-58689938,30781189,50489915>, r=92286565
-pos=<13216582,64885410,61404468>, r=65398749
-pos=<-43382614,29830485,70345833>, r=95884395
-pos=<-20520219,36470699,75190567>, r=84507131
-pos=<14237854,59338973,85949685>, r=83376237
-pos=<-450228,37867875,64907958>, r=55551952
-pos=<17760677,61033651,84995936>, r=80594372
-pos=<22176975,82022403,46533128>, r=58704060
-pos=<22779974,94329178,17857701>, r=95346900
-pos=<-38001053,34049218,49600706>, r=73976424
-pos=<16848379,29946291,48116237>, r=55533891
-pos=<-42631692,35454176,53098888>, r=83510344
-pos=<4649340,48178580,58429391>, r=54284128
-pos=<847183,51607513,81674534>, r=84760407
-pos=<-21437870,4973092,57201053>, r=79877495
-pos=<-31919810,30134447,55487065>, r=69866771
-pos=<-27341158,67125553,48484104>, r=95276520
-pos=<34772295,-8690710,66519732>, r=68327958
-pos=<-31969415,39408252,48343122>, r=72046242
-pos=<102875003,13271850,46851582>, r=94799961
-pos=<-12487583,35034265,55339911>, r=55187220
-pos=<9093156,39769707,84017977>, r=67020115
-pos=<-16380910,41574541,66165228>, r=76446125
-pos=<78145797,37164108,49128463>, r=68897409
-pos=<12696275,29248422,93349910>, r=62227566
-pos=<3806267,80300805,32983373>, r=85166064
-pos=<96882526,36942217,48757938>, r=87041670
-pos=<-171249798,39499790,57712028>, r=97294519
-pos=<-2013420,51530722,55656270>, r=61525906
-pos=<10506453,22608309,43074519>, r=92987198
-pos=<-12980027,57643628,73634339>, r=96583452
-pos=<9759074,34807718,46383535>, r=76510831
-pos=<-46481921,33185083,62928260>, r=94920705
-pos=<-41982125,32478135,69194276>, r=95980083
-pos=<6066850,16557724,-23317282>, r=96233732
-pos=<-27420476,39804614,13027130>, r=95852751
-pos=<-35598484,27994414,43416148>, r=61831662
-pos=<53497255,74968025,34467126>, r=87786515
-pos=<5629165,76030721,52476464>, r=75203884
-pos=<-52112524,15110086,40185629>, r=92357875
-pos=<-23905340,18683396,67786661>, r=79220265
-pos=<1204692,65009004,78621903>, r=94751674
-pos=<-10066560,46695198,48547405>, r=57634798
-pos=<10289802,-10697128,21104545>, r=74844012
-pos=<-40310292,28833507,46959457>, r=68428878
-pos=<-13764816,49841026,61895287>, r=77826610
-pos=<-19679027,58605601,66152788>, r=96763074
-pos=<8809311,33356810,46152100>, r=63432984
-pos=<-29709153,29461995,49058531>, r=60555118
-pos=<-13129092,-9705209,46828679>, r=75874660
-pos=<102118197,31480871,42422516>, r=84965146
-pos=<-32517383,30565130,33503263>, r=71234788
-pos=<9534874,52896280,70697014>, r=66384094
-pos=<16880678,65311318,51702479>, r=52458646
-pos=<-36132788,43209378,55775064>, r=87442665
-pos=<22744530,34380596,134099136>, r=98061118
-pos=<-26547963,41862023,60462772>, r=81198255
-pos=<-545734,40978449,60677738>, r=54527403
-pos=<16538063,68562231,28273188>, r=65405796
-pos=<14494679,58745235,31512009>, r=54393346
-pos=<7791169,67262375,35493930>, r=65632071
-pos=<8485973,48520508,103076567>, r=95436538
-pos=<8214274,28745216,50655896>, r=92680074
-pos=<-6937397,27971689,49092605>, r=65350532
-pos=<-22481435,9380958,40012423>, r=68629066
-pos=<62129884,16597211,12546768>, r=80660497
-pos=<6258688,62081024,87730516>, r=95878363
-pos=<-32278381,28495170,53585234>, r=66684251
-pos=<8040391,72063718,51083757>, r=67432585
-pos=<-5673174,25046673,73686241>, r=60524423
-pos=<-8001243,63756911,61002978>, r=85086692
-pos=<-26577068,41949907,46813510>, r=67665926
-pos=<27314118,87945331,52949180>, r=72667621
-pos=<-20191543,30416348,7242015>, r=85020749
-pos=<-40509210,25805511,61018374>, r=81933846
-pos=<-27572422,16102428,56368833>, r=74050704
-pos=<-11240828,50248391,27895560>, r=75248609
-pos=<34613570,41153477,100115019>, r=80341645
-pos=<15579024,9723842,69284527>, r=50193328
-pos=<-46066212,37488646,47288596>, r=83168980
-pos=<16651399,81480864,60218612>, r=77373965
-pos=<-4490123,12256693,29836426>, r=57938091
-pos=<-9722027,38414943,53203837>, r=53666284
-pos=<-17608773,53047624,65044179>, r=88026024
-pos=<-46201175,24018662,58511638>, r=86905837
-pos=<83707615,22862590,47033198>, r=66223477
-pos=<75278564,31837146,46877582>, r=58452382
-pos=<66228245,28297748,1246309>, r=87068293
-pos=<-41563889,138361221,22834552>, r=92320836
-pos=<-15149458,41692211,57568440>, r=66735557
-pos=<-29959760,29199939,50714596>, r=62199729
-pos=<42142694,49570710,97616140>, r=93788536
-pos=<61202922,61131481,71470186>, r=98263590
-pos=<29827492,38051686,24415070>, r=56692483
-pos=<17592777,73628928,77556835>, r=85918423
-pos=<-20783874,35242533,54629155>, r=62981079
-pos=<64237574,1302210,73405037>, r=94685683
-pos=<-21188594,47968883,69462691>, r=90945802
-pos=<30657831,49880981,-20723938>, r=95051093
-pos=<22864844,93114017,56937539>, r=79512153
-pos=<36531726,66041045,59031978>, r=66063917
-pos=<19846259,-13074428,65015549>, r=64455431
-pos=<-7113733,38738967,15168250>, r=72339348
-pos=<-25341686,54431754,46334838>, r=78433824
-pos=<20656999,57196763,75771625>, r=64636928
-pos=<-22838713,34493030,27829494>, r=71157081
-pos=<-27835555,38366205,61876949>, r=80404149
-pos=<79754868,48144480,60613367>, r=92971746
-pos=<20721233,45043536,93948762>, r=70596524
-pos=<-46680111,37879564,53763782>, r=90648947
-pos=<16009840,86125003,58588086>, r=81028766
-pos=<20025736,5391570,85015946>, r=65810395
-pos=<33720066,104264468,55486952>, r=97930498
-pos=<-63554526,31193768,49947114>, r=97020908
-pos=<-55699886,23371204,32454537>, r=95415201
-pos=<73230725,36900143,48087090>, r=62677110
-pos=<-32963671,28309367,52478944>, r=66077418
-pos=<5939165,55024902,62755578>, r=64166779
-pos=<-24917309,29082130,46444648>, r=52769524
-pos=<7735621,49034186,60918429>, r=54542530
-pos=<4877732,8430499,59198278>, r=52101779
-pos=<83731770,35839732,49766995>, r=73797528
-pos=<-11074931,33743791,62322816>, r=59467077
-pos=<47699715,55835903,55060273>, r=63055430
-pos=<37657191,-9104085,74776203>, r=79882754
-pos=<-46744861,30151111,64292721>, r=93514232
-pos=<-13186319,46003906,17086538>, r=83758581
-pos=<32840031,56015193,64841941>, r=58156157
-pos=<6062205,42632964,47615029>, r=73781872
-pos=<-19799971,51835559,58790016>, r=82751306
-pos=<-30893469,30656893,46300617>, r=60176438
-pos=<-55830501,22240501,57274377>, r=97076042
-pos=<15868849,46019629,96676898>, r=79153313
-pos=<-16265649,52075245,75590161>, r=96256506
-pos=<14624864,56207969,57618910>, r=51527552
-pos=<318934,59504614,60032696>, r=71543938
-pos=<-23487442,41093331,19776590>, r=86459237
-pos=<67237678,41609284,51037661>, r=64343635
-pos=<-19179700,33732993,56360250>, r=61598596
-pos=<-34730837,5580174,61364913>, r=96727618
-pos=<53061020,1668645,85754857>, r=95492537
-pos=<3877306,43959248,85023639>, r=77431037
-pos=<-10413451,33996655,77197477>, r=73933065
-pos=<-15270541,18375898,55749133>, r=58855471
-pos=<37599773,64150517,58789624>, r=64998919
-pos=<6641382,32884368,86779494>, r=65348099
-pos=<-28989825,39572241,63995218>, r=84883334
-pos=<12972158,71582537,87975353>, r=98911274
-pos=<41852603,48069590,65721204>, r=60103061
-pos=<-12895423,34234299,51393776>, r=50848940
-pos=<76683281,42692313,48821155>, r=72655746
-pos=<9795431,-286238,55311954>, r=52014423
-pos=<-12408641,28693619,67844073>, r=61271790
-pos=<18776047,80030396,38475557>, r=64433947
-pos=<75995398,33442514,24888484>, r=78338116
-pos=<-22764877,22172460,58097441>, r=64901579
-pos=<10239772,40250323,68821851>, r=51158213
-pos=<-6984206,11263546,-3408779>, r=94670545
-pos=<-25723496,46861709,48289286>, r=73199930
-pos=<5729735,28403922,117678625>, r=92678286
-pos=<11079147,38654325,86908021>, r=66808654
-pos=<19012903,51490161,13432661>, r=60699507
-pos=<-19708767,24665073,51422478>, r=52677853
-pos=<2549542,80274103,46746108>, r=76796138
-pos=<-48466554,29995042,56395431>, r=87182744
-pos=<86083343,46696534,52688635>, r=89927531
-pos=<19978558,94248897,26059694>, r=89865438
-pos=<21928133,43444423,89266701>, r=63108468
-pos=<-32662150,34466095,53616954>, r=73070642
-pos=<-4767571,24202491,48306992>, r=52750940
-pos=<-6049891,44411137,66256832>, r=69043725
-pos=<14845730,-1633797,-11680131>, r=94009220
-pos=<65363,73430740,49753549>, r=75444608
-pos=<10919543,55374161,60523054>, r=57303105
-pos=<-33344704,36874381,61740346>, r=84284898
-pos=<90823294,32581102,47524970>, r=75388376
-pos=<56762466,39329407,28284461>, r=61595785
-pos=<14326905,38412743,-13806339>, r=79547110
-pos=<-27408929,29564102,49418580>, r=58717093
-pos=<72828690,34540465,56644790>, r=68473289
-pos=<-23879984,-80533415,-13926388>, r=52569551
-pos=<623363,23117915,46129959>, r=71699945
-pos=<-21310687,28343530,48201114>, r=50180986
-pos=<-11268087,54197123,60947343>, r=78738009
-pos=<62637156,43374891,28845119>, r=70955785
-pos=<101486863,29252465,58609523>, r=93807860
-pos=<-7121743,-17618647,50972485>, r=81924604
-pos=<33712412,33093334,104500328>, r=75765083
-pos=<70057598,30520257,59928664>, r=64965508
-pos=<13577885,32272356,41344051>, r=98076208
-pos=<8955771,46905424,22660149>, r=56944295
-pos=<-31671198,35282234,47777117>, r=67056086
-pos=<-28701991,29968381,30147369>, r=70177802
-pos=<46883174,34145057,15459578>, r=59357035
-pos=<-21541824,-3738229,54506228>, r=85997940
-pos=<-7165905,-13698956,55634555>, r=82711088
-pos=<-42136026,37824576,54914702>, r=87201260
-pos=<75444044,34090961,64356096>, r=78350113
-pos=<27070208,76993574,17498441>, r=80354253
-pos=<-24556265,40605071,29335340>, r=77481284
-pos=<7679148,40322729,74549753>, r=59518815
-pos=<64743952,34069862,51081505>, r=54354571
-pos=<7888777,51012156,-6093924>, r=90872090
-pos=<-38312643,6053130,45786004>, r=84257215
-pos=<-10907447,30880694,71717384>, r=65831363
-pos=<-21415341,33770607,55616361>, r=63127773
-pos=<-9268341,12931923,58776983>, r=61325095
-pos=<53680780,36878021,92991425>, r=88009224
-pos=<16325289,32873290,52486621>, r=50056228
-pos=<2379678,52409295,64101601>, r=66456683
-pos=<12407570,48986679,9677595>, r=68556317
-pos=<-23196672,47847216,47491952>, r=70861580
-pos=<17092834,24513176,91350037>, r=55955816
-pos=<8752629,37508985,49239757>, r=72585978
-pos=<52794942,76928483,47757542>, r=81940023
-pos=<12527582,-6613411,50632808>, r=50930382
-pos=<-70810892,45621857,-48305364>, r=62008194
-pos=<-18412210,36869794,57144258>, r=64752285
-pos=<87656632,20763685,66883781>, r=92122439
-pos=<61764769,33809145,-512978>, r=89875236
-pos=<-21591807,57503330,27237264>, r=93512809
-pos=<-8980322,48822102,24813214>, r=74644293
-pos=<-13586166,29673545,54387395>, r=49972553
-pos=<-21336027,12684379,50240160>, r=65103467
-pos=<15312696,61249932,61078049>, r=59340843
-pos=<3820682,55264026,85971673>, r=89740512
-pos=<-8720944,7901096,48785694>, r=55817204
-pos=<46676113,42744663,57067759>, r=50947525
-pos=<63180707,54936070,46238435>, r=68814227
-pos=<-59988823,31676130,52904181>, r=96894648
-pos=<-55767575,34582277,42911408>, r=89093361
-pos=<-24727493,22617024,22771261>, r=74880311
-pos=<30402823,52581940,78464394>, r=65908330
-pos=<-12446120,14245346,47969322>, r=52381926
-pos=<13932111,12087077,52306416>, r=71083363
-pos=<12361114,5008235,62369519>, r=51211858
-pos=<62655763,37235551,16180822>, r=77498932
-pos=<5158458,57101119,21414371>, r=72183092
-pos=<2908218,33006742,52557556>, r=82743046
-pos=<57439166,18173939,101222852>, r=98833513
-pos=<52238468,31780002,45678724>, r=78491149
-pos=<-45793920,10537217,50965371>, r=92433881
-pos=<-13743952,64107054,54632417>, r=84808943
-pos=<-170006460,33686904,57787874>, r=58950081
-pos=<-26862218,29083237,47085032>, r=55356188
-pos=<794530,52505491,57994889>, r=62031400
-pos=<62469765,31544111,56755533>, r=55228669
-pos=<33597386,32945456,56175425>, r=60893404
-pos=<67662625,38142990,51575060>, r=61839764
-pos=<-48808932,29332298,47264670>, r=77731645
-pos=<-13897506,80448804,52473065>, r=99144940
-pos=<-41499426,33500208,34694650>, r=81959864
-pos=<21500730,1820261,108639134>, r=91529831
-pos=<37273144,59821099,54577329>, r=56130643
-pos=<-21429926,6902774,61057229>, r=81796239
-pos=<3340434,50630706,26961101>, r=61983979
-pos=<20112657,-7766263,32920789>, r=50273913
-pos=<66869619,52342243,67598868>, r=91270061
-pos=<6129880,42603189,67116575>, r=55915349
-pos=<6398878,1688559,79467734>, r=77591971
-pos=<14501207,33194081,103787164>, r=74805573
-pos=<-41363813,41379031,51239687>, r=86308022
-pos=<-5072359,37511009,73502277>, r=68411104
-pos=<9979161,47203323,76860857>, r=66410591
-pos=<8272810,70008182,48415971>, r=62477175
-pos=<16131738,39072448,57020881>, r=66650334
-pos=<-18513223,15536711,73318828>, r=82507011
-pos=<-53344764,29150642,46822282>, r=81643567
-pos=<-19488382,39476575,49309757>, r=60600153
-pos=<17795545,86761153,34350936>, r=76269651
-pos=<-39860391,37740470,42830687>, r=76425286
-pos=<75357927,42659157,48122833>, r=70599033
-pos=<67060727,20786860,43203283>, r=50745152
-pos=<11307310,64243278,77782998>, r=83044472
diff --git a/2018/inputs/24.txt b/2018/inputs/24.txt
deleted file mode 100644
index 0c90bb1..0000000
--- a/2018/inputs/24.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-Immune System:
-2991 units each with 8084 hit points (weak to fire) with an attack that does 19 radiation damage at initiative 11
-4513 units each with 3901 hit points (weak to slashing; immune to bludgeoning, radiation) with an attack that does 7 bludgeoning damage at initiative 12
-5007 units each with 9502 hit points (immune to bludgeoning; weak to fire) with an attack that does 16 fire damage at initiative 2
-2007 units each with 5188 hit points (weak to radiation) with an attack that does 23 cold damage at initiative 9
-1680 units each with 1873 hit points (immune to bludgeoning; weak to radiation) with an attack that does 10 bludgeoning damage at initiative 10
-1344 units each with 9093 hit points (immune to bludgeoning, cold; weak to radiation) with an attack that does 63 cold damage at initiative 16
-498 units each with 2425 hit points (immune to fire, bludgeoning, cold) with an attack that does 44 slashing damage at initiative 3
-1166 units each with 7295 hit points with an attack that does 56 bludgeoning damage at initiative 8
-613 units each with 13254 hit points (immune to radiation, cold, fire) with an attack that does 162 radiation damage at initiative 15
-1431 units each with 2848 hit points (weak to radiation) with an attack that does 19 cold damage at initiative 1
-
-Infection:
-700 units each with 47055 hit points (weak to fire; immune to slashing) with an attack that does 116 fire damage at initiative 14
-2654 units each with 13093 hit points (weak to radiation) with an attack that does 8 radiation damage at initiative 19
-5513 units each with 18026 hit points (immune to radiation; weak to slashing) with an attack that does 6 slashing damage at initiative 20
-89 units each with 48412 hit points (weak to cold) with an attack that does 815 radiation damage at initiative 17
-2995 units each with 51205 hit points (weak to cold) with an attack that does 28 slashing damage at initiative 7
-495 units each with 21912 hit points with an attack that does 82 cold damage at initiative 13
-2911 units each with 13547 hit points with an attack that does 7 slashing damage at initiative 18
-1017 units each with 28427 hit points (immune to fire) with an attack that does 52 fire damage at initiative 4
-2048 units each with 29191 hit points (weak to bludgeoning) with an attack that does 22 bludgeoning damage at initiative 6
-1718 units each with 15725 hit points (immune to cold) with an attack that does 18 slashing damage at initiative 5
diff --git a/2018/inputs/25.txt b/2018/inputs/25.txt
deleted file mode 100644
index d359c48..0000000
--- a/2018/inputs/25.txt
+++ /dev/null
@@ -1,1248 +0,0 @@
--6,2,-8,3
-7,8,-1,-8
-7,-2,-4,-2
-4,-4,2,7
-5,8,-1,6
--1,6,-4,-5
--2,-6,-6,-6
-1,4,7,0
--1,-3,-8,2
-5,-6,-5,-2
--5,7,4,-2
--2,6,-1,6
-5,4,0,-7
-1,5,-8,-3
--3,3,8,2
-4,0,0,6
-4,-8,-3,3
-0,0,-7,-5
--2,0,5,-3
-2,1,7,-1
-1,6,2,2
-4,4,7,-6
--1,0,-1,1
-2,4,4,6
--4,3,-7,2
--5,-2,8,-7
-6,-8,-1,3
--8,-6,-7,-3
-4,1,-7,-1
--7,-5,-4,4
-5,-2,8,-5
--5,-1,4,-4
-3,-3,8,4
-3,8,-8,-7
--3,7,7,0
--7,-5,-3,5
--4,-5,-3,-2
-6,-8,3,8
--2,0,8,7
--4,3,5,7
--6,3,5,0
-5,2,-3,-3
-0,8,0,5
--5,-8,-1,-8
-2,6,0,6
-5,-4,0,0
-3,-2,-8,-5
-8,-4,-7,-7
--3,-7,-8,-2
-6,7,-2,3
-5,0,-6,0
-0,-6,0,2
-8,-4,6,-3
--5,-4,4,-4
-2,0,3,-1
-3,-5,8,5
-6,-1,5,5
--6,-5,-4,8
-7,-4,0,5
-5,3,1,6
--7,2,-3,1
--4,1,-6,-7
--4,4,0,8
--6,4,1,-8
-3,-6,-6,5
-2,-4,-3,2
--2,2,-2,1
-2,-4,0,0
-3,1,4,8
--1,3,-7,-5
--3,-7,2,0
--2,-2,-8,0
-1,6,0,7
--6,-3,0,-1
-7,0,-2,-7
-5,-5,-3,0
-7,0,0,5
--6,5,6,2
-0,8,3,-1
-0,-8,-7,-1
-3,6,7,-7
--2,4,-8,-3
-3,-3,-6,-4
--1,-5,0,2
--7,2,4,0
--2,7,4,-2
-2,4,-1,5
--1,-6,-6,4
-4,-6,-7,-2
--6,6,-4,-2
-5,-5,-2,-6
-4,5,4,0
-3,3,0,-5
--5,4,3,-2
--6,1,7,-6
-3,5,-8,5
--2,8,-2,-2
--5,6,-2,-7
--3,-6,7,-4
--8,-6,7,7
--5,-7,4,-4
--8,-8,-6,7
--7,-1,-2,-1
-3,-1,4,0
-3,6,1,-8
-2,6,-4,0
--6,4,4,6
-7,7,6,-5
-4,-3,-2,7
--1,8,2,-2
-3,-1,-4,5
--2,1,-6,-8
--3,1,7,-1
--7,-1,8,6
-4,2,6,-6
-8,-1,8,-8
-4,6,-1,4
-7,-1,6,5
-0,-6,2,3
--2,-8,-8,-6
-0,6,-4,-8
-4,-8,-7,6
--3,-3,2,2
-2,1,4,7
--3,7,-1,-8
-1,1,-2,-5
-3,-6,-4,7
--3,5,0,8
-3,3,1,0
-1,5,4,6
-7,0,-2,-5
-1,5,-3,7
--1,-4,3,4
--4,3,-2,0
--1,-8,2,0
--8,-8,3,-3
--2,-6,5,2
-8,-1,-3,-6
-2,-8,3,-5
--8,-8,3,4
--3,-5,-7,0
-0,3,1,3
--8,5,-6,4
-2,0,4,-2
--5,1,-7,0
--5,0,-2,1
-4,-7,0,3
-7,0,4,-1
-0,-3,5,4
--8,-8,-2,3
-2,5,4,6
-7,0,-8,-7
--1,8,3,-3
-1,-2,2,-4
--1,-3,3,-2
-4,6,7,-1
-3,8,2,-3
--1,-8,8,7
--8,4,7,-2
--8,2,-8,-7
--2,5,0,-5
--1,-2,-5,-5
-4,6,-2,0
-0,8,0,-4
-2,0,-2,-1
--8,0,-5,0
--2,-8,-5,6
-2,0,5,7
-6,0,7,0
--6,-8,3,-1
-2,2,6,-8
--8,7,-8,7
-5,0,7,-6
-0,-3,6,-4
--5,7,-6,-6
-2,5,0,-6
--6,8,-3,3
--8,-7,-1,-8
--1,3,0,0
-1,2,3,-7
--5,-1,7,2
-4,2,0,2
--6,-6,-1,-2
-1,0,8,-1
-0,-1,-8,7
-2,2,-6,-4
--2,3,2,6
--6,-6,-2,-3
--2,6,-2,1
-4,0,-8,7
-4,8,1,-1
-4,2,-2,5
-1,-2,-6,1
-1,5,-5,-4
-0,8,7,-6
-8,8,2,-3
--3,-4,-5,3
--2,6,-8,-1
--2,-2,-4,2
-0,6,-3,7
-8,3,-3,7
-6,0,-1,-6
-8,8,3,0
--7,0,8,7
--5,7,-2,0
-2,-7,7,3
-8,-5,0,0
--6,-8,1,-7
--7,-3,0,5
-5,6,1,-7
--3,8,-3,6
--4,0,-4,-5
-7,4,2,1
--7,-7,-8,6
-7,-7,4,4
--6,-2,-1,1
-5,7,-6,-5
-1,6,-2,5
--6,5,-6,3
--6,-8,0,0
-2,-4,2,8
-0,0,0,-8
--8,0,-2,2
-0,-4,-8,-8
-1,-5,-8,5
-6,-4,-5,6
-8,4,-5,-1
-8,-7,4,-4
--7,-6,-8,0
--2,3,-2,3
--8,-3,-6,-3
-0,5,5,0
-3,7,-8,6
-0,-7,-5,-1
-1,6,-4,-3
--4,5,-3,5
-7,-5,-5,8
--4,4,0,-8
-7,-7,0,2
-6,0,2,-8
--6,-4,1,0
--1,0,-2,4
--4,-8,5,7
--8,4,-5,-2
-2,8,-8,-8
--4,7,1,6
--2,-2,-7,3
-6,4,-1,0
--1,-7,-4,0
--4,0,3,0
-0,3,5,2
--4,-5,-1,0
-8,2,-6,0
--2,5,-3,8
-7,0,3,-2
-6,0,-5,0
-4,-6,-5,6
--7,8,0,-1
-8,-2,3,-4
-7,0,-4,7
--4,-6,-7,-7
-2,8,0,4
-1,-6,5,-6
-4,-7,-2,-2
-4,1,-6,2
-0,7,4,3
-4,1,-1,-5
-1,-4,6,-6
-1,2,-2,-2
-2,-2,6,-5
--8,6,-6,6
-0,6,8,2
--3,-2,0,-8
--6,-5,2,-6
-0,5,-8,-5
-1,-1,7,6
--6,-3,-7,-3
--4,-6,-1,0
-8,-3,-6,-2
--5,-2,6,-1
--1,0,3,1
-0,2,-6,7
-3,3,5,-2
-8,4,5,-1
--5,-1,0,-1
--6,-1,0,6
-2,6,-3,-3
-8,7,-8,4
--6,-8,-3,0
--1,-1,0,7
-6,-2,-8,4
--3,8,3,-1
-6,2,0,4
-0,-3,7,3
--5,3,-2,-1
--6,-7,-2,-3
-4,-5,-3,-6
--7,6,-2,4
--2,-5,7,0
-1,8,-8,7
-8,3,-3,4
--3,3,2,-4
-5,-7,4,1
-8,-3,-5,0
--5,-4,-1,-8
-2,1,-2,-3
--1,-4,-1,-7
--7,-8,-7,-2
-3,0,7,4
-6,3,7,7
-0,-2,-4,2
-0,-1,-6,7
--3,-8,-1,-7
--8,-6,-6,-4
--5,-4,-4,0
-0,7,-7,3
--8,-7,-6,-8
--5,3,0,-3
--7,-6,0,7
--7,6,-6,-2
--2,8,2,-4
-2,0,0,5
-0,5,-2,0
-8,-7,-7,-1
--1,3,2,-7
--3,4,-7,-4
--6,-3,2,-7
--7,5,4,3
-5,-1,-6,-2
-3,-7,1,0
--7,0,-4,-3
--6,8,-1,0
-3,8,4,-2
--1,-4,-8,-7
-3,3,8,1
--5,1,4,5
-8,8,-1,2
--3,-3,7,-4
-8,-3,2,-4
-6,-8,-6,8
-3,6,3,-2
--7,-2,6,-4
--6,-8,-8,5
-6,0,0,7
--6,7,0,7
-8,0,-6,-3
-0,-3,-7,0
--2,6,-7,-7
-5,-1,-3,0
-2,3,4,-5
-1,7,-6,0
-3,3,0,-3
--1,0,-8,-8
--2,5,-7,4
-7,-1,-8,5
--2,-1,-1,6
--2,-6,5,1
-4,-2,5,5
--7,8,4,7
--2,-2,6,5
--6,1,-5,3
--8,4,0,7
-8,-4,5,5
--4,8,-4,1
--8,0,5,4
-8,1,0,0
--6,-8,-6,-2
-2,-5,0,0
-5,-6,5,-4
-1,2,7,2
-8,-4,6,5
--6,0,7,6
-6,5,7,-6
--2,-6,-2,5
--6,-4,3,1
-6,-8,4,-4
-8,6,1,2
-7,5,7,-2
-7,-2,-6,-1
-4,-2,1,2
-1,1,-3,5
-0,-4,8,4
-5,2,-3,-4
-8,4,1,-3
--1,1,-8,1
--1,-1,0,5
--4,4,6,0
-0,6,-2,6
--3,4,5,5
--7,5,4,-4
-2,2,-2,-4
-8,-1,2,-5
--5,-2,6,-2
-7,2,1,6
--3,-2,4,-5
-8,8,-7,-8
-0,1,-8,-4
--3,-6,-3,3
--4,-4,8,4
--3,2,-4,-6
--6,5,-5,-2
--3,-7,-3,8
-0,6,-1,8
-8,0,7,1
-1,1,-8,-2
-6,-6,-7,3
-4,-5,8,-8
--3,-6,6,7
-8,-5,2,4
-2,5,-3,-4
--3,0,-6,7
--1,-7,7,0
-2,-3,-5,5
--7,-7,0,-2
-0,-4,7,8
-5,3,7,2
--2,-7,5,5
--6,-1,0,-8
--3,0,8,-5
--8,-1,1,1
-1,0,-6,8
--1,-5,8,4
--5,-4,4,8
-2,-3,0,-4
--4,-3,0,7
-5,6,5,-5
--3,-8,-3,-2
-5,8,-8,5
--7,-2,-2,-2
-7,6,8,6
-0,-6,4,-7
--1,-4,-7,0
-8,7,-6,6
-6,-5,-1,-3
-5,-2,-2,-3
-6,-3,-5,0
--8,5,6,-5
-3,-7,7,8
-1,3,-8,0
--6,8,-5,6
-6,-5,-5,-2
-3,8,1,-8
--8,5,2,0
-0,5,-3,6
--5,-7,-8,4
-0,7,0,0
--5,6,-5,6
--5,1,6,5
-6,1,-2,-8
-0,-8,3,1
-0,-3,-8,-3
-0,6,0,-2
--8,0,-7,-5
--8,2,0,6
-1,6,3,-4
-8,-5,0,-4
--6,7,0,0
-5,0,1,0
--8,8,2,8
--7,4,2,4
-0,3,-2,-4
--5,5,7,0
-5,0,-1,5
--7,8,-6,8
--8,-1,3,-3
-0,-7,-7,-7
--4,4,8,-2
-1,2,1,-4
-1,-5,-1,8
--3,8,-2,-2
-8,0,4,-4
--8,5,-5,3
--7,-7,-6,-2
-0,-6,-8,-8
--1,-2,-3,0
--4,0,1,7
-1,-6,-8,4
-0,8,6,-1
--8,-5,-7,8
-2,7,-8,4
--8,4,-3,2
-3,-1,-7,3
-4,-2,-6,-6
--1,-4,1,-2
-3,-4,2,-6
-2,4,5,-3
--7,7,1,6
-8,-6,-5,-3
--7,1,-6,0
--3,-6,-6,-8
--8,-5,-6,4
--5,-1,7,8
-0,7,6,2
-6,-2,-1,5
-0,4,-8,8
--3,-5,-8,0
-2,-6,-2,-1
-5,8,-6,4
--5,-1,0,-6
--8,-5,8,2
-5,6,-3,-3
--4,-7,2,6
-0,-3,-6,7
--4,-6,-8,-8
-6,7,1,3
-7,-2,4,-3
-4,2,3,1
-0,8,-3,-8
--8,0,1,0
-4,5,-4,-2
--2,-6,4,2
--4,0,-4,0
-8,-1,2,-2
-5,-7,8,1
--2,5,-6,1
-6,-7,3,-7
-2,1,0,6
--8,-3,-1,0
-8,-1,8,-3
-0,-6,6,0
-7,3,7,3
--8,0,6,-1
--5,-4,-5,0
--2,0,3,-7
-0,2,0,0
--3,6,6,3
--6,-3,-1,-3
-8,0,1,5
--7,4,-8,0
-8,8,-5,4
--2,0,-7,-4
--8,5,-7,-7
-8,0,-1,4
-8,-7,5,0
--6,-1,-4,2
--8,-8,6,-5
-7,2,-3,1
-2,0,2,6
-8,-7,-8,3
--2,-7,-8,0
-0,3,-1,4
--8,7,5,3
-0,-4,0,3
-6,6,-2,-6
--4,8,6,-3
-0,3,0,-4
-6,-2,1,5
-1,4,4,3
-0,-7,4,-1
-1,3,-8,-2
--5,0,4,0
-8,2,-6,-4
--8,8,-2,6
--5,7,-7,-2
-5,0,-4,-4
--1,-5,3,7
--2,-3,7,3
--3,4,2,0
--7,-8,1,3
--8,-8,-3,2
-0,5,-8,7
-1,7,-6,5
-2,-6,-5,0
--8,4,4,2
-7,3,1,-6
--5,-4,8,2
--7,7,0,0
-8,6,-1,6
-2,5,3,-7
--7,3,1,5
--8,-3,-4,3
-0,-2,0,8
--7,-7,-5,8
-3,6,3,0
--4,2,8,-4
--6,2,6,-3
-0,-7,-6,-7
-0,-6,3,-6
--4,-5,-5,-2
-1,-7,-2,-5
-5,7,0,4
-2,-1,3,-3
-7,1,-5,8
-0,3,0,2
-5,0,-5,-3
--2,6,2,5
-6,4,-4,-7
-4,-8,4,8
--5,-2,-6,7
--1,-4,-4,5
--2,-7,3,7
--3,-8,-2,2
-1,-2,-5,-3
-0,-4,-1,3
-4,8,2,-5
-8,6,-6,1
--8,-1,1,-4
-5,6,4,-8
--7,-6,-5,4
--3,-3,5,0
--6,7,2,1
--5,5,-1,0
-1,-8,2,0
-0,-3,-7,6
-4,-4,1,0
--4,-6,0,4
-4,0,4,0
-4,-7,3,-2
-0,-3,0,4
-2,-3,2,2
-2,0,0,-4
--8,6,6,4
-7,7,4,-2
-0,5,0,-1
-5,7,3,6
-5,2,4,-3
-5,4,-7,-6
--8,1,7,2
-0,5,8,-1
-5,-3,-6,0
--6,0,4,6
--2,-2,6,-6
--6,3,5,2
-8,-2,-3,-1
--8,1,3,-4
-1,-6,-5,-6
-8,-4,6,-1
--5,-7,-7,-5
--1,-6,1,-4
-4,2,-3,0
-7,1,-4,4
-2,6,-8,0
-7,7,2,-5
-5,-2,-8,-3
--5,0,3,2
--1,6,-1,-4
-6,4,-3,-4
-4,1,4,-6
-3,5,0,-1
-5,-3,7,2
-3,-3,-7,5
--3,-6,-1,2
--7,-6,5,5
--3,-7,1,-7
-5,5,-4,3
-6,-4,0,-1
--7,-8,-1,7
-6,1,3,8
-8,-3,-5,2
--3,1,-2,7
--3,8,3,-4
-0,-8,7,3
-5,0,-4,-3
-3,-8,2,4
--8,-3,6,-3
-0,6,-5,4
--2,-8,-2,0
--4,-4,-4,8
--6,8,-5,-1
--8,0,1,1
--4,3,1,-2
--1,-7,4,8
-3,0,7,-4
-5,7,3,-1
-7,-8,-3,1
-5,5,0,1
--3,-1,0,8
--6,-8,-4,1
--3,-1,-6,0
-0,-1,0,0
-6,0,0,8
-3,-1,-4,6
--4,4,0,-5
-3,7,1,7
--5,0,6,7
-5,-5,2,3
-5,-7,2,1
--6,1,-3,-6
-7,8,-2,8
-5,4,0,6
--8,-3,4,-3
--3,-6,2,6
-1,4,2,5
-0,7,6,-5
--1,7,5,4
-4,-5,-4,0
--2,1,4,-7
--2,0,0,8
-7,0,1,1
--3,-7,8,6
--2,-8,6,7
-6,3,-4,5
-5,2,-5,8
-4,-2,5,-2
-8,5,-4,-4
-2,6,-7,6
--4,-2,-6,-5
-0,5,-6,-1
-5,3,4,3
-4,2,1,5
-6,-6,-8,3
--7,2,3,-2
-0,2,2,1
-0,1,2,3
--6,4,1,-4
-7,-4,-1,4
--5,3,-3,0
-3,8,-3,-4
--2,-3,4,2
-4,7,-2,4
-4,-4,-3,-8
-1,0,-2,-6
-6,7,-4,0
--2,-7,2,-2
-0,4,2,2
--4,8,-1,0
--4,5,1,1
--2,-8,-1,4
-2,3,-3,4
--8,-4,-5,0
--6,3,0,2
-6,-5,1,0
-4,-2,-8,4
-0,7,-5,-2
--7,-3,5,-1
-5,7,-4,1
--3,-3,3,5
-2,0,-4,-4
--7,0,6,6
-4,-4,-3,-1
--6,6,-1,-6
--1,2,1,-8
--2,3,4,6
-5,8,-4,-8
-0,5,0,-4
--5,-3,7,7
-5,4,5,-2
-4,-2,8,-5
--4,2,-7,4
-1,-8,4,-4
-7,8,-7,3
-2,7,-8,-5
--1,-5,6,-7
-5,-4,7,-2
-0,-3,0,6
-0,-7,-2,2
-4,8,0,-1
-0,-3,5,-3
-5,-6,0,4
-1,-7,2,-2
--1,0,-3,1
--4,0,4,-6
-5,3,7,3
-7,-4,7,-8
--3,-5,3,7
-0,-6,8,2
-4,-6,-1,8
-0,-7,0,-8
--4,5,0,6
-7,6,-6,2
--6,-5,-7,3
-0,-1,4,-8
-4,6,-4,4
--4,-2,5,4
--8,-8,0,4
-2,-8,4,-1
-2,4,0,0
--6,-1,8,7
--6,5,8,-5
--3,-5,-7,-3
-3,-1,-5,-7
-0,4,-4,-7
-2,-4,-1,-6
--6,-6,0,5
-0,6,3,-5
-0,-3,8,2
-7,-6,6,-1
--3,7,-4,-5
--3,1,3,7
-5,-2,-6,-7
--6,3,-1,8
-0,0,-4,-2
--8,2,3,-4
-0,-2,-4,0
-1,8,-3,-7
--2,-4,3,0
-3,-8,7,0
--1,-6,3,-4
-3,0,8,4
-3,3,-5,-6
-5,0,-1,-2
-7,1,-4,8
-4,-5,3,-2
-4,-4,0,8
--4,2,1,-8
--8,0,-7,-2
-4,-2,0,0
--8,3,7,-8
-8,-8,6,-5
--8,0,3,-5
-6,3,-2,-3
-4,0,-5,7
--1,-5,-6,2
-4,-1,-7,2
--8,-1,-2,0
-1,7,-7,-2
-5,0,-5,-7
-8,-3,6,-2
-1,-6,2,-3
-6,-1,6,3
--7,4,3,4
--7,-5,-5,-4
--7,2,-8,-4
--5,8,3,-3
-1,2,-3,4
--6,-5,-4,1
-5,4,5,7
-0,0,-1,-4
-5,-8,3,-1
-5,6,-5,0
--7,-3,-6,0
-2,-8,0,1
-1,4,-7,-8
--4,-7,-6,3
-0,1,-1,0
--6,-1,6,0
-1,6,-4,-2
-8,-3,0,0
--2,0,-3,7
-3,8,-4,3
--8,7,2,0
-1,4,-6,3
-5,-3,4,-4
--3,-5,5,5
--6,4,-2,2
--4,0,2,4
--7,1,6,1
--2,2,4,6
--5,-2,6,0
--1,4,8,0
-0,8,6,-6
--6,6,-4,-7
--6,-7,3,0
-4,-1,3,4
-0,-7,-4,-6
--6,-5,-5,0
--2,-5,-4,0
-2,0,-8,6
--1,1,0,0
--6,-4,-3,-1
-7,5,-7,1
--5,-1,3,3
-6,1,0,1
-6,7,6,7
--3,1,0,-3
--5,-1,-6,4
--5,1,1,8
-8,-1,-2,-6
-3,0,6,7
-0,8,4,0
--8,0,-2,5
--4,-3,-5,5
--5,3,2,5
--2,-3,0,-6
--3,-4,1,-2
-8,-4,-7,-6
-2,8,6,-7
-3,-1,1,-6
-0,-8,1,3
--2,-4,8,0
-7,-7,-3,5
-8,5,6,-5
--3,7,2,8
-6,-1,-7,1
--4,0,-2,-2
-7,8,1,-3
--2,5,8,6
--7,-5,0,3
--7,3,-1,6
-2,-1,-4,0
--8,-6,2,-8
--7,-5,-5,1
-0,-5,-4,4
-5,-2,-3,-8
--5,-8,1,4
-5,0,7,-4
-8,7,1,-1
--4,-1,-5,2
-4,8,-6,1
--3,2,3,4
--5,-2,1,3
--3,5,5,4
--6,4,-1,5
-6,1,3,0
-0,-4,-5,0
--4,4,2,6
--7,-8,-6,7
-8,4,5,1
-0,5,-3,-1
-3,6,5,-8
-1,8,3,-6
-3,-3,-5,-8
--7,5,-5,0
--6,4,0,-6
--7,7,6,-3
--3,-1,7,8
--7,-7,1,-4
--7,-1,-8,6
-6,0,-2,2
--5,-8,0,7
--5,-4,8,4
-1,5,4,2
-8,8,-2,6
--3,2,-2,1
--5,-2,1,-2
-8,8,-8,-4
--7,-8,8,-4
-0,-6,8,-2
--6,8,1,0
--8,0,8,-4
--6,5,1,2
-1,7,5,-2
--4,1,0,-7
-2,-8,3,7
--1,-6,-2,-1
-3,-5,-1,7
-0,-7,2,1
-0,8,2,0
--1,-2,-8,-2
-6,2,5,0
-7,-8,-8,0
--2,1,2,6
--3,-7,-4,2
-7,1,4,-3
-5,4,-1,1
-8,-8,8,-7
-3,7,7,-1
-0,-7,0,-4
--4,2,7,-7
--7,2,-5,7
-7,-3,2,0
--8,1,2,0
-5,8,8,-3
-0,7,-2,7
--3,0,0,-1
-6,8,3,-1
-1,0,-8,0
-8,-5,6,6
-3,0,0,3
-1,4,-4,4
--2,-5,-3,3
-7,3,-1,-1
-2,-5,1,-5
--3,-2,6,6
-0,7,-2,-2
-0,0,3,-7
--1,-7,2,-2
--6,-1,0,1
--4,1,1,8
--4,-6,1,1
-5,7,3,-3
-8,-2,4,2
-0,-6,5,-8
-4,5,0,-6
-1,0,-2,-1
--6,0,0,-6
--5,-7,-4,-6
--8,8,-5,-2
-1,-7,0,4
-4,6,8,1
--2,-6,6,6
-7,1,-6,0
--5,6,-4,0
--4,1,1,4
-8,-7,-1,4
--7,8,4,-2
-8,5,-7,3
-2,-5,5,-1
--5,-5,3,8
--5,-3,-7,6
-5,2,2,1
--1,-7,-5,2
-0,7,8,-5
-6,-4,5,0
--1,5,-2,8
--8,7,0,7
--4,8,-1,1
-5,-1,1,-2
-2,-3,8,0
-0,6,-1,1
--2,7,-7,8
--6,1,-1,6
-5,7,-6,0
--5,-1,-6,-6
--2,3,-8,-5
-1,5,-7,-8
-7,-5,-2,5
--5,7,5,-2
--5,0,0,7
--4,-4,0,0
--3,0,2,-7
-5,4,3,-1
--5,-7,7,5
--2,-3,4,5
--5,-3,4,2
--7,0,-5,3
-0,0,-8,8
-0,5,-7,4
--8,-3,8,-2
--5,8,-2,-5
--8,8,0,0
--8,-3,5,-1
--6,1,8,-3
-3,7,-6,3
--6,6,2,5
-1,-4,-3,0
--8,-8,5,3
-1,-4,8,-2
-4,7,3,1
-7,0,4,0
-0,3,-4,-2
--7,3,7,4
--4,-7,-1,3
-1,-7,2,1
-3,3,-5,-1
-5,-7,2,2
-1,-4,-4,0
--8,5,-3,-1
-3,-3,4,0
-7,0,4,-5
-0,1,1,2
-1,-5,6,-5
--3,2,7,7
--3,-3,6,2
-2,-2,0,-3
-3,8,-3,2
--1,1,3,-4
-2,7,4,8
-7,6,-1,6
-8,8,6,5
-2,8,-6,-7
--1,-3,-3,3
-4,0,-5,-1
--4,-4,-1,2
-2,-1,-2,-3
-3,3,-3,1
--1,3,2,2
-4,1,4,7
--1,-6,-4,2
--5,-5,2,-1
--2,2,0,-5
--1,-8,5,-2
--6,1,-1,-1
--8,-8,0,2
-7,8,-7,-1
--6,7,0,-6
--4,4,8,-7
-7,1,5,7
--5,2,2,-5
-1,-2,-3,0
-0,7,-8,-5
--1,0,-5,6
--6,1,-4,-3
-8,2,4,-7
-0,-3,0,-7
-6,-5,-8,-4
--3,4,-3,7
-0,-1,-8,2
-3,1,-8,0
--8,1,3,7
--7,1,8,6
-7,7,-3,7
-4,0,2,-3
-0,-2,1,-7
--7,6,-3,7
--3,8,-7,4
-6,4,2,5
-3,-3,6,-7
-6,-8,-3,-1
--2,-8,-8,4
--3,-2,1,6
-3,1,-1,-1
-8,6,7,5
-5,7,7,-8
--7,3,3,4
-8,6,-5,-4
-1,-4,-5,-3
-4,6,-6,-6
--3,4,0,7
-1,-4,-3,8
-3,-7,-2,1
-2,-4,4,8
--5,1,-7,5
-0,-5,0,3
-0,7,-8,5
--8,-2,1,3
--5,8,8,6
-0,5,4,-1
-0,-8,-7,8
-3,2,1,-7
-2,-3,4,1
-5,4,7,-3
--8,-3,7,-3
--2,5,6,-5
-5,0,0,-3
--4,6,6,1
-8,-2,-5,2
-0,4,-2,3
--8,-5,-8,6
--5,0,5,7
--7,1,-8,4
-7,2,6,-2
--2,-7,-2,6
--7,7,0,5
--5,-3,1,4
--4,8,2,3
--7,0,0,-6
-2,4,0,8
-2,7,7,0
-7,4,-4,-3
-2,7,5,7
--3,4,1,3
--2,-3,-3,1
-2,8,-1,8
-0,-7,6,8
-1,6,5,5
--8,-6,-6,-5
-6,-8,-8,-1
--8,3,3,3
-5,-7,7,-2
-5,8,1,6
-0,2,3,5
--2,7,-7,-3
--5,6,1,-5
-6,7,-1,4
-8,-3,6,-7
-5,0,-8,3
-0,6,2,0
--8,-6,-6,5
-0,7,2,-3
-1,-4,6,-7
--6,7,0,4
-4,-4,0,4
-6,3,7,-2
-3,-8,2,3
-0,5,3,-8
-2,6,7,4
-2,-7,-5,1
--8,-3,-2,4
--7,-7,0,4
--4,-5,-6,1
--6,-6,0,-3
--8,8,-3,-4
--6,7,1,-6
--5,4,0,7
--4,-1,5,3
-5,-7,3,1
-0,-4,-6,-3
-6,-6,-1,-5
-3,1,5,-3
--1,1,2,-3
-0,7,-1,-7
--8,0,8,0
-0,8,0,-6
-2,-7,2,0
-0,-1,-2,-7
--2,0,1,1
-1,-7,8,4
-3,-6,0,7
-0,0,-5,4
-2,-7,0,6
--6,4,5,-7
--3,5,7,4
--2,-1,7,8
--7,0,-2,-4
-3,-6,6,0
-5,-4,-4,4
-6,8,8,-3
-6,-6,-6,3
-2,-3,-3,-3
-8,-5,-2,0
--3,5,7,-4
--7,-8,1,5
-0,-1,-1,-1
-8,1,7,-8
-4,4,2,4
-6,2,-1,2
--5,6,-6,5
--2,-5,-3,4
-6,-3,-4,0
-8,8,-5,-7
-2,2,0,-3
--5,-8,1,2
-7,-6,-2,8
--5,0,-3,3
--2,7,-4,-5
-8,-1,-6,1
-7,6,-1,-4
--3,0,2,1
-0,0,5,0
--1,8,-2,3
--3,2,1,-8
-1,7,-7,0
-1,4,-1,0
-6,-4,3,-2
--1,-6,-2,2
--2,2,2,2
-2,0,-3,5
--4,1,-8,-3
--4,1,5,-7
--6,8,1,4
-5,3,0,1
--8,-7,7,-1
--8,-3,1,-7
-0,2,4,7
-6,7,2,-8
-4,1,2,8
-3,-2,1,-5
-8,2,-7,6
-8,0,5,3
--7,4,8,-7
-3,8,-1,-7
--1,-5,-2,0
--3,0,6,3
-6,5,-3,-2
-1,8,7,-2
--4,-1,-7,-2
--6,-1,8,3
-8,-1,5,-6
-5,0,5,2
--4,8,0,-1
--5,2,7,-3
-5,-2,-6,5
-4,-4,4,0
--7,-1,-5,-5
--8,-5,4,5
-4,-6,-8,3
-7,2,7,-5
-1,6,2,-3
--3,3,-8,0
-1,-6,7,-3
--5,8,6,-3
--3,-2,-4,-6
-7,-7,-2,1
-5,4,-7,-1
-3,-4,-5,-1
--1,-5,6,-1
--8,4,-5,1
diff --git a/2018/inputs/3.txt b/2018/inputs/3.txt
deleted file mode 100644
index 4701818..0000000
--- a/2018/inputs/3.txt
+++ /dev/null
@@ -1,1385 +0,0 @@
-#1 @ 342,645: 25x20
-#2 @ 124,968: 28x19
-#3 @ 680,765: 26x20
-#4 @ 832,699: 12x15
-#5 @ 4,746: 29x14
-#6 @ 926,115: 19x17
-#7 @ 662,587: 28x12
-#8 @ 532,568: 27x23
-#9 @ 860,23: 16x21
-#10 @ 530,562: 12x27
-#11 @ 15,254: 10x27
-#12 @ 375,611: 18x10
-#13 @ 357,389: 22x23
-#14 @ 483,392: 14x16
-#15 @ 426,705: 17x13
-#16 @ 273,918: 23x28
-#17 @ 873,722: 13x13
-#18 @ 429,749: 12x25
-#19 @ 701,937: 14x11
-#20 @ 89,231: 23x26
-#21 @ 704,220: 10x27
-#22 @ 481,847: 21x24
-#23 @ 9,378: 14x19
-#24 @ 682,442: 10x21
-#25 @ 242,63: 21x23
-#26 @ 748,871: 20x13
-#27 @ 784,338: 25x25
-#28 @ 966,669: 20x20
-#29 @ 589,833: 22x25
-#30 @ 489,489: 16x24
-#31 @ 976,478: 4x4
-#32 @ 739,826: 13x15
-#33 @ 783,753: 21x17
-#34 @ 433,367: 22x11
-#35 @ 32,841: 10x20
-#36 @ 258,497: 26x28
-#37 @ 632,776: 18x25
-#38 @ 517,389: 20x14
-#39 @ 446,740: 19x26
-#40 @ 667,455: 15x14
-#41 @ 664,252: 25x26
-#42 @ 227,45: 29x21
-#43 @ 127,138: 29x27
-#44 @ 466,308: 19x17
-#45 @ 356,134: 12x19
-#46 @ 609,640: 28x24
-#47 @ 677,228: 16x27
-#48 @ 149,610: 10x28
-#49 @ 863,498: 21x28
-#50 @ 913,511: 12x27
-#51 @ 748,761: 24x11
-#52 @ 802,288: 10x22
-#53 @ 26,442: 29x20
-#54 @ 85,464: 20x21
-#55 @ 262,944: 21x18
-#56 @ 876,753: 15x10
-#57 @ 105,199: 23x19
-#58 @ 335,848: 23x24
-#59 @ 467,537: 24x22
-#60 @ 552,217: 14x13
-#61 @ 534,820: 10x19
-#62 @ 261,579: 25x13
-#63 @ 541,445: 19x17
-#64 @ 869,769: 28x11
-#65 @ 447,668: 25x26
-#66 @ 42,734: 18x16
-#67 @ 553,233: 13x13
-#68 @ 47,861: 12x16
-#69 @ 33,834: 21x14
-#70 @ 240,174: 29x13
-#71 @ 611,362: 24x14
-#72 @ 899,371: 21x21
-#73 @ 340,5: 23x23
-#74 @ 69,246: 14x18
-#75 @ 432,558: 11x10
-#76 @ 737,175: 27x20
-#77 @ 623,365: 15x22
-#78 @ 666,453: 26x28
-#79 @ 368,774: 25x10
-#80 @ 923,879: 18x16
-#81 @ 37,315: 16x23
-#82 @ 119,279: 18x26
-#83 @ 928,850: 20x18
-#84 @ 896,902: 18x16
-#85 @ 332,590: 28x13
-#86 @ 902,815: 27x21
-#87 @ 215,508: 19x12
-#88 @ 981,57: 10x15
-#89 @ 706,393: 21x24
-#90 @ 975,369: 10x11
-#91 @ 635,845: 29x18
-#92 @ 831,543: 15x16
-#93 @ 296,865: 19x10
-#94 @ 889,189: 24x19
-#95 @ 59,749: 11x22
-#96 @ 739,946: 24x27
-#97 @ 536,759: 27x29
-#98 @ 982,234: 17x11
-#99 @ 639,615: 26x25
-#100 @ 867,397: 26x29
-#101 @ 881,784: 19x19
-#102 @ 215,912: 22x28
-#103 @ 127,336: 10x15
-#104 @ 313,729: 15x12
-#105 @ 695,74: 17x28
-#106 @ 748,187: 11x16
-#107 @ 809,2: 16x27
-#108 @ 891,192: 17x18
-#109 @ 72,920: 16x20
-#110 @ 41,967: 22x28
-#111 @ 91,733: 22x20
-#112 @ 464,641: 13x13
-#113 @ 464,860: 17x10
-#114 @ 623,106: 13x28
-#115 @ 358,85: 24x21
-#116 @ 774,944: 19x28
-#117 @ 752,587: 11x20
-#118 @ 635,103: 25x11
-#119 @ 498,36: 17x11
-#120 @ 227,659: 15x13
-#121 @ 924,553: 13x13
-#122 @ 775,297: 23x24
-#123 @ 479,866: 10x11
-#124 @ 387,798: 11x28
-#125 @ 526,847: 19x27
-#126 @ 747,861: 11x25
-#127 @ 789,652: 14x10
-#128 @ 419,7: 17x13
-#129 @ 356,142: 26x10
-#130 @ 436,239: 14x27
-#131 @ 555,710: 14x23
-#132 @ 871,447: 13x27
-#133 @ 473,730: 14x14
-#134 @ 558,170: 16x18
-#135 @ 888,882: 29x25
-#136 @ 834,147: 24x18
-#137 @ 721,467: 28x12
-#138 @ 223,105: 28x26
-#139 @ 285,326: 28x23
-#140 @ 584,300: 3x6
-#141 @ 710,754: 23x21
-#142 @ 283,892: 21x14
-#143 @ 448,894: 18x3
-#144 @ 380,479: 16x15
-#145 @ 703,57: 16x20
-#146 @ 692,448: 24x11
-#147 @ 926,350: 20x26
-#148 @ 167,528: 25x12
-#149 @ 444,722: 28x21
-#150 @ 166,183: 15x18
-#151 @ 546,472: 29x18
-#152 @ 532,900: 12x22
-#153 @ 215,490: 29x20
-#154 @ 678,458: 25x23
-#155 @ 601,462: 24x11
-#156 @ 484,514: 12x11
-#157 @ 863,763: 10x18
-#158 @ 653,452: 16x23
-#159 @ 464,302: 13x21
-#160 @ 868,65: 21x18
-#161 @ 227,824: 20x11
-#162 @ 111,629: 29x19
-#163 @ 55,554: 27x21
-#164 @ 0,757: 21x17
-#165 @ 418,861: 13x16
-#166 @ 932,903: 12x16
-#167 @ 429,772: 11x14
-#168 @ 706,805: 11x23
-#169 @ 487,24: 26x15
-#170 @ 806,900: 16x16
-#171 @ 580,719: 24x22
-#172 @ 458,481: 20x17
-#173 @ 343,488: 18x11
-#174 @ 734,342: 12x27
-#175 @ 320,439: 4x3
-#176 @ 446,635: 26x25
-#177 @ 552,683: 11x23
-#178 @ 181,168: 26x24
-#179 @ 851,583: 27x28
-#180 @ 879,363: 10x11
-#181 @ 884,139: 11x21
-#182 @ 912,88: 24x27
-#183 @ 52,35: 22x18
-#184 @ 657,705: 11x14
-#185 @ 370,777: 11x17
-#186 @ 801,354: 21x24
-#187 @ 773,546: 16x20
-#188 @ 888,322: 19x11
-#189 @ 807,788: 27x13
-#190 @ 465,956: 19x29
-#191 @ 369,770: 13x21
-#192 @ 311,137: 12x14
-#193 @ 148,150: 19x29
-#194 @ 389,613: 28x25
-#195 @ 429,373: 10x25
-#196 @ 892,148: 20x15
-#197 @ 890,271: 11x19
-#198 @ 58,861: 18x19
-#199 @ 449,255: 9x5
-#200 @ 257,887: 27x15
-#201 @ 383,616: 20x18
-#202 @ 663,657: 18x21
-#203 @ 331,648: 25x13
-#204 @ 509,53: 10x28
-#205 @ 86,287: 15x20
-#206 @ 753,190: 20x20
-#207 @ 922,527: 19x12
-#208 @ 132,948: 20x26
-#209 @ 883,786: 15x21
-#210 @ 117,592: 27x15
-#211 @ 960,611: 13x22
-#212 @ 829,769: 14x19
-#213 @ 669,686: 17x13
-#214 @ 276,787: 27x10
-#215 @ 619,909: 18x22
-#216 @ 418,209: 21x25
-#217 @ 231,831: 27x18
-#218 @ 336,538: 22x18
-#219 @ 180,783: 14x23
-#220 @ 609,263: 22x10
-#221 @ 360,982: 21x16
-#222 @ 775,813: 14x26
-#223 @ 906,198: 10x24
-#224 @ 937,144: 28x28
-#225 @ 475,903: 24x12
-#226 @ 887,149: 11x16
-#227 @ 927,259: 20x25
-#228 @ 71,862: 29x26
-#229 @ 136,954: 26x17
-#230 @ 721,827: 15x13
-#231 @ 769,931: 21x25
-#232 @ 728,119: 13x28
-#233 @ 654,942: 13x27
-#234 @ 434,737: 18x13
-#235 @ 672,331: 27x20
-#236 @ 816,17: 25x21
-#237 @ 251,781: 28x20
-#238 @ 342,209: 16x10
-#239 @ 581,434: 23x22
-#240 @ 782,100: 14x11
-#241 @ 878,831: 14x12
-#242 @ 667,233: 19x28
-#243 @ 237,650: 28x24
-#244 @ 425,738: 11x15
-#245 @ 936,470: 23x23
-#246 @ 68,321: 21x19
-#247 @ 356,539: 27x29
-#248 @ 945,353: 18x23
-#249 @ 906,933: 22x28
-#250 @ 360,812: 10x29
-#251 @ 884,774: 17x27
-#252 @ 413,769: 23x20
-#253 @ 594,75: 21x15
-#254 @ 676,702: 15x11
-#255 @ 233,529: 27x25
-#256 @ 173,236: 15x17
-#257 @ 907,949: 16x13
-#258 @ 809,570: 24x10
-#259 @ 67,678: 29x22
-#260 @ 176,951: 25x18
-#261 @ 754,625: 10x18
-#262 @ 142,270: 26x29
-#263 @ 558,673: 24x19
-#264 @ 224,27: 24x14
-#265 @ 725,829: 7x6
-#266 @ 703,941: 9x3
-#267 @ 880,864: 28x27
-#268 @ 727,445: 25x24
-#269 @ 747,520: 17x15
-#270 @ 850,410: 26x21
-#271 @ 363,964: 10x16
-#272 @ 752,721: 23x16
-#273 @ 295,351: 26x20
-#274 @ 899,877: 26x16
-#275 @ 95,804: 20x28
-#276 @ 543,866: 20x16
-#277 @ 917,887: 19x27
-#278 @ 449,474: 16x22
-#279 @ 673,459: 28x23
-#280 @ 971,786: 13x17
-#281 @ 42,176: 21x18
-#282 @ 531,886: 15x13
-#283 @ 679,438: 15x22
-#284 @ 161,659: 19x25
-#285 @ 838,148: 15x23
-#286 @ 496,732: 26x14
-#287 @ 482,256: 19x26
-#288 @ 389,941: 27x25
-#289 @ 352,255: 23x15
-#290 @ 825,688: 25x24
-#291 @ 894,313: 23x20
-#292 @ 906,553: 21x17
-#293 @ 293,130: 21x13
-#294 @ 549,80: 25x18
-#295 @ 85,871: 20x10
-#296 @ 876,734: 20x24
-#297 @ 831,935: 14x17
-#298 @ 618,819: 23x20
-#299 @ 750,70: 24x14
-#300 @ 749,711: 22x17
-#301 @ 555,801: 17x12
-#302 @ 544,64: 28x21
-#303 @ 114,413: 21x22
-#304 @ 215,526: 13x21
-#305 @ 147,31: 25x12
-#306 @ 679,427: 18x17
-#307 @ 634,930: 23x24
-#308 @ 41,419: 21x28
-#309 @ 892,162: 18x24
-#310 @ 812,886: 19x14
-#311 @ 440,700: 28x13
-#312 @ 586,832: 28x21
-#313 @ 255,687: 13x22
-#314 @ 945,879: 22x16
-#315 @ 480,731: 18x11
-#316 @ 738,731: 15x10
-#317 @ 528,621: 11x16
-#318 @ 243,787: 28x26
-#319 @ 512,493: 22x13
-#320 @ 762,692: 27x11
-#321 @ 316,57: 12x14
-#322 @ 410,860: 17x12
-#323 @ 772,591: 14x24
-#324 @ 813,221: 13x11
-#325 @ 161,271: 12x14
-#326 @ 520,597: 26x19
-#327 @ 577,129: 25x20
-#328 @ 448,31: 10x15
-#329 @ 594,33: 16x27
-#330 @ 170,498: 25x19
-#331 @ 882,833: 6x4
-#332 @ 190,548: 12x26
-#333 @ 639,879: 28x25
-#334 @ 473,817: 19x26
-#335 @ 543,458: 11x23
-#336 @ 676,657: 26x25
-#337 @ 786,353: 28x17
-#338 @ 873,508: 14x17
-#339 @ 208,782: 17x27
-#340 @ 392,542: 10x26
-#341 @ 672,650: 29x23
-#342 @ 446,637: 20x18
-#343 @ 534,58: 16x15
-#344 @ 696,760: 23x17
-#345 @ 265,767: 18x15
-#346 @ 105,750: 12x16
-#347 @ 731,438: 28x10
-#348 @ 535,833: 24x21
-#349 @ 72,531: 18x28
-#350 @ 640,734: 27x21
-#351 @ 156,265: 15x16
-#352 @ 227,299: 24x22
-#353 @ 552,492: 11x29
-#354 @ 605,95: 14x20
-#355 @ 665,490: 11x25
-#356 @ 456,289: 25x12
-#357 @ 876,516: 13x18
-#358 @ 26,163: 20x28
-#359 @ 228,769: 19x11
-#360 @ 766,766: 16x12
-#361 @ 167,654: 13x28
-#362 @ 728,185: 20x25
-#363 @ 321,340: 23x20
-#364 @ 327,175: 18x14
-#365 @ 83,860: 10x19
-#366 @ 361,177: 20x24
-#367 @ 282,505: 18x16
-#368 @ 780,44: 29x28
-#369 @ 854,406: 15x25
-#370 @ 142,928: 10x19
-#371 @ 114,594: 11x20
-#372 @ 775,78: 26x24
-#373 @ 264,791: 28x12
-#374 @ 789,217: 24x20
-#375 @ 931,559: 19x22
-#376 @ 523,549: 22x20
-#377 @ 744,356: 23x24
-#378 @ 630,746: 25x11
-#379 @ 339,201: 11x28
-#380 @ 777,698: 25x14
-#381 @ 198,933: 29x21
-#382 @ 222,919: 27x25
-#383 @ 356,648: 16x19
-#384 @ 237,915: 10x12
-#385 @ 10,864: 17x26
-#386 @ 494,808: 29x23
-#387 @ 440,547: 24x25
-#388 @ 688,247: 10x16
-#389 @ 95,580: 16x19
-#390 @ 374,8: 12x27
-#391 @ 287,332: 20x26
-#392 @ 453,940: 24x22
-#393 @ 344,878: 10x22
-#394 @ 541,277: 16x18
-#395 @ 965,360: 24x12
-#396 @ 280,878: 21x20
-#397 @ 680,384: 25x19
-#398 @ 670,76: 12x12
-#399 @ 540,457: 18x20
-#400 @ 524,406: 17x16
-#401 @ 625,272: 25x22
-#402 @ 100,906: 26x12
-#403 @ 281,871: 7x10
-#404 @ 275,849: 21x26
-#405 @ 357,559: 13x13
-#406 @ 918,753: 25x21
-#407 @ 270,837: 25x17
-#408 @ 780,84: 20x20
-#409 @ 503,893: 11x13
-#410 @ 154,609: 12x23
-#411 @ 871,739: 21x22
-#412 @ 529,698: 27x27
-#413 @ 376,844: 14x23
-#414 @ 498,876: 13x21
-#415 @ 893,958: 15x27
-#416 @ 635,498: 20x20
-#417 @ 571,884: 24x21
-#418 @ 336,586: 24x24
-#419 @ 0,206: 29x16
-#420 @ 655,64: 24x11
-#421 @ 436,648: 28x16
-#422 @ 952,593: 17x11
-#423 @ 643,6: 17x18
-#424 @ 224,166: 29x11
-#425 @ 818,905: 15x14
-#426 @ 18,863: 18x11
-#427 @ 497,902: 15x10
-#428 @ 564,545: 16x29
-#429 @ 657,446: 18x20
-#430 @ 245,25: 17x11
-#431 @ 936,346: 23x24
-#432 @ 127,152: 24x19
-#433 @ 563,928: 19x27
-#434 @ 684,407: 27x13
-#435 @ 737,584: 15x15
-#436 @ 644,837: 16x14
-#437 @ 702,978: 20x15
-#438 @ 422,65: 11x16
-#439 @ 121,142: 13x20
-#440 @ 68,437: 19x16
-#441 @ 121,382: 24x28
-#442 @ 805,910: 29x14
-#443 @ 795,432: 21x20
-#444 @ 269,735: 25x22
-#445 @ 226,877: 11x17
-#446 @ 550,450: 29x18
-#447 @ 606,726: 14x25
-#448 @ 46,546: 10x19
-#449 @ 320,95: 11x25
-#450 @ 935,419: 12x15
-#451 @ 453,862: 13x16
-#452 @ 315,500: 23x12
-#453 @ 181,127: 17x18
-#454 @ 243,907: 19x13
-#455 @ 263,960: 29x22
-#456 @ 509,159: 14x17
-#457 @ 486,810: 23x21
-#458 @ 560,945: 25x13
-#459 @ 6,400: 24x28
-#460 @ 368,783: 17x23
-#461 @ 75,792: 26x29
-#462 @ 543,395: 22x23
-#463 @ 47,464: 19x10
-#464 @ 342,494: 27x24
-#465 @ 911,861: 19x25
-#466 @ 94,272: 23x23
-#467 @ 420,516: 15x26
-#468 @ 146,233: 20x27
-#469 @ 201,907: 10x23
-#470 @ 446,887: 23x16
-#471 @ 468,702: 14x27
-#472 @ 799,865: 23x25
-#473 @ 451,242: 27x20
-#474 @ 915,801: 28x27
-#475 @ 471,445: 23x16
-#476 @ 381,751: 26x28
-#477 @ 903,539: 23x21
-#478 @ 621,280: 13x26
-#479 @ 658,132: 27x19
-#480 @ 136,639: 22x26
-#481 @ 24,185: 22x23
-#482 @ 732,779: 25x25
-#483 @ 760,858: 20x22
-#484 @ 24,408: 26x19
-#485 @ 457,627: 20x16
-#486 @ 353,284: 20x10
-#487 @ 920,899: 10x3
-#488 @ 436,694: 11x17
-#489 @ 849,162: 17x16
-#490 @ 786,236: 27x20
-#491 @ 709,245: 11x28
-#492 @ 462,389: 13x17
-#493 @ 738,88: 27x21
-#494 @ 111,617: 24x24
-#495 @ 896,764: 11x23
-#496 @ 473,321: 23x16
-#497 @ 589,67: 17x16
-#498 @ 183,298: 18x17
-#499 @ 557,675: 10x11
-#500 @ 875,298: 21x17
-#501 @ 128,420: 18x25
-#502 @ 158,17: 27x26
-#503 @ 966,380: 13x29
-#504 @ 571,449: 15x28
-#505 @ 968,404: 12x27
-#506 @ 722,350: 10x24
-#507 @ 247,595: 17x25
-#508 @ 65,734: 22x21
-#509 @ 411,715: 25x12
-#510 @ 123,742: 15x12
-#511 @ 439,687: 19x12
-#512 @ 829,932: 12x13
-#513 @ 893,146: 23x19
-#514 @ 861,131: 15x23
-#515 @ 551,85: 20x7
-#516 @ 957,437: 22x17
-#517 @ 777,65: 22x24
-#518 @ 638,851: 24x21
-#519 @ 116,492: 12x29
-#520 @ 187,785: 3x18
-#521 @ 791,56: 17x27
-#522 @ 406,108: 28x28
-#523 @ 695,252: 21x16
-#524 @ 498,247: 24x17
-#525 @ 301,235: 19x27
-#526 @ 14,173: 13x10
-#527 @ 116,587: 11x29
-#528 @ 170,247: 18x22
-#529 @ 714,745: 20x23
-#530 @ 682,474: 27x19
-#531 @ 838,605: 23x22
-#532 @ 684,330: 20x18
-#533 @ 754,852: 27x25
-#534 @ 885,197: 24x26
-#535 @ 97,256: 16x18
-#536 @ 604,669: 20x19
-#537 @ 612,14: 18x29
-#538 @ 278,738: 8x14
-#539 @ 102,976: 13x15
-#540 @ 50,860: 16x12
-#541 @ 574,411: 16x22
-#542 @ 124,894: 26x20
-#543 @ 848,521: 25x25
-#544 @ 271,287: 25x27
-#545 @ 253,656: 21x16
-#546 @ 547,979: 18x11
-#547 @ 444,332: 12x26
-#548 @ 106,753: 15x16
-#549 @ 886,615: 14x15
-#550 @ 549,216: 27x24
-#551 @ 481,720: 23x13
-#552 @ 505,7: 17x22
-#553 @ 539,106: 28x27
-#554 @ 395,174: 24x12
-#555 @ 547,490: 10x22
-#556 @ 950,79: 21x12
-#557 @ 529,817: 12x23
-#558 @ 40,270: 19x24
-#559 @ 556,127: 25x14
-#560 @ 407,39: 16x26
-#561 @ 130,852: 29x14
-#562 @ 144,368: 27x22
-#563 @ 980,174: 18x22
-#564 @ 285,98: 16x24
-#565 @ 648,686: 16x26
-#566 @ 361,487: 21x16
-#567 @ 471,380: 23x14
-#568 @ 167,331: 23x25
-#569 @ 768,773: 14x16
-#570 @ 328,13: 29x15
-#571 @ 444,697: 14x17
-#572 @ 215,301: 27x27
-#573 @ 238,207: 23x14
-#574 @ 252,346: 21x20
-#575 @ 910,272: 11x18
-#576 @ 751,833: 18x13
-#577 @ 781,221: 10x17
-#578 @ 538,775: 14x26
-#579 @ 982,705: 11x21
-#580 @ 205,805: 25x27
-#581 @ 948,713: 21x12
-#582 @ 647,249: 11x20
-#583 @ 841,156: 19x21
-#584 @ 401,835: 13x28
-#585 @ 637,819: 24x12
-#586 @ 286,241: 19x23
-#587 @ 661,878: 15x24
-#588 @ 115,774: 19x14
-#589 @ 353,655: 22x14
-#590 @ 838,616: 25x23
-#591 @ 573,395: 28x27
-#592 @ 321,67: 26x13
-#593 @ 371,931: 17x19
-#594 @ 765,719: 24x10
-#595 @ 595,574: 21x21
-#596 @ 346,497: 10x16
-#597 @ 67,869: 16x19
-#598 @ 133,284: 10x25
-#599 @ 464,174: 20x25
-#600 @ 613,82: 29x28
-#601 @ 98,519: 27x12
-#602 @ 896,934: 14x17
-#603 @ 645,205: 23x23
-#604 @ 810,96: 9x15
-#605 @ 91,464: 14x23
-#606 @ 798,67: 18x21
-#607 @ 560,243: 27x20
-#608 @ 486,52: 14x12
-#609 @ 623,174: 11x20
-#610 @ 203,404: 10x14
-#611 @ 927,293: 12x10
-#612 @ 457,860: 26x14
-#613 @ 690,648: 13x15
-#614 @ 673,615: 23x22
-#615 @ 399,718: 16x14
-#616 @ 309,695: 23x17
-#617 @ 881,450: 10x24
-#618 @ 879,295: 12x29
-#619 @ 914,865: 5x4
-#620 @ 692,653: 28x26
-#621 @ 468,183: 19x11
-#622 @ 487,258: 13x25
-#623 @ 458,724: 13x16
-#624 @ 793,416: 28x23
-#625 @ 804,843: 28x13
-#626 @ 345,711: 15x20
-#627 @ 679,461: 28x23
-#628 @ 652,655: 20x20
-#629 @ 330,343: 12x13
-#630 @ 919,801: 16x11
-#631 @ 974,473: 10x28
-#632 @ 112,537: 11x18
-#633 @ 680,494: 23x25
-#634 @ 307,283: 16x28
-#635 @ 904,314: 11x25
-#636 @ 718,778: 12x22
-#637 @ 30,550: 23x25
-#638 @ 146,964: 14x18
-#639 @ 167,242: 28x19
-#640 @ 228,443: 17x15
-#641 @ 914,547: 10x15
-#642 @ 931,708: 23x23
-#643 @ 105,180: 16x10
-#644 @ 455,283: 14x16
-#645 @ 491,723: 28x17
-#646 @ 618,6: 17x27
-#647 @ 635,361: 24x25
-#648 @ 883,585: 26x16
-#649 @ 131,346: 17x26
-#650 @ 78,25: 22x12
-#651 @ 611,643: 28x22
-#652 @ 647,114: 15x23
-#653 @ 229,550: 21x28
-#654 @ 190,124: 15x14
-#655 @ 903,330: 13x16
-#656 @ 750,722: 20x19
-#657 @ 26,456: 25x13
-#658 @ 414,283: 16x16
-#659 @ 940,221: 28x25
-#660 @ 585,932: 20x18
-#661 @ 96,398: 20x17
-#662 @ 371,915: 12x19
-#663 @ 819,706: 22x25
-#664 @ 347,500: 15x9
-#665 @ 275,85: 24x10
-#666 @ 435,743: 26x26
-#667 @ 535,568: 22x20
-#668 @ 46,389: 17x25
-#669 @ 584,880: 24x18
-#670 @ 630,266: 18x18
-#671 @ 431,377: 26x14
-#672 @ 559,677: 4x3
-#673 @ 701,439: 16x14
-#674 @ 829,446: 20x11
-#675 @ 555,565: 20x13
-#676 @ 917,846: 14x17
-#677 @ 593,676: 18x16
-#678 @ 542,798: 20x19
-#679 @ 6,372: 24x29
-#680 @ 578,809: 24x24
-#681 @ 64,522: 11x4
-#682 @ 591,896: 13x26
-#683 @ 932,572: 11x25
-#684 @ 867,131: 27x19
-#685 @ 495,889: 23x22
-#686 @ 367,827: 21x13
-#687 @ 232,45: 18x28
-#688 @ 704,711: 11x27
-#689 @ 309,517: 23x13
-#690 @ 429,199: 17x11
-#691 @ 717,52: 20x15
-#692 @ 912,877: 27x25
-#693 @ 447,764: 16x11
-#694 @ 799,769: 28x22
-#695 @ 361,912: 27x26
-#696 @ 891,829: 10x28
-#697 @ 233,895: 20x23
-#698 @ 806,276: 16x13
-#699 @ 377,966: 21x18
-#700 @ 792,875: 20x22
-#701 @ 255,807: 18x19
-#702 @ 634,238: 15x26
-#703 @ 492,519: 13x24
-#704 @ 953,632: 19x26
-#705 @ 684,587: 10x17
-#706 @ 391,424: 16x17
-#707 @ 654,158: 14x27
-#708 @ 118,638: 23x11
-#709 @ 302,282: 17x13
-#710 @ 662,54: 14x19
-#711 @ 909,835: 14x23
-#712 @ 558,971: 18x11
-#713 @ 90,774: 11x28
-#714 @ 745,346: 15x11
-#715 @ 488,860: 22x14
-#716 @ 848,568: 26x23
-#717 @ 6,625: 28x25
-#718 @ 34,388: 15x18
-#719 @ 965,778: 23x24
-#720 @ 103,500: 20x18
-#721 @ 506,222: 29x17
-#722 @ 226,197: 24x25
-#723 @ 129,939: 15x25
-#724 @ 140,644: 11x18
-#725 @ 905,904: 20x25
-#726 @ 423,276: 13x12
-#727 @ 62,511: 17x24
-#728 @ 932,814: 19x26
-#729 @ 9,810: 11x26
-#730 @ 32,624: 16x20
-#731 @ 967,236: 28x18
-#732 @ 616,948: 27x12
-#733 @ 714,733: 15x17
-#734 @ 277,783: 25x24
-#735 @ 482,675: 16x12
-#736 @ 862,11: 19x26
-#737 @ 667,668: 27x15
-#738 @ 131,406: 13x28
-#739 @ 707,788: 26x27
-#740 @ 859,505: 21x21
-#741 @ 968,785: 4x6
-#742 @ 813,939: 11x27
-#743 @ 611,781: 28x17
-#744 @ 298,82: 28x27
-#745 @ 352,828: 16x27
-#746 @ 920,831: 20x23
-#747 @ 967,694: 19x29
-#748 @ 370,50: 25x18
-#749 @ 545,724: 13x16
-#750 @ 102,391: 13x22
-#751 @ 904,122: 22x19
-#752 @ 118,439: 23x10
-#753 @ 793,859: 23x27
-#754 @ 722,798: 27x29
-#755 @ 97,774: 24x10
-#756 @ 326,707: 26x14
-#757 @ 559,909: 28x14
-#758 @ 33,822: 29x21
-#759 @ 508,227: 24x7
-#760 @ 115,427: 26x16
-#761 @ 665,766: 27x25
-#762 @ 303,847: 19x28
-#763 @ 157,535: 19x12
-#764 @ 968,680: 18x10
-#765 @ 668,464: 20x9
-#766 @ 114,534: 27x10
-#767 @ 841,609: 17x21
-#768 @ 972,671: 20x13
-#769 @ 490,506: 27x18
-#770 @ 0,407: 13x26
-#771 @ 626,219: 11x14
-#772 @ 174,512: 12x24
-#773 @ 162,251: 10x18
-#774 @ 612,206: 11x25
-#775 @ 97,517: 11x10
-#776 @ 31,916: 11x17
-#777 @ 261,148: 17x16
-#778 @ 815,577: 26x24
-#779 @ 545,521: 29x23
-#780 @ 842,800: 25x23
-#781 @ 391,437: 23x20
-#782 @ 333,886: 20x14
-#783 @ 109,171: 11x14
-#784 @ 344,483: 28x16
-#785 @ 581,195: 15x24
-#786 @ 608,372: 12x13
-#787 @ 740,279: 14x18
-#788 @ 653,626: 27x22
-#789 @ 308,182: 24x20
-#790 @ 899,219: 16x12
-#791 @ 515,556: 21x11
-#792 @ 171,0: 18x29
-#793 @ 204,304: 27x14
-#794 @ 488,289: 25x25
-#795 @ 479,382: 14x18
-#796 @ 626,889: 25x11
-#797 @ 604,948: 16x10
-#798 @ 182,277: 21x18
-#799 @ 623,205: 24x20
-#800 @ 720,654: 11x25
-#801 @ 731,103: 26x17
-#802 @ 829,581: 14x25
-#803 @ 431,738: 17x29
-#804 @ 524,620: 15x12
-#805 @ 512,539: 23x23
-#806 @ 829,943: 29x18
-#807 @ 93,176: 13x26
-#808 @ 883,796: 12x12
-#809 @ 214,543: 28x16
-#810 @ 518,231: 15x14
-#811 @ 213,502: 21x20
-#812 @ 255,598: 10x22
-#813 @ 352,477: 24x16
-#814 @ 664,653: 15x20
-#815 @ 741,338: 28x26
-#816 @ 361,174: 25x22
-#817 @ 101,582: 14x27
-#818 @ 237,103: 13x12
-#819 @ 814,157: 20x17
-#820 @ 182,216: 28x21
-#821 @ 194,282: 17x18
-#822 @ 247,657: 20x14
-#823 @ 0,647: 14x29
-#824 @ 899,959: 12x23
-#825 @ 151,90: 20x20
-#826 @ 341,562: 25x22
-#827 @ 895,137: 28x18
-#828 @ 853,703: 16x11
-#829 @ 8,934: 11x17
-#830 @ 395,528: 28x13
-#831 @ 874,122: 13x28
-#832 @ 605,187: 19x17
-#833 @ 684,219: 24x24
-#834 @ 382,885: 13x21
-#835 @ 751,858: 19x21
-#836 @ 518,38: 11x27
-#837 @ 812,383: 21x28
-#838 @ 904,886: 21x19
-#839 @ 356,751: 25x24
-#840 @ 586,554: 28x20
-#841 @ 98,582: 10x25
-#842 @ 438,552: 11x21
-#843 @ 231,601: 20x20
-#844 @ 906,176: 11x21
-#845 @ 237,52: 12x23
-#846 @ 81,19: 15x21
-#847 @ 600,731: 19x14
-#848 @ 553,43: 10x22
-#849 @ 703,825: 14x21
-#850 @ 193,283: 10x26
-#851 @ 73,407: 22x26
-#852 @ 226,602: 25x21
-#853 @ 515,223: 26x15
-#854 @ 95,363: 28x13
-#855 @ 927,2: 28x22
-#856 @ 457,470: 16x13
-#857 @ 67,23: 24x14
-#858 @ 435,244: 10x16
-#859 @ 640,450: 29x22
-#860 @ 385,778: 16x23
-#861 @ 734,157: 23x25
-#862 @ 516,727: 11x15
-#863 @ 488,733: 16x12
-#864 @ 83,719: 19x21
-#865 @ 530,287: 15x15
-#866 @ 729,671: 24x16
-#867 @ 240,320: 26x18
-#868 @ 311,583: 13x24
-#869 @ 224,956: 10x13
-#870 @ 662,482: 17x14
-#871 @ 533,896: 12x17
-#872 @ 844,440: 10x26
-#873 @ 104,625: 16x11
-#874 @ 632,431: 25x17
-#875 @ 735,292: 22x24
-#876 @ 74,625: 22x24
-#877 @ 752,738: 24x25
-#878 @ 599,594: 18x10
-#879 @ 220,951: 15x26
-#880 @ 339,67: 14x19
-#881 @ 856,704: 15x22
-#882 @ 829,158: 10x13
-#883 @ 823,838: 27x11
-#884 @ 368,952: 10x15
-#885 @ 32,281: 23x28
-#886 @ 700,84: 11x26
-#887 @ 800,342: 23x9
-#888 @ 392,728: 18x10
-#889 @ 488,802: 22x26
-#890 @ 206,785: 18x25
-#891 @ 411,294: 24x11
-#892 @ 566,932: 24x10
-#893 @ 529,409: 15x17
-#894 @ 477,549: 24x24
-#895 @ 816,957: 14x22
-#896 @ 256,719: 23x20
-#897 @ 860,304: 15x16
-#898 @ 881,268: 27x10
-#899 @ 470,387: 17x10
-#900 @ 173,25: 24x13
-#901 @ 144,28: 26x16
-#902 @ 685,372: 14x23
-#903 @ 695,681: 22x14
-#904 @ 748,874: 29x22
-#905 @ 897,765: 18x17
-#906 @ 880,756: 24x12
-#907 @ 627,112: 24x18
-#908 @ 655,479: 16x11
-#909 @ 392,560: 15x16
-#910 @ 61,740: 23x20
-#911 @ 696,232: 11x20
-#912 @ 452,30: 11x24
-#913 @ 581,289: 16x23
-#914 @ 786,561: 16x19
-#915 @ 774,346: 23x28
-#916 @ 537,171: 25x11
-#917 @ 326,723: 11x27
-#918 @ 224,914: 17x16
-#919 @ 906,176: 25x18
-#920 @ 878,572: 27x25
-#921 @ 391,561: 19x27
-#922 @ 715,976: 19x12
-#923 @ 275,748: 23x19
-#924 @ 381,802: 10x14
-#925 @ 940,217: 24x23
-#926 @ 741,53: 27x15
-#927 @ 104,445: 16x18
-#928 @ 519,127: 27x20
-#929 @ 445,598: 23x21
-#930 @ 126,601: 29x13
-#931 @ 658,225: 24x19
-#932 @ 920,952: 26x23
-#933 @ 110,776: 16x14
-#934 @ 896,945: 24x14
-#935 @ 733,125: 11x17
-#936 @ 849,555: 23x17
-#937 @ 376,546: 24x18
-#938 @ 153,930: 24x24
-#939 @ 470,855: 22x21
-#940 @ 45,321: 27x10
-#941 @ 773,553: 26x14
-#942 @ 749,180: 12x14
-#943 @ 736,631: 28x26
-#944 @ 737,871: 11x14
-#945 @ 447,253: 14x11
-#946 @ 825,628: 27x26
-#947 @ 749,435: 11x20
-#948 @ 919,271: 10x14
-#949 @ 556,558: 10x14
-#950 @ 258,595: 14x28
-#951 @ 324,858: 12x15
-#952 @ 54,735: 24x20
-#953 @ 718,354: 25x10
-#954 @ 954,20: 22x17
-#955 @ 625,176: 15x28
-#956 @ 828,374: 26x14
-#957 @ 946,677: 29x25
-#958 @ 94,678: 12x26
-#959 @ 657,251: 16x22
-#960 @ 537,124: 26x14
-#961 @ 893,609: 14x11
-#962 @ 131,596: 12x13
-#963 @ 436,44: 18x17
-#964 @ 359,651: 18x21
-#965 @ 427,288: 29x14
-#966 @ 521,545: 13x22
-#967 @ 558,231: 17x28
-#968 @ 179,334: 26x28
-#969 @ 801,166: 20x29
-#970 @ 542,41: 25x27
-#971 @ 545,606: 24x29
-#972 @ 278,868: 20x17
-#973 @ 46,956: 16x25
-#974 @ 62,784: 26x15
-#975 @ 346,55: 13x26
-#976 @ 772,213: 22x28
-#977 @ 581,146: 29x17
-#978 @ 283,845: 16x13
-#979 @ 961,683: 19x13
-#980 @ 968,686: 25x17
-#981 @ 637,18: 29x22
-#982 @ 558,932: 24x10
-#983 @ 376,193: 26x10
-#984 @ 884,430: 15x10
-#985 @ 317,13: 21x18
-#986 @ 568,56: 28x13
-#987 @ 661,718: 25x15
-#988 @ 715,672: 20x20
-#989 @ 861,782: 17x26
-#990 @ 455,852: 12x25
-#991 @ 889,802: 17x11
-#992 @ 879,106: 25x23
-#993 @ 867,347: 15x21
-#994 @ 924,422: 18x10
-#995 @ 814,942: 18x29
-#996 @ 84,858: 12x22
-#997 @ 581,427: 28x24
-#998 @ 247,182: 27x21
-#999 @ 971,182: 23x21
-#1000 @ 978,776: 11x17
-#1001 @ 1,786: 13x26
-#1002 @ 977,224: 20x25
-#1003 @ 576,413: 12x12
-#1004 @ 892,182: 23x11
-#1005 @ 680,350: 26x15
-#1006 @ 489,881: 21x15
-#1007 @ 900,891: 21x17
-#1008 @ 591,883: 12x22
-#1009 @ 826,602: 14x24
-#1010 @ 366,486: 23x22
-#1011 @ 711,115: 19x19
-#1012 @ 707,116: 27x10
-#1013 @ 826,817: 27x19
-#1014 @ 315,770: 14x11
-#1015 @ 296,676: 21x26
-#1016 @ 713,373: 19x18
-#1017 @ 7,925: 28x26
-#1018 @ 821,893: 26x19
-#1019 @ 679,85: 28x11
-#1020 @ 2,802: 27x12
-#1021 @ 335,491: 27x22
-#1022 @ 299,337: 12x21
-#1023 @ 804,708: 20x18
-#1024 @ 903,888: 26x19
-#1025 @ 264,744: 29x26
-#1026 @ 813,823: 18x29
-#1027 @ 757,36: 12x18
-#1028 @ 589,217: 14x29
-#1029 @ 761,553: 16x15
-#1030 @ 632,430: 10x13
-#1031 @ 855,795: 28x27
-#1032 @ 93,625: 15x26
-#1033 @ 139,934: 19x20
-#1034 @ 561,850: 12x17
-#1035 @ 834,159: 23x13
-#1036 @ 479,845: 29x16
-#1037 @ 767,935: 10x29
-#1038 @ 506,816: 18x17
-#1039 @ 670,548: 25x22
-#1040 @ 415,58: 14x27
-#1041 @ 943,188: 12x26
-#1042 @ 7,381: 22x17
-#1043 @ 674,568: 12x17
-#1044 @ 410,2: 12x10
-#1045 @ 685,688: 13x23
-#1046 @ 609,566: 18x10
-#1047 @ 484,48: 29x22
-#1048 @ 676,659: 27x14
-#1049 @ 0,812: 12x28
-#1050 @ 282,572: 20x23
-#1051 @ 898,860: 17x25
-#1052 @ 892,949: 14x20
-#1053 @ 580,906: 14x16
-#1054 @ 65,234: 20x19
-#1055 @ 856,479: 10x24
-#1056 @ 475,143: 13x13
-#1057 @ 822,556: 14x27
-#1058 @ 970,678: 22x16
-#1059 @ 488,191: 19x10
-#1060 @ 843,298: 23x10
-#1061 @ 686,225: 17x12
-#1062 @ 224,784: 24x19
-#1063 @ 104,978: 6x10
-#1064 @ 809,756: 29x23
-#1065 @ 851,756: 28x21
-#1066 @ 144,943: 13x26
-#1067 @ 491,667: 10x27
-#1068 @ 383,574: 29x19
-#1069 @ 525,485: 13x11
-#1070 @ 494,721: 21x14
-#1071 @ 670,473: 16x16
-#1072 @ 923,103: 20x23
-#1073 @ 425,367: 27x11
-#1074 @ 975,667: 18x23
-#1075 @ 607,94: 16x25
-#1076 @ 29,617: 10x14
-#1077 @ 741,763: 27x15
-#1078 @ 907,281: 24x21
-#1079 @ 527,545: 21x24
-#1080 @ 751,599: 26x28
-#1081 @ 129,945: 10x28
-#1082 @ 545,718: 17x21
-#1083 @ 833,143: 14x23
-#1084 @ 678,337: 13x22
-#1085 @ 450,473: 10x20
-#1086 @ 883,388: 17x28
-#1087 @ 865,314: 16x21
-#1088 @ 861,408: 20x22
-#1089 @ 582,264: 15x26
-#1090 @ 612,913: 10x11
-#1091 @ 868,575: 11x15
-#1092 @ 854,596: 14x18
-#1093 @ 551,232: 22x24
-#1094 @ 675,898: 24x10
-#1095 @ 70,425: 12x16
-#1096 @ 325,763: 29x19
-#1097 @ 907,855: 16x21
-#1098 @ 770,817: 11x25
-#1099 @ 370,788: 20x22
-#1100 @ 883,426: 22x13
-#1101 @ 718,42: 10x23
-#1102 @ 670,568: 19x28
-#1103 @ 556,702: 23x27
-#1104 @ 224,245: 17x19
-#1105 @ 861,50: 18x25
-#1106 @ 840,622: 21x16
-#1107 @ 827,711: 13x21
-#1108 @ 211,46: 12x16
-#1109 @ 243,918: 19x19
-#1110 @ 855,323: 17x14
-#1111 @ 409,758: 27x24
-#1112 @ 337,193: 26x24
-#1113 @ 272,288: 12x26
-#1114 @ 197,340: 22x21
-#1115 @ 950,574: 16x21
-#1116 @ 311,508: 27x13
-#1117 @ 798,339: 29x17
-#1118 @ 892,173: 10x15
-#1119 @ 779,604: 11x12
-#1120 @ 225,818: 13x15
-#1121 @ 784,25: 19x11
-#1122 @ 88,25: 25x27
-#1123 @ 246,755: 25x28
-#1124 @ 239,175: 26x24
-#1125 @ 398,547: 18x23
-#1126 @ 756,193: 29x25
-#1127 @ 96,680: 4x20
-#1128 @ 916,826: 20x12
-#1129 @ 457,578: 29x29
-#1130 @ 91,576: 23x27
-#1131 @ 618,39: 29x18
-#1132 @ 621,960: 25x21
-#1133 @ 275,936: 14x27
-#1134 @ 130,144: 29x16
-#1135 @ 400,747: 15x29
-#1136 @ 619,221: 20x15
-#1137 @ 734,169: 17x11
-#1138 @ 359,635: 18x16
-#1139 @ 244,349: 29x22
-#1140 @ 202,270: 14x29
-#1141 @ 461,556: 29x28
-#1142 @ 503,155: 24x21
-#1143 @ 857,610: 18x15
-#1144 @ 660,592: 29x27
-#1145 @ 218,446: 12x13
-#1146 @ 149,850: 28x14
-#1147 @ 564,679: 16x11
-#1148 @ 709,112: 28x22
-#1149 @ 465,713: 17x19
-#1150 @ 36,827: 17x21
-#1151 @ 755,284: 14x29
-#1152 @ 313,74: 12x28
-#1153 @ 371,863: 25x26
-#1154 @ 908,817: 10x28
-#1155 @ 561,136: 17x13
-#1156 @ 449,55: 25x14
-#1157 @ 229,617: 18x11
-#1158 @ 841,529: 23x27
-#1159 @ 946,219: 4x17
-#1160 @ 255,612: 15x28
-#1161 @ 617,908: 28x23
-#1162 @ 830,821: 10x15
-#1163 @ 936,168: 15x27
-#1164 @ 275,84: 11x24
-#1165 @ 182,337: 22x18
-#1166 @ 722,642: 17x19
-#1167 @ 120,542: 20x22
-#1168 @ 377,916: 20x26
-#1169 @ 407,724: 25x10
-#1170 @ 380,470: 23x27
-#1171 @ 235,732: 28x15
-#1172 @ 485,445: 19x21
-#1173 @ 8,248: 11x10
-#1174 @ 96,594: 28x10
-#1175 @ 417,110: 13x17
-#1176 @ 316,128: 15x28
-#1177 @ 895,164: 11x10
-#1178 @ 720,148: 28x22
-#1179 @ 932,807: 13x25
-#1180 @ 615,487: 23x12
-#1181 @ 291,846: 21x21
-#1182 @ 931,467: 13x21
-#1183 @ 766,736: 27x13
-#1184 @ 345,728: 19x12
-#1185 @ 781,161: 17x27
-#1186 @ 262,891: 15x25
-#1187 @ 219,755: 12x20
-#1188 @ 681,109: 23x11
-#1189 @ 941,959: 29x16
-#1190 @ 800,13: 23x25
-#1191 @ 51,902: 28x24
-#1192 @ 261,704: 18x12
-#1193 @ 63,438: 20x17
-#1194 @ 428,339: 22x23
-#1195 @ 732,860: 18x25
-#1196 @ 132,750: 23x12
-#1197 @ 771,59: 26x18
-#1198 @ 19,322: 24x17
-#1199 @ 558,119: 11x22
-#1200 @ 213,33: 13x14
-#1201 @ 746,843: 13x12
-#1202 @ 607,223: 15x25
-#1203 @ 744,185: 13x16
-#1204 @ 896,863: 14x11
-#1205 @ 781,653: 20x16
-#1206 @ 519,411: 14x10
-#1207 @ 587,708: 27x14
-#1208 @ 353,41: 29x16
-#1209 @ 555,555: 14x11
-#1210 @ 408,553: 25x22
-#1211 @ 639,190: 27x29
-#1212 @ 149,88: 12x27
-#1213 @ 988,44: 10x20
-#1214 @ 617,812: 26x19
-#1215 @ 308,435: 25x12
-#1216 @ 629,405: 11x29
-#1217 @ 732,761: 11x25
-#1218 @ 802,229: 16x17
-#1219 @ 302,310: 28x26
-#1220 @ 918,368: 16x10
-#1221 @ 66,423: 12x16
-#1222 @ 917,267: 23x28
-#1223 @ 601,956: 3x10
-#1224 @ 653,919: 14x24
-#1225 @ 144,271: 20x16
-#1226 @ 508,421: 27x15
-#1227 @ 519,505: 18x11
-#1228 @ 530,385: 12x13
-#1229 @ 665,446: 18x16
-#1230 @ 520,399: 19x25
-#1231 @ 637,653: 22x29
-#1232 @ 583,956: 14x11
-#1233 @ 484,567: 23x21
-#1234 @ 216,301: 17x12
-#1235 @ 691,507: 12x17
-#1236 @ 854,476: 12x11
-#1237 @ 64,49: 11x16
-#1238 @ 863,564: 16x10
-#1239 @ 360,381: 16x17
-#1240 @ 925,888: 10x18
-#1241 @ 665,330: 12x18
-#1242 @ 228,601: 16x13
-#1243 @ 574,908: 17x13
-#1244 @ 597,953: 14x20
-#1245 @ 954,866: 17x19
-#1246 @ 791,870: 14x12
-#1247 @ 667,476: 13x28
-#1248 @ 662,488: 10x12
-#1249 @ 497,34: 10x27
-#1250 @ 110,132: 22x24
-#1251 @ 177,93: 4x11
-#1252 @ 721,114: 10x20
-#1253 @ 476,376: 21x27
-#1254 @ 384,888: 6x14
-#1255 @ 698,514: 16x26
-#1256 @ 779,308: 16x11
-#1257 @ 701,777: 26x22
-#1258 @ 933,733: 15x26
-#1259 @ 934,70: 24x26
-#1260 @ 72,787: 22x27
-#1261 @ 449,652: 18x15
-#1262 @ 425,558: 16x22
-#1263 @ 622,445: 15x16
-#1264 @ 157,175: 20x23
-#1265 @ 887,212: 21x21
-#1266 @ 514,490: 16x20
-#1267 @ 368,488: 4x6
-#1268 @ 797,41: 18x27
-#1269 @ 91,685: 22x23
-#1270 @ 277,115: 27x28
-#1271 @ 297,360: 27x20
-#1272 @ 195,559: 3x11
-#1273 @ 719,686: 23x10
-#1274 @ 397,818: 29x15
-#1275 @ 487,267: 27x10
-#1276 @ 711,388: 20x18
-#1277 @ 309,496: 27x27
-#1278 @ 414,173: 29x11
-#1279 @ 857,568: 12x18
-#1280 @ 165,155: 19x28
-#1281 @ 656,714: 12x26
-#1282 @ 255,921: 3x12
-#1283 @ 276,163: 12x14
-#1284 @ 634,812: 16x29
-#1285 @ 340,248: 23x23
-#1286 @ 193,268: 12x10
-#1287 @ 383,629: 21x26
-#1288 @ 933,297: 8x16
-#1289 @ 613,167: 13x25
-#1290 @ 852,118: 15x25
-#1291 @ 661,343: 11x20
-#1292 @ 827,119: 14x28
-#1293 @ 636,46: 27x11
-#1294 @ 629,202: 11x15
-#1295 @ 361,286: 18x23
-#1296 @ 539,925: 10x26
-#1297 @ 489,869: 15x18
-#1298 @ 415,45: 26x17
-#1299 @ 94,358: 20x17
-#1300 @ 413,552: 13x17
-#1301 @ 529,918: 16x24
-#1302 @ 400,808: 10x21
-#1303 @ 940,370: 21x27
-#1304 @ 813,185: 29x14
-#1305 @ 95,28: 24x11
-#1306 @ 249,327: 24x16
-#1307 @ 760,926: 26x12
-#1308 @ 732,957: 13x12
-#1309 @ 582,910: 13x13
-#1310 @ 0,162: 17x20
-#1311 @ 747,594: 10x11
-#1312 @ 712,513: 20x23
-#1313 @ 489,795: 26x29
-#1314 @ 474,335: 11x11
-#1315 @ 928,854: 27x16
-#1316 @ 7,377: 14x23
-#1317 @ 923,373: 20x22
-#1318 @ 411,954: 16x11
-#1319 @ 9,935: 20x14
-#1320 @ 887,848: 26x10
-#1321 @ 404,860: 11x11
-#1322 @ 475,281: 24x22
-#1323 @ 710,774: 21x22
-#1324 @ 794,158: 17x24
-#1325 @ 513,797: 25x28
-#1326 @ 707,755: 26x26
-#1327 @ 53,33: 29x24
-#1328 @ 506,184: 13x26
-#1329 @ 829,145: 20x10
-#1330 @ 891,774: 16x12
-#1331 @ 807,597: 26x27
-#1332 @ 375,313: 16x25
-#1333 @ 918,895: 16x11
-#1334 @ 884,128: 24x23
-#1335 @ 340,833: 25x24
-#1336 @ 202,485: 26x10
-#1337 @ 279,681: 21x10
-#1338 @ 199,913: 19x14
-#1339 @ 537,813: 26x29
-#1340 @ 89,723: 10x24
-#1341 @ 286,935: 22x27
-#1342 @ 347,72: 22x25
-#1343 @ 805,893: 11x28
-#1344 @ 917,81: 18x11
-#1345 @ 630,949: 21x16
-#1346 @ 526,905: 22x17
-#1347 @ 908,578: 17x15
-#1348 @ 235,237: 10x25
-#1349 @ 224,798: 20x23
-#1350 @ 759,525: 24x27
-#1351 @ 738,299: 25x16
-#1352 @ 224,888: 25x14
-#1353 @ 319,601: 28x26
-#1354 @ 212,397: 11x25
-#1355 @ 102,538: 21x28
-#1356 @ 457,251: 14x17
-#1357 @ 931,293: 13x24
-#1358 @ 808,93: 14x22
-#1359 @ 593,814: 12x23
-#1360 @ 468,131: 10x21
-#1361 @ 593,251: 15x15
-#1362 @ 362,16: 20x19
-#1363 @ 862,511: 14x11
-#1364 @ 671,626: 17x16
-#1365 @ 473,697: 16x14
-#1366 @ 368,329: 28x18
-#1367 @ 925,194: 24x29
-#1368 @ 875,511: 12x12
-#1369 @ 967,411: 25x27
-#1370 @ 89,411: 15x18
-#1371 @ 307,943: 12x28
-#1372 @ 119,13: 29x16
-#1373 @ 806,710: 15x11
-#1374 @ 544,534: 13x18
-#1375 @ 672,698: 14x17
-#1376 @ 645,848: 23x20
-#1377 @ 889,954: 25x13
-#1378 @ 378,24: 12x14
-#1379 @ 542,442: 22x15
-#1380 @ 42,454: 18x28
-#1381 @ 175,91: 11x22
-#1382 @ 840,533: 12x21
-#1383 @ 792,736: 24x27
-#1384 @ 731,713: 17x27
-#1385 @ 614,449: 22x20
diff --git a/2018/inputs/4.txt b/2018/inputs/4.txt
deleted file mode 100644
index 4a0ff6e..0000000
--- a/2018/inputs/4.txt
+++ /dev/null
@@ -1,1088 +0,0 @@
-[1518-09-17 23:48] Guard #1307 begins shift
-[1518-06-03 00:00] Guard #3217 begins shift
-[1518-07-28 00:49] falls asleep
-[1518-03-30 00:57] falls asleep
-[1518-07-01 23:58] Guard #409 begins shift
-[1518-04-13 00:25] wakes up
-[1518-04-09 00:22] wakes up
-[1518-11-02 00:41] falls asleep
-[1518-11-21 00:23] falls asleep
-[1518-05-03 00:59] wakes up
-[1518-11-21 00:02] Guard #1459 begins shift
-[1518-08-18 00:27] wakes up
-[1518-08-09 00:48] falls asleep
-[1518-09-23 00:23] falls asleep
-[1518-03-29 23:57] Guard #113 begins shift
-[1518-04-16 00:43] wakes up
-[1518-05-13 00:33] falls asleep
-[1518-05-19 00:58] wakes up
-[1518-07-09 00:44] wakes up
-[1518-04-26 00:03] falls asleep
-[1518-08-24 00:55] falls asleep
-[1518-06-30 00:51] falls asleep
-[1518-10-14 00:06] falls asleep
-[1518-04-28 00:23] falls asleep
-[1518-10-05 00:57] wakes up
-[1518-09-02 00:56] wakes up
-[1518-03-11 00:38] falls asleep
-[1518-07-30 00:54] wakes up
-[1518-09-15 23:58] Guard #1811 begins shift
-[1518-08-08 23:58] Guard #1033 begins shift
-[1518-08-07 00:08] falls asleep
-[1518-06-13 00:46] wakes up
-[1518-10-08 00:54] falls asleep
-[1518-06-08 23:46] Guard #557 begins shift
-[1518-06-01 00:22] wakes up
-[1518-08-05 00:59] wakes up
-[1518-03-08 00:03] Guard #3271 begins shift
-[1518-07-18 23:59] Guard #449 begins shift
-[1518-09-24 00:00] Guard #389 begins shift
-[1518-04-22 00:45] wakes up
-[1518-07-31 00:41] falls asleep
-[1518-03-24 00:02] falls asleep
-[1518-05-21 00:29] falls asleep
-[1518-05-27 23:59] Guard #449 begins shift
-[1518-10-30 00:52] wakes up
-[1518-08-09 00:51] wakes up
-[1518-03-16 00:54] wakes up
-[1518-04-11 00:28] falls asleep
-[1518-04-25 00:58] wakes up
-[1518-10-06 00:07] falls asleep
-[1518-08-15 23:49] Guard #557 begins shift
-[1518-10-17 23:51] Guard #739 begins shift
-[1518-06-27 00:00] Guard #3217 begins shift
-[1518-06-30 00:01] Guard #1237 begins shift
-[1518-04-29 00:01] Guard #3271 begins shift
-[1518-11-12 00:19] falls asleep
-[1518-07-27 00:50] wakes up
-[1518-03-06 00:42] falls asleep
-[1518-11-17 00:57] wakes up
-[1518-07-21 00:48] wakes up
-[1518-03-04 00:28] falls asleep
-[1518-08-24 00:37] falls asleep
-[1518-09-19 00:21] wakes up
-[1518-11-05 00:24] wakes up
-[1518-06-24 00:02] falls asleep
-[1518-10-24 00:55] falls asleep
-[1518-06-14 00:56] wakes up
-[1518-06-29 00:47] wakes up
-[1518-04-15 00:14] wakes up
-[1518-08-21 00:08] falls asleep
-[1518-09-16 00:48] falls asleep
-[1518-10-11 00:42] wakes up
-[1518-03-04 00:09] wakes up
-[1518-03-13 00:18] falls asleep
-[1518-10-28 00:56] wakes up
-[1518-03-27 00:20] wakes up
-[1518-05-24 00:03] Guard #739 begins shift
-[1518-08-31 00:54] wakes up
-[1518-06-22 00:50] falls asleep
-[1518-06-15 00:45] wakes up
-[1518-07-22 23:47] Guard #2647 begins shift
-[1518-09-02 00:00] falls asleep
-[1518-05-04 00:14] falls asleep
-[1518-03-06 00:51] wakes up
-[1518-10-02 00:35] wakes up
-[1518-10-05 00:20] falls asleep
-[1518-05-06 00:53] falls asleep
-[1518-10-12 00:47] wakes up
-[1518-04-08 00:30] wakes up
-[1518-11-19 00:40] falls asleep
-[1518-11-13 00:32] falls asleep
-[1518-08-21 23:46] Guard #3271 begins shift
-[1518-05-31 00:56] falls asleep
-[1518-05-18 00:57] wakes up
-[1518-05-17 00:56] wakes up
-[1518-05-24 23:51] Guard #601 begins shift
-[1518-10-30 00:32] wakes up
-[1518-10-05 00:13] wakes up
-[1518-11-02 00:03] Guard #2647 begins shift
-[1518-05-02 00:36] wakes up
-[1518-07-29 00:40] wakes up
-[1518-07-16 00:53] wakes up
-[1518-09-04 00:18] wakes up
-[1518-05-11 00:33] falls asleep
-[1518-03-09 00:00] Guard #1811 begins shift
-[1518-10-24 23:57] Guard #827 begins shift
-[1518-11-18 00:46] wakes up
-[1518-08-14 00:27] falls asleep
-[1518-05-25 00:17] wakes up
-[1518-03-03 00:02] Guard #947 begins shift
-[1518-05-29 00:00] falls asleep
-[1518-06-05 00:04] wakes up
-[1518-07-26 00:42] wakes up
-[1518-10-01 00:39] falls asleep
-[1518-06-22 00:54] wakes up
-[1518-09-06 00:24] wakes up
-[1518-08-04 00:24] falls asleep
-[1518-04-25 00:35] wakes up
-[1518-11-11 00:11] falls asleep
-[1518-09-27 00:58] wakes up
-[1518-09-16 00:15] falls asleep
-[1518-07-25 00:55] wakes up
-[1518-08-28 00:27] falls asleep
-[1518-08-12 00:39] falls asleep
-[1518-11-05 00:32] falls asleep
-[1518-05-29 23:52] Guard #3209 begins shift
-[1518-04-27 00:35] wakes up
-[1518-04-20 00:06] falls asleep
-[1518-03-21 00:47] falls asleep
-[1518-10-18 00:55] wakes up
-[1518-09-29 00:31] falls asleep
-[1518-09-17 00:40] wakes up
-[1518-04-22 00:19] falls asleep
-[1518-06-14 00:32] falls asleep
-[1518-10-07 23:59] Guard #1307 begins shift
-[1518-04-25 00:55] falls asleep
-[1518-08-27 00:24] falls asleep
-[1518-08-01 23:56] Guard #389 begins shift
-[1518-09-04 23:56] Guard #409 begins shift
-[1518-09-29 23:56] Guard #449 begins shift
-[1518-10-05 00:23] wakes up
-[1518-04-04 00:58] wakes up
-[1518-08-05 00:54] falls asleep
-[1518-07-20 00:46] wakes up
-[1518-04-08 00:46] wakes up
-[1518-06-18 00:52] wakes up
-[1518-05-03 23:59] Guard #1033 begins shift
-[1518-11-01 00:37] wakes up
-[1518-03-11 00:30] wakes up
-[1518-06-06 00:42] wakes up
-[1518-06-20 00:06] falls asleep
-[1518-04-05 00:55] wakes up
-[1518-09-13 23:57] Guard #3217 begins shift
-[1518-04-21 00:00] Guard #1459 begins shift
-[1518-03-18 00:00] Guard #1307 begins shift
-[1518-09-13 00:03] Guard #557 begins shift
-[1518-05-28 23:51] Guard #3217 begins shift
-[1518-10-23 23:49] Guard #113 begins shift
-[1518-03-11 23:59] Guard #113 begins shift
-[1518-09-06 00:07] falls asleep
-[1518-03-03 00:42] falls asleep
-[1518-07-21 00:57] falls asleep
-[1518-06-12 00:08] falls asleep
-[1518-10-04 23:59] Guard #1237 begins shift
-[1518-08-19 00:36] falls asleep
-[1518-10-13 00:09] falls asleep
-[1518-08-18 00:57] wakes up
-[1518-08-28 23:52] Guard #1307 begins shift
-[1518-09-09 00:58] wakes up
-[1518-10-11 00:14] falls asleep
-[1518-07-25 23:50] Guard #1559 begins shift
-[1518-07-14 23:59] Guard #1237 begins shift
-[1518-09-26 00:58] wakes up
-[1518-05-22 23:59] Guard #3067 begins shift
-[1518-05-22 00:57] falls asleep
-[1518-05-02 00:58] wakes up
-[1518-05-14 00:52] wakes up
-[1518-04-18 00:51] wakes up
-[1518-06-17 00:35] wakes up
-[1518-05-18 23:59] Guard #389 begins shift
-[1518-08-16 00:12] wakes up
-[1518-11-08 00:49] wakes up
-[1518-08-18 00:04] Guard #1307 begins shift
-[1518-07-13 00:48] wakes up
-[1518-08-18 23:58] Guard #1459 begins shift
-[1518-03-09 00:52] wakes up
-[1518-03-16 00:00] Guard #1237 begins shift
-[1518-06-13 00:24] falls asleep
-[1518-08-16 00:04] falls asleep
-[1518-09-19 00:55] wakes up
-[1518-10-04 00:47] wakes up
-[1518-05-04 23:50] Guard #389 begins shift
-[1518-07-03 00:57] wakes up
-[1518-04-24 00:14] falls asleep
-[1518-09-03 00:22] wakes up
-[1518-11-09 00:54] falls asleep
-[1518-09-02 00:36] wakes up
-[1518-06-30 00:56] wakes up
-[1518-08-26 00:51] wakes up
-[1518-04-27 23:56] Guard #1307 begins shift
-[1518-11-02 00:10] falls asleep
-[1518-09-20 23:57] Guard #1811 begins shift
-[1518-03-14 00:48] wakes up
-[1518-05-31 00:30] wakes up
-[1518-08-07 00:03] Guard #3209 begins shift
-[1518-08-07 00:50] falls asleep
-[1518-09-25 00:57] wakes up
-[1518-10-18 00:08] wakes up
-[1518-10-03 00:56] wakes up
-[1518-05-27 00:46] wakes up
-[1518-06-07 00:18] falls asleep
-[1518-06-06 00:55] wakes up
-[1518-03-18 00:56] wakes up
-[1518-04-04 23:59] Guard #449 begins shift
-[1518-09-28 00:59] wakes up
-[1518-08-10 00:12] wakes up
-[1518-05-30 00:21] wakes up
-[1518-11-09 00:57] wakes up
-[1518-11-15 00:13] falls asleep
-[1518-06-10 23:57] Guard #1811 begins shift
-[1518-11-04 00:01] falls asleep
-[1518-05-21 00:47] falls asleep
-[1518-10-07 00:05] falls asleep
-[1518-03-12 00:36] wakes up
-[1518-08-09 00:37] wakes up
-[1518-09-23 00:58] wakes up
-[1518-04-14 00:22] falls asleep
-[1518-07-07 00:35] falls asleep
-[1518-03-15 00:59] wakes up
-[1518-03-14 00:44] falls asleep
-[1518-11-06 00:04] Guard #3067 begins shift
-[1518-07-14 00:01] Guard #3217 begins shift
-[1518-10-23 00:09] falls asleep
-[1518-07-01 00:38] wakes up
-[1518-11-05 00:51] wakes up
-[1518-04-08 00:52] falls asleep
-[1518-09-22 00:40] falls asleep
-[1518-09-08 00:20] falls asleep
-[1518-05-09 00:49] falls asleep
-[1518-10-17 00:02] Guard #3067 begins shift
-[1518-10-01 23:56] Guard #3217 begins shift
-[1518-05-10 00:58] wakes up
-[1518-11-11 23:57] Guard #3271 begins shift
-[1518-09-27 00:49] falls asleep
-[1518-09-30 00:48] wakes up
-[1518-06-06 00:01] Guard #601 begins shift
-[1518-03-18 23:59] Guard #3217 begins shift
-[1518-03-20 23:57] Guard #2647 begins shift
-[1518-07-29 00:52] falls asleep
-[1518-04-01 23:51] Guard #1459 begins shift
-[1518-03-23 00:14] falls asleep
-[1518-07-28 00:38] wakes up
-[1518-09-04 00:49] wakes up
-[1518-06-10 00:57] wakes up
-[1518-10-26 00:57] wakes up
-[1518-04-01 00:52] wakes up
-[1518-07-10 00:47] wakes up
-[1518-03-24 23:56] Guard #3217 begins shift
-[1518-07-07 00:58] wakes up
-[1518-08-10 00:11] falls asleep
-[1518-08-22 00:56] falls asleep
-[1518-11-03 00:21] wakes up
-[1518-03-28 23:59] Guard #947 begins shift
-[1518-07-29 00:35] falls asleep
-[1518-09-09 00:05] falls asleep
-[1518-04-11 00:58] wakes up
-[1518-10-12 00:55] wakes up
-[1518-11-14 00:44] wakes up
-[1518-03-17 00:47] wakes up
-[1518-03-29 00:13] falls asleep
-[1518-06-04 00:40] falls asleep
-[1518-11-16 00:14] falls asleep
-[1518-05-11 00:04] Guard #1459 begins shift
-[1518-06-03 00:11] falls asleep
-[1518-10-22 00:58] wakes up
-[1518-04-15 00:57] falls asleep
-[1518-07-12 00:59] wakes up
-[1518-05-21 00:31] wakes up
-[1518-06-27 00:09] falls asleep
-[1518-08-07 00:41] wakes up
-[1518-10-22 00:11] falls asleep
-[1518-09-02 00:43] falls asleep
-[1518-05-31 00:28] falls asleep
-[1518-05-25 00:07] falls asleep
-[1518-07-25 00:13] wakes up
-[1518-06-13 00:35] wakes up
-[1518-08-17 00:40] falls asleep
-[1518-08-02 00:58] wakes up
-[1518-03-26 00:23] falls asleep
-[1518-11-04 00:59] wakes up
-[1518-03-28 00:38] falls asleep
-[1518-10-29 23:57] Guard #113 begins shift
-[1518-09-11 23:59] Guard #2647 begins shift
-[1518-03-09 00:48] falls asleep
-[1518-08-18 00:53] wakes up
-[1518-09-02 00:46] wakes up
-[1518-06-18 00:02] Guard #739 begins shift
-[1518-10-22 00:00] Guard #1811 begins shift
-[1518-09-23 00:27] wakes up
-[1518-08-31 00:38] falls asleep
-[1518-09-25 00:39] falls asleep
-[1518-08-08 00:03] Guard #2647 begins shift
-[1518-09-14 00:23] falls asleep
-[1518-08-21 00:04] Guard #877 begins shift
-[1518-10-09 00:31] wakes up
-[1518-06-20 00:51] wakes up
-[1518-06-06 00:17] falls asleep
-[1518-08-10 00:17] falls asleep
-[1518-05-08 00:57] wakes up
-[1518-11-10 00:06] falls asleep
-[1518-05-30 23:58] Guard #1559 begins shift
-[1518-10-12 00:44] falls asleep
-[1518-09-08 00:53] wakes up
-[1518-04-08 00:28] falls asleep
-[1518-08-17 00:52] wakes up
-[1518-05-02 00:57] falls asleep
-[1518-05-06 00:56] wakes up
-[1518-03-23 00:00] Guard #1811 begins shift
-[1518-04-27 00:10] falls asleep
-[1518-06-09 00:04] falls asleep
-[1518-08-18 00:10] falls asleep
-[1518-07-25 00:46] falls asleep
-[1518-10-10 00:43] wakes up
-[1518-04-19 00:48] wakes up
-[1518-10-20 00:49] wakes up
-[1518-04-17 00:01] Guard #1237 begins shift
-[1518-05-21 00:06] falls asleep
-[1518-11-15 00:37] wakes up
-[1518-05-04 00:24] wakes up
-[1518-10-04 00:01] Guard #2647 begins shift
-[1518-03-26 00:00] Guard #389 begins shift
-[1518-08-29 00:23] wakes up
-[1518-04-02 00:03] falls asleep
-[1518-05-14 00:12] falls asleep
-[1518-04-14 00:57] wakes up
-[1518-06-01 23:56] Guard #449 begins shift
-[1518-08-11 23:56] Guard #1811 begins shift
-[1518-07-04 00:01] Guard #3271 begins shift
-[1518-07-22 00:38] falls asleep
-[1518-11-13 23:58] Guard #2647 begins shift
-[1518-05-07 00:59] wakes up
-[1518-06-22 00:26] falls asleep
-[1518-08-28 00:01] Guard #3067 begins shift
-[1518-10-31 00:03] Guard #113 begins shift
-[1518-06-24 00:48] wakes up
-[1518-03-18 00:28] falls asleep
-[1518-03-16 00:13] falls asleep
-[1518-04-27 00:57] falls asleep
-[1518-07-14 00:24] wakes up
-[1518-11-18 00:59] wakes up
-[1518-05-01 00:00] Guard #739 begins shift
-[1518-11-08 23:56] Guard #3209 begins shift
-[1518-06-20 00:36] falls asleep
-[1518-09-21 00:20] falls asleep
-[1518-05-28 00:21] wakes up
-[1518-03-05 00:23] falls asleep
-[1518-03-30 00:38] wakes up
-[1518-07-12 00:56] falls asleep
-[1518-04-03 00:25] wakes up
-[1518-03-21 00:58] wakes up
-[1518-08-11 00:17] falls asleep
-[1518-08-12 23:59] Guard #947 begins shift
-[1518-04-29 23:53] Guard #947 begins shift
-[1518-05-10 00:03] Guard #3209 begins shift
-[1518-03-04 00:38] wakes up
-[1518-05-14 00:03] Guard #947 begins shift
-[1518-03-22 00:57] wakes up
-[1518-07-15 00:37] falls asleep
-[1518-06-11 00:48] wakes up
-[1518-04-14 00:01] Guard #557 begins shift
-[1518-07-24 00:49] wakes up
-[1518-09-01 00:56] wakes up
-[1518-08-26 00:59] wakes up
-[1518-08-25 00:15] falls asleep
-[1518-07-06 00:04] falls asleep
-[1518-07-03 00:03] Guard #557 begins shift
-[1518-10-20 00:45] falls asleep
-[1518-10-18 00:53] falls asleep
-[1518-06-19 00:53] wakes up
-[1518-03-27 00:51] falls asleep
-[1518-07-11 00:43] falls asleep
-[1518-05-03 00:55] falls asleep
-[1518-09-21 00:49] falls asleep
-[1518-09-20 00:54] wakes up
-[1518-06-01 00:04] falls asleep
-[1518-05-13 00:37] wakes up
-[1518-06-27 00:46] wakes up
-[1518-04-03 00:01] Guard #601 begins shift
-[1518-03-13 00:55] falls asleep
-[1518-10-10 00:13] falls asleep
-[1518-10-31 00:21] falls asleep
-[1518-03-14 00:54] falls asleep
-[1518-04-06 00:02] Guard #1237 begins shift
-[1518-10-15 00:48] wakes up
-[1518-03-27 00:02] Guard #1559 begins shift
-[1518-10-12 00:14] falls asleep
-[1518-07-11 00:25] falls asleep
-[1518-03-04 00:43] falls asleep
-[1518-04-16 00:53] falls asleep
-[1518-06-11 00:54] falls asleep
-[1518-06-16 00:15] falls asleep
-[1518-10-18 00:46] falls asleep
-[1518-07-24 00:02] Guard #389 begins shift
-[1518-04-04 00:26] wakes up
-[1518-04-07 00:21] falls asleep
-[1518-04-12 23:56] Guard #2647 begins shift
-[1518-07-18 00:49] wakes up
-[1518-05-07 00:04] falls asleep
-[1518-10-06 00:04] Guard #947 begins shift
-[1518-09-18 00:43] wakes up
-[1518-04-29 00:33] wakes up
-[1518-07-29 00:57] falls asleep
-[1518-08-27 00:42] wakes up
-[1518-03-16 23:46] Guard #739 begins shift
-[1518-05-20 00:23] falls asleep
-[1518-07-27 00:09] falls asleep
-[1518-08-18 00:37] falls asleep
-[1518-06-26 00:01] Guard #1307 begins shift
-[1518-09-30 00:20] falls asleep
-[1518-04-11 00:44] falls asleep
-[1518-04-09 00:12] falls asleep
-[1518-03-31 00:03] Guard #1559 begins shift
-[1518-06-08 00:00] Guard #449 begins shift
-[1518-11-07 00:46] wakes up
-[1518-04-11 00:04] Guard #409 begins shift
-[1518-03-04 00:56] wakes up
-[1518-07-24 00:47] falls asleep
-[1518-08-25 00:21] wakes up
-[1518-05-24 00:06] falls asleep
-[1518-05-08 00:52] falls asleep
-[1518-08-29 23:57] Guard #3067 begins shift
-[1518-05-18 00:00] falls asleep
-[1518-08-19 23:59] Guard #1459 begins shift
-[1518-05-31 00:58] wakes up
-[1518-06-13 00:00] Guard #947 begins shift
-[1518-10-28 00:48] falls asleep
-[1518-05-20 23:58] Guard #877 begins shift
-[1518-08-20 00:28] falls asleep
-[1518-06-17 00:12] falls asleep
-[1518-08-19 00:51] falls asleep
-[1518-03-03 23:48] Guard #557 begins shift
-[1518-10-28 00:30] falls asleep
-[1518-03-30 00:11] falls asleep
-[1518-06-07 00:53] wakes up
-[1518-07-22 00:01] Guard #557 begins shift
-[1518-11-11 00:58] wakes up
-[1518-08-27 00:00] Guard #3067 begins shift
-[1518-06-06 00:19] wakes up
-[1518-10-24 00:59] wakes up
-[1518-11-03 00:26] falls asleep
-[1518-08-19 00:41] wakes up
-[1518-03-19 00:33] falls asleep
-[1518-10-02 00:53] wakes up
-[1518-07-31 23:58] Guard #1723 begins shift
-[1518-08-23 00:53] wakes up
-[1518-03-13 00:59] wakes up
-[1518-10-20 23:59] Guard #449 begins shift
-[1518-05-12 00:09] falls asleep
-[1518-05-17 23:54] Guard #1811 begins shift
-[1518-06-25 00:53] wakes up
-[1518-06-17 00:55] wakes up
-[1518-05-09 00:24] falls asleep
-[1518-08-14 00:01] Guard #739 begins shift
-[1518-03-20 00:06] falls asleep
-[1518-11-20 00:28] falls asleep
-[1518-04-15 00:58] wakes up
-[1518-05-22 00:36] wakes up
-[1518-04-12 00:04] Guard #877 begins shift
-[1518-06-04 23:52] Guard #877 begins shift
-[1518-10-09 00:07] falls asleep
-[1518-06-05 00:15] falls asleep
-[1518-06-28 00:34] wakes up
-[1518-11-13 00:37] wakes up
-[1518-09-24 00:48] wakes up
-[1518-05-15 00:02] Guard #557 begins shift
-[1518-05-27 00:21] falls asleep
-[1518-11-12 00:34] wakes up
-[1518-06-06 00:51] falls asleep
-[1518-11-21 00:43] wakes up
-[1518-09-01 00:28] falls asleep
-[1518-10-13 00:00] Guard #947 begins shift
-[1518-11-20 00:46] wakes up
-[1518-05-22 00:01] Guard #1559 begins shift
-[1518-04-05 00:07] falls asleep
-[1518-06-11 23:56] Guard #3209 begins shift
-[1518-07-11 00:51] wakes up
-[1518-08-30 00:17] falls asleep
-[1518-05-12 23:57] Guard #3271 begins shift
-[1518-03-15 00:24] falls asleep
-[1518-04-26 23:59] Guard #3067 begins shift
-[1518-03-09 00:06] falls asleep
-[1518-03-09 00:57] wakes up
-[1518-03-08 00:58] wakes up
-[1518-04-13 00:22] falls asleep
-[1518-04-14 23:46] Guard #1033 begins shift
-[1518-07-28 00:54] falls asleep
-[1518-09-20 00:00] Guard #3067 begins shift
-[1518-05-09 00:43] wakes up
-[1518-11-01 00:03] Guard #3067 begins shift
-[1518-05-12 00:55] wakes up
-[1518-03-08 00:09] falls asleep
-[1518-03-10 00:40] wakes up
-[1518-03-28 00:00] Guard #1459 begins shift
-[1518-10-14 00:34] falls asleep
-[1518-09-22 00:26] falls asleep
-[1518-10-30 00:26] falls asleep
-[1518-09-12 00:07] falls asleep
-[1518-03-26 00:58] wakes up
-[1518-07-20 00:20] falls asleep
-[1518-06-28 00:25] falls asleep
-[1518-09-12 00:24] wakes up
-[1518-05-22 00:13] falls asleep
-[1518-08-13 00:42] wakes up
-[1518-08-22 00:04] falls asleep
-[1518-07-28 23:59] Guard #1559 begins shift
-[1518-08-24 23:59] Guard #2647 begins shift
-[1518-10-24 00:05] falls asleep
-[1518-06-22 00:47] wakes up
-[1518-10-26 00:35] falls asleep
-[1518-08-10 00:58] wakes up
-[1518-03-14 00:57] wakes up
-[1518-07-09 00:32] falls asleep
-[1518-04-28 00:55] falls asleep
-[1518-10-13 00:41] wakes up
-[1518-07-02 00:17] falls asleep
-[1518-04-17 00:58] wakes up
-[1518-05-22 00:58] wakes up
-[1518-09-01 00:48] wakes up
-[1518-04-01 00:48] falls asleep
-[1518-07-01 00:00] Guard #557 begins shift
-[1518-04-18 00:40] falls asleep
-[1518-03-13 23:57] Guard #449 begins shift
-[1518-04-08 00:00] Guard #877 begins shift
-[1518-09-16 23:57] Guard #1459 begins shift
-[1518-11-06 00:57] wakes up
-[1518-07-19 23:56] Guard #1459 begins shift
-[1518-03-07 00:42] falls asleep
-[1518-06-10 00:02] Guard #1559 begins shift
-[1518-06-20 00:25] wakes up
-[1518-04-08 00:44] falls asleep
-[1518-06-22 00:01] Guard #113 begins shift
-[1518-07-08 23:46] Guard #1811 begins shift
-[1518-07-23 00:03] falls asleep
-[1518-04-23 00:31] falls asleep
-[1518-08-20 00:58] wakes up
-[1518-09-30 23:57] Guard #3217 begins shift
-[1518-10-28 00:00] Guard #449 begins shift
-[1518-06-02 00:30] falls asleep
-[1518-09-04 00:36] falls asleep
-[1518-07-24 00:56] falls asleep
-[1518-04-16 00:04] Guard #601 begins shift
-[1518-05-20 00:38] wakes up
-[1518-10-29 00:33] falls asleep
-[1518-07-17 00:42] wakes up
-[1518-04-07 00:01] Guard #449 begins shift
-[1518-08-29 00:54] wakes up
-[1518-04-08 00:54] wakes up
-[1518-03-12 00:32] falls asleep
-[1518-05-06 00:43] wakes up
-[1518-03-05 00:00] Guard #3271 begins shift
-[1518-07-30 00:04] Guard #389 begins shift
-[1518-07-26 00:00] falls asleep
-[1518-10-17 00:23] falls asleep
-[1518-09-06 23:53] Guard #389 begins shift
-[1518-03-08 00:56] falls asleep
-[1518-09-13 00:55] wakes up
-[1518-07-20 00:31] wakes up
-[1518-10-14 00:02] Guard #557 begins shift
-[1518-05-26 00:01] Guard #1811 begins shift
-[1518-05-29 00:29] wakes up
-[1518-07-08 00:57] falls asleep
-[1518-07-10 00:21] falls asleep
-[1518-08-24 00:50] wakes up
-[1518-03-09 00:09] wakes up
-[1518-08-16 00:22] falls asleep
-[1518-05-01 00:52] wakes up
-[1518-06-01 00:25] falls asleep
-[1518-07-01 00:26] wakes up
-[1518-09-08 23:52] Guard #389 begins shift
-[1518-09-17 00:35] falls asleep
-[1518-05-30 00:58] wakes up
-[1518-11-11 00:54] wakes up
-[1518-04-30 00:37] wakes up
-[1518-05-06 23:54] Guard #1033 begins shift
-[1518-11-08 00:25] falls asleep
-[1518-11-15 23:58] Guard #3217 begins shift
-[1518-11-01 00:14] falls asleep
-[1518-10-08 00:57] wakes up
-[1518-08-18 00:56] falls asleep
-[1518-11-10 23:57] Guard #2647 begins shift
-[1518-03-21 23:57] Guard #389 begins shift
-[1518-09-22 23:59] Guard #3209 begins shift
-[1518-08-24 00:58] wakes up
-[1518-10-19 23:57] Guard #389 begins shift
-[1518-09-07 23:48] Guard #3209 begins shift
-[1518-08-10 23:57] Guard #1033 begins shift
-[1518-03-13 00:03] Guard #3271 begins shift
-[1518-03-19 00:37] wakes up
-[1518-06-18 23:59] Guard #877 begins shift
-[1518-10-04 00:51] falls asleep
-[1518-09-28 00:42] falls asleep
-[1518-05-06 00:00] Guard #1459 begins shift
-[1518-05-03 00:26] wakes up
-[1518-06-26 00:55] wakes up
-[1518-09-15 00:59] wakes up
-[1518-07-22 00:35] wakes up
-[1518-09-03 00:51] wakes up
-[1518-07-22 00:58] wakes up
-[1518-04-29 00:15] falls asleep
-[1518-10-29 00:58] wakes up
-[1518-07-27 00:46] falls asleep
-[1518-07-29 00:54] wakes up
-[1518-11-23 00:54] wakes up
-[1518-04-25 23:48] Guard #877 begins shift
-[1518-08-16 23:57] Guard #1559 begins shift
-[1518-09-25 00:47] falls asleep
-[1518-03-06 00:18] wakes up
-[1518-10-18 00:00] falls asleep
-[1518-10-01 00:48] wakes up
-[1518-04-12 00:59] wakes up
-[1518-11-13 00:50] falls asleep
-[1518-09-10 23:58] Guard #3209 begins shift
-[1518-09-27 00:00] Guard #409 begins shift
-[1518-09-21 23:51] Guard #3209 begins shift
-[1518-11-03 00:11] falls asleep
-[1518-11-18 00:06] falls asleep
-[1518-03-06 00:56] falls asleep
-[1518-07-14 00:17] falls asleep
-[1518-08-05 00:40] falls asleep
-[1518-04-23 00:43] falls asleep
-[1518-09-18 00:00] falls asleep
-[1518-08-02 23:56] Guard #2647 begins shift
-[1518-09-22 00:34] wakes up
-[1518-06-19 00:08] falls asleep
-[1518-06-01 00:41] wakes up
-[1518-09-08 00:11] wakes up
-[1518-04-17 00:54] falls asleep
-[1518-05-27 00:02] Guard #3271 begins shift
-[1518-08-07 00:53] wakes up
-[1518-07-20 00:39] falls asleep
-[1518-11-07 23:58] Guard #449 begins shift
-[1518-09-24 23:57] Guard #1459 begins shift
-[1518-04-28 00:57] wakes up
-[1518-08-28 00:53] wakes up
-[1518-04-16 00:29] falls asleep
-[1518-07-12 00:42] wakes up
-[1518-06-22 23:56] Guard #3067 begins shift
-[1518-03-20 00:46] wakes up
-[1518-05-07 23:50] Guard #409 begins shift
-[1518-08-25 00:48] wakes up
-[1518-04-06 00:56] falls asleep
-[1518-09-03 00:06] falls asleep
-[1518-09-10 00:01] falls asleep
-[1518-07-17 00:11] falls asleep
-[1518-10-23 00:49] wakes up
-[1518-05-30 00:03] falls asleep
-[1518-10-12 00:51] falls asleep
-[1518-11-17 00:00] Guard #1307 begins shift
-[1518-03-23 00:28] wakes up
-[1518-08-02 00:54] falls asleep
-[1518-08-16 00:53] wakes up
-[1518-06-09 00:43] wakes up
-[1518-04-23 00:50] wakes up
-[1518-11-02 00:51] wakes up
-[1518-08-25 00:46] falls asleep
-[1518-06-27 00:36] wakes up
-[1518-04-08 23:57] Guard #1559 begins shift
-[1518-07-09 00:58] wakes up
-[1518-10-28 23:56] Guard #449 begins shift
-[1518-04-02 00:53] wakes up
-[1518-05-17 00:45] falls asleep
-[1518-03-15 00:04] Guard #601 begins shift
-[1518-03-17 00:15] wakes up
-[1518-05-05 00:59] wakes up
-[1518-05-25 00:03] wakes up
-[1518-10-18 23:57] Guard #1559 begins shift
-[1518-10-21 00:27] falls asleep
-[1518-05-12 00:40] wakes up
-[1518-04-06 00:58] wakes up
-[1518-05-23 00:20] falls asleep
-[1518-07-16 23:56] Guard #1459 begins shift
-[1518-06-12 00:51] wakes up
-[1518-04-19 00:34] falls asleep
-[1518-06-14 00:09] falls asleep
-[1518-08-08 00:19] falls asleep
-[1518-09-04 00:02] falls asleep
-[1518-05-23 00:57] wakes up
-[1518-03-27 00:17] falls asleep
-[1518-04-15 00:28] falls asleep
-[1518-09-23 00:30] falls asleep
-[1518-10-08 00:44] wakes up
-[1518-08-29 00:29] falls asleep
-[1518-08-03 00:52] falls asleep
-[1518-10-24 00:45] wakes up
-[1518-05-12 00:45] falls asleep
-[1518-09-12 00:29] falls asleep
-[1518-04-16 00:59] wakes up
-[1518-07-11 00:31] wakes up
-[1518-07-04 00:39] wakes up
-[1518-05-16 00:44] wakes up
-[1518-06-21 00:45] wakes up
-[1518-07-26 23:58] Guard #3209 begins shift
-[1518-05-08 23:58] Guard #877 begins shift
-[1518-11-07 00:20] falls asleep
-[1518-08-26 00:04] Guard #389 begins shift
-[1518-03-11 00:16] falls asleep
-[1518-11-17 00:20] falls asleep
-[1518-09-10 00:49] wakes up
-[1518-05-10 00:36] falls asleep
-[1518-05-16 00:55] wakes up
-[1518-08-04 00:01] Guard #409 begins shift
-[1518-04-26 00:45] wakes up
-[1518-09-07 00:46] wakes up
-[1518-10-21 00:47] wakes up
-[1518-05-15 00:46] wakes up
-[1518-08-21 00:50] wakes up
-[1518-08-08 00:58] wakes up
-[1518-08-26 00:57] falls asleep
-[1518-07-02 00:51] wakes up
-[1518-03-25 00:16] falls asleep
-[1518-08-11 00:59] wakes up
-[1518-04-19 00:58] wakes up
-[1518-10-15 00:56] falls asleep
-[1518-06-15 00:14] falls asleep
-[1518-04-03 00:42] wakes up
-[1518-11-14 00:18] falls asleep
-[1518-05-12 00:02] Guard #947 begins shift
-[1518-04-15 00:05] falls asleep
-[1518-04-23 00:39] wakes up
-[1518-07-22 00:19] falls asleep
-[1518-07-31 00:44] wakes up
-[1518-10-27 00:43] wakes up
-[1518-09-22 00:03] falls asleep
-[1518-03-07 00:02] Guard #3067 begins shift
-[1518-03-03 00:55] wakes up
-[1518-06-02 00:56] wakes up
-[1518-03-04 00:23] wakes up
-[1518-08-06 00:37] falls asleep
-[1518-06-23 23:50] Guard #1559 begins shift
-[1518-09-27 00:50] wakes up
-[1518-07-08 00:19] falls asleep
-[1518-05-09 00:52] wakes up
-[1518-03-06 00:02] falls asleep
-[1518-06-05 00:01] falls asleep
-[1518-05-03 00:47] wakes up
-[1518-05-29 00:41] falls asleep
-[1518-10-25 23:58] Guard #947 begins shift
-[1518-10-14 23:59] Guard #3209 begins shift
-[1518-03-04 00:02] falls asleep
-[1518-07-28 00:03] Guard #3217 begins shift
-[1518-09-12 00:09] wakes up
-[1518-03-09 00:35] wakes up
-[1518-10-27 00:00] Guard #739 begins shift
-[1518-07-29 00:59] wakes up
-[1518-11-10 00:34] wakes up
-[1518-05-25 00:02] falls asleep
-[1518-03-10 00:30] falls asleep
-[1518-07-08 00:48] wakes up
-[1518-05-19 23:57] Guard #3217 begins shift
-[1518-03-31 00:40] wakes up
-[1518-08-02 00:28] falls asleep
-[1518-11-11 00:57] falls asleep
-[1518-06-27 00:45] falls asleep
-[1518-07-05 23:53] Guard #1559 begins shift
-[1518-10-02 00:17] falls asleep
-[1518-06-13 00:45] falls asleep
-[1518-10-04 00:18] falls asleep
-[1518-06-03 00:59] wakes up
-[1518-06-11 00:57] wakes up
-[1518-04-04 00:02] Guard #947 begins shift
-[1518-04-24 00:45] falls asleep
-[1518-03-20 00:00] Guard #1307 begins shift
-[1518-11-16 00:58] wakes up
-[1518-05-01 23:58] Guard #389 begins shift
-[1518-08-06 00:00] Guard #1559 begins shift
-[1518-03-05 23:49] Guard #113 begins shift
-[1518-06-23 00:56] wakes up
-[1518-09-28 00:48] wakes up
-[1518-07-19 00:49] wakes up
-[1518-07-08 00:58] wakes up
-[1518-04-03 00:41] falls asleep
-[1518-09-14 00:57] wakes up
-[1518-07-25 00:05] falls asleep
-[1518-11-12 23:57] Guard #1811 begins shift
-[1518-06-10 00:29] falls asleep
-[1518-08-21 00:58] wakes up
-[1518-03-17 00:43] falls asleep
-[1518-03-06 00:59] wakes up
-[1518-08-06 00:44] wakes up
-[1518-07-04 23:56] Guard #2389 begins shift
-[1518-06-21 00:03] falls asleep
-[1518-04-10 00:27] falls asleep
-[1518-03-30 00:59] wakes up
-[1518-03-31 23:57] Guard #449 begins shift
-[1518-09-08 00:01] falls asleep
-[1518-04-10 00:58] wakes up
-[1518-05-30 00:45] falls asleep
-[1518-09-26 00:51] falls asleep
-[1518-09-20 00:16] falls asleep
-[1518-05-08 00:05] falls asleep
-[1518-09-13 00:23] falls asleep
-[1518-09-12 00:23] falls asleep
-[1518-03-31 00:39] falls asleep
-[1518-06-08 00:40] falls asleep
-[1518-08-23 23:59] Guard #409 begins shift
-[1518-09-03 00:35] falls asleep
-[1518-06-04 00:00] Guard #1237 begins shift
-[1518-11-05 00:01] Guard #3209 begins shift
-[1518-07-21 00:36] falls asleep
-[1518-10-11 23:59] Guard #601 begins shift
-[1518-11-19 00:59] wakes up
-[1518-11-17 23:57] Guard #1559 begins shift
-[1518-06-07 00:04] Guard #3209 begins shift
-[1518-10-15 00:21] falls asleep
-[1518-04-07 00:58] wakes up
-[1518-07-09 00:19] wakes up
-[1518-08-05 00:51] wakes up
-[1518-05-01 00:22] wakes up
-[1518-03-07 00:59] wakes up
-[1518-08-12 00:33] wakes up
-[1518-05-03 00:18] falls asleep
-[1518-03-10 00:04] Guard #3271 begins shift
-[1518-10-31 00:55] wakes up
-[1518-07-03 00:48] falls asleep
-[1518-05-31 23:52] Guard #3271 begins shift
-[1518-05-23 00:37] wakes up
-[1518-06-13 00:59] wakes up
-[1518-11-06 00:29] falls asleep
-[1518-10-27 00:09] falls asleep
-[1518-05-07 00:50] falls asleep
-[1518-06-28 23:53] Guard #1459 begins shift
-[1518-04-04 00:37] falls asleep
-[1518-10-09 23:56] Guard #3209 begins shift
-[1518-06-29 00:02] falls asleep
-[1518-09-16 00:56] wakes up
-[1518-05-08 00:31] wakes up
-[1518-10-08 00:20] falls asleep
-[1518-04-21 00:58] wakes up
-[1518-03-09 00:56] falls asleep
-[1518-06-13 23:58] Guard #1033 begins shift
-[1518-07-22 00:42] wakes up
-[1518-05-28 00:11] falls asleep
-[1518-06-17 00:00] Guard #3271 begins shift
-[1518-09-27 00:56] falls asleep
-[1518-04-18 00:00] Guard #947 begins shift
-[1518-09-19 00:04] Guard #3209 begins shift
-[1518-11-18 00:49] falls asleep
-[1518-08-25 00:42] wakes up
-[1518-04-20 00:56] wakes up
-[1518-08-22 00:47] wakes up
-[1518-10-07 00:59] wakes up
-[1518-04-18 23:59] Guard #389 begins shift
-[1518-07-16 00:23] falls asleep
-[1518-07-30 00:17] falls asleep
-[1518-04-24 00:03] Guard #877 begins shift
-[1518-05-06 00:38] falls asleep
-[1518-05-28 00:44] falls asleep
-[1518-05-02 23:56] Guard #557 begins shift
-[1518-11-17 00:47] falls asleep
-[1518-06-18 00:44] falls asleep
-[1518-11-04 00:14] wakes up
-[1518-06-16 00:30] wakes up
-[1518-11-02 00:22] wakes up
-[1518-04-22 23:57] Guard #601 begins shift
-[1518-06-20 23:50] Guard #3067 begins shift
-[1518-07-28 00:06] falls asleep
-[1518-08-25 00:28] falls asleep
-[1518-11-06 00:47] falls asleep
-[1518-05-16 00:49] falls asleep
-[1518-09-15 00:40] falls asleep
-[1518-09-25 00:44] wakes up
-[1518-06-04 00:58] wakes up
-[1518-03-08 00:50] wakes up
-[1518-10-30 00:58] wakes up
-[1518-05-01 00:25] falls asleep
-[1518-11-13 00:51] wakes up
-[1518-10-06 00:54] wakes up
-[1518-04-28 00:51] wakes up
-[1518-04-24 00:33] wakes up
-[1518-03-25 00:51] wakes up
-[1518-11-02 23:58] Guard #877 begins shift
-[1518-07-12 00:00] Guard #1459 begins shift
-[1518-09-12 00:45] wakes up
-[1518-11-11 00:47] falls asleep
-[1518-10-08 23:57] Guard #947 begins shift
-[1518-06-08 00:59] wakes up
-[1518-07-10 00:04] Guard #3217 begins shift
-[1518-09-03 23:50] Guard #1459 begins shift
-[1518-09-01 23:50] Guard #3271 begins shift
-[1518-11-19 23:56] Guard #113 begins shift
-[1518-04-22 00:00] Guard #3217 begins shift
-[1518-07-20 23:58] Guard #877 begins shift
-[1518-09-28 00:03] Guard #3217 begins shift
-[1518-03-04 00:18] falls asleep
-[1518-09-03 00:03] Guard #1307 begins shift
-[1518-09-14 00:48] falls asleep
-[1518-09-02 00:49] falls asleep
-[1518-03-24 00:46] wakes up
-[1518-07-24 00:59] wakes up
-[1518-09-01 00:02] Guard #449 begins shift
-[1518-04-25 00:24] falls asleep
-[1518-06-11 00:28] falls asleep
-[1518-07-09 00:49] falls asleep
-[1518-08-31 00:02] Guard #409 begins shift
-[1518-08-05 00:02] Guard #389 begins shift
-[1518-08-22 00:58] wakes up
-[1518-09-29 00:52] wakes up
-[1518-09-07 00:01] falls asleep
-[1518-10-19 00:15] falls asleep
-[1518-07-18 00:39] falls asleep
-[1518-07-06 23:58] Guard #113 begins shift
-[1518-11-10 00:04] Guard #1033 begins shift
-[1518-08-15 00:01] Guard #1559 begins shift
-[1518-04-12 00:13] falls asleep
-[1518-06-05 00:56] wakes up
-[1518-10-17 00:54] falls asleep
-[1518-10-10 23:58] Guard #1459 begins shift
-[1518-08-13 00:14] falls asleep
-[1518-10-16 00:02] Guard #2389 begins shift
-[1518-07-11 00:01] Guard #557 begins shift
-[1518-10-02 00:42] falls asleep
-[1518-07-15 23:57] Guard #449 begins shift
-[1518-03-07 00:45] wakes up
-[1518-11-19 00:02] Guard #389 begins shift
-[1518-11-03 00:51] wakes up
-[1518-10-22 23:59] Guard #1459 begins shift
-[1518-07-08 00:02] Guard #3271 begins shift
-[1518-09-16 00:18] wakes up
-[1518-05-05 00:00] falls asleep
-[1518-09-15 00:01] Guard #2647 begins shift
-[1518-05-19 00:46] falls asleep
-[1518-10-17 00:48] wakes up
-[1518-03-07 00:57] falls asleep
-[1518-09-11 00:52] wakes up
-[1518-10-13 00:53] falls asleep
-[1518-07-13 00:43] falls asleep
-[1518-06-26 00:30] falls asleep
-[1518-07-28 00:59] wakes up
-[1518-08-12 00:15] falls asleep
-[1518-06-25 00:21] falls asleep
-[1518-05-26 00:38] falls asleep
-[1518-07-12 23:59] Guard #1811 begins shift
-[1518-05-28 00:47] wakes up
-[1518-10-02 23:56] Guard #1307 begins shift
-[1518-09-22 00:47] wakes up
-[1518-05-07 00:35] wakes up
-[1518-08-09 00:17] falls asleep
-[1518-10-30 00:42] falls asleep
-[1518-04-04 00:18] falls asleep
-[1518-03-22 00:44] falls asleep
-[1518-06-13 00:57] falls asleep
-[1518-05-02 00:29] falls asleep
-[1518-08-15 00:55] wakes up
-[1518-04-19 00:57] falls asleep
-[1518-04-19 23:59] Guard #947 begins shift
-[1518-05-02 00:46] falls asleep
-[1518-11-15 00:00] Guard #3209 begins shift
-[1518-10-13 00:57] wakes up
-[1518-04-03 00:07] falls asleep
-[1518-08-15 00:20] falls asleep
-[1518-03-13 00:47] wakes up
-[1518-09-19 00:09] falls asleep
-[1518-11-17 00:21] wakes up
-[1518-10-19 00:35] wakes up
-[1518-05-15 00:40] falls asleep
-[1518-11-03 23:48] Guard #1307 begins shift
-[1518-04-10 00:04] Guard #1307 begins shift
-[1518-06-20 00:04] Guard #3217 begins shift
-[1518-05-16 00:04] falls asleep
-[1518-07-19 00:12] falls asleep
-[1518-10-12 00:23] wakes up
-[1518-03-11 00:56] wakes up
-[1518-05-23 00:56] falls asleep
-[1518-06-28 00:32] falls asleep
-[1518-05-11 00:45] wakes up
-[1518-04-09 00:33] falls asleep
-[1518-10-05 00:10] falls asleep
-[1518-06-30 00:37] wakes up
-[1518-07-04 00:06] falls asleep
-[1518-05-02 00:53] wakes up
-[1518-10-06 23:54] Guard #557 begins shift
-[1518-08-23 00:17] falls asleep
-[1518-09-11 00:19] falls asleep
-[1518-03-27 00:58] wakes up
-[1518-09-06 00:01] Guard #1237 begins shift
-[1518-07-06 00:45] wakes up
-[1518-08-04 00:48] wakes up
-[1518-09-19 00:25] falls asleep
-[1518-04-11 00:31] wakes up
-[1518-04-21 00:20] falls asleep
-[1518-10-30 00:57] falls asleep
-[1518-08-03 00:58] wakes up
-[1518-04-27 00:58] wakes up
-[1518-10-15 00:58] wakes up
-[1518-11-23 00:42] falls asleep
-[1518-06-15 00:01] Guard #1559 begins shift
-[1518-04-24 00:49] wakes up
-[1518-09-21 00:31] wakes up
-[1518-05-26 00:41] wakes up
-[1518-07-28 00:51] wakes up
-[1518-11-22 23:58] Guard #2647 begins shift
-[1518-10-28 00:39] wakes up
-[1518-09-14 00:37] wakes up
-[1518-05-15 23:51] Guard #3217 begins shift
-[1518-07-01 00:33] falls asleep
-[1518-03-29 00:44] wakes up
-[1518-05-22 00:51] wakes up
-[1518-10-14 00:54] wakes up
-[1518-07-15 00:45] wakes up
-[1518-06-14 00:27] wakes up
-[1518-07-13 00:55] wakes up
-[1518-09-28 00:54] falls asleep
-[1518-10-18 00:50] wakes up
-[1518-08-26 00:27] falls asleep
-[1518-11-04 00:53] falls asleep
-[1518-05-01 00:10] falls asleep
-[1518-08-02 00:47] wakes up
-[1518-04-30 00:05] falls asleep
-[1518-09-05 00:56] wakes up
-[1518-09-01 00:55] falls asleep
-[1518-06-15 23:56] Guard #1559 begins shift
-[1518-09-09 23:46] Guard #947 begins shift
-[1518-06-06 00:36] falls asleep
-[1518-07-24 23:48] Guard #1237 begins shift
-[1518-07-01 00:08] falls asleep
-[1518-07-12 00:37] falls asleep
-[1518-03-30 00:54] wakes up
-[1518-06-17 00:48] falls asleep
-[1518-11-07 00:03] Guard #1459 begins shift
-[1518-03-28 00:58] wakes up
-[1518-08-03 00:48] wakes up
-[1518-06-09 00:32] falls asleep
-[1518-11-05 00:11] falls asleep
-[1518-11-21 23:52] Guard #409 begins shift
-[1518-11-22 00:04] falls asleep
-[1518-08-22 23:59] Guard #113 begins shift
-[1518-11-06 00:41] wakes up
-[1518-10-03 00:40] falls asleep
-[1518-06-25 00:00] Guard #877 begins shift
-[1518-05-17 00:00] Guard #449 begins shift
-[1518-06-28 00:03] Guard #3271 begins shift
-[1518-09-29 00:03] Guard #2647 begins shift
-[1518-05-21 00:19] wakes up
-[1518-03-30 00:53] falls asleep
-[1518-08-14 00:49] wakes up
-[1518-06-23 00:37] falls asleep
-[1518-07-31 00:00] Guard #3217 begins shift
-[1518-06-09 00:29] wakes up
-[1518-03-11 00:00] Guard #389 begins shift
-[1518-11-11 00:27] wakes up
-[1518-08-21 00:57] falls asleep
-[1518-08-09 23:56] Guard #1811 begins shift
-[1518-04-25 00:04] Guard #2647 begins shift
-[1518-07-09 00:03] falls asleep
-[1518-09-25 23:58] Guard #1033 begins shift
-[1518-07-17 23:58] Guard #409 begins shift
-[1518-05-22 00:47] falls asleep
-[1518-08-30 00:32] wakes up
-[1518-10-14 00:23] wakes up
-[1518-10-17 00:56] wakes up
-[1518-08-12 00:59] wakes up
-[1518-09-21 00:58] wakes up
-[1518-09-22 00:22] wakes up
-[1518-05-29 00:52] wakes up
-[1518-09-05 00:51] falls asleep
-[1518-10-05 00:52] falls asleep
-[1518-03-09 00:29] falls asleep
-[1518-04-09 00:50] wakes up
-[1518-10-04 00:59] wakes up
-[1518-07-27 00:33] wakes up
-[1518-07-13 00:51] falls asleep
-[1518-06-28 00:29] wakes up
-[1518-07-23 00:44] wakes up
-[1518-05-24 00:58] wakes up
-[1518-09-24 00:07] falls asleep
-[1518-08-19 00:55] wakes up
-[1518-04-15 00:53] wakes up
-[1518-08-29 00:04] falls asleep
-[1518-07-21 00:59] wakes up
-[1518-05-03 00:45] falls asleep
-[1518-03-17 00:01] falls asleep
-[1518-03-05 00:51] wakes up
-[1518-07-22 00:46] falls asleep
-[1518-06-30 00:14] falls asleep
-[1518-08-03 00:32] falls asleep
-[1518-11-22 00:08] wakes up
-[1518-05-21 00:58] wakes up
-[1518-03-23 23:46] Guard #3209 begins shift
diff --git a/2018/inputs/5.txt b/2018/inputs/5.txt
deleted file mode 100644
index 4d4b703..0000000
--- a/2018/inputs/5.txt
+++ /dev/null
@@ -1 +0,0 @@
-XxSsdDIijNnJACszZScZfFhHQyYrRqzdXTtxDEeNnGgOaAcCMcCLlMmogQeEqGgFfGyYuUOIiYyhHlLmUulAUKkudDOoDdaLGRrgoDdDdGgRruUhJLljQqdwWDZzHXxppPTwWCcZzDmfFlLPpdDSsgGtFfTEeTOotyYMOGgkJjKZUuQdNnDhHvVntKkTNqTjJeEVkZzttTYyTDdIiRrqQyYYyxbBXLlKHhvtYyzoKMmiIkaAUvVuvEejoOJUuQoOLlLloOxoOXaAqYYXxyzMmZyoOVhHIiIKfFkiIKAaUukRrKQqASsakLgGlGgLxXhHmcCzZxXMWdUulLJjDwnNYkKFfZzpPVuUvHhbQqIiLRrlEeVvBQJjlLGgjYyJoAalxXuUqgGQLQqOqNJjzZnyOusSUeEFfodcLuUlCcCIiNnGgaADVwWGgvZtTewWENnSszBKkDdeEYytTzpPsSjJpPZkNnIiPpDIideEcCKCcNABbKnpPGgtTNqQGgklLtTuUgGQqaNnnVveEgjJJEejGkKziIAaZmMbopPOgDdGubBIiUZGgzuUoOkMYymvBbVPpmMqQKDdCiDdIcpDjHhIiqQJLlFCcfqxXwWQdsSKkPgdqQDGjcFfCCceEsSkKjJkKKlcuUCsaUuASLAaEekmYqyXxkKYBbeEQuUZzpPeEdeEDKkNnuUQsSTtqufFUNIGginpAXZiJjJjhOWwkKBbogGHsSRNnqQrIzZxXhEeHKlLtTrpPsbBSbBDdlkSsKZXxnwTtWCrRcNfMmPpFzNbBneFfVYyvuUBjJbEzKkZuUkCcKTPptehHfJjEeBbuUioOIIiqQFDdFfvLUVDZaAkKHhEeAaHRrOohVxXHhvNnzQqdoOaAOxsSXogiEeIGvhWwHROoruVtTvaAUDdPpuImMVePCcpEUuFfptFMmfTVvhaAHUuoQwWlLqmMKkONnhNnIisSgGHPwWQVvroDOodgGORqvGgZRrEeMeEkKBbRyYrrzZREepPCcmJSstTNntTjvOoyyxXYzZIiYVUuUunzZBbNWvVPwnNWeVvLnNlpxvVXjJPDdZOozItTiYzRrKkZngGNiIyXiIxYyCcSsEOmMUeEqQAaINCcxXniuOeAamMmMmMRFfoOHhaArMmpPRGgrVVvvIiUudwPpWDuVvspPSbBUzrJmMjjJnNRAamVvfFMaCTTVYyvXxGRrgttkJjYmkKPpMyTtkKHoOhJnNjifFIKTmMuLFftTlwWUtAyYajJyZzmMhHhrRsSHGtTiIgBmEeXxMnNpKkSsDdbBpPPZJjHRrhKQquUkzvQdDVaAWwveEqAaVSAasBbFftQqCcTuuUOVvoUccAaIiCnNCHhXxpPWfybBYOoFwarPptTRRrArRrRusScOoCUMqpPLlfFMmjJHhDdpDOpPoAabBwWdQqfFPDdeCHSHRrhlLszqQZhVvnNodDQqOPVvpcAnNLlfFSoOsiIOoSsJvOoNnVJjxXjkKuEsSEeWbBnNEewpPbBANnakKkKHhMNnrXxjJREyYemoOqQeTbgGBtIWwiIFfHhiCcEKkeHZzhhHRshzkAajlLJKZVvEeCgGdDhHSPpEQqOoescCuUcPYypJaQqFfGgPpAPpeEjZzXxbBNqQfFRPTIRraAFJjsSfibBZztJjrRprlLiIycCBbYKknrvVHNmMneEhSshHGgSbnNgGBqQDwWdUutxXxFfXGNngaYyGgHSshfFrRjAaJAVTKktzMuviJjIVUmbTtgGBzZmMFfwlwWtHhTLfFWYycXxCrEeNsHhSrECceRTJjtyYRrGgrRZsSiIzpjJgGPeEhHWNnwSsZmOoRrMzxSsQqaAzZKtTkWsSyuvVbBVvUYChHOCcoeEciIwZzWlqQLnNpnNmMPwIiTbNnBLaAlJPpSaAsjGTtyYMZzfFmiaOBboAOAalLEejIikKqQSsXxAaJJpzZwBbBbnEearRAmMNDSsdyxqJjlLQHhpSsPEqQeAauUJKkmkKLlMjvVoOPpPpCBbGgoORrtTXuUxfaIwWiAsIKkpPifFSQqZpPAXxazEpKkPtTqQeaAnLdKOokLlDlpNngGcCmhHMrRiIqWwqQVabBARrcCUuviIvpPbBwnNWHONnIioGgOoIiVvAuUaoMrZzRugGUmMmxXMmaANLAalnOhbZBbzMmZzmMuWwnNUJjdDBqQHjJqQaAbBhNdDnzZZztThHeTtDUTtQquaAkCcGgKkjdDJKZzbcCBwWjBacCAYygGiILtTfdDEeLlFkKiQqItkKDAaKkaloOLARraApFfzZtTYkKcJjdDGgDdfFCPpQzZqvVcCgGfTtJjbBCLlAgGacYyFFfyqQYyPVvvCcrRQqVwWkEeFfpPKBcEeCnBbAarRNnNnCcTtNbYyhHGgPOGZzgopHMmNnIdDihyYHhEeLplLPieENnfFXxAavVIJjJLlAavVJjBHqQmMhbiImMbBEejrRQBbjJKkwiIWqKnpYyPVvNbCcZzBrGgRPpiISszZAazZBbzGgZUuyYbBKkoQXxIiTtOolLfFNnUuqjKRLlbBrNnMmkyOoyYWgOozZlLBbYyOojJDaAkKmMtOoXxqQAaTncCBCcaAevVEeMIQqiQqXxsSmEDdWIiwWIiqYyQwhHXJjxxMmXNwWFfnxRrXXtoOTxzZpPrmMsSRpPbefFEkBbKtTMmYyXgGVvWOowRWwreExUuyYFpPfztTGgNoOFfMmnXoEeOBbxRrUuZzxZCczrdDRxMmZzWOowTtJjanfkZzwWoOfFKuoOUFUuHhFfKLlkyHOovVrvVRHhRrSsJTAPiIpjJoSsOQnNqaQxXLlfnNhHnNlLFiIsSqtVvltcPOozSsjJHhLbBlZrLifFIhBbkKHldDsvVcCSMmtTlLBbumMOovVUWyYcCNnRQqrKkwRpmMBUuASsoOqQabAayuUFfEeVvUuTtJjxXmcYyFfCEeUuPzdDZDdpOWwZyVvQqYfWwNnFzWVvwaAARrkKaoiIcCsWFfbQqBGgnNZzyYcjGgJCrkKFfRZFfzZHhzvVUbBumEkaAlLKsEeVvSIiezZhHisSsSeLlEIxXcLlCMFQqfGgmsLlaAMmaACctTAaYySENoODdEeutHhTKFfTtkkgVvWfiIDdLllSSssLbIhHmMeEgRrGiiIufCZzcFUBFMmdDHhqpOoNnWWwKYySseEKkxZKkzXiIdGgzZMmDhyYHsMmIiCcnbHSXxsTTtthRjJhXxJXxjBbUuPQqUTtupLNnVvtTlHjJqQrBJhHHbBkKhyuUYKknNoOcvVTtyYeESsCqQQKkqQqQRrqHmMZfFnNXVvCcXxgGxzmaAMjJvVTtTtRzZjJrPVpPkaAzZnCtTLlTMmtuUAazXJtgGTjRrSsrRqQqWJnQuUjfGHbBRQqhrRHrtTdyAaKkOoSsYQarRxVqkKngQqGpPHfYyPoOvJvVjVrRpMmFcCkwWaAYfQqtDdNMbBmVvqQpSMdDmgGsPEeyHgBbPZDdGgrPsSsGgrRCcSequTtUQoOKkSsfFflPpLFILliWwEkKcCxnNXYeErRyZztTpHhSBbsmMgXxGRrmMReNnEHheGWwgvVgGEzhHRrlHhhRrhHqQHLwtYwQqWbBjJeQqRZzrEfMmKoOXXxxkYObBoqaAQRrCcLlyhNnEOoebNnKrRTaAtuUkbBbBNuAaoOUnbDdGgZzYyKkbBuCXrRxcAaPfFpGFNZznkBboOsSggGiItXxEeTgGGKsSfrRvbcqQCBVbBqWvVbBIiAaRryYTOotHhwMmSqQjaJVJjvcaACrTjJcCSsQqDUTtucCdtIiHhQVxXdDvVkKvLlqPgYdmMDKrRjrRTKktQqOoAawBbDivVIdWnqFBbfZoOzQOoDRrdYLlhHxNhHnGghsSHVUuvsvuUuoOlEefNnFfWwCclLYyYyZzRroOTtFNnhkKiIHKkqMmwWYyMmPGTpIiwWzZTtpPhnNHmToOTttfFYKkPplPpOoLVUBbuRrVfFFJjffSTtsVvJjFcCgCUueEcoQqyYNnqIeEiTtQpCcWtTpPYyycaACYSyYsJiGgrRIGGgDNGgxyuUYXXxhvVHqQnDDsSukKiIEeUeJjmMGgLlGgtTKwWkxXxEeXEHNTtnhSXDbLlBddLlDzZNyYKYDRrXxGgzZdVvSgaAGsWwlbBIWwzZiiIXxLYyuUllLlXxSsvVLVvQqIgOoGeehzwWdDyiICpPIgGNnanNJjWDdwOoiIAicCxXWYEDbBavuUQQqUbBuuiIUHhWzZZzmMwKkqiiIIhYTtyvwPpTtKksSmMnGgDdNRrHhKhxXOXxpIiPzTteEZVWwvRaArCSIixXFfTtQqsclLmMPpCmxmMBbXMQYfYyPCczpPZqvFlLlyHhYHhjlLlLJOkKdsSDXxovMCcmmCcMqQLlVHLlFfhwWADdREerBbpVmlLMJjIiqQvPbeEBqQJjNnvdDVxZzXYVOFTiImkJjKNnDdMkKqQFfUueWwEhHSsxXKkmnVoOrWAawRvglLPpZCcpPYASstTGyLlSsYCcqQeEgIiVvauZzUnZcCzKkNFfTtWstTSWwzZlrRLMmEwWBRrPpbsSCgcWwJcCIAaijCRrmMdBLlrffFFBbdaAkpPKDRPpBwWbuUGgMmpsSPCcQKvVyYwCcSsuIiLlUHHhDTtlLvVkKIidYyhiIXxxXuLlUzwWiITteEmMiINFfnNnZNDnNcGgdDCveEVdjJnYyBbVvhHyYrRwAKkaChHIiMmcCcICcuKkUjNnJyZzYyYoOrRrRWwefFaAHhPpNvfdeEgGdDbFfBbmMJEejAwWaDnNvVdpPRrMrmIBvVbSsiaJjqmCcMQudDfxXPpIihrRkYylLRruRrUaAKoOyYbvVHuuxXUUxGgXSAPpNnKicCXWuUYyweEuaAUlLOgaAGXxtOoTgBbGCczIiZUuXKkXClLeErUVaAvwWlLXcCxnoQPpqFfOecCjJLlEoOzDdZSzZiuUFUuIifbBiISSlLsQoOqEeBqQbrRxXaAIiOojjJJVzqSsrRwWBqQYybQUCeFfclLCspPSEPGgYyfFpGgnNNtTnQqeKkUuMxXvVmRrhQDdCZzcCCUuccoOeEJjxXMmqHDtnNAvVEezfFAaZUuLlDdcIiZzZzCrTtdDRVdDvLsSlTmMGnNfFeEvVqyfaAFQqBbehHELyjFfJGgNyYTtxSsXkKOoSsJjKkQEebsSGQqNnFfYygmMUbBKggOohHWhHXzburReEUyYRroOnNpPBtfRZzrMEemWwFTklLZzZOozSseESYysszZSqHhQRrnNKpPfFDqBCxXcmMgGbQdsSAadDEAoOoOGeObBoLlEgaUDdVvOooOrUaAOouXhHRrdDUHhudDLlPpsVvSxRrUrNBbTtTwWtCyYcqQrRJTtJjWwXxFfHhseEzEemEkKxXtTerRiIHhamaAbcCTtBteETzZINXxniiRrIMYaAyxKkWwzbcCwuUWBMfRruUFVvvVXxmBbCcpfFOoPQcMmMmBbLljJwWVcCSsPpsSvCMoODdYDeEdyPqQplLlFfxXLmJSsVnNvTtIiUuOoFRHRrhwAXxukCcwWfFQuUcgpPGCqWTkYyjWwJKmMAZvVzaBbaQqACmMcnIiNweEWSoOstTBvcCVouqQUkKdzZNqQnHDwnNNnhHuVvJoOcCskKSPpXWVvxyYXwCBPpIibcesSExqbBqmFRxXrhZYCckUAaaXUrlnNLJxXUUvUMmPiQqZkZztTJWwyMmKkSMSaJjNnpPAQfWTtKKkoOBWwbhDDddQAaqHWwBbhrYyRNnAaNRIireEoObBWUuwnoOBbPlLpwyRrYDdTthHNrRnUTEetWwSbBnMmNgHhGsKkdDErRHbBoraAROpvVVvPGEegrRrdDNRrNndLywWYpTtKkPpTILliAatPlDLvVlFsSfKYTcCIxXVvnfFRrWwWwmmMMmMbRrBVvDdRrsSeiIEUpGtVvTCXxcbPpBjbBJBAVvaDqPpcgGCQOoPjJXxpftNXxVvRAaeEKkpPMHhdDbBiImkKKcCsFVvfvVkKSDdQqAafFAaZxXwWNnzlLnMbBmmMqAaQwTKnkMdDdlLzZDCcmuIcCGgzZiWwGRCcrgUiILUAWwaeEXxFfCciXeEfbBlqaAEBbVQqIYyifZzsSFItTDdanEeNsSlLldDoOeEHhMqSsQaAsmRrMjCcJXRrxScCkKJjfvFbBfVvVlXlgGLbBiQiEyzZYyYehtrRTHiIGpOaAokKkGgKTtVvCtUuTfFcCcuUEmMixXITsSwWgExXYBbBvVbaAfJjLdDSsKkDdAaVRrvpPBbZzjJQqSAaNnsyHhsdDzZlLSYbBdxXetTEgGSsYymlauUeYyEfFaNnAALiIXlJjLxjwWPCcoEecCOJjhpwWPbWKFfIizTeEMmlLteEtTRrCcGgrWCcYgGTHhtydNgAaGnDwTiItYWwUhHwLFKksSflWnXxNaABLTtAaMmlPaAheEHpnNOAaSRrCGDdxKkXlKknNIDdiqQqQoOuTJjtUTtXxUUumMtNnTYmMoWWGgwCcYUumMmMPpvnXxnJjjJNNDdXiBbIxVwWTtFfWwLIiSslqLQqNnXxwfFWyYGgDdQevVARryVoKWCcNnwkGgOMmvVwOocCXkKEehHtBhHbICsSciYytTZaAUGgbBuZbBzzsSTDdPpJXxlLNnzZwygpzZwWtTsAaQqvUpiIiIiIPRrgFMmJjWESseEbBewTtfWwrjJYVSanNhHAfFsVvzZbFfzZBhFKgGKoOkcBEeWwoeEObCpnNPpPlEOCczMmGgZoewNnJjUPkKpkPpRrZzAQqaumMqrXtOoTcCNoFfOnNTtnAaPUuEeesSEwWVvpAaeENhbBHnJjNnZvaAAaVQqQqPpgbBGlukAiIaRFpPfrxXaMsBcCaAbBIiPpbOojUutTbhHXcCrZzoOZzRJjmgGMeGgeNnyYmyYdwWDMVklLKrRvVvjJrtTuUWbBUcCuDdlLyoOYyYmMjRrsVcCPpjniSsOoCcgXCcfNnwWFFVvfnWzZkLlgGwWKdDSsGEhHWsAaSZEUXxLlyYMmdDMmrRupPeAaCcWwzwDQqiIqQfVvQHhwWbTobBsSZXUuXxbsSyFtTjGgSkBbnNKGgtWyYEwWevAaEeVMmDdQqOUuiIbBhHqvVQHAgJjGaAjJbBonHwYyUpPnNuJgGjSsTmImMZuFfmPpsSTccCCiIpfiIFPHhTtPpKkUTlwWLtnNSsdRrXxKkAMqQoOrZYywWzOoqQNFfYyjJnNjJZYyvEeVzfjJZzVVvFdDYQqysSfNwkKWrRdTiAWwahHqcCQRrrbTtJNXxnZmmMJjJjgwFmRrRrAaquUKkXTUuDdbtTBkKmMqQlLEeSsGtlTtoOHhSdDKMmsLlPpgjJGvVSoOPpGggGwWhJaASszZaAPpUqeEVacCAfQqiqpPSstEDdxkKaAxXXenleGguflLRDdrqQwWDdVdeEjRrqHhQuAaOoUgBzZAFfajyJjJXxvVvKrNnplGgpPXiIHhxBlHhHtThLNnnNzZbLCYycSdDsCceuzEIielLCcZiUuEqQtTqQiIIioODXxxXdUlLUiIPZhXFfqQzTtZaomMeEvVDBboOdOxXaAWzsRkyYgSqatTAQsOoGCQqcEedDKMNtXxmuUMgdDGpPTgGWwuUmMncCmslCaUuAcLSrMSwAakZzpzZMmeXQlLwLlWAaBqQNnhoOrCcxXLlRMRrKOorQiwWIlOAaoBBbsSTtbqnMmYcChHUYlRkKqQHkaxpPriIoOPpXvhiYyRrqQqQIHUxXjMmmMrRxcnNeAXUpNnPIipoQqOZWweEXQqDvVSsdtOZzogaAaAUqjAaJhFFYykeEKXWwxQJjfFWzGgugGTJXGgKkgpPGSWwSsPiFpMmPvVfIwHhWpelXxLdDqQwWxXiIVrqyYLOfYyFtOoWHhwDJjGgqkZzKPpsyIQqHXxhNniQUuqcCzZzyaJjvVqgGnDVvnGgKkEevVIxXNniVvTndDQhHpPqmpPMqdpdDWwRrPeEiEeOBboZzZZiIVvzzzZhHIDAaMmXxNnQNRrhHtiLsSCDMjJqQmfFPplIiRreEMPKkpNnzZGgPRrQqpBbDdWtHdDqQhzSLlsZMffSsFFmukKbsSQRrqadDXUuxAXYiIyWwpuUgGHpGgAaPHhXxKklLhfFKzZIikPLlxXjJHhtjJTHhNnNnxMfexkKqQsStpEehJjhvVIRrTtkKNvqQVfFAKdvkCuUKkcOJmTtUqQlLtRKkrXjJoOxLKaAhHTttTkYgsSGyBbXxQqpjdjxFfYyXJDFfVvadkSuUmqSshHQqAaBbAaUxXuXxtNnEeaoOyXxYbBkCcgGFNnPhnNHTnNYyoOxXFBuOowWUbCaAthxfFXjJhHHCcYdQvVOkCLlLlcoOEpPGgLleqfwWFQTTtNRluULrntNdyYJDdyYDdaYpPjrvMoOpIitTPaAqQssaUuLlAkKCcSRHcefCSsOoevVrREvVcdwWwWabBADkKgdTIgGiteTtWtbBTwCeEJkIQkKlLMIlLiGgpTiInaAvOkLDvAaFAdDaXzZxwWuUOnzZlLEcCemzZwVvyEePpYWuUbIitOoeETyNndDYOoyiIYmMIoOeFfEVviWyYwUutQqQzQYyYypuQqkKrRLlDrZKkXOLsSeMmrRFfipPJjnfFLfFSLqQCcwMmKkWuUmSarRAsruXpSsPJMmDdPTtpTtpcCcZzCmMVbBlLXxAamMmjuABbauUddfFmMWUiIfEhHEeseETjpPOoHJZruAaUtLrRlgMmodLlyYOoVvuUDdnNSkuUgGwIKKkYyjsPpmJKJjCcFHhfUYyFfeyfRrJmMjFTthqvBfFdocCnFfRcCgGYyBbrRrEqaAsUulLSKMRrOokKRrKkKlLJWIjJiwdDWwcCGgIixGJrRRrAGgaqOogghHGrRKIcEegdJjDGVKWwfFkxQqmeEMCcXIivmMtYyTGuWtTlRyJjYrXxRrZtTFfzLKHhCAacgGuRrAajbpPBTBbtQqrTtOoeEJjXLmMyYeElbBZzlMwIAaOoUuKkiXGghHxWUiVuvVUvvVrwVaEeOghHGEeHhoAwBIUpAagUuuUGfFqQRNnjJhPeEjKkGDdgIZzKpLlaoOKgGALlaFfLDCcLeECOUubBotgGiINnTjJcEBbelIiTlLeEXmAaMxuUtMzZmYyuRrpPOojJcPxIiXEeaAYKkyEeeEBjJwWExfFXejtTJNVqQoOtTfFvRSsrQEjCDdgGcSsgGJXUuxhHlqQthxXkuytTYUKVsIiwWSNPpnBbZHhzFQqflzZMmGgkcOcCGYyEeWwhHDdgANVvNnBbVLeEmMiFpPfLlKksIMRrmUIiKQqkIiZzuTXeExQqSrFqQPpFbByYTuUlMmThHrEFLZzlZnNzfIsdYhJjHWcCRxXEeSueXpPjyYmMnrRNxXrZzmMPpIiiInNRIhHDpPQqdVxXutTUJLYOodrRDxXmlLEgGeMyDVvdikGgbBRriRrdOouvVdXxRvIlLPpwKsSMmHlLhfvVJmMOiRxXjJaAjJrxAaYyEezZDznSssSQqjlsSWwCMAamiIcqKzEzZZzeBbTESsTnqfFprRPZnNGuUmSfFIkQPqQHhjJpqqQQRfyoLLllnPkcKkSXxTtsxXCgPPsSppNnPdAeQqBbvVcZDdOiMmyqJBiIQTklLKPpsbBGgMntTLlNfFTtWwtPsSppzZSjJsnNTAZOxHRrkKvHUutIsEeJjSiBETCctyvVrUrRRAUuXxarNnuIQqYJjwVsSIiZzdTsnmCcQNnTAHhatHhnkKcYDdyCKbByYkGgYywWuuUQLlqxmIZziJJjLAlgGLacXxYyCKwfFxXxXWCchHkKkpPdDgaALlOqUuFfLlcSsqUuPTtEeMWwMnNmJjNnvKkAaiIKhtjJIaAFfrjJQqrRtTRxvVxXWuUPIiTtpAwWeEaKkwlgGLuUIuUjMgGlwWtTFCdDcxXIbdFCcIwEeWjJiCxXTNzZvVdbvVbBBkKCWwFgGfcRAarmuUNRrGgfVbmEeMHhyLlsOefFEQDaAxXXZmMztKqQlLktTYyLlnNrlLVvRTuUPiIHhXuUagGulVvoVeZztbBUuAKTzZtjJkgZxqQXOqQoFrRzaAGgBbPpVsScCMDdpPGgmEeGIWKkrRnNXxwVoOvPpCcbBZziaAEFfEuUeERreYqeEYgyYQBbqGKknNLzOopPCtcCRrAulLhTtuqQnNtTaAFkWdDMmEepPdDJjssfXtTzwaAZiIzYnlLZzvHhbBUpOEXxeyYyYvVIiwWITgjLlJNnXxfFdEeKbBUuZztTRAafFrkPtfFcCTtTdDhHNEzxXZeeurDdRMzZQqmrvVLlRvKkQaApPlLWwLDdEeOoEZtKkTWYSsFfypPbBqnNmnnNNUuMeEGaAgKEekFfEBbGZzvVmMEegKPpkYyzJjRsAaSoqFcCjFxyAajJYRrCYyXIicCXxvqQVEJKqQBbkYpPyjeEhrrRYEeJwpPWlVvLwWRrAzTKzQqxjJPNsSMmYybqQiUXuUhHFyYfbBKCcksSiIxucCvzYGVvjSPpnzYuuUAaUWwYyuEeUFfzFcqSsjYyBbgmqQMWwkKeEdDsyCgCcGWwRrZzIgGiLrVvtYyDXgNfGgPpnNbBDIiqjJQdzZgMJaMJsSGgjVviINuPIZzJCcooOlLqnNQTtOXxrRyTgGkKABbRrUukKrRsdDSGdPEsSepDoceAaEgwWWwhfVvoSsOeEtZiIMkKpPYqQVDoOdvEetTyMmnNjJwVPbytXxjJTyYFTXxtzKzZkbBhIZOnEeYyywWEeYeESUusudDpQqNiInPAlDdkJlOBbaAqQMFfbZzGgTtBieZpPQqEeoQMMhAakSsKHAakKWUuGoOGgKkgoEehHeEQqlLOVvWwPkHNEBOVLpPAamRTtDdrSswWMWwEeqQxRrXeEPLgLQeZyYzERlHhPqmMQOtIvVwaNncJjuUnNzZOqQWRrQqsgGRrSOmCSEOKSHhseHcHhKkCzLXpRrPrIKHhtmQKHnNVxXOMlFdDkcCKTtQVHhyjJUVZNFflLngGgGuUpPkKkrMXxXnerREhbHhpGFyudwvzaAZKkBbALDYpPSHhsjXwqOodDwfFWQWrtWoMmOwKyYiVqQvPpPubHfFUuYcKYyiIqOSsPpovQQSsoEAwWUuvekKueEAAaUuKXxNEeWgGwcbBCKXxhHQAaFQqWmgrUAJjlNAtTanIZbBDdiIzZggTDdnNJjtCtTIpzQqgMFfCcaAmcChiFfUuHhMYBbymMnuMmUqrRFROEeoEeJjhZzahHJjlFYygGAPtmmMnNdDRrZEzOoZaAaFYpHhPzZyAavbBzZPtrFKtJyYjnYyXWwxZzNdDTNOohHFfquzDdZhkKHUCchsSJYQMmDJjuMmCZzbBcoiwWIiIHJjtTtFfSsHxXhTVvIiaUuhAadyOOeEoWDdeXxoOpSsPEZzCcsSipmSLyKksuUSJTonNOXxGVpPczEebQqkKoKOoXdDxKOnaAECcAxXAGgsWwSaZUwWxcCXuKkwehHXxUuUadDAFHORrohfuaMmASsEjcKTDdDdKNgGksYylLsmMnqeXxPxXceEPpCIlLANqQyYEensSTZiImMzSVJBhHBBbBbKktTJIJMmYyGgSsayJYJxkqdDFfQKPpMmWwXjSprRkKDdnIcCbgGBikgUucCGnSCcsfFJLEDKlAagaJjAjrqQRJZzTGlTtjJfFrHWwhRfqRwXxAaPpWcMmZuULZhHzpPmureEjSsJSJjnNnNcoOCOnNdDEeJjBEHwWcCEzwEkhHAPpnNjPpAYykxVlLlLvWwXXPpxGgmMxXOoFfyYPpPpzgGiBuUYgjYyJVvVvtSMYhAJcgGZXemdRCgmXxMFdDpPzZIvQqBYybVxIiXtVPvHxXBGCcuUgbbeERbBPriIWwRYyMEepPmJAawkKaRyoIiOfZGncCrIifqQKkJOojfHbBlLhFyVvPaGgwyYBFXxpPnNuUNnhSsbBlLpPEMmFffFeHPmdDNnMpwWfjpPLyNnqcuWXzOoZtTzZxjJLlUuXxGgQqVEeFBJjoxfFXeLlMmHCcLGbBqvswbnaZoOzCcVvCGXABBbziITmMUutwWKjJfUuuUMwWaAlLiNsSnAaCcEhHmMHhJOoKkjeIrIEUuyFbiaAIWUuwDeEFrRTtFfLoFTtDSsjUuWwWuUcykKTdvBbFyYfVuBSsbUaAdbBDrYBWwbyVNnGNneEgYONnrRIdmVbOxhWhBbuUoOaBAsbhbBvFfVzLlhOLloZzuMmomtTMiSsiZuUoOBkKbPJYyjISsSshHgxXkaAAaKBDdfbBFfFKfuUsYyiqQXxItEeBFdDhHnNyEevHHFPpvVZzLDdlDHhkKnNqgXwWbBZzPJLlKkMJjjJWDdmMWwwKkFDdjSsoEeRzZeBZzNuHhdOoDJdDDWwqIfFiSsXxKxWmMwXqQjJNpjXRMmsnaArJjCcsSpPlLCclXxdpmMmMbBwPpMbBteCcDTeljbfiIGKkbtcVvCTrRfFrnNmrRHTtXxLVFnTtCcCUTKVcCpPVvwWvxXoXxOvaUAagCcTtQzZFcRrAaAxpPxXhHkKJSsugGlgGLbgVvVKkYRrJjlCQqaHKkeEhHIyixUuMmkKqnNczOgyYexbcCBIibBRWkBbKoXDFPcSseaAKkfbBEeAEeHhqQylLCcHhPpEJxXRrSHhUZzzYyTtnNZzEBxmtTtdtTIiDgoORgGuBbDgeksSzbBPsSPWMmITtFfiKkmjUujJlLJMEcsnNNnIwWJYyxWPpSCcsGgCgMbWrRwRrOdDwWHcChGgoIiBDxFfzFAafnuUzmMjJmMgGInNievVEKMmIGgiuwWUhcAaOeGnCcLUulaAXMmxCctKXxkXRrUowVrYyRlLzlpPyYZUojMYyqhkKHzeMmEMdDmrRAJjDdRYlKkPpaREehHxHhtTLjJIilcJjoZzOEIWwrRDdimoOMsSRJCwWMmMmmIiMmMNNnnSNgGThHtnnNmWwvNMOWOdDonjcCcROoOoFPxUPpHhsSuXSvVsMmVvtTJZWGJjDHIkJZzzZoOTNnaCghyYxgZfnNJDdKUNnBPbBplwNeXxbFfcYPRjJrtTpLXxebBEhNnhHzFUEeriXxZZAogGVvzhbBHIECcBbVvZzDMmKgcCDcCdLxDdcCXlwQqjJWVaknNmMdDLJjlIHhLnsSaAJjrrSpbBPwIMZzYeuUUuBHhbwGQqHhZvfFVvVgGsCUuuHhweNRrqipDIidWbBwDddDZYhHlxKfQwUugVLMDdxXfFPpmhiVeWwrlJLlYyvzPpzVfFvZOogmYXpaAPruUAfoPOomFfRXxjtqnfFNOSsoXBXxLlNnaANnbylLxZkRXvgGZziIZyYpmMPxXaAuOoTtVgaAEeGPGgLlzzGgHhSnNsYxtpPTpvxXkHUuoOVjuUJvMmLlbraglLfFqEezWZzuUfFwkhJjBbhgWwewZzWECWREdDmOoJjwWJjxaAXkTQLlqOofCqQetTOgWxXwvVGtAaesSETyFfYxXoxtkKwxXWCcTdKiIkYyDlFEefFyYMPaPpPCcklLXkKnNoOlAdJOSUuYyrRrThHBbqLMxbBhfFOoHCUucmMeXxdDjnuJcCgiInNrfFvVQsSpPAaAmbBMdadRidDYyRrfZzdbBDLlSopPJjXyRiIMCIMojJXxIxeGtiyYKkioldDdDFTbutTUSsKlLmMXxksSLlrJIaKkOoSNnoOUbucyAjeCcXCctTanNnNAWDjJDNndGgVFsCuUcSwWfBpJjxXBbWYyzZvyhUuHYvhHuUftTFCDRSXyYxseEMmnNZQqOYymXxEeyYbRzaIywWxXSsgsSGtaLlNrRDzwWZdAanZzqQpMmJrqPFElTUutJjwzZlwSaAmzZZrRzoSbBsOCpmMPccnNuUOocMYMnNOTtcLlCPpwWyqQeNGgnMmEEPAaKkZRhHrsSjYyJgiIUtLGgTpgTSQGgqZlowWOLzvzkcCrDjIXxkdDKaAEeElIiCTtcIGMmbBVvIjJJeSkuoBPpzZbphHTxXtoGqScBbElLheXxrREeromMORGgyALXxqjkKJnNSDdNnKlLLlkotgLEelPpmSsMqmDdTtVeEvWLFfloOJiIiTtzWwJkiIKrRrRrlLQqOUxsSXxoOlLoOTvbBVBUulLPLlAxIiqQFzZPpDmMdVvoqdDqQNjJnQwlLFfTtWkIZziKfFhgYueEUjJuZlOrRrHhoOxlLOoXpPRooqxXrRQSsOvzZjhHdyYDWwJTYytwWuUXxMbBmAiInNFQqQKtXxRKUuBkgTtGKxoOcCEsctTCPwWpHhbBfiXDpPIiTtdyYFfwWxdnpPqFTPFfpGQZzJetTPUuplLTtwlLtKkaxMiIfMmOoPrLlfFVJFfPCcloOLSsrRejBbSjJsJUuEHLluvVrHAAadiIgIiaAGqTtxDJfoTBbtCcVvbnmMNPpBSsaeUSLhHjSsEvlLVvVjAaLzZYywUDdWNnwcCKkSyYKuULUDdnsRrSrRNuoTtdDSsprRtTTuUPxNCcBbzZrXVMmQqbBkJjMMmmKCTcmwWpPQhHetTjJUucCUHoPpRLlhHrkIWwWRrhbBftzZTmMFPGgnNuVvrFfxXRciqESsYkKyYymPpMeZzucbBSgGwWvVeLlBbzFfhbiILPpxrRrRQqVdGgjJGxXGgmMLlnNJjqnTtNYyvQrxXRZzOVusGCcPmMpgSDdkuoOxcBbChvrSsYfHcChDdFPUzZnNiWeqQvVkcCKEwzZIbIeELlqWDdPtgGjMmPpFfVLlvZzGFfMOmJjIiykcCFfdRrdDDEOTtoDeWwHhdFfDpsSPzZlawWAVvjNEeyHsSRzzJRUurjPpFiWwnfFsoeETbYbBRiIrOoIiOEqQKSwJhHhHEwWncCPpntMmQKkqmccCwvcCcRBcCzNyMmvOoVvjJLYyloOVNnMjGgyAVpPxXqQgrvVxsCbdDBcGQIipPNDdspQNnqPaARrpnsScCTrRXZKsVbBeDkKdZQtTqhpGvVLDidDEnNeydTVcfLlFImWYQZhhawojJjJQORrousSVwfFPenAaAaPpkgGUuKMmAaNpceEVGKkXxXePjTUgLnNlGGgLNnqpNimMvVOtkAlLayYkUuKrRxTBbAatBkKdDknNKkMmnUgOBbooOMmMeEpjvLlSsIqxLlJjZzUKkTtYyAawuUNEJuUjfLkINVuCArRQqkKJZKTRDhkpPIiBtTCvVHAahcLJjaxBbeEBFYSQqxHhdCUlLAmiaAjLlaAJgLlimMITtFfjZYzuDdoPlLIwWaAIipqsxXBAaVvbjJuUGgFXYyadsBbSYXeIYyeEvVijYAQIiOozZcgGBbcvkBLluURVvAdfzWhHwPbRrvVjKkBdrRDguHkKoOAZVPUDdIYrTLlQPpqsSNZcSsdAWziFfLlqQwWmaAMmMQBZzbUpMVvmoiIsyNeGgkKeEFvVrRMVBhHCcMcljMQkPbLzZwJASMmHpPtTHcBbYPpgGsxXZzUuZlkBbKjJgYyDPpSXxghHCuUGpPggfyYOoLnBVvzTIrGchotThHJRlFBvgghHGXxzPLlpHeLgiIiIVgNnGnYWwySDdpSsMglLzZGkavMPDdBbGUrKkaARuqjJQJwWjbBgPpqQQuoaAOnAduDqHhQdUtOoGsSYynEpLlQqbBMmgyrUDMmnKpPkNdTtLacDgGAaxZqQNnOoAKdFfFHTVBafFAbptTFfOoRLihKkccLEiPLAZFCcYfFyImQLlqZcEVveHMDddnMTwWsKwxRnNYWwyugQqGwWPpIKbBPpkjRrSOoExVvJjNPBodDUukKTwhfFpNnWXxIilyHhzxBGOoYPpDdDayXxzRrZkbaPAhqQzZHfgkkKQBrhJjroHfSsCcNiIcCFjUwWPpsSjJVGMhaALVvlHEeyYuUNnLwWDEeIPfFpvVAPpagGJIihGgaCcFfAzZIZDeNnEdzMmUkyVvWcCGwQEYygKkGNukwWymMYcWqQSrRWEIEeYyEJjMmRreZctbAavVECphHXUuxYtoOTHDdhIiWcCrMmRwvVDdAirRCTVsUuSDvVJwWjMmdkKFfwWuoOYduBdaLVyYbfoLyYlEPpFjCmOoMlLMwWmyJjmMVOafFDIBbLoDdbBLlIiUwWuLxvVXlnNkDzZnNcZhHrRMmzllzNnqTeEmvpPCcWBklLDdrqQoUXxZmMxDfeicCUNqmVvGDoOevBUWwusVyRhGgOocCLQDdqhzgNuUwWaAyqFFLLzZZfbBNnFzISjyYQqWwWwhiIHIiJOoYyskQDpPtTBAaMbRbYyBuUrBSZzJYbqCtpAaPTcAqQawDdZcyOxXzHhzZSssbBdPdRUuBeEbrsRarzkLBQqIYoOpPNnbhfFHcGvVgSsShHYynYyKkiIwWHhNGNPtBkKWbyzlIZzoVvwWiIVvbBRrOPVvNnwWpurIyHYHhPpyfHCMmIiJrrRRjNnSstmRXOoOoSBlJjlrIivNrRngPpGNEVvSLpUvVhHXxfFnNPpzpPZtNAoOYyIOoJjQpJjPiIhcCmMXDdYyYgFkZEIidoOdDmNnJlXiIhnDdQqtWjAIiIbBIiiIgGWLlGoOKruFfUTtTtutTUdQqXOAaMQqmEeGsTKkaArTZoWwOsPwWpVvJjFiumhHAaNSsbBzZblLIfFVviBUMmYskCsSMeEbsGgGYyQqgSgGrsSSmMshKkHRKkVvvzwBwjcCJEPqNvsSCRwuCcUHhcSsOMGPJNCcnMmjHhNnRrtTiQqnNZqtmzZMiNNNnnoHCcuZzgogxXgNnGGgBbUuGPpYpHhnNPsDhCcTNqcCKGhPqQSjkgxFfXwUlCcDdozZCXasRuUQGArgOxXGTtznNZxXgoGRFqQmMKkxjJAwMcTtCUkyYKQPpSspUnNAazZLlnNyWwYKkueMBoOmxUuiISsdDbBDVMwWmnRroiqQBIzjCZDdSsVviNIsQqMmHcRrMzpHhCcPdbDXsuFTPjPpqYuUkKsSfFtTUuuicCiIIULAaiFVBsSmQqDkBHhbUdIiBjyWwDtJjcMwWzbBZhgGrvVMJjJfnNenNulLByaAYcZzgGpkXeZziSQqEnsSGgnNNCgYyPqQvWwOoVcCTiuUrROZEkJjGvVkDdzZbaUWnLppPKyYTtkPRrgYYLfiJZNnzYTbroXKbFwWfXGgUnNJpmMPvoOmMbZzbBkNyvmMVtkKTxXEyOBrEeRbMsSmIiMmdDpgFfGPDbBdmMWwpPPVBzZbKfdlLQqrRlHnoXEeVvaAxXJjxPvOtTwWiWxNrRnXYGgyYzZUxLtTIVTtHsiUmaMmeEAaRluiIUfFvpPvhMXxRrVBMmhHblLtiKDKkgaApPcCNwzWvfFeEeHhWMmwvjAaWwoeLlEgbXxQZAFsxXSfHfFkrLDAaIjJvGuUgBbVEffFjnkwLFjxgGcCVTOotjJeEnVvZRrzkIeEaAIiVBbvLewmMWEcRxXaAtyYtcCyYNRrwWBwWbCchsSzZtbBlLhHhLBblbBemOdCVmMvTtWwcCDdBSXGsOvVZoFNtrRuCbBKkfFcUfxkVvVOalvbBVLduULlpnNhgUMmPpRrulLlLHWoYwWLkVbBHfFKUuAaqhwBIibhHIiOpgGkDDdqQZEscxoOfFXCSiIezZPUMmPMtTebqQMHhzujJtTBnNKjogGsyszcMPIoOvAaSTcORXOTtoOhQaqZzWlWwNzZIiPEfYmRIiUuDdbMsSpPDIwWjJeyYEryYzekKEGgsjUxXuYbTtYVIVJFfojkYDdyaAxoOusYkKErmxaWzCzhHZcLkXAlCjJcRrJAZGgzaeEfPyYQTWbBwuUSXOoFfuSVBbcCviUuxitTSokKuUHXYKGZzPpjHhbXECbBVvcDyVlIqnCcEeyfIoOiHYzSWwqSWwsMztHWwbQcCnbBoKuDlyYPpgRVUayYAFWwfbKnNkrRUukIruuYyyYsSoOUbaABCJjZbDdBbnuzzZgmzAaWfrFLiISVvsCNQNjaAUEKkegGuDyYdgGWwJWnxWJtlBLqQlJCOodNnQCVsTNyYpPJjntetlMmBbkvVcCDdQyjJqQHknTtNsxXWKkoIiOfTXyYvoOVprXWifFIwWwWwLrKEeksZztTOHHhZMKbBZmMJjuTqNwRrWohHOzrBbXxHjZzJhMFpwpAaAahLluUlLHRTtDrcCRbZzmeELrRiIldDEmeEIuUjYjJtTtTIrOoRisSIqQpclLOdDoOoftTrxWlMLtzszUuZPpMIiQqrRmgGgWXnNVvFAUNKhHkWCcAFAtTucCRCrRZPOoYOTOhDJjVvhrRkTtKHzjEQfMKScLlYyWsSwfQFZzfspPVgGbTZKUunNIlRoMmDZbBiManLlIHhibrCsHKeElqKkXrmMCJFUrRcCgNMaTDRNnNVCTjcGgCHeytNnSPlPKkpwshXTbFhZzJKAjMmJgwTfpPkkKKxXRrZzRfzZzZvVflLqQLFfBoObgSsUumMUZzdDormXRrpPiaOFUunZoxsSWwXOQTthHkVBxhHttTCchBmgLlGTpPsbhKDgWRrwGnsGgQqnIixjQqOoJlLlmtTkKmGfFlLtHtTZzhHMmiSeERfGpchHhHYyXrnJAnaALeEEeyTgGdbxXGPpmMCMgPqsSVvphfSNnsFAfCckKDvVDddtTkKZTwhmLBbhHNnlWgVrpSEeNjHhChzZmxPpUuubBUPpEeZzoclVvuApPaCMmQQGgYyVvQSoObrbVvTSCcOoHtTgaMQWnNPcFfteGCOCcgGocSBABbSswWtqwLLloEeDdQoOkDdKpPxFfFzZIiDTtfLlQZzvqQViWthVaFYyDzcsSUuNAaqQeKXoAAYVIiBmfFZSubBUgXyWdYyweEeGgevsgEeGMgKiIMMmIimVirRxXUuaQleRrpWwmCMPFBbvNpZzjnNJVvTADyylErReLZzfrcxNnXebCcEeiIRrxroORPcHdDQexXwRVvrzZrRqQTtAWwaZzMmWmCcFIsSAzQFfyEkkKeYicCPpWwIfFkKSXzvbNBbwWvVOonPpBNnLlRIYQqWAwvWwVWZzatkKxmJPpsZqQLXvKkViQqzZApPCcMCcRroOxXXiIUTtuxOEeoEwWYRbBTtwjINvlLcyYCVXHuUhvJkLIilzGllWgbBWgBmMpHCcVpwWPsKLlUuOiIFcCfowoepsetTaXxmMFfNnNuvEXrRlLHpCjSCnoOJjLcClXvdLnXxHWTtKGrxXbBlvpPVriIxmMcGgrQoONnnIYxGbBVRrOooOvyzWwdyGgPpMHfiIRrFtaASrRsYYsSJHhjUulGsFSgGaAdDsQqiIfSDxvVXdXxXxgTIPyYeNAwjvVhbBHNSsAanzMmZFfcCnXxJzZjCUUuJxISeTyYaAthUuOkquTtrHFfcXjxYygtTWzNnZuGgAZVUYNXxnAaFfBbxKkgwWuUqQGWwzIiBrRqQMmEjgUZRryvKkVFkltTLJjlOEeFfXNwWnLYytJjTXxkpPrBttiIYyIYsSdDmMtTKrfofFOyUuLllhUuHqIQiHhImXxaAHzZJlcQxXqxGQnFOofzZNxXdtTFfwKZBbVNAnXxNEekeqQPcjxkhHgTtXxQmGgmGrPCKjJUuxDLlNuspIUVWJJjLgfYsPokKOIWwcCbWKkqgFsSBcCKavVooFpLlPxXpgkPEStTsFxLlHhXnBbErSsqQRHpMvVmbDprsgtTGSZzRIihPZhHzZdbwpPDDddEkeELlKsNnudTTQqnrqUumFZNUIiDsKdikKIFLWnapPGmUHBbWKkjJHOohhHCnNcdDdQqIJjigRVifPtyYnfLlqQFNLlDFMJJjjVtOQtTUuGgqoqXxQWzkmscIwbBNnocZYyYWmMqQZTNCcnSsfwZzaImMhTOocGgCtvcwWXBuQquFCbZeEJjqQVdDsSerLhZzRJjyOoYDdWKkVvBgQqGhGgbBcCZAUupxOSuAPcCypPYpgGavYEfFlDHeXugrrBTrnOoNqQBNFiRrHhmHgQyrRhHDdYrlsSKNnnHhNxWwumgRTwWtMmgqQjiqQBIQqVvirKUgryMmYCLloiarLOxJTSuSsTgjJGfAdyCcwCFzLcMfFCcxTtIXhyYQqHxauCeEcUWFikIiOLDdlGdQNnqDoOywWdDYYyVvThHJjHhLhlLBbsRrPxhTYpPmMmMyMmlWfWoWWsAkmMNnkNyYoWSCYAWwEJdHOoGsVRfFOoqJEejQiIVvrlzzZhwgGWTPxUuEyYOoIRAariPpXTMIFlLiiIWJjEkcCKejZzJZYwUuwFfWhEQHuWwGHhKgyoOkFYybyYBfjJGBbgTcjOGZRrzgoBMeWNlIFNGbPptvVTruvJJoOQEeIiAzLhHyYmGgMIiCctTODtTdaLZdDZsIiSSsaEzNjmjouTVDVUuvmiWwkYyuUPIEeHTtrOJjYtTutfTtiITBEupPSsUNnZzkOUTtZzeUuvVVvExZRHhahKkgGcCcCtCNnTZzzQdUkjJRfFiIrKVVvvHVvfFcngiVKkiSsSTmRQfFwPpRrgIpgOoGGLdOoDlwWLlLEGbSsqykKzYyRLlIintpPcCYaAkPHwWhpvzKdBKOTzZDdyrRpPVvWwbcdhuKqFKGgkKkHpPGSsgsMmgiIIaACcERAaBbkoyWwnLvchHfeoUNeRrMeScCFhBLFZzcCfcwwWXmMDwYztHdDUuWwYzuUHmYzrXMurRYBarRFdDvvUVSdyYBkgGdDkemMgGJPilLlGoqRrRrLWwOowLOAJhROozHhZNitTtTkKITsQXtnXxRMmooFIWlAiTtkwzkNngRGxXvVXwWABGgnAaNBbqQJgbGSsbEGVvgSsfFvVBXeEIGtRlLrGIiKvvoOtklaAfjdDxogMmxXTNTvxAauiIUzsSqQOEejNvVnjJkcCSjtTBeZdDfFKicYukKqQJjUyWgXXxZSOThHtdDuQtezXxTGfiIFfEcmiIHhMfVkXeEgGgAaGgeUUuAyYzZaaYfFylETvVtHheLsFpPfGgSaOnNYHhNnyYsbAnNjWRCcrcGQnQqYuvHgGJgaABNTSNuUdyYMximDahuTdDwWQXxVxyYUIWMtApCczxIAlLOwKpPTtJXAavfFiZbBnrqnNhHqjJmUEHfFFYyJPySQEQVvwWhqQEmMewJNbnzQNlVvLPQHpwLwWlJWShFasowWdFtCDduiIaAizEJWwKpPHhFkKKoVvVDSsYytAeEtjUpJXmdkhHKceBbWXopxSJLaOomQWmMlZIizNEeEpPeGuhHoKcrleTZQquOoUmMqknNKkdDRfFfdDmMFtJbJjfSgGhHGBLeEJjlvlcCLVrhqVvBvVbzqPpyYxWwHJZwdDdXxOBtZtgGTzTgGaqJXsSVIimWFfmKNMOphpPHShlDBjsSsVouBBVFcGeEzRrRSsrZFBvVMpSRUYCjJjmGuUbOfuzyHhkbBGgkfFcdXZHmMWBbRgNmTbBnleEkdfFwAzzMkEguUuUXrtYgGNnyxbBylLYwbBEjDduUJEeSHYyXLxRIsSVMxXmtJqOozbVxgUEeAmMHhasmxXelNqQQqCuPygHtssoDdCcAsSTaBbqPYyEBbeqQnqQNYewzZpOJTaAtTvoXFaYytTAQYIdqQgbpdDDZFFUmevRKkQqraJjxZkKZjKWwlLQqAkKLliIeCxXcfFIizZEjhHGsiKtMpWiIwPQwbJWvVxmVGgvWwfFWeEaAEeDdDankdeEDJaAjSscChHrRLAsNBfMmFYLllovDNZJluUCcAmMMmTDdtvVvXxIiFavNnozzNOocChHnFpkAZCfAcdNgAMnIiNoGoGKqyYPpsQkeEEkYmMLlWZzkMmdOoKHyYYvVUCobYhcCwEeUuOoWVvTtqdDciKktTILHKGLQMmIHhCVwHhFCcjGocpbcCuqQUTtqQDsoBXxLJevKkCZHYcMqfFrMhHYynolQbBVFfvEeUuAbNEendwfFUrUHhiIKkAiIyYRrauRqtsGmMcPIGjEecpPODWVddWSswKZzNAINyYyYpCTrbRGEfhOtZXuUxlLMmzTsHhiImMqQopTtKkVPLEyWwNnAoOQJTPpgniVpJUumMNIntorHhnNacXxeezEqHTPpUrOfapExqBlFdGzNnkKVVXxKWInNLfHzZXSyHhvqDJzbTkKPQehLpxKlLJOooTtuaAUOjCcNcCPUuztDzYyZyHlsSYHnkykzZKlsBbrMSnieBbEXSbCUQtetBbTVlQqLtoJjQqTtHeEcsViIkpjYLnfFwWyYkKwvVkBGaHVedAWwXoCKPpIpBsxaAXSTEezZvputBSPpSQqzDdaYDiGKnNiaoqQayYQZzEQPVnNKpPSsXmbfwOsDPxUuuRgBmMDdsxbcCcCoOGZdhHffrRFFniXSCcFfsxrRAweMDEiIhHULXpxXMmfroaWwAWwUugGCfaYLqIidDdDKePpqgJItuQqUVSOoYdDPhVRDdrwWxWwAaPSzOoTmUaMKkBHGgdppmMpztLlLFUuRyfaAZAipMhHmJwqQYmkKMvaALnYyAIKMseESmdtyYFquUwWcCkxpuddOmBbwWMOnnKkAzLuUlHeyVdpJjPDdcZqmEUugsRrIcTTpRrzZPjJjJjtKVskDMmCcGgPpoSsBHeEjIYOoCcwLlcCDdBbWWBIefhHrRHFfOoeEhDdRBKbBWwkjFIiIlPnqfwFPjDdJgAztTsmhHGyaUuTtGYfAStcjWwkXGkLlKjxAJiMmGgmHbjJbyYyTyYttTYewWSKTtNnuUoYyKzZsqAFIiIXBRqSDbBdKkxBckKHTtYjocCOSGgsDqfyYiIJjFhHlLQKLGaAeWwsAHqvxPuXnNekKsWVaAVeIiLlccZtTzcCzCErPoHOohOdmMeElOYyNnvVpauWVvwfbBdTAUuCcLEyyWlLeucwFeLIRrffXxdDrRLRrpPSFfxgGOogGiIYGSqtKVQqpPkYitCHqIibBEbWwBDdEeoOLleAaCLlcjSvJOoDFODrRdsQVvqBEMmrmYqFLlXxKfMUbapScjPpbuvlLrAahXgGVvViKkepPosAxXLSsXcWyYSVxRXxreEXowZDzXxUJjLUOeyQMmzZAHhMAamNjyYXIixJUrRkKbeOnOGDAXfoOhQqzKfQqFjzPPJUWYNqWCBbckkuuHoSswxXWkOouMmUPNEXwxOxXJXwNbQqOoBkBbvzZMmuUUuBbqVulLCmytsgGaASkdFfDToQqOsLlMWwZCcHheiIuUkRWgpMvVmMgGYyLLkeBxOoaAEgcCqnNQYyQkkKTtySsYfFtxXbjlNsSoOpItBlBblgFfOoxrPdeyzOXsGgplLbBMfhtTeCcEMHhmMmAayYjJfFmMdIisRUGPpHDdhqoZzMjdDwVYNnDdGTtgyxyNnppPPkKJsUuYSTrRhfFHFfzxMTnnlLunKurRUVvwOoWCtTmfFwsLYUhHQquyaQTtFfrnFYWbckSqQsYklJKkjULBRzZrblEgrmMQdaCSxPwOzgmUhSmjJMcEZdlUpRgdLlCcXxewWlTtLEXIYoOyyYiddamchnGspRxtaANnPEpFfxoDmMoIiRymYkvVWwKyTtMVQRrgGRUDduyRGtTFuEYckVvaAsSmFfMxdDXvBedDdCHuMmRkiGHHMmhhhjlUuJtTEUuYQqUOnOMaasSdniILOorsSTQpPqugxICdpaCezBzJoOUujnNeQqwtlGPpHhKkgDAPfYyDDQvvVeEHjrOoRVOcCmuNnUGEeEeoZztjBbgKQqXxDAadTtIiJTtjhpUNaDeGsGbBsCChiIoOVqQLlzPOomMwFkKfrRYftmMTRnqQYsSyySjjWbzxqPsRrSNtqQaUtIiugGUTlLPMPLlqTqwpPWbGHrRTtAaGKkEeMDWRCBRrRrFaAfjGqCqQRrcQgoUuOJjOogTbKkGgdJvVaAjDyTtCIXZzxrIPQlMRrSeEBeEbhHsAaJRmWwMEeViiIXxYIRUuriGseDoldvcNoXfOSsslkTexBbniIcBpXmLWqbFqQCzNmMnZXuglWwvAUrWwffFUuFOUuIVhvbLxTYgzJjdkZnrRDClUpQqNZzYKkRjuLvVNwlkMKSIfjJejsFjuZWwIgTYHHhgqYyIbBuVbGszvyYVfCcIRtlLvVqQDdIgwjIGXxbyiKBbXkMzothtkKYyCcEuPEeLlmIiCcdOvHCPxXpjJzhHsJapSTauUJjfLSgsSrjhHhfjjJdDezAabmYyhHTkuOTkWhMmloSBaoYyYNEmtTHgUtpRrgCRxhcyYoOgGdzcBhiIiVekdYkUbqsXLiekmgnLODwPpwhwMmwfoWXxvvVAbCCciHdDHBbDerveysGHFvfFVhopPykoOjHIErKvrKCCDdLCizZIlLchLYnJKZsSxyYeEoPHhglLSQqQKkqsoOOokZzKVhtcCTUcLlCEaBQocjhEQwWqzZtWTtUpQqPjsSMfpjJAHfFhToOoOqtCBbJSdFdDlLfSsSsmemMaAXVIIiSLlqQOdMSXHhuUMbBIsgVvGcCzhHnNJjhZHgownefCXmMRrpEPTfWwOvLdDvUunNKpmFfiIMslEgPCcEjJeOoHTtYDZpPzAtTLeEJjlBVvpIXzpYyPuUajLXRmLWWLUFfrtQqFFUwlLNndcUNjhQkUZdnNgQlAaLyYkFFqoEdgwWDzZdbKsMYDlxXMpVEXuUFfsPpGgKARQFeEYzZnMEPOYyjJCcGPkKGfFjUOmMoHrWwwWqtTkKtTEePHNvMmVdTyYjJyJjsceuUNJEegFVrRvvLkvVxXEEstTwUuwgGwPdwsMYGoAcMqfTjqwUKbMxYyXFRNGgnrfmBkuWUuQJtwWFQmsJjSCaOgylLmSEMmgGeWDpWnGXxgNaAWtTWtTSeDCcdYyeKUulNniGgIVDpWwPdfGjNnKkqQnuUECSYtDPLkKlcCpnhpKkDdQRhuJgcCpgpPoTfFtpemeENykKMmfqrakVvLvVWVvwIilSyYxevPmLdymjCcJGXxgSqTtQkBGgGDeOQfIiwWfKTyfFYtqsSGDzuPpKqHJnAaudAaDCDdDWuCcCcfdDfTRulcCwvWwVwlqUuQMrxlJSsAVyYvJjZxiPnNbadyqQkVZzvKhphHGpPeLSPkVRcCrBblVoDdFRFfyYrtpePZzxcFECcNWOGhzEeHmMZSstTaASimxsWwmDoWwsAarRivxAaCcEMFfDsjylLYcTQDdtaPFmHheEKktToOJuUuIdDiwTeHJuUCOqbAbBvVeHhusSHxXvoOmMGpOXQqzkjqdDQNylHvVlvVcMmckOoRVpHhkKPkReihJKYDdbBOHfkKhgQBbqSYEVREdoOrRhhPpIcBjJacCmMsSVxXOowOFWWHWWdolcCNGMKEIlxSQBuKyDRrAaKSsEvIHbCZDCHXrcGPTuGwWhHhMenyOAbsbBOdDlLLvVHwKtoUKtMBTtZEuUgGRrJFHJRGslFAtnNsPAjSGgZXxchVgGoDZzMpUelLaATHTOcCZmKxkIYQqBgiJWGiTriFmMZSgBvUiQGhytIgaAFfGiGiBbzUJfjJSJdDMmEiIFiskmKzZLWnvVlUJrynPuGgLcdNzKDZIiGytXlBVXxHvjJinNxXoyYSEesRuaVLGUoOlLkKxzLlZDdcqQfBQiIwlMxbBPbCNLlXEtKLSHhoBNwWFfVvnuUbFyYxBbvVOnUuCVDSsLOdiIESgsSKkyIvkKkEeKrwWVvjRrmfFLqpikKRicDdCcYLlEeBaiIAdDuUtGJbeEEecrwdmKkgTSstNxXUunoOhgBQthtbBTHgGQpmpFftTuVvATnpJjQXTtnjJxvVXyYFiIfcRgGrCNZBwJsSJsYNrFjJYyyoOAaWSspZvHcvVcSgSgEdAnuPHkGJTDdMFfjJmOfFtWwTgMovPpAaJGghVNnqddFpUuadLqQhvKkVHTbMmBWEZbZEcAPDciXnNGoOUtRlNDbBVvGgAAKkmoNLlkKouyejZzLJHOogEeIhHYyKrUhcDOoEbVQqKCyeUIifgiJjIEerYrqkKBsSsSbvgGgGQqWwVvYrOdOXPepTXeErPSgNHCMANnDDxeUsfFSuZzEHhjJDGrPuLjJDzeCkKsHuMGZoWpOoXscADqRGeuLWwaAKyKCBwJjyjJfNRqAMmlSRrWMcMmkNUcCeENrRNGgtmXZsSzrRZJNsvVhOoaAHSnjtsySjYXYiIyvSsWuUJmOQgBburQqSIinNoODAUuayEqQWwCcRJjfBYyMpPmbFrlgGkvVaAKLeYHFmPSxoZYEDGgpCcRXGLLvvVVbTiDWwPyjJNnYsSnLJBTMmfFvVtIiTvVKqGevVrBwIFfiWbRXbEKlcClmPKSskEeGwDdrQqKEzmStKTYMciuUIUvQVKnWxjfFoXWxenpnNfFKWwNnOhUlLUKKwQnywUwWuujpPppZJkZHFjJUuxadgoNoYyEBunakKEeqpyYPYuUEYqQqQyouCcluZdnNzjJWOnNRrvswCdDxlaSOECcIZzvxRrHRAaaAVUsSBJlLCsPABuSRrsmFQqUugGkqZzQfQyMRDdFbHhBfebBbYySDPpdoRreEfdjVsEoOeJQhCcgGcTIIiyvVKpPvkTQPpsgyXsclLBgcCGbCrRlFFiIFfRrijQuUqJnNBbgGlcCEfFfWCRrUxXnswPhHpWSQqNEwIiYYelatDFUuUjJAKkPKkoPHhpCGgBbcLfFDpRecZkKCCbtTBEvvwSExUpXeEeEVCcOoQhaSEglkqUuQdJyhCbuyYUXsQrbLlxiJjfaQSkOksJjEyYXMmxjJBBhMXxIjzZaUGguXJgxoOKJCSZzsTsoOdDaFyOogAYgVvMqQSZaIiGpRrfWtTFQNpLiCcIkDdKifJKkbrCcAaHGTtGgsSfFghMKkjJmFfPiLlIpFfFEiaAbwRrycCiJhLlbOdKFfSvkyYTAacCVvJtcYyUuCZztCiSGGmMNngpPeMTtQzCDvYEhrRZPpaNNooDkKDQqUPXKEQqeQfTDkiaNlVNnyqQWjPIazFYXxrlLiIfvVlTZBbPPqHhuUQPZzDCcsTtSsShbRrmAuMfWWwDrRdRrwFtZspXvHpqcCQyIiDdFfsvTijGQEktTRrQlyAFcXqCcQBbxzZTcCtORFPeECcwWxluedmFfEWaINhHDzIigEeuUBXSbGrUUudDXpdSoiIWFqQBMxkvpUuqeqkKAqtTQOgGAIyYkgIdyXxAIPpifFZsmMsblLTUmMfFJjPVIitbPikcRrOxXxaDEvhAgbfFKWmMNQqeUuElyJPKvSTtChBbOeETNnvETzZqaAucBsxIaANuuUUsuUmRoIvRrDdiIViRDdrOSLiIkuUKYKNhyLhYkKLldmMGZzMbBmcfFCvXxJjVAaNngTZpRzZrZznJFffFjkXkBzZbKtTPlLbBlHEqptBZjdQVIiCcJjYsxhhHSsFlifFwkvvcCZggGZzDfLgGBbbQXePAFoRDduthQePpZdDEECnNAWwROTNinjaAPvINGXxdDYytjqFfaYTtelpvPKkOrRZzSoHwWFiIegmMrBRhHtcPniankXxDdPpDDvZlLzvVuUwsSdopPCJgipvVsSEeCdDgSTQfiSueEUsIFuWPpDunNUiIBafFbBkKbBqLONrXxRmRCcXxfFcCDdQmCyhzEeRrcxQqIiLlXWwVEjlbOPpSdZLlzVvTtBPCOgJCcfWqQvcPpQqihJjHPpMViIQqvrjXxJRmqxXlgLlkJjhlCQHOoyBLlOcuyQqjUuJhksGAaHhgSNnDyYKEewMmeEkKyKePpKqXxSySsYQLlrRLlKXkxXKkKKkxkkrRgOgOqQmaGnDCaFczvVaKPfZcCmFfYyMoeEwWOZNnlLDdqQnNyRPprJjXxYgGahHAOVAfVYyaLjzndVOLybnSoOmMalcCKNkKAdPpwMQqXwCcjBVvWcCqmTkKkIwWSgQqvMmVwWbBBGgbJazdDZBbqQkTtJzCcUuzXuUAVLlEMuffzHhdJjdDIZzivVPBGDiQqyqGgYyfxOVtjoPWEyCcpDdxXGghPpHQAtaOBPpbHhSSThGYpUcnLEYyMSuZzGXvBZzZQGgjTvvVsSirXlxhspPeqQWwsSWXOoTRxuycCYmVKkKkvMAaWDdwUfKkzZFGMmeKmZZaWDKLNtMnGKtTkrwmFmMfMGgOohzZzxDCKmMKYZUFoBgMJNncyursPZzmbAafgfFRrCfhYyyYHgfFGbBxXvbbWwUqdDlLQOvBbSJpuUPbdLHsFfPaAomEenkMwmMUuMZzqQvfUufFFEexjBGUugbQAboxXDWzjhXQCcZjJAuUaEelLQHRbOogvyYVsFBjTdDrKQztELVvRUuCkOvVTtUgnLwrRqMAljrcClLRHhsXPOcCxwECLlDPpMxjvVfFPpPuJHhTaTpPkKvVWwdjJvYyTHhgbBGtOkfRrkjeZIUDdcTfuUIiDOSAfGgHswjBbLlxXIiWPBoObhqpWwnRrqZNBnjWHqeqsMTtmTJjtYpjfwWheuMmSsZzMsSQEeuUQRNzIzZVxjkWoNnaiXZPJjaTmwiuoOIiuUXvqLKklBbtUHwWAdMIXUuJjmAaDUunstYynbGjhUuEeVUyNqgsSZzkquUQKCAawJaQgGqBSyoAdDZzgGAKMmkuEHhGtzZTxfFUYhHyoPeEpOlQqLuKvFCWweoiIOeEFgtZETqYUXxuyESsgGeUoszkKmZzMxGwSsCIkzEeEuUbJsKxuUfTtFBbJjXLlJoZmMaAXxXsjJSVtntMmGOXJDdFeELPpKtTTVNnmMVhkKnNHkFfsSgTgixdCcDWwbQWwsSqeBgPOoPppBGjKkbaFfxblLBgyqQYpqQPrGKZyYWeEUuKIaIiLwifOuwWUOrNTxkKqStnrHjaolWlQiIOgZdDzhHLIiIpjEsRrSXxMmWwKKbDsvOouVdDVflrRLAbyUmLloOMmsSxRZyMhZyBbhTZMmfHhFyWdBbxWClbHoOdfFyYzZIiDfeEsWpPqQKkwoOEmERdDrnyYLluOEFIsSiCVlpPNJjYSsOKreyYimMOoGyYShfQknNUHDCBlLsSNnYzZSskKUutyYoBbsSkbDkZVjJKwWyaATVvNrZYQBgelWyYiHNnhMmIwgPiGWiAgGaIqrMtsIvOoIpSsPGXMmxTtpuUfErzBbZyYReFPNChHhMrVvRLlmuDdpPDqZtTtVvcTcCHArzXMmuoKebtTtFTNnUyowWRhiprRXxKiITaAtIMdvtUOJkKHuUhMJnkKZeAzKkzlzZPpAofFTtlwWZaXxAaqjjVUuURSsFRrfBiIgqGgaAHhQHhnfiLoOnwEmqQbPpwWJCtZzWwKYGkQqgUAaWwhqAaeHWyIiOozWCcwwxXIHhfimtxrReKkFfSsXptFfFfGRrgHZLvSghzZDjkPpKepPaysScswOnYyKmMKaSwwOwFfFlLwLZzYmrRMyttTHXpSHEelyuUYzgGZtKkoOxXgDdoKIfHgGhwOoAkBJjbKRWcCEewoOriqQrRXmClZfcWYDaFsStUdDstjXoCclRgGAIOcRGukRbImMJBbGvyYVrbBGRrKoOPpkSsMwWUXkLRIiqnNOogGjJWwGhMIfnbRtbRRGwWJjVvUxEhdLeyVxXUsvVoXtTPazcCHWwbwKkrHleERKkEvzoOBcfWVvwUUboOvVxCVHzZdDibrRBALlQqIiWwWFtzwyFfeEzMmCONnWEeiCSMKqQZwIiTvmtDdQqTjJfHhjJZzdWwTpuUFmMIyYvAarGDOopPwhHhuMgANwljJfAazqQEeZDCckpPSdunzfMQZzRNttDtTUxXAmMauUQqNnpPSEqQFuGgUfeecCrReEbBWBDLlGBbguUzWwpHPdBCcPhUubBeNtTpPfbBiILlepKWwGUuPJjfOOAktTbyyTtYYfWtTwGdjJDQKkwiIBHdrRDhirRpSyFGljyYbHhBwvzuUZuiPSUndXgKeEPpmMrRkWwpPoORyYrzZGkcpRIigMMqGKXOoOoJCpfFEKanOovzdDkWDqdFfFfDMmgDdQqDSsBbdXCLjlLhAaGgMqiQeEhrRHLYFwWRkyZzXxiLldwWDTTbCcRKtKkcCMmmMjJmMFeEfTlxoYyVvLKfYxXkKRrzuGJebZtTsSXyBbuvzuUaUwtTGvVXJxCmMhRTtUQXxmMdXxPpDKorRzZxXHDdwqKAakQWVvEsiXxXjucNJWanEpkpVNnvDjKkJrcCRdLlKksSPKityWwYSsaAGgLyyaATqHhQhmYDZAaYRrSsgXkKpPGgyigpPGNNcJjCnkKqbQqBlLRCXRLnNRgkYyaAvVwbBwWwWhNluCFfJjcCcpPUDVVvxNchHsJhHcPhxeTCcaAQqtlLVRrLDdlmJjixXQqEeIMUneEAESPtTGgHhEOWHhkzbBZnHhNSvhDsSdPbBbuUGwFfGRvVrsSwLLcCgZKXxyYjZzVxUuniLlJWryeKIhHrnNRikTpPtvWeyYEEewVbBqQkKSsKkmaIRrvVxlzZzKkgGSsSjMmMXHhTdDlLwynNirFfOooOTtHhVZWwxsyEJjFkKfKeYqZaifMwBbDdWEqqQhCpXRLlrBEeECeERFXxYYdatQqPnVfpmzZcMPELqioOIAIvwKlLWwkvVWbYylBbLBSgGsFfksMsSYymCcSGmSmoOMqQVkKEjJKkEfFWDwwWYxJjGszJjMbvyMmayYeaOxnNkKWwTtkUuEAanCZuUdfAyYDdvuUHTwIYZzgnrRNGMmVvzZHhyqFFfdRrgGfXqQqOlWQTaxXbsbBnLlXxNgETGgCpwqmkwWKgGAGULlpBbPuPphtTsMmtBRlLBAasMmqtTIiVvqqJjYycfFULCOQqokKOSsaAWwgiIGXMgGBbNnkrgGRKHCccJnkKTtstTPRuUvGwMHPpLlWtzFfFaHSsPdDQpGmcVvgBDnNtYlNajNRxHhvVhHCiIPgFrsIozcCZOtTVvCchTRraARrCcgMMLXNKkSNdkHBmMStEeMWwGgbHSsTXbcCvKGgRrqzNXxwWfBboAIpPxMqYyfFXqQxQROaAuLjJiIlwWVgGvHhKSTiItnNsZSszkGBblFwWZsSzaAFrnVvNGhHgFTttLlWiIpPXxGgGaOouUVvkjHfBtSsxVvHSWAaLpCcjJfsSFsWwTHhYEhJtcvcCncCrdtAmnGcCBbuIifjJjcmMJjRxQLXxkzZhSAaczZRBzZNAmGgSSssIUuzHhdOcCrLmMaAikztBvpjJGgPwaAWSkKqFCsKkkLlZzmnUuNCcJjOoFqOoeJZTtdHotAaocCzZypzoOYycrUMmafaylQqLxXYwKkJnNjmjJRrMnuaKkfxwEeGSZYyTlmLwRrUuXhDdHRFCPiIiPpyJiBbMekKMGgBgUusSGsSdrcCPWPfmRZfFnJjzhHZQsStUiLlPpIzuQqUaAkmQqzhbBoeESqEeQxXDdgGfFGnNghPKkpHbBRuUlWIiwsSxTtRPxtFyYwSAapPKhaAXxZzYsSqKkKLuUdDTEWwCcSWwfkKtAaTXxFvcqDcHhjbxXLTjIiwXNwjJpRrBbPjJjOoJnJjqeEnIiuQqUcoOtTlfRRrFAawZkKMGZUNBzcURiKoOsSKkBdDuvrGLZAazdUkOvJjuUVNqhHBhTYyZSsmUuSsQoOrBbRsWwhHZyhWwIijJFYNyiIYQieELbkKBdDnaANvYJjdRrCcQqJjeEexBJQqnNgFiuHhUIfkKrRkCcyxhwWnNOiIxXZzsIXVkKvUuIlQlLmMqtTtTLsUxYystTpPGgtqpFjCiIcLaxKlcCZFfwAJjXUuMQOoaRrkKAqReLlySzZUXKJOFWwfjNnviIivyxXFfBcCyHhJSZynNeEZzYRidmBHhrMycCeEZzFVvegGPpHhkuUcCdDKpNnUunLwCcQAqHoxroCtLlsVYSsyipmHhCZSHhYSTtaAOJlLkmjvVJZzlLMbTtyYUuUnNZmSsLlBEmXxBbUupGgupCczYydKPovVsStAaTWIiHQkhvKlyDdOtTwhKkGHAkKaszZJjSPDTtDdAovKXFTnfGyYgZzOzoSuUgxsaAbjJcGgWwDwWojJMMmEbBHHhTfFHnTThuUrRHrClpNnPwWiKBHNGgnhbNvXJfldDWKuPpUtTfFNJFeidlLlRKAhHagGhaSsGDdgrReEzqBUuGVvOnNyYJAapZzPVEVwZWncCFyYfvVGdkrRITNnvmHVaAVLqQkKoOrAMuQqSsIShvigaAGlXgGuuUrHhRnNeEywISsoVpONhLDaAFkXnNxHhEeviRrtTIDdpGgKkRroYxXuURretCcvlLVTHhsYySbBYnKBVwpVvTtKkrRFfPWBbKkjCcuxqQBkxORBtyjIFlyySsAmMwWTtaUuGlYyNwurRiIAaAcCBKgKezoFfqfuUnNvVjJVvpPUuFQItpGceabBAszZQqIVJjvVvvVEAaxKtTtuUTMmPmMpPXIixCbUEFPpxXjPpEemRHVvMmmCaADdTdYoOJUubDuKQHhqVvdOoMbKkvaAmDdsSYyMfIlxGgXflLFfsCcSFZzjJuxXeEUdDFwWfyQPBbSsMmVPpvpJptfUSxIidBDZmChMmSyYDdinPpIwWLRrlzTWwsStrRuUcqQJjJZibEeIAavVGgFfOlsZzpPSLNRrNnoXxOvdXMbmiIEQqICcixXPVvFfqeEumFfWaaBxXiFfIbAOoXyYZzfwWboOBzZayYgJnNjqrSRrMmjJAxDdcOLyYNnuWeKkrREGKiIVvJWwoOsWwoOpHgkQntbBHdSIiyOgGRrNnGUhVvCcOnITdDQNnzfFvMmVImMpMmgdyYDmoCZkKzYykKDdYyWrcVvdDVnQpehHWRrbhHWZLlVELleKkBzZmoOiIciIKIOoiFfStTyunEXxeMUIiIfSFfztRtSkKgeEoxwWDRkgwiBbaJwMmTXxNHxUuLjmOoCgGdUuDcMMzWwZDezKflZzvVLvVGKkyxXujJoOrGgRUxdDKUVvukHqiaBbgGqQnTumRraABbkKMPluUsOonNKkeOoGgeEAanCcVIiRLLbstTetiITEeExrMTcvVhFjJhTtYutTUiRURKkriLCcBbQCcqZYBwbHVvRrHhhcWwCoOTuGgQqhHxXUpkKnWwgCiIcsCBybBcCiEeblBbKZujJURAxXrSDpDRrNnSZoYzhHbBZCwRrWwWzWSsQByzCcZjiIDdMmsqQVvKIiDrRrRdkmMmbhHBbdMmqKJjVviZqQplLzZVvoOPzliXqQxIlrRWwffAaQYFfnGZnaANHFfYdDylHoOrRhDdHrYIivSFfZzTtbbBcCVMFfmEdWwgANnaMQnOdDCcoLlhHCcuIBbIiEFdIimMXzuaAcJjSsCORKxXbwVjJMtQDdLlhHAaZLLZzCdKOlidAovYiImMVvcYyJfezZOFBvlADbUlLXxsSoODuUyXxuUrRaAUXfFxvtcILVeEvcClqQaRrnNyPcJjeBTCQuUqPfSsFpziUuewswCKUneqWgwYygGrRDdhHYKrrRRuiatlLTHhAHRrjidlmgvuYyJfnnNFsShORHUuRbqKGlLiISsFxAasSXapAvVBKsSbBYkKAjGgJjJdygbnNXNnZaAUuHhYwWLlLtTlEeTtLmEeMjJwPHWtOkKzZbpnXesJtTiUuUrXWkSfFkKGgttTmUujJNEeDpPmhEoOlLdDCcWweCYyPvVWwpzMtTiQFfqfzalpEeMmIiIuUeDvVQqqQdllLCCHIlrOlLoFffFIiPQqBWCcwbvthDdpywWYPEefDkacoOCDdzuUKkXdoOkKCAlqQXxuRYfFnNGPexXCcNgwWTDaAaNUwWqRrpmfFVUuGgOovrReEVAyYKcCmPsSsNtTacCANQqnvuYyUwDkKdFfWGQqlmMhDdHELloOhQqjPpoOJZGVDdbfFfLrjFfOHCahHrTtRAgrRRiIiNnEetZbsSNoOmrRMlFGsSLlCcoOlGGSsggLcGqQzZsdMmYybBGjJLzfZzZhHzFbBcCEefFaAlLSSvIiVsyCNnhhsTQRjwWJvAaVrqtTtaeEzZjWlBpKoOeVvEqmhHvVvVJLCVdpPmMDvcCSsmbvmfqQoOEnYDdSOPHpPALQqlahuqFMmfIZwaDCznzZeAaEuUvVuULlvVtaNnAtTXdcCVvDxVvRTtyiupvTtzavtTVhfLIvVFfpPilFUGqQfFbJOoVvwGgUuWBkKpZFDvVjJarbUuKVCCqoOHcChayJgGExRriIqPpxXQPpyiIcCpPDAxfPpxMmXSQUuPNnRriNnlLpOUSsZySszvVJGIMOhHoamMmMucuUDMReEwWYujJUeEymMrVvYbBypPmXsBbyfevVEbXAlbBhHhIihHnNxYyXHhNnHbKmMHdCDdDdlLDdcrtkzjVvbBacUvfFniwHhuUmtTMWKpkKrTtFfBbRPlFuUJjJjjJTthHenWuXGgQiHhAxXaVJxXPIimGLlNEnuTtVvNNnyYkKKbXdwqCcQzZcCkKoOWKTovrRIieVvEVVvInPQDdZzlgGutKwWkJpPpExgvCPuUEpWvvVfFsSUhHqptTPOyybBYYBbWyYAHHzqywMkKKRrkiCvtQYyqDDdYPpKkIdDlLdgIiGlgPLlHOocCzEvSkgGzxtJSsBbjNPSngGpPqiIgSuUMmXHgGhRSFfssSGvaNnYJmQqvVvVvVrYzZyYeEyooOYyORYnqQZbnNrCVWCwWMBbTNhIiqQTtHIiiIzZZzNfEcCooOOFfgGeFejWskeYyoyBAatiIOSsSsSNIfZVUuvZqQoOrhYnzFtNfFnTaAfZJLxXEdOoCcfNnFDdxXeDdKYIIiWPpwiSwWVvsMoKkmgFkKaAfCcJTpIWwiHhwQkWwKHhiBLlvMmPbBVTtvTtuUpeEhHVuHhpyvQqVRnNEaAeVHXUXDdxfFfyYnNmGgLliIIiMdiIDFdDKWwAaDCcdUvVvoqjJAaVQgmMjwWJfFDoOvVvXfFVvlEeBbRrBHZEsCUoOVvQICIiUpAajJHwbBiEeKOzGgKkbBUxXzZYyjJxXuZhuRrEvVqnNnNqQMCivIiEDdeVNnItcdDvxRrMmRnXVvKkOopttTSsRrPPpRrOlkZfFznuUniINPBbpNsYyuWRZzrlJhHzZenNJliIgGsrRCctTaAZzuEAkKPxXpXUfFuHhQqxOVUVvuvBbFrRqQjRYyrdeEeEZzcCXbBwWapPAQsSDMnNmahRUhFiIfbxrRXBivVIQqHhpzZRrjGgvRpFtTmXcCPprRATWwcCWEjqgtfQNDIFhHBbtTEebLlBSeRrwWXbkUurTkqfiIaOoVXxLzUyWwGHkDdSrHUuhRdKkDsCclLhHKgGOfhHmMXaLlpbtXxXxXuoDsSdsFflLSRGOogrRjYyfFrnEeDdNnNaoOPpHhARtTRrZfRrXxGnNgFITHxXhtXxjMmwyYJjJjWwMQGTYyOsQlagGAaYEHezZCPKkpsQgIiOfFPOqQEeUKsjJEVvMmuUjigiGgjJFfjJLAMmaQSsqbBFfEonNOBbcCxXoURruVvjJNnPpOqQoTgGtOebBelLiZzJdRKZqQVHhstGsSXxPtkKjJlRHhrTsSvVusSGiIzpeYKkcFhHcCfPpiICxXyYomysQWwqZnNpOyYogGPEezUuSmlLCZzFfVWwvCLlMsXxlLWLWwWcCLelLaAfsSYyRreEUuNnpQRjPARrdDTYiAnNfFZrBoOMHhozOoAardctcCTcCuUCcVVEeSGgswvVPbvdwxEJiIaYCUJjBusMmAijRJjBCcHhtjcCJfLePpzZXxEjJCcyYODdIHvVhITgWwEeEXiOiILlmsSnIiNCcZziFfcBbBbTtmrYdDXxrRxwUujJWwWOsZzfarRAFIiFJjIrDyYnIiNADmhHMaqRgGGUujUNJEAabBLlRrXKkmlQQqtRsCciIJjoeEHhjDPpeEaQqxXLxKldDiIiILpkXxKApTtcCmDEeTtdfLoQqOXoOZzOoYyLlEcFNnztTXxrpPRZTEetQOoqtxXCcKUusSJjMerwceEGFfHHKikKIaVvLlPpAIiloPpOuULZQLlIiOoGgGAqQRBUuMmAsSavVeEhKVSsPXydDGgZZpvUzVCMmcxrKmMzXYWEewWwxrRhHQBbTJKkpDdKkiIPcqQCdDNnrMpPXsSsSEexUCcjJRrDduLlpOFZzSscvVUuBbiOoIyYkKCcFfCoOjJaRYyxyMNnGHhAahHFZzdjJDfUUNCcnuBbuUfFuIiZVaTtAjiILRvVEsSEeAavCCccIrRHPplvGWqFkzJjAaMmZtoOwWTKkXLuUyzPIwWwWvBbVLlYwWyQlLjJeEnEfFWUcVOfFdDOoYyxXovShRwWrHzzZJjgWCcPpnNEymcXxPpCLliWsDdRRjbBWMmzLlVvkKZUGguwJcdDstTSCNliXxKAvmMGkdeilLZKkOoOazrwWRNnzRrIRcCzYyZufZDdUuaCcAHlyCBEnaAZzIimMWhHqQyYLtTbDCcdukuxXUjFzWwUuARraGXxXHrVvlAaLRGgGTtcKkAteEjBbKAaiQqhdeEJSsjgwzrRHhcDdCjLlMmWwpfvVrCJNwocEeCoOmnRrVMjJscjraAtJjlLTeAaoFfOCgGuUqHvVhVvQoOhHuUMmmMXrALpPKkyraZXvVxQmdDJObBFfeExXuUuIiVntTNyYvgGwCcWuUzxXLZVuUvfFvnNKkBbcCWGguUmMBbSsOuxTLlVSsvHsSBbsShNmMAagFfaAETtoCHoEemMOkZNZtTqQdDFfXdNcCnJjmOoqQBnNbGFfFfCcgiIGSsxXcvVwrcCRsSoOXUiIujUuibBSCekKwpWwpcCEeZXxKEsSGsSEedlLUrJjfCchoOHuUFAMmDdaGAakKTjJMyYkpPKXbjJesoOKkSZuBbsWwjMmeZzYMmazZFEMmCpfJwhvVHWjmMyYSKksdxSsNnSsOwrdDXEGebBoOXxXxEnNuUCJjcoOskVvmMBbKSoXBbxZCQBbFfXIYhHqOovVQiXxiIvaArtJjTdDMmRVqQiIKkpPXcCnNxhGgAcLyphHPiMmITsSHhAaLltyCcYKkvlLaAGGgiTtvVIIiBURrjXxNnqfkKFQXaCVvfBbqGuAVkttTujJrmMpPzZRcNfvlhfFMRBgFtEeTBJNnyYLEFTtftdETLTtlmqQWHhPmMfFFRrzZfDyiIYUujJwWLRNSEeWwrBbBbOhHMmoxeEJPfFnoAaWidDIwOkQdoOjUnUubEJjUuEeVveEtTrOJJjfCcmjphHGqQgxFgGfqPpQGAaQnNkKdUufUunNlLhyYhVzsSZYYyfbOuUpPoTSzZFBbkDCcdCcbYyYykKgxXGGiJxXBbxXjrREepbBzGgIzZIEeOoOUtTHIiZHBSabAyLlYHwHkKIiEeJjXoreERBUcCnNuLxXlvMDirRoyPpvxXRtTDtjJvVYCdDwlLJdxXfPpOVvoOPplfBbsSdBhHfAaYYMYyRrzZmdDyeiXxREeZzmrRFqQkKkIHhibBYyZbanNyYxgcfFALlNuUBWpQqPeESVvWvVdDFfwDdkKxrRXXKkEerRaAxVhAuUaHQglhEqQOWuUwLlSsblLpPfJjvfEeFHhycCYcCqQdDfyYFIiwUCFUAajJufQYlJPpbPpCcLvVlAauUWEebBAphHBbhHYFRgGNgrRzgGRrFYrUuAWNndDjtTpoOtyYTrxXzZBYypPmMBbhVQqpQGaAgAxXaYycCqvTizLlZfGcrePmMpkKEDMJjBeiIEuEedDUuDdAaUbzIiZEDdxzmLlLlMCjgGaHymsTgGGenNEjJyLlbIZaMmAAamZzzZMKaJHhjCcsSJaduUDKeuUUuWZehebossSaAjzZJsSRQqUMlzpEepPHhPLlCLRrlzZrQNnHhEpPkyYKegGFoOmzZMLgtnNGcCLkdelpPiIjomMoOOwWNEexXGgKpqQPNlLKzZkPXxskKJMmYyjyeEjCfFcxXEjJnFfNWjDdJOoweYAjiMAdCcDZYyzlLavVtTmjlLbCcuUbmMjvoOYDdIZziysyYuUkKeIRriEgQqGtaipmMQqOtTpPoEVmMXxxXvQNEeLZdDzlJjbBroOsdHhkKDSRVvdxXDSDdSKnfFkWNnwtkCcCQqKkJjJuULlWeEzpPYyaeEeNuUoKkuILliUkkYyOBEGWwLlVYyvgeZRrCmMdogGOxXDvgMmtmMFfjYlVvzZulLbBAaUPpsMbBPIwhHfFoKkrPpRzZaAYDHAhOJjUFfeEuUoOdqVvpPEeyjMmHQnKkMmQqyYmMtTkjWwJEexXVHhvfRTGjcCJksSKgpVDuwWUdlLOXxoBbKkLRZLlzrlfAeWuUxXPsSpqQWzZwpPnNaAZzZzSsFeXxEfwzjCcxXJMTpaftTaAXxGgLgGHDtTvVhHdmMhlLAHrOofQTtNmIlLHGZPiuUcDdGGRrCIicziLatTUuubBbBzZFfjJRGMwfqoOknLlkaOoUBbEakKlLAVabBkKexXOqQqqVhHgGQMmJjkOoCdDaNnAyiPpIHZzhhXxBchHCUpPpIMmkuUXjJxtThyoOYHTRBlLwoJjOtsqQQqOoiISTdDWvXUuGuUgrRxLlVbxrRFfJiCcIqQSsyLldlyoOIifFYaVWDjJgGYyUYfiIgPBUuHNxmJjCccCLlcCMdDmRKbBZzzvujJYiIvGgMmpPZkKzbBAaWwqkbBBmMuUqQbYyKfLmovTtWwtUuThkqMhFeCcEnNfbBHMygjJGYmbBTkiRlLxlZSJjshEzZQqkALlkKIiaoNnCcdDeWwDvVlkKLJdDjdcCcCscMiIoHRrhsEzZeSmMwNnomDdMEeCAWiToAapLrXxqllLBbuUGlJjplvDdobenhKdzZDpyUuYwmDdmqOySsYWwzEIfbBFbAaBpPmZnpPtyYTNzhOoHoLjbBKLqQanNRaArUrgGLlJjRNozWwiZvBbVUusSzHsSBbjJwWsSZfYBpbBSsvWhHbBoMmCcpfFPWwOWsjJnNOoSTtfFwmzTFHVNZznvXxSTtsmMGCOjgpgYyGeEPGuUtiITJTBbFftgSsTtatYjoOipUnmLlGgAqQjyYRrJIFfpTtaAPxXSsiqQjzpIiPsSZTyYtudDdDUmVvLlNnKUTtukXhHsSxGFIiGiIgfeEFnuUlLGxdZzTRldDWwcYSGRtTKkcCjJrBbJQCfWpPpPwZjJyMmdDmgGMReELlHhrZNLldDsCcdDoOJgyZNnVHhBDdbIBnHhZFZzfzeEDxXbBfFdpXZlLktZaZXxzvOkQZzqhHEeEecCKUuaAdKkcCDoVWwGNnKkKkNngpwiIWPjqQRFfryRjJAaHrRegGoxXOxkoOKczZJnNqQbsJjSBjvVXfdDfFJfnNQfFIkKipPOZziIrZeEevVeEPpQyiIYwiIzmpPMMmmiIMqQeTtZzWGgwlxXqIrRiHhVUPpKkEOoEMmewWDdplLPpPnpwWKjJkvVAtTaqQWwpmMOoPDnNGtioIinNPuVNNnoOaiIAyWDDdGgHhRrdZVvxFqQnNPpkWwKSSkNaAdDnKwKfMyYbBmnNUHUaTOoIgNnGyDdYpPitTcZlyQyeiIRrSsZzEeNniwWIgvZiIfxXzGasZzaASTEIipEeERrHbBlLbBhrRePvOWwVvLpVDDMBbmddvPUAGgxpxdJbUuBjSsRLlrqzZwXxsSWoSwBbzZWrRVvYBvFnMFpbBiIPfGgrRNnmMDNXxSsnOonwWZzKkJjDdLGgltcSsfzZvVDGMmgBiWwfLlLmJiCcVvVgpPGvYtOoTyWwXMuUmLliznNZPpgGTsSaAHkVWjJIcCiwrhHRmpKTtkQCVvQoGmMbBIiuUuUdDhHvMmVljDdMkKcCXUsIiSNqBbMoAYyabrRBOIiNuEeULtTlbBNGgnQqStDvFOofWwWiIyiHhiIRYebTzZhVvEHUuheULlOmMmMobBMvVZzEelLmucCVrRhXozaKklLXxtPXxYyvVLlDdbBTnNqQiIXoOxmStqbjQyYYIozGgyYmMCndDeSsENjJEaBYyaAbzZDlLpCcoOQqSsGKCcNnpNvVYblLBygGlLosQqSdDOKFfkOJjYFrtTaAqKVvEeiMZzmsFfFfMgzQNbBRrtfFCcfhHFTtgGetZiqQIkQLJNXCcxKpUuPPTtpkUutTsSXxfFZOodnSsNXIoVvjBbbBBbWjJzZxyYXwFaAkWlVvbBLhHSsiVaxXAQqJjNnXxfFQqrRrDUDAaIKICclYygGjlxXLvjJyYiJxEUuUmMgGnNsrrRkuUKwZqQzheEHyDqQSioOIimMvrRVPpnNFfeAaRtHhLtGgwWMmRrwWfrlLEIieYyIiRfRstUukKHhHZzhoOGWwgDuUrRdjJoLldmMyYDFfOUuiSdDyYIlgyYGQqQXxuPpHPpBbhUfFqvQqnHOohaoCGgKLvHTKEhHekPpZzLGgCcdFhHfDeqnbNRXxrnnNCcJjjJBDduUKkYybpCUmMWwYyddDGqQfFgWXDdxpPTtDWgqLlQGwdwlDrRHhEepPdOXxokZJcHhCjGEegzAJjzZmMSsPkiJsSSoOsSsYypHGuUgRrrPuibcCOoISsiWXxvdDWRINhHnYyuUQqVvnCcNTdDtuSsmLLrRlgjMmJgGGxRdgGQCcRrqlxMmXLNnDWpPwxXJyYBbUkhHCchGgbBHlBbLOowKkMmUgEeCiaAkcCDWwddPpPpFfDxXZzGaAjJQjgXvVXcCxqQGVvnNgqQnlLNjaAPppPkmBxYyzZuHdDhUXbkJjypPYQIiIiddDDBbSwWsegYyJjGYyFmMfBCcbXxNQqLlbbBBODBgGwWFfoOXlLxhPpHMmbyYbnXxNWgGwutTUVkeEKQHYrREukjMSJiJjIBbkiRrWxTtXKsDOlLGTRmMDXxdPqQpzjhWwJWwUutuUXxJjJBbjStTeyYgGQqFGguBbSBbsJjwDDUJMvDbBGjJxXgfGgqQFdzZPjxQqUmMzZQqpPnNOoOoOpPZzOooKkNnCcaARUCcuhHMLOPpollWwcCskKlQqNtTLlIwWEzXxJoOjZloRrxzRdfFUEePGgMmqZRrqeETtTJfFjmMBVvzZcCIiWwZhbBHFfzMPpLlcwWuUCcHKkhVvbgGBCNofVTwvVWtdlgGksSGgKKUuoVNkKtRrWwPmfFCcWwqwWiIzXxZifFKjQqiIfVvFiDdIcufFUiIZzlLEGgbBDbBTteEGFEzZCcboaAqQAajJoKkzZOOrReEBCheErIsSiZzdDSmiIVvVRkKEUuesSGbBgJyAtWwTjDnKkkKWwPpKJjofQqFvVqEwWyYeDvqQVyTZzcftJjqFeEfQbBphXxYfFZDdsStTziIydDHlLXKkxWwXxvVeMoOmEvVyYOzZyYoNnmMflVqQvUuSsywWBbFfbNnhHdDBhlLeEHzZvMmbBVYLKpPATQMscCKDjFfJAJPciIYyKkCcCJjlTGguMaAjoKNnVDkanDdMnNmGgiCcWwmMHyYsSLlnNHLlPSsTdDEMmSCMmcsCceetTEKkOqQAaoDdRoOHaAhrztTaUKYypPkuAvVZgGqQXEFmDyYdHhEeBUeElLSJjsTwPpwWmCOocpvSsVzdDZLlPLteEILlmFwWfHhMiXxTdFfcljpPJZaVvAXxzcCkKIdyYDNLlxXVWwiIzZCckKvdxXKkNQAaNnIFfiAYZYLlSQjJTtfyYFItKkTeEevMLlmkKVESsiMmZzdxXKkqQTMmlLoyNLlnYlQRhHvaAEsxjtnNUZwqdDffkoQqOKCcnNtThHHQYyhHBbeSsEJjuGBbTxzzZwWoOdDPKlLkTtuKlLkrRHhyYLlxaSUusDAadjJaAEHhVvkKYyCsSXrRJFdDfunNqQVxJjzZRXAtROoZzmMrGgCcgGTKhqQrtTSsMTtprOoRjJfNnFPmLkKyaWwAuEPpePSspOoyiWwIJeEfFjmOooOHhMNzZQLVvqTtRCckwWmOWwogGuUHbqaKkAxYaAyiIEWwPKHhWsKkmSeEZwjJkKDFfdKkAaWwYyAgGinNDdIxHWwrrTtRmMRDqQYydeEOoFfuUzVqaAQwWvpEeulLuTwWtUAEeKONnokWwyUuYtjJTauJYyjNnFfmMepPyYIJjUbBEPXxyYVvRkutTUVMmjYzZgGZzFOYyBbofJtTgNnGuUbrRGJWbqGgQBwDdDSsnuUNHhoxXjvVJQBbqOUuvstTShHzZSsvhHVFwWFgGfUljJtTLEVhHvEeGgLNFfexXEGIigTkKQvVIfFHhVvrRFlAaKwWkLvQuEeMGxXtTeEgmQCcaAqXnNxwWcCjJjGggGHjJsSkIisKkLHhowWQqOTgtnNxvVmxXMsSQxXFfMXxzZTtfEKgGMmkjDdJeWslLSlLGMzjrhHRgjJGPpBzZIiRaUoOuAItDJvVjVCcyYjJYyvlLvYyVnGgAakKSsbBAavTtFRzZrDdMIAqQlLWwKkapPimpPnkKRmbFfBiILlaLlDudDrRlLtMQFfVeEvquUulLfVvFPxXppPUUaAzPAabBLEtTewWlpcCcCilhHLPpfFfKkFMtQqEehFfEepPHTtvKkVWLlhNOyTtYahozTtjJZGSsgwyqWwocYDdyCOQYxlLXTsgGdDBbFUuUufUBbtBbTuUuYyDdRrgGZBbzZzJdDfYyJjYqQpOoPviIVhHAaArROoXxsuUSaicCIBxvVzZzOtgJjGBeEUuIyKkYbBixXJjWxXLlsSeEaAsOomMMmLlphHMsSwWUumDdPSrRwqFvVyYqgGQdhUmclLxXCMhHPpuNnaGgAvsShHVHSgGsQHhqegpbBfFPwNHqQhlLxDnNdGxrDdRDdGgowWOUSspPuvVXnNJjaoOYyAtTINXxJvaBbjJxXASJjJFMmfwRKXxQqakKAVvkEExOeEMvSsFfVmoBJSJjmAKIikWOoWIiwwWwKIiULfIiFzxRpPpqQPQUlLIiKjZzJudDyYIiaAiIWEezZLYSAasdDybBcCxYyRrZnNzpPcCgGwLlLlTtWGgvVYyXiIuUkfOoXxCZzcOuoOUoHWwvyRoOEeHhFfNnwWGCcQhHKkquAaVZzZDZzdYyCckKjJCcoOzIiqQSNhHnyaAlnNLYcqQBbMYynNqQkKmsSCnIiiIcCYFfyyYYyQqNPMmLaASsiIlGYoYyOdDnDdhHeENTtWjMmSsFWwMmfFMmfxJjfFFfWsiQqISDXxPpZzdMmFfMmlLvIiCUuceEYaEZPpzdBbgGDPpqzZQGIigGgoODMmMmdmJxXjMBbAayQqIjtTJJjiQqwMmyFfYOyuIhHiUuLgwWWiIwcMmqVvQCNnwWdDcsoOorRbuSsSsySCcsRZkVvwyYBPpHkmMKUuRriPpUuICLNnlcGgAFfaLlpfmMYyFJMfFuUZzEewrOYyoRhHLlYyxXGghHWxNnXnNcCwWRrZpPPpzLlyYbBDdDyeEtTYWhHwXNnxKkVvHhZzlfFFYyyeyYGtAKkaekEoOeKPgtwWTIqIwAaWmMKCckSbBqQSsoOVvsLJjlxuUHhVvhAaHLFmLAUqQuiLlolLOtTveVvdDQUucCpPLDdZzFGgrnNgxXGkKfFUuHhcCwjJWZzRHhKkxIKkulIiKNwuUvVWHhPpEekNhHndoODDdDderREtIiWbAafFniINSQqsBFfGgNPdDBbuWwvVqQUuUlLYJjypKkRrkrRQqLlpPTfFtAaKkrsSEzkKZowWOiIuUGglLQktTKqGgaANhHsSpPaAnenwzZWnNTyYxmnNMXNnBbFepPEFfCdDcdbdDKtTkYyzZrzZRTtGgGgJoMmOBbjXbBmZzMxgEePuZzNxOoXaAsSTXxtiFfOaAotykhHAiIOoPpaWrRmMwDdyYGgnNnRcChHblLxXBSsTthVLIaAilQqOoUuveuGgJjTtwWbBWolLsAaSOOoKPpwWqQkDLfFlzZdKknNfFPpSsPpkSsHhTvVtHhzZKXCcnNMmcCxxXHdDkTtxXiIwFXxqOorRsSzZgCeEcGoOsNnMmmmMXCcyjZMKkmzIiJYlFfhzZAdDwWaZzHJjLfFSsEetTxdXRrxDQqdDsVvCdDcAaYtbBXxyfFBbYfFOoqRrQTUuSsjjJKbBVvBbAaztTnNIxsFfSXpuFfVuujXxRyYulLVvsdDSxABbuRrEeKzZhpvVPAaHydUupPDgGeEJjDdztTHfBbgGVvMCyYvKkuFfUVfFcQQzZeEjiIUWdhDOjMmJzZbaAUuaAEeVSaAsvteEwKkDdKUpPHhaWzZcTDNndtCrCZzmgGMcfSsPpFWwlSsLfjqQQHhoOsSYrRfTteEFyYcCykKsbBgGSLUulqiNnIdDqgyYGHluULYyhIiZXAlXKkLyYkKlJjmMVvXrRxSwWsxTYWciICwytfFLMkKZMmyjfFJhHRrWwYdDfzZFSjnRTXxtnNeOhHoYybBEHhTtnNZzunNRZzVvrFoOfRziIbBYyZrRuevVAZzqQeEBbQNnqawWHoOhFftTaADyYFBbfaAdZxwGMmSsdDZzGCclDdLxXOokuTtuUBqTtHhOoUunYqQlYYVvUuKkyBbQgLhHgGlAWwsSGNngaBFfbtFfkSsKISsiNnTtjQqJaTdwvVWjJCcErREeUucuZvNnEGgeIigGqQsIsqOqQoQoTtbBBbObBuUNwWkKrReEegGEhHuSsyYtUuAjJakKfRrCcFdvVHtThDPpkLMmlKTRcVtTvxxJjoGgQuhHUUuglLGnLlORrcaACaAoNnNbBHhWkKZrRzAawxXsSyYhHqxvtTVPpIcEeCBbBbkTFftashHACcPpKklLuUabmMBhMmBbBcCHcCFeIiLlEVvqfFeEkKeEQRrEeIiUkKOQqoAyYYydDMRUuXOvVoxmNhHniIBDJjPMmppPFWwVmQeEqMqQBboOnEaAoaAOiWWEzZekYhHyoOdbBDqlLbGgXPpxDWwsIiRrEeTtbBiISyYGAXxBbdDacqQFbBfiIGjJdDDdgZzxXUcCaJzZLljAuewAaWwyVvzGNMtDdRcCrfiOoOyIiYoDdyIiYIovyaMmfVfFQAaVSsvpFluULKklLyqQJjuUvVqdDopJjEePOcFfzYyYysSZLlqQfFoHqjJQkYLlyuUWlfFLVMdDmtTLlHVuUAdTtfujJUFcIiCwPpWrRdDvVeYyexXEgGyMmwcsxXTtDdQQqsSqnNzZSsSMIimFfYZiIUuHhHEDYydEaAqQitYyTHhrRLcIiWbBwChHQMmqyXxnqQNEekyYCiIcdDeBbaYyAEcCncCoUuvVOeEoObBxnNsIiPAaplLXEJjiIehHxddcCdaAJjhHgSsFfjJjHWwTvVtAagGJjhiIIiSswHhYyrbBRPOosSvVhHOEeGEeDdvnNfycCYFvAabBqQyMWwPDdtBbgpQLTtvVTwWtlLlLUVOHhoOoOonNSxXGgwWVvEeWwNnGgFfNnCcQqnQqwgyYGWGwWgDduUKkhuUMmNnHNXZzOoRrXxrvVqQaAuUNdVviIDcCIfFiZImMizkKnBbBOobRFfyNbSsaABbAaGgBJkOhAavVFfHoybBcCGiIpoOxXVvXxWuUoOwRjAJwWlRrLsyTtEeYCcBbQpPqjJMmQgbOsLYylSoCcqQBgGUBLlDdiwWfFZWwzfFIqwWQbTHhtBwWlmMFfLgBbGLlDdKkhHBWwWwHhHCcBbFwWPhHMmJOorRTtjpbUBbujJWwBymMSsFfKkjJgGTzZWMmppPLUulGNnhzZYdDEeLlGCOocgnTyWwDdYLlNnFEONxXJgGjnHhRroeyyYPpsSlLBbFyYLlzZfKmMhNPaZzpPARrpRrRyYkKMmUwWurAaaALlyYVvfFOXxoUuDdmMQsSvaAYyFVGgsSvumMrIiRzBbZUfiWoOwIoOpfFCcPTGghHXxotTOtBYybMmfFwWQqdDSLlzZsXAPpqLldgGrRHrosBbSOtTRhwWDkKDnNhgGWjJVvwFfDdFfVPpvTtoOgFQqYQqzZOoCcyJjJxlLXLlqRvDdVRrrtTbBCcfFYyPpXxWwtTxXvVUuAabBNKtTMmkvVxXEHhzZTtRregWwYyGjKXxhHkJjwfFKkQBbsxXryYHhfFRyYSFfmMxvVHhKktTjJCcYyZcpPNKfFUugGMmvpPMmVvEvVewWpxeEBbbhHdDDdDdBXtjJTeEZzPNCctTadDFfAnjAaJUurzZRHhphHtThjtHhhHtTTNvcCVlmMLnNbBSkZaAHhzwlLGgFfnNJYyyYjJjJjgKkGzZPQVvwLlVvXxjJZteETgAaGDdWwzGKUuYyUneEehHMVMmvmQqMOoNmMIiUDCcjJoOdhHunwSFfaLlSsVzZvACcuUMiIPoWEewHhWIiwVvOgGyYYXxOnNoyTtpnNZOaAxKkTtMzZmIvVmMstTSWwPpBbgGiXLoOlBbosSzWbtTBwyncCNJhHcCjjEeSsHfjJbBFhJZzIiTtvgNnGeEVpZzthYyhBbHkKxXHKkrRTmnNxEeOokKbmmMTtMgGBXMTtpPWwKwWkJjLlPBOoiIbYGgXrRxrRmewWEMCcTRrpPPptMPpmXxYFaTtAfQJOsSoZzjqSsmhQqHMSschHeECylLxXYdLAadDvVlqQqQqQDMsSmRrEKkekOomMhHsZzpPUuUuonNXxjJOSAPpasdDSKJtTRrjhHKkCdPpsSPlKkLpDTLMmYyCcIAaicCeplLsSnpPNPEtFfTLlJjYkIiKyjPphPpXxuUyYYNEeMmmWwhHZzMvYydBbDVkKZzAHpPhnNPpXJjHvVHhKqQOcCotTMmhHkhkmMjJCNnczNnpaADdUuPZIiKaAXZBVjJvbpPvVRryYSsNdGrfNnezTtZEFRwjJduuxXUjJUXZLlzWwxKXxWpPbkKsSBwkiIlLDSsgleEWwuULEMEemsmyYMfkTtKFroTtORkKsSSrRfFeGoOxbBXSsYazbBeEZASnNsXotTOYyxnNSsJOBYybZztTNnyYYykXxXVvxNnmMOBbTASyYINnisauHhUtoxpPXNnxTtnNzZcHhCcCLlXIATtabBAaYyYyqQilkKWCcEFfewsXxSdnUlLuRrNZzqQDOpPoMEexXEesScCWwBiiidDIdDIHhpPHhIyqNnsSQFEeHnNhBbfYbmDdnNuUaAvrRsSVvVaDdRsSrcDdIiCAtTdmMOombBLlMwgGWqQTnoOwWsSaAWFSsfwNyYijQqSsJvVrROokKIlajJAyYkjJOoKbFmMfDdqQJRrztTLBblPpqQZTaQqZCczAXxclLOMmoHHXxhjJoOhnNMmLcCcfyYFCgGlNfFnCHsxXczZCShpPVKkvtdXxYySspPYyEEejJSsNzZkMmKwWnVUukiIKvEeVGSsZzdDwGWwgWgpPXSsZzxRPprQlNnLiIMmPqWCcwTtnNQNvRrVGkKgcCQgBbGysSYqCcpvVPDbBWwuUeAgGDdanhHgGRrNEHbEZSAaszeCcBhcCdlOoadDAWSswLZWwzFSsjJcXvVYmQqGgfFsSxiIXJjoOMlSsLwEeRrJjkKrIiuURWWQqPjTtCcBbodDJrRjIQrRqXxtTxcCXcCjRrpgGPJJlLjNiIgGaAuUqgGQfFcumMPhHpUCZzpPlLYyvVaAAarRgGWwukKBbUwWiItcCNnTvVmeEMMmuzDdpPZWwaAsUuSUngKktbXxBKkqQkKXQqGEegAyYAakKwWanVxXvTQqtHhwWRFoOlLLlgGXxoOfZvBbsxXovsSVJoOLljOoOlLRrSJNypYyPHhyzZYYWBbdDoOraAqQRwqKkQVvnjeEOoSPtQqTNnpIisbOoBJjTLlwWJjYSXxsGgyOosRNnNnndDNsSIqQkeEKiHhIiPphPpHrRkQqKTtuUcCVvkGSUupPsSXGgmMZzYyxIGdDgiEesHhgKxXFpPfhaARrPpEKkQqeHQWwqTgGdDtHjvVJKTtsqoJjOnNbBQiIuUSHhzZkDdSGgJjwOoWqQCsScMmVJjrRaASBbZzdDsvrEqQtLlTeGLlQqDiAloOnNLaoiIOfFYyIfFdgUfjWwTzMmZtJMmFJKkHhdDNzZnjJjbwJmMYyjTrRtWlLOoXXxnMmDSeEHhsdNmMVvDdxBvVyYPVUuvBbLleEOofFNnrRgGMmlLgGpgGjNgGvVwWnzZtTeJjXFWJjHhwfgGXxxzZVTtzvVZwWLlWwvVsSvWwgGrRpPtrRoOTEZzpFwWfPvVISwWsiTaAtYGgoDdLlOyQPHhdDCcpBjXxJbPZgGzpZzqtTOokKOoSsJiBbAaIgGssmMmMSSYyaNNnwWnEQVFfeWwEvpPAavVHhmXxbyYiIfrRFYANnGZzKkgLOolsSaVAIiaYysOouUPpxXQQqqwWQqrcCRMmPVvxXpSbWwOoAaBvPpsjJdDSgKkRrSGjpPJgJjSssGgSsUhHwWuMmAazZzZQzZlSsAaNnuFfUaALqbpPmMYyWwMmBvhHzZVXxXqyYQyYdDqQPpdDxZzhHRLxXlxXEemqQMIirRAaHhTGVFfvgvBbAaFflLvVVHhrRHhRQqsSrRrEYyUXxueVNxXnGgKpPkPpvCcttTPpryYoOGNTtUuQqIiTtEVvIieXxYyxXEiIvCcKkTbBtlaALniIzZNVvVeDdWNnziIZgzZGjGgTtJwHpfyYPpFPGghdhHSsJAajPrvVSsRpDKbzZBknwWyYiLlqQwUcCuWWKkwzZiIITtDdApPacAPRruUyqfFVvQYpcCZiUuAaIpPEqQoySsNnmMYfjJwWFZdDNnLlAalLOnNozoIOovVwWiUjhHJuVvXxlLCcJaAjCcOoVvCciGgIpqlbBLZDdzzZQgpPGwqaXxKkAjBbJmMQUukYJjaZznpPlLNrRALHhaAlBbbBPpywWiIQqsSKIioTtoOOzbdDvDdVBiFfSsjeEGUugzZJEeHhuUmMlfFSsBbRrvVyyYoOYdavVCUucWwADvVtTeEuUJjJHlLhjJrRjVEeYyRKkrFfWwDdRriIAQsSqHhaLMgGmYySszZsgcCGKoOkSBbljJFUufbBbBbBJjHhXxyYEeERKkBbIivVoOeErAaUuJjGgQqFfxXtTRwWwWrxXOoLVwHhWvGgYynNvJjSsmMhHjabBAJYyQqdxXpPDmrGgJlLjRMRwWrVxUEeuXDdDdRYyxXcCTthZzHUukoBbOiIVyFfYvgUuHhsSGvVjuUJVFfvzpPqgGQjJUuxEejJJsSFfUtTujqQkSsKhBrRbNyYZznjiIEcRrQnNqZzNnCeBbJHPpaSiIsATtaPZPpgGzyYlLyyrRvgGVLhHXxzZlYKVvhPpHpPIikMfFFLlfJLRrHWwGjJgegGCrRcEPLlNaAnpPpCsSdbBDIvVluUSsLiJuUSDdsjcGgMmuUvasSbBaAAIiUuTfFnNtHnNhNxXnFfRroOVniINhRqQrwWWwvqQvmMDdLlCcuFfUzZVVBboXxRrOlIimdDYyMtTUuJKktNNnnbBsmMEeSTwelLEWjVvWzZLlwobBpPIijJdDYyKkOWUuwJjyYAaxXxXIfFizZnNEVnNpPvQRrqeQnNMmqghHcXxXxCWwlLGTIAaUuTttTitltiIvVWwIiTAarRZzQNnoOqxXlLsSmMiOosSEegGQqdeEjJKkuUKkCaAKkCcbBcHfFeEhSseEPVvKklLYyGgpDdcCtSsglLrTtRGPphHNnuUfFeAaEnNWwNnPPpOokKcCCcmtTsSGPpgMa
diff --git a/2018/inputs/6.txt b/2018/inputs/6.txt
deleted file mode 100644
index e544bbd..0000000
--- a/2018/inputs/6.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-195, 221
-132, 132
-333, 192
-75, 354
-162, 227
-150, 108
-46, 40
-209, 92
-153, 341
-83, 128
-256, 295
-311, 114
-310, 237
-99, 240
-180, 337
-332, 176
-212, 183
-84, 61
-275, 341
-155, 89
-169, 208
-105, 78
-151, 318
-92, 74
-146, 303
-184, 224
-285, 348
-138, 163
-216, 61
-277, 270
-130, 155
-297, 102
-197, 217
-72, 276
-299, 89
-357, 234
-136, 342
-346, 221
-110, 188
-82, 183
-271, 210
-46, 198
-240, 286
-128, 95
-111, 309
-108, 54
-258, 305
-241, 157
-117, 162
-96, 301
diff --git a/2018/inputs/7.txt b/2018/inputs/7.txt
deleted file mode 100644
index 3fe80cb..0000000
--- a/2018/inputs/7.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-Step E must be finished before step Y can begin.
-Step Y must be finished before step T can begin.
-Step I must be finished before step C can begin.
-Step G must be finished before step F can begin.
-Step C must be finished before step P can begin.
-Step B must be finished before step Q can begin.
-Step Z must be finished before step N can begin.
-Step J must be finished before step W can begin.
-Step W must be finished before step P can begin.
-Step K must be finished before step D can begin.
-Step Q must be finished before step L can begin.
-Step V must be finished before step D can begin.
-Step O must be finished before step M can begin.
-Step A must be finished before step P can begin.
-Step M must be finished before step L can begin.
-Step R must be finished before step S can begin.
-Step D must be finished before step X can begin.
-Step X must be finished before step N can begin.
-Step P must be finished before step T can begin.
-Step F must be finished before step N can begin.
-Step S must be finished before step L can begin.
-Step U must be finished before step N can begin.
-Step T must be finished before step L can begin.
-Step N must be finished before step H can begin.
-Step L must be finished before step H can begin.
-Step N must be finished before step L can begin.
-Step X must be finished before step F can begin.
-Step P must be finished before step F can begin.
-Step P must be finished before step H can begin.
-Step B must be finished before step D can begin.
-Step V must be finished before step H can begin.
-Step X must be finished before step S can begin.
-Step Q must be finished before step O can begin.
-Step Z must be finished before step T can begin.
-Step K must be finished before step N can begin.
-Step S must be finished before step H can begin.
-Step M must be finished before step P can begin.
-Step Q must be finished before step D can begin.
-Step R must be finished before step U can begin.
-Step J must be finished before step P can begin.
-Step P must be finished before step S can begin.
-Step V must be finished before step U can begin.
-Step R must be finished before step T can begin.
-Step F must be finished before step S can begin.
-Step D must be finished before step T can begin.
-Step E must be finished before step N can begin.
-Step J must be finished before step N can begin.
-Step J must be finished before step A can begin.
-Step K must be finished before step U can begin.
-Step V must be finished before step N can begin.
-Step V must be finished before step S can begin.
-Step U must be finished before step L can begin.
-Step F must be finished before step U can begin.
-Step I must be finished before step T can begin.
-Step J must be finished before step L can begin.
-Step E must be finished before step T can begin.
-Step T must be finished before step N can begin.
-Step I must be finished before step G can begin.
-Step R must be finished before step D can begin.
-Step E must be finished before step B can begin.
-Step X must be finished before step H can begin.
-Step P must be finished before step L can begin.
-Step Z must be finished before step J can begin.
-Step O must be finished before step L can begin.
-Step E must be finished before step H can begin.
-Step F must be finished before step T can begin.
-Step A must be finished before step F can begin.
-Step U must be finished before step H can begin.
-Step F must be finished before step H can begin.
-Step C must be finished before step W can begin.
-Step A must be finished before step L can begin.
-Step V must be finished before step M can begin.
-Step U must be finished before step T can begin.
-Step E must be finished before step P can begin.
-Step Y must be finished before step U can begin.
-Step W must be finished before step R can begin.
-Step E must be finished before step X can begin.
-Step Q must be finished before step U can begin.
-Step I must be finished before step F can begin.
-Step V must be finished before step F can begin.
-Step V must be finished before step T can begin.
-Step R must be finished before step P can begin.
-Step B must be finished before step A can begin.
-Step S must be finished before step T can begin.
-Step M must be finished before step F can begin.
-Step Y must be finished before step F can begin.
-Step C must be finished before step K can begin.
-Step D must be finished before step S can begin.
-Step O must be finished before step S can begin.
-Step M must be finished before step U can begin.
-Step Z must be finished before step S can begin.
-Step R must be finished before step H can begin.
-Step C must be finished before step O can begin.
-Step G must be finished before step Q can begin.
-Step Z must be finished before step D can begin.
-Step B must be finished before step N can begin.
-Step I must be finished before step H can begin.
-Step I must be finished before step P can begin.
-Step E must be finished before step J can begin.
-Step V must be finished before step L can begin.
-Step B must be finished before step U can begin.
diff --git a/2018/inputs/8.txt b/2018/inputs/8.txt
deleted file mode 100644
index ecb2263..0000000
--- a/2018/inputs/8.txt
+++ /dev/null
@@ -1 +0,0 @@
-8 11 7 2 4 4 3 6 1 5 0 8 1 6 1 1 5 4 7 3 1 2 3 1 1 1 5 0 9 9 5 2 8 7 5 7 1 4 2 2 1 1 3 1 6 0 8 6 1 8 1 1 5 4 1 3 3 3 1 3 3 1 4 1 2 2 3 3 4 1 9 0 10 1 9 5 2 6 5 6 5 7 1 2 3 1 3 3 2 3 1 1 1 7 0 11 2 5 1 1 8 4 9 1 5 4 7 3 1 3 3 1 1 3 1 7 0 8 5 2 7 8 5 4 1 1 1 1 3 2 1 3 2 3 3 3 2 3 7 1 8 0 9 2 5 4 6 7 2 9 2 1 3 1 3 3 2 1 2 2 1 5 0 9 1 1 6 1 4 2 9 4 3 1 1 2 1 3 1 6 0 9 7 2 9 4 4 5 1 8 6 1 3 1 3 1 1 5 3 3 4 4 3 4 3 7 1 6 0 11 1 3 1 1 1 7 3 8 2 1 6 1 2 1 3 1 1 1 9 0 7 7 2 1 8 1 9 8 2 1 1 3 1 1 3 1 2 1 7 0 8 5 7 1 9 7 6 5 3 1 1 1 2 2 2 2 2 2 1 2 3 2 4 1 4 1 2 5 5 3 4 1 8 0 9 1 3 7 1 2 1 3 9 8 3 1 1 3 3 2 3 1 1 6 0 7 2 4 2 6 8 1 6 2 1 1 3 3 2 1 5 0 10 1 6 6 9 7 8 4 4 9 7 1 2 1 2 3 1 1 4 4 3 6 1 6 0 10 1 7 2 8 1 6 9 3 6 7 2 2 1 3 1 3 1 8 0 8 1 8 9 7 6 1 3 4 1 1 3 2 2 3 2 2 1 6 0 8 1 8 2 3 9 5 1 6 2 1 2 1 2 1 4 2 3 5 5 5 3 4 1 6 0 10 5 7 6 5 7 1 7 4 1 5 1 1 3 2 2 3 1 8 0 7 7 1 8 1 6 4 3 3 3 2 1 3 2 1 1 1 7 0 10 6 1 1 5 9 3 2 3 3 9 3 3 3 1 1 1 1 1 2 1 1 3 5 1 8 0 11 1 3 1 6 6 6 5 1 5 1 6 2 1 3 1 3 2 1 2 1 8 0 6 1 1 2 1 9 9 1 3 1 2 2 3 1 2 1 6 0 9 8 4 2 8 8 7 1 8 1 1 2 2 1 1 2 5 1 1 4 2 3 6 1 8 0 8 4 1 8 1 3 6 9 8 3 1 2 1 3 2 3 1 1 6 0 7 9 1 6 4 9 4 6 1 3 1 1 1 3 1 8 0 7 5 4 1 5 7 1 8 2 1 1 2 2 2 1 2 1 2 1 1 4 4 2 2 3 3 2 4 4 3 7 1 9 0 8 3 3 7 1 1 5 3 3 2 2 1 1 2 1 2 3 1 1 9 0 8 5 9 8 9 4 4 8 1 1 3 2 3 2 1 1 1 1 1 9 0 8 3 6 5 1 8 4 5 2 1 1 3 2 2 1 1 1 3 1 1 5 5 5 5 1 3 4 1 8 0 8 8 5 8 6 7 1 3 5 1 2 3 1 2 3 2 1 1 8 0 9 4 2 8 6 6 2 2 1 2 3 1 1 1 1 3 1 3 1 6 0 7 5 4 4 2 2 2 1 1 1 2 3 1 1 5 5 2 3 3 6 1 8 0 6 1 5 6 4 3 8 1 3 2 1 2 3 2 1 1 6 0 11 7 1 3 7 3 5 3 9 1 5 6 3 2 1 1 1 1 1 7 0 8 7 6 2 8 5 1 3 4 3 2 1 3 2 2 2 1 4 5 4 2 1 3 4 1 6 0 11 7 4 1 1 8 4 6 3 9 2 8 1 1 3 3 3 1 1 8 0 7 1 4 9 2 1 4 6 1 2 2 3 1 3 3 3 1 6 0 8 7 6 2 1 8 4 8 7 2 1 3 1 3 2 2 1 5 3 4 4 4 4 5 4 3 4 1 7 0 10 1 3 1 7 1 1 7 9 5 7 1 2 1 1 3 3 1 1 6 0 11 4 1 7 7 2 4 6 1 7 8 3 1 1 2 1 3 2 1 9 0 9 6 2 9 1 9 9 5 6 1 2 2 1 2 3 3 3 1 3 2 2 2 1 3 5 1 8 0 11 4 8 7 1 3 2 3 6 1 3 9 2 1 2 3 3 2 1 3 1 8 0 6 4 4 3 6 1 2 1 3 3 1 3 2 2 1 1 9 0 10 7 5 1 7 6 1 3 6 6 6 3 3 2 1 1 2 1 1 2 3 1 2 5 5 3 6 1 9 0 10 9 9 2 1 6 4 4 4 1 2 1 2 1 1 3 3 1 1 1 1 6 0 8 1 4 6 1 4 5 8 6 2 1 2 1 1 1 1 7 0 7 3 9 1 1 1 1 1 1 3 1 3 1 3 3 3 3 5 4 2 2 3 5 1 5 0 8 7 6 5 7 1 9 4 5 1 2 1 2 1 1 8 0 10 5 3 2 8 3 6 1 7 9 1 1 3 1 1 2 1 3 2 1 6 0 10 2 6 1 6 9 9 7 6 1 4 2 1 2 3 2 1 5 4 3 1 2 3 4 1 5 0 10 6 2 1 7 1 1 7 5 1 8 1 1 1 1 1 1 7 0 6 1 3 7 4 7 1 3 2 3 1 1 1 1 1 5 0 8 6 5 1 4 4 1 7 2 2 1 2 3 1 3 4 2 5 2 4 6 5 5 4 3 7 1 9 0 6 4 4 1 8 4 1 1 3 1 2 2 2 1 3 1 1 5 0 8 1 3 2 8 1 5 5 5 3 2 3 3 1 1 6 0 7 2 1 8 7 2 7 8 1 2 2 2 3 3 3 5 4 2 5 5 4 3 7 1 6 0 10 6 7 5 1 7 7 5 1 9 1 2 3 1 3 2 2 1 6 0 7 8 6 4 5 6 5 1 2 3 1 1 3 2 1 7 0 7 9 1 1 1 6 3 9 2 1 3 2 2 1 2 2 5 1 4 3 5 1 3 7 1 6 0 7 4 6 1 5 3 1 3 1 3 2 1 1 1 1 9 0 9 1 3 8 4 5 7 9 2 5 3 3 2 1 3 1 2 3 1 1 9 0 8 2 5 6 1 5 5 1 8 2 3 1 2 1 1 2 3 1 3 4 1 2 4 3 2 3 7 1 5 0 9 4 8 1 8 7 1 1 7 6 1 2 1 3 2 1 8 0 8 8 3 5 4 1 3 3 3 1 1 2 1 2 1 1 2 1 5 0 8 1 5 7 8 5 7 3 5 3 3 1 2 1 2 2 5 4 3 5 1 3 6 1 5 0 10 8 6 1 6 7 3 4 2 1 7 2 2 1 2 3 1 5 0 7 4 2 9 1 3 5 1 3 3 3 1 1 1 5 0 11 7 8 2 5 9 5 2 2 5 1 7 1 3 1 1 1 2 4 1 3 4 2 7 3 5 2 5 3 3 5 1 9 0 11 6 2 2 1 7 8 4 6 8 9 1 2 3 1 1 1 1 3 3 3 1 5 0 11 3 4 8 3 9 1 2 5 4 1 2 2 1 1 3 3 1 8 0 6 2 1 2 8 1 1 3 2 1 2 3 2 1 2 1 3 3 3 4 3 4 1 8 0 9 9 8 4 1 3 6 4 1 3 1 2 2 1 2 2 2 1 1 8 0 8 1 9 1 1 7 2 1 5 1 3 2 1 1 2 1 3 1 7 0 6 1 8 7 8 5 4 1 3 2 2 2 1 2 3 5 1 2 3 4 1 9 0 6 1 1 2 7 2 8 2 3 3 3 2 1 3 1 3 1 6 0 9 9 7 7 3 8 5 2 6 1 1 3 1 1 3 2 1 7 0 8 5 4 5 1 7 3 8 1 2 3 1 3 1 3 3 2 3 3 3 3 6 1 6 0 6 1 1 1 6 6 3 2 3 3 2 3 1 1 9 0 10 6 6 9 5 9 2 9 7 6 1 1 1 2 2 3 1 1 1 2 1 5 0 10 4 1 7 4 2 8 3 3 7 3 3 1 3 1 2 2 3 5 2 3 3 3 4 1 6 0 8 4 3 7 7 5 2 4 1 1 1 3 3 1 1 1 8 0 10 5 9 8 3 9 1 1 8 4 7 1 1 3 3 1 2 3 3 1 8 0 8 4 9 1 1 9 4 6 3 1 1 1 1 1 1 3 1 3 2 2 3 3 7 5 4 5 3 5 1 8 0 7 1 6 1 8 5 9 2 2 1 3 3 3 1 3 1 1 5 0 9 3 6 2 2 4 1 4 1 7 1 2 2 1 2 1 9 0 6 4 7 1 1 1 8 2 1 1 1 2 1 2 2 1 4 3 2 4 5 3 6 1 7 0 10 3 2 6 2 1 5 7 8 9 5 1 2 1 3 2 2 3 1 7 0 6 3 6 6 1 4 6 1 1 1 3 2 1 3 1 7 0 9 6 1 3 1 3 8 5 9 4 1 2 2 2 1 1 3 2 3 2 1 2 3 3 4 1 5 0 11 1 3 8 7 7 7 7 2 2 3 1 3 1 1 1 2 1 9 0 10 4 5 1 3 2 8 8 8 3 9 3 1 1 2 3 1 2 2 3 1 7 0 6 6 3 1 3 2 4 3 1 3 1 3 3 2 2 1 3 4 3 5 1 5 0 10 7 8 5 2 3 3 7 1 6 6 1 1 3 1 1 1 9 0 8 5 1 6 1 2 7 4 3 1 3 2 2 1 3 2 2 3 1 9 0 8 9 8 1 4 4 9 3 8 3 2 3 2 1 1 1 1 1 4 4 4 3 1 4 4 6 5 3 5 5 6 3 5 5 3 5 1 6 0 11 8 3 8 1 1 1 6 6 7 5 6 2 3 1 1 3 2 1 9 0 7 4 1 2 1 8 1 2 1 1 1 2 3 3 3 2 2 1 7 0 7 5 6 4 7 3 1 1 1 2 1 2 1 2 2 4 4 1 3 2 3 5 1 9 0 8 5 8 2 3 6 1 9 9 3 1 3 1 3 1 2 3 2 1 8 0 10 2 7 5 2 2 1 5 1 7 9 1 1 3 2 3 1 2 2 1 8 0 8 8 7 5 9 9 8 1 1 1 1 2 1 1 1 2 2 2 2 2 2 2 3 5 1 7 0 11 7 2 2 5 7 1 4 9 4 6 4 2 3 3 2 3 2 1 1 9 0 7 1 3 3 5 2 1 9 3 1 1 2 3 1 3 3 2 1 7 0 10 1 7 6 1 9 3 6 2 4 4 1 1 1 2 2 3 3 2 2 1 2 1 3 4 1 9 0 7 3 6 9 6 7 1 3 1 2 1 2 1 1 1 2 1 1 8 0 10 1 3 9 1 3 8 7 6 6 4 2 2 1 3 2 1 1 1 1 5 0 6 9 8 1 3 5 4 2 2 3 1 3 5 2 3 5 3 4 1 7 0 9 2 9 6 9 1 2 9 2 2 3 1 1 3 3 2 2 1 6 0 11 9 7 3 4 2 9 5 1 6 5 4 3 1 2 3 1 3 1 6 0 7 5 9 3 9 1 1 6 1 1 3 2 3 3 2 3 3 4 6 5 3 5 4 5 3 3 5 1 7 0 6 9 1 6 2 1 6 1 1 3 2 3 3 1 1 7 0 10 6 1 2 9 7 1 8 5 9 1 1 3 2 3 1 2 2 1 7 0 11 2 6 4 4 1 2 2 5 6 2 8 1 3 3 1 3 2 3 4 1 1 5 4 3 4 1 8 0 7 1 6 5 8 5 8 9 1 2 3 3 3 1 2 1 1 5 0 8 3 5 2 4 1 9 4 5 3 1 2 3 3 1 9 0 9 9 2 1 7 2 9 8 5 1 3 1 3 2 2 1 2 1 2 4 3 4 1 3 5 1 9 0 10 5 5 6 1 5 5 6 1 3 7 2 1 1 1 1 1 2 1 2 1 5 0 6 1 5 7 2 3 9 1 2 3 2 3 1 7 0 10 7 8 4 8 9 8 2 1 2 5 1 2 2 1 2 3 3 3 4 4 1 3 3 4 1 8 0 6 3 4 7 1 3 1 3 3 1 3 2 3 3 3 1 5 0 7 6 2 7 4 3 1 1 1 2 3 2 1 1 5 0 8 1 1 4 5 6 3 5 7 3 1 1 3 2 3 1 5 2 3 6 1 6 0 10 1 8 1 1 2 2 5 5 1 3 2 1 1 1 3 1 1 6 0 8 4 2 1 7 7 8 8 5 1 3 1 2 1 1 1 9 0 7 5 8 3 6 1 7 5 3 3 1 2 1 2 3 3 2 5 5 5 2 1 1 2 4 5 4 4 3 5 1 9 0 8 2 1 8 2 4 1 3 4 1 3 2 1 2 1 1 2 2 1 9 0 6 8 8 1 8 8 6 1 1 1 2 1 3 2 2 1 1 7 0 7 7 8 1 8 7 7 8 1 1 1 1 1 3 3 3 5 2 5 2 3 6 1 9 0 8 9 2 8 3 4 7 1 1 1 3 3 3 2 1 2 3 1 1 6 0 7 2 1 9 4 1 3 1 1 2 3 1 2 2 1 5 0 9 8 2 2 7 3 4 1 6 3 1 2 2 1 2 4 3 1 2 1 5 3 7 1 8 0 7 1 6 2 5 3 8 3 2 1 1 1 1 2 3 1 1 8 0 10 5 2 1 1 1 5 7 1 4 9 2 1 1 2 2 2 1 3 1 6 0 10 5 4 8 1 6 2 7 1 6 1 1 3 3 1 3 3 5 3 5 1 5 1 5 3 7 1 8 0 9 6 5 9 1 1 8 5 5 7 2 1 2 1 2 1 3 3 1 6 0 7 9 8 1 2 1 2 5 1 2 1 2 3 1 1 8 0 6 5 3 1 5 3 7 1 3 3 1 1 1 1 1 4 1 1 2 1 3 1 1 2 2 6 5 4 3 6 1 6 0 6 9 5 7 8 1 4 3 1 2 1 2 1 1 8 0 8 4 6 3 1 9 7 1 6 1 1 3 1 3 3 2 3 1 7 0 6 1 1 8 2 3 3 3 1 1 2 2 1 1 4 1 1 2 2 2 3 4 1 6 0 8 8 5 1 1 5 1 7 9 3 1 3 1 1 3 1 5 0 10 6 9 5 9 3 5 2 8 1 1 1 1 2 1 1 1 5 0 10 3 6 7 9 9 1 6 4 2 8 2 1 3 1 1 2 1 2 4 3 7 1 8 0 8 1 3 7 9 5 8 8 3 1 1 1 1 3 1 3 2 1 5 0 10 8 1 9 9 1 5 9 8 4 3 1 2 3 2 3 1 6 0 6 9 9 5 1 7 9 1 2 1 1 3 3 2 3 2 4 1 3 1 3 4 1 7 0 10 3 5 8 9 6 4 1 8 9 1 3 3 1 1 2 3 1 1 6 0 6 3 8 2 1 2 5 3 2 2 1 1 1 1 6 0 10 3 2 6 6 1 2 1 6 4 4 1 1 3 1 3 1 1 5 2 2 3 6 1 5 0 6 2 6 6 1 1 9 1 2 3 2 1 1 8 0 6 6 3 3 6 1 1 3 2 3 2 1 3 2 1 1 8 0 9 1 1 6 8 4 6 2 9 9 3 3 2 2 1 1 3 1 2 1 5 1 3 3 1 5 6 6 5 4 3 4 1 7 0 7 3 5 1 9 7 3 3 1 1 1 2 1 1 3 1 6 0 9 8 7 7 2 1 1 4 5 7 1 1 1 1 2 1 1 8 0 11 8 7 9 1 1 2 9 7 1 8 1 1 2 2 2 3 2 2 2 5 4 2 2 3 6 1 9 0 10 5 4 3 9 1 1 6 9 4 5 1 1 1 3 1 1 3 1 1 1 5 0 6 1 2 1 6 4 8 2 2 3 2 1 1 7 0 6 5 4 5 5 1 1 3 1 2 3 1 3 3 1 1 3 2 1 1 3 4 1 7 0 10 4 4 9 1 5 8 1 2 7 8 2 3 1 1 3 3 2 1 7 0 7 4 9 4 4 1 4 4 3 3 1 2 1 1 1 1 5 0 11 5 3 6 6 4 8 6 5 6 1 3 1 1 1 1 1 4 1 3 3 3 4 1 8 0 8 9 8 1 6 9 8 5 6 1 2 1 1 1 1 1 2 1 8 0 9 1 3 3 5 9 1 1 3 6 1 1 3 2 2 1 1 3 1 8 0 10 8 3 5 6 2 5 7 4 1 4 1 2 1 3 3 1 2 1 2 3 5 3 3 5 1 8 0 11 5 4 9 9 7 9 4 2 7 5 1 3 1 2 1 1 1 2 1 1 5 0 6 1 1 9 9 1 8 2 2 3 2 1 1 7 0 7 3 1 4 2 2 5 5 1 2 3 3 1 3 1 3 1 3 5 1 2 2 7 6 5 3 3 5 1 9 0 10 1 2 7 9 6 4 5 6 9 1 2 2 2 1 2 1 3 2 3 1 5 0 6 8 7 5 1 2 5 3 2 1 2 3 1 6 0 7 9 4 2 9 2 3 1 1 1 3 3 1 1 4 5 3 2 3 3 5 1 8 0 9 3 4 3 1 9 9 3 1 4 1 3 1 2 3 2 2 3 1 9 0 9 7 7 3 8 9 9 1 5 8 2 1 2 2 1 3 2 3 3 1 7 0 9 4 1 6 4 5 4 3 9 1 3 3 1 2 2 2 3 5 5 2 2 2 3 5 1 7 0 7 1 5 7 1 5 1 4 3 1 1 1 2 1 3 1 6 0 6 1 3 2 1 4 5 1 1 3 3 2 1 1 9 0 10 9 4 5 3 8 5 1 3 3 5 2 3 3 1 2 1 1 3 1 1 1 3 5 1 3 7 1 8 0 7 7 3 4 5 1 1 1 1 2 2 1 1 2 1 3 1 9 0 10 9 1 5 3 7 2 2 1 1 7 3 3 1 2 3 3 1 2 1 1 5 0 11 1 1 3 3 3 4 5 2 6 5 1 1 2 2 2 3 1 4 1 2 5 2 4 3 4 1 7 0 8 7 1 8 1 4 2 5 8 1 2 2 2 1 3 2 1 6 0 7 3 5 9 4 1 6 1 1 3 2 3 2 2 1 5 0 6 5 8 6 3 9 1 3 3 1 2 1 3 4 4 2 5 3 2 6 4 2 7 3 5 4 3 5 1 6 0 10 3 5 9 1 1 3 7 1 1 2 1 1 2 3 3 2 1 9 0 7 8 2 9 2 4 1 1 1 1 2 3 2 2 2 1 2 1 7 0 7 6 1 1 8 6 8 6 1 3 1 3 2 2 3 5 3 1 2 3 3 7 1 6 0 11 4 2 7 6 1 2 8 8 1 7 1 2 3 2 1 2 1 1 5 0 9 1 9 1 3 6 7 6 4 4 2 1 3 2 2 1 9 0 8 2 9 1 5 7 2 4 6 2 2 3 2 1 3 1 3 1 5 3 1 4 3 3 4 3 4 1 9 0 8 3 5 3 2 1 2 3 7 1 1 3 1 2 1 3 1 2 1 6 0 8 1 5 7 9 3 7 4 7 1 3 3 2 3 3 1 9 0 8 8 2 9 7 1 6 7 2 1 2 1 2 3 3 3 1 3 5 2 3 2 3 6 1 5 0 6 5 3 2 1 5 7 1 1 3 3 1 1 8 0 10 7 1 7 1 4 5 9 7 9 8 3 3 1 2 1 1 3 1 1 6 0 7 7 1 3 8 1 7 4 1 1 3 3 2 2 2 3 2 2 3 2 3 4 1 8 0 6 2 4 4 6 9 1 3 3 1 3 1 3 3 1 1 8 0 6 9 1 2 9 8 3 1 2 2 1 2 1 1 2 1 7 0 6 1 5 1 9 1 2 3 1 1 3 3 2 1 1 3 2 5 1 3 4 3 5 3 3 4 1 6 0 11 9 5 9 6 3 9 9 4 4 1 2 1 3 1 1 3 3 1 9 0 7 8 8 1 3 5 4 7 2 3 3 2 1 3 2 2 1 1 7 0 10 9 9 1 7 7 4 7 8 1 7 3 1 3 3 1 3 3 3 1 4 2 3 5 1 7 0 11 2 9 9 1 5 7 1 1 5 6 8 3 3 3 1 3 2 2 1 6 0 7 5 7 1 2 6 9 5 1 1 3 1 3 1 1 7 0 8 1 3 2 2 2 5 4 8 3 1 3 3 3 1 2 2 5 5 1 2 3 4 1 7 0 10 4 3 3 5 1 4 9 9 3 1 1 2 2 1 1 2 3 1 8 0 7 8 5 8 7 2 2 1 1 2 1 1 3 3 2 1 1 9 0 7 3 7 5 1 1 5 3 3 1 1 2 2 1 1 1 1 4 2 1 2 3 4 1 5 0 7 4 4 1 6 8 6 1 2 2 1 3 1 1 8 0 6 1 5 9 9 1 2 2 3 2 2 1 3 3 1 1 6 0 9 6 5 4 2 3 1 5 2 1 3 3 1 1 1 2 2 4 5 2 3 5 1 7 0 10 1 7 1 4 1 1 1 1 1 2 2 2 3 3 2 2 1 1 5 0 8 7 6 3 1 1 9 4 1 1 1 2 1 1 1 8 0 9 1 9 1 8 3 1 2 9 5 3 1 2 2 2 1 1 2 3 2 3 5 2 4 5 5 4 3 3 6 1 5 0 6 3 1 5 1 1 9 1 2 1 1 1 1 8 0 9 6 1 3 9 4 4 4 8 6 1 2 2 2 1 3 1 1 1 8 0 7 2 8 1 7 3 3 1 2 1 1 3 3 2 1 3 5 3 3 1 4 5 3 7 1 5 0 6 4 2 5 5 1 1 1 1 2 1 2 1 6 0 6 8 9 9 3 1 7 1 3 3 2 1 1 1 7 0 6 9 3 6 9 1 3 1 1 1 2 1 1 2 1 4 2 2 1 5 5 3 4 1 6 0 6 2 3 9 1 5 3 3 3 1 3 1 1 1 5 0 9 1 1 7 2 8 1 6 2 7 1 3 1 3 2 1 8 0 7 1 9 1 5 2 5 9 2 1 1 1 3 2 2 3 2 1 3 4 3 7 1 8 0 8 8 1 2 7 6 1 9 2 1 3 2 3 2 3 3 2 1 5 0 6 9 8 9 8 6 1 1 3 2 3 1 1 6 0 6 5 1 3 7 1 1 1 2 2 1 1 1 3 1 3 2 2 3 1 2 4 4 5 3 3 7 1 8 0 8 8 2 1 2 3 4 5 2 2 2 1 1 2 3 2 3 1 9 0 11 2 8 2 9 6 1 5 9 9 7 5 3 2 2 3 2 2 1 3 1 1 9 0 9 5 1 1 9 2 1 6 5 4 2 1 3 3 2 2 1 3 1 3 3 3 5 2 2 2 3 5 1 8 0 6 7 7 1 5 9 1 3 1 2 2 3 2 1 3 1 9 0 7 2 9 1 2 4 5 3 2 2 1 3 2 1 2 2 2 1 9 0 7 9 1 1 3 1 4 9 1 3 3 2 1 2 1 3 2 4 2 2 1 4 3 7 1 5 0 11 9 9 5 6 3 1 9 5 7 5 3 1 2 3 1 2 1 7 0 7 5 9 1 3 7 2 1 1 3 3 1 1 1 3 1 5 0 9 3 3 1 5 4 4 2 8 1 1 1 1 2 1 4 4 2 2 5 2 2 3 5 1 9 0 10 2 4 2 1 5 6 2 3 9 6 1 1 1 3 2 1 2 3 3 1 8 0 8 1 7 7 5 7 5 5 9 2 2 1 1 2 1 1 3 1 7 0 9 9 4 4 6 1 5 1 4 1 3 2 1 3 1 2 2 5 2 2 3 3 3 7 1 9 0 10 3 1 9 6 4 7 1 8 8 2 1 2 3 2 2 3 1 2 3 1 6 0 11 9 6 5 3 8 1 8 1 7 5 7 1 2 3 2 1 1 1 8 0 9 3 5 2 1 6 8 9 5 3 3 3 1 2 1 1 3 3 3 3 5 4 3 2 3 2 5 5 5 3 3 6 1 7 0 6 1 8 1 1 8 1 1 2 3 1 1 2 2 1 9 0 10 2 3 6 9 9 7 3 5 1 3 2 2 3 2 2 3 1 2 1 1 8 0 6 9 1 7 1 4 8 1 3 3 2 2 2 1 2 2 2 5 4 1 1 3 4 1 9 0 9 2 2 2 4 9 1 2 8 7 2 3 1 1 3 1 2 1 1 1 8 0 7 4 7 5 4 1 1 7 2 2 1 2 1 1 3 3 1 9 0 10 8 5 1 9 4 5 8 7 2 1 2 2 3 2 2 1 1 3 2 5 3 1 1 3 7 1 6 0 10 8 1 6 8 3 4 6 6 3 7 1 1 3 3 3 1 1 8 0 8 3 1 7 5 1 4 2 2 1 3 1 3 3 3 1 3 1 7 0 9 1 9 8 7 3 3 6 3 6 1 1 1 3 2 3 1 1 3 5 3 2 4 4 3 4 1 8 0 6 8 7 8 4 9 1 1 3 2 1 1 3 3 1 1 8 0 9 8 4 1 9 2 2 7 4 1 3 1 2 3 2 1 2 3 1 8 0 11 2 7 8 5 1 3 1 8 3 7 5 2 3 3 2 3 1 1 3 4 5 5 1 3 7 1 5 0 10 7 8 9 5 9 6 4 3 2 1 3 1 1 3 1 1 7 0 8 4 4 3 5 3 7 9 1 3 1 1 1 1 1 2 1 5 0 8 2 3 5 8 4 8 1 2 2 3 1 3 3 3 3 5 3 2 4 4 6 5 1 5 3 3 5 1 8 0 8 6 1 6 6 6 1 9 7 3 1 3 3 2 2 1 3 1 9 0 9 3 6 3 1 1 1 2 9 2 1 3 2 3 3 1 3 3 3 1 7 0 9 1 2 5 2 1 7 9 9 6 2 3 1 2 2 3 2 4 1 1 1 1 3 4 1 6 0 6 1 6 9 9 2 4 1 2 3 1 1 2 1 5 0 7 1 1 5 2 9 8 9 1 1 1 3 2 1 8 0 9 9 5 1 1 6 9 6 6 9 1 1 2 1 1 3 3 1 2 3 2 2 3 6 1 8 0 6 1 8 4 4 6 9 3 1 3 2 2 1 2 1 1 7 0 7 1 3 5 3 1 7 1 2 3 3 2 2 2 1 1 7 0 8 2 6 8 6 1 1 5 6 2 1 2 1 3 1 2 4 4 3 2 2 3 3 6 1 8 0 10 5 8 3 9 1 9 8 3 5 6 1 1 2 1 1 2 2 2 1 8 0 8 4 1 2 7 1 7 5 9 2 1 1 2 3 2 2 3 1 7 0 8 4 1 8 2 5 6 4 8 3 1 1 1 2 1 3 3 2 3 3 4 5 3 6 1 9 0 6 2 4 1 9 1 2 3 2 2 1 1 3 2 1 1 1 8 0 10 4 2 8 8 5 5 9 5 1 5 2 3 2 3 1 3 2 1 1 6 0 10 7 6 1 2 1 6 1 2 5 3 3 3 3 1 3 1 4 2 1 1 3 3 7 4 1 5 4 3 4 1 5 0 9 8 8 7 5 3 3 4 1 5 2 3 1 3 2 1 8 0 7 8 9 6 6 1 1 1 3 2 3 1 1 1 2 3 1 8 0 8 8 4 1 2 7 1 5 8 3 3 3 1 2 2 2 2 1 5 2 4 3 7 1 6 0 11 3 6 9 1 6 9 5 1 6 4 2 1 2 1 3 3 1 1 8 0 7 1 1 6 4 7 9 7 3 2 1 1 3 1 1 2 1 8 0 6 1 1 3 9 1 9 3 1 3 1 3 2 2 2 3 3 3 1 3 5 1 3 5 1 8 0 8 7 2 6 8 1 1 2 9 1 3 3 3 1 2 3 1 1 7 0 11 9 5 3 3 4 9 8 7 9 4 1 1 1 3 3 2 3 2 1 9 0 9 9 3 1 6 1 6 8 4 1 3 3 3 3 1 2 1 1 2 4 5 1 5 4 3 4 1 7 0 8 1 2 2 4 9 6 1 1 3 1 3 1 2 1 3 1 6 0 7 3 4 5 9 7 1 5 3 2 2 1 1 2 1 9 0 6 5 3 1 4 5 1 1 1 3 1 3 1 1 3 1 1 4 1 2 3 6 1 5 0 6 7 1 6 8 3 1 1 1 3 1 3 1 7 0 9 1 2 2 9 8 7 7 1 9 1 2 3 1 2 3 1 1 8 0 11 7 5 6 5 1 4 4 4 7 1 4 2 3 3 3 1 1 3 2 5 5 3 5 2 3 5 1 7 5 8 8 1 6 2 4 5 3 4 1 9 0 8 3 8 1 3 6 9 4 1 1 2 3 3 1 3 2 3 1 1 7 0 10 8 5 2 1 3 4 7 2 3 5 3 1 3 1 3 1 3 1 8 0 7 2 1 4 3 9 1 6 1 1 3 2 3 2 3 2 3 4 5 4 3 7 1 6 0 6 1 1 7 9 9 5 1 1 1 2 3 3 1 7 0 10 8 7 4 5 6 4 1 1 3 7 1 2 2 3 3 3 3 1 6 0 7 4 3 7 1 3 8 2 3 2 1 1 1 1 2 3 1 4 4 2 1 3 7 1 7 0 6 7 3 6 3 7 1 3 1 1 3 2 2 1 1 8 0 6 4 5 6 9 1 5 3 1 1 1 3 2 1 2 1 6 0 10 7 6 5 6 4 2 3 3 1 6 3 1 2 3 1 3 3 3 4 5 2 2 4 3 5 1 9 0 9 8 1 3 7 4 9 9 1 1 2 1 1 1 1 2 2 1 3 1 6 0 9 3 7 4 2 1 6 8 4 9 1 3 3 3 1 1 1 7 0 6 4 6 8 7 3 1 2 2 3 2 2 1 2 1 4 2 5 4 6 6 2 5 1 5 4 3 4 1 6 0 9 1 2 7 3 3 9 1 6 9 1 2 3 2 1 3 1 5 0 8 3 8 8 9 9 2 5 1 3 1 1 3 1 1 9 0 6 7 4 1 4 1 9 1 3 1 2 1 1 2 1 1 3 1 3 1 3 4 1 9 0 9 4 1 1 4 3 7 6 4 6 3 1 2 1 3 2 1 1 1 1 6 0 7 8 1 6 5 8 3 1 3 2 3 3 2 1 1 6 0 11 2 3 3 6 1 3 7 1 7 7 1 2 3 2 1 1 3 4 3 4 1 3 4 1 5 0 9 1 5 4 7 6 1 1 5 3 3 2 1 1 2 1 6 0 10 6 9 1 5 5 5 9 8 6 3 1 1 3 3 1 1 1 6 0 11 1 9 3 2 3 1 4 9 2 4 4 2 2 1 1 3 3 2 3 3 4 3 6 1 9 0 6 1 9 9 6 6 2 1 3 3 1 3 2 3 3 1 1 6 0 9 7 5 1 1 4 4 9 4 1 3 3 2 1 1 1 1 6 0 7 5 7 1 8 7 3 9 3 1 2 2 2 1 3 1 4 3 3 2 3 5 1 7 0 10 6 1 1 6 1 9 4 9 2 3 1 2 3 3 2 3 3 1 7 0 8 1 6 1 2 4 1 2 8 1 1 1 2 3 1 2 1 7 0 6 2 3 1 4 2 6 3 1 1 1 1 3 1 3 2 3 3 1 7 3 4 3 5 3 3 4 1 9 0 8 1 4 6 6 4 9 1 2 2 2 2 2 2 1 3 3 2 1 6 0 7 6 1 1 5 9 5 7 1 3 3 3 1 1 1 8 0 10 6 1 3 3 1 7 2 8 9 9 1 1 2 3 2 2 3 1 1 3 3 2 3 6 1 7 0 6 8 2 2 7 1 6 2 1 3 2 1 2 3 1 6 0 8 2 5 1 8 1 7 6 6 2 3 1 2 1 2 1 7 0 9 6 3 9 1 7 3 5 2 8 1 3 1 1 1 1 2 4 1 5 3 5 3 3 4 1 6 0 8 3 1 1 9 2 8 2 1 2 3 3 1 2 1 1 7 0 6 1 9 4 4 8 1 3 1 2 1 3 1 1 1 9 0 10 5 2 5 9 4 2 1 8 1 5 3 3 1 3 1 1 3 3 2 2 3 4 5 3 7 1 8 0 11 7 6 3 6 2 1 6 3 5 3 1 3 1 3 3 1 3 3 2 1 9 0 8 5 4 3 4 7 1 4 2 3 3 2 1 3 1 3 1 3 1 8 0 6 1 9 1 5 2 4 1 1 3 1 3 2 2 2 5 5 4 4 4 3 1 3 4 1 8 0 9 3 2 1 6 5 9 6 5 7 2 3 1 2 3 2 3 2 1 5 0 11 7 6 8 6 4 3 1 8 2 1 6 1 1 3 1 1 1 5 0 9 3 1 8 3 9 4 8 8 9 2 3 2 2 1 5 1 4 1 3 5 2 5 3 3 5 1 5 0 9 7 8 2 2 2 2 5 1 5 1 3 1 2 1 1 5 0 7 1 4 2 8 1 6 1 1 3 1 3 2 1 5 0 8 2 7 2 9 1 6 1 8 3 3 1 2 2 3 5 1 3 4 3 5 1 6 0 6 9 7 1 2 3 8 2 2 2 3 1 1 1 6 0 8 1 4 8 8 9 8 6 2 1 3 1 1 2 1 1 9 0 11 7 2 1 1 7 6 3 2 6 7 2 1 1 1 1 3 2 3 3 2 1 4 3 4 4 3 6 1 5 0 10 2 9 1 1 7 1 3 9 2 6 1 3 1 3 2 1 7 0 6 1 7 8 2 8 2 2 1 1 3 3 2 1 1 9 0 10 8 5 7 3 1 2 7 1 6 1 1 2 2 3 1 2 1 1 3 4 2 5 3 4 4 3 7 1 5 0 11 1 8 2 3 7 8 2 1 3 7 4 1 2 2 1 1 1 9 0 9 6 2 7 6 9 3 6 2 1 2 1 2 2 2 1 1 1 1 1 7 0 7 3 9 8 1 4 1 6 3 1 2 2 2 1 3 2 1 2 5 4 1 3 3 6 1 8 0 11 4 6 2 5 2 5 5 5 1 3 1 3 1 1 3 1 1 2 1 1 9 0 8 2 5 7 9 1 3 5 1 1 2 1 2 1 1 1 2 3 1 6 0 11 7 1 3 2 8 9 7 8 5 1 1 2 3 3 1 2 2 3 5 3 1 3 2 1 4 4 5 4 3 4 1 9 0 7 4 9 7 2 7 1 8 3 3 3 1 2 1 1 1 3 1 5 0 7 8 1 2 8 5 3 7 1 2 3 1 2 1 5 0 6 1 5 7 6 1 8 2 3 3 2 1 3 2 4 2 3 4 1 9 0 7 1 5 4 7 8 1 3 3 1 1 3 1 3 2 1 1 1 7 0 11 6 6 3 2 2 3 1 3 9 6 3 1 1 1 2 3 2 2 1 9 0 6 1 1 3 3 4 3 2 3 1 1 1 1 1 1 3 3 3 3 3 3 7 1 5 0 9 9 1 5 5 4 8 2 5 4 1 1 2 2 2 1 7 0 9 5 1 6 8 5 3 7 4 1 1 2 1 3 2 1 2 1 9 0 8 7 8 3 7 5 4 1 5 2 3 2 1 1 1 1 1 3 5 3 1 2 1 3 1 3 4 1 9 0 6 1 6 5 6 8 4 3 3 1 1 3 2 2 1 1 1 9 0 7 9 5 3 1 5 2 1 3 2 3 2 1 1 3 1 3 1 5 0 9 3 1 8 1 4 4 5 9 6 1 2 1 1 2 1 2 1 1 3 7 1 5 0 11 7 4 4 6 1 7 6 1 1 6 2 2 1 1 3 2 1 9 0 6 1 9 9 1 3 6 3 1 1 2 1 1 1 2 1 1 8 0 7 8 7 2 2 1 6 3 2 3 1 1 2 2 3 1 4 5 5 1 4 5 2 3 4 1 5 4 5 3 4 1 6 0 10 6 9 8 8 5 5 8 1 4 7 2 1 1 1 2 3 1 8 0 7 6 3 2 4 7 4 1 1 3 2 1 3 3 2 3 1 9 0 11 6 9 3 7 8 6 5 6 4 1 7 2 2 2 1 1 1 2 1 3 3 3 3 3 3 6 1 5 0 7 3 8 6 2 7 1 9 1 1 1 2 1 1 6 0 8 8 9 7 1 1 7 2 6 1 1 2 3 1 3 1 8 0 8 1 6 9 2 6 6 3 6 3 1 3 2 1 3 2 1 3 4 1 4 2 1 3 5 1 9 0 6 2 6 7 3 1 2 2 2 1 2 3 2 1 2 3 1 9 0 7 7 5 7 6 1 8 1 1 1 2 1 1 3 3 3 2 1 9 0 7 6 8 4 1 2 1 3 3 3 3 3 1 2 3 1 2 2 1 5 2 3 3 6 1 8 0 7 1 1 5 7 9 1 3 3 1 3 3 1 1 2 1 1 7 0 11 5 9 1 3 5 8 5 8 2 2 8 3 2 3 1 2 1 3 1 5 0 9 6 9 4 2 1 1 3 6 2 1 3 3 1 1 3 3 4 3 5 5 2 3 6 1 1 2 8 7 3 5 3 3 6 1 6 0 6 1 1 1 8 7 6 1 2 3 3 1 3 1 8 0 9 1 3 7 5 6 7 5 1 6 3 3 1 1 1 1 3 2 1 7 0 7 2 1 8 9 3 8 1 3 2 1 3 2 2 1 2 2 2 1 3 4 3 7 1 5 0 9 2 2 9 6 7 9 7 1 7 3 2 1 1 1 1 8 0 7 7 6 8 1 2 6 8 3 3 1 1 3 2 2 1 1 9 0 9 1 1 7 1 3 2 5 5 5 3 1 1 2 1 3 2 1 3 5 4 1 5 3 1 1 3 7 1 9 0 7 2 1 1 7 5 5 3 1 3 1 3 1 2 1 3 3 1 7 0 10 2 3 7 7 3 6 2 3 1 7 3 2 3 1 2 2 3 1 9 0 8 9 7 7 3 9 3 1 4 3 1 1 1 1 3 3 1 1 3 4 1 1 3 4 3 3 5 1 9 0 9 1 2 3 9 6 3 7 6 1 1 1 2 1 1 3 2 3 1 1 9 0 6 1 9 1 4 3 3 2 1 1 3 3 1 3 1 3 1 8 0 11 3 3 1 3 6 7 1 8 6 4 3 3 3 1 2 1 1 1 1 1 5 4 1 1 3 5 1 8 0 8 4 8 1 6 3 1 6 3 3 2 2 3 1 3 3 3 1 5 0 10 1 1 8 1 1 7 1 5 4 6 3 3 1 1 3 1 6 0 7 1 9 5 1 3 2 6 1 3 3 2 2 1 3 4 1 2 4 2 3 2 5 3 3 6 1 6 0 10 3 7 9 5 6 1 7 2 3 1 2 2 3 1 1 2 1 7 0 7 1 7 5 6 2 6 7 1 1 1 2 1 1 2 1 9 0 11 3 6 7 9 8 8 8 7 3 1 3 3 1 2 1 1 1 3 2 3 3 3 3 1 4 3 3 7 1 5 0 7 8 3 6 1 3 6 4 2 1 2 1 3 1 6 0 10 7 4 6 9 1 6 5 5 2 8 1 1 1 1 2 2 1 8 0 6 2 6 8 7 1 2 3 2 2 1 3 1 1 2 2 2 2 5 3 1 4 3 4 1 5 0 6 2 1 7 4 4 5 3 2 1 3 1 1 8 0 10 4 4 5 1 1 7 2 2 8 6 2 1 3 3 1 2 1 1 1 6 0 6 6 6 1 3 6 3 2 1 2 1 1 1 1 4 1 2 3 6 1 5 0 7 1 8 5 2 7 3 4 1 1 2 2 2 1 6 0 8 7 8 1 7 7 4 1 1 2 3 3 2 3 1 1 6 0 8 8 1 1 4 8 4 4 4 1 3 2 3 1 1 4 3 5 2 1 2 3 5 1 8 0 6 1 3 8 5 2 1 2 1 1 2 2 1 2 1 1 7 0 10 9 6 9 8 4 8 1 2 2 4 1 1 1 1 2 2 1 1 5 0 7 1 7 3 9 6 1 3 2 1 2 2 2 5 3 5 1 1 3 7 4 5 4 3 5 1 5 0 6 5 1 5 2 4 6 1 3 1 2 3 1 7 0 7 1 8 4 1 5 1 3 3 1 2 1 1 1 1 1 5 0 9 5 1 1 4 8 1 4 6 8 2 2 2 3 1 4 2 2 2 4 3 4 1 6 0 10 8 2 9 4 6 2 1 7 9 3 2 2 1 2 2 2 1 5 0 7 1 4 9 4 7 9 6 1 1 2 2 3 1 6 0 10 1 1 3 5 6 2 4 5 4 3 3 1 3 1 1 1 5 3 5 3 3 4 1 5 0 7 1 1 5 3 4 7 9 1 2 1 3 1 1 6 0 10 7 6 7 8 2 2 5 8 3 1 2 2 1 1 3 3 1 8 0 11 2 1 3 8 9 1 5 4 7 3 4 1 1 3 1 2 2 3 2 1 1 4 2 3 6 1 9 0 8 2 9 1 1 7 4 8 7 1 3 2 1 2 3 2 1 2 1 8 0 10 1 7 3 6 1 6 1 9 3 3 2 3 1 1 2 2 1 2 1 6 0 9 2 4 2 1 6 6 8 4 1 2 1 3 1 1 1 2 1 3 2 4 2 3 7 1 7 0 11 7 7 9 6 3 3 4 5 5 1 5 1 2 1 3 3 1 1 1 6 0 8 6 6 7 2 9 1 6 5 2 3 2 2 2 1 1 5 0 6 3 1 1 2 4 2 1 2 2 1 2 3 3 4 2 5 5 2 4 2 4 3 5 5 3 7 1 7 0 6 1 9 3 8 7 1 3 3 3 2 3 1 2 1 5 0 9 3 7 1 6 1 2 7 4 3 3 1 1 1 3 1 5 0 11 1 8 9 9 9 6 1 8 6 8 3 3 1 1 1 1 2 3 5 2 2 1 4 3 5 1 5 0 8 8 3 5 4 1 1 9 5 1 3 1 3 1 1 8 0 7 1 7 5 1 6 4 8 2 1 3 2 1 1 3 2 1 9 0 11 9 3 1 4 9 8 6 9 3 8 8 3 3 3 3 2 1 1 1 2 3 2 3 2 1 3 4 1 5 0 8 1 7 5 3 9 3 3 9 2 1 2 2 1 1 5 0 7 3 1 9 3 9 3 6 3 3 3 2 1 1 5 0 9 5 6 4 8 3 1 1 7 6 3 1 3 3 1 3 5 5 3 3 4 1 8 0 8 1 3 1 6 1 5 9 8 3 3 1 1 2 3 1 1 1 8 0 8 1 7 8 1 9 6 9 6 1 1 2 1 1 2 2 3 1 6 0 7 4 8 2 4 7 7 1 1 2 1 1 2 1 2 3 3 5 3 7 1 5 0 10 9 2 9 7 1 2 1 1 4 2 3 1 2 1 1 1 8 0 10 4 1 1 2 1 5 7 3 7 5 2 1 1 2 1 2 2 1 1 7 0 7 4 4 5 1 4 2 1 1 2 1 3 3 3 3 1 1 1 2 2 1 4 1 3 6 1 6 5 4 3 7 1 7 0 6 7 3 3 5 8 1 1 1 2 2 3 3 1 1 5 0 8 8 1 8 8 4 9 1 1 2 3 1 3 3 1 5 0 7 8 8 8 1 5 5 1 3 1 2 1 1 1 4 3 1 5 5 3 3 5 1 5 0 10 3 9 5 9 5 9 8 3 1 2 1 1 1 1 1 1 9 0 7 6 2 1 3 3 7 2 2 2 2 3 1 2 3 1 2 1 5 0 9 3 7 3 7 1 9 7 3 7 3 2 2 1 2 2 1 4 1 5 3 7 1 5 0 7 1 8 6 6 9 5 5 2 3 2 1 1 1 8 0 9 5 3 2 1 5 3 7 3 9 3 2 3 3 1 2 1 3 1 6 0 10 1 6 5 8 9 5 3 1 2 6 1 2 3 2 1 1 4 5 3 4 3 2 3 3 5 1 5 0 11 7 5 2 1 4 7 4 9 4 3 6 1 1 2 1 2 1 7 0 8 6 8 6 6 1 3 3 1 1 1 1 2 3 1 3 1 8 0 7 3 1 9 4 8 7 4 1 1 3 1 3 3 2 1 2 4 3 4 1 3 6 1 6 0 8 9 1 3 7 2 1 1 1 2 3 1 2 2 1 1 6 0 8 3 5 4 6 6 3 7 1 1 1 1 2 2 1 1 7 0 10 3 6 4 1 1 7 1 6 1 8 1 2 2 2 1 1 1 2 2 3 3 3 3 1 7 2 5 5 5 3 4 1 6 0 9 1 7 1 1 8 6 2 5 1 1 1 2 1 1 1 1 5 0 11 9 2 1 2 7 5 5 8 6 1 7 1 3 1 1 2 1 7 0 7 4 7 8 4 7 1 8 3 3 3 2 2 1 1 1 3 1 2 3 6 1 7 0 9 7 5 1 2 7 9 8 3 7 3 3 1 3 1 1 1 1 6 0 9 6 6 1 3 9 3 8 4 7 1 1 1 1 3 2 1 6 0 7 8 5 6 6 1 5 5 1 2 3 1 3 1 1 2 3 3 5 5 3 6 1 5 0 6 3 4 1 1 7 9 3 2 2 2 1 1 9 0 11 7 1 2 6 7 2 8 5 4 5 7 2 2 3 1 1 2 2 3 1 1 6 0 9 6 6 2 9 5 7 2 1 6 1 1 2 3 3 3 4 2 3 1 2 2 3 7 1 7 0 11 2 9 8 1 1 7 7 4 6 7 5 3 1 2 1 2 3 3 1 6 0 7 9 2 1 3 2 7 8 3 3 2 2 1 1 1 5 0 10 5 5 3 1 8 5 2 2 3 6 1 2 1 2 2 1 4 2 3 2 2 2 3 4 1 5 0 7 1 3 7 2 9 2 9 1 3 3 2 1 1 9 0 7 5 1 4 4 3 3 1 1 1 1 2 1 2 3 1 2 1 8 0 11 3 6 1 3 3 2 8 6 2 6 7 3 1 1 1 2 1 1 3 5 3 5 3 3 3 4 7 4 5 5 3 5 1 6 0 8 3 2 8 1 9 6 1 9 3 1 1 2 2 1 1 9 0 8 1 9 4 6 1 9 9 8 1 3 2 3 1 2 2 3 3 1 8 0 9 5 3 1 9 6 6 7 7 4 1 1 1 1 2 3 1 1 1 1 1 5 4 3 6 1 9 0 11 1 7 4 2 7 4 8 9 3 5 4 1 1 3 3 1 1 2 1 3 1 7 0 9 1 2 2 7 5 5 9 5 3 2 2 3 1 3 3 3 1 8 0 6 1 6 1 2 4 1 3 1 1 2 1 3 1 1 2 2 3 2 3 4 3 7 1 7 0 8 5 9 7 1 5 1 7 7 2 1 1 1 2 1 1 1 9 0 8 3 4 9 3 6 1 2 3 3 2 2 1 2 3 2 1 1 1 8 0 6 2 4 5 5 7 1 3 2 3 1 2 2 2 2 1 1 5 5 3 4 1 3 7 1 8 0 9 1 6 3 9 4 1 9 4 8 2 3 2 3 2 1 1 1 1 9 0 10 4 1 4 5 2 6 1 6 2 2 1 3 3 1 3 2 3 2 2 1 5 0 6 1 9 9 6 5 1 3 1 2 1 1 1 1 2 4 3 3 4 3 7 1 9 0 7 5 5 5 5 1 3 3 3 2 1 3 2 1 2 3 1 1 7 0 6 6 9 7 9 1 5 1 2 3 1 1 3 1 1 9 0 11 5 3 7 6 7 4 8 1 1 8 3 2 1 2 3 2 1 3 1 1 2 3 3 1 4 4 2 4 1 7 5 3 9 7 8 7 2 5 4 3 7 1 6 0 8 9 1 1 7 4 1 1 2 3 2 1 3 2 2 1 8 0 7 8 4 5 4 4 1 2 1 2 2 1 3 3 2 1 1 6 0 10 7 8 4 1 1 7 5 9 5 2 1 1 1 3 1 1 1 2 2 1 5 4 4 3 5 1 8 0 10 3 1 2 1 8 1 5 4 2 7 2 1 3 2 3 2 1 3 1 8 0 10 4 1 8 6 8 6 4 2 5 1 1 2 2 3 2 2 1 1 1 5 0 9 1 5 8 4 1 7 6 7 1 1 1 2 2 2 4 1 3 3 1 3 7 1 8 0 8 1 6 3 2 6 7 2 7 2 2 3 3 1 1 2 1 1 7 0 9 7 1 3 4 5 8 9 1 6 3 1 2 2 2 1 2 1 5 0 7 8 1 8 4 2 5 6 3 1 3 2 2 2 5 3 1 4 2 1 3 5 1 8 0 10 1 1 5 7 3 7 5 1 3 7 1 2 3 1 3 1 2 1 1 8 0 9 3 1 2 1 1 7 8 1 6 3 3 2 1 2 1 1 1 1 5 0 11 5 4 1 5 2 1 6 2 2 6 9 3 3 3 2 1 4 1 1 3 2 3 4 1 7 0 7 5 9 1 2 7 3 9 1 2 3 2 3 2 3 1 5 0 7 4 7 5 8 1 5 3 2 3 3 1 1 1 6 0 9 2 2 8 5 3 1 2 1 6 3 2 2 1 1 3 4 1 3 5 5 1 4 3 4 4 3 5 1 8 0 10 9 5 8 8 3 3 3 1 8 1 2 3 2 1 2 1 3 2 1 6 0 11 4 9 1 2 8 6 7 7 9 6 4 2 1 1 1 3 2 1 6 0 8 2 3 1 3 6 4 8 8 2 1 3 2 3 1 1 2 4 3 2 3 4 1 9 0 10 5 6 5 8 4 1 5 8 1 5 1 3 1 2 1 1 1 2 1 1 8 0 7 6 2 8 3 9 6 1 2 1 1 3 2 3 2 2 1 7 0 6 9 9 2 5 6 1 1 2 3 1 2 3 2 1 5 4 2 3 5 1 6 0 6 1 4 4 1 9 1 1 1 2 1 3 2 1 5 0 10 9 9 4 1 6 5 3 8 3 9 3 1 3 3 1 1 8 0 9 6 8 1 3 8 6 1 4 5 3 1 2 3 3 1 3 2 3 5 2 4 3 3 6 1 7 0 6 8 1 2 4 5 9 1 3 2 3 3 2 1 1 6 0 6 6 1 8 7 5 1 2 3 1 2 1 1 1 5 0 8 9 1 7 5 3 9 5 5 2 1 2 2 1 1 2 2 2 4 1 4 1 6 5 4 3 3 5 1 9 0 10 3 6 1 2 9 6 8 2 9 5 1 2 1 1 3 3 2 1 3 1 9 0 9 6 3 4 7 5 1 6 4 9 1 2 2 1 3 1 1 2 1 1 8 0 8 7 2 6 6 1 3 8 1 1 3 3 1 1 1 1 1 2 3 1 2 5 3 5 1 7 0 10 8 8 8 1 8 5 4 6 1 3 2 2 2 3 1 3 1 1 8 0 10 1 2 1 8 7 3 2 2 6 3 1 3 2 2 3 3 1 1 1 5 0 11 1 9 6 7 1 8 8 8 2 6 6 2 2 2 1 2 4 3 2 1 4 3 6 1 7 0 10 3 6 1 7 9 3 3 1 8 9 3 3 2 3 2 1 3 1 9 0 7 2 2 2 4 5 9 1 2 2 2 2 2 1 1 3 2 1 7 0 7 1 1 3 9 5 3 4 1 1 1 2 1 3 1 3 2 3 1 4 3 3 7 1 6 0 10 6 7 4 3 1 1 8 4 3 6 2 1 1 3 1 3 1 7 0 6 1 1 4 2 8 3 1 2 1 1 1 2 2 1 9 0 10 6 9 1 8 5 5 4 8 5 1 2 3 3 2 1 2 1 3 3 4 2 2 5 3 3 1 4 2 3 5 5 3 6 1 7 0 9 9 9 8 1 7 5 1 3 3 2 3 2 1 3 1 1 1 7 0 7 4 1 9 9 3 1 8 1 1 3 1 2 1 1 1 9 0 9 9 9 8 5 2 7 2 5 1 2 1 1 1 2 2 3 1 3 1 4 1 2 3 5 3 4 1 7 0 6 7 4 4 3 6 1 1 3 2 1 1 2 3 1 6 0 6 3 1 9 5 5 5 3 3 1 1 2 1 1 9 0 8 8 8 4 5 4 1 5 7 1 3 2 3 1 3 2 2 2 1 4 3 5 3 6 1 9 0 10 7 7 2 9 5 1 4 2 1 4 3 2 3 3 2 1 2 3 1 1 9 0 8 1 6 4 7 1 4 9 1 1 3 2 3 3 2 2 2 3 1 6 0 9 9 8 6 6 6 1 6 4 9 3 2 1 3 3 1 1 2 4 1 3 4 3 5 1 6 0 10 3 1 7 3 9 7 5 6 7 8 2 1 1 1 2 2 1 5 0 8 1 9 1 4 8 1 2 5 1 2 1 3 2 1 7 0 9 4 6 9 6 1 6 8 5 6 1 3 1 1 1 1 2 3 2 1 3 1 3 5 1 7 0 6 9 8 8 1 3 5 1 2 1 1 3 2 3 1 9 0 8 4 8 7 9 3 7 1 7 2 2 1 3 1 1 2 3 2 1 9 0 7 3 2 8 1 8 3 2 3 3 1 1 3 1 1 1 1 1 2 3 3 4 5 5 5 2 2 5 3 3 5 1 7 0 8 1 1 1 5 1 8 5 3 3 2 1 2 1 2 2 1 7 0 9 5 1 8 1 5 4 8 6 5 1 1 2 3 1 2 3 1 6 0 10 1 9 8 4 5 7 1 7 5 1 3 1 2 2 1 1 2 2 1 2 5 3 5 1 6 0 9 8 3 3 1 2 5 1 3 6 1 2 2 3 1 2 1 6 0 8 5 2 5 1 4 4 4 1 3 1 2 2 1 1 1 5 0 10 6 3 3 1 3 7 5 3 8 8 1 3 2 2 1 1 3 4 2 5 3 6 1 9 0 8 6 8 1 4 8 1 6 8 1 3 2 3 1 3 3 1 3 1 7 0 7 7 1 1 1 3 4 9 2 1 3 2 2 1 2 1 8 0 8 3 6 2 8 5 1 6 1 2 2 2 3 1 1 2 1 4 1 1 3 1 3 3 6 1 8 0 10 3 2 9 1 3 1 6 8 4 3 1 1 2 1 2 2 2 2 1 8 0 10 4 1 3 7 4 4 2 3 6 1 1 1 3 1 2 1 3 1 1 5 0 8 8 9 1 3 1 6 5 2 2 1 1 2 3 2 5 2 2 3 1 3 6 1 7 0 6 6 6 1 1 2 3 2 1 3 1 2 2 3 1 5 0 11 9 3 2 7 4 7 6 3 1 6 6 3 3 1 2 1 1 8 0 11 9 1 5 8 7 1 2 1 1 9 2 1 2 1 2 2 1 1 1 2 4 3 5 2 3 3 2 1 5 3 3 4 1 9 0 6 8 8 5 6 1 2 2 3 3 1 2 2 2 2 1 1 7 0 6 9 7 9 1 3 9 3 3 1 1 2 1 2 1 5 0 6 2 5 1 5 9 5 1 2 1 2 1 3 5 5 2 3 7 1 7 0 7 2 2 2 1 3 5 1 1 3 1 2 2 3 3 1 9 0 10 4 1 3 9 5 4 4 1 5 1 3 2 2 3 2 1 1 2 3 1 8 0 11 2 9 6 8 3 6 1 1 1 4 4 3 1 3 1 3 1 2 3 2 1 4 5 4 4 1 3 6 1 7 0 8 1 3 6 4 1 5 7 7 1 2 1 3 3 1 2 1 5 0 10 9 1 4 1 3 3 8 4 5 6 3 2 1 1 2 1 9 0 9 2 6 9 1 5 9 6 4 4 3 1 1 1 2 2 2 2 3 2 2 1 2 5 1 3 7 1 6 0 8 9 1 4 4 1 2 6 8 1 1 1 3 3 3 1 5 0 8 1 6 7 1 4 4 8 3 2 2 3 3 1 1 6 0 10 1 4 8 7 1 2 9 8 9 7 1 2 2 3 1 3 5 5 2 4 2 2 3 3 4 1 5 0 8 1 5 8 2 7 9 8 1 3 3 3 1 1 1 5 0 9 5 1 2 4 6 8 2 4 1 3 3 3 1 1 1 7 0 7 7 4 9 4 1 7 1 3 1 3 3 3 3 1 5 5 2 1 3 1 4 5 5 3 4 1 8 0 10 7 1 9 2 7 1 6 9 6 8 1 1 2 3 3 2 3 1 1 7 0 7 3 1 9 8 1 4 2 1 3 3 2 2 3 2 1 7 0 10 5 6 5 7 8 1 6 6 8 4 2 1 1 3 2 3 3 2 2 5 3 3 6 1 9 0 9 7 9 4 5 1 1 5 7 2 1 1 1 2 3 3 1 1 1 1 6 0 9 9 2 5 3 7 1 1 8 3 1 1 3 3 3 1 1 6 0 9 5 2 7 2 1 8 1 8 1 1 1 1 2 1 3 3 5 1 1 2 4 3 4 1 8 0 10 3 6 3 8 4 5 1 6 8 2 1 1 1 2 1 2 1 2 1 7 0 7 1 5 6 1 4 5 9 1 3 2 2 1 3 1 1 8 0 8 9 2 9 9 6 8 1 1 3 3 3 2 1 1 1 3 1 4 3 4 3 4 1 6 0 10 3 9 2 3 9 1 1 4 2 1 2 2 1 1 3 3 1 7 0 10 1 5 1 7 2 1 2 2 8 3 1 1 1 1 2 1 3 1 8 0 6 9 8 1 3 4 6 1 1 3 2 3 2 2 3 3 5 5 4 3 6 1 5 0 11 1 8 8 4 9 1 3 4 3 7 5 2 1 1 2 3 1 8 0 7 1 3 5 6 7 6 4 1 1 1 3 2 1 1 1 1 7 0 11 3 3 7 3 7 7 8 3 3 5 1 3 3 1 3 3 2 2 2 5 5 4 2 5 6 1 6 5 3 4 5 6 3 5 3 3 6 1 6 0 8 1 1 3 4 2 1 1 7 3 1 1 3 1 1 1 8 0 8 4 1 1 9 2 9 9 4 1 1 3 1 1 3 3 1 1 5 0 10 1 2 9 3 8 5 9 3 4 8 3 2 3 1 2 3 5 2 5 3 4 3 5 1 9 0 6 2 3 7 1 6 7 2 1 2 3 2 2 2 3 1 1 6 0 9 8 1 8 9 5 7 4 1 4 2 1 1 3 1 2 1 6 0 9 6 8 6 1 5 2 1 3 6 1 3 1 2 1 1 3 3 3 2 5 3 5 1 9 0 7 6 3 3 3 1 3 3 1 3 1 1 2 1 2 2 2 1 9 0 10 3 6 8 7 4 4 9 1 1 3 3 2 2 3 2 1 2 1 1 1 6 0 6 1 8 4 3 8 8 1 2 1 3 3 3 3 3 2 4 1 3 6 1 8 0 11 8 9 6 2 1 1 1 9 8 2 5 2 1 3 2 1 1 1 1 1 9 0 10 9 5 8 1 1 4 4 1 7 7 2 3 1 1 2 2 3 2 3 1 6 0 11 1 5 8 9 5 7 6 8 6 1 6 1 1 1 1 2 3 4 1 1 4 2 3 3 4 1 9 0 9 4 1 9 6 6 9 8 1 2 2 3 1 2 1 3 2 2 1 1 6 0 9 3 7 1 2 2 5 4 2 2 1 2 2 1 3 2 1 7 0 9 5 5 1 6 1 5 1 6 6 2 3 1 1 1 1 1 1 5 4 5 3 4 5 4 4 3 5 1 7 0 7 5 6 5 7 1 4 9 3 3 1 3 1 1 3 1 5 0 9 1 1 9 9 2 9 9 5 9 2 1 3 1 1 1 8 0 8 8 1 4 6 4 7 8 4 1 3 3 1 3 2 3 3 3 3 5 1 4 3 7 1 9 0 7 6 8 2 1 8 3 9 3 1 3 3 2 3 1 1 3 1 7 0 8 1 5 9 4 2 7 2 9 1 1 1 1 2 1 1 1 5 0 11 8 5 1 4 2 6 1 1 4 9 4 1 1 1 2 1 3 2 5 3 1 4 4 3 4 1 7 0 11 9 5 7 1 8 1 2 7 9 7 5 1 1 2 3 2 3 1 1 6 0 10 2 1 9 3 8 3 1 5 4 5 3 2 1 3 1 1 1 9 0 10 3 5 8 9 4 3 1 6 3 3 3 3 2 3 1 2 3 3 2 3 1 1 4 3 7 1 9 0 8 1 1 8 5 2 6 8 7 2 3 3 2 1 1 1 1 3 1 6 0 7 7 5 8 3 1 1 1 1 2 1 3 1 1 1 6 0 7 1 8 3 8 2 5 5 3 2 2 2 3 1 3 2 5 3 3 5 2 2 6 4 5 5 5 3 6 1 9 0 10 8 9 6 9 9 6 1 1 7 3 3 2 2 1 1 3 1 2 1 1 6 0 11 1 4 7 8 9 5 4 2 1 6 1 1 2 1 1 3 3 1 8 0 8 8 1 7 6 7 5 7 9 2 2 3 2 1 3 3 3 1 3 5 2 1 3 3 5 1 5 0 9 3 7 2 1 2 7 5 1 1 3 2 2 1 1 1 8 0 6 7 1 6 9 1 8 3 2 3 2 2 1 1 1 1 7 0 9 7 2 9 4 1 8 1 1 1 2 1 2 3 1 1 3 2 1 4 4 3 3 4 1 7 0 7 9 7 1 6 2 6 1 2 3 1 1 2 1 2 1 9 0 8 9 9 3 3 5 3 1 1 2 1 1 1 2 1 3 1 3 1 5 0 6 1 1 6 6 2 5 1 2 3 3 1 4 2 3 5 3 4 1 5 0 10 2 6 1 4 1 7 4 2 3 2 1 2 2 3 2 1 7 0 11 1 3 5 1 3 3 7 1 5 1 5 2 1 3 2 1 2 1 1 8 0 8 4 1 8 2 8 4 3 1 2 3 1 2 2 1 2 2 2 2 1 3 3 4 1 8 0 8 5 6 9 5 7 4 1 4 1 3 3 2 2 3 2 1 1 5 0 10 4 5 5 2 7 6 3 1 9 5 1 2 2 2 1 1 8 0 7 2 9 5 1 2 5 6 3 1 1 3 1 1 1 3 2 3 1 4 2 2 4 2 3 5 3 3 4 1 6 0 11 1 8 7 7 1 6 6 5 3 1 2 1 2 3 3 1 1 1 5 0 9 5 1 1 8 1 9 3 3 6 3 1 1 2 3 1 5 0 11 9 5 6 8 6 2 1 8 7 4 1 1 3 2 1 1 2 4 1 1 3 6 1 9 0 6 9 3 3 4 1 7 1 3 2 1 1 1 2 3 1 1 6 0 10 1 3 8 2 8 5 4 8 2 8 1 2 3 2 3 2 1 5 0 7 7 4 4 7 1 7 8 1 3 3 1 3 2 4 1 3 2 3 3 6 1 5 0 9 4 5 7 7 3 2 2 1 5 1 3 3 3 1 1 6 0 11 3 5 1 5 4 9 9 4 2 9 7 3 3 1 1 3 2 1 7 0 10 9 7 8 1 9 3 2 2 9 6 2 3 1 2 2 1 3 3 3 3 1 2 1 3 7 1 6 0 7 7 6 4 7 8 5 1 2 3 1 2 3 1 1 9 0 7 7 4 1 5 5 7 8 3 1 1 1 3 3 1 2 2 1 8 0 6 3 1 8 2 4 3 1 2 3 1 1 2 2 2 5 4 1 2 4 1 1 3 6 1 5 0 6 3 7 1 6 4 6 2 3 1 1 1 1 8 0 10 1 8 3 1 5 1 4 1 3 6 1 2 1 2 2 1 2 1 1 5 0 11 8 5 2 3 4 4 4 5 1 1 8 3 1 3 3 2 3 1 2 1 2 1 4 2 1 5 3 3 4 1 7 0 9 1 1 9 6 3 9 2 5 5 3 3 1 2 2 1 3 1 8 0 9 6 9 8 4 8 1 6 2 4 1 1 1 2 1 1 2 3 1 7 0 9 6 8 4 4 1 1 3 1 2 1 3 2 2 3 1 3 3 5 1 2 3 6 1 9 0 7 7 5 1 9 9 3 6 3 1 3 2 1 2 3 1 1 1 6 0 6 7 1 6 9 2 3 2 3 2 3 3 1 1 6 0 8 3 6 5 9 1 7 9 7 2 1 3 2 1 1 3 5 1 3 1 3 3 4 1 5 0 8 1 2 9 1 9 7 7 5 3 3 2 1 1 1 5 0 11 5 5 8 3 1 7 5 8 4 1 1 1 1 3 3 2 1 7 0 10 8 3 2 1 7 2 8 7 9 7 1 2 1 3 3 1 3 1 2 2 1 3 6 1 6 0 10 2 8 7 5 1 7 1 8 4 1 3 1 1 2 2 2 1 6 0 9 8 9 8 1 9 1 1 1 3 2 1 2 2 1 1 1 5 0 8 1 5 1 5 8 6 4 6 3 3 2 1 2 4 2 3 2 2 2 3 4 1 8 0 6 4 4 6 5 1 9 2 1 2 1 3 1 2 1 1 8 0 10 2 1 1 8 1 3 2 1 2 1 2 1 3 3 3 1 2 2 1 6 0 8 2 4 1 1 3 4 7 1 2 1 3 1 1 1 1 1 3 3 3 5 2 4 3 3 7 1 6 0 10 1 2 4 5 3 5 9 7 8 1 1 1 3 1 3 2 1 5 0 8 7 1 4 1 2 7 4 1 3 1 3 3 2 1 9 0 11 9 9 7 4 3 4 4 9 1 2 3 1 2 1 3 1 2 1 3 1 2 3 4 3 2 2 1 3 6 1 9 0 10 3 4 6 5 8 1 1 9 2 2 3 3 2 2 2 2 1 2 3 1 5 0 9 4 1 3 9 9 5 5 1 1 1 3 2 1 3 1 9 0 9 1 6 2 6 9 2 1 9 9 1 1 1 3 3 1 1 2 1 3 3 1 1 1 3 3 6 1 5 0 11 2 7 7 3 1 1 3 8 1 9 6 1 1 1 1 3 1 9 0 8 7 3 1 7 9 5 1 8 2 1 1 1 1 2 2 3 3 1 9 0 11 9 1 7 1 8 1 1 3 4 6 3 2 1 2 2 3 2 3 1 1 3 5 4 4 5 5 3 4 1 7 0 6 9 2 6 1 1 1 3 3 3 1 3 1 1 1 6 0 11 9 2 2 1 2 5 7 7 4 5 7 1 3 3 1 1 2 1 6 0 7 6 1 9 9 1 3 5 2 1 1 1 3 2 4 4 3 1 1 2 1 8 7 5 7 2 4 5 3 6 1 7 0 8 1 6 7 2 5 2 1 1 2 2 2 1 2 1 2 1 9 0 9 9 4 3 4 5 9 1 2 8 3 1 1 2 2 1 3 1 1 1 7 0 7 6 4 8 2 1 4 8 3 3 1 1 2 2 2 5 2 5 4 1 3 3 7 1 8 0 9 8 7 3 3 6 1 5 1 9 3 3 3 1 3 2 1 3 1 6 0 11 4 7 4 3 8 7 1 7 1 2 8 1 1 3 2 1 3 1 5 0 8 9 1 1 8 7 2 2 1 1 1 1 1 2 4 5 1 5 3 5 3 3 4 1 5 0 6 8 7 2 1 1 1 3 1 2 3 2 1 5 0 6 9 5 1 5 7 3 2 2 1 1 3 1 5 0 6 9 4 1 3 1 5 1 2 1 3 1 3 4 2 3 3 7 1 6 0 9 9 8 3 1 7 6 8 7 8 3 3 2 1 1 1 1 7 0 10 2 7 5 2 8 7 6 1 3 2 2 1 3 1 1 1 2 1 6 0 7 1 1 8 9 2 7 2 2 3 1 1 3 2 5 5 5 3 4 2 4 4 2 2 3 1 5 4 3 6 1 9 0 8 7 5 1 9 3 4 7 6 3 2 1 2 1 1 3 2 2 1 5 0 6 9 8 7 3 8 1 1 1 3 1 2 1 9 0 10 8 5 5 3 1 3 5 4 1 7 2 1 2 3 1 1 1 2 1 4 1 1 1 5 2 3 6 1 6 0 6 9 9 1 2 4 1 1 1 1 2 2 3 1 5 0 6 8 2 4 5 6 1 2 1 1 1 2 1 9 0 7 4 1 2 2 2 4 5 2 2 1 3 3 2 2 2 1 2 1 2 5 1 1 3 5 1 7 0 11 5 3 1 7 1 8 8 8 4 9 9 3 3 1 1 3 1 3 1 5 0 10 6 5 1 3 8 8 7 2 1 5 3 2 3 1 1 1 8 0 11 1 1 3 7 8 3 5 9 5 2 3 1 1 3 3 2 1 1 3 3 5 3 3 1 3 5 1 5 0 8 9 1 6 5 1 4 8 1 3 1 3 1 2 1 5 0 6 1 6 2 9 9 4 3 2 3 1 1 1 5 0 11 3 5 4 2 4 1 1 1 3 4 6 2 1 3 2 2 3 4 4 1 5 3 7 1 9 0 8 1 5 9 2 6 8 4 1 3 3 1 1 3 3 3 3 3 1 7 0 8 4 1 1 1 7 2 5 5 1 2 1 3 1 1 1 1 8 0 8 8 5 9 2 5 7 4 1 2 1 1 1 1 1 2 2 1 4 2 2 5 3 5 4 2 1 7 5 3 3 6 1 9 0 9 5 1 7 6 2 1 9 3 1 1 2 1 3 2 3 1 1 1 1 7 0 9 6 1 5 4 4 1 3 5 4 1 1 3 3 1 2 3 1 6 0 7 5 3 8 3 7 7 1 2 3 2 3 2 1 4 1 5 2 5 2 3 7 1 8 0 8 2 3 6 6 4 1 1 4 3 2 3 3 2 2 1 2 1 9 0 10 4 2 5 3 6 3 9 2 1 1 1 2 3 2 2 1 3 1 3 1 6 0 9 5 4 8 8 3 1 1 3 6 3 2 3 3 1 1 4 3 2 5 3 5 3 3 5 1 5 0 11 1 6 8 1 2 3 5 7 7 3 8 1 3 2 1 3 1 6 0 10 6 9 3 7 5 5 1 1 5 6 1 3 2 1 1 2 1 5 0 10 3 7 3 1 5 1 7 6 2 9 2 2 1 2 1 5 2 2 1 2 3 7 1 8 0 6 6 5 1 1 3 7 2 1 3 2 1 2 1 2 1 7 0 7 7 5 4 3 8 1 3 1 2 3 1 1 1 3 1 7 0 11 4 4 6 7 6 1 5 7 2 8 1 2 3 3 1 2 3 1 1 4 1 1 5 5 1 3 6 1 5 0 9 6 2 4 3 5 1 5 1 7 3 3 2 1 2 1 9 0 10 6 1 3 1 8 9 3 8 5 4 1 1 2 3 1 3 3 1 2 1 7 0 9 5 3 7 5 4 1 1 1 6 1 2 1 3 2 2 1 2 1 2 3 1 5 6 1 6 5 3 3 7 1 6 0 9 8 1 9 8 7 1 5 3 2 1 3 1 3 3 1 1 5 0 8 8 3 8 5 1 1 5 4 1 3 1 2 3 1 6 0 9 6 7 2 3 1 5 5 7 5 1 1 2 1 3 3 5 3 1 1 5 4 5 3 4 1 8 0 6 8 6 7 1 5 8 1 1 1 1 2 1 1 2 1 7 0 9 1 5 7 9 1 9 9 1 4 1 3 2 2 1 2 1 1 5 0 11 6 7 1 2 8 3 2 7 4 6 5 1 1 1 3 3 3 3 1 4 3 6 1 8 0 9 8 2 2 1 6 6 9 2 1 3 2 3 3 2 2 1 2 1 7 0 7 4 7 1 1 2 8 3 2 1 1 3 2 3 3 1 9 0 6 8 1 1 1 7 2 1 1 2 3 2 1 1 3 2 1 5 3 5 3 1 3 5 1 5 0 7 8 3 3 1 7 7 1 2 3 3 3 1 1 8 0 11 3 1 6 8 7 1 5 2 9 5 6 1 1 2 1 2 2 3 1 1 6 0 7 1 6 2 6 9 1 1 2 1 1 1 1 2 2 4 2 5 4 3 5 1 7 0 9 3 9 3 8 8 1 2 2 8 3 1 2 1 3 2 3 1 5 0 7 1 8 4 7 7 2 6 2 3 1 3 1 1 7 0 9 9 1 4 8 7 8 9 9 1 3 2 3 2 3 2 1 2 5 4 2 5 5 5 6 5 4 3 4 1 8 0 11 2 5 5 4 1 6 4 1 4 1 4 2 2 3 1 2 2 2 1 1 6 0 9 1 8 3 5 6 1 2 3 2 1 2 2 2 1 3 1 5 0 8 8 1 5 8 1 5 2 7 2 2 1 3 1 4 3 2 3 3 7 1 5 0 7 7 6 9 1 6 1 7 3 1 3 1 1 1 5 0 6 7 8 3 1 2 8 1 3 3 2 3 1 9 0 9 7 9 3 1 7 1 9 9 4 1 1 1 2 1 1 3 3 2 2 1 3 3 3 1 5 3 6 1 7 0 11 7 1 3 2 1 1 6 5 4 5 5 1 2 1 3 1 3 3 1 6 0 6 1 2 9 7 7 1 2 1 2 3 1 3 1 8 0 10 6 9 1 9 8 9 3 4 1 5 1 1 1 1 2 1 1 1 3 3 3 5 1 4 3 7 1 5 0 8 8 3 4 8 7 1 7 9 1 3 1 2 1 1 6 0 11 9 1 7 1 6 8 8 9 3 5 5 3 2 1 2 1 1 1 5 0 9 9 9 7 1 7 1 2 1 4 2 2 2 1 2 3 3 1 5 1 1 3 3 6 1 7 0 10 3 4 8 6 8 6 1 9 3 3 1 2 3 3 1 2 3 1 9 0 9 1 9 8 3 9 1 8 7 2 1 3 1 3 1 3 3 2 3 1 7 0 8 9 1 4 8 7 5 5 6 1 2 3 3 3 3 2 4 5 4 2 4 1 4 5 5 7 5 4 3 4 1 5 0 8 8 1 6 6 6 8 8 1 1 1 1 2 2 1 6 0 10 5 9 1 3 8 8 9 7 2 9 3 1 3 2 2 1 1 6 0 8 5 7 2 1 3 3 6 1 3 1 1 1 2 1 2 1 2 4 3 4 1 7 0 10 1 2 2 5 9 1 1 7 1 6 3 2 2 3 3 1 2 1 8 0 10 1 9 4 7 7 8 3 3 9 4 2 1 2 3 1 2 2 1 1 7 0 8 7 4 6 4 1 2 6 7 1 2 1 2 1 1 2 1 5 5 3 3 5 1 5 0 10 6 7 2 1 5 1 9 8 8 9 2 1 1 1 1 1 8 0 10 2 1 9 6 1 1 4 7 9 5 1 3 3 2 3 1 3 1 1 5 0 11 5 4 7 7 5 9 5 5 7 1 7 1 1 1 1 3 4 3 1 1 2 3 7 1 8 0 9 9 5 1 7 6 5 7 4 8 1 1 3 3 3 1 1 2 1 5 0 9 1 8 5 3 4 8 5 1 6 1 2 3 1 3 1 5 0 7 1 6 6 8 7 3 7 3 1 3 1 3 1 2 5 2 3 5 3 3 4 1 6 0 10 1 4 2 2 6 8 6 6 3 6 1 3 1 2 1 2 1 7 0 11 3 3 2 1 1 9 1 1 4 7 7 1 3 1 1 1 2 3 1 8 0 11 6 2 1 4 3 9 8 4 4 6 2 2 2 1 1 1 2 2 2 3 3 3 5 1 4 4 6 5 5 3 7 1 7 0 7 6 6 3 2 7 1 5 3 3 1 3 1 3 1 1 6 0 11 5 7 1 2 5 5 1 5 5 9 4 1 1 1 3 1 2 1 6 0 7 5 5 6 5 4 1 8 1 1 2 2 1 2 3 3 5 5 2 3 2 3 5 1 6 0 9 4 6 5 8 4 5 1 1 5 1 3 1 1 3 3 1 7 0 10 3 2 1 9 3 2 3 4 9 1 1 3 1 2 1 1 2 1 8 0 9 9 1 3 1 1 4 4 9 9 3 3 1 3 1 3 2 2 1 3 3 2 2 3 7 1 8 0 6 1 7 2 7 1 5 1 3 3 1 1 3 2 3 1 9 0 9 3 2 4 1 9 1 8 1 9 3 1 3 1 3 3 1 1 1 1 6 0 9 5 5 1 6 4 7 2 8 6 1 2 3 1 1 2 2 4 2 1 4 1 2 3 6 1 9 0 10 1 5 1 3 7 4 6 3 7 2 3 1 1 1 2 1 1 3 2 1 9 0 6 7 4 1 1 1 8 2 2 1 2 3 2 3 1 2 1 8 0 6 8 1 5 2 8 4 1 3 2 2 3 2 1 1 1 2 5 1 4 2 3 4 1 8 0 11 1 5 8 3 4 7 8 5 6 5 8 3 3 3 2 3 1 2 3 1 5 0 6 1 7 9 6 1 1 2 2 1 2 1 1 5 0 11 4 1 4 1 7 4 3 3 2 2 3 1 3 2 1 1 4 2 3 3 4 7 4 3 2 7 5 7 6 10 3 1 4 3 1 4 6 2
diff --git a/2018/inputs/9.txt b/2018/inputs/9.txt
deleted file mode 100644
index eaf3e92..0000000
--- a/2018/inputs/9.txt
+++ /dev/null
@@ -1 +0,0 @@
-438 players; last marble is worth 71626 points
diff --git a/2019/Cargo.lock b/2019/Cargo.lock
index 52c69da..715a66d 100644
--- a/2019/Cargo.lock
+++ b/2019/Cargo.lock
@@ -1,580 +1,580 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
+version = 3
+
[[package]]
name = "ansi_term"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
dependencies = [
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi",
]
[[package]]
name = "aoc2019"
version = "0.1.0"
dependencies = [
- "archery 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "cached 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "derive_more 0.99.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "im 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rpds 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "structopt 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "archery",
+ "cached",
+ "derivative",
+ "derive_more",
+ "im",
+ "num",
+ "rayon",
+ "rpds",
+ "structopt",
]
[[package]]
name = "archery"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d308d8fa3f687f7a7588fccc4812ed6914be09518232f00454693a7417273ad2"
dependencies = [
- "static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "static_assertions",
]
[[package]]
name = "atty"
version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
dependencies = [
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc",
+ "winapi",
]
[[package]]
name = "autocfg"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
[[package]]
name = "bitflags"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
[[package]]
name = "bitmaps"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81e039a80914325b37fde728ef7693c212f0ac913d5599607d7b95a9484aae0b"
dependencies = [
- "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "typenum",
]
[[package]]
name = "cached"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b052fd10f32987c3bd028d91ef86190b36fba5c8fccb5515d42083f061e6104"
dependencies = [
- "once_cell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "once_cell",
]
[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
name = "clap"
version = "2.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
dependencies = [
- "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
]
[[package]]
name = "crossbeam-deque"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca"
dependencies = [
- "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-epoch",
+ "crossbeam-utils",
]
[[package]]
name = "crossbeam-epoch"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "lazy_static",
+ "memoffset",
+ "scopeguard",
]
[[package]]
name = "crossbeam-queue"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfd6515864a82d2f877b42813d4553292c6659498c9a2aa31bab5a15243c2700"
dependencies = [
- "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils",
]
[[package]]
name = "crossbeam-utils"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg",
+ "cfg-if",
+ "lazy_static",
]
[[package]]
name = "derivative"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942ca430eef7a3806595a6737bc388bf51adb888d3fc0dd1b50f1c170167ee3a"
dependencies = [
- "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "syn 0.15.44",
]
[[package]]
name = "derive_more"
version = "0.99.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2159be042979966de68315bce7034bb000c775f22e3e834e1c52ff78f041cae8"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.6",
+ "quote 1.0.2",
+ "syn 1.0.11",
]
[[package]]
name = "either"
version = "1.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
[[package]]
name = "heck"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
dependencies = [
- "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-segmentation",
]
[[package]]
name = "hermit-abi"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f629dc602392d3ec14bfc8a09b5e644d7ffd725102b48b81e59f90f2633621d7"
dependencies = [
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc",
]
[[package]]
name = "im"
version = "14.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1f9b6540e530defef7f2df4ed330d45b739b10450548c74a9913f63ea1acc6b"
dependencies = [
- "bitmaps 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_xoshiro 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "sized-chunks 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitmaps",
+ "rand_core",
+ "rand_xoshiro",
+ "sized-chunks",
+ "typenum",
+ "version_check",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
[[package]]
name = "memoffset"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9"
dependencies = [
- "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version",
]
[[package]]
name = "num"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4825417e1e1406b3782a8ce92f4d53f26ec055e3622e1881ca8e9f5f9e08db"
dependencies = [
- "num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational",
+ "num-traits",
]
[[package]]
name = "num-bigint"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9c3f34cdd24f334cb265d9bf8bfa8a241920d026916785747a92f0e55541a1a"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg",
+ "num-integer",
+ "num-traits",
]
[[package]]
name = "num-complex"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb0cf31fb3ff77e6d2a6ebd6800df7fdcd106f2ad89113c9130bcd07f93dffc"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg",
+ "num-traits",
]
[[package]]
name = "num-integer"
version = "0.1.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg",
+ "num-traits",
]
[[package]]
name = "num-iter"
version = "0.1.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76bd5272412d173d6bf9afdf98db8612bbabc9a7a830b7bfc9c188911716132e"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg",
+ "num-integer",
+ "num-traits",
]
[[package]]
name = "num-rational"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2885278d5fe2adc2f75ced642d52d879bffaceb5a2e0b1d4309ffdfb239b454"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg",
]
[[package]]
name = "num_cpus"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72"
dependencies = [
- "hermit-abi 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hermit-abi",
+ "libc",
]
[[package]]
name = "once_cell"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "891f486f630e5c5a4916c7e16c4b24a53e78c860b646e9f8e005e4f16847bfed"
[[package]]
name = "proc-macro-error"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aeccfe4d5d8ea175d5f0e4a2ad0637e0f4121d63bd99d356fb1f39ab2e7c6097"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.6",
+ "quote 1.0.2",
+ "syn 1.0.11",
]
[[package]]
name = "proc-macro2"
version = "0.4.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
dependencies = [
- "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.1.0",
]
[[package]]
name = "proc-macro2"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
dependencies = [
- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.2.0",
]
[[package]]
name = "quote"
version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
dependencies = [
- "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30",
]
[[package]]
name = "quote"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.6",
]
[[package]]
name = "rand_core"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
[[package]]
name = "rand_xoshiro"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9fcdd2e881d02f1d9390ae47ad8e5696a9e4be7b547a1da2afbc61973217004"
dependencies = [
- "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core",
]
[[package]]
name = "rayon"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098"
dependencies = [
- "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
]
[[package]]
name = "rayon-core"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9"
dependencies = [
- "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-deque",
+ "crossbeam-queue",
+ "crossbeam-utils",
+ "lazy_static",
+ "num_cpus",
]
[[package]]
name = "rpds"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1196a0a2f52d343bd32179834273eaac7d8739f7e3f8b700227d2fa06b9a423b"
dependencies = [
- "archery 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "archery",
]
[[package]]
name = "rustc_version"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
dependencies = [
- "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "semver",
]
[[package]]
name = "scopeguard"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
[[package]]
name = "semver"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
dependencies = [
- "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "semver-parser",
]
[[package]]
name = "semver-parser"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
[[package]]
name = "sized-chunks"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62db64dd92b3b54314b1e216c274634ca2b3fe8da8b3873be670cb1ac4dad30f"
dependencies = [
- "bitmaps 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitmaps",
+ "typenum",
]
[[package]]
name = "static_assertions"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3"
[[package]]
name = "strsim"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "structopt"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b3a3e93f5ad553c38b3301c8a0a0cec829a36783f6a0c467fc4bf553a5f5bf"
dependencies = [
- "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "structopt-derive 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "clap",
+ "structopt-derive",
]
[[package]]
name = "structopt-derive"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea692d40005b3ceba90a9fe7a78fa8d4b82b0ce627eebbffc329aab850f3410e"
dependencies = [
- "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "heck",
+ "proc-macro-error",
+ "proc-macro2 1.0.6",
+ "quote 1.0.2",
+ "syn 1.0.11",
]
[[package]]
name = "syn"
version = "0.15.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
dependencies = [
- "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "unicode-xid 0.1.0",
]
[[package]]
name = "syn"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.6",
+ "quote 1.0.2",
+ "unicode-xid 0.2.0",
]
[[package]]
name = "textwrap"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
dependencies = [
- "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width",
]
[[package]]
name = "typenum"
version = "1.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9"
[[package]]
name = "unicode-segmentation"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
[[package]]
name = "unicode-width"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
[[package]]
name = "unicode-xid"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
[[package]]
name = "unicode-xid"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
[[package]]
name = "vec_map"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
[[package]]
name = "version_check"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
[[package]]
name = "winapi"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
dependencies = [
- "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[metadata]
-"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
-"checksum archery 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d308d8fa3f687f7a7588fccc4812ed6914be09518232f00454693a7417273ad2"
-"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
-"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
-"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-"checksum bitmaps 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "81e039a80914325b37fde728ef7693c212f0ac913d5599607d7b95a9484aae0b"
-"checksum cached 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b052fd10f32987c3bd028d91ef86190b36fba5c8fccb5515d42083f061e6104"
-"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
-"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
-"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca"
-"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac"
-"checksum crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfd6515864a82d2f877b42813d4553292c6659498c9a2aa31bab5a15243c2700"
-"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4"
-"checksum derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "942ca430eef7a3806595a6737bc388bf51adb888d3fc0dd1b50f1c170167ee3a"
-"checksum derive_more 0.99.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2159be042979966de68315bce7034bb000c775f22e3e834e1c52ff78f041cae8"
-"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
-"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
-"checksum hermit-abi 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f629dc602392d3ec14bfc8a09b5e644d7ffd725102b48b81e59f90f2633621d7"
-"checksum im 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a1f9b6540e530defef7f2df4ed330d45b739b10450548c74a9913f63ea1acc6b"
-"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
-"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9"
-"checksum num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cf4825417e1e1406b3782a8ce92f4d53f26ec055e3622e1881ca8e9f5f9e08db"
-"checksum num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f9c3f34cdd24f334cb265d9bf8bfa8a241920d026916785747a92f0e55541a1a"
-"checksum num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fcb0cf31fb3ff77e6d2a6ebd6800df7fdcd106f2ad89113c9130bcd07f93dffc"
-"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09"
-"checksum num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "76bd5272412d173d6bf9afdf98db8612bbabc9a7a830b7bfc9c188911716132e"
-"checksum num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2885278d5fe2adc2f75ced642d52d879bffaceb5a2e0b1d4309ffdfb239b454"
-"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4"
-"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72"
-"checksum once_cell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "891f486f630e5c5a4916c7e16c4b24a53e78c860b646e9f8e005e4f16847bfed"
-"checksum proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aeccfe4d5d8ea175d5f0e4a2ad0637e0f4121d63bd99d356fb1f39ab2e7c6097"
-"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
-"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
-"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
-"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
-"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
-"checksum rand_xoshiro 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9fcdd2e881d02f1d9390ae47ad8e5696a9e4be7b547a1da2afbc61973217004"
-"checksum rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098"
-"checksum rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9"
-"checksum rpds 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1196a0a2f52d343bd32179834273eaac7d8739f7e3f8b700227d2fa06b9a423b"
-"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
-"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
-"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
-"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-"checksum sized-chunks 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62db64dd92b3b54314b1e216c274634ca2b3fe8da8b3873be670cb1ac4dad30f"
-"checksum static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3"
-"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
-"checksum structopt 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "30b3a3e93f5ad553c38b3301c8a0a0cec829a36783f6a0c467fc4bf553a5f5bf"
-"checksum structopt-derive 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea692d40005b3ceba90a9fe7a78fa8d4b82b0ce627eebbffc329aab850f3410e"
-"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
-"checksum syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238"
-"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9"
-"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
-"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
-"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
-"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
-"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
-"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
-"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
-"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/2019/inputs/.gitkeep b/2019/inputs/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/2019/inputs/.gitkeep
diff --git a/2019/inputs/day_1.txt b/2019/inputs/day_1.txt
deleted file mode 100644
index 5c720ed..0000000
--- a/2019/inputs/day_1.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-66690
-86239
-75191
-140364
-95979
-106923
-95229
-123571
-84764
-89444
-98107
-89062
-109369
-146067
-124760
-76900
-139198
-111441
-74046
-84920
-54397
-143807
-121654
-93863
-73909
-104121
-58485
-119084
-126227
-142078
-79820
-132617
-108430
-98032
-107434
-127307
-105619
-57741
-53468
-63301
-137970
-136780
-80897
-133205
-79159
-89124
-94477
-56714
-143704
-122097
-117335
-108246
-75507
-101459
-101162
-146197
-121884
-66217
-57074
-142903
-140951
-64883
-124556
-67382
-142407
-121778
-57933
-94599
-87426
-143758
-64043
-65678
-90137
-61090
-77315
-102383
-146607
-139290
-85394
-149787
-125611
-106405
-91561
-135739
-54845
-68782
-111175
-61011
-125658
-70751
-85607
-75458
-75419
-124311
-66022
-122784
-129018
-54901
-73788
-108240
diff --git a/2019/inputs/day_10.txt b/2019/inputs/day_10.txt
deleted file mode 100644
index 51520ab..0000000
--- a/2019/inputs/day_10.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-.###.#...#.#.##.#.####..
-.#....#####...#.######..
-#.#.###.###.#.....#.####
-##.###..##..####.#.####.
-###########.#######.##.#
-##########.#########.##.
-.#.##.########.##...###.
-###.#.##.#####.#.###.###
-##.#####.##..###.#.##.#.
-.#.#.#####.####.#..#####
-.###.#####.#..#..##.#.##
-########.##.#...########
-.####..##..#.###.###.#.#
-....######.##.#.######.#
-###.####.######.#....###
-############.#.#.##.####
-##...##..####.####.#..##
-.###.#########.###..#.##
-#.##.#.#...##...#####..#
-##.#..###############.##
-##.###.#####.##.######..
-##.#####.#.#.##..#######
-...#######.######...####
-#....#.#.#.####.#.#.#.##
diff --git a/2019/inputs/day_11.txt b/2019/inputs/day_11.txt
deleted file mode 100644
index d6581e1..0000000
--- a/2019/inputs/day_11.txt
+++ /dev/null
@@ -1 +0,0 @@
-3,8,1005,8,320,1106,0,11,0,0,0,104,1,104,0,3,8,1002,8,-1,10,101,1,10,10,4,10,1008,8,1,10,4,10,102,1,8,29,2,1005,1,10,1006,0,11,3,8,1002,8,-1,10,101,1,10,10,4,10,108,0,8,10,4,10,102,1,8,57,1,8,15,10,1006,0,79,1,6,3,10,3,8,102,-1,8,10,101,1,10,10,4,10,108,0,8,10,4,10,101,0,8,90,2,103,18,10,1006,0,3,2,105,14,10,3,8,102,-1,8,10,1001,10,1,10,4,10,108,0,8,10,4,10,101,0,8,123,2,9,2,10,3,8,102,-1,8,10,1001,10,1,10,4,10,1008,8,1,10,4,10,1001,8,0,150,1,2,2,10,2,1009,6,10,1,1006,12,10,1006,0,81,3,8,102,-1,8,10,1001,10,1,10,4,10,1008,8,1,10,4,10,102,1,8,187,3,8,102,-1,8,10,1001,10,1,10,4,10,1008,8,0,10,4,10,101,0,8,209,3,8,1002,8,-1,10,1001,10,1,10,4,10,1008,8,1,10,4,10,101,0,8,231,1,1008,11,10,1,1001,4,10,2,1104,18,10,3,8,102,-1,8,10,1001,10,1,10,4,10,108,1,8,10,4,10,1001,8,0,264,1,8,14,10,1006,0,36,3,8,1002,8,-1,10,1001,10,1,10,4,10,108,0,8,10,4,10,101,0,8,293,1006,0,80,1006,0,68,101,1,9,9,1007,9,960,10,1005,10,15,99,109,642,104,0,104,1,21102,1,846914232732,1,21102,1,337,0,1105,1,441,21102,1,387512115980,1,21101,348,0,0,1106,0,441,3,10,104,0,104,1,3,10,104,0,104,0,3,10,104,0,104,1,3,10,104,0,104,1,3,10,104,0,104,0,3,10,104,0,104,1,21102,209533824219,1,1,21102,1,395,0,1106,0,441,21101,0,21477985303,1,21102,406,1,0,1106,0,441,3,10,104,0,104,0,3,10,104,0,104,0,21101,868494234468,0,1,21101,429,0,0,1106,0,441,21102,838429471080,1,1,21102,1,440,0,1106,0,441,99,109,2,21201,-1,0,1,21101,0,40,2,21102,472,1,3,21101,0,462,0,1106,0,505,109,-2,2106,0,0,0,1,0,0,1,109,2,3,10,204,-1,1001,467,468,483,4,0,1001,467,1,467,108,4,467,10,1006,10,499,1102,1,0,467,109,-2,2106,0,0,0,109,4,2101,0,-1,504,1207,-3,0,10,1006,10,522,21101,0,0,-3,21202,-3,1,1,22101,0,-2,2,21102,1,1,3,21102,541,1,0,1106,0,546,109,-4,2105,1,0,109,5,1207,-3,1,10,1006,10,569,2207,-4,-2,10,1006,10,569,22102,1,-4,-4,1105,1,637,22102,1,-4,1,21201,-3,-1,2,21202,-2,2,3,21102,588,1,0,1105,1,546,22101,0,1,-4,21102,1,1,-1,2207,-4,-2,10,1006,10,607,21101,0,0,-1,22202,-2,-1,-2,2107,0,-3,10,1006,10,629,21201,-1,0,1,21102,629,1,0,105,1,504,21202,-2,-1,-2,22201,-4,-2,-4,109,-5,2105,1,0
diff --git a/2019/inputs/day_12.txt b/2019/inputs/day_12.txt
deleted file mode 100644
index 7e72a58..0000000
--- a/2019/inputs/day_12.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-<x=14, y=2, z=8>
-<x=7, y=4, z=10>
-<x=1, y=17, z=16>
-<x=-4, y=-1, z=1>
diff --git a/2019/inputs/day_13.txt b/2019/inputs/day_13.txt
deleted file mode 100644
index c600ec1..0000000
--- a/2019/inputs/day_13.txt
+++ /dev/null
@@ -1 +0,0 @@
-1,380,379,385,1008,2689,888873,381,1005,381,12,99,109,2690,1102,0,1,383,1101,0,0,382,21001,382,0,1,20102,1,383,2,21101,0,37,0,1105,1,578,4,382,4,383,204,1,1001,382,1,382,1007,382,41,381,1005,381,22,1001,383,1,383,1007,383,25,381,1005,381,18,1006,385,69,99,104,-1,104,0,4,386,3,384,1007,384,0,381,1005,381,94,107,0,384,381,1005,381,108,1105,1,161,107,1,392,381,1006,381,161,1101,-1,0,384,1106,0,119,1007,392,39,381,1006,381,161,1102,1,1,384,20101,0,392,1,21101,23,0,2,21102,0,1,3,21102,138,1,0,1105,1,549,1,392,384,392,21001,392,0,1,21101,23,0,2,21101,3,0,3,21102,1,161,0,1105,1,549,1101,0,0,384,20001,388,390,1,20101,0,389,2,21101,0,180,0,1106,0,578,1206,1,213,1208,1,2,381,1006,381,205,20001,388,390,1,20101,0,389,2,21101,205,0,0,1105,1,393,1002,390,-1,390,1102,1,1,384,21001,388,0,1,20001,389,391,2,21101,228,0,0,1105,1,578,1206,1,261,1208,1,2,381,1006,381,253,20101,0,388,1,20001,389,391,2,21101,253,0,0,1106,0,393,1002,391,-1,391,1101,0,1,384,1005,384,161,20001,388,390,1,20001,389,391,2,21101,279,0,0,1106,0,578,1206,1,316,1208,1,2,381,1006,381,304,20001,388,390,1,20001,389,391,2,21101,0,304,0,1106,0,393,1002,390,-1,390,1002,391,-1,391,1101,0,1,384,1005,384,161,20102,1,388,1,20101,0,389,2,21101,0,0,3,21101,0,338,0,1106,0,549,1,388,390,388,1,389,391,389,21001,388,0,1,21002,389,1,2,21102,4,1,3,21101,0,365,0,1105,1,549,1007,389,24,381,1005,381,75,104,-1,104,0,104,0,99,0,1,0,0,0,0,0,0,230,18,20,1,1,20,109,3,21201,-2,0,1,22101,0,-1,2,21101,0,0,3,21102,1,414,0,1106,0,549,22102,1,-2,1,22102,1,-1,2,21101,0,429,0,1105,1,601,2102,1,1,435,1,386,0,386,104,-1,104,0,4,386,1001,387,-1,387,1005,387,451,99,109,-3,2106,0,0,109,8,22202,-7,-6,-3,22201,-3,-5,-3,21202,-4,64,-2,2207,-3,-2,381,1005,381,492,21202,-2,-1,-1,22201,-3,-1,-3,2207,-3,-2,381,1006,381,481,21202,-4,8,-2,2207,-3,-2,381,1005,381,518,21202,-2,-1,-1,22201,-3,-1,-3,2207,-3,-2,381,1006,381,507,2207,-3,-4,381,1005,381,540,21202,-4,-1,-1,22201,-3,-1,-3,2207,-3,-4,381,1006,381,529,22102,1,-3,-7,109,-8,2106,0,0,109,4,1202,-2,41,566,201,-3,566,566,101,639,566,566,2101,0,-1,0,204,-3,204,-2,204,-1,109,-4,2105,1,0,109,3,1202,-1,41,594,201,-2,594,594,101,639,594,594,20102,1,0,-2,109,-3,2106,0,0,109,3,22102,25,-2,1,22201,1,-1,1,21101,0,521,2,21102,1,1011,3,21102,1,1025,4,21102,630,1,0,1106,0,456,21201,1,1664,-2,109,-3,2105,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,2,2,0,2,0,2,0,2,0,0,2,2,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,2,0,1,1,0,0,0,0,2,0,0,2,0,2,2,2,2,0,2,0,0,0,2,2,0,0,2,2,2,2,0,0,0,0,0,2,0,0,0,0,2,2,0,1,1,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,2,2,0,2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,2,2,2,0,0,1,1,0,0,2,2,2,0,0,0,2,0,0,0,0,0,2,2,0,0,2,0,2,0,0,0,2,2,0,0,0,2,0,0,0,2,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,2,0,0,2,0,0,0,0,2,0,0,2,0,2,0,2,0,2,0,0,1,1,0,0,0,0,0,2,2,0,0,2,2,0,0,0,0,2,0,0,2,2,0,0,0,2,2,0,0,2,0,0,0,2,2,2,2,2,0,2,0,1,1,0,0,0,0,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,2,2,2,0,0,0,0,0,2,0,0,2,0,0,1,1,0,2,0,0,2,0,0,0,0,2,0,0,0,0,2,2,0,2,0,0,0,0,2,0,0,0,0,0,2,0,2,0,0,2,0,0,2,0,0,1,1,0,2,2,2,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,2,0,0,2,0,2,0,2,2,0,2,2,0,2,0,2,0,0,1,1,0,0,2,0,0,2,0,2,0,0,2,0,0,2,0,0,0,2,0,0,0,0,2,0,0,2,0,0,2,2,0,2,0,0,0,0,2,2,0,1,1,0,0,2,2,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,2,2,2,0,0,2,0,2,0,2,2,0,0,2,0,2,0,0,1,1,0,0,2,2,2,0,0,2,2,0,2,2,2,0,0,0,2,2,2,0,2,0,0,0,0,0,2,0,0,2,0,2,0,0,0,0,0,0,0,1,1,0,2,0,0,0,2,2,0,2,0,0,2,0,2,2,2,0,0,2,2,0,2,0,0,0,0,0,0,2,2,0,2,2,0,2,0,0,2,0,1,1,0,0,2,0,0,2,2,0,0,0,0,0,2,2,0,2,2,2,0,2,0,2,2,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,1,1,0,2,0,2,0,2,2,2,2,0,0,0,2,0,0,0,2,2,0,0,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,2,0,0,0,1,1,0,0,0,0,2,0,0,2,0,0,2,2,0,2,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,2,0,1,1,0,2,0,0,0,2,0,0,0,2,2,0,2,0,0,2,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,2,0,0,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,34,58,37,19,14,62,51,10,28,52,86,20,39,30,61,36,77,73,19,11,17,74,7,54,40,59,20,92,18,13,85,72,83,58,18,68,10,22,94,22,25,40,67,96,55,96,42,16,80,80,96,35,19,79,81,63,91,5,72,68,80,93,79,36,91,47,71,82,45,29,51,36,10,62,57,29,17,16,4,88,75,81,70,77,32,2,38,37,35,86,41,35,61,71,72,22,14,33,12,10,10,56,30,3,90,71,24,62,69,31,47,2,18,77,43,20,64,85,50,43,43,73,16,23,98,4,23,53,82,15,88,1,39,78,43,57,65,8,45,79,17,44,32,76,31,3,25,71,45,16,42,61,89,21,93,4,98,66,68,5,13,19,48,65,29,5,24,59,29,49,57,39,21,96,10,8,25,82,17,42,46,49,83,4,81,32,14,7,76,62,31,74,55,19,39,63,89,41,38,28,34,34,88,7,77,43,87,10,47,85,39,31,88,69,40,72,51,49,64,46,64,14,66,95,95,58,38,88,82,35,6,58,3,21,33,58,9,95,43,52,13,22,22,10,11,47,35,33,31,58,93,83,13,14,55,71,88,42,73,83,91,84,62,78,80,15,26,50,8,15,6,91,89,3,12,53,47,47,82,67,12,77,6,63,88,94,53,19,97,36,34,59,91,27,37,45,44,31,8,58,16,7,74,76,83,17,28,42,85,19,1,61,73,84,37,15,43,52,80,48,51,98,70,77,28,55,78,85,64,32,22,82,69,7,82,55,78,24,5,89,55,4,34,28,71,76,81,90,96,2,2,77,41,32,24,60,10,11,26,64,66,19,11,77,11,82,81,1,52,2,79,43,47,87,63,73,3,81,69,66,53,4,83,88,13,5,62,94,55,58,4,93,96,58,40,69,64,56,80,71,85,44,45,24,80,59,53,15,85,92,89,95,69,77,53,27,72,3,54,49,9,35,10,85,43,86,9,42,69,29,64,96,17,72,47,24,2,13,40,45,62,19,41,85,28,68,73,20,52,56,19,57,1,36,64,18,26,41,94,81,45,35,29,32,28,87,86,53,71,54,67,68,47,53,17,40,61,58,74,2,51,43,23,62,54,13,80,67,88,94,1,62,85,7,12,87,51,4,69,25,57,6,79,94,15,75,93,46,19,28,84,72,84,59,60,59,59,14,11,30,57,53,75,83,72,61,65,50,26,49,23,40,82,11,67,8,55,13,22,41,32,33,89,37,69,11,24,24,8,21,89,11,46,89,88,59,3,7,43,85,74,92,72,60,85,82,33,82,71,14,21,41,4,78,88,4,22,81,30,92,17,9,62,69,84,47,6,86,49,94,11,96,21,1,5,1,45,19,60,59,17,85,67,42,21,11,79,39,27,72,54,19,69,50,52,78,78,6,16,96,86,37,58,79,9,45,10,73,29,53,75,63,50,66,6,69,8,74,68,88,9,88,87,50,34,45,12,43,43,58,14,29,32,77,77,97,45,29,41,94,21,91,52,22,74,44,48,11,20,68,9,51,7,85,93,74,59,16,34,60,12,3,18,17,4,71,44,49,79,68,54,96,74,21,74,60,59,16,77,65,97,84,54,52,37,95,9,3,41,9,72,82,82,95,31,71,56,50,59,93,57,79,16,9,74,72,47,1,9,5,55,63,64,80,40,93,54,11,57,26,76,19,85,41,80,90,92,27,61,24,83,93,96,95,28,68,80,11,60,65,36,2,46,75,59,52,11,36,74,62,52,6,23,85,93,61,36,26,70,2,13,97,52,92,96,87,63,63,31,2,50,25,34,79,46,4,48,51,74,96,74,7,43,82,84,50,59,53,13,51,8,81,36,93,10,31,10,50,76,69,33,3,71,1,1,65,68,57,69,15,64,81,59,38,38,89,79,80,52,44,59,26,96,21,38,38,79,2,96,2,92,73,49,14,71,74,66,94,98,63,28,59,26,30,67,1,61,84,92,47,24,27,41,57,95,89,6,96,48,43,7,82,42,5,27,15,32,89,53,3,35,63,84,97,92,77,50,38,73,10,50,89,95,96,77,61,51,90,22,75,41,77,1,14,72,68,91,10,80,28,25,10,86,54,10,87,55,40,79,16,35,8,82,51,70,84,12,72,74,4,88,71,69,83,9,55,10,57,9,3,40,74,72,61,75,64,54,32,61,26,53,48,45,22,6,83,21,21,9,4,7,65,98,78,17,54,35,95,79,36,53,59,84,53,14,20,94,12,31,54,86,39,95,82,38,8,22,58,50,27,32,53,79,49,71,76,18,64,75,64,88,58,88,27,62,31,54,11,59,11,3,42,66,85,41,888873
diff --git a/2019/inputs/day_14.txt b/2019/inputs/day_14.txt
deleted file mode 100644
index dac9757..0000000
--- a/2019/inputs/day_14.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-2 RWPCH => 9 PVTL
-1 FHFH => 4 BLPJK
-146 ORE => 5 VJNBT
-8 KDFNZ, 1 ZJGH, 1 GSCG => 5 LKPQG
-11 NWDZ, 2 WBQR, 1 VRQR => 2 BMJR
-3 GSCG => 4 KQDVM
-5 QVNKN, 6 RPWKC => 3 BCNV
-10 QMBM, 4 RBXB, 2 VRQR => 1 JHXBM
-15 RPWKC => 6 MGCQ
-1 QWKRZ => 4 FHFH
-10 RWPCH => 6 MZKG
-11 JFKGV, 5 QVNKN, 1 CTVK => 4 VQDT
-1 SXKT => 5 RPWKC
-1 VQDT, 25 ZVMCB => 2 RBXB
-6 LGLNV, 4 XSNKB => 3 WBQR
-199 ORE => 2 SXKT
-1 XSNKB, 6 CWBNX, 1 HPKB, 5 PVTL, 1 JNKH, 9 SXKT, 3 KQDVM => 3 ZKTX
-7 FDSX => 6 WJDF
-7 JLRM => 4 CWBNX
-167 ORE => 5 PQZXH
-13 JHXBM, 2 NWDZ, 4 RFLX, 12 VRQR, 10 FJRFG, 14 PVTL, 2 JLRM => 6 DGFG
-12 HPKB, 3 WHVXC => 9 ZJGH
-1 JLRM, 2 ZJGH, 2 QVNKN => 9 FJRFG
-129 ORE => 7 KZFPJ
-2 QMBM => 1 RWPCH
-7 VJMWM => 4 JHDW
-7 PQZXH, 7 SXKT => 9 BJVQM
-1 VJMWM, 4 JHDW, 1 MQXF => 7 FDSX
-1 RPWKC => 7 WHVXC
-1 ZJGH => 1 ZVMCB
-1 RWPCH => 3 MPKR
-187 ORE => 8 VJMWM
-15 CTVK => 5 GSCG
-2 XSNKB, 15 ZVMCB, 3 KDFNZ => 2 RFLX
-18 QVNKN => 8 XLFZJ
-4 CWBNX => 8 ZSCX
-2 ZJGH, 1 JLRM, 1 MGCQ => 9 NPRST
-13 BJVQM, 2 BCNV => 2 QWKRZ
-2 QWKRZ, 2 BLPJK, 5 XSNKB => 2 VRQR
-13 HPKB, 3 VQDT => 9 JLRM
-2 SXKT, 1 VJNBT, 5 VLWQB => 6 CTVK
-2 MPKR, 2 LMNCH, 24 VRQR => 8 DZFNW
-2 VQDT => 1 KDFNZ
-1 CTVK, 6 FDSX => 6 QVNKN
-3 CTVK, 1 QVNKN => 4 HPKB
-3 NPRST, 1 KGSDJ, 1 CTVK => 2 QMBM
-4 KZFPJ, 1 PQZXH => 5 VLWQB
-2 VQDT => 7 KGSDJ
-3 MPKR => 2 JNKH
-1 KQDVM => 5 XQBS
-3 ZKGMX, 1 XQBS, 11 MZKG, 11 NPRST, 1 DZFNW, 5 VQDT, 2 FHFH => 6 JQNF
-2 FJRFG, 17 BMJR, 3 BJVQM, 55 JQNF, 8 DGFG, 13 ZJGH, 29 ZKTX => 1 FUEL
-27 KZFPJ, 5 VJNBT => 5 MQXF
-11 FDSX, 1 WHVXC, 1 WJDF => 4 ZKGMX
-1 ZVMCB => 4 NWDZ
-1 XLFZJ => 6 LGLNV
-13 ZSCX, 4 XLFZJ => 8 LMNCH
-1 RPWKC, 1 FDSX, 2 BJVQM => 8 JFKGV
-1 WJDF, 1 LKPQG => 4 XSNKB
diff --git a/2019/inputs/day_15.txt b/2019/inputs/day_15.txt
deleted file mode 100644
index ca5836c..0000000
--- a/2019/inputs/day_15.txt
+++ /dev/null
@@ -1 +0,0 @@
-3,1033,1008,1033,1,1032,1005,1032,31,1008,1033,2,1032,1005,1032,58,1008,1033,3,1032,1005,1032,81,1008,1033,4,1032,1005,1032,104,99,1002,1034,1,1039,102,1,1036,1041,1001,1035,-1,1040,1008,1038,0,1043,102,-1,1043,1032,1,1037,1032,1042,1106,0,124,1002,1034,1,1039,1001,1036,0,1041,1001,1035,1,1040,1008,1038,0,1043,1,1037,1038,1042,1105,1,124,1001,1034,-1,1039,1008,1036,0,1041,1001,1035,0,1040,1002,1038,1,1043,101,0,1037,1042,1105,1,124,1001,1034,1,1039,1008,1036,0,1041,102,1,1035,1040,1001,1038,0,1043,101,0,1037,1042,1006,1039,217,1006,1040,217,1008,1039,40,1032,1005,1032,217,1008,1040,40,1032,1005,1032,217,1008,1039,1,1032,1006,1032,165,1008,1040,9,1032,1006,1032,165,1102,1,2,1044,1105,1,224,2,1041,1043,1032,1006,1032,179,1102,1,1,1044,1106,0,224,1,1041,1043,1032,1006,1032,217,1,1042,1043,1032,1001,1032,-1,1032,1002,1032,39,1032,1,1032,1039,1032,101,-1,1032,1032,101,252,1032,211,1007,0,35,1044,1106,0,224,1101,0,0,1044,1105,1,224,1006,1044,247,102,1,1039,1034,1002,1040,1,1035,1002,1041,1,1036,102,1,1043,1038,101,0,1042,1037,4,1044,1105,1,0,1,5,41,19,22,1,39,81,29,20,15,82,33,18,45,30,32,55,28,26,70,13,56,32,28,18,3,59,90,11,95,15,85,8,61,25,59,24,34,1,85,5,25,54,57,18,20,54,80,91,28,65,36,12,44,36,13,92,24,56,13,39,69,29,79,10,41,27,23,25,72,20,3,61,15,51,11,12,12,48,10,45,13,29,49,90,30,17,9,41,21,18,7,30,48,17,83,71,4,10,31,10,96,81,77,9,50,39,21,36,33,72,12,3,23,79,18,4,75,17,58,64,8,7,97,60,72,72,1,94,55,42,2,94,2,21,88,19,82,57,96,19,25,27,41,62,15,40,23,61,86,27,73,61,13,46,52,81,12,34,23,73,23,59,1,30,47,9,99,10,37,17,28,98,5,92,73,8,63,4,86,76,79,7,30,68,28,91,12,12,98,74,4,22,44,10,23,45,37,16,90,76,23,74,75,12,21,38,14,15,76,28,49,71,7,6,6,71,53,33,12,87,15,92,66,21,38,13,53,92,34,49,25,6,67,21,27,89,24,61,25,30,41,30,99,28,19,41,90,51,74,14,33,54,48,10,14,42,2,67,76,10,21,2,67,43,27,69,11,16,78,7,36,9,24,48,63,81,53,29,94,34,25,99,66,47,17,97,33,52,11,62,22,52,30,23,89,95,15,13,50,48,26,10,6,69,78,13,6,94,1,28,67,10,70,16,50,19,24,15,79,50,27,3,19,62,4,31,83,20,17,83,67,5,80,26,36,62,87,3,10,80,22,65,60,10,78,4,20,60,30,11,7,83,10,13,72,81,37,22,14,55,63,51,27,32,77,52,20,50,16,48,2,55,10,53,26,84,6,87,43,37,26,3,85,62,25,78,50,16,10,37,22,54,5,80,24,7,32,49,18,27,12,41,70,82,20,34,91,15,98,77,22,6,79,3,8,54,17,32,4,44,2,97,14,15,65,30,97,14,79,75,11,77,5,61,37,20,91,20,45,74,19,40,2,41,89,12,34,44,18,62,57,17,68,22,96,7,59,63,2,60,70,2,26,75,26,3,53,19,80,16,97,7,34,58,52,66,24,75,25,30,75,42,13,12,89,13,3,84,92,1,75,30,54,43,2,56,15,1,15,84,99,6,98,42,17,29,1,18,26,70,71,29,91,23,21,87,66,18,38,32,18,81,65,2,58,99,12,4,84,24,32,88,30,67,49,29,59,64,18,70,10,24,56,5,27,97,50,4,28,85,65,16,67,83,15,16,61,18,86,8,36,25,36,29,97,45,19,81,41,29,45,30,69,26,57,93,27,72,34,30,99,61,2,48,16,12,76,98,28,14,32,32,90,48,10,30,57,23,39,2,8,39,33,13,88,34,31,74,15,60,8,47,60,31,5,79,1,98,86,33,3,99,33,62,11,96,25,22,38,98,84,3,56,70,49,3,8,56,87,4,29,59,65,26,34,77,7,14,78,26,25,70,49,3,31,45,92,24,95,17,4,9,4,96,64,92,27,67,4,99,6,44,7,16,86,2,75,1,6,68,81,4,1,44,49,7,92,8,40,36,25,81,13,56,99,10,2,30,72,6,43,30,12,43,93,19,20,23,95,10,19,66,63,28,96,40,50,8,15,56,38,13,93,42,71,12,18,87,8,4,21,85,9,2,66,77,10,80,26,61,9,43,20,88,10,39,67,55,31,49,17,58,26,80,20,84,54,49,5,73,11,52,15,63,7,62,24,57,92,61,25,87,56,37,31,38,14,99,0,0,21,21,1,10,1,0,0,0,0,0,0
diff --git a/2019/inputs/day_16.txt b/2019/inputs/day_16.txt
deleted file mode 100644
index 357965c..0000000
--- a/2019/inputs/day_16.txt
+++ /dev/null
@@ -1 +0,0 @@
-59723517898690342336085619027921111260000667417052529433894092649779685557557996383085708903241535436786723718804155370155263736632861535632645335233170435646844328735934063129720822438983948765830873108060969395372667944081201020154126736565212455403582565814037568332106043336657972906297306993727714730061029321153984390658949013821918352341503629705587666779681013358053312990709423156110291835794179056432958537796855287734217125615700199928915524410743382078079059706420865085147514027374485354815106354367548002650415494525590292210440827027951624280115914909910917047084328588833201558964370296841789611989343040407348115608623432403085634084
diff --git a/2019/inputs/day_17.txt b/2019/inputs/day_17.txt
deleted file mode 100644
index 49131d4..0000000
--- a/2019/inputs/day_17.txt
+++ /dev/null
@@ -1 +0,0 @@
-1,330,331,332,109,3974,1102,1182,1,15,1101,1475,0,24,1001,0,0,570,1006,570,36,101,0,571,0,1001,570,-1,570,1001,24,1,24,1106,0,18,1008,571,0,571,1001,15,1,15,1008,15,1475,570,1006,570,14,21102,1,58,0,1105,1,786,1006,332,62,99,21101,333,0,1,21102,73,1,0,1105,1,579,1102,0,1,572,1101,0,0,573,3,574,101,1,573,573,1007,574,65,570,1005,570,151,107,67,574,570,1005,570,151,1001,574,-64,574,1002,574,-1,574,1001,572,1,572,1007,572,11,570,1006,570,165,101,1182,572,127,1002,574,1,0,3,574,101,1,573,573,1008,574,10,570,1005,570,189,1008,574,44,570,1006,570,158,1105,1,81,21102,340,1,1,1105,1,177,21101,0,477,1,1106,0,177,21102,1,514,1,21101,0,176,0,1106,0,579,99,21102,184,1,0,1105,1,579,4,574,104,10,99,1007,573,22,570,1006,570,165,1002,572,1,1182,21101,0,375,1,21101,0,211,0,1105,1,579,21101,1182,11,1,21102,1,222,0,1106,0,979,21102,1,388,1,21102,1,233,0,1106,0,579,21101,1182,22,1,21101,0,244,0,1105,1,979,21101,0,401,1,21102,1,255,0,1106,0,579,21101,1182,33,1,21102,1,266,0,1106,0,979,21102,414,1,1,21102,277,1,0,1105,1,579,3,575,1008,575,89,570,1008,575,121,575,1,575,570,575,3,574,1008,574,10,570,1006,570,291,104,10,21102,1182,1,1,21102,1,313,0,1106,0,622,1005,575,327,1101,1,0,575,21101,327,0,0,1105,1,786,4,438,99,0,1,1,6,77,97,105,110,58,10,33,10,69,120,112,101,99,116,101,100,32,102,117,110,99,116,105,111,110,32,110,97,109,101,32,98,117,116,32,103,111,116,58,32,0,12,70,117,110,99,116,105,111,110,32,65,58,10,12,70,117,110,99,116,105,111,110,32,66,58,10,12,70,117,110,99,116,105,111,110,32,67,58,10,23,67,111,110,116,105,110,117,111,117,115,32,118,105,100,101,111,32,102,101,101,100,63,10,0,37,10,69,120,112,101,99,116,101,100,32,82,44,32,76,44,32,111,114,32,100,105,115,116,97,110,99,101,32,98,117,116,32,103,111,116,58,32,36,10,69,120,112,101,99,116,101,100,32,99,111,109,109,97,32,111,114,32,110,101,119,108,105,110,101,32,98,117,116,32,103,111,116,58,32,43,10,68,101,102,105,110,105,116,105,111,110,115,32,109,97,121,32,98,101,32,97,116,32,109,111,115,116,32,50,48,32,99,104,97,114,97,99,116,101,114,115,33,10,94,62,118,60,0,1,0,-1,-1,0,1,0,0,0,0,0,0,1,50,26,0,109,4,1201,-3,0,587,20102,1,0,-1,22101,1,-3,-3,21102,0,1,-2,2208,-2,-1,570,1005,570,617,2201,-3,-2,609,4,0,21201,-2,1,-2,1106,0,597,109,-4,2106,0,0,109,5,2101,0,-4,630,20101,0,0,-2,22101,1,-4,-4,21101,0,0,-3,2208,-3,-2,570,1005,570,781,2201,-4,-3,653,20101,0,0,-1,1208,-1,-4,570,1005,570,709,1208,-1,-5,570,1005,570,734,1207,-1,0,570,1005,570,759,1206,-1,774,1001,578,562,684,1,0,576,576,1001,578,566,692,1,0,577,577,21102,702,1,0,1106,0,786,21201,-1,-1,-1,1106,0,676,1001,578,1,578,1008,578,4,570,1006,570,724,1001,578,-4,578,21102,731,1,0,1105,1,786,1106,0,774,1001,578,-1,578,1008,578,-1,570,1006,570,749,1001,578,4,578,21101,756,0,0,1105,1,786,1106,0,774,21202,-1,-11,1,22101,1182,1,1,21102,774,1,0,1105,1,622,21201,-3,1,-3,1106,0,640,109,-5,2105,1,0,109,7,1005,575,802,20102,1,576,-6,20101,0,577,-5,1105,1,814,21101,0,0,-1,21101,0,0,-5,21101,0,0,-6,20208,-6,576,-2,208,-5,577,570,22002,570,-2,-2,21202,-5,51,-3,22201,-6,-3,-3,22101,1475,-3,-3,2102,1,-3,843,1005,0,863,21202,-2,42,-4,22101,46,-4,-4,1206,-2,924,21102,1,1,-1,1105,1,924,1205,-2,873,21102,1,35,-4,1106,0,924,1202,-3,1,878,1008,0,1,570,1006,570,916,1001,374,1,374,1201,-3,0,895,1101,0,2,0,2101,0,-3,902,1001,438,0,438,2202,-6,-5,570,1,570,374,570,1,570,438,438,1001,578,558,921,21002,0,1,-4,1006,575,959,204,-4,22101,1,-6,-6,1208,-6,51,570,1006,570,814,104,10,22101,1,-5,-5,1208,-5,49,570,1006,570,810,104,10,1206,-1,974,99,1206,-1,974,1102,1,1,575,21101,973,0,0,1105,1,786,99,109,-7,2105,1,0,109,6,21101,0,0,-4,21102,0,1,-3,203,-2,22101,1,-3,-3,21208,-2,82,-1,1205,-1,1030,21208,-2,76,-1,1205,-1,1037,21207,-2,48,-1,1205,-1,1124,22107,57,-2,-1,1205,-1,1124,21201,-2,-48,-2,1105,1,1041,21102,1,-4,-2,1106,0,1041,21101,0,-5,-2,21201,-4,1,-4,21207,-4,11,-1,1206,-1,1138,2201,-5,-4,1059,2102,1,-2,0,203,-2,22101,1,-3,-3,21207,-2,48,-1,1205,-1,1107,22107,57,-2,-1,1205,-1,1107,21201,-2,-48,-2,2201,-5,-4,1090,20102,10,0,-1,22201,-2,-1,-2,2201,-5,-4,1103,2102,1,-2,0,1106,0,1060,21208,-2,10,-1,1205,-1,1162,21208,-2,44,-1,1206,-1,1131,1106,0,989,21101,0,439,1,1105,1,1150,21101,477,0,1,1106,0,1150,21102,1,514,1,21102,1,1149,0,1105,1,579,99,21101,1157,0,0,1106,0,579,204,-2,104,10,99,21207,-3,22,-1,1206,-1,1138,2101,0,-5,1176,2102,1,-4,0,109,-6,2106,0,0,32,5,46,1,3,1,46,1,3,1,46,1,3,1,46,1,3,1,46,1,3,1,40,11,40,1,5,1,44,1,5,1,44,1,5,1,44,1,5,1,44,1,5,1,40,11,40,1,3,1,46,1,3,1,46,1,3,1,46,1,3,9,38,1,11,1,26,1,11,1,11,1,26,1,11,1,11,1,26,1,11,5,7,1,26,1,15,1,7,1,26,1,15,1,7,1,26,1,15,1,7,1,26,1,11,7,5,1,26,1,11,1,3,1,1,1,5,1,26,1,9,13,1,1,3,13,10,1,9,1,1,1,3,1,1,1,3,1,1,1,3,1,22,5,5,1,1,13,3,1,26,1,5,1,5,1,1,1,3,1,5,1,26,1,5,1,5,7,5,1,26,1,5,1,7,1,9,1,26,1,5,1,7,1,9,1,26,1,5,1,7,1,9,1,26,1,5,1,7,11,26,1,5,1,34,11,5,1,34,1,15,1,34,1,5,9,1,9,26,1,5,1,7,1,9,1,26,1,5,1,7,1,9,1,26,1,5,1,7,1,9,1,22,11,7,1,9,1,22,1,3,1,13,1,9,1,22,1,3,1,13,1,9,1,22,1,3,1,13,1,9,1,22,1,3,1,13,1,9,1,22,1,3,1,13,1,9,1,22,5,13,11,22
diff --git a/2019/inputs/day_18.txt b/2019/inputs/day_18.txt
deleted file mode 100644
index 3cb4307..0000000
--- a/2019/inputs/day_18.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-#################################################################################
-#.............#.....#.................#.#.....#...#.......#...................#a#
-#.#####.#######.#.###.#########.#####.#.#.###Y###.#.#####.#.#####.###########.#.#
-#.#...#.#.....#.#..c#.........#...#.#...#...#.#...#.#.#...#.#.#...#...#...#.....#
-#.#.###.#.###.#.###.#.###########.#.###.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#######
-#.#...#...#.#...#.#...#...........#.#...#.#.#...#.#.#.#.#.#.#.#...#.#.#.#.#.....#
-#.#.#.#####.#####.#####.###.#######.#.###.#.#######.#.#.###.#.###.#.#.#.#.#.###.#
-#.#.#.............#.#...#.#.#..e..#.....#.#...........#...#.#...#...#...#.....#.#
-#.#########.#####.#.#.###.#.#.###.#####.#.###############.#T#.#.###############.#
-#...#..k....#.....#.#.Z.#...#...#.....#.#.........#.#.....#.#.#.....#.L.....#...#
-###.#.#.#######.###.###.#######.#####.#.#########.#.#.###.#.#.###.#.###.###.#.###
-#...#.#.#.....#.#...#...#.....#.....#.#.#...#...#.#.#.#...#.#.#...#...#.#...#...#
-#.###.#.#.###.#.#.###.###.###.#####.#.#.#.#.#.#.#.#.#.###.#.###.#####.#.#.#####.#
-#.#...#.#.#...#.#...#.....#.#.....#.#.#.#.#...#...#.#...#.#.#...#.#...#.#.#.....#
-#.###.#.#.#.###.###.#######.#.#####.#.#.#.#########.###.###.#.###.#.###.#.#.###.#
-#...#.#.#.#...#...#.........#.#.....#.#.#.............#.......#...#.#...#.#...#.#
-###.#.###.###.###.###.#.#####.#.#####.###############.#########.#.#.###.#.###.#.#
-#.....#...#...#.J...#.#.#.....#.....#...#...........#.#...#...#.#.......#...#.#.#
-#######.###.#######.#.###.#####.#######.#########.#.#.###.#.#.#########.#####.#.#
-#.......#.#...#...#...#...#...#.#.......#.....O.#.#.#.#...#.#.......#...#.....#s#
-#.#######.###.#.#.#####.###.#.#.#.#######.#####.#.#.#.#.###.#####.#.#.###.#####.#
-#...#...#...#...#...#.#.#...#...#.......#.....#.#.#.#.#...#.#...#.#.#...#...#...#
-###.#.#.#.#########.#.#.#.#######.#####.#.#####.#.###.###.#.###.###.#.#####.#.###
-#.#...#.#.........#...#...#....d#.....#.#.#.....#.#...#...#.#.#...#.#.#.....#.#.#
-#.#####.#######.#######.###.###.#####.#.#.#.#####.#.###.#.#.#.###.#.#.#.#####.#.#
-#...#.#.......#.......#...#.#...#.....#.#.#.....#.......#.#.....#.#.#.#.#.......#
-#.#.#.#######.#.#.#####.###.#.#####.###.#.#####.#############.###.#.#.#.#######.#
-#.#...#.....#.#.#...#...#...#.....#...#.#.#...#.#...........#.#...#.#.#.#...#.#.#
-#.###.###.#.#.#.###.#.###.#######.#####.#.###.#.#.#########.#.#.###.#.#.#.#.#.#.#
-#...#.....#.#.#...#...#...#.......#.....#...#.#.#.....#...#...#...#.#.#...#.#...#
-#.#.#######.#.###.#####.###.#######.#######.#.#.#####.###.#######.#.#####.#.#.###
-#.#.#.....#.#.#.#.#.#...#.#.#...#...#...#...#.#.....#...#.....#...#.....#.#.#w#.#
-#.#.#.###.#.#.#.#.#.#.###.#.#.#.###.#.#.#.###.#.###.###.#.###.#.###.###.###.#.#.#
-#.#.#.#.#.#.#.#.#.#.#.#m..#...#...#...#.#.#...#...#...#.#...#.#.#.....#.#...#.#.#
-###.#.#.#.###W#.#.#.#.#.#########.#####.#.#.#.###.#####.###.#.#.#######.#.###.#.#
-#...#...#.#...#.....#.#.......#...#...#.#.#.#.#.#.....#.....#.#.........#.#.#...#
-#.###.###.#.###.#####.#.###.###.###.#.#.#.#.#.#.#####.#######.###########.#.###.#
-#.#...#...#.#...#.S...#...#.....#...#.#.#...#.....#.#.........#...#...#...#.....#
-#.#.###.###.#####.#######.#######.###.#.#########.#.###########.#.#.#.#.###.#####
-#.....#...........#.......F.......#..................f..........#...#...#.......#
-#######################################.@.#######################################
-#.....#.#...........#.....#.........................#...#.....#.M.......#.....#.#
-###P#.#.#.#######.###.###.#.#######.###.#.#########.#.#.#.###.###.#####.###.#.#.#
-#...#...#...#.#...#.....#.#.#.......#...#...#.........#...#.......#...#.....#.#.#
-#.#.#######.#.#.###.#####.#.#.#######.#####.###############.#########.#######.#.#
-#.#.#.....#.#.#.#...#...#.#.#.#.........#...#.......#...#.....#.....#.#.......#.#
-#.###.###.#.#.#.#.###.#.#.#.#.###########.###.#####.#.#.#######.###.#.#.#######.#
-#...#.#.#.#...#.#.#...#...#.#...........#...#...#.#...#.......#.#.#.#.#.........#
-#.#.#.#.#.#.###.#.#.#####.#######.#####.###.###.#.###########.#.#.#.#.#.#######.#
-#.#.#...#...#...#.#r#.....#.....#.....#.#...#.#.#.......#...#.....#.#...#.....#.#
-#.#.###.#####.###.#.#######.###.#####.#.#.#.#.#.###.#####.#.#######.#.###.###.#.#
-#.#...#.#...#...#.#.........#...#...#.#.#.#...#...#.#.....#.#......p#...#.#.#.#.#
-###.#.#.#.#.###.#.###########.###.#.#.#.#.###.###.#.#.#####.#.###.#######.#.#.###
-#...#.#.#.#...#.......#.....#.#...#...#.#...#.#...#.....#...#.#...#.K...#.#.#...#
-#.#####.#.###.#######.#.###Q#.#.#######.###.#.#.#####.###.###.#.###.###.#.#.###.#
-#.....#...#...#.#...#.#.#.#...#...#.....#...#.#.....#.#...#...#.#...#.#..j#.#...#
-#.###.#####.###.#.#.###.#.#########.###.#.#########.###.#.#.###.#.###.#####.#.###
-#...#.#.....#...#.#.B...#...#...#...#...#.#.......#.....#.#...#.#...........#.R.#
-#.###.#.#######.#.#######.#.#.#.#.###.###.#.#.###.#######.###.###.#############.#
-#.#...#.......#.#n....#...#.#.#...#...#.#...#...#.....#...#.#.....#..u..#.....#.#
-###.#.#######.#.#####.#.###.#.#####.###.#.#####.###.###.###.###.###.###.#.###.#.#
-#...#.#...#...#.....#.#.#...#...#.#...#.#...#...#...#...#...#.#.#...#...#.#...#.#
-#.#####.#.#.###.#.#####.#.###.#.#.###.#.#####.#######.#####.#.###.###.###.###.#.#
-#...#...#.#.#...#.......#.#...#.#...#...#.....#.......#.....#.U...#.#...#...#...#
-#.#.#.###.#.#.#########.#.#####.###.###.#.#.###.#######.###########.###X#.#.###.#
-#.#..l#...#.#...#.......#.....#...#...#.#.#o#...#.#.....#...#......x....#.#.#...#
-#.#####C###.#.###.###########.###.#.###.#.###.###.#.###.#.#.#I#############.#.###
-#.....#...#.#.#...#...#.....#.#...#.#...#.#...#.....#...#.#...#v......G.#...#..q#
-###.#####.#.###.###.#.#.###.#.#.###.#.###.#.###.#####.#.#.#####.#######.#.#####.#
-#.#y#...#.#...#.#...#.#...#.#...#...#...#.#.#...#.....#.#..i..#...#.....#...#...#
-#.#.#.#.#.###.#.#.###.#.#.#.#####.#.###.#.#.###.#.###########H#.#.#.#####.#.#.###
-#...#.#.#...#.#.....#.#.#.#.#...#.#.....#.#...#.#...........#.#.#.#g..#...#.#...#
-#.###.#.###A#.#######.#.#.#.#.###.#######.###.#.#########.#.#.#.#.###.#####.###.#
-#.#...#.....#.........#.#.#.#.#...#.....#...#.#.......#...#.#.#.#.#.#.#...#...#.#
-###.#####################.#.#.#.#####.###.#.#.#########.###.#.###.#.#.#.#.###.#.#
-#...#.......#.............#..t#.#...#...#.#.#.#.......#.#...#...#.#.#.N.#.....#.#
-#.###.#####.#.#########.#######.#.#D#.#.#.#.#.#.#####.#.#.#####.#.#.###########.#
-#.#...#...#..z#.#.......#.....#...#.#.#.#.#.#...#...#...#.#.#..h#.#.....#......b#
-#.#.###.#.#####.#.#######.###.#####.###.#.#.#####.#.#####.#.#.###.#.###.#.#######
-#.......#.......#...........#...........#.#.....E.#.........#...V.#...#.........#
-#################################################################################
diff --git a/2019/inputs/day_18_2.txt b/2019/inputs/day_18_2.txt
deleted file mode 100644
index 8fda759..0000000
--- a/2019/inputs/day_18_2.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-#################################################################################
-#.............#.....#.................#.#.....#...#.......#...................#a#
-#.#####.#######.#.###.#########.#####.#.#.###Y###.#.#####.#.#####.###########.#.#
-#.#...#.#.....#.#..c#.........#...#.#...#...#.#...#.#.#...#.#.#...#...#...#.....#
-#.#.###.#.###.#.###.#.###########.#.###.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#######
-#.#...#...#.#...#.#...#...........#.#...#.#.#...#.#.#.#.#.#.#.#...#.#.#.#.#.....#
-#.#.#.#####.#####.#####.###.#######.#.###.#.#######.#.#.###.#.###.#.#.#.#.#.###.#
-#.#.#.............#.#...#.#.#..e..#.....#.#...........#...#.#...#...#...#.....#.#
-#.#########.#####.#.#.###.#.#.###.#####.#.###############.#T#.#.###############.#
-#...#..k....#.....#.#.Z.#...#...#.....#.#.........#.#.....#.#.#.....#.L.....#...#
-###.#.#.#######.###.###.#######.#####.#.#########.#.#.###.#.#.###.#.###.###.#.###
-#...#.#.#.....#.#...#...#.....#.....#.#.#...#...#.#.#.#...#.#.#...#...#.#...#...#
-#.###.#.#.###.#.#.###.###.###.#####.#.#.#.#.#.#.#.#.#.###.#.###.#####.#.#.#####.#
-#.#...#.#.#...#.#...#.....#.#.....#.#.#.#.#...#...#.#...#.#.#...#.#...#.#.#.....#
-#.###.#.#.#.###.###.#######.#.#####.#.#.#.#########.###.###.#.###.#.###.#.#.###.#
-#...#.#.#.#...#...#.........#.#.....#.#.#.............#.......#...#.#...#.#...#.#
-###.#.###.###.###.###.#.#####.#.#####.###############.#########.#.#.###.#.###.#.#
-#.....#...#...#.J...#.#.#.....#.....#...#...........#.#...#...#.#.......#...#.#.#
-#######.###.#######.#.###.#####.#######.#########.#.#.###.#.#.#########.#####.#.#
-#.......#.#...#...#...#...#...#.#.......#.....O.#.#.#.#...#.#.......#...#.....#s#
-#.#######.###.#.#.#####.###.#.#.#.#######.#####.#.#.#.#.###.#####.#.#.###.#####.#
-#...#...#...#...#...#.#.#...#...#.......#.....#.#.#.#.#...#.#...#.#.#...#...#...#
-###.#.#.#.#########.#.#.#.#######.#####.#.#####.#.###.###.#.###.###.#.#####.#.###
-#.#...#.#.........#...#...#....d#.....#.#.#.....#.#...#...#.#.#...#.#.#.....#.#.#
-#.#####.#######.#######.###.###.#####.#.#.#.#####.#.###.#.#.#.###.#.#.#.#####.#.#
-#...#.#.......#.......#...#.#...#.....#.#.#.....#.......#.#.....#.#.#.#.#.......#
-#.#.#.#######.#.#.#####.###.#.#####.###.#.#####.#############.###.#.#.#.#######.#
-#.#...#.....#.#.#...#...#...#.....#...#.#.#...#.#...........#.#...#.#.#.#...#.#.#
-#.###.###.#.#.#.###.#.###.#######.#####.#.###.#.#.#########.#.#.###.#.#.#.#.#.#.#
-#...#.....#.#.#...#...#...#.......#.....#...#.#.#.....#...#...#...#.#.#...#.#...#
-#.#.#######.#.###.#####.###.#######.#######.#.#.#####.###.#######.#.#####.#.#.###
-#.#.#.....#.#.#.#.#.#...#.#.#...#...#...#...#.#.....#...#.....#...#.....#.#.#w#.#
-#.#.#.###.#.#.#.#.#.#.###.#.#.#.###.#.#.#.###.#.###.###.#.###.#.###.###.###.#.#.#
-#.#.#.#.#.#.#.#.#.#.#.#m..#...#...#...#.#.#...#...#...#.#...#.#.#.....#.#...#.#.#
-###.#.#.#.###W#.#.#.#.#.#########.#####.#.#.#.###.#####.###.#.#.#######.#.###.#.#
-#...#...#.#...#.....#.#.......#...#...#.#.#.#.#.#.....#.....#.#.........#.#.#...#
-#.###.###.#.###.#####.#.###.###.###.#.#.#.#.#.#.#####.#######.###########.#.###.#
-#.#...#...#.#...#.S...#...#.....#...#.#.#...#.....#.#.........#...#...#...#.....#
-#.#.###.###.#####.#######.#######.###.#.#########.#.###########.#.#.#.#.###.#####
-#.....#...........#.......F.......#....@#@...........f..........#...#...#.......#
-#################################################################################
-#.....#.#...........#.....#............@#@..........#...#.....#.M.......#.....#.#
-###P#.#.#.#######.###.###.#.#######.###.#.#########.#.#.#.###.###.#####.###.#.#.#
-#...#...#...#.#...#.....#.#.#.......#...#...#.........#...#.......#...#.....#.#.#
-#.#.#######.#.#.###.#####.#.#.#######.#####.###############.#########.#######.#.#
-#.#.#.....#.#.#.#...#...#.#.#.#.........#...#.......#...#.....#.....#.#.......#.#
-#.###.###.#.#.#.#.###.#.#.#.#.###########.###.#####.#.#.#######.###.#.#.#######.#
-#...#.#.#.#...#.#.#...#...#.#...........#...#...#.#...#.......#.#.#.#.#.........#
-#.#.#.#.#.#.###.#.#.#####.#######.#####.###.###.#.###########.#.#.#.#.#.#######.#
-#.#.#...#...#...#.#r#.....#.....#.....#.#...#.#.#.......#...#.....#.#...#.....#.#
-#.#.###.#####.###.#.#######.###.#####.#.#.#.#.#.###.#####.#.#######.#.###.###.#.#
-#.#...#.#...#...#.#.........#...#...#.#.#.#...#...#.#.....#.#......p#...#.#.#.#.#
-###.#.#.#.#.###.#.###########.###.#.#.#.#.###.###.#.#.#####.#.###.#######.#.#.###
-#...#.#.#.#...#.......#.....#.#...#...#.#...#.#...#.....#...#.#...#.K...#.#.#...#
-#.#####.#.###.#######.#.###Q#.#.#######.###.#.#.#####.###.###.#.###.###.#.#.###.#
-#.....#...#...#.#...#.#.#.#...#...#.....#...#.#.....#.#...#...#.#...#.#..j#.#...#
-#.###.#####.###.#.#.###.#.#########.###.#.#########.###.#.#.###.#.###.#####.#.###
-#...#.#.....#...#.#.B...#...#...#...#...#.#.......#.....#.#...#.#...........#.R.#
-#.###.#.#######.#.#######.#.#.#.#.###.###.#.#.###.#######.###.###.#############.#
-#.#...#.......#.#n....#...#.#.#...#...#.#...#...#.....#...#.#.....#..u..#.....#.#
-###.#.#######.#.#####.#.###.#.#####.###.#.#####.###.###.###.###.###.###.#.###.#.#
-#...#.#...#...#.....#.#.#...#...#.#...#.#...#...#...#...#...#.#.#...#...#.#...#.#
-#.#####.#.#.###.#.#####.#.###.#.#.###.#.#####.#######.#####.#.###.###.###.###.#.#
-#...#...#.#.#...#.......#.#...#.#...#...#.....#.......#.....#.U...#.#...#...#...#
-#.#.#.###.#.#.#########.#.#####.###.###.#.#.###.#######.###########.###X#.#.###.#
-#.#..l#...#.#...#.......#.....#...#...#.#.#o#...#.#.....#...#......x....#.#.#...#
-#.#####C###.#.###.###########.###.#.###.#.###.###.#.###.#.#.#I#############.#.###
-#.....#...#.#.#...#...#.....#.#...#.#...#.#...#.....#...#.#...#v......G.#...#..q#
-###.#####.#.###.###.#.#.###.#.#.###.#.###.#.###.#####.#.#.#####.#######.#.#####.#
-#.#y#...#.#...#.#...#.#...#.#...#...#...#.#.#...#.....#.#..i..#...#.....#...#...#
-#.#.#.#.#.###.#.#.###.#.#.#.#####.#.###.#.#.###.#.###########H#.#.#.#####.#.#.###
-#...#.#.#...#.#.....#.#.#.#.#...#.#.....#.#...#.#...........#.#.#.#g..#...#.#...#
-#.###.#.###A#.#######.#.#.#.#.###.#######.###.#.#########.#.#.#.#.###.#####.###.#
-#.#...#.....#.........#.#.#.#.#...#.....#...#.#.......#...#.#.#.#.#.#.#...#...#.#
-###.#####################.#.#.#.#####.###.#.#.#########.###.#.###.#.#.#.#.###.#.#
-#...#.......#.............#..t#.#...#...#.#.#.#.......#.#...#...#.#.#.N.#.....#.#
-#.###.#####.#.#########.#######.#.#D#.#.#.#.#.#.#####.#.#.#####.#.#.###########.#
-#.#...#...#..z#.#.......#.....#...#.#.#.#.#.#...#...#...#.#.#..h#.#.....#......b#
-#.#.###.#.#####.#.#######.###.#####.###.#.#.#####.#.#####.#.#.###.#.###.#.#######
-#.......#.......#...........#...........#.#.....E.#.........#...V.#...#.........#
-#################################################################################
diff --git a/2019/inputs/day_19.txt b/2019/inputs/day_19.txt
deleted file mode 100644
index e85881e..0000000
--- a/2019/inputs/day_19.txt
+++ /dev/null
@@ -1 +0,0 @@
-109,424,203,1,21102,11,1,0,1106,0,282,21101,0,18,0,1106,0,259,1201,1,0,221,203,1,21102,1,31,0,1106,0,282,21101,0,38,0,1106,0,259,20102,1,23,2,21202,1,1,3,21101,1,0,1,21101,0,57,0,1105,1,303,2101,0,1,222,20101,0,221,3,21001,221,0,2,21102,1,259,1,21101,0,80,0,1105,1,225,21101,185,0,2,21102,91,1,0,1106,0,303,1202,1,1,223,21001,222,0,4,21102,259,1,3,21101,225,0,2,21102,1,225,1,21101,0,118,0,1106,0,225,20102,1,222,3,21102,1,131,2,21101,133,0,0,1106,0,303,21202,1,-1,1,22001,223,1,1,21101,148,0,0,1105,1,259,2101,0,1,223,21002,221,1,4,21002,222,1,3,21101,0,16,2,1001,132,-2,224,1002,224,2,224,1001,224,3,224,1002,132,-1,132,1,224,132,224,21001,224,1,1,21101,0,195,0,106,0,109,20207,1,223,2,20101,0,23,1,21102,1,-1,3,21101,0,214,0,1105,1,303,22101,1,1,1,204,1,99,0,0,0,0,109,5,1201,-4,0,249,22101,0,-3,1,22101,0,-2,2,21201,-1,0,3,21101,0,250,0,1106,0,225,21201,1,0,-4,109,-5,2106,0,0,109,3,22107,0,-2,-1,21202,-1,2,-1,21201,-1,-1,-1,22202,-1,-2,-2,109,-3,2106,0,0,109,3,21207,-2,0,-1,1206,-1,294,104,0,99,22102,1,-2,-2,109,-3,2105,1,0,109,5,22207,-3,-4,-1,1206,-1,346,22201,-4,-3,-4,21202,-3,-1,-1,22201,-4,-1,2,21202,2,-1,-1,22201,-4,-1,1,21201,-2,0,3,21101,343,0,0,1106,0,303,1105,1,415,22207,-2,-3,-1,1206,-1,387,22201,-3,-2,-3,21202,-2,-1,-1,22201,-3,-1,3,21202,3,-1,-1,22201,-3,-1,2,22101,0,-4,1,21102,384,1,0,1106,0,303,1105,1,415,21202,-4,-1,-4,22201,-4,-3,-4,22202,-3,-2,-2,22202,-2,-4,-4,22202,-3,-2,-3,21202,-4,-1,-2,22201,-3,-2,1,21201,1,0,-4,109,-5,2106,0,0
diff --git a/2019/inputs/day_2.txt b/2019/inputs/day_2.txt
deleted file mode 100644
index dd34cff..0000000
--- a/2019/inputs/day_2.txt
+++ /dev/null
@@ -1 +0,0 @@
-1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,9,1,19,1,19,5,23,1,23,6,27,2,9,27,31,1,5,31,35,1,35,10,39,1,39,10,43,2,43,9,47,1,6,47,51,2,51,6,55,1,5,55,59,2,59,10,63,1,9,63,67,1,9,67,71,2,71,6,75,1,5,75,79,1,5,79,83,1,9,83,87,2,87,10,91,2,10,91,95,1,95,9,99,2,99,9,103,2,10,103,107,2,9,107,111,1,111,5,115,1,115,2,119,1,119,6,0,99,2,0,14,0
diff --git a/2019/inputs/day_20.txt b/2019/inputs/day_20.txt
deleted file mode 100644
index 09d6330..0000000
--- a/2019/inputs/day_20.txt
+++ /dev/null
@@ -1,113 +0,0 @@
- K Z V U I F
- Q T Y Y E E
- ###################################.#####.###.###########.#####.#.#####################################
- #.......#.#.............#.........#.#.......#.#.#.........#.....#...#...#...........#...#.....#.#.....#
- ###.#####.###.###.###.###########.#.###.#####.#.###.#.#.#.###.###.###.#####.#######.###.#####.#.###.###
- #.#...#.#.#.#.#.#.#.#.....#...........#.....#.#...#.#.#.#...#.#.#.#.....#.#.#...#.#.#...#.#.#.....#...#
- #.#.###.#.#.###.###.#.#########.###.#######.#.#.#.#######.#.#.#.#.#.###.#.#.#.###.#####.#.#.#.#####.###
- #.....#...#...............#.#.#.#.#.#.....#.#.#.#...#.....#.#.#.#.#...#.....#.#.#.........#...#.#...#.#
- #.#######.###########.###.#.#.###.#.###.#.#.#.#.###.###.###.#.#.#.#.###.#.###.#.#.#.#######.###.###.#.#
- #...#.......#...#.#...#...#...#.#.#.#...#...#.....#.#.#.#...#...#...#...#.........#.#.#.#...#.......#.#
- #.#######.#.###.#.#######.###.#.#.#.#.#.###.###.#####.#####.###.#.#####.#####.#.#.###.#.###.#.#######.#
- #.#.#...#.#...#.......#.......#.#...#.#...#.#.#...#.#.......#...#.#.........#.#.#...............#.....#
- #.#.#.#######.#####.#####.###.#.###.#.#####.#.#.###.#####.###.#####.###.###########.###############.###
- #.#...#...#.......#...#...#.#.......#.....#.#.....#.#.......#.#...#.#.#.#.......#.......#...#...#.#...#
- #.###.###.#####.#.###.#####.#####.#.###.#######.#.#.#######.#.#.#####.#.#.###########.#####.###.#.#.###
- #.#.#.#...#...#.#.#...#.#.#.#.#.#.#.#...#.......#.#.#.#.....#.....#...............#...#.#...#.........#
- #.#.#.#.#####.#.#####.#.#.#.#.#.###.#.#####.###.###.#.#####.#.#######.#.#######.#######.#.#.###.#####.#
- #.......#.#.#...#.#...............#.#...#.#.#.......#...#...#.......#.#.#.#.#...#.#.....#.#.#...#.#...#
- #.#######.#.###.#.#.###.#.#.#.###.#.###.#.###.#.###.#.###.#.#.#.#######.#.#.#####.#.#######.#.###.###.#
- #.#.#.#.#.#.......#.#.#.#.#.#.#.#.#.#...#...#.#.#.#.#.....#.#.#.#.#.#...#.......#.#.#.#...#.#.#...#.#.#
- #.#.#.#.#.#####.#####.#.#####.#.#.#.#.###.#.#.###.#####.#####.#.#.#.#.#####.#.###.#.#.#.###.#.###.#.###
- #.#.#.#.#.#.....#.#.....#.......#.#.#.#...#.#...#...#.......#.#.#.#.........#.#...#.......#.#.#.#.#.#.#
- #.#.#.#.#.#.###.#.#.#####.###.#.#.#.#.#.###.#.###.#.###.#######.#.#.###.###.#####.#.#.#.###.#.#.#.#.#.#
- #.......#.#.#.#.#.#.#...#.#.#.#.#...#...#...#...#.#.#.....#.#...#...#...#.......#...#.#...#.#.#.#...#.#
- #####.###.#.#.###.#####.###.###.###.#####.#####.#.#.#.#####.#.#.#####.#######.#####.#######.#.#.#.###.#
- #.#...#.........#...#.#.......#...#...#.....#...#.#.#.....#...#.#...........#.#.#.#...#.#.........#...#
- #.###.#.#.#######.#.#.#.#########.#########.#.###.#.#.#.###.#.#########.###.###.#.#.###.###.#######.###
- #.#.....#...#...#.#...#.....#.......#.......#.....#.#.#...#.#.....#.....#.....#...#.#...#.........#...#
- #.###.#.#.#####.###.###.#######.#####.#############.#.#########.###.###########.###.#.#.#.###.#.###.#.#
- #...#.#.#.#.#...#.#.#.....# U N Q W Z N #.......#.#...#...#...#.#.#
- ###.###.###.###.#.#.###.### Y D P L W J #####.#########.#######.###
- #.#.#.#.#...#...#.#...#.#.# #.....#...#...........#.#.#
- #.#.#.#.###.###.#.#.###.#.# ###.#.###.###.###.#####.#.#
- #...................#.#...# #.#.#.........#...#........CB
- #.###.#######.#.###.#.#.#.# #.#.#.###.#####.###.#.#.#.#
- #.#.........#.#...#.....#.# #...#.#.....#...#...#.#.#..AA
- #######.#######.###.#####.# #.#######.#.###.#.#.###.###
- #.....#.......#...#...#...# QJ..#.#...#.#.#.#...#...#.#.#
- ###.#.#.###.###########.### ###.#.#######.###########.#
-YG....#.....#.#.......#......TY #.........#...........#...#
- #.#.#.###########.#.#.##### #.#####.###.#########.#.#.#
- #.#.#.#...#...#...#.#.#...# CB..#.#.......#.#.#.#.....#..DN
- #######.#####.#.#.#####.### ###.#########.#.#.#########
- #.....#...#...#.#.#...#.#.# #...#.........#...#.......#
- #.###.#.#.#.#.#.#.#.#.#.#.# ###.###.#####.#.#.#.#####.#
-SP..#.....#...#...#...#......YG #.......#...#...#.#.#.....#
- ########################### #.#.###.###.#.###.#.#.#####
-NJ....#.................#.#.# KQ..#.#.......#.#...#.#.....#
- #.#.#.#####.#.#.#####.#.#.# ###.###.###.###.#.#.###.#.#
- #.#.#.....#.#.#.#.....#...# #.#...#.#.#.#.#.#.....#.#..IT
- ###.#####.###.#####.#####.# #.#.#####.###.#############
- #.#.....#...#.....#........WE IE..#.#.#.#...............#.#
- #.#.#.#.#.#########.#.###.# #.#.#.#.#.###.###.###.###.#
- #...#.#...#.#.#.#...#.#...# #.#.#...#.#.#...#.#...#.#.#
- #.#######.#.#.#.#####.##### #.#####.#.#.#.#.#####.#.#.#
- #.#.....#.#.........#.#...# #...........#.#.#.#...#....QJ
- #######.###.#.#.###.#####.# #######.#.#######.#.#.###.#
- #.#.....#...#.#.#.........# #.....#.#.#...#.#...#.....#
- #.###.#.#.#######.#.#####.# ###.#########.#.###########
-YV..#...#.#...#.#.#.#.#.....# #.......#.........#.#.....#
- #.#.###.#.#.#.#.#.###.#.### #.#####.###.#####.#.#.#.#.#
- #.....#...#.#...#.#.#.#....QX #.#...#.........#.#...#.#..QP
- ###.###.#######.###.###.#.# #.###.#.###.#####.#.#####.#
- #.#.#.....#.....#.....#.#.# #.#.#.#.#...#.....#...#...#
- #.#####.#######.###.#.##### #.#.#.#####.#.###.###.#.#.#
- #.#...#.#.....#.#.#.#...#..DM FE..#.#...#.#.#.#.......#.#.#
- #.#.#####.#.###.#.#.###.#.# #.#.#.#.#.###############.#
- #.#.......#...#.#.....#...# #.#...#.#.#.....#.......#.#
- #.#.#.#.#.###.#.#####.###.# #######.#.#.#######.#.#####
-QX....#.#.#.#.............#.# #.......#.#.......#.#.....#
- #####.#.#.#.#.#.########### ###.###.#.#.#.###.#.#####.#
- #.#.#.#.#.#.#.#.#.........# GX..#.#.......#.#.#.......#..DM
- #.#.###############.###.#.# #.#.#####.#.###.###.###.#.#
- #.#.#.........#...#...#.#..CS #.....#.#.#.#.#...#.#.#.#.#
- #.#.#######.#####.###.#.### #######.#.###.#.#####.#####
-WE........#.#.#.#.#.#...#...# MX........#.#.........#......CS
- #####.###.#.#.#.#.#.#.##### #####.###.###.#####.###.###
- #...#...............#.#.#.# #.#.....#.#.......#...#...#
- ###.###################.#.# #.#.###########.#.###.#.#.#
- #...............#.#........ME #.#.#.#...#...#.#.#...#.#.#
- #.#.#####.#####.#.#.###.#.# #.#.#####.#######.#.#####.#
-GX..#...#.#.#...........#.#.# #.................#.......#
- #.#.###.#######.###.#####.# J D Z V S I Y #.###.###.#.###.###.#.#.#.#
- #.#.......#.......#.....#.# I N T Y P T V #...#...#.#.#.#.#.#.#.#.#.#
- #.#.#.#########.#.#.#############.#########.###.#.#.#############.###.###########.###.#.#.#.#.#.#####.#
- #.#.#.....#.....#.#...#.......#.....#.......#.....#.#.#.#.#...#...#.........#.....#...#.#.....#...#...#
- #.#############.###.#######.#.#####.#.###.###.#####.#.#.#.###.#.#####.#.#.#####.#.#.#.#.#####.###.#####
- #...........#.....#.....#...#.......#...#.#.#.....#.#.....#.#.......#.#.#...#...#.#.#.#.#.....#.#.....#
- ###.#######.#######.#####.###.#######.#.###.###.#.#.#.###.#.#.#######.#############.#.#######.#.#.###.#
- #.#.....#.#.#.#.......#.#.#.#...#...#.#...#...#.#.#.....#...#.......#.....#.#...#...#...#.......#.#...#
- #.#.#.###.#.#.#.#.###.#.###.###.#.#.###.#.###.#.#########.#####.#.###.#.###.#.#########.#####.#####.#.#
- #...#...#.....#.#.#...#...#.#...#.#...#.#.#.....#.#.#.....#...#.#.#...#.............#.....#.....#...#.#
- #####.###########.#####.###.#.###.#.###.#####.#.#.#.###.#.#.#.###.#.#######.###.#########.#.#.#########
- #.........#.....#.#...........#...#.#...#.#...#.#...#...#.#.#.....#.......#...#.#.....#.#.#.#.....#.#.#
- ###.###.#.###.#####.#.#.#.#.#.#.###.###.#.###.#####.#.#####.#.###.###.#####.#####.#####.#####.#####.#.#
- #...#.#.#.#.........#.#.#.#.#...#...#.....#.....#.......#...#.#.#.#.......#.#.#...#.....#.#.#.........#
- #.#.#.#.###.###.###########.###.#.###.#.#####.#.#.#.#.#.#.#.###.###.#.###.###.###.#.#.#.#.#.#.###.#.#.#
- #.#.#...#...#.....#.........#.#.#...#.#.#.#...#.#.#.#.#.#.#.......#.#...#.#.....#...#.#.#.......#.#.#.#
- #.#.###.#.#.#.#.#.#####.#####.#.###.#.###.###.#####.#######.###.###.#########.###.#######.#.#.#####.#.#
- #.#.#...#.#.#.#.#.#.#.#.#.......#...#...#...#...#.....#.#.....#.#.#.......#...#.....#.#.#.#.#.#.#...#.#
- #.#####.#.#####.###.#.#######.#.#.#.###.###.#.#.###.###.###.#####.#.#.#####.#####.#.#.#.###.#.#.#####.#
- #...#...#.#.....#.#.....#.#...#.#.#.#...#.#...#.#.......#.#.#.#.#...#...........#.#.#...#.#.#.....#.#.#
- ###.###.#########.#####.#.###.#####.#.###.###.#####.#####.#.#.#.#.#######.#######.###.###.#####.#.#.###
- #.....#.#.....................#...#.#.......#.#.....#.....#.....#.#...........#.....#.#.#.#.#...#.#...#
- #.###.#####.#.#.#.###.#.#.#.###.###.###.#.###.#####.###.#.#.#########.###########.###.#.#.#.###.###.###
- #...#...#...#.#.#.#...#.#.#.#.......#.#.#...#.....#.#...#.#.......#.#.........#.............#.........#
- ###.#.#####.#############.#####.#.###.#.###.#####.#.#.###.###.#.#.#.#####.#.###.###.###.###.#.#####.###
- #...#.#.#.#...#.#...#.......#...#.....#.#...#.....#...#.#.#.#.#.#...#.....#.....#.....#...#.#...#.....#
- #.###.#.#.###.#.###.###.#####.#####.#####.###.#########.#.#.#####.#######.#####.###.#####.#.#.###.###.#
- #.#.........#.#.........#.....#.....#.....#.........#.....#.......#...........#...#...#...#.#...#.#...#
- ###################################.###.#######.#.###.###.###.#######.#################################
- N J W Z Z M M T
- D I L W Z X E Y
diff --git a/2019/inputs/day_21.txt b/2019/inputs/day_21.txt
deleted file mode 100644
index cafb613..0000000
--- a/2019/inputs/day_21.txt
+++ /dev/null
@@ -1 +0,0 @@
-109,2050,21102,1,966,1,21101,0,13,0,1106,0,1378,21101,20,0,0,1105,1,1337,21101,27,0,0,1105,1,1279,1208,1,65,748,1005,748,73,1208,1,79,748,1005,748,110,1208,1,78,748,1005,748,132,1208,1,87,748,1005,748,169,1208,1,82,748,1005,748,239,21101,0,1041,1,21102,73,1,0,1106,0,1421,21101,0,78,1,21101,0,1041,2,21101,88,0,0,1106,0,1301,21101,68,0,1,21102,1041,1,2,21102,103,1,0,1106,0,1301,1101,0,1,750,1105,1,298,21101,0,82,1,21101,0,1041,2,21102,1,125,0,1105,1,1301,1102,1,2,750,1105,1,298,21102,79,1,1,21102,1,1041,2,21101,147,0,0,1106,0,1301,21102,1,84,1,21102,1,1041,2,21101,0,162,0,1106,0,1301,1101,0,3,750,1106,0,298,21101,0,65,1,21101,1041,0,2,21101,0,184,0,1106,0,1301,21101,76,0,1,21102,1,1041,2,21101,199,0,0,1106,0,1301,21102,75,1,1,21102,1,1041,2,21101,214,0,0,1105,1,1301,21101,221,0,0,1106,0,1337,21101,10,0,1,21102,1041,1,2,21102,236,1,0,1105,1,1301,1106,0,553,21102,1,85,1,21102,1,1041,2,21101,254,0,0,1105,1,1301,21101,78,0,1,21101,0,1041,2,21102,1,269,0,1106,0,1301,21102,276,1,0,1105,1,1337,21101,10,0,1,21102,1,1041,2,21101,0,291,0,1105,1,1301,1101,1,0,755,1105,1,553,21101,32,0,1,21102,1,1041,2,21102,313,1,0,1106,0,1301,21102,1,320,0,1106,0,1337,21102,327,1,0,1105,1,1279,1202,1,1,749,21102,65,1,2,21101,0,73,3,21102,1,346,0,1106,0,1889,1206,1,367,1007,749,69,748,1005,748,360,1101,0,1,756,1001,749,-64,751,1106,0,406,1008,749,74,748,1006,748,381,1102,1,-1,751,1105,1,406,1008,749,84,748,1006,748,395,1102,1,-2,751,1105,1,406,21102,1100,1,1,21101,0,406,0,1105,1,1421,21101,32,0,1,21102,1,1100,2,21101,421,0,0,1105,1,1301,21102,1,428,0,1106,0,1337,21102,435,1,0,1105,1,1279,2102,1,1,749,1008,749,74,748,1006,748,453,1102,1,-1,752,1106,0,478,1008,749,84,748,1006,748,467,1101,0,-2,752,1105,1,478,21101,1168,0,1,21101,0,478,0,1106,0,1421,21102,485,1,0,1105,1,1337,21102,1,10,1,21101,1168,0,2,21101,0,500,0,1105,1,1301,1007,920,15,748,1005,748,518,21101,0,1209,1,21102,1,518,0,1106,0,1421,1002,920,3,529,1001,529,921,529,101,0,750,0,1001,529,1,537,101,0,751,0,1001,537,1,545,1001,752,0,0,1001,920,1,920,1105,1,13,1005,755,577,1006,756,570,21102,1100,1,1,21101,570,0,0,1105,1,1421,21102,1,987,1,1105,1,581,21101,1001,0,1,21102,1,588,0,1106,0,1378,1101,0,758,593,1001,0,0,753,1006,753,654,21001,753,0,1,21101,610,0,0,1106,0,667,21101,0,0,1,21101,621,0,0,1106,0,1463,1205,1,647,21101,1015,0,1,21101,635,0,0,1106,0,1378,21101,1,0,1,21101,646,0,0,1105,1,1463,99,1001,593,1,593,1106,0,592,1006,755,664,1101,0,0,755,1105,1,647,4,754,99,109,2,1102,1,726,757,21202,-1,1,1,21101,9,0,2,21102,1,697,3,21102,692,1,0,1105,1,1913,109,-2,2105,1,0,109,2,101,0,757,706,1201,-1,0,0,1001,757,1,757,109,-2,2106,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,255,63,95,191,159,223,127,0,155,123,163,249,179,110,200,117,68,60,61,190,197,250,196,186,111,187,99,158,244,217,222,246,94,205,35,54,115,239,218,243,62,241,229,168,79,199,215,178,182,118,43,228,125,203,214,113,231,120,77,153,141,157,253,143,87,102,86,207,213,177,57,181,156,85,78,204,247,174,109,172,248,92,98,53,93,232,69,242,212,237,152,70,216,183,47,49,124,121,116,122,230,114,100,103,201,51,55,84,171,234,254,238,233,76,185,34,50,175,219,140,42,189,136,38,226,169,39,184,198,166,137,220,251,245,202,142,56,139,167,206,126,252,106,107,71,162,235,236,101,108,119,58,173,170,46,221,227,59,154,188,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,73,110,112,117,116,32,105,110,115,116,114,117,99,116,105,111,110,115,58,10,13,10,87,97,108,107,105,110,103,46,46,46,10,10,13,10,82,117,110,110,105,110,103,46,46,46,10,10,25,10,68,105,100,110,39,116,32,109,97,107,101,32,105,116,32,97,99,114,111,115,115,58,10,10,58,73,110,118,97,108,105,100,32,111,112,101,114,97,116,105,111,110,59,32,101,120,112,101,99,116,101,100,32,115,111,109,101,116,104,105,110,103,32,108,105,107,101,32,65,78,68,44,32,79,82,44,32,111,114,32,78,79,84,67,73,110,118,97,108,105,100,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116,59,32,101,120,112,101,99,116,101,100,32,115,111,109,101,116,104,105,110,103,32,108,105,107,101,32,65,44,32,66,44,32,67,44,32,68,44,32,74,44,32,111,114,32,84,40,73,110,118,97,108,105,100,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,59,32,101,120,112,101,99,116,101,100,32,74,32,111,114,32,84,52,79,117,116,32,111,102,32,109,101,109,111,114,121,59,32,97,116,32,109,111,115,116,32,49,53,32,105,110,115,116,114,117,99,116,105,111,110,115,32,99,97,110,32,98,101,32,115,116,111,114,101,100,0,109,1,1005,1262,1270,3,1262,20101,0,1262,0,109,-1,2106,0,0,109,1,21102,1,1288,0,1106,0,1263,21001,1262,0,0,1102,0,1,1262,109,-1,2106,0,0,109,5,21102,1310,1,0,1105,1,1279,22102,1,1,-2,22208,-2,-4,-1,1205,-1,1332,22101,0,-3,1,21101,1332,0,0,1106,0,1421,109,-5,2106,0,0,109,2,21101,1346,0,0,1105,1,1263,21208,1,32,-1,1205,-1,1363,21208,1,9,-1,1205,-1,1363,1105,1,1373,21102,1,1370,0,1106,0,1279,1106,0,1339,109,-2,2105,1,0,109,5,1202,-4,1,1386,20101,0,0,-2,22101,1,-4,-4,21102,0,1,-3,22208,-3,-2,-1,1205,-1,1416,2201,-4,-3,1408,4,0,21201,-3,1,-3,1106,0,1396,109,-5,2106,0,0,109,2,104,10,22102,1,-1,1,21101,0,1436,0,1106,0,1378,104,10,99,109,-2,2105,1,0,109,3,20002,593,753,-1,22202,-1,-2,-1,201,-1,754,754,109,-3,2105,1,0,109,10,21102,5,1,-5,21102,1,1,-4,21102,1,0,-3,1206,-9,1555,21101,3,0,-6,21101,5,0,-7,22208,-7,-5,-8,1206,-8,1507,22208,-6,-4,-8,1206,-8,1507,104,64,1105,1,1529,1205,-6,1527,1201,-7,716,1515,21002,0,-11,-8,21201,-8,46,-8,204,-8,1105,1,1529,104,46,21201,-7,1,-7,21207,-7,22,-8,1205,-8,1488,104,10,21201,-6,-1,-6,21207,-6,0,-8,1206,-8,1484,104,10,21207,-4,1,-8,1206,-8,1569,21102,1,0,-9,1105,1,1689,21208,-5,21,-8,1206,-8,1583,21102,1,1,-9,1106,0,1689,1201,-5,716,1588,21002,0,1,-2,21208,-4,1,-1,22202,-2,-1,-1,1205,-2,1613,21201,-5,0,1,21102,1613,1,0,1105,1,1444,1206,-1,1634,22101,0,-5,1,21101,0,1627,0,1106,0,1694,1206,1,1634,21101,2,0,-3,22107,1,-4,-8,22201,-1,-8,-8,1206,-8,1649,21201,-5,1,-5,1206,-3,1663,21201,-3,-1,-3,21201,-4,1,-4,1106,0,1667,21201,-4,-1,-4,21208,-4,0,-1,1201,-5,716,1676,22002,0,-1,-1,1206,-1,1686,21101,1,0,-4,1105,1,1477,109,-10,2106,0,0,109,11,21102,0,1,-6,21101,0,0,-8,21101,0,0,-7,20208,-6,920,-9,1205,-9,1880,21202,-6,3,-9,1201,-9,921,1724,21002,0,1,-5,1001,1724,1,1733,20101,0,0,-4,21202,-4,1,1,21101,1,0,2,21101,9,0,3,21101,1754,0,0,1105,1,1889,1206,1,1772,2201,-10,-4,1767,1001,1767,716,1767,20102,1,0,-3,1105,1,1790,21208,-4,-1,-9,1206,-9,1786,22101,0,-8,-3,1105,1,1790,22101,0,-7,-3,1001,1733,1,1795,21001,0,0,-2,21208,-2,-1,-9,1206,-9,1812,21201,-8,0,-1,1105,1,1816,22101,0,-7,-1,21208,-5,1,-9,1205,-9,1837,21208,-5,2,-9,1205,-9,1844,21208,-3,0,-1,1106,0,1855,22202,-3,-1,-1,1106,0,1855,22201,-3,-1,-1,22107,0,-1,-1,1106,0,1855,21208,-2,-1,-9,1206,-9,1869,21201,-1,0,-8,1105,1,1873,22101,0,-1,-7,21201,-6,1,-6,1105,1,1708,22102,1,-8,-10,109,-11,2106,0,0,109,7,22207,-6,-5,-3,22207,-4,-6,-2,22201,-3,-2,-1,21208,-1,0,-6,109,-7,2105,1,0,0,109,5,2102,1,-2,1912,21207,-4,0,-1,1206,-1,1930,21102,1,0,-4,22101,0,-4,1,21202,-3,1,2,21102,1,1,3,21102,1949,1,0,1105,1,1954,109,-5,2105,1,0,109,6,21207,-4,1,-1,1206,-1,1977,22207,-5,-3,-1,1206,-1,1977,21202,-5,1,-5,1105,1,2045,22102,1,-5,1,21201,-4,-1,2,21202,-3,2,3,21102,1,1996,0,1105,1,1954,22102,1,1,-5,21102,1,1,-2,22207,-5,-3,-1,1206,-1,2015,21101,0,0,-2,22202,-3,-2,-3,22107,0,-4,-1,1206,-1,2037,21202,-2,1,1,21101,2037,0,0,106,0,1912,21202,-3,-1,-3,22201,-5,-3,-5,109,-6,2106,0,0
diff --git a/2019/inputs/day_22.txt b/2019/inputs/day_22.txt
deleted file mode 100644
index b61e760..0000000
--- a/2019/inputs/day_22.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-deal with increment 34
-deal into new stack
-cut 1712
-deal into new stack
-cut 1984
-deal with increment 62
-deal into new stack
-deal with increment 13
-deal into new stack
-deal with increment 67
-cut -5590
-deal with increment 63
-cut -1086
-deal with increment 52
-cut 7894
-deal with increment 71
-cut -864
-deal into new stack
-cut 239
-deal with increment 17
-cut -7187
-deal with increment 62
-deal into new stack
-cut -7380
-deal with increment 14
-cut 3842
-deal into new stack
-cut -5258
-deal with increment 40
-deal into new stack
-deal with increment 45
-cut -6026
-deal with increment 21
-cut 3600
-deal with increment 56
-cut 2329
-deal into new stack
-deal with increment 13
-cut -2409
-deal with increment 49
-cut 294
-deal into new stack
-cut 4776
-deal with increment 17
-cut 5801
-deal with increment 43
-cut 8999
-deal with increment 46
-cut -8527
-deal with increment 4
-deal into new stack
-cut -6767
-deal into new stack
-deal with increment 33
-cut -532
-deal with increment 29
-deal into new stack
-deal with increment 56
-cut 6867
-deal with increment 70
-cut 4276
-deal into new stack
-cut -5621
-deal with increment 56
-cut -2966
-deal with increment 70
-deal into new stack
-deal with increment 51
-cut -4097
-deal with increment 42
-deal into new stack
-cut -5180
-deal with increment 61
-deal into new stack
-cut 5367
-deal with increment 50
-cut 3191
-deal with increment 75
-cut 915
-deal with increment 72
-cut -3893
-deal with increment 22
-cut -3405
-deal with increment 30
-cut -6509
-deal with increment 31
-cut -7220
-deal with increment 45
-cut 6489
-deal with increment 70
-cut -4047
-deal into new stack
-deal with increment 75
-cut 3980
-deal with increment 10
-cut 9677
-deal into new stack
-deal with increment 45
-cut -6969
-deal into new stack
diff --git a/2019/inputs/day_23.txt b/2019/inputs/day_23.txt
deleted file mode 100644
index e4f8887..0000000
--- a/2019/inputs/day_23.txt
+++ /dev/null
@@ -1 +0,0 @@
-3,62,1001,62,11,10,109,2215,105,1,0,1846,1780,1120,1959,571,2182,1083,631,1485,1306,1157,2153,1654,1592,1454,664,1815,951,2124,794,695,2023,1378,1248,1518,984,1887,2058,823,1019,891,1277,1685,2089,1341,1922,1186,765,1751,1413,602,922,858,1623,1217,1559,1050,1990,734,1720,0,0,0,0,0,0,0,0,0,0,0,0,3,64,1008,64,-1,62,1006,62,88,1006,61,170,1106,0,73,3,65,20101,0,64,1,21001,66,0,2,21101,105,0,0,1105,1,436,1201,1,-1,64,1007,64,0,62,1005,62,73,7,64,67,62,1006,62,73,1002,64,2,133,1,133,68,133,101,0,0,62,1001,133,1,140,8,0,65,63,2,63,62,62,1005,62,73,1002,64,2,161,1,161,68,161,1101,1,0,0,1001,161,1,169,101,0,65,0,1101,0,1,61,1101,0,0,63,7,63,67,62,1006,62,203,1002,63,2,194,1,68,194,194,1006,0,73,1001,63,1,63,1105,1,178,21102,1,210,0,105,1,69,2101,0,1,70,1102,0,1,63,7,63,71,62,1006,62,250,1002,63,2,234,1,72,234,234,4,0,101,1,234,240,4,0,4,70,1001,63,1,63,1105,1,218,1105,1,73,109,4,21101,0,0,-3,21102,0,1,-2,20207,-2,67,-1,1206,-1,293,1202,-2,2,283,101,1,283,283,1,68,283,283,22001,0,-3,-3,21201,-2,1,-2,1106,0,263,22102,1,-3,-3,109,-4,2106,0,0,109,4,21101,0,1,-3,21101,0,0,-2,20207,-2,67,-1,1206,-1,342,1202,-2,2,332,101,1,332,332,1,68,332,332,22002,0,-3,-3,21201,-2,1,-2,1106,0,312,21202,-3,1,-3,109,-4,2106,0,0,109,1,101,1,68,358,21001,0,0,1,101,3,68,366,21001,0,0,2,21102,1,376,0,1106,0,436,22101,0,1,0,109,-1,2106,0,0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,2147483648,4294967296,8589934592,17179869184,34359738368,68719476736,137438953472,274877906944,549755813888,1099511627776,2199023255552,4398046511104,8796093022208,17592186044416,35184372088832,70368744177664,140737488355328,281474976710656,562949953421312,1125899906842624,109,8,21202,-6,10,-5,22207,-7,-5,-5,1205,-5,521,21102,1,0,-4,21102,1,0,-3,21101,0,51,-2,21201,-2,-1,-2,1201,-2,385,471,20102,1,0,-1,21202,-3,2,-3,22207,-7,-1,-5,1205,-5,496,21201,-3,1,-3,22102,-1,-1,-5,22201,-7,-5,-7,22207,-3,-6,-5,1205,-5,515,22102,-1,-6,-5,22201,-3,-5,-3,22201,-1,-4,-4,1205,-2,461,1106,0,547,21102,-1,1,-4,21202,-6,-1,-6,21207,-7,0,-5,1205,-5,547,22201,-7,-6,-7,21201,-4,1,-4,1106,0,529,21201,-4,0,-7,109,-8,2106,0,0,109,1,101,1,68,564,20102,1,0,0,109,-1,2106,0,0,1102,97571,1,66,1101,1,0,67,1101,598,0,68,1101,556,0,69,1101,0,1,71,1101,0,600,72,1105,1,73,1,-1605712,28,112719,1102,1,48679,66,1102,1,1,67,1102,1,629,68,1102,556,1,69,1101,0,0,71,1102,631,1,72,1106,0,73,1,1782,1102,1,7877,66,1102,1,2,67,1101,658,0,68,1101,302,0,69,1102,1,1,71,1102,1,662,72,1105,1,73,0,0,0,0,26,81559,1101,0,22453,66,1101,1,0,67,1102,1,691,68,1101,0,556,69,1102,1,1,71,1102,1,693,72,1105,1,73,1,125,35,19959,1101,0,21493,66,1101,0,5,67,1102,1,722,68,1101,0,302,69,1102,1,1,71,1101,0,732,72,1106,0,73,0,0,0,0,0,0,0,0,0,0,2,56893,1102,77191,1,66,1101,1,0,67,1102,1,761,68,1101,556,0,69,1101,1,0,71,1101,763,0,72,1105,1,73,1,1037327,8,179734,1101,57977,0,66,1101,0,1,67,1101,792,0,68,1102,556,1,69,1101,0,0,71,1101,0,794,72,1105,1,73,1,1430,1102,57173,1,66,1101,0,1,67,1101,0,821,68,1102,1,556,69,1101,0,0,71,1101,0,823,72,1106,0,73,1,1128,1101,0,37573,66,1102,1,3,67,1102,1,850,68,1102,253,1,69,1102,1,1,71,1101,856,0,72,1105,1,73,0,0,0,0,0,0,17,209158,1101,0,17569,66,1102,1,1,67,1101,0,885,68,1102,556,1,69,1101,2,0,71,1101,887,0,72,1106,0,73,1,8329,20,85972,34,54146,1101,84653,0,66,1101,1,0,67,1101,0,918,68,1102,1,556,69,1102,1,1,71,1101,0,920,72,1105,1,73,1,3167,20,64479,1101,0,88657,66,1102,1,1,67,1101,0,949,68,1101,556,0,69,1102,0,1,71,1102,1,951,72,1105,1,73,1,1419,1101,0,104579,66,1101,2,0,67,1101,0,978,68,1101,0,302,69,1101,0,1,71,1102,982,1,72,1105,1,73,0,0,0,0,6,76316,1102,33797,1,66,1101,0,1,67,1102,1011,1,68,1101,556,0,69,1102,1,3,71,1101,0,1013,72,1105,1,73,1,5,35,13306,35,26612,39,113194,1102,75781,1,66,1101,0,1,67,1102,1,1046,68,1102,1,556,69,1101,0,1,71,1101,1048,0,72,1106,0,73,1,1777,20,42986,1101,32183,0,66,1102,1,1,67,1102,1,1077,68,1102,556,1,69,1102,1,2,71,1102,1,1079,72,1105,1,73,1,10,35,6653,39,169791,1101,19079,0,66,1101,0,4,67,1102,1,1110,68,1102,253,1,69,1101,0,1,71,1102,1118,1,72,1105,1,73,0,0,0,0,0,0,0,0,7,7877,1102,1,56893,66,1101,0,4,67,1102,1147,1,68,1101,253,0,69,1102,1,1,71,1101,0,1155,72,1105,1,73,0,0,0,0,0,0,0,0,45,73189,1102,104651,1,66,1101,1,0,67,1102,1,1184,68,1101,556,0,69,1101,0,0,71,1101,0,1186,72,1105,1,73,1,1351,1101,0,43661,66,1101,1,0,67,1102,1213,1,68,1101,0,556,69,1102,1,1,71,1101,1215,0,72,1105,1,73,1,763676,28,75146,1101,16963,0,66,1102,1,1,67,1102,1,1244,68,1102,1,556,69,1102,1,1,71,1102,1246,1,72,1106,0,73,1,11,26,163118,1101,461,0,66,1101,1,0,67,1102,1275,1,68,1101,556,0,69,1101,0,0,71,1102,1,1277,72,1106,0,73,1,1263,1102,101483,1,66,1101,1,0,67,1102,1304,1,68,1102,556,1,69,1102,0,1,71,1102,1306,1,72,1106,0,73,1,1607,1101,0,14251,66,1101,0,3,67,1102,1333,1,68,1101,302,0,69,1102,1,1,71,1102,1,1339,72,1105,1,73,0,0,0,0,0,0,2,170679,1101,0,27073,66,1101,0,4,67,1102,1,1368,68,1102,1,302,69,1101,1,0,71,1101,0,1376,72,1106,0,73,0,0,0,0,0,0,0,0,1,154743,1101,0,15583,66,1101,0,1,67,1102,1,1405,68,1102,556,1,69,1101,0,3,71,1101,0,1407,72,1106,0,73,1,1,33,14998,21,302361,34,81219,1101,0,56597,66,1101,0,6,67,1102,1440,1,68,1102,1,302,69,1102,1,1,71,1101,1452,0,72,1106,0,73,0,0,0,0,0,0,0,0,0,0,0,0,45,146378,1102,6991,1,66,1101,0,1,67,1102,1,1481,68,1102,1,556,69,1101,0,1,71,1102,1,1483,72,1106,0,73,1,902,21,201574,1102,1,89867,66,1101,2,0,67,1101,1512,0,68,1101,0,302,69,1101,1,0,71,1102,1516,1,72,1106,0,73,0,0,0,0,5,10798,1102,1,61553,66,1102,1,1,67,1102,1,1545,68,1102,556,1,69,1101,0,6,71,1101,0,1547,72,1106,0,73,1,2,20,21493,17,104579,7,15754,26,244677,39,282985,39,339582,1101,73189,0,66,1102,2,1,67,1101,0,1586,68,1101,0,351,69,1102,1,1,71,1101,0,1590,72,1105,1,73,0,0,0,0,255,60251,1101,0,91463,66,1102,1,1,67,1101,1619,0,68,1101,556,0,69,1102,1,1,71,1101,0,1621,72,1105,1,73,1,6467743,28,37573,1102,1,34369,66,1101,0,1,67,1101,1650,0,68,1102,556,1,69,1102,1,1,71,1101,1652,0,72,1105,1,73,1,8933,21,100787,1102,1,77081,66,1101,0,1,67,1101,1681,0,68,1102,1,556,69,1102,1,1,71,1101,1683,0,72,1105,1,73,1,2310,33,7499,1101,0,44699,66,1101,0,1,67,1102,1712,1,68,1101,556,0,69,1101,3,0,71,1101,1714,0,72,1105,1,73,1,3,8,89867,5,5399,34,108292,1101,97387,0,66,1102,1,1,67,1102,1747,1,68,1102,556,1,69,1102,1,1,71,1102,1749,1,72,1105,1,73,1,4,20,107465,1101,0,13463,66,1101,1,0,67,1101,1778,0,68,1101,0,556,69,1102,0,1,71,1102,1,1780,72,1106,0,73,1,1250,1102,51581,1,66,1102,1,3,67,1102,1807,1,68,1101,302,0,69,1101,0,1,71,1102,1,1813,72,1105,1,73,0,0,0,0,0,0,2,113786,1102,1,73679,66,1102,1,1,67,1102,1842,1,68,1102,556,1,69,1101,1,0,71,1102,1,1844,72,1105,1,73,1,160,39,56597,1101,0,60251,66,1101,0,1,67,1101,1873,0,68,1102,556,1,69,1102,6,1,71,1101,1875,0,72,1106,0,73,1,22677,47,94099,1,51581,1,103162,9,14251,9,28502,9,42753,1101,0,81559,66,1101,0,3,67,1102,1914,1,68,1101,0,302,69,1101,1,0,71,1102,1920,1,72,1105,1,73,0,0,0,0,0,0,47,188198,1101,0,6653,66,1101,4,0,67,1102,1949,1,68,1101,302,0,69,1101,0,1,71,1101,0,1957,72,1106,0,73,0,0,0,0,0,0,0,0,39,226388,1101,63659,0,66,1101,0,1,67,1101,0,1986,68,1102,556,1,69,1102,1,1,71,1102,1,1988,72,1105,1,73,1,-2,34,27073,1101,94099,0,66,1101,2,0,67,1101,0,2017,68,1101,0,302,69,1102,1,1,71,1102,2021,1,72,1106,0,73,0,0,0,0,2,227572,1101,100787,0,66,1101,0,3,67,1101,2050,0,68,1102,1,302,69,1101,1,0,71,1101,0,2056,72,1105,1,73,0,0,0,0,0,0,6,19079,1101,0,47599,66,1102,1,1,67,1101,0,2085,68,1102,556,1,69,1102,1,1,71,1101,2087,0,72,1105,1,73,1,2677,33,22497,1102,1,7499,66,1101,0,3,67,1101,2116,0,68,1102,1,302,69,1101,0,1,71,1101,0,2122,72,1105,1,73,0,0,0,0,0,0,6,38158,1101,0,101359,66,1102,1,1,67,1101,2151,0,68,1102,1,556,69,1102,1,0,71,1102,1,2153,72,1105,1,73,1,1752,1101,48091,0,66,1101,1,0,67,1102,1,2180,68,1101,0,556,69,1101,0,0,71,1101,0,2182,72,1106,0,73,1,1463,1102,5399,1,66,1101,0,2,67,1102,1,2209,68,1101,0,302,69,1102,1,1,71,1101,0,2213,72,1106,0,73,0,0,0,0,6,57237
diff --git a/2019/inputs/day_24.txt b/2019/inputs/day_24.txt
deleted file mode 100644
index ba900ad..0000000
--- a/2019/inputs/day_24.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-##.#.
-.##..
-##.#.
-.####
-###..
diff --git a/2019/inputs/day_25.txt b/2019/inputs/day_25.txt
deleted file mode 100644
index 5351575..0000000
--- a/2019/inputs/day_25.txt
+++ /dev/null
@@ -1 +0,0 @@
-109,4795,21102,1,3124,1,21102,1,13,0,1106,0,1424,21102,1,166,1,21101,24,0,0,1105,1,1234,21102,31,1,0,1106,0,1984,1106,0,13,6,4,3,2,52,51,21,4,28,56,55,3,19,-9,-10,47,89,88,90,90,6,77,73,85,71,1,76,68,63,65,22,-27,70,76,81,87,5,105,105,107,108,95,4,97,92,109,109,5,110,105,110,108,95,4,115,96,109,109,13,-3,59,101,85,92,97,13,84,80,92,78,34,-15,26,-16,46,88,72,79,84,0,72,76,-3,85,74,79,75,-8,64,68,75,57,65,70,64,66,72,8,-41,32,-22,56,77,82,-4,60,76,62,70,-2,74,-11,55,52,68,67,73,56,60,52,-20,44,56,66,-24,48,58,42,49,54,-16,-53,10,0,56,99,96,95,82,94,83,45,-9,23,-13,61,85,88,74,71,82,73,79,73,89,67,65,-4,62,73,70,69,56,68,57,2,-35,24,-14,64,85,90,4,70,67,79,7,83,-2,68,75,-5,78,65,57,75,-10,76,53,76,0,-37,31,-21,57,78,83,-3,64,74,72,0,76,-9,73,58,57,-13,70,57,49,67,-18,54,64,48,55,-23,48,44,56,42,-14,-51,14,-4,74,95,100,14,97,77,86,79,9,92,79,75,5,27,-17,61,82,87,1,68,78,76,4,80,-5,66,58,78,60,-10,73,60,52,70,-15,57,67,51,58,-6,-43,14,-4,74,95,100,14,81,94,90,90,9,92,79,75,5,60,-50,23,42,38,-32,38,39,30,42,47,-38,30,36,28,25,41,38,34,31,18,23,29,19,33,-52,20,29,-55,27,27,27,8,15,-61,22,16,-64,24,13,18,-54,-69,-70,-14,7,12,-74,-8,-11,1,-71,5,-80,-4,-3,3,-15,-84,-85,-109,29,-19,59,80,85,-1,82,62,71,64,-6,77,64,60,-10,62,66,57,59,63,57,67,51,-19,56,58,57,57,-10,-47,44,-34,39,58,54,-16,60,61,57,64,48,56,-23,52,40,60,38,-28,44,53,-31,55,32,55,-35,48,42,41,-39,32,38,42,-42,-44,12,33,38,-48,28,19,25,32,-52,-76,-77,59,-49,13,55,-30,42,51,-33,49,50,32,31,31,39,36,48,-42,24,35,32,34,29,21,35,19,25,37,-53,14,10,26,18,-57,-59,-3,18,23,-63,1,17,3,-67,1,-4,14,-2,6,-73,-8,14,-76,-12,-78,-40,2,4,-13,-82,-106,-107,35,-25,53,74,79,0,74,60,-10,65,53,72,64,52,56,52,50,-19,53,57,62,56,-24,58,54,38,39,40,-29,-31,2,56,35,-34,-58,-59,138,-128,-74,-108,-33,-31,-26,-44,-101,-114,-33,-37,-51,-39,-35,-47,-54,-122,-37,-45,-52,-59,-58,-128,-46,-65,-42,-49,-133,-132,-102,-60,-68,-56,-55,-139,-141,-106,-61,-65,-72,-78,-64,-148,-70,-72,-151,-68,-81,-81,-72,-156,-74,-86,-86,-80,-161,-97,-81,-95,-165,-94,-98,-103,-83,-97,-102,-90,-173,-90,-103,-111,-99,-178,-95,-108,-112,-182,-115,-115,-101,-117,-120,-104,-120,-122,-191,-106,-128,-118,-110,-127,-196,-196,-199,-135,-123,-134,-203,-115,-126,-121,-207,-143,-127,-141,-211,-143,-139,-145,-148,-132,-148,-150,-219,-154,-156,-155,-148,-224,-141,-147,-227,-144,-157,-161,-231,-165,-161,-165,-168,-161,-157,-159,-166,-162,-157,-228,-265,138,-128,-74,-108,-33,-31,-26,-44,-101,-114,-33,-37,-51,-39,-35,-47,-54,-122,-37,-45,-52,-59,-58,-128,-46,-65,-42,-49,-133,-132,-102,-60,-68,-56,-55,-139,-141,-106,-61,-65,-72,-78,-64,-148,-70,-72,-151,-68,-81,-81,-72,-156,-74,-86,-86,-80,-161,-97,-81,-95,-165,-90,-94,-97,-97,-86,-102,-90,-173,-90,-103,-111,-99,-178,-95,-108,-112,-182,-115,-115,-101,-117,-120,-104,-120,-122,-191,-106,-128,-118,-110,-127,-196,-196,-199,-135,-123,-134,-203,-115,-126,-121,-207,-143,-127,-141,-211,-143,-139,-145,-148,-132,-148,-150,-219,-154,-156,-155,-148,-224,-141,-147,-227,-144,-157,-161,-231,-165,-161,-165,-168,-161,-157,-159,-166,-162,-157,-228,-265,263,-253,-199,-233,-158,-156,-151,-169,-226,-239,-158,-162,-176,-164,-160,-172,-179,-247,-162,-170,-177,-184,-183,-253,-171,-190,-167,-174,-258,-257,-227,-183,-197,-187,-175,-182,-193,-184,-268,-202,-191,-194,-192,-197,-205,-191,-207,-276,-278,-222,-201,-196,-282,-206,-219,-196,-286,-207,-206,-210,-223,-222,-223,-225,-280,-293,-296,-232,-220,-231,-300,-212,-223,-218,-304,-236,-228,-223,-239,-227,-310,-227,-240,-244,-314,-248,-237,-250,-243,-239,-247,-237,-308,-345,-273,-260,-248,-243,-263,-329,-252,-252,-248,-260,-267,-266,-253,-337,-249,-260,-255,-259,-342,-260,-267,-280,-270,-271,-348,-281,-268,-272,-279,-285,-342,-355,-280,-278,-279,-284,-277,-361,-282,-278,-274,-275,-290,-298,-300,-369,-300,-292,-290,-373,-309,-375,-299,-298,-301,-310,-302,-297,-370,-383,-302,-316,-321,-311,-315,-299,-321,-308,-392,-306,-322,-330,-312,-397,-326,-334,-317,-401,-330,-338,-324,-325,-337,-329,-339,-341,-398,-411,-347,-335,-346,-415,-334,-352,-350,-346,-341,-338,-422,-334,-345,-340,-344,-427,-345,-357,-357,-351,-432,-365,-361,-353,-367,-370,-354,-363,-351,-427,-464,-441,-397,-373,-434,-447,-376,-380,-374,-375,-373,-452,-454,-398,-377,-372,-458,-376,-388,-382,-377,-387,-396,-465,-400,-398,-468,-404,-404,-395,-403,-473,-390,-396,-476,-406,-409,-395,-480,-408,-404,-483,-418,-396,-486,-403,-399,-409,-417,-413,-421,-493,37,-5,73,71,-8,75,62,58,-12,62,55,74,64,48,50,-19,45,63,-22,61,48,44,-26,50,37,44,48,-31,33,40,48,41,43,30,37,-25,-38,-63,0,0,109,7,21101,0,0,-2,22208,-2,-5,-1,1205,-1,1169,22202,-2,-4,1,22201,1,-6,1,21202,-2,1,2,21102,1162,1,0,2105,1,-3,21201,-2,1,-2,1106,0,1136,109,-7,2106,0,0,109,6,2101,0,-5,1182,20101,0,0,-2,21102,0,1,-3,21201,-5,1,-5,22208,-3,-2,-1,1205,-1,1229,2201,-5,-3,1205,20101,0,0,1,22102,1,-3,2,21202,-2,1,3,21102,1,1222,0,2105,1,-4,21201,-3,1,-3,1105,1,1192,109,-6,2106,0,0,109,2,21202,-1,1,1,21101,1256,0,2,21102,1251,1,0,1106,0,1174,109,-2,2105,1,0,109,5,22201,-4,-3,-1,22201,-2,-1,-1,204,-1,109,-5,2106,0,0,109,3,1202,-2,1,1280,1006,0,1303,104,45,104,32,1201,-1,66,1291,21002,0,1,1,21101,1301,0,0,1105,1,1234,104,10,109,-3,2105,1,0,0,0,109,2,2101,0,-1,1309,1102,1,0,1308,21102,1,4601,1,21102,13,1,2,21101,4,0,3,21102,1,1353,4,21101,1343,0,0,1105,1,1130,20102,1,1308,-1,109,-2,2106,0,0,63,109,3,1201,-2,0,1360,20008,0,1309,-1,1206,-1,1419,1005,1308,1398,1102,1,1,1308,21008,1309,-1,-1,1206,-1,1387,21102,106,1,1,1106,0,1391,21101,0,92,1,21102,1,1398,0,1106,0,1234,104,45,104,32,1201,-2,1,1407,21002,0,1,1,21102,1417,1,0,1105,1,1234,104,10,109,-3,2105,1,0,109,3,1202,-2,1,1128,21102,1,34,1,21101,0,1441,0,1106,0,1234,1001,1128,0,1447,20101,0,0,1,21102,1,1456,0,1105,1,1234,21102,1,41,1,21101,1467,0,0,1105,1,1234,1001,1128,1,1472,21002,0,1,1,21101,1482,0,0,1105,1,1234,21102,46,1,1,21102,1493,1,0,1105,1,1234,21001,1128,3,1,21102,4,1,2,21102,1,1,3,21102,1,1273,4,21101,1516,0,0,1106,0,1130,21001,1128,0,1,21102,1,1527,0,1105,1,1310,1001,1128,2,1532,21002,0,1,-1,1206,-1,1545,21101,0,1545,0,2105,1,-1,109,-3,2106,0,0,109,0,99,109,2,1102,1,0,1550,21101,0,4601,1,21102,13,1,2,21101,4,0,3,21101,1664,0,4,21102,1,1582,0,1105,1,1130,2,2486,1352,1551,1102,0,1,1552,21001,1550,0,1,21102,1,33,2,21101,0,1702,3,21102,1,1609,0,1106,0,2722,21007,1552,0,-1,1205,-1,1630,20107,0,1552,-1,1205,-1,1637,21102,1,1630,0,1106,0,1752,21101,0,548,1,1106,0,1641,21101,687,0,1,21101,0,1648,0,1105,1,1234,21101,0,4457,1,21101,1659,0,0,1106,0,1424,109,-2,2105,1,0,109,4,21202,-2,-1,-2,2102,1,-3,1675,21008,0,-1,-1,1206,-1,1697,1201,-3,2,1687,20101,-27,0,-3,22201,-3,-2,-3,2001,1550,-3,1550,109,-4,2105,1,0,109,5,21008,1552,0,-1,1206,-1,1747,1201,-3,1901,1717,20101,0,0,-2,1205,-4,1736,20207,-2,1551,-1,1205,-1,1747,1102,-1,1,1552,1105,1,1747,22007,1551,-2,-1,1205,-1,1747,1102,1,1,1552,109,-5,2105,1,0,109,1,21101,826,0,1,21102,1765,1,0,1105,1,1234,21002,1550,1,1,21102,1776,1,0,1105,1,2863,21102,1090,1,1,21102,1787,1,0,1106,0,1234,99,1106,0,1787,109,-1,2106,0,0,109,1,21101,512,0,1,21101,0,1809,0,1106,0,1234,99,1105,1,1809,109,-1,2105,1,0,109,1,1102,1,1,1129,109,-1,2106,0,0,109,1,21102,1,377,1,21101,0,1842,0,1105,1,1234,1106,0,1831,109,-1,2106,0,0,109,1,21101,407,0,1,21101,1863,0,0,1105,1,1234,99,1106,0,1863,109,-1,2106,0,0,109,1,21102,1,452,1,21101,1885,0,0,1106,0,1234,99,1106,0,1885,109,-1,2105,1,0,1941,1947,1953,1958,1965,1972,1978,4083,3936,4362,4458,4463,4254,3769,4145,4116,3848,4384,3957,4371,4258,3951,4063,3935,4053,4163,4259,3817,4062,4500,3970,4331,4022,3969,4163,4483,4089,3810,4092,4196,2281,2468,2418,2450,2487,2125,2505,5,95,108,104,104,23,5,96,91,108,108,1,4,101,105,112,3,6,104,104,106,107,94,-1,6,109,104,109,107,94,-1,5,111,91,100,93,23,5,114,95,108,108,1,109,3,21102,1993,1,0,1106,0,2634,1006,1129,2010,21101,0,316,1,21101,0,2007,0,1106,0,1234,1106,0,2076,21101,0,0,-1,1201,-1,1894,2019,21001,0,0,1,21102,0,1,2,21102,1,0,3,21101,0,2037,0,1106,0,2525,1206,1,2054,1201,-1,1934,2050,21102,2051,1,0,106,0,0,1105,1,2076,21201,-1,1,-1,21207,-1,7,-2,1205,-2,2014,21101,0,177,1,21102,1,2076,0,1105,1,1234,109,-3,2105,1,0,109,3,2001,1128,-2,2088,21002,0,1,-1,1205,-1,2108,21101,201,0,1,21101,2105,0,0,1105,1,1234,1106,0,2119,22101,0,-1,1,21101,2119,0,0,1106,0,1424,109,-3,2105,1,0,0,109,1,1101,0,0,2124,21101,0,4601,1,21101,0,13,2,21101,0,4,3,21102,2173,1,4,21102,2154,1,0,1106,0,1130,1005,2124,2168,21102,226,1,1,21102,2168,1,0,1106,0,1234,109,-1,2106,0,0,109,3,1005,2124,2275,1201,-2,0,2183,20008,0,1128,-1,1206,-1,2275,1201,-2,1,2195,20102,1,0,-1,21202,-1,1,1,21102,5,1,2,21102,1,1,3,21102,2216,1,0,1106,0,2525,1206,1,2275,21102,1,258,1,21101,2230,0,0,1105,1,1234,21202,-1,1,1,21101,0,2241,0,1106,0,1234,104,46,104,10,1101,1,0,2124,1201,-2,0,2256,1101,0,-1,0,1201,-2,3,2262,21002,0,1,-1,1206,-1,2275,21101,2275,0,0,2105,1,-1,109,-3,2106,0,0,0,109,1,1101,0,0,2280,21101,4601,0,1,21101,0,13,2,21102,1,4,3,21102,1,2329,4,21102,1,2310,0,1106,0,1130,1005,2280,2324,21102,1,273,1,21102,1,2324,0,1105,1,1234,109,-1,2105,1,0,109,3,1005,2280,2413,1201,-2,0,2339,21008,0,-1,-1,1206,-1,2413,1201,-2,1,2351,20102,1,0,-1,22101,0,-1,1,21102,5,1,2,21101,1,0,3,21102,2372,1,0,1105,1,2525,1206,1,2413,21102,301,1,1,21102,2386,1,0,1106,0,1234,22102,1,-1,1,21102,2397,1,0,1106,0,1234,104,46,104,10,1102,1,1,2280,1201,-2,0,2412,101,0,1128,0,109,-3,2106,0,0,109,1,21101,0,-1,1,21102,1,2431,0,1105,1,1310,1205,1,2445,21102,1,133,1,21101,0,2445,0,1106,0,1234,109,-1,2106,0,0,109,1,21102,3,1,1,21101,2463,0,0,1106,0,2081,109,-1,2106,0,0,109,1,21101,4,0,1,21102,1,2481,0,1105,1,2081,109,-1,2106,0,0,70,109,1,21102,5,1,1,21102,2500,1,0,1105,1,2081,109,-1,2105,1,0,109,1,21102,6,1,1,21102,2518,1,0,1105,1,2081,109,-1,2106,0,0,0,0,109,5,2102,1,-3,2523,1101,0,1,2524,21202,-4,1,1,21101,0,2585,2,21101,2550,0,0,1105,1,1174,1206,-2,2576,2101,0,-4,2558,2001,0,-3,2566,101,3094,2566,2566,21008,0,-1,-1,1205,-1,2576,1102,0,1,2524,21001,2524,0,-4,109,-5,2105,1,0,109,5,22201,-4,-3,-4,22201,-4,-2,-4,21208,-4,10,-1,1206,-1,2606,21102,-1,1,-4,201,-3,2523,2615,1001,2615,3094,2615,21002,0,1,-1,22208,-4,-1,-1,1205,-1,2629,1101,0,0,2524,109,-5,2106,0,0,109,4,21101,0,3094,1,21102,30,1,2,21101,1,0,3,21102,1,2706,4,21102,1,2659,0,1105,1,1130,21101,0,0,-3,203,-2,21208,-2,10,-1,1205,-1,2701,21207,-2,0,-1,1205,-1,2663,21207,-3,29,-1,1206,-1,2663,2101,3094,-3,2693,2102,1,-2,0,21201,-3,1,-3,1106,0,2663,109,-4,2105,1,0,109,2,1201,-1,0,2715,1102,-1,1,0,109,-2,2105,1,0,0,109,5,2102,1,-2,2721,21207,-4,0,-1,1206,-1,2739,21102,1,0,-4,21202,-4,1,1,21202,-3,1,2,21102,1,1,3,21101,0,2758,0,1105,1,2763,109,-5,2106,0,0,109,6,21207,-4,1,-1,1206,-1,2786,22207,-5,-3,-1,1206,-1,2786,21201,-5,0,-5,1105,1,2858,22101,0,-5,1,21201,-4,-1,2,21202,-3,2,3,21101,0,2805,0,1105,1,2763,21202,1,1,-5,21101,0,1,-2,22207,-5,-3,-1,1206,-1,2824,21102,0,1,-2,22202,-3,-2,-3,22107,0,-4,-1,1206,-1,2850,22102,1,-2,1,21201,-4,-1,2,21101,0,2850,0,105,1,2721,21202,-3,-1,-3,22201,-5,-3,-5,109,-6,2105,1,0,109,3,21208,-2,0,-1,1205,-1,2902,21207,-2,0,-1,1205,-1,2882,1105,1,2888,104,45,21202,-2,-1,-2,21201,-2,0,1,21102,2899,1,0,1106,0,2909,1106,0,2904,104,48,109,-3,2106,0,0,109,4,22102,1,-3,1,21101,10,0,2,21101,0,2926,0,1105,1,3010,21201,1,0,-2,21201,2,0,-1,1206,-2,2948,22101,0,-2,1,21101,0,2948,0,1106,0,2909,22101,48,-1,-1,204,-1,109,-4,2105,1,0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,2147483648,4294967296,8589934592,17179869184,34359738368,68719476736,137438953472,274877906944,549755813888,1099511627776,2199023255552,4398046511104,8796093022208,17592186044416,35184372088832,70368744177664,140737488355328,281474976710656,562949953421312,1125899906842624,109,8,21101,0,0,-4,21101,0,0,-3,21102,1,51,-2,21201,-2,-1,-2,1201,-2,2959,3034,20101,0,0,-1,21202,-3,2,-3,22207,-7,-1,-5,1205,-5,3059,21201,-3,1,-3,22102,-1,-1,-5,22201,-7,-5,-7,22207,-3,-6,-5,1205,-5,3078,22102,-1,-6,-5,22201,-3,-5,-3,22201,-1,-4,-4,1205,-2,3024,21202,-4,1,-7,21202,-3,1,-6,109,-8,2106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3131,3143,0,3252,3527,0,0,11,61,105,95,94,17,50,97,83,78,79,83,108,-19,2,7,-79,-9,-2,2,-83,-11,-7,-86,-3,-16,-7,-11,-6,-21,-21,-94,-30,-96,-25,-19,-23,-31,-101,-29,-25,-104,-21,-34,-38,-108,-39,-34,-32,-33,-31,-114,-43,-47,-35,-49,-105,-120,-69,-43,-123,-49,-56,-57,-47,-128,-40,-51,-46,-50,-133,-51,-63,-63,-57,-138,-69,-58,-62,-65,-143,-79,-69,-63,-68,-148,-79,-68,-82,-83,-63,-81,-77,-85,-145,-158,-75,-88,-92,-162,-91,-85,-89,-97,-167,-96,-104,-87,-171,-106,-104,-105,-97,-176,-94,-109,-114,-104,-112,-114,-169,3259,3267,0,3344,0,3124,0,7,65,89,99,98,108,85,108,76,8,27,27,36,-48,16,32,18,13,-53,18,10,27,-57,8,10,9,17,-62,16,16,19,7,10,5,21,-1,-3,-72,-3,5,7,-76,6,1,-2,-11,3,-10,-10,-6,-14,-59,-87,1,-10,-5,-84,-10,-24,-94,-21,-11,-14,-14,-99,-22,-22,-18,-103,-23,-20,-33,-23,-39,-109,-27,-26,-30,-44,-114,-28,-44,-52,-34,-105,3351,3359,0,0,3408,3252,0,7,76,108,102,104,86,91,88,48,36,55,51,-19,46,58,66,46,59,-25,48,58,55,55,-30,36,47,45,50,30,37,41,-38,38,39,41,27,-43,22,34,42,22,35,-35,-50,-51,-2,16,13,30,26,26,15,27,9,15,27,-49,3415,3423,0,0,3458,4392,3344,7,76,108,88,88,97,89,102,34,48,66,69,73,62,62,61,73,3,72,61,77,55,53,-2,-17,34,53,49,68,-15,59,45,-25,39,49,48,-29,39,46,48,51,55,-21,3465,3486,0,3584,0,4053,3408,20,51,84,80,93,8,62,88,70,84,83,75,79,71,-1,33,66,74,79,63,75,40,32,70,77,-11,57,63,69,54,-16,51,61,-19,69,58,63,-23,63,57,39,53,-28,51,52,38,51,36,44,49,47,-37,41,39,-40,43,30,26,-44,26,33,-16,3534,3548,0,0,0,0,3124,13,54,100,86,103,15,63,98,77,93,94,78,90,90,35,49,68,64,-6,59,61,59,73,-11,53,69,55,-15,49,59,58,-19,64,58,57,-23,59,52,39,49,48,-29,40,48,50,-33,55,44,49,-23,3591,3600,0,0,3732,3458,3673,8,75,96,89,96,20,53,83,106,72,11,44,38,37,35,37,38,36,-48,17,29,33,20,-53,-4,14,12,-44,-12,20,23,8,6,-63,-14,4,7,11,0,0,-1,11,-72,4,-5,-7,-3,-10,-5,-1,-11,-81,-17,-5,-16,-85,-4,-18,-17,-4,-14,-26,-10,-93,-12,-26,-23,-19,-30,-30,-31,-19,-102,-26,-35,-37,-33,-40,-35,-31,-41,-97,3680,3703,0,3901,3584,0,4241,22,50,88,92,7,41,77,83,70,81,77,65,83,67,-3,34,74,79,71,76,56,63,67,28,55,82,79,70,72,78,85,9,-4,68,78,0,75,-9,73,73,61,63,62,-15,71,62,64,56,53,57,49,-9,3739,3748,0,3828,0,3981,3584,8,59,102,104,103,93,87,97,99,79,5,24,20,-50,26,17,31,11,21,-56,30,7,17,16,22,-62,2,14,3,-66,17,4,0,-70,6,-3,11,-9,1,-76,-7,-2,0,-1,1,-82,-18,-2,-16,-86,-4,-12,-16,-19,-19,-8,-17,-5,-95,-28,-24,-28,-29,-31,-19,-33,-25,-20,-105,-39,-28,-32,-30,-28,-28,-98,-113,-67,-33,-116,-52,-36,-50,-120,-37,-50,-54,-35,-94,3835,3844,0,4166,0,3732,0,8,64,102,98,100,88,88,85,92,56,27,54,51,42,51,49,39,-31,51,36,35,42,47,-37,46,40,-40,31,23,43,25,-45,30,22,22,35,-50,22,32,-53,25,23,-56,27,14,10,-60,-22,11,2,14,19,-66,-28,14,4,-2,-71,11,-4,10,9,-3,1,-7,-65,3908,3920,0,0,0,3673,0,11,68,86,102,87,99,102,80,98,92,94,100,60,24,43,39,51,37,-33,31,47,33,-37,27,-39,30,28,45,-43,40,24,30,22,35,18,29,29,17,30,-27,-55,28,15,11,30,-53,21,7,-63,1,11,10,-67,-2,10,6,13,-3,-5,-74,-7,3,10,0,-67,-80,3,-10,-4,1,-14,-14,-73,3988,3997,0,3732,4095,0,0,8,72,88,105,104,85,90,87,100,55,29,48,44,63,-20,54,40,-30,34,-32,43,39,49,48,39,31,-39,44,46,31,40,40,44,-46,18,30,19,-50,32,32,12,28,29,17,21,13,-59,24,18,-62,13,15,14,9,-67,-3,7,6,-71,-7,3,-1,0,-7,-63,4060,4068,0,3458,0,0,0,7,68,97,107,89,93,89,97,26,43,91,73,85,91,85,72,72,76,68,3,78,-6,63,74,60,59,79,57,0,54,67,57,52,50,-5,4102,4114,0,0,0,4337,3981,11,58,98,90,91,95,85,84,96,86,90,82,51,38,59,64,-22,60,45,44,-26,38,-28,58,42,42,52,36,32,44,29,45,30,-39,47,32,42,29,-44,35,30,18,30,34,-50,19,27,29,-54,-4,24,25,15,19,11,7,20,16,9,3,-66,19,-50,-55,4173,4185,0,0,0,3828,0,11,72,87,92,87,95,83,84,14,57,77,77,55,34,55,60,-26,56,41,40,-30,38,54,40,34,34,42,30,31,-39,32,28,40,26,-44,34,24,-47,32,33,29,33,27,31,35,25,13,-57,22,20,16,28,15,6,18,-65,2,2,15,4,1,7,-72,14,5,7,-1,-63,4248,4259,0,0,3673,0,0,10,68,86,106,92,89,82,100,88,93,91,77,6,38,18,36,36,33,-25,-52,-2,30,27,9,21,10,10,8,-47,-62,-15,12,4,-1,16,1,-69,13,14,8,7,2,14,-76,0,-9,-14,3,4,0,-14,-7,-16,-8,-3,-5,-89,-20,-9,-13,-16,-94,-25,-23,-27,-14,-10,-100,-18,-18,-38,-22,-22,-106,-23,-29,-109,-28,-42,-45,-48,-38,-42,-50,-35,-53,-35,-51,-107,4344,4351,0,4095,0,0,0,6,59,107,91,88,90,90,40,38,70,68,58,-12,66,56,-15,68,55,51,-19,47,44,44,50,54,44,58,56,-28,54,39,38,45,-33,50,44,-36,35,27,47,29,-41,38,36,43,24,36,-33,4399,4422,0,3408,0,4457,0,22,65,74,90,87,6,41,86,76,88,70,0,44,63,70,74,79,63,71,57,69,57,58,34,39,81,-4,60,74,73,61,56,72,72,-12,71,65,-15,50,52,-18,68,59,61,53,50,54,46,-26,51,51,53,47,34,44,43,55,-21,4464,4484,0,4392,4556,0,0,19,64,81,78,95,91,81,91,95,5,39,75,71,68,75,79,77,70,74,79,71,2,38,-41,42,29,25,-45,32,22,40,35,-50,31,27,26,23,-43,-56,8,-58,21,22,8,21,20,21,17,3,-54,15,0,8,12,1,11,-1,11,-7,-77,-8,-3,-1,-2,0,-83,3,-12,-10,-11,-88,-3,-21,-9,-19,-23,-5,-95,-7,-18,-13,-17,-100,-28,-34,-34,-26,-21,-33,-23,-19,-95,4563,4588,1553,0,0,0,4457,24,56,89,75,88,87,88,84,70,13,50,67,75,79,68,78,66,78,60,-10,27,64,66,65,67,12,53,97,83,93,105,105,87,91,83,25,24,23,3981,4653,16777243,0,3344,4659,32796,0,4166,4672,67108893,0,3252,4683,46,0,3673,4699,31,1818,3527,4719,536870944,0,3408,4727,268435489,0,3584,4741,34,1829,3828,4755,35,1850,4241,4767,36,1796,4053,4778,1061,0,4337,4782,38,1872,3901,4790,41,0,5,110,98,94,100,99,12,95,95,87,90,94,15,80,92,96,95,86,78,10,106,86,97,85,97,102,98,88,92,82,15,104,85,80,98,85,81,93,10,86,73,74,78,78,82,72,19,84,85,76,88,93,8,76,82,74,71,87,84,80,77,64,69,75,65,79,7,90,102,107,91,99,98,84,13,102,98,96,95,91,14,92,82,11,77,74,92,29,13,92,96,87,89,93,87,97,81,11,86,88,87,87,11,98,99,95,102,86,94,15,90,78,98,76,10,91,104,87,84,98,86,16,95,93,81,3,106,113,98,7,105,96,102,106,100,98,102,4,95,92,101,94
diff --git a/2019/inputs/day_3.txt b/2019/inputs/day_3.txt
deleted file mode 100644
index 504e9fe..0000000
--- a/2019/inputs/day_3.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-R995,D882,R144,U180,L638,U282,L907,D326,R731,D117,R323,U529,R330,U252,R73,U173,R345,U552,R230,U682,R861,U640,L930,U590,L851,D249,R669,D878,R951,D545,L690,U392,R609,D841,R273,D465,R546,U858,L518,U567,L474,D249,L463,D390,L443,U392,L196,U418,R433,U651,R520,D450,R763,U714,R495,D716,L219,D289,L451,D594,R874,U451,R406,U662,R261,D242,R821,D951,R808,D862,L871,U133,R841,D465,R710,U300,R879,D497,R85,U173,R941,U953,R705,U972,R260,D315,L632,U182,L26,D586,R438,U275,L588,U956,L550,D576,R738,U974,R648,D880,R595,D510,L789,U455,R627,U709,R7,D486,L184,U999,L404,U329,L852,D154,L232,U398,L587,U881,R938,D40,L657,D164,R45,D917,R106,U698,L824,D426,R879,U700,R847,D891,L948,U625,R663,D814,R217,U30,R610,D781,L415,D435,L904,U815,R152,U587,R287,U141,R866,D636,L290,D114,L751,D660,R6,U383,L263,U799,R330,U96,L6,U542,L449,D361,R486,U278,L990,U329,L519,U605,R501,D559,R916,U198,L499,D174,R513,U396,L473,D565,R337,D770,R211,D10,L591,D920,R367,D748,L330,U249,L307,D645,R661,U266,R234,D403,L513,U443,L989,D1,L674,D210,L537,D872,L607,D961,R894,U632,L195,U744,L426,U531,R337,D821,R113,U436,L700,U779,R555,U891,R268,D30,R958,U411,R904,U24,R760,D958,R231,U229,L561,D134,L382,D961,L237,U676,L223,U324,R663,D186,R833,U188,R419,D349,L721,U152,L912,U490,R10,D995,L98,U47,R140,D815,R826,U730,R808,U256,R479,D322,L504,D891,L413,D848,L732,U375,L307,U7,R682,U270,L495,D248,R691,D945,L70,U220,R635,D159,R269,D15,L161,U214,R814,D3,R354,D632,R469,D36,R85,U215,L243,D183,R140,U179,R812,U180,L905,U136,L34,D937,L875
-L999,D22,L292,U843,R390,U678,R688,D492,L489,U488,R305,U951,L636,U725,R402,U84,L676,U171,L874,D201,R64,D743,R372,U519,R221,U986,L393,D793,R72,D184,L553,D137,L187,U487,L757,U880,L535,U887,R481,U236,L382,D195,L388,D90,R125,U414,R512,D382,R972,U935,L172,D1,R957,U593,L151,D158,R396,D42,L30,D178,R947,U977,R67,D406,R744,D64,L677,U23,R792,U864,R259,U315,R314,U17,L37,D658,L642,U135,R624,U601,L417,D949,R203,D122,R76,D493,L569,U274,L330,U933,R815,D30,L630,D43,R86,U926,L661,D491,L541,D96,R868,D565,R664,D935,L336,D152,R63,U110,L782,U14,R172,D945,L732,D870,R404,U767,L907,D558,R748,U591,R461,D153,L635,D457,R241,U478,L237,U218,R393,U468,L182,D745,L388,D360,L222,D642,L151,U560,R437,D326,R852,U525,R717,U929,L470,U621,R421,U408,L540,D176,L69,U753,L200,U251,R742,U628,R534,U542,R85,D71,R283,U905,L418,D755,L593,U335,L114,D684,L576,D645,R652,D49,R86,D991,L838,D309,L73,U847,L418,U675,R991,U463,R314,D618,L433,U173,R869,D115,L18,U233,R541,U516,L570,U340,R264,D442,L259,U276,R433,D348,R524,D353,R336,D883,R580,U157,R79,D27,L134,D161,L748,D278,R322,D581,R654,D156,L930,D293,L156,U311,R807,D618,R408,U719,R366,D632,R307,D565,R478,D620,R988,D821,R365,D581,L946,D138,L943,U69,R620,U208,L407,U188,L122,U353,L751,U565,R849,D874,R668,D794,L140,D474,R289,D773,R344,D220,L55,D385,L394,U208,R305,U736,L896,D376,R331,D855,L466,U516,L741,U124,L825,U467,L525,D911,R76,U220,L610,U102,L261,D891,L585,U397,L152,U753,R822,D252,R106,U145,L7,U524,R343,U352,L357,D399,L446,D140,L723,U46,R687,D409,R884
diff --git a/2019/inputs/day_4.txt b/2019/inputs/day_4.txt
deleted file mode 100644
index f62320b..0000000
--- a/2019/inputs/day_4.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-138241
-674034
diff --git a/2019/inputs/day_5.txt b/2019/inputs/day_5.txt
deleted file mode 100644
index f8c2724..0000000
--- a/2019/inputs/day_5.txt
+++ /dev/null
@@ -1 +0,0 @@
-3,225,1,225,6,6,1100,1,238,225,104,0,1102,57,23,224,101,-1311,224,224,4,224,1002,223,8,223,101,6,224,224,1,223,224,223,1102,57,67,225,102,67,150,224,1001,224,-2613,224,4,224,1002,223,8,223,101,5,224,224,1,224,223,223,2,179,213,224,1001,224,-469,224,4,224,102,8,223,223,101,7,224,224,1,223,224,223,1001,188,27,224,101,-119,224,224,4,224,1002,223,8,223,1001,224,7,224,1,223,224,223,1,184,218,224,1001,224,-155,224,4,224,1002,223,8,223,1001,224,7,224,1,224,223,223,1101,21,80,224,1001,224,-101,224,4,224,102,8,223,223,1001,224,1,224,1,224,223,223,1101,67,39,225,1101,89,68,225,101,69,35,224,1001,224,-126,224,4,224,1002,223,8,223,1001,224,1,224,1,224,223,223,1102,7,52,225,1102,18,90,225,1101,65,92,225,1002,153,78,224,101,-6942,224,224,4,224,102,8,223,223,101,6,224,224,1,223,224,223,1101,67,83,225,1102,31,65,225,4,223,99,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,1105,0,99999,1105,227,247,1105,1,99999,1005,227,99999,1005,0,256,1105,1,99999,1106,227,99999,1106,0,265,1105,1,99999,1006,0,99999,1006,227,274,1105,1,99999,1105,1,280,1105,1,99999,1,225,225,225,1101,294,0,0,105,1,0,1105,1,99999,1106,0,300,1105,1,99999,1,225,225,225,1101,314,0,0,106,0,0,1105,1,99999,1007,226,226,224,102,2,223,223,1005,224,329,1001,223,1,223,108,677,226,224,1002,223,2,223,1005,224,344,1001,223,1,223,1007,677,677,224,1002,223,2,223,1005,224,359,1001,223,1,223,1107,677,226,224,102,2,223,223,1006,224,374,1001,223,1,223,8,226,677,224,1002,223,2,223,1006,224,389,101,1,223,223,8,677,677,224,102,2,223,223,1006,224,404,1001,223,1,223,1008,226,226,224,102,2,223,223,1006,224,419,1001,223,1,223,107,677,226,224,102,2,223,223,1006,224,434,101,1,223,223,7,226,226,224,1002,223,2,223,1005,224,449,1001,223,1,223,1107,226,226,224,1002,223,2,223,1006,224,464,1001,223,1,223,1107,226,677,224,1002,223,2,223,1005,224,479,1001,223,1,223,8,677,226,224,1002,223,2,223,1006,224,494,1001,223,1,223,1108,226,677,224,1002,223,2,223,1006,224,509,101,1,223,223,1008,677,677,224,1002,223,2,223,1006,224,524,1001,223,1,223,1008,677,226,224,102,2,223,223,1006,224,539,1001,223,1,223,1108,677,677,224,102,2,223,223,1005,224,554,101,1,223,223,108,677,677,224,102,2,223,223,1006,224,569,101,1,223,223,1108,677,226,224,102,2,223,223,1005,224,584,1001,223,1,223,108,226,226,224,1002,223,2,223,1005,224,599,1001,223,1,223,1007,226,677,224,102,2,223,223,1005,224,614,1001,223,1,223,7,226,677,224,102,2,223,223,1006,224,629,1001,223,1,223,107,226,226,224,102,2,223,223,1005,224,644,101,1,223,223,7,677,226,224,102,2,223,223,1005,224,659,101,1,223,223,107,677,677,224,1002,223,2,223,1005,224,674,1001,223,1,223,4,223,99,226
diff --git a/2019/inputs/day_6.txt b/2019/inputs/day_6.txt
deleted file mode 100644
index 49d849c..0000000
--- a/2019/inputs/day_6.txt
+++ /dev/null
@@ -1,2306 +0,0 @@
-21X)BWV
-YZJ)YLQ
-FQS)PZW
-R64)71F
-ZH4)QVZ
-LWB)H4Q
-4HQ)PVJ
-TZ5)VBV
-LF1)FKZ
-GKS)BGN
-45B)2NS
-14W)2JY
-1XY)FJ8
-ZRC)WR9
-GCL)6PB
-LP4)GQ8
-26V)HTK
-3M8)1GJ
-47Q)JYK
-WDB)N2R
-KH8)TGY
-LFX)N2X
-VSZ)7PC
-M6W)4WL
-HH9)8PC
-L59)8Y8
-Q49)LWH
-CJ5)XDG
-K51)FGH
-H31)2RJ
-39M)Y4M
-12C)VLF
-PZW)7DW
-MP2)19Q
-R76)CHH
-N6J)KBW
-WR9)W25
-T99)ZF1
-1TS)8SM
-8WW)YX7
-PW6)B2J
-7KX)YM5
-HM6)GVX
-DNB)2YP
-6WC)2LW
-BG5)SB6
-KK1)JTF
-YDT)244
-GGQ)2DJ
-GCP)Q8H
-S1Y)J69
-LBV)DYG
-ZKN)JBS
-8XY)Y8Z
-XMH)NHD
-XVM)2LX
-SYP)BC8
-PXH)YYG
-F29)G9Y
-BYX)4QS
-8MY)S1D
-N2Y)BZK
-FRC)72W
-S2K)YH5
-7JF)K65
-DJ9)K4L
-P26)WXT
-DW9)1DJ
-NP4)3SB
-XS7)CDL
-6XH)4ZT
-2DJ)GCP
-2K4)VV1
-Q6P)NNN
-HQW)ZR9
-9G2)FNB
-H9N)5ZJ
-13Z)GKD
-9MW)37Y
-VDY)BG9
-BL3)12C
-LNN)JST
-Z3V)T39
-XS3)WYG
-8J5)QFQ
-7DW)DXY
-JMV)DM4
-VL3)V7Q
-GZC)ZHV
-3N6)R2H
-FQ6)7LG
-SR9)D66
-1M8)K2L
-24N)M94
-JST)WM9
-7SB)99Q
-58J)YN7
-WWH)5KS
-C39)X9J
-58S)KBP
-TVF)VNG
-TKC)Y34
-KKP)4S6
-XSP)939
-N6J)DZP
-JXP)N6R
-KNJ)7FS
-N3V)LMJ
-JVF)R94
-21C)R4Z
-NYK)5GN
-GVJ)Q6C
-R69)NRS
-GLS)C7D
-T4J)46R
-5GB)51S
-9WD)7PN
-HHX)KK2
-H2P)ZML
-DWD)Q9F
-FKZ)LC3
-Q9F)M8N
-CRZ)LM1
-6DP)YML
-NSR)L2X
-PMX)Q7K
-37R)1GF
-L4G)P4W
-17N)X6D
-JTF)89B
-JGJ)DVJ
-VF9)GMW
-NHD)DJ3
-TRY)F6S
-J11)BVW
-95X)XB5
-3XD)HPM
-7BB)1LW
-FJ8)TV4
-JV3)M9W
-T7L)6SS
-R48)LSB
-F2P)9D2
-PTY)QBY
-KXM)6G1
-N1H)Q2R
-P27)SR9
-1S2)N3G
-V7Q)642
-891)TW7
-B9Y)BRL
-GW4)3XZ
-QWM)G46
-WVK)S6N
-N82)317
-8PG)S21
-NT3)1VX
-QB5)Y3H
-PTT)639
-G8M)WM8
-B36)LX9
-M9M)4P3
-3F9)Q3R
-DND)TJL
-VQB)6N3
-PJT)JTK
-BBN)T4L
-LYP)M3V
-T9R)HH9
-XBR)3X5
-MX3)SWF
-SF1)MXT
-X67)6DQ
-82Z)FQ4
-L64)FNG
-CDG)5D9
-JKZ)XZ5
-MH1)1KD
-5NW)ZH4
-P3T)76Z
-2M4)CKW
-54L)8P7
-JSH)5H5
-LGR)P2V
-QNV)SJ7
-KPS)XMQ
-F2H)49M
-8NJ)KKP
-XZ1)LRZ
-RVK)J5Z
-QT9)NGQ
-1TK)P7X
-39M)595
-DN9)HKY
-HK1)ZRH
-SH1)JV5
-B25)GQ6
-QZC)WYC
-6CJ)F5D
-5R1)HQ7
-FNT)P4J
-4R6)P49
-LG4)QT9
-GWH)RY1
-1FX)ZK8
-HK4)G2N
-4WL)GPR
-SQT)KK1
-RT4)FCN
-NRF)P84
-DQW)4L4
-52N)T4J
-69D)2FV
-RMV)J7N
-S9J)1WM
-B88)9GT
-5M7)GXN
-3XF)6FX
-FL9)8VZ
-X88)JZR
-ZVZ)8J2
-Q83)94V
-82Y)HT7
-7Y7)7X3
-KNK)R1W
-469)PMG
-D9Z)GD1
-Z62)WR1
-YDF)6B6
-5KS)6GW
-57T)ML7
-GXC)R89
-S2N)99C
-JFH)RP9
-KPH)R26
-DZX)93P
-CWT)C2H
-VKN)5M7
-VNG)SH1
-G2N)F6Q
-NFV)FK3
-R65)TQL
-Z6T)4NG
-RQN)KPR
-972)9TB
-KZ1)6TY
-8K2)HKL
-KHJ)H1W
-6N3)XTR
-25Q)T49
-8HF)K9M
-GQX)PHP
-5ZJ)9S7
-C7D)VMJ
-JXV)SJD
-J17)64C
-5XN)WN7
-PH9)WQH
-43T)Q9V
-Z5F)NZ8
-VHQ)D95
-244)7KX
-6N7)JPH
-HC8)HND
-ZF1)39F
-24X)ZPF
-BWV)HQW
-R3N)5R1
-QB9)6XY
-KHW)KFZ
-S2V)DRQ
-S21)1RQ
-C9V)TSD
-Q1Y)LC2
-93Y)W5C
-8ST)T4P
-R5Z)CL4
-424)WNZ
-R7M)5JS
-4R6)H97
-ZXZ)S62
-FRH)SBJ
-ZK8)N82
-6FX)MTK
-Z5M)BRQ
-YYP)FX8
-RZJ)DRK
-V8G)TKQ
-5L9)J1G
-RZG)69H
-R9G)X79
-WFS)ZJQ
-4P8)GXC
-TYW)S54
-R2H)QH7
-6HX)F2H
-BBD)DC5
-DDB)6WC
-2G3)4JN
-FKC)K7V
-XTK)8BD
-Z7X)QGY
-8CG)3F9
-F39)MM9
-F1L)1R7
-ZVH)JDC
-BVW)PXM
-PRV)BF7
-FX8)1XR
-FB2)XN6
-R9L)Z1V
-YDT)H52
-6Z5)XZ1
-QD2)Z7Y
-TLS)6T3
-54C)DL7
-KPR)4TY
-19N)415
-1QG)GNN
-S6N)4MK
-4L8)LD2
-5Z7)PRY
-5C4)2MC
-94B)DY3
-CVK)GTS
-7N7)P27
-5MW)GGH
-2HQ)JYL
-L9J)HLP
-5Y4)NGN
-2BZ)GWN
-HD8)CZS
-HQ7)M9D
-DC5)RK6
-66W)2VT
-3D4)GHZ
-T49)VTP
-PL4)ZS9
-SJ7)TRC
-NKT)G5Y
-K1G)3GN
-37V)4LG
-KWL)VDZ
-7XF)1P8
-64C)FX4
-DY4)J3F
-RV8)8KF
-DRQ)KQ7
-HND)2N7
-HQS)HMW
-J24)9VX
-7DK)3PM
-467)VBK
-Q6C)TZC
-SZY)9TC
-BMM)4S4
-HFH)2S6
-K5K)4QP
-N6W)RZG
-TKQ)489
-4R1)F22
-J1G)YDF
-FVW)9WD
-CV7)TMC
-R6K)H31
-GDL)X14
-H1B)NKT
-XTR)PL6
-BSC)SM7
-MLT)S7B
-22S)R7T
-X8Y)4WX
-NR9)NK9
-FSM)J3S
-WHF)VSG
-ZBG)Q3D
-RMY)7KM
-XBX)1M8
-MHY)1C2
-GSS)X9G
-86F)Y4W
-VL6)6H9
-1VH)L3B
-SF8)CDG
-GTK)45F
-49M)NLL
-FN6)PN3
-KSC)R3Z
-6TN)3QN
-FNG)742
-X45)WWH
-SF5)2WH
-JSJ)B1H
-95L)M8F
-L59)C4Y
-93P)M89
-K1C)6ZZ
-21T)8M6
-X9M)7NX
-WPK)LNG
-393)F6N
-M4L)JXP
-VKN)X88
-NFK)ZVZ
-LKV)C2V
-SWX)TM8
-V7F)8ZN
-3RW)FD8
-9SM)H27
-TP3)1YB
-6MG)D8X
-8S7)345
-9SV)X67
-25P)JDD
-BFX)TNG
-36J)VBH
-HN7)WVK
-ZR3)3NR
-M3V)GPY
-52M)MFV
-MZB)CJ5
-MX3)XLQ
-LCG)PHS
-HZD)RNC
-GWN)DWD
-XBM)WP4
-2FV)YXW
-ZTP)QD2
-R1G)JY6
-KY4)8CG
-H54)RVK
-5HG)WYQ
-BVC)SK1
-948)P3T
-SV8)5MW
-V4D)YLT
-69X)LNZ
-BL3)Y97
-DXG)WLZ
-VV1)SS3
-ZCD)VXB
-X6D)XL2
-B9H)2NB
-KHK)WPK
-YLT)KFT
-P49)CC5
-KBW)CRH
-8KQ)LJ4
-8JJ)VTJ
-TKM)428
-3SB)273
-GPY)R2Z
-WTX)P6W
-LB1)3PR
-Y1R)DJM
-25P)CY5
-SVB)PJM
-56N)S2V
-H82)8D5
-CYB)GP4
-HJ2)BSH
-2J1)F1T
-C4Y)PRM
-TZC)PM5
-K55)NBJ
-X43)LPP
-WYG)3FW
-WFG)N2Y
-Q37)5L9
-WSF)KSH
-V2H)S9J
-HN2)DW9
-3LL)PFH
-6X3)XVM
-8XZ)991
-26L)WTX
-Y97)5C5
-XXL)79Y
-NK9)RR8
-L7W)83Q
-8TX)45B
-GMJ)1H4
-ZRW)58J
-36X)PRS
-8B2)HTL
-8JZ)L94
-PRY)QTW
-PL4)X8Y
-89N)1RJ
-DFJ)62K
-5QZ)CN3
-RYQ)SL6
-1H4)PGZ
-B1H)J88
-JCC)111
-V6W)GG7
-BZK)97X
-49J)WVY
-1WM)21X
-TCN)KSC
-RRD)26V
-VC6)WPS
-Y5S)YJS
-DVR)2J8
-LJF)839
-64D)GZC
-79Y)SZY
-JHT)D6J
-K4K)L59
-YHB)QWM
-6H9)MRR
-X79)M62
-LW7)GGB
-469)TRQ
-14K)951
-L9Y)K51
-W7C)Y73
-XD1)CYL
-1XQ)HYK
-Q19)PWG
-F4M)KHW
-SM1)J3Q
-MV1)1X9
-NMV)3SM
-8ZD)L61
-VWX)6R6
-S4Z)JK4
-9GT)R13
-F66)89X
-DLT)K6R
-H4C)NW9
-R3D)6Z5
-MKN)M5V
-H4C)22S
-BFM)J2V
-KQW)G8D
-V61)6HG
-JX4)LH3
-PHS)P68
-V9M)56X
-1Q6)Y8V
-319)KX2
-M8F)881
-974)KSL
-LRP)XXL
-M3Y)Q39
-LC3)B9H
-4T8)ZRW
-KYB)T7L
-DXJ)72V
-SRP)D3M
-BRN)NGD
-43S)NJ1
-KWJ)VGZ
-DNY)F2J
-DKW)YT1
-6B4)6N5
-GRQ)RYT
-4KV)WFG
-6PG)T9R
-Q3T)V2P
-4M5)HLG
-WKZ)9ZP
-XTP)JMC
-PVZ)JN1
-5F2)26L
-76Z)R5P
-FVW)NS1
-MWS)PXD
-Z7Z)8S7
-CTH)7C2
-837)48K
-3SM)HYY
-J2B)1TS
-Y8V)BS6
-YYD)3XH
-4F7)BFM
-6S1)95D
-4KN)JV3
-GSZ)HVF
-9CP)GPZ
-BFN)LB1
-N72)741
-K6R)3WF
-P4J)QQW
-54G)469
-36T)GJ4
-HXM)X6W
-MR9)M29
-XMQ)SP9
-71F)TJR
-95X)DLT
-1ZX)QVK
-F1L)1SY
-B7X)XDB
-FJW)ZCR
-43X)1XH
-D5H)93V
-FQH)5RJ
-CLW)1RG
-X4Y)X9M
-CRH)DWH
-XWX)GWZ
-36J)TKC
-YFN)YJ6
-15X)MBT
-6T3)NDG
-8SY)4R7
-XMG)HR5
-KSZ)WKZ
-PM5)3K8
-BR4)J1T
-F72)GV7
-317)P1W
-CV7)SPK
-H53)PMX
-NDG)56N
-N68)ZXZ
-X3W)XGJ
-JRJ)S7X
-MKN)DBW
-8CM)953
-M2K)3XL
-95K)95X
-58S)4HL
-D95)L9Y
-FRH)KQW
-NLL)C3D
-X1H)FM1
-R1M)GGQ
-Y8Z)W1B
-KLD)G1V
-6CJ)R5X
-5C5)HN7
-T7M)ZXT
-SZF)B5W
-RPW)6TG
-3VP)2W9
-X2J)RXH
-DWG)C9V
-9FB)524
-1PZ)8ZD
-ZKZ)6S1
-L36)ZKN
-F1J)2D4
-LWC)6SW
-SWF)Y4V
-51L)MWS
-KFZ)52N
-GD1)HFH
-LFK)L36
-KPZ)ZQ6
-3NT)W48
-2CD)G3D
-345)JXV
-2LW)SWX
-9ZY)XTJ
-VWR)576
-STH)NHY
-L4X)M4L
-ZML)RN7
-RDF)7PB
-7FK)3KR
-GVX)DCF
-1WX)DD2
-971)H6W
-H6H)BPX
-BWQ)Z4J
-JPL)3SV
-QWJ)TR8
-376)H9P
-Q3D)1YS
-1N2)FQ6
-2LM)53K
-VSG)6DP
-KNM)8B7
-S7B)YXF
-YHB)JHP
-Y7N)CPB
-M29)3FB
-J37)C8B
-MK3)WHL
-MRG)TQ8
-BFM)DLH
-H4Q)9HF
-D81)R7M
-LRQ)ZKZ
-C1B)413
-BKC)PW6
-GP4)6MX
-C39)JSH
-BW8)TL2
-71Q)3YP
-415)H2V
-DBH)BR4
-JJ7)J2H
-G52)87N
-YV2)JN3
-7PR)Z3V
-999)G8M
-S7Y)JRJ
-G3D)88H
-SR3)NTR
-JY5)FC8
-MYL)B7X
-K7V)HM6
-FXY)L47
-NNN)GYH
-8JJ)Y5S
-3G5)37V
-FLP)4B2
-839)83S
-H27)CV7
-X4F)RXV
-S3P)WMZ
-LD2)SF8
-DYG)77S
-LGR)2LM
-7BX)G2K
-KNF)9S5
-JBS)R45
-T6C)CGH
-CNV)2BZ
-356)1KP
-P93)54J
-VGZ)31Y
-GNG)HDL
-RHW)222
-4T4)4T8
-WVY)M5Z
-KQ7)XMG
-K7F)S2N
-X6Z)Z9S
-XYH)WFC
-7BM)J2B
-H9F)LKV
-WDJ)HWH
-MWM)83M
-YM5)7J5
-Z62)8NR
-99Q)TVF
-VDP)C2N
-9VX)B5T
-YS6)KNF
-35R)ZH5
-JN5)Y4H
-MSN)XSP
-776)CJ4
-3FB)HXT
-HZV)6HY
-Q6N)HXS
-MBT)FTN
-3JP)YJ2
-4DC)KSD
-8PG)5QZ
-YSP)CNV
-THM)CST
-3X5)BPC
-ZG9)4KY
-8M6)MZ5
-FDF)XNB
-H4X)N72
-ZH5)J79
-KN7)ZXV
-1GP)R76
-K5R)CLZ
-W8G)XVF
-YJQ)HB8
-BWC)TB6
-WFH)T6C
-DPB)VYF
-K8N)KWJ
-C2V)HMF
-H93)HF3
-TR8)MFW
-RJ4)F66
-BS6)FVW
-QFW)5B2
-ML7)FB2
-TGY)X9Z
-PRM)ZV3
-4YX)4YV
-36D)N6X
-XLQ)TLS
-WMZ)NRF
-BCM)2CV
-M74)CHT
-JYL)LQ4
-RSN)KXR
-KNK)3Y2
-89X)BJK
-C2H)4YQ
-YYQ)VMB
-164)11H
-WYQ)WSF
-1RG)DRH
-GKD)LLT
-H53)T2F
-X2Q)F82
-B5D)5F8
-JK1)4F7
-1YB)P26
-B6F)552
-RTD)883
-ZPF)DWG
-JRV)DL1
-MLQ)S1Y
-TX8)5QV
-NDT)2MF
-HFS)61F
-HD8)TCN
-8BL)F2X
-4MK)R6Z
-WVN)RMY
-GGX)JCC
-GQ8)J11
-H4V)5FJ
-3JD)VNC
-7KS)9SM
-NTR)YV2
-4LG)JK1
-3XZ)GGX
-SVZ)P96
-4WG)N3V
-QY7)8N9
-XMP)LKL
-T4P)RLM
-J7C)JJZ
-7PC)Y23
-LPP)M6T
-F82)9KL
-9XR)VT4
-SF1)4T3
-FW6)N66
-QBY)D49
-BCM)17Y
-H1W)R6K
-ZVN)7QK
-BRH)7JF
-LKL)39C
-LV1)BJS
-8PC)FN6
-CHB)TBS
-ZLR)3XD
-8BD)BSC
-NVC)9FB
-Z9L)HK1
-FT3)BWL
-446)S8V
-LM1)D8G
-KH3)Q6P
-J8C)WFH
-YT1)SDH
-CGZ)X3V
-77B)V9M
-2RJ)H4V
-NHY)H47
-89B)HM7
-Z1V)58S
-17Y)1Q7
-J3F)891
-WDG)VSZ
-PJM)21T
-3YL)74D
-8XJ)15N
-Z2X)VHH
-N6R)R93
-5QV)8XY
-KSD)RYF
-6DQ)X8F
-Z2Q)MZB
-ZFG)972
-5LK)FT3
-D25)1CF
-RMQ)2HQ
-85N)HDY
-952)WFS
-T4J)B88
-2MC)JFH
-BRL)D64
-GJ4)65N
-ZC2)QLQ
-69T)3WV
-W4F)WMG
-74D)NCN
-3YY)19K
-JKG)6CJ
-S68)GGZ
-6N6)H2P
-3XL)ZVG
-S1D)14K
-GMK)DW3
-HJF)1D5
-9DP)P9D
-18K)Z2Q
-248)YD2
-DTK)MR3
-LH8)1GZ
-7ZC)RZJ
-YJ2)ZVN
-JN1)1FX
-3WV)289
-53D)GJX
-883)FXW
-79K)ZXD
-DLH)9X5
-BRQ)KHK
-2XW)R65
-RGD)GCY
-RNC)TR9
-HYV)54C
-SJF)BBD
-T81)F2T
-GZ2)KBQ
-G2K)48L
-PL6)B5D
-R76)Z4Z
-QVK)TDX
-F6N)M6X
-8XQ)3JP
-HXD)WNB
-CLZ)37R
-K6R)SY1
-X9G)8CM
-2W9)W4X
-ZXV)JC5
-HKY)1Q4
-KV1)QZC
-LMT)CLW
-Y4M)P57
-1YS)SJF
-NGV)N1R
-VLF)RGD
-FJ5)8WN
-PWG)V4K
-XDC)KY2
-3DJ)RV8
-1RJ)2GN
-WXT)MP2
-R89)JLR
-GGB)RDG
-Z6L)GQX
-ZJQ)TLG
-3WF)FQH
-5YP)5Z3
-C1B)CCD
-SBW)BQB
-41C)W4H
-1P5)YYP
-R5X)36J
-DZL)KNW
-P57)CN4
-C85)78L
-6YB)S7R
-CYB)LNN
-881)Z5X
-642)B5K
-X9J)SQT
-BJK)M39
-BMW)SHT
-2NS)VKN
-1C2)JHT
-H46)ZGD
-JY6)RF8
-V1D)82Y
-Z4Z)FW6
-CRP)JRG
-1VX)77V
-M2F)MHH
-B7X)JJV
-H29)7JR
-Z4C)N13
-HN2)PRV
-FTN)5FY
-8HS)Z4M
-JTP)GLS
-JST)8XZ
-4GX)T2P
-1GZ)V8W
-5MW)RT4
-9G2)QPQ
-X6C)NGV
-GP8)8SY
-J67)ZBL
-R45)BWC
-DDF)S37
-31R)PHR
-V4K)2L6
-J69)SYP
-DVF)R29
-DLS)1BQ
-72W)JKH
-JPV)FL9
-TSK)69T
-93V)T9M
-CST)WPW
-37Y)BJ8
-JR2)V4Z
-B7C)X1V
-WN7)GCD
-K65)TM5
-HFS)KYB
-1XR)TX8
-7L2)NXY
-57Z)M6W
-WMG)5HG
-F6S)3YF
-FMB)N6Q
-HS4)QNV
-XN6)X2C
-56X)Z5F
-NJ1)3M8
-65K)S2S
-MSJ)Z3P
-3RW)YJQ
-YRB)L4G
-5DZ)5YP
-TB6)TGV
-PDM)H9F
-MTR)B36
-GGH)2LS
-4S6)4KV
-SVB)MV1
-JQN)18K
-SRN)ZFK
-ZFX)HXD
-YNR)GCL
-8QM)GDK
-17G)B9Y
-JKZ)19N
-MJD)5BH
-NSR)24N
-T48)CF2
-Q3R)3TZ
-741)T7M
-P2C)G9Q
-V8G)17G
-GCC)54L
-53K)TC8
-ZGD)F7V
-J5Z)Z7X
-4YV)HZV
-GPZ)69X
-RYT)RTK
-Z6T)7ZC
-FMT)ZVJ
-56X)7KS
-M89)YDR
-F6Q)V8G
-Y4V)MY7
-1Q7)17N
-YV7)HQS
-YLQ)GJ2
-5WT)VQB
-YN7)DR2
-MPX)JBC
-LFL)DPB
-TNG)5Q1
-LW7)HC8
-HBR)Q6N
-9K2)DNB
-GXN)MHW
-SGZ)1HF
-WFS)N4R
-3GN)2K4
-5Y4)1MH
-M9W)7PR
-WCK)DMQ
-COM)TKH
-6XY)LTM
-WQF)1S2
-Z6N)3BD
-CF2)LFL
-GDX)ZQ4
-PGZ)1VH
-X5D)6CP
-TDX)MKV
-3XX)BHR
-SPL)DXS
-GM5)TZR
-M8W)DBH
-PFH)KGJ
-W4H)MKN
-SPK)LRQ
-V4P)63V
-5LQ)WDG
-L2G)49J
-HB2)6Q9
-YV4)NTM
-H47)9MW
-ZB8)Y8J
-C3D)HTQ
-9HF)9K2
-XDG)GDX
-FMS)239
-JJP)PKV
-6C1)BL3
-FNX)JX4
-SN2)237
-TSD)PNN
-RY1)JL3
-TX5)B2R
-BS5)HJK
-TBS)JNC
-1BQ)PR5
-NRS)FX1
-5GX)BKC
-8Y8)FRH
-GP1)KFR
-H1W)ZLJ
-FX1)WT6
-HJK)WFT
-7Z4)GT9
-FD8)RGG
-8VZ)5PJ
-1LW)PTY
-PTT)15X
-QVZ)6LR
-Q9V)WMP
-BLW)4DX
-554)35D
-YML)DND
-997)CTW
-L2L)6WB
-PR9)K5K
-6TY)5Y4
-2RQ)DVF
-5PL)NK7
-3WB)KJ7
-PXM)HN2
-NBJ)FMB
-BGN)BRP
-BTH)C2B
-9X5)MLT
-XGJ)KGD
-TDC)SBW
-56Q)K7F
-HF3)Z2X
-RP9)952
-PKV)K4K
-222)95K
-LX9)4WG
-RYF)HB2
-5CL)C4P
-J2H)6PG
-CXP)5GB
-38R)L7N
-NJ1)YDZ
-LBC)42B
-6WB)NCK
-524)YOU
-D8X)YNZ
-KY2)BRH
-W5X)DZX
-SP9)G1J
-JKT)LGJ
-J2V)PJT
-6SS)R9G
-8MF)2L8
-X4J)8JJ
-T1P)DLS
-NWC)76R
-YXW)RMQ
-Y64)9NF
-XB5)52M
-JKP)YC1
-FZ2)ZCD
-Q3S)CWT
-YCS)QDR
-S3M)792
-Q7K)N5M
-952)MYL
-GPR)F37
-Y7G)TFK
-V7H)2G3
-CHW)BVC
-FSM)TRY
-RS7)BFX
-KF6)3RW
-TGV)6BJ
-3TP)CXP
-DXS)BW8
-8QM)NT3
-R4Z)X43
-7X3)7N7
-JJZ)3WB
-GWZ)K7Z
-XQF)R1M
-2L8)4YX
-891)F1D
-S73)KS9
-289)3TB
-XJF)PDZ
-C29)K7N
-YH5)8F3
-9NF)8LD
-YX7)1NW
-ZLJ)ZGS
-DWS)CY2
-Z4P)XBM
-HKY)K55
-P6W)BWQ
-P1H)L64
-54T)25P
-W38)6KP
-CNV)9S2
-7FS)75T
-9SV)PQQ
-H46)VL3
-3FW)W91
-JBW)T99
-J89)MLR
-CJC)4B6
-NYK)189
-R2K)3CT
-S54)BHJ
-98D)HRL
-F1T)GRQ
-T9M)NZJ
-5B2)FNX
-PQJ)D89
-WG3)2W2
-ZS9)WW8
-FSG)5SS
-DW4)ZFG
-78L)49Z
-NGQ)2TJ
-M6X)GDP
-KXR)95L
-1WQ)FNT
-BRP)L4X
-J3F)5C4
-2NB)JJD
-SZL)5PT
-FNB)DN9
-LNZ)ZBG
-Z4J)NQV
-D6J)H54
-1CF)SZF
-QQF)1N2
-FFS)VF9
-NK7)KRM
-6HY)TDQ
-C2Q)16T
-JTK)ZLR
-1KD)N3R
-2XH)JKP
-BJ8)QHR
-G9Y)5F2
-4R7)HGM
-JGH)XS7
-72G)LLM
-QLQ)Q1Y
-TJL)8JW
-N8F)8SX
-JY8)HZD
-3W9)JPV
-WK4)HBD
-8X9)6XH
-YYG)WJQ
-HZL)NQZ
-BLY)JJG
-6CH)CR4
-GQ6)248
-DWH)5LK
-LQM)Z7Q
-SN2)4DC
-BF7)BTH
-Z9S)NG8
-F5D)HK4
-2S6)5NW
-LTM)757
-FC8)89N
-SBJ)4T4
-XLM)XQR
-S29)TDC
-1YK)RL3
-6J2)7NB
-SK1)7CS
-GBD)H77
-9KL)HJF
-LJ4)VST
-S9W)4KN
-99C)Z6N
-L58)M2K
-5JS)LR8
-WR5)9XR
-V6W)WK4
-9S7)FRC
-TM8)C39
-F4Q)Y86
-BN1)MTR
-BGG)GP8
-GJN)MV8
-TLG)XYH
-83S)CHW
-Z1H)GX4
-3TB)HHX
-J3Q)JQL
-5Q1)75N
-W91)57T
-DVJ)HBR
-B6F)M9M
-WMP)5XN
-WXQ)B17
-83M)XMH
-8N9)SAN
-LVG)8ZV
-L2J)7SB
-FNT)KM7
-BPC)B9T
-1TQ)K27
-JZR)RJ4
-L9S)H93
-189)36D
-TZG)2Z4
-5LZ)HXM
-SJD)Q3S
-WJQ)D81
-GP8)GZ2
-1TP)ZNV
-X2J)837
-DJM)KDJ
-7GP)NYK
-TQ8)446
-HZL)4L8
-29G)3VP
-4LZ)XTK
-KFX)6N6
-HPM)WWQ
-X1V)KVV
-Y64)V4C
-5GN)54T
-SJ1)QS3
-DM4)83W
-KDT)ZB8
-DL7)DKC
-TML)SPL
-LC2)K1W
-MHW)5Z7
-MXT)RQN
-9KL)K9L
-M3T)YRM
-KFR)Q49
-1DJ)SN2
-F82)2J1
-PWN)5PX
-YT1)V7F
-T6S)T1F
-B8L)WB2
-Q79)LKF
-853)RTD
-KBQ)356
-HTL)54G
-43T)53D
-B5W)PH9
-7KQ)8TX
-T2Z)1WQ
-8HY)29M
-552)M74
-STR)6HX
-FRV)HMM
-45F)J7C
-4Y9)HFS
-GNN)WJ6
-HXT)JQ8
-PNN)51L
-PHR)RK5
-MM8)H1B
-N66)G85
-C4P)W7Z
-991)FSM
-7QK)SLP
-GDP)71Q
-5MC)MRG
-F2X)HY1
-B9B)CWM
-SVZ)HN8
-XDB)4P8
-BS3)VFP
-VXM)KCL
-9G6)831
-9Z8)FNJ
-GX4)C2Q
-WFB)MZ9
-63V)MX3
-V8W)82Z
-RTK)319
-427)WY1
-4T3)VVN
-T2P)4LC
-CR4)FQS
-K4L)DTK
-HLP)WCK
-4YQ)H9N
-RK5)QFW
-GT9)SRN
-YXF)FXY
-V74)L3W
-MY7)2RQ
-JLR)JNS
-9S5)LPH
-H54)J37
-8XR)BLY
-QMC)T48
-4TY)1QG
-Z4J)H82
-BZC)LKD
-4CP)86F
-Z24)L58
-1FN)X15
-5FJ)QWJ
-K27)2CD
-3Z9)3W9
-L6V)J1J
-51V)HJ2
-WD5)Q99
-49Z)G6N
-Y4V)DDF
-MFV)3GH
-B1T)9CM
-X9Z)BG5
-2M6)1XQ
-2J8)3G5
-VMB)13Z
-51S)BMW
-1MH)LFK
-VBK)3D4
-SDM)8XR
-7NX)S2K
-52L)4NL
-LRS)664
-JDD)43S
-JJV)H6X
-62K)7L2
-WR1)L3D
-LN4)WXQ
-S52)C85
-F22)9SV
-LH3)8B2
-YBD)8MY
-TGM)N6H
-ZVJ)MSN
-S2S)5HV
-2MF)GP1
-9ZP)3ZK
-1LW)H44
-QTW)T9P
-GHZ)YV7
-W7Z)M3Y
-5FK)NWC
-97X)36T
-G7X)K5R
-GLP)XQF
-WQH)ZM7
-8YP)KF6
-WNB)WG1
-W21)1TQ
-VBH)XM4
-CY5)3N6
-G1V)K1G
-L2X)L9S
-2CV)3LL
-BKC)LC8
-R5P)JDL
-JL3)T5B
-HDY)FRM
-XL2)F29
-8Y8)N86
-C8B)FDF
-L3W)Z9L
-WJ6)6FW
-5HV)157
-DW9)1WX
-C2B)JR2
-6HK)7GP
-N86)971
-GZ6)KHJ
-V4Z)376
-WT6)F4Q
-H97)FP5
-M4L)MCT
-D8G)BCQ
-XPG)NP5
-8CG)GBD
-6SD)6X3
-54L)1TP
-N1W)MJD
-ZXT)VXM
-QH7)JN5
-S7H)4M5
-QSC)44B
-19K)QLJ
-951)25C
-PJZ)W21
-X8F)X4F
-CZW)SV8
-ZYJ)F5C
-XNR)KPH
-658)47Q
-D66)3GD
-ZGK)D65
-4ZT)YBT
-3NR)K3P
-WMD)HRP
-VGN)554
-2GN)WH3
-8SX)DXJ
-Z4M)MR9
-R1V)VDY
-1D1)CRZ
-CC5)MH1
-2NS)PXH
-SLP)1FN
-PTB)LYC
-V4D)Z5M
-Z2N)X77
-DR4)7KQ
-646)98D
-9PN)F21
-PB8)728
-WXT)4S9
-3YP)TGM
-6PG)776
-9KY)T7C
-5SS)LV1
-8HR)53Z
-972)FZ2
-XJ8)9PN
-6PB)Q35
-ZCR)42N
-NNP)YPG
-SL6)XL4
-1CG)YZJ
-QKG)5GX
-L94)HD8
-ZVH)GVJ
-R93)3YL
-4GC)2XH
-FNJ)ZL5
-2LR)YBD
-YDW)HMN
-S8V)YRB
-YV2)HS4
-6B6)6WZ
-SVG)LB5
-DMQ)VWX
-72Y)997
-MHY)3YY
-JX9)XHT
-MTV)DSB
-413)6SD
-DSB)25Q
-9HF)BRG
-B5W)P93
-9TB)XTP
-JN3)6W2
-TFK)MKW
-T49)4NY
-742)MSJ
-8F6)ZKW
-TRQ)3JD
-F2T)R8H
-LQ4)GMJ
-B9T)H46
-T2F)ZC2
-VC6)TJF
-YDZ)R48
-RGG)974
-DTK)H4C
-DTF)QCP
-7KM)Z4C
-GTS)MLJ
-296)424
-664)H86
-2YP)ZYJ
-V18)VC6
-7CS)SQH
-DZS)3X8
-QYT)8HS
-62Y)SQW
-D8X)YXX
-N2X)D3B
-P84)6J2
-JPH)DZL
-WM9)KWM
-TM5)GM5
-W4X)YYR
-TNG)LRP
-1KP)ZQX
-MZ9)72Y
-WJZ)MPF
-NP5)SQ3
-D66)5QS
-H7H)ZCB
-16T)V74
-X15)1WS
-8NR)Y7N
-237)DYP
-N4Y)CGZ
-Z8K)BYX
-8KF)N6W
-RF8)NMV
-WFC)7XF
-449)DDB
-D49)X1H
-TM8)78Q
-G6N)73R
-HGM)GD7
-F21)Y1R
-TRC)5HH
-N14)S73
-ZXT)BS5
-NG8)4L5
-8ZN)Q79
-4HJ)Q3T
-837)NDT
-1R7)R2K
-77S)6YB
-S7R)1XY
-2VT)KNJ
-WQ4)64D
-M5Z)PVZ
-RQN)8V9
-VVN)K2K
-V2B)N3K
-B17)7BX
-1W5)LMT
-1YW)X2J
-XJC)XJF
-P4W)4J1
-PRS)Q4P
-BMM)QB5
-L7N)H29
-4W5)GKS
-8WN)KH8
-N4R)39M
-4NY)14W
-19Q)ZG9
-W6W)J8C
-PWZ)4RW
-8F3)JBW
-BC8)F4N
-QG8)VDP
-YG1)GBY
-KRM)WJZ
-4HL)2TH
-W1V)FMT
-1BL)NC2
-RTN)R6C
-QLJ)PLT
-SQH)93Y
-KM7)9G2
-5Z3)JY8
-WB2)YSP
-3S1)4W5
-5BH)SXV
-28Q)5Q7
-PDZ)XD1
-D79)WHF
-6BJ)DQT
-5F8)C29
-46R)XNR
-NC2)2Y8
-T5B)863
-TJF)PDM
-L47)5QW
-F59)JX9
-RK6)QG8
-GD7)RWP
-863)7DK
-97R)LJF
-6N7)X32
-WLZ)XDM
-RXH)79K
-WG1)NQW
-BNR)1P5
-ZXV)QQF
-ZJX)GSZ
-X2C)L5L
-NVC)L2G
-T1F)FK2
-GGZ)KH3
-TZC)R9K
-157)FRV
-3CX)Z1J
-NS1)BGG
-MFW)36X
-DW3)C53
-88H)LP4
-FX4)F4M
-676)7BB
-9TR)Q3H
-P5H)Z1H
-LB1)XBR
-SWS)FLP
-4S4)QMC
-KNW)5LZ
-3PR)TVL
-JYK)46F
-ZM7)Z6T
-Q99)427
-5R1)MYP
-3TZ)YHB
-QPD)L6V
-HB8)K7P
-2W2)ZFX
-BS3)GWH
-953)S2C
-1BC)WKC
-S7X)9PL
-1RQ)KLD
-1XY)JRV
-D37)SF5
-PXD)P2C
-4L4)CVV
-MYP)2VZ
-WPW)SFQ
-N6H)8D7
-8B7)9RM
-297)Q93
-LNG)R64
-BXB)NSR
-DKC)MTV
-6C1)81V
-75N)21C
-XY7)THS
-BRG)YY2
-F37)RMV
-831)LYP
-M1P)GZ6
-ZXD)NR9
-6G1)35R
-H2V)51V
-Q9F)RRD
-FXW)3XX
-ZV3)CDP
-JC5)JGH
-Y73)KFX
-V6G)1W5
-7BB)DR7
-RN7)56M
-3GV)8X9
-HMM)41C
-JK4)V1D
-MFV)2J4
-QQW)H62
-N1R)CCC
-B5T)3GV
-G8D)8QM
-JNB)Z75
-8D7)ST5
-JXX)C1B
-G5Y)Y92
-G46)DW4
-3CQ)R9L
-FR9)Q83
-N6Q)JR4
-ZG2)S4Z
-JDC)NCF
-ZLX)2XW
-JJD)QLN
-YY2)FJ5
-Z3P)W7C
-LSB)N68
-64D)8BL
-PR9)J67
-N6X)M2F
-SQ3)XZ7
-MKW)KVM
-L61)PL4
-R2Z)2BF
-HGM)KQK
-222)RJQ
-4LC)PY4
-54C)N14
-MLR)Z7Z
-BBD)W1V
-JK1)32M
-SY1)3S1
-65N)3TK
-1X9)4HQ
-6F3)H6H
-489)GFB
-Y86)52L
-HN7)R1G
-48K)5MC
-4P3)Z6L
-CHT)8R9
-3M8)HKP
-RK6)PP4
-X77)V4D
-YDR)LCG
-DZP)3CY
-75T)TKM
-ZFK)5LQ
-6R6)8NV
-TVL)RHW
-HMN)BNR
-PG2)VN1
-FVQ)SQ5
-1HF)W5X
-WVY)TGX
-VYF)2N1
-BJS)LTJ
-72V)GCC
-8NV)BS3
-ZL5)P1H
-3KR)69D
-CZS)8WW
-4N2)72G
-KK2)JXX
-5Q7)KPZ
-4QP)HYV
-1SY)V7H
-CN4)JTP
-9TC)SVG
-K7P)T6S
-QFQ)999
-NGN)QKG
-BHR)DR4
-TGX)XPG
-DY3)YG1
-M5Z)PHZ
-KBQ)HVY
-9D2)N5J
-GMF)4LZ
-1P8)BFN
-GBY)KY4
-49M)LWB
-FNZ)FFS
-JL3)V2H
-LB5)7FK
-PM5)1BL
-PHZ)LH8
-NCF)YNR
-HSK)W6W
-5RJ)C95
-RPK)ZRK
-Y34)54N
-5QW)TZ5
-KGJ)43X
-P2V)Q9T
-NQZ)L7W
-WP4)S29
-J3S)C9G
-5C2)TX5
-3PM)PK2
-3GD)393
-CCD)3Z9
-QKQ)PB8
-FCN)LRS
-FQ4)M3T
-45B)B1T
-NPJ)MK3
-KGD)JJP
-F5Y)JKZ
-C6D)HSK
-TR9)7SS
-2TX)H73
-NFV)X5D
-C2V)43T
-M6T)KPS
-PK2)1CG
-TP1)N4Y
-1D5)D9Z
-MTR)97R
-3TK)X3W
-R7T)3VC
-PHP)1LV
-5GB)2H5
-YC1)24X
-S5H)W79
-FQS)JVF
-DML)6F3
-Z75)LXP
-DMJ)29G
-54N)GSS
-RWP)D79
-VBV)XWX
-VST)CMS
-GZ2)676
-N72)FP3
-792)ZJX
-H73)J17
-M8N)WQ4
-H6X)L5G
-3VC)LBC
-YBT)YR2
-LYC)4GX
-3VP)17F
-F5Y)9ZY
-8LD)BCM
-7JR)X45
-MV8)FY7
-JN6)31R
-MZ5)CVK
-239)S7Y
-DJ3)S7H
-RVK)6HK
-G85)WR5
-LKF)TZG
-SQ5)NP4
-HN8)H53
-CTW)MCJ
-8ZV)6YF
-2RQ)SR3
-MRR)Z4P
-WQ3)TYW
-6SW)L2J
-HFC)CTH
-N5M)1TK
-757)RDF
-R5Z)MHY
-NW9)V3P
-K3P)PWN
-GD7)GDL
-B2J)FN2
-BRJ)GK8
-S62)3NT
-9BH)38R
-KQK)WXW
-2LS)T8V
-4J1)5WT
-7J5)H3D
-W1B)F72
-F4N)NFK
-QCP)4HJ
-DWH)V5B
-87N)XY7
-F13)LWC
-7VH)67W
-PMG)DY4
-JMC)WQ3
-6HY)PTT
-YJ8)DML
-9CM)DM1
-54J)DNJ
-1Q6)8ST
-CKW)XS3
-ZKW)JPL
-111)YFN
-H6W)R5Z
-THS)X4J
-DTM)PWZ
-ZH5)8PG
-JR4)Z24
-NCN)8HF
-3BD)B8L
-76R)LN4
-N3K)97M
-JJG)N1H
-5JW)P48
-YJS)XMP
-4RW)T2Z
-D65)DNY
-KWM)ZGK
-5FY)9BK
-Y8J)7DR
-5PJ)1YW
-24L)PTB
-XTR)PJZ
-LLM)QSC
-R6Z)V6W
-H62)PQJ
-HT7)V18
-6CP)S3M
-WXW)N6J
-GJX)F5Y
-Q35)QY7
-3K8)F59
-8SX)SWS
-B2R)6N7
-R8H)CRP
-CGH)HFC
-NWC)QKQ
-P9D)BLW
-NK3)YLD
-CDP)2M4
-Q39)QB9
-F2J)X7D
-J79)QHD
-VXM)948
-X7D)GLP
-NP4)Q37
-69H)K1C
-FF1)65K
-P7X)YDW
-HTK)B6F
-273)CTT
-D25)164
-QGY)DXG
-G46)BMM
-QPQ)SZL
-HM7)G7X
-VMJ)J24
-5QS)RD6
-KVV)4CP
-6W2)8KQ
-1JP)PR9
-4B2)SF1
-FX4)NNP
-2N7)ZRC
-JQ8)N1W
-LKD)83V
-345)CJC
-HVF)QYT
-Y4H)7VH
-5LR)4MJ
-S2C)FSG
-V5B)BBN
-5X5)SJ1
-MKC)NPJ
-BWL)F39
-VDZ)Z27
-7GP)YB3
-8R9)R3N
-SQW)GNG
-3X8)V2B
-D89)SM1
-Z4P)RSN
-YB3)5LR
-V4C)1JP
-FGH)FF1
-GKS)R69
-M5V)H4X
-3CY)KXM
-G4S)D5H
-12P)1YK
-3Y2)R1V
-KTZ)DQW
-KD3)L2L
-KSL)F13
-R3Z)JKT
-G9Q)1D1
-2J4)5DZ
-X3V)MM8
-Z7Y)1BC
-G1J)G4S
-W4X)LFX
-YJ6)JMV
-FP5)KN7
-PCQ)8HR
-FN2)W8G
-31P)WFB
-YXX)CYB
-NXY)77B
-NCK)Z8K
-VPX)3TG
-CN3)JY5
-HXS)WQF
-FK3)DZS
-WFT)9DP
-XZ5)F1L
-639)T81
-R26)PCQ
-2VZ)YYD
-4S9)1PZ
-HVY)V4P
-K55)K8N
-2Y8)WMD
-69T)24L
-MHH)SRP
-WPS)YWV
-9PL)NHB
-D3B)KDT
-SHT)GJN
-42N)6MG
-K9F)YDT
-N2R)FVQ
-F3Q)296
-YML)8XQ
-6YF)B9B
-R13)Y64
-DNJ)DKW
-H44)ZTP
-1Q4)5JW
-RLM)BRJ
-LMJ)8HY
-CL4)LF1
-6GW)TMM
-VTP)JWQ
-TQL)G52
-3QN)VWR
-BFN)VPX
-T39)TSK
-Z1J)S3R
-F7V)XBX
-VNC)LW7
-WM8)788
-HBD)K9F
-JQL)JGJ
-3SV)WVN
-DM1)297
-VHQ)467
-PVJ)12P
-3GH)2M6
-6MG)KD3
-1NW)4GC
-VTJ)FKC
-Q8H)P86
-5QW)BXB
-ML7)V61
-94V)NK3
-XM4)TML
-V2P)5Y3
-CR6)JKG
-7LG)S9W
-8TX)V6G
-2JY)ZG2
-DVR)57Z
-VN1)Z2R
-ZC3)N2C
-SB6)RPW
-58W)1ZX
-VFP)X6C
-JQN)ZC3
-53Z)LQM
-KWL)TP1
-HKP)4BW
-S9T)Q19
-K2K)WD5
-WLM)YV4
-SFQ)4R1
-6KP)CTQ
-V3P)XDC
-CXM)MKC
-31Y)Z62
-XHT)L7R
-FK2)S52
-LVY)HFP
-RJQ)KV1
-9S2)2LR
-NZ8)DVR
-JKH)PG2
-ZQX)3TP
-81V)9CP
-42B)WDJ
-7PB)S68
-39C)6C1
-RR8)KSZ
-XL4)RTN
-3XH)RYQ
-78Q)TP3
-GCD)5YQ
-R29)LVG
-Q3H)646
-TMM)ZLX
-4B2)WDB
-6N5)449
-3XL)NFV
-CDL)6JS
-TMC)B7C
-R1W)ZWC
-LH3)XJC
-CHH)DFJ
-1FN)MLQ
-LMT)658
-HK8)BN1
-73R)1GP
-ZQ6)6B4
-Z5X)D37
-YPG)GTK
-8SM)VL6
-W5C)C6D
-4BW)YS6
-DYP)2TX
-R9K)BRN
-KS9)L9J
-XTJ)B25
-Y23)CHB
-NHB)LG4
-L5L)7Z4
-DRK)9SL
-ST5)NVC
-2WH)DTM
-1LV)SDM
-788)256
-TW7)6TN
-6FW)3CX
-BG9)4Y9
-67W)JJ7
-2D4)FR9
-Z8K)F1J
-LTJ)31P
-R94)YJ8
-5PT)MPX
-9SL)LGR
-FKZ)9G6
-DR7)SGZ
-SM7)9KY
-TKH)8MF
-VXB)4N2
-XQR)W38
-21F)HK8
-Y3H)XLM
-DBW)M8W
-11H)853
-1WS)66W
-DW4)KNK
-NQV)SVB
-6ZZ)8YP
-ZWC)5PL
-PP4)3CQ
-T8V)THM
-J1J)HMK
-CPB)Y7G
-GYH)9BH
-WPK)FMS
-95D)FJW
-HM7)CJJ
-ZGS)LBV
-HMK)BZC
-2BF)DWS
-LWC)85N
-L3B)M1P
-7C2)WG3
-3ZK)7BM
-GDK)8XJ
-LGJ)4R6
-DL1)JSJ
-44B)6T9
-KFT)CXM
-Q4P)STR
-LBC)6ZD
-GDK)STH
-6MX)F2P
-Y92)21F
-6ZD)YYQ
-HYK)58W
-3YF)KNM
-X9G)8K2
-QWN)JQN
-17F)KTZ
-CJ4)62Y
-KQW)GMF
-15N)S9T
-G1V)GMK
-M62)X6J
-8V9)SVZ
-WW8)DJ9
-FP3)28Q
-PMX)F3Q
-N3G)56Q
-46F)ZN3
-D3M)S3P
-D64)LVY
-72Y)ZHM
-LPH)WLM
-HY1)HZL
-L3D)QPD
-Q9T)X6Z
-6HG)3DJ
-KBP)9TR
-25C)9Z8
-ZR9)RYK
-TJR)5C2
-56M)X4Y
-TL2)5CL
-939)ZVH
-595)DTF
-Z27)D25
-54T)MWM
-ZBL)W4F
-6JS)H7H
-YWV)QWN
-5D9)S5H
-P96)KZ1
-TDQ)8JZ
-NQW)VHQ
-K9L)DMJ
-H6W)8F6
-2TJ)8NJ
-MCJ)T1P
-M94)JNB
-5ZJ)9BG
-KCL)RS7
-X6J)ZGQ
-PQQ)JN6
-S2K)5FK
-K7N)X2Q
-HTQ)GW4
-LTJ)RPK
-DD2)8J5
-7NX)Z2N
-6LR)R3D
-YR2)7Y7
-JBS)CZW
-ZRK)XJ8
-4L5)3XF
-GJ2)FNZ
-XTP)YCS
-HRP)P5H
-BRJ)J89
-RD6)ZR3
-YNZ)N8F
-2N1)XGH
-JDL)DLD
-YLD)94B
-ZNV)1Q6
-6TG)CR6
-GMW)KWL
-TZR)698
-RDG)VGN
-F1D)5X5
-3CT)6CH
diff --git a/2019/inputs/day_7.txt b/2019/inputs/day_7.txt
deleted file mode 100644
index b21d6af..0000000
--- a/2019/inputs/day_7.txt
+++ /dev/null
@@ -1 +0,0 @@
-3,8,1001,8,10,8,105,1,0,0,21,46,59,84,93,110,191,272,353,434,99999,3,9,101,2,9,9,102,3,9,9,1001,9,5,9,102,4,9,9,1001,9,4,9,4,9,99,3,9,101,3,9,9,102,5,9,9,4,9,99,3,9,1001,9,4,9,1002,9,2,9,101,2,9,9,102,2,9,9,1001,9,3,9,4,9,99,3,9,1002,9,2,9,4,9,99,3,9,102,2,9,9,1001,9,5,9,1002,9,3,9,4,9,99,3,9,102,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,101,1,9,9,4,9,3,9,102,2,9,9,4,9,3,9,101,2,9,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,2,9,9,4,9,99,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,1001,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,1001,9,2,9,4,9,99,3,9,101,1,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,1,9,9,4,9,3,9,101,1,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,102,2,9,9,4,9,3,9,101,1,9,9,4,9,99,3,9,1001,9,1,9,4,9,3,9,102,2,9,9,4,9,3,9,101,1,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,102,2,9,9,4,9,99,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,1,9,9,4,9,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,2,9,4,9,99
diff --git a/2019/inputs/day_8.txt b/2019/inputs/day_8.txt
deleted file mode 100644
index 21110e8..0000000
--- a/2019/inputs/day_8.txt
+++ /dev/null
@@ -1 +0,0 @@
-211202121222222222221222212222202022222222222122221220222222222222222222222202222222222222122121022222212222222222212212222222210222202212222222012222200222021222222222220222222222202222222222222022220221222222222222222222222222222222222222022022022222222222222222222212222222221222222202220222202222220202021222222222221222202222212222222222222122222220222222222222222222222222222222222222122220022222212222222222202222222222220222202212221222102222211202020222222222221222222222212222222222222022220221222222222222222222222212222222222222122022122222202222222222212202222222212222202212222222202222220222022222222222221222212222202022222222222222221220222222222222222222222212222222222222022122222222222222222222202202222222220222222202222222212222210002122222222222221222212222222022222222222122221221222222222222222212222202222222222222022220222222202222222222212222222222221222222222220222112222211012121222222222222222222222222221222222222122220222222222222222222212222212222222222222022120222222222222222222212202222222221222212202221222122222212122121222222222222222212222122022222222222222221220222222222222222212222212222220222222122021022222222222222222212202222222221222222202220222102222200212020222022222222222212222012221222222222122221221222222222222222212222202222222222222222121122222212222222222212212222222221222212222222222111222212022021222122222220222202222022022222222222122220221222222222222222202222222222222222222122120222222222222222222202212222222210222212212221222020222201222222222022222222222222222122222222222222022221220222222222222222202222212222222222222222222022222222222222222202222222222221222212202221222002222220202020222122222220222202222112221222222222022220222222222222222222222222212222220222222022120022222212222022222202202222222200222202202221222210222220022122222222222222222212222022021222222222222220221222222222222222202222202222221222222222020122222212220122222202212222222201222202212221222112222220002222222022222220222222222122121222222222022222221222222222222222212222202222201222222222120222222222221222222222202222222212222202222220222101222200212021222022222221222202222122222222222222222221220222222222222222222222212222210222222022022122222222220022222202202222222222222222222222222220222221022022222122222220222222222012020222220222122220221222222222222222212222212222212222222222220022222212222022222212222222222212222212212221222011222222012022222122222220222202222220122222222222122220221222222222222222222222212222221222222122020022222222222222222222222222202220222202212220222022222212102221222122222222222202222112021222222222022222220222222222222222222222222222202222222022120020222212221022222202202222212210222212202220222211222210102220222222222220222222222120122222222222022220220222222222222222222222222222202222222222222120222222220122222222202222202200222202222222222220222200012022222122222220222202222220122222222222122220222222222222222222202222212222220220222122122022222212222022222222222222202201222212212221222221222212122221222022222220222200222112022222222222222220020222222222222222202222202222220221222222020222222202221122222212212222212212222222212221222212222211012221222022222222222220222201121222220222022222021222222222222222212222222222200221222122220221222202220122222222202222222211222222202220222022222212002120222222222220222220222100222222221222022222122222222202222222212222212222221222222022121122222202222022222202202222212200222222202220222010222212102222222002222221222221222011022222222222022222120222222202222222222222212222210221222022221021222212220222222202212222212202222222202220222001222220012020222112222222222221222121122222220222122220020222222212222222212222212222220222222122022221222202220022222222202222222210222202202220222010222211022120222212222221222220222202120222221222122221122222222220222222202222202222210221222222221122222222220022222202212222202201222202212220222012222200212022222122222222222222222212222222222222122220121222222210222222202222212222201220222122121122222222222022222222222222212210222212212220222200222200012122222112222221222202222201220222222222222221221222222201222222212222222222210220222222122121222222221022222222222222212220222202212220222202222202012220222212222220222201222010121222220222222220020222222201222222212222212222220220222222122221222222221022222202202222202202222212222220222211222201112021222012222220222221222101121222220222222221121222222201222222212222202222022220222022221122222222222122222212222222222201222222222222222220222201202122222102222222222201222102220222222222122220222222222220222222222222202222211222222122120221222212221122222212202222202200222222222222222020222222222121222222222222222212222012021202222222022220021222222222222222202222222222200220222022221020222212220122222202222222222221222222212220212220222210122220222222222222222212222110222212220222222220021222222212222222222222212222001221222122020021222212222022222202202222212212222222202222212102222210022121222102222121222210222021121202221222122221022222222210222222222222202222001221222222121120212222220022222202212222202220222222212222212012222200022221222022222020222200222222122222221222022222122222222201222222202222202222110222222122221121222202221222222222202222222222222222202222212220222220202121222222222121222201222111221212221222022220120222222210222222202222212222202222222020021020202212222122222202212222202211222222202221212002222212122222222022222121222202222102121212221222022220022222202200222222212220222222211222222121221021222222221022222202222222222212222222202222212010222202102121222022222120222220222201021202222222022222222222222220222222212221212222200221222122221120222212221122222222222222202201222222212222212222222221222120222002222121222201222100021222221222222222120222212211222222222222202222001221222022020122210222221022222222212222222212222202222222212120222202022221222122202122222221222002221212222222022222222222202200222222212220222222111221222122221220210212221022222222202222212202222212212221222010222222102222222002220020222210222212120222222222022220022222202212222222222222212222002222222220121221210202221122222212212222222222222202202222202122222200222111222122220122222210222000020202221222022222221222222222222222202222212222211220222022220020212222220222222212212222222211222212212220202200222222102112222222222222222221222112021222221222222221222222222200222222202221222222212221022020220022220202222122222222202222210222222212202222202122222220112100222002200020222212222010120202220222022221020222212210222222202220202222011220220121121022022222221222222202212222222222222202222220222221222211012110222102221021222222222200220002222222022220121222212201222222202222212222212222221120220020121202222222222222202222222220222222212222202210222200022210222212220122222221222012220102220222222022221222212222222222202221212222021222022122222121012212222022222222222222200222222212212222212202222221102110222012212122222220222001222202221222222120021222212201222222212222222222011221120020221220111202220022222222202222201221222222222220202110222202012021222122220020222202222121220002222222122122122222222222222222212221212222220221122120020221110202222122222222212222212210222212112222222010222200112110222022222121222221222212020002220222222222121222202211222222212220202222222222220122120121011222221222222202202222222220222212102221222101222210222002222110221222202211222001021022222222022121220222212221222222222220222222012221121121021020121202220221222202212222001220222212112222202210222220212101222110211020222202222000220022222222122020222222222221222222222220222222022221122121121222002222221221222222202222210210222212212222202101222211102022222100220120212220222010020102220222222020222222222211222222202220222222221220121001022021110222221221222222222222011222222222022221202000222221022201222200221221010200222011220202220222022220220222212202222222222221222222212221220221220021210202221120222202012222112221222222022220202111222222102112222200220121110202222011020112221222222122101222212220222222202222202222101222222121122220001212221121222222202222220222222202112221222200212212112110222201201020101220222000220002221222022220011222212211222222202222202222012222122001122022210222220222222222022222222220222212102221222120202221202010222011201220010212222001221212220222122121100222222222222222212220212221001220221001120220221212221120222212002222010212222212222220202200212212112022222020220022001201222000020222222222122121002222202220222222212222202221200222220112120122211222222122222222212222012210222202212221212121212201202110222002200220211201222210022222220222122222010222222222222222222220212222122220222222122122200222221122222222012222221201222222112221212002212211022212222122211121222210222212222112222222022222211222220210222222222221222222102221221211022121110222222020222222012222201212222212202221212110222202102021222210211222210221222010020212021222022221021222200212222222222221202200111221121110122021020202221222222222202222022121222212012220212212212202212122222021220020120222222202122102220222122021211222201111222222222221212220101222022200022120002222222220222222002222022110222202202221222202222212202221222120220021210202222020122102020222022020102222220112022222202220202210100222122221122022202202222221222212012222110001222212202221212202212222212100222220211121101220222210021002122222022222222222212102222222202221222200002221020021022022002212222121222212112222100100212212112222202212222212002220220100211220102211222020021012120222022221222222211222022222202220212220102221021111020021201202220120222202222222012200212202102221212212202211022221222121212020221210222210100202222222122220212222201102022222222220212202000221222202222120212212221122222212102222111010222212122222202210212212002120221202221222002200222212020022221222022120000222210211122222202221212220012222022212020121120212222222222202112222111011202202022220202220212212002201220002212021002200222122222112221222122121222222210211222222222220222200111221020122122022121202220121222222022222220210212222022222222020222202022102221222202120112212222200112212020222122122111222212020222222202220212211101221222211221220120202220120222212102222120222222202102222222021202221122212222010210021122210222102120022220222122222210222202220122222202220222220001222020211220220020212220221022212222122010102212212222221202112222220002220221101212221021211222221200202021222222222012222221011222222222220222220222221120112221221012212220122222212022122122101222202022221212020212210022112221000220221102221222100120022221222022022001222210212022222222220222202220222222120121022002202221220222212012122200201202222202222222210212201012011221020221222212222222200220202122222022220102222222011222222212222222202012221221100221121212212222222122212112122222002202202112222222002212202212212221112220221111211222201000122121222122022020222201010222222202222212202221220122120120120120212221021222202012122021021212222112222212112210200122222220002212220112210222110021012022222222021021222212011122222222220202220110221020202121022212202221022022212212222101020222202202222222000222201202110221200222222010201212200221222022222222020000222201112222222220221212222012221120111220022102212221122122222112222012122222222122221202200222212122101221210210022001221222112122222122222122221111222212002222222210221212201120211021110120021201222222021022202022022101000222200022222212120220201212210221210222220222220212011221202220222222122000222210120022222220221202222021210020120120020221222221221122222122222202222222201022221210112212222122122220110202121112202222210022112022222122020122021210212222222011221222210010221222221022222121222221120122222122022012022202202012222222210200201002012221012221020200220202120211102222222222022110022202001122222112220212211120221222200221021020212220222122222112122201111202212102221220010200211002101221111211120121222212120102222022222222022000222212220022222021222212221012212122120021021100202222022222212012222002221222000002221212121201220222010222012210122002211202202201202020222222121101212202112122222212221102211011222120012221221210222221222122202122122212122202022102222202010221201002010221121210020102211222210220112021222122020221200210202222222200222122221200201222121122221112202222121022202022122001102222022112221220120222201212200221011200221212220202200211102020222022122212101221022022221122220112210220212220112222121012222222222222212012022201202212122212200200122210211122100222002210021201200222212202012021222222120112001220220122221102220012221201220221120002022011202221220022202212122210002202001202220212110222222002201221111222221220200212122022222220222222020120010211200022222212221212202110210222110000221120222220220222222102022122211222010222211221202202220112001222010211201201211222112002222220212222220112202221122222220101020022002211202221112210022212022220021120212202122122220222122001202222012201202102100221112210110120210212222111222222212022020111000222122022221202220002111220212121222222221020102222222222212222222222001222020022211221221200221012212220222202212101211222120010222121200022020200002210210222222102221022200220222020210212201101202221121021202122122220110212101100220220101202210202201220121200102211210212201122022020201022020000221202200122221011222012001022221022002211101122122221222120202202222222101212212201210220202211212102222222200200012220011212121100022222201122021212200201001122222022020012120011002222021201010021122221121022202122122110122222211021220200212202222222220221020200001011010202122210002020202022021012002202201222220011022110210112121221222112102000122221220220220012222102002202101112221211222210222222020022210210120112200222211111122021220122022002000211020022222010020022201021221121000100000202212221022021212112222202112212222222200221021200222102100121121221221010212202102200012220212120022212102222011022220220220211200121211220211001122222102221221020202202222010121212200100221202012222212112011222020210010010221212122200102022220221020002000212022122221202021122000112210021200010000210222220120121201122222021102212102111222201121202201202002020120200201212110202101010102022200121222211012221121122221000122021100210212222122211220212102221020122210202222110002212200011201200021201220022012110200222202010110002212220010120010022120110012200120022222122021212000212022122022010021101012221222020212102122120000212202002202202222222210012200102200200111220022112012202102021122021120011121200020122220001221102112201201020102122212202112220122122212222022110111222010201211210002212202112020020222212100211112122120200002020201020021202021200200022222010120111011000012120121101212002212222122121200022022212122202211001220201122201201012022011111200001112022002112002200220221121202120002212010122222010222121211010100220111112122101222222021021211212122121120212202000200210112220002211221002010102121110201000000011200112100002201220112102201101001200002222202202212002201221110202000102001202000200100102121000220100101111222110
diff --git a/2019/inputs/day_9.txt b/2019/inputs/day_9.txt
deleted file mode 100644
index 6ec0b92..0000000
--- a/2019/inputs/day_9.txt
+++ /dev/null
@@ -1 +0,0 @@
-1102,34463338,34463338,63,1007,63,34463338,63,1005,63,53,1101,0,3,1000,109,988,209,12,9,1000,209,6,209,3,203,0,1008,1000,1,63,1005,63,65,1008,1000,2,63,1005,63,904,1008,1000,0,63,1005,63,58,4,25,104,0,99,4,0,104,0,99,4,17,104,0,99,0,0,1102,23,1,1004,1102,1,26,1000,1102,897,1,1028,1101,27,0,1012,1102,33,1,1001,1102,32,1,1007,1101,39,0,1005,1101,0,29,1018,1101,0,0,1020,1101,1,0,1021,1101,0,21,1002,1102,1,35,1014,1101,0,36,1009,1102,1,38,1006,1102,1,251,1024,1102,28,1,1017,1102,37,1,1008,1102,1,329,1026,1102,25,1,1011,1102,31,1,1013,1102,892,1,1029,1102,242,1,1025,1102,1,881,1022,1102,22,1,1003,1102,874,1,1023,1101,20,0,1016,1101,24,0,1019,1101,0,326,1027,1101,0,34,1015,1102,1,30,1010,109,-2,2102,1,7,63,1008,63,36,63,1005,63,205,1001,64,1,64,1105,1,207,4,187,1002,64,2,64,109,9,21101,40,0,6,1008,1013,43,63,1005,63,227,1105,1,233,4,213,1001,64,1,64,1002,64,2,64,109,26,2105,1,-9,4,239,1001,64,1,64,1106,0,251,1002,64,2,64,109,-15,1205,2,263,1105,1,269,4,257,1001,64,1,64,1002,64,2,64,109,-9,2102,1,0,63,1008,63,36,63,1005,63,295,4,275,1001,64,1,64,1106,0,295,1002,64,2,64,109,-14,1207,10,38,63,1005,63,311,1105,1,317,4,301,1001,64,1,64,1002,64,2,64,109,28,2106,0,4,1106,0,335,4,323,1001,64,1,64,1002,64,2,64,109,-8,1206,6,351,1001,64,1,64,1106,0,353,4,341,1002,64,2,64,109,-1,2107,33,-7,63,1005,63,369,1106,0,375,4,359,1001,64,1,64,1002,64,2,64,109,-9,2108,26,-1,63,1005,63,395,1001,64,1,64,1106,0,397,4,381,1002,64,2,64,109,3,1201,-2,0,63,1008,63,38,63,1005,63,419,4,403,1105,1,423,1001,64,1,64,1002,64,2,64,109,-13,2101,0,9,63,1008,63,23,63,1005,63,445,4,429,1105,1,449,1001,64,1,64,1002,64,2,64,109,11,1208,1,32,63,1005,63,471,4,455,1001,64,1,64,1106,0,471,1002,64,2,64,109,17,21108,41,38,-4,1005,1019,487,1105,1,493,4,477,1001,64,1,64,1002,64,2,64,109,6,1206,-9,511,4,499,1001,64,1,64,1106,0,511,1002,64,2,64,109,-23,21102,42,1,8,1008,1014,42,63,1005,63,533,4,517,1106,0,537,1001,64,1,64,1002,64,2,64,109,-3,2107,36,5,63,1005,63,555,4,543,1106,0,559,1001,64,1,64,1002,64,2,64,109,-6,1202,5,1,63,1008,63,21,63,1005,63,581,4,565,1106,0,585,1001,64,1,64,1002,64,2,64,109,1,1208,10,40,63,1005,63,605,1001,64,1,64,1106,0,607,4,591,1002,64,2,64,109,7,1201,0,0,63,1008,63,42,63,1005,63,631,1001,64,1,64,1106,0,633,4,613,1002,64,2,64,109,1,21107,43,42,7,1005,1013,649,1105,1,655,4,639,1001,64,1,64,1002,64,2,64,109,7,21108,44,44,3,1005,1016,677,4,661,1001,64,1,64,1106,0,677,1002,64,2,64,109,-7,21102,45,1,9,1008,1015,44,63,1005,63,701,1001,64,1,64,1106,0,703,4,683,1002,64,2,64,109,13,21101,46,0,-7,1008,1012,46,63,1005,63,729,4,709,1001,64,1,64,1105,1,729,1002,64,2,64,109,-13,2101,0,3,63,1008,63,33,63,1005,63,753,1001,64,1,64,1106,0,755,4,735,1002,64,2,64,109,14,1205,1,773,4,761,1001,64,1,64,1105,1,773,1002,64,2,64,109,-23,1202,10,1,63,1008,63,30,63,1005,63,797,1001,64,1,64,1105,1,799,4,779,1002,64,2,64,109,13,2108,22,-7,63,1005,63,817,4,805,1106,0,821,1001,64,1,64,1002,64,2,64,109,-11,1207,5,24,63,1005,63,843,4,827,1001,64,1,64,1105,1,843,1002,64,2,64,109,11,21107,47,48,7,1005,1017,861,4,849,1106,0,865,1001,64,1,64,1002,64,2,64,109,15,2105,1,-2,1001,64,1,64,1106,0,883,4,871,1002,64,2,64,109,10,2106,0,-7,4,889,1106,0,901,1001,64,1,64,4,64,99,21102,1,27,1,21102,1,915,0,1105,1,922,21201,1,28510,1,204,1,99,109,3,1207,-2,3,63,1005,63,964,21201,-2,-1,1,21102,1,942,0,1106,0,922,22102,1,1,-1,21201,-2,-3,1,21101,957,0,0,1106,0,922,22201,1,-1,-2,1105,1,968,21202,-2,1,-2,109,-3,2106,0,0
diff --git a/2020/inputs/.gitkeep b/2020/inputs/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/2020/inputs/.gitkeep
diff --git a/2020/inputs/day_1.txt b/2020/inputs/day_1.txt
deleted file mode 100644
index fbbfa17..0000000
--- a/2020/inputs/day_1.txt
+++ /dev/null
@@ -1,200 +0,0 @@
-1337
-1906
-2007
-1939
-818
-1556
-2005
-1722
-1484
-1381
-1682
-1253
-1967
-1718
-2002
-1398
-1439
-1689
-1746
-1979
-1985
-1387
-1509
-1566
-1276
-1625
-1853
-882
-1750
-1390
-1731
-1555
-1860
-1675
-1457
-1554
-1506
-1639
-1543
-1849
-1062
-1869
-1769
-1858
-1916
-1504
-1747
-1925
-1275
-1273
-1383
-1816
-1814
-1481
-1649
-1993
-1759
-1949
-1499
-1374
-1613
-1424
-783
-1765
-1576
-1933
-1270
-1844
-1856
-1634
-1261
-1293
-1741
-668
-1573
-1599
-1877
-1474
-1918
-476
-1515
-1029
-202
-1589
-1867
-1503
-1582
-1605
-1557
-587
-1462
-1955
-1806
-1834
-1739
-1343
-1594
-1622
-1972
-1527
-1798
-1719
-1866
-134
-2000
-1992
-1966
-1909
-1340
-1621
-1921
-1256
-1365
-1314
-1748
-1963
-1379
-1627
-1848
-1977
-1917
-1826
-1716
-1631
-1404
-1936
-1677
-1661
-1986
-1997
-1603
-1932
-1780
-1902
-2009
-1257
-1871
-1362
-1662
-1507
-1255
-1539
-1962
-1886
-1513
-1264
-1873
-1700
-807
-1426
-1697
-1698
-1519
-1791
-1240
-1542
-1497
-1761
-1640
-1502
-1770
-1437
-1333
-1805
-1591
-1644
-1420
-1809
-1587
-1421
-1540
-1942
-470
-1940
-1831
-1247
-1632
-1975
-1774
-1919
-1829
-1944
-1553
-1361
-1483
-1995
-1868
-1601
-1552
-1854
-1490
-1855
-1987
-1538
-1389
-1454
-1427
-1686
-1456
-1974
diff --git a/2020/inputs/day_10.txt b/2020/inputs/day_10.txt
deleted file mode 100644
index fa8ea01..0000000
--- a/2020/inputs/day_10.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-71
-183
-111
-89
-92
-142
-25
-101
-52
-86
-18
-22
-70
-2
-135
-163
-34
-143
-153
-35
-144
-24
-23
-94
-100
-102
-17
-57
-76
-182
-134
-38
-7
-103
-66
-31
-11
-121
-77
-113
-128
-82
-99
-148
-137
-41
-32
-48
-131
-60
-127
-138
-73
-28
-10
-84
-180
-63
-125
-53
-176
-165
-114
-145
-152
-72
-107
-167
-59
-164
-78
-126
-118
-136
-83
-79
-58
-14
-106
-69
-51
-39
-157
-42
-177
-173
-93
-141
-3
-33
-13
-19
-45
-154
-95
-170
-54
-181
-6
-151
-1
-112
-96
-115
-85
-108
-166
-160
-40
-122
-12
diff --git a/2020/inputs/day_11.txt b/2020/inputs/day_11.txt
deleted file mode 100644
index 977ae5f..0000000
--- a/2020/inputs/day_11.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-LLLLL.LLLLLL.LLLLLLLLL.LLL.LL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLL.LLLLLLL
-LLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
-LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLL
-LLLLL.L.LLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLL.L.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
-LLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
-L.LL.L.L.LL.....L.L..L.LL.L.L.L.....L..LLL.L.....L.L...LL..L.....L...L..L.LLLL..L.LL......L.L.L.
-LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLL.
-LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL
-LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-......LL..LLLL.L...LL.....L.L.......L..L.LL....L.LLL........L.L.L.LL.....L.........L....L......L
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL..LLLLLLL..LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLL.LLLL.LLLLLLLLLLLLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.L.LLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.L.LLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLL..LLLLL.LLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.LLLL.L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
-LLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL
-.L...L...L.....L...L....L.LL.LLL.LL...LL.L..L...L......L..LL..L..LL..L.L......L.L.LLL......L.L..
-LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
-LLLLL.LLLLL.LLLLLLLLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL
-LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLL.L.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLL.LLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LL.LL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-...........LLL.....LLL.....LL.L..........L..L.L.L...L.L.....L........L......L..L..L...LL....L.L.
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLL.LLLLL.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.LLLLL.LLLL.L.LLLL.LLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLLLLLLLL.LLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLL.LLLL.LLLLLLL.L.LLLLLLLL
-LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLL
-LLLLL.LLLLLL.L.LLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-.LLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLL.LLLL.LLLLLLLLLLLLL
-L.......LL...LL...L..L.....L..LL..L.L.LLL.L.L..L.LL.L.........L....LLLL..LL..L.L..L..LLLL..LL.L.
-LLLLL.LLLLLL.LLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLL..LLL.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LL.LLLLLLLL
-LLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
-....LLL.LL....L.L.........L.L............L..L...L.LLLL......L...L.L..L....L.......L..L..........
-LLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL..LLLLLLLL.LLLLLL.LL.L.LLLLL.LLLLLL.LLLLLL.LLLLLLL.LLLLLLLL
-LLLLLLLLLLLL.LL.L.LLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.L..LLL..LLLLLLLLL.LLLLLL.LLLL.L.LLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLL..LLLLL.LLLLLLLLL.LLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL
-.L..LLLL..L.L.LLL.......LL.LL.LL......L.L....L.LLL.......L...L.L.LL...LL.....L.L....L.L...L.L...
-LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLL
-LLLLL.LL.LLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLL..LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL
-LLLLL.LLLLLL..LLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLL.LL
-LLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLL
-LLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLL
-.L..L..LLL....LL......LL.L.L..LL..LL....L...L..L.L.L...L..L..L.LLLL.L....L.....L..L...L...LLL...
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
-LLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.L.LLLLLL.LLLL.LLL.LLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-LLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LL.LLL.LLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLL
-LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLL
-LLLLL.LLLLLLLLLLLLLLL..LLLLLLLLLLLLLL.LLLLLL.LL.LLLLLLLLLLL.L.LLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL
-..LL.LL.L.LL.L...L..L..L..L...LL........L......LL.LLLL.......L..LLL.L.L....L.....L..LL..L.LL.LL.
-LLLLL.LLLL.L.LLLLL.LLL.LLLLLL.LLLLLLL.LL.LLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL..LLLLL.LLLLLLL.LLLL.LLLLLLLLLLL.LLLL..LLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLL
-LLLLL.LLLLLLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LL.LLLL.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.LLLLL..LLLLLLLLLLLLLLL.L.LLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL
-LLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LL.LL.LLL.LL.LLLLLLLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-LLLLL..LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
-.LL..LL.L.LL......L.L.LL...L..LL..LL...L..L.L..LL...L.L..L.....L.LLL..L..LL.L..L.......L..LLL...
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
-LLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLLL
-LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL
-LLLLL..LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL..LLLL.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLL.LLLLLLLLL.LLLL.LLL.L.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL
-LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL
-LLLLL.LLL.LL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LL.LLL.LLLL.LLLLL.LLLLLL.LL.L.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-.L.L....LLL.L.L........L..L....L..L...LL..L..LLL..L.L....L..L.LL....LL.L.L.....L........L..L.L..
-LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-LLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LL.LLLLLLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LLL
-LLLLL.LLLLLL.LLLLLLLLLLLLLL.L.LLLLLLL.LLLLLLLL.LLLLLLL.LLLL.LLLLL.LLLLLL.LLLL.LLLLL.LL..LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.L.LLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
-LLLLLLLLLLLL.LLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLL
-LLLL..L.LLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
-LLLLL..LLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLL..LLLLLLLLL.LLLLLLLL
-LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLL.L.LL..LLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
diff --git a/2020/inputs/day_12.txt b/2020/inputs/day_12.txt
deleted file mode 100644
index d7bc269..0000000
--- a/2020/inputs/day_12.txt
+++ /dev/null
@@ -1,755 +0,0 @@
-F93
-R90
-F81
-E3
-F80
-R90
-W4
-R90
-F64
-N1
-R90
-W4
-F11
-W1
-L180
-F28
-R90
-W4
-L180
-F95
-N3
-F71
-L90
-W1
-F1
-E2
-L90
-F85
-W3
-L90
-F28
-E3
-N5
-F47
-S2
-R90
-N2
-L90
-W4
-L180
-W3
-F51
-F77
-L90
-W5
-N5
-W3
-S5
-W5
-R180
-N1
-W3
-S5
-F36
-W1
-F34
-N4
-F40
-E2
-S3
-R90
-W5
-S2
-N4
-R90
-S2
-L90
-N4
-L90
-S2
-E1
-F2
-N4
-F65
-N1
-F46
-R180
-F60
-N4
-F45
-R90
-S3
-L90
-F70
-W4
-L270
-N4
-F49
-E3
-F52
-R180
-F5
-E5
-R90
-F43
-L90
-S4
-F54
-N1
-F7
-S2
-F91
-S4
-N3
-E3
-S4
-L180
-F15
-S2
-F90
-W5
-S2
-F80
-N4
-L90
-R90
-N4
-E2
-R180
-E5
-F62
-L90
-N5
-F77
-N5
-F75
-E2
-L90
-S4
-F55
-E1
-N5
-F57
-R90
-F6
-L90
-N3
-E5
-L180
-N2
-L270
-N5
-F8
-E2
-F88
-E3
-N3
-E4
-R90
-N1
-W5
-R90
-N4
-E3
-S3
-R90
-N1
-E2
-F4
-N4
-R90
-N3
-W5
-L180
-E1
-F2
-N4
-W5
-F80
-S4
-F7
-L180
-F96
-L90
-F16
-L90
-E4
-F78
-W2
-R90
-S3
-F29
-W4
-R90
-E4
-F39
-N1
-F48
-E4
-L180
-E1
-R180
-E2
-R90
-N3
-R180
-W2
-N5
-W5
-E3
-F25
-E1
-L180
-N5
-F44
-L90
-N4
-W4
-L90
-F72
-L90
-S1
-E5
-N5
-R90
-N1
-W3
-S5
-R90
-W1
-F14
-L90
-W2
-R90
-W3
-F76
-S5
-W5
-F93
-W4
-R90
-F57
-E3
-R90
-S3
-W1
-R90
-S3
-F8
-R90
-N2
-F46
-W4
-S1
-L90
-E4
-W5
-L90
-W2
-F69
-N5
-W5
-F80
-N3
-E4
-L90
-E4
-F25
-S3
-R180
-F77
-R90
-W2
-F19
-E4
-L180
-W2
-F37
-S2
-F68
-L90
-E2
-F66
-S1
-R90
-F66
-E2
-L180
-F97
-N3
-W4
-F43
-S4
-R180
-N1
-R270
-E3
-N2
-N3
-F65
-L90
-S2
-L90
-N3
-L90
-S3
-F23
-L270
-W3
-S5
-E2
-R90
-S1
-F85
-N3
-R90
-W4
-F58
-E1
-L90
-N3
-L90
-E2
-S1
-F14
-E2
-N5
-W1
-N3
-E1
-L90
-E3
-F43
-E3
-N3
-F21
-E4
-F53
-E2
-L180
-E4
-F20
-E2
-N2
-E5
-L90
-N4
-W3
-N4
-S2
-L90
-W3
-F96
-L90
-S3
-R90
-N1
-E3
-S5
-L270
-F41
-N5
-W5
-S1
-W5
-R90
-F79
-W3
-L90
-E3
-F22
-N1
-L90
-E2
-L90
-R90
-F20
-L90
-W3
-R90
-W2
-L180
-W4
-F57
-R180
-N3
-L90
-F36
-L90
-E2
-R90
-N2
-E3
-N1
-W4
-W4
-N3
-E5
-F54
-R180
-F98
-W1
-R90
-F21
-S1
-L90
-S2
-L90
-S2
-F90
-E4
-S2
-R90
-N5
-F25
-N4
-W3
-N2
-F27
-S3
-E3
-N3
-F15
-L180
-S4
-F62
-W2
-L180
-E2
-N2
-L90
-R90
-F97
-R90
-S1
-R90
-E2
-F16
-W2
-E1
-F89
-W1
-L180
-S3
-W2
-S3
-E1
-F92
-F30
-N1
-E2
-S1
-F76
-E1
-S5
-W5
-F28
-W4
-L90
-F44
-E4
-N5
-F25
-R90
-F59
-S4
-F58
-S2
-F19
-W5
-S4
-E5
-N3
-F37
-E1
-L90
-F40
-E5
-F56
-S2
-W5
-F73
-N5
-F2
-L90
-F18
-E2
-N5
-L90
-F56
-R90
-F18
-W1
-S5
-E1
-N1
-L90
-W2
-E4
-N4
-E1
-W4
-N4
-L90
-N3
-R90
-W5
-S5
-F2
-R180
-F96
-R90
-W3
-F26
-L90
-S4
-E2
-F43
-S2
-R90
-F61
-W5
-F93
-R90
-F95
-L90
-E4
-R90
-N4
-F47
-R90
-W5
-L90
-F42
-L90
-W5
-F87
-R90
-N1
-N2
-E4
-F64
-S5
-L270
-F86
-S4
-W3
-S1
-L90
-F72
-R270
-W1
-F17
-S1
-E2
-R90
-W1
-N1
-F42
-N5
-L90
-F87
-F66
-L90
-N2
-W2
-L90
-S5
-F7
-R90
-N4
-L270
-F2
-W1
-N4
-F94
-W5
-R180
-S4
-F15
-E4
-F76
-N1
-E2
-F68
-S3
-F50
-R270
-E5
-F77
-R90
-S3
-E2
-N3
-S4
-F39
-S1
-E5
-S3
-L90
-E4
-S2
-W3
-F54
-R90
-F44
-L90
-W3
-F59
-R90
-N3
-F37
-E1
-F75
-R90
-F31
-W3
-F70
-S5
-L90
-E1
-F67
-W4
-L90
-S1
-W5
-S1
-S4
-W2
-E2
-S3
-R90
-S2
-E5
-L90
-F43
-R90
-E1
-S5
-F42
-L90
-W1
-N2
-E1
-L180
-S4
-W1
-L90
-F81
-E1
-R180
-N5
-R180
-N5
-L180
-F65
-R90
-F64
-W4
-S4
-R90
-F70
-E1
-S1
-F50
-E2
-S4
-E4
-N2
-S1
-R90
-E4
-R90
-F70
-R90
-N4
-F71
-R180
-F80
-S3
-L90
-N5
-L180
-F11
-N1
-R90
-W2
-N1
-R90
-W4
-R90
-F67
-W3
-R90
-W5
-L90
-E4
-F90
-L90
-N4
-L180
-F48
-R90
-W2
-F94
-R90
-N4
-L90
-W2
-F2
-L90
-W1
-E5
-S2
-W5
-S5
-E2
-N3
-W5
-N1
-F98
-S3
-W3
-L90
-S3
-W4
-R90
-W1
-F64
-N5
-R90
-S5
-W5
-F84
-S1
-E3
-L90
-S3
-E5
-F6
-N4
-W1
-R90
-E4
-F14
-N1
-R90
-F31
-L90
-F24
-F4
-N4
-F54
-S3
-R270
-F98
-E1
-L180
-F2
-E4
-F70
-W1
-R180
-N5
-F23
diff --git a/2020/inputs/day_2.txt b/2020/inputs/day_2.txt
deleted file mode 100644
index 3a0963f..0000000
--- a/2020/inputs/day_2.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-15-16 l: klfbblslvjclmlnqklvg
-6-13 h: pghjchdxhnjhjd
-4-13 n: nnznntzznqnzbtzj
-10-16 r: nrrrrkrjtxwrrrwx
-1-6 t: rttftttttttttmdttttt
-4-12 l: zhllfxlmvqtnhx
-6-8 d: wxpwgdbjtffddkb
-7-9 q: rqcqxjqhsm
-6-8 x: xxxfxdxxx
-5-9 d: dwnwnbsddfmc
-2-6 j: jvdrrjchml
-8-10 x: xxxcxxxzxxxxx
-15-16 f: ffffffffffffffnfc
-3-12 v: vgvvvvvvvvfqvvvv
-2-5 p: tknppm
-11-12 r: frrnrfqtshrgw
-13-16 f: rfjmkrqkqrxmfnqj
-3-5 f: ffffxffn
-2-4 f: fffwf
-11-13 s: srslssshssssx
-1-6 c: cccdcn
-2-6 t: tthhnc
-12-17 w: wwwwwwwwwwwmwwwwg
-5-6 k: kqkksskkp
-4-5 p: ppppx
-5-12 h: hbjhqhdwnqxhhsh
-6-8 p: ppgzpppw
-3-4 z: zzcz
-6-15 x: hfvxxsqbfxxlhpxtb
-4-7 m: qmxzhgt
-18-20 b: fvzbbrbcvskxrpkwnmwb
-1-11 c: ccccccccccggccc
-1-3 p: dppp
-2-6 j: fjbmljmdb
-2-4 l: slpmqpk
-3-5 b: stbpbbndtgzxlsnbdk
-6-11 h: hlzkdhhhrhchmhbhl
-1-4 w: wwpv
-10-12 p: pmpppkpppgph
-11-14 f: fbdxffpffffffkfffjvf
-4-9 v: vkvfhfvvrvvv
-16-17 t: tmtbztrptdlvttvkt
-2-6 w: wwwwphwwwwnwwj
-6-11 x: xxxxxxxxxxkxx
-9-10 t: ttftchttnd
-2-9 w: wkwwwwwwlww
-2-4 g: ggvcgggggggggg
-5-6 d: dldddsddddddd
-5-8 j: jddjjnld
-9-12 l: xldxlklvlkll
-2-3 w: xwnrwdwndlvl
-16-18 m: mmmmrmmmmmrvvmmvmm
-3-4 t: ctts
-11-12 b: ndgjdbppcdbhhssw
-2-11 s: nssksssnssxvq
-2-5 g: qggwcvf
-10-14 l: llxlllrjlmlllwllll
-8-9 w: wwwwfpwtvtjwjw
-8-10 m: mmmmmmmmmmm
-1-11 z: rldjzzzpzzs
-16-17 v: qvsrnvvvwxgmvjjcvhcx
-14-18 k: kkkkkkkkkkkkkkkkklk
-2-3 q: qqrqqqxqqqq
-4-9 c: lclckhcgn
-2-3 b: nbbbbldlbbb
-15-18 v: vtvvrvxvvnvxhvnvvv
-4-7 q: qqqnqqqq
-3-13 j: svjjdcnkwnbpl
-4-11 q: blnqvqsngwj
-3-4 j: dxdkj
-5-7 c: dzxbsctqwclcgc
-3-4 f: jfhffff
-3-5 t: sttwk
-7-8 t: tnqtvsztqwpvtftknt
-1-12 r: grrrrrrrrrrrrrrr
-7-8 k: kkkkkkqkk
-3-4 l: llls
-1-14 h: khhhjhhhhhhhhh
-3-5 d: ttcdddd
-1-7 w: dqwhwkww
-4-5 p: pppqppppp
-10-14 l: lqlltwlllllllzjk
-15-17 d: ddddddddddddddddcdd
-1-8 z: xpbbjxrzlzznxlz
-1-2 v: vrvv
-7-11 l: llllllclllslll
-3-14 h: hhvhhhhhhhhhhhh
-6-7 m: mmgpbjmgqmm
-9-13 h: hhhhhhhhhhhhfnhhhhwh
-12-17 c: cccpfcccccnccccqscc
-6-12 x: kqfxbhxbdxxxl
-6-8 z: zqkbtzzb
-6-8 l: llllllllllllll
-6-13 d: wdzdxdddddlzdtbd
-3-8 h: gzcknrxkjgtggnqwqjs
-1-6 t: tttttvtt
-5-8 x: fjxnxrtn
-6-9 z: zzzzzzzzszzz
-2-4 v: vpvvtv
-1-7 w: wcwrxgf
-2-3 t: vxftld
-1-2 n: nnxmntsqzk
-5-11 l: nmvllllnlckl
-7-13 c: cwchccjcrfsccc
-2-3 z: dzdz
-7-8 s: sddgbhws
-3-11 w: qqsqrgmwwmwgfdhpsct
-16-17 q: qqqqzqqqqqqqqqqqh
-7-15 h: thqthdphmbhhjphhh
-6-10 k: gcflljjwkk
-9-17 f: ffffffffffffffffdf
-10-12 q: qqqqbqlpqqfdqq
-3-16 x: dbxmwtlqdmvldxlgxdhk
-1-2 x: xxjxh
-10-11 p: ppqpppkpptp
-3-5 w: wwwwwwwww
-10-11 j: xjmhqgdznjf
-9-11 n: dxnnnnnnnnmnnn
-1-5 l: mlllvllwlrblllll
-14-16 q: tqqqqqqwqqqqqmqqqqq
-2-3 b: nvbbbcf
-5-8 x: xmkxxgxq
-1-4 x: xxxfx
-1-6 n: nnnrnm
-9-17 p: pppppppppppppppppp
-2-4 d: ddqd
-13-14 p: fmpkxpprppppzhpp
-5-6 t: tttttgrttt
-10-12 r: rrrrrrrrrlrrrrrrrr
-4-7 h: gnmqvqrhwhh
-4-5 m: smsmmmm
-4-5 q: qgzqb
-6-12 c: rdnnsccnrjkcnm
-4-16 k: gfkxktpwhxzkgcdnb
-4-5 f: ffgvf
-6-13 n: nfslcrnkksfmnmvcfnnz
-15-18 s: sssqsssssmshmsmsss
-1-15 v: vvvvwvvxvvvcvvwvvvvv
-2-8 h: gphlnhph
-4-13 t: vtjvrcxqwbsrk
-2-10 t: tvttftzttttqttt
-12-13 t: dvsbstlkfpztdqs
-7-8 w: rvwncwww
-13-16 v: vlqzjlvxljrvvjvvzp
-12-13 w: wwwwwwwwnwdwwgwwwx
-14-15 d: dcpdddddddddddmdbd
-1-3 b: bbdbbbb
-11-12 t: rkdtncbtkktzmvtghb
-3-7 n: nzbfgbnnx
-5-13 v: vsvbkvvvvvvvv
-3-8 n: nltdrmbn
-14-15 p: mzkmmqdfpcptzbzc
-4-6 q: qtqkgqfmqwm
-9-10 v: vvdvvxvvxvwd
-5-7 m: mmmmmmkm
-6-7 k: kkkkkgkk
-8-9 h: shhhhhhhh
-8-11 p: pppppppppczplbwcpb
-11-17 k: kkkkkkkkkkkkkktkc
-9-17 w: mwtfbvsfnhwxqqvxw
-8-12 j: jhjjjjjrkjnjjjjjjjj
-3-5 g: sgfgqgg
-12-14 j: jjjjjjjjjjjjjjjjjjjj
-1-11 f: jsffffzfffffxffftf
-16-17 f: fffffffffftfffffff
-2-4 k: klkwkk
-5-8 g: gtjngzkhgb
-4-7 b: bbbmbbbb
-4-5 w: wwwdw
-5-15 g: tplhhgmggbhggrllqg
-9-13 v: jvvbqvsbvzhxvh
-1-3 d: ddsddn
-2-5 w: cfwds
-7-11 x: xxxxjxvvxvxhxvml
-5-6 v: jwqxvb
-3-15 s: ssqsssssssssssss
-5-9 d: dddddddddddddddd
-5-8 l: vklnlclj
-10-13 s: sltdlfbssxsss
-11-18 j: hxjxjnjcpmkppnpjpjk
-4-6 t: ttbzhvt
-2-17 v: rzmhrssrjvpncwqwl
-2-4 x: mtcxz
-11-12 d: dddddddwddbd
-2-13 h: whgpdxvkfxrhg
-5-7 d: ddddddxdtddddddhdddq
-4-8 b: lhcfbkbbdmb
-8-15 l: lvtmkgwllqttgplbgjj
-3-5 n: nqngjvw
-12-19 m: mmmmmmmmmmmmmmmmmmgm
-5-9 g: grhgsdcwgmdt
-6-9 j: msgrcrfvzksfxxjq
-6-10 s: xdssssssssssssssg
-8-9 h: hhhnhhnfhh
-12-15 f: fffffffffffffffwfff
-3-7 p: pzzpbjkfcczbmnpkf
-6-7 r: cnjlbhr
-2-5 f: dwxcftrbljgstf
-5-11 h: hhhhjhhhhhqh
-16-18 r: rrrrrrrrrrrrrrrrrmrr
-2-4 r: rxmrd
-7-9 c: ccccczccccc
-7-13 d: ddddddddddddfd
-3-11 k: mmkspkltjwm
-8-11 c: rvccccgtclc
-1-3 v: vvhhv
-4-7 t: jttnttgx
-4-16 n: nnnjnfnnnnnnnnnnnn
-5-6 m: mmmdmqmm
-9-10 x: xxxxxxxkxrx
-2-4 m: tmcmzjmvtcghlgm
-6-7 q: lqqjqqnzqqmq
-16-19 k: kjwkhkkjhkskskpnkfk
-19-20 b: pbbpsbnbbmnntbnbbbbn
-4-5 p: ppppmp
-3-4 d: grlqndd
-4-7 n: nnnnnnsn
-9-12 k: kkkkkkkkfkkkkk
-4-10 h: hfhhhxhfhd
-4-9 t: ttttxbbbcdmxsrhjj
-4-11 l: npxwbsmklbls
-17-20 d: dddddwdhdkddjdddtfdd
-3-4 s: nldssq
-4-8 s: sssdsssgs
-5-16 t: ttttprtcttttttzt
-9-17 j: tjjtjjjjgljjjcjjfj
-7-8 b: bbbbtbkbb
-2-13 l: szllllllllxllll
-8-11 n: bmpnwrnngnmsfw
-1-5 d: jddqtdwddxddjd
-10-11 s: hqgnvslssstqdnvs
-14-16 p: ppppppppvpplpgpp
-2-8 h: khhjfcqp
-6-7 d: fxdpdwvdjkd
-5-7 n: bnnprnf
-9-13 f: vfffwfffffffkfxff
-2-10 j: vjhcggzrjqt
-5-7 g: gggfggzwgg
-5-6 d: ddbsjddfsdnddxfpgdd
-12-13 g: gggqjgxgzpgsggxggxk
-1-8 l: hlslllllll
-12-13 f: sbfftpvbjsmff
-6-7 s: hqcthsb
-5-11 s: qsstnssssqsrsskdss
-2-6 x: hxrfnjfclx
-1-2 w: swwwwwwwwwwwjwmwwwww
-7-12 s: whsbkgsmvnfjnnkq
-10-12 l: fllllllllsllll
-8-9 s: lsssssssqs
-1-7 p: pdpppghqppxpppppp
-1-3 x: jhxmjhkdrxgd
-1-7 b: lbxbbbvbwbbbbt
-4-5 c: cdckcbcmqcc
-5-9 k: kkmklhlmkkgkrld
-12-18 x: dvjxqxxxxxdxxxzxhp
-5-8 h: nhfhnfqx
-15-16 k: kkkkktrkkkkkpkhqxkkd
-1-13 j: dcnbwjxllpksj
-11-13 v: wvqhznrrfgmnvz
-2-5 m: bpjbmbrmfh
-10-15 t: mgtttttqspthnttkktt
-9-10 n: nnpnnnnpnh
-8-10 b: bjbzhbbbcq
-4-12 n: nnnvnnnnnnnnnn
-13-14 v: zbkchmmvjvsgkvhcz
-2-9 j: jdqjgnnjjjvjt
-11-16 g: ggggxqglgglfhvgggn
-1-2 b: bsbm
-8-11 v: lvvvjhvmxvvvv
-5-7 x: xxsxxxpr
-2-15 t: stwqdkrqcwbmngtd
-5-8 r: rcrrvndr
-5-6 v: vvvvvr
-4-5 x: qpxxr
-1-2 k: nkkkkkd
-10-13 r: znlqhvwdvrqbrrrfzwc
-1-2 h: hwhhhchhhhhhhhhhhh
-3-6 b: bbbbbvbbbvbb
-13-14 s: ssssssssmssssdss
-7-11 x: cwxhmnhzxrxdrzzxbw
-5-16 m: rgjtmrqqmfmmckxm
-17-18 b: bbbbbbbbbbbbbbbbbk
-11-20 k: kppkqkftkgkkknbtglkb
-13-14 t: rtcfrkjvtgnrtf
-5-6 z: kdzjxzjgmd
-2-3 p: rxppj
-9-12 b: mtpbbbbbbbbgp
-8-9 b: rbbbbbsbbbbxb
-13-17 r: rxgbrrnrrrrrrkrrlrrr
-8-11 w: pzqswqwcfln
-3-4 x: xxxx
-6-9 j: fjhkjjklc
-6-7 m: ctmzmfm
-8-9 l: lllllllgllpts
-8-9 t: hgpwblqkvqtb
-4-7 d: dddpddd
-4-5 c: ccccwcccg
-1-7 q: lvvtpqqvnsqbzqpr
-8-15 q: qqqqqqqqqqpqqqlqqq
-4-8 f: frfffffffxf
-7-12 r: rrrrrrrrrrrkprrtrrrp
-14-15 j: jsjjjjjjjjjjjjl
-6-17 b: khgflbrbrjbgzjtjt
-5-7 j: jjknjpw
-2-9 h: rhlqbdklh
-5-7 j: lrtvccjbzgjh
-12-14 t: tltwtxtctttnttttft
-8-9 q: qqqqqqqqx
-4-15 p: ppppppppppppppc
-2-3 v: vvvvv
-5-7 h: djvplxb
-11-12 g: gjxlvggsgggxsgfgp
-5-6 g: gggggfg
-1-6 x: wxtxxxxxxxxxx
-1-4 r: rqrcrvrzbrxrwjr
-9-10 w: wwwmwwwwpww
-7-15 z: pzrbrxpzzzzzntzv
-4-5 q: qjqwqqnlqhclq
-12-16 g: ggccgzggggsggjgg
-11-13 b: phbmbsgkvszbbrbb
-2-3 l: xhlbhl
-1-7 q: qwdqmtv
-5-9 x: xxxxjxxxxx
-6-8 p: kvpwqbdp
-11-13 t: tqttttttttttmt
-9-16 l: wzdxdmlxlkfjknnz
-1-11 j: vjjjjjjjjjjj
-2-18 t: tsttttttttttttttthtt
-6-7 n: fnnncnl
-3-5 s: lssvgfssgsshsvstsss
-3-5 h: hhhbhhh
-4-10 x: tsxxxxxxbls
-2-4 n: nnjw
-17-18 p: bptpftnxjchrwthtppk
-14-15 d: dddddddddddddddd
-10-14 m: mmmwnmmgmdmmmmmmmmm
-8-9 k: pkpqffpkktbgkbk
-7-11 l: lllllllllqplllllllll
-11-15 n: nnnzngknbnzdnsnnn
-2-4 l: vbqm
-10-11 w: wwwwwwwwwwq
-3-5 x: xxtxxxxx
-3-15 b: spbcxjlbbbrbbbbb
-4-5 n: nvfsn
-13-16 n: bppjnncnbgjndnnntwgs
-1-8 t: mttttttttt
-6-9 d: jvmssdkdhxsd
-9-10 d: gdrllcfdnd
-7-11 c: cscxccccnztccccz
-15-16 p: pppppkphpppppspg
-2-4 n: vnkjlwwsswscmxktnj
-9-11 r: rrrrrkrzslr
-7-10 t: tttgqtnttttttttt
-4-10 b: bbrzbzpbsbnbbjnbsb
-7-8 j: jlljxtsj
-5-15 z: lzzzfqzzzzzqzzzzzz
-10-11 r: rrrrrrrrrrcrrrr
-6-8 t: tztpbttttt
-2-9 c: vcgtfxfbr
-9-16 r: vgjrwcxhrrhbzxnj
-17-18 r: bczjtmjwrtzwvmgbrl
-5-6 d: dqgddvd
-1-2 r: krzrkr
-8-9 j: rxjjjjgbj
-8-9 c: cjccccccc
-13-14 b: bbbbgbbbbbbbbvb
-5-6 p: hbhwtp
-1-2 w: wfhrfsfbjtpkqcjrwdb
-10-13 q: qqqqqqqnqrqqzqq
-3-4 m: xcmcz
-11-15 d: dldddcddddjddqd
-4-10 h: khhlhhhhhhhhhhhh
-2-4 d: bdfpmxzqzbzmxmmwg
-4-5 l: lgrbl
-9-13 s: ssssssssfsssss
-7-8 p: pplkpmkppppppxp
-3-8 j: jjjjjjjj
-7-8 f: jfffffhzfff
-2-5 p: pppppppp
-8-9 l: tlclllmlz
-4-5 m: mtrmx
-13-16 x: xxxxsxmxxxxvwxxw
-5-8 n: jknnngnv
-4-7 p: ppptppgpppp
-12-15 r: rrrrrrrrrrrxrrrhr
-2-9 s: sssssssssss
-5-6 z: zphzzr
-13-17 m: mmlmmsmzmsddbxmkb
-5-7 g: gggggggg
-8-9 f: ndzfvfkfz
-2-10 g: wtngwdkcxgrth
-6-13 r: rrqrrqrrqrrrcrrrr
-1-6 z: hfzzzz
-10-13 j: jjjjjjjjjjjjdj
-5-11 m: wfqvmhbjhhnmzdlmpjc
-6-8 d: clddzxcdghn
-8-12 n: qfqbbvkpjbznrz
-3-6 r: rrbrrrrrrx
-9-10 r: rrrrrrrrrrr
-4-5 m: chltmcm
-7-8 r: rrrnprrzrhr
-3-4 j: jfcj
-16-17 n: nnnnnnnnnnnnnnnnwnnn
-7-8 r: rrrrrrnfr
-4-12 n: nnnnspnlcnmsnnnn
-11-12 v: vvvvvvfvvvhvvv
-2-8 h: hlhhkhhchhhghh
-4-5 t: stntztttmp
-3-5 v: vvvmbvhvvvlvn
-9-14 x: srxmtbtgxgmqxxxc
-4-5 z: zrlgz
-10-11 p: phxkvklpmdp
-8-15 m: mmmmmmmpmmmmmmm
-1-13 h: mzwqkhhhphsgh
-17-19 s: qssssmssgfmssmmpssk
-6-8 b: bbbbbbbjbb
-3-4 l: rllr
-2-4 j: kvjj
-2-5 n: lnnkrm
-15-16 w: wwwkwwwwwwwwwwwc
-1-3 c: ccncc
-2-5 s: bhppmsttzcscss
-1-4 t: tttxtttt
-1-9 r: rfrrrbhtxrrbrmrmr
-12-13 s: qplrssssmfswrsswss
-2-4 h: zrhhhhzhzhch
-1-5 g: rgjgg
-11-14 t: ttttvftttttqlsttt
-3-4 s: sskss
-5-15 m: mmmmnmmmmmvmmmm
-1-8 j: sjjjjjjj
-1-4 c: ccclcc
-5-7 d: ddddhdd
-2-8 z: tczzjzzzzzzzgz
-1-5 s: qsqdz
-8-11 z: zhzpzrvzhzkzzgm
-5-9 g: nvdfgshgbgltlqggbp
-1-12 r: rrrrrrrrrrrrr
-3-4 m: xmmb
-8-10 j: jjjjdjmjshqjzk
-2-4 t: tptttftt
-4-13 t: ggqscfggftnxgjpn
-4-12 q: hvzjzqsqwqjlqx
-7-8 q: qqqlqqqkqq
-9-10 f: ffffffffdfff
-2-7 k: kgkkkkkk
-7-11 t: xbpdkrtplmfbtkwgp
-4-7 c: ccccccccc
-12-14 d: dddddddddddqdddddd
-6-7 k: xhnntkpnbkfwlr
-3-5 q: qqxxq
-13-17 d: ddddddddddddvddddd
-2-3 g: smglpgpflsrbwxcjctb
-5-9 z: zjzzznfzf
-7-13 l: lmrkvvxtltcnj
-15-16 r: vjrrrkzxrrrqrtrpzv
-2-7 x: xsxxxxxx
-7-14 m: npmnmgdvnqmgrmm
-2-4 x: pxxl
-7-15 k: nkkkckgwdkffkmb
-7-11 n: dznnmcnssmcn
-8-10 s: skssgswssmsss
-14-16 n: nnnnnnnncdnjnnhwnnn
-4-7 g: kggmgggbggggwggcqgng
-4-7 g: gggqggggg
-1-2 c: cccc
-4-8 j: mzzvwjgrbrv
-11-12 x: pksjnwlltskxlj
-1-9 k: zfkkkksrkkkkkkz
-1-6 k: xkkkkknkk
-1-6 c: gccccncbccccc
-14-15 h: hhhhhrhhgkhhhmhh
-7-8 f: qffgnfhf
-2-6 m: vmqwxzgsm
-5-8 k: kkzjkwkvk
-3-4 s: dcsss
-2-4 p: jjbps
-2-11 z: zjzzzzzzzzzz
-4-7 f: bnkhvjfff
-13-16 m: mmmmmmmmmmmmjmmmmmm
-5-10 t: kdwjmcgtvtdttmtvw
-3-12 j: jjljwjfjjjjjnhjjjjc
-13-14 f: fffffflffxfffbf
-2-6 m: zmhmsm
-4-18 n: nnnvnnnnnhnnnfnnnhnn
-3-6 n: xznnsnn
-7-11 g: ggggpgggggggsg
-6-8 l: llllltllll
-4-5 s: ssnttsrs
-6-14 w: wwwwwwwwwwwpwlwwww
-9-12 q: pxqvswnqqbsqvgsd
-1-4 j: mjjjjz
-9-19 f: fffffffflfffffffffff
-2-6 t: rttqtstct
-6-9 d: dddddtddddd
-7-12 l: lllllllllllllll
-1-12 p: gppppppplpppppp
-1-4 s: fslssssssfcd
-6-7 v: wvvzffggdfvbvvv
-2-7 t: kkwgspt
-6-16 n: nncbnnnntwrxlzzwdrsj
-3-4 z: zzszzhrqwngprjt
-4-5 v: vkvvvcfjc
-4-5 j: hcjtj
-2-4 k: kqkkkkkkkksk
-7-9 g: gzgmgpgkv
-5-9 s: kjnwsrjrzssssdlnsqs
-2-8 j: jtjxxgmjkjx
-5-12 r: bfrcrtjkzqffsjtvwj
-1-2 v: xvvvmvvvv
-5-9 v: vzrgdldfvx
-3-5 m: mqsfmmlmvdfj
-12-15 v: wswvvbqqhlvqvwx
-6-7 b: bbmjdhb
-2-4 b: hbjmjr
-6-7 n: pnnnnln
-13-15 z: zzlgzpmztfzqzzl
-5-6 c: pcppscccccc
-6-7 z: zzzzzzz
-6-14 l: lllllllllllllqllqlll
-13-16 r: rrrrrwrrrrrrhrrr
-11-12 r: rrrrhrvhqmqrwr
-15-19 w: wwwwwwwwwwwwwwwwwwdw
-3-6 w: wwqxkw
-17-18 z: zzzzzzzzszzzzzzczvz
-3-4 g: lgxx
-4-5 x: nsdxdskjxtrz
-11-12 w: wvdgqppfwwdf
-2-3 w: qgrz
-7-8 w: wwrppwfwwrcwr
-2-6 n: gtspnngz
-3-7 j: jjpjjjzjjjjj
-1-2 l: pllblvgmfjvv
-15-18 r: rrlgctrrrcrqqgldpr
-3-6 v: vvvvvt
-2-10 s: vslltcxpbg
-5-8 j: blvzjtjnfmjnjtsrzmc
-9-13 b: bbbbbbbbbbbbsb
-3-4 w: wwfjw
-6-7 x: xxxxxxmx
-7-15 g: ggggggrgggggggfggg
-16-18 f: zffffffffffffffwfff
-3-4 q: qcqn
-3-4 k: kvzqk
-4-18 z: wpclkbsxwbmbmkdpzzcm
-1-8 z: zkzzzzzgzzzzz
-7-16 x: xxxxxxxxxxxxxxjkxxx
-3-6 t: xwcjztz
-8-9 r: rdrprrtrs
-1-7 v: dvvvvvcvvd
-6-8 t: tttttkttt
-1-5 w: xzwww
-6-7 c: ctdjbwcc
-3-4 t: ttnttt
-9-10 q: qmcqqqsqqqvqqq
-11-12 d: dpftdmdmdmld
-7-8 j: tbjmbjlj
-3-6 t: tttttqtt
-6-8 t: tdttthbnqt
-2-5 q: qqqqp
-1-3 t: ttht
-13-17 n: nnnnnnnnnnnnnnnndnn
-4-6 j: ftkvjj
-5-10 c: hvccfcsccb
-7-11 v: vmqvqnnnvzglvvvv
-5-8 k: kkkkkksckkk
-1-12 z: rzzzzzzzzzzzzzzzvzz
-17-18 t: tttttmtttmttttttpttt
-16-17 z: xljjnngmjmhprcqzw
-4-11 d: dtddbpddlhn
-17-18 t: tptttttttttttttttbtt
-9-12 w: wwwwwwwwwwwcw
-3-4 z: zdzj
-1-8 q: qlqqkqqhqtqhxqbbwcp
-6-8 r: rkrrlrrmzrcnnrk
-13-17 b: dbsbbbbbbbsbmkbbb
-5-16 q: gqnvqwwgqshmtrdbplfb
-7-9 c: mcvccccczc
-10-11 p: pppxppppppc
-1-6 v: vvvvvmvvvvv
-5-6 s: ssssks
-6-14 r: prgrbvrjrgrkrrr
-2-11 c: qbnxcvxgldcvdd
-11-15 d: ddddddddddsddddd
-13-14 w: rwwwwwwwwwwwwsw
-12-15 t: ttttttttttttttt
-5-8 g: skjgxsjpgvsgr
-5-11 g: ggddglggxgqgg
-2-4 c: cccc
-2-3 h: rvdg
-9-13 r: rrrrrrrrsrrrjrrr
-2-7 f: dflmgzsdftgkgc
-1-5 f: jffffffnfcff
-3-4 c: cccrqc
-2-7 m: kblcghm
-3-4 r: rscrnbbpfkr
-2-3 d: wdtqpd
-5-6 q: qqqpqnqq
-13-15 d: ddddsdddddddddjd
-3-4 c: cmcw
-2-7 q: qqqqqqjqqqqbqfqq
-11-14 x: txxxxpxdxxkxqcv
-10-11 b: bbbbbbbbbkbb
-7-11 p: ppppppppppmpv
-5-6 r: dnxrcvrrr
-1-4 d: rdddddd
-5-9 f: lxgfvffdf
-8-16 k: vmfksjkwkrkkkhkkvknk
-15-16 v: vvvvvqvvvvvvvvgv
-2-5 p: xpctr
-11-15 w: wfwwwwwkwwwwwpr
-11-13 x: xxxxxxxlxrfxxs
-18-19 b: bbbbbbbbbbqbbbbbbbb
-2-4 l: fgwl
-8-11 m: xmjnmmmmnmh
-4-6 g: lgvpksgq
-5-7 t: jtgtvttjlfhpljtzzstd
-7-11 p: mjcgvcmxgqpntxkpb
-2-3 r: rrgrrnr
-6-7 r: rrrrrcr
-4-14 d: dddjdddddddddpdddd
-5-7 q: qqqqkqqqq
-1-4 t: qttqt
-4-10 f: hbfjbzrfgvffq
-16-17 j: wjjwjwpsjjdvfjnhv
-3-4 v: vvtwv
-5-6 s: ssdswspdss
-1-2 r: rnrrmskrr
-4-7 h: rqxbjjhsfh
-4-9 l: llllllllhl
-4-6 w: sgtwwmcpwd
-4-11 l: fjdllznlllmdnll
-4-5 k: kkklk
-4-6 s: sszrssssssss
-12-14 w: wwwwwwwwwwwvwww
-2-4 b: vnzb
-7-18 g: ggggggggggggggggggg
-1-13 s: srjdvvpqnrsnnkzfj
-14-15 g: bmhbclmqcgtqxgg
-8-12 g: gggfhxgglgzb
-3-5 c: scrkcshctccmhm
-7-12 q: qklqqqhqvxqqqqw
-1-6 m: mlmxzwkmm
-3-16 r: rswggrrrrczxfpjt
-14-16 l: llldlblllqllllns
-2-5 w: wwwwmw
-7-9 r: rrrhrprrr
-2-3 j: zjmdfcth
-3-8 w: xwgwwwwww
-1-5 l: plllllll
-2-4 b: fbqp
-2-3 p: jwpmp
-3-4 c: kscm
-2-5 b: mbpbnfkvh
-4-15 m: qrswmmmgmvmfqtmrrn
-12-15 r: rxrrrrrdrhpfrrrrcrrr
-10-13 j: jjljjjjjjnjjjjj
-8-20 w: gjccptmwtrwxjtskrdfp
-11-14 j: jjjjjxjjjjgjjk
-1-4 g: gggzzgg
-4-8 q: wqqqqblsmsk
-1-11 h: lhhhfhhhhbvhhtjwrbh
-4-8 x: xlxqxxtxxxxx
-13-14 x: xxxxsxxxxxxxqxxx
-12-16 b: bxvbbbqbbbbfzbblb
-1-4 j: jzbd
-5-6 q: qqqqwqkkqqq
-2-5 x: xxxxgx
-8-10 n: nnnnnnnnnhn
-5-10 m: mmmmrmmmmmmmm
-2-3 c: qwcz
-3-5 n: cckvz
-18-19 q: qqqqqqlqtqqqqqqqjqv
-5-13 k: kkpkkkkkkkkklkkk
-5-10 q: jfjgqllmqzv
-15-17 l: llllllllllllllhll
-4-10 b: pgqbfrsnvbhzfmtbtw
-1-4 c: mccc
-6-16 f: fffffpfffffffcfffff
-4-9 j: qjbjlcsgljtbvv
-11-12 z: dstqbtxxvdchsg
-3-8 d: jvdpnvqs
-2-3 n: nfvnnnn
-6-12 r: zdbfdrvtmpkrjkr
-1-15 k: kbdckwtkfhvrbjk
-6-8 v: fvhsvgcv
-2-3 p: ppkppp
-2-14 r: drclhnrdhtcbmnr
-7-10 p: vchpmlpjfxbfnwsdxjr
-1-3 v: lvvv
-1-3 b: bbjbb
-2-12 q: qmxbbbgqlscqvdtpq
-7-9 l: lllllkllqlllclll
-16-17 r: hrrrrrrrrrrrrrrrr
-8-9 g: gggggggfg
-6-8 v: zvqffmkv
-9-12 t: tttttznttjtfrtsjxtd
-5-12 q: bqhbltqnjlhqqhtkq
-8-9 d: ddddddddkd
-2-8 q: tvpqmrrq
-13-16 q: qqqgmqqqqqsqmqqpqqqs
-7-9 p: pppppplppp
-4-6 h: hhxhlhhhxhp
-6-8 g: gggggdggggg
-4-5 j: jjjkjj
-4-5 x: xxxfg
-2-13 x: xxhrhxwbrgrdskghtkj
-12-19 x: cxxxxxxxxxxhxxxxxxx
-1-4 m: tmmmm
-5-11 x: mgqnkjxxscxdxr
-3-4 t: tttctt
-4-13 b: bfkbfbbwbcbpvcbkdqww
-5-7 d: dwddddqd
-4-15 l: lvvlfclwbssvsdl
-9-14 d: ndkfnddtdddfjpvdqt
-8-9 s: ssssssssk
-9-13 l: dlljknlsllbslhlml
-4-5 n: lnnwn
-8-12 v: rlvbqlwvfhvv
-6-7 f: rcpfwfvffqfcpf
-10-11 g: rnqgxbtnxqfzgggtn
-8-11 d: ntdzzddkbdhcdddrgdld
-5-6 s: xkmssxscvbpwj
-1-3 r: rrmr
-9-14 p: pvppppppppppppppp
-11-15 t: vhftnbtmwpgbcvt
-2-7 t: pmbwnrj
-10-11 c: cccccccdcvcc
-9-14 s: ssksssssssssslsss
-2-5 t: ctrtqpn
-4-6 t: mttjftttt
-4-5 z: zfbzz
-2-3 x: xwxlwstzmvvt
-4-5 b: vbsbjwpbsbbb
-3-4 x: cwxxlmdf
-5-6 z: zzzqszzzzzz
-1-4 c: ncczc
-3-6 k: kkkkkkk
-2-3 z: rjzkpxxdvzlzxjzz
-8-10 z: fzjzszzdnzbzkzzfz
-1-9 c: ccccxccjpccccc
-3-12 j: jjjjjjjjjjjcj
-10-14 l: llplllvbllllsp
-8-12 r: hnrcrxfzrkcjcprrzjbr
-17-20 q: qqkqqqqqqqqqqqqbqqqh
-6-9 l: lllljlrlpxllllll
-8-9 v: vzzmtwfgv
-3-7 v: fqdbsshw
-12-13 f: fwffnjfbfffzzqfxfffx
-1-3 m: zjmdvjjg
-5-7 r: nrswrlbw
-8-11 c: crzfvzpcbcbchgxbln
-9-17 g: ggggggzgwwjpggpgvgrk
-6-9 k: hhkrvkkqfhqwbdb
-10-16 q: mzzjqfmtkqwvgdfttj
-11-13 m: mmmmmmmmmmtmm
-1-2 j: jjhrrj
-3-12 h: hhhhhhhhhhhhh
-8-11 w: zwkrwznrppw
-7-14 d: dpxjnddbvdbcllqr
-5-8 c: ccccfcccccc
-12-16 p: tnptbppgwxxpppjb
-1-14 t: qktttttttttttttt
-9-12 t: tttttcttgjtt
-3-5 p: tcpdgwhrkxkzjjhvsgqp
-13-14 k: kkkkkkkkkkkkklk
-11-13 x: xxxxxxsxxxxxt
-5-12 n: nxxnnznnnnmlnnn
-12-14 h: hhlhhhhhhhzcnnhhhhkh
-8-10 j: jbjbjmjvjj
-6-9 c: ccccccccsc
-5-12 j: jjjjjjjjjjjcj
-1-2 f: fhffff
-13-17 x: xnlxxxxsxxxxxxxxp
-2-5 d: sddzn
-2-4 q: qqqt
-2-6 p: fmxfxnkp
-9-11 k: nkdgncqkkgwjp
-2-5 p: hpmgcfcmz
-1-3 f: ffczf
-5-9 r: rtrrprrrrrr
-2-4 p: pnpprdn
-9-11 l: ltllbllvllc
-4-5 x: xxxmxxx
-5-9 x: xxxxxxxxxx
-16-20 b: hgcbhbbhbgbbdxhdgjwb
-10-15 c: qcccpcccdcccccfccwcf
-10-11 x: xndsgkwqpxb
-15-17 f: wwbqxrffgfvffdmdffw
-5-6 q: qqqhqvqqqq
-3-4 h: hhhchc
-7-9 x: xxxxxxxxgx
-7-8 f: fmfflfgf
-12-13 v: vvvvvvvvvvvcvvvv
-3-7 g: gggbggsgg
-1-5 w: wpswsggtw
-3-5 h: hhhhkhhhhhdhw
-6-7 w: wwwwwmwwwww
-5-11 m: mfdmcwmlvpmfc
-14-15 j: jjjjjjjjjjjjjjrjj
-3-5 v: rvtvkdvqv
-3-6 p: frppxpdpg
-3-5 t: ttttrt
-2-7 x: xxwxxkfxxxxxxxxxxgxr
-6-8 k: kkkkkpkgkkkk
-10-11 f: fffffpfffkfdf
-11-12 g: gggghgnggflg
-1-7 x: xxnxxxxkxx
-3-4 h: rhhx
-6-8 r: bcwrrrrrhrxmqgrhrzm
-2-6 l: mpdlnnp
-2-4 j: jbjjdhx
-2-15 d: dfdddddddnddddfzddjd
-5-12 h: gbngwvffshph
-1-2 t: txcpth
-14-15 f: ffffkfflfffffgf
-8-9 b: bbbbbbpbj
-5-6 f: zffhfz
-8-15 j: qjjfrtjllqfjjcj
-3-5 l: llxllll
-10-15 z: tpdzhnzkzrtzrzzzrfrz
-3-5 q: qqlqq
-3-4 d: vmzddpm
-8-11 c: cmvzlxtqxcvckxqm
-2-13 r: drpppdsqsmvnlkjb
-7-9 w: wwwwwwkww
-3-6 s: svfspfnpzq
-3-4 b: fqpbbbbzpgqf
-2-4 s: smssm
-8-9 q: qqqqqlqbq
-4-7 s: stcssbw
-15-16 k: kkkkkkkkkkkkkkkk
-10-13 x: xxsxxzxzxxsxphxxxxx
-4-5 p: drpsx
-7-11 v: vvvvvvvvvvvvv
-14-15 n: nnnnnnnnnpnnnbnn
-5-8 k: blgkkkkc
-12-16 g: ggggggggggvggggggg
-1-8 c: cccccccdc
-3-9 p: ppqppppppp
-7-9 q: cxqqqbhqqzhjqv
-1-12 m: mrkvwmmsjmkmw
-2-4 s: xrrj
-2-4 w: mbww
-7-14 v: vvvvvvvvvvvvvbv
-3-8 p: kppjprpxppb
-4-10 n: znncndnnjncnrnkn
-5-7 k: kktnkks
-10-13 r: rrrrrrrrrrrrnr
-1-6 k: kkkkkrvk
-3-5 k: jhjzkbqsjwkxsvd
-5-8 p: pcqpprckrp
-2-5 f: fsjwf
-6-9 l: jxhtplclr
-4-13 x: gdxdcdmmxlfxxs
-2-10 v: vvvrvvvvvhvvvvvvvv
-11-12 v: wqnwrlvjsxvs
-1-4 m: mfqm
-3-5 d: bmddv
-8-10 h: hbhhdhfchh
-4-5 s: sssdb
-2-3 l: lsll
-10-11 k: kkkkdcpnkkgkk
-6-8 r: vrrrrxrrrrr
-3-4 s: gxsbfr
-17-18 p: ptppppppbbpbprpcqpp
-16-17 s: gpgwvvnjbdqpksnsd
-5-10 f: gfkfzqflfzffvf
-6-18 m: kxxfrxjmwmltdvxwmmb
-5-6 d: ddntbd
-11-15 b: bbbrbhbgbbltbbhb
-6-7 r: krbrrrp
-5-6 q: qqqqqkqqqqq
-3-6 k: kfkmjt
-8-10 d: drbwtrdshdbg
-13-15 n: tqnprfnndhplcjn
-2-4 w: wjwg
-10-11 p: xprpnpvhppp
-9-10 r: rrrrrrrrqrrr
-2-8 w: wjwnwhwwwwwww
-12-13 g: gggggggggggwggg
-1-6 s: sssssss
-1-9 k: xkkkkkkkkkkkkkv
-2-4 c: ccccc
-3-7 s: ftssfrm
-12-13 k: kkkkkkkkbkksk
-9-16 q: qqqmqbbqhzqwtlwqb
-7-9 p: ppppppppdppp
-4-6 b: pcvbvkhb
-9-10 g: qmchkfggmgpqgxxgxq
-2-9 t: sthtnttthtlsq
-3-4 x: xxxx
-8-14 s: ssssssssdssssssss
-1-3 m: gmbmvbmqbxvm
-10-15 s: sgwkdvnsswsszwrn
-3-4 s: gmgs
-5-11 f: fffffffffffffffff
-7-9 v: vvfvsvzdhvv
-4-8 l: lllllllpllllllllll
-11-16 x: xxxplxxxxxpxxxxxxxxx
-9-13 t: tdtftttjdtttc
-9-13 g: rknsckngkvdxg
-3-4 d: sdqwddmr
-1-3 l: lljl
-7-17 r: trhrpmrqswrmnrbrrhb
-7-8 g: ghkxwgttgk
-5-7 b: fbnbtbndb
-6-7 v: vnxlvgv
-1-6 t: txtkttg
-2-13 n: ljnnnnlpsnscfnnnnnnf
-4-11 b: bbbbbbbbbbfb
-6-9 x: wxdkxxnnnx
-2-4 w: wswww
-5-13 j: jjsjjjjjjjjjkjjjj
-1-4 f: fszhf
-5-9 z: wzgfpzzzzjszfvfpwz
-5-9 x: xxxxhxxxsx
-15-17 b: bbbbbbbbbbbbbbkbqb
-2-7 x: xvdmgxxwgxx
-3-4 q: qqqq
-6-7 m: mqmlltc
-8-10 k: kkkfkhkkkpkkkk
-2-6 n: cnxnts
-1-6 s: gsssssssssscssss
-1-9 n: bbvkmnkdn
-2-5 p: nmlhpv
-4-6 g: vnggdpgm
-7-12 b: bbbbbbvwsbbbbbbbbbbx
-2-3 b: lgbjjr
-7-12 n: chqccgnwsznngz
-4-6 v: nntkvvv
-2-5 g: qkrjgkqgljh
-1-5 f: rffffsfzxfjfzffff
-15-16 z: zpzzzzzzzzzhzzkszz
-3-4 l: lmflkl
-7-8 f: fffvzxff
-2-4 r: rrrgrrrr
-12-14 w: tjwgwkkwwwwwwwwww
-2-12 m: mzmkmmmmmhmmcmmmrmf
-5-7 q: nfqbgqqqpqqgjq
-1-4 r: ktpr
-5-6 j: jjjgbj
-9-13 d: ddpbdddwbbdmd
-8-9 r: rphfrrrsrr
-10-12 f: fffffffffffbffpff
-5-12 b: xhbbcbbbbxtbbb
-9-10 j: jjjjjjjjqjjj
-3-4 q: qqqn
-3-9 r: srrtqqprjmqgnp
-2-3 c: gcqc
-3-4 c: bclc
-3-6 n: jnxhshghnnqncgncn
-2-4 h: ckhh
-9-12 t: tdjjqcdbtkbtmb
-11-13 x: cxxkxbxktxxxkxxxpxxh
-4-14 m: hjqmqjvqgjdjzsssdkm
-6-12 r: rrrrrlrrrrrrrr
-14-16 g: gngggggkfglzgggv
-9-13 h: hvhhdzhhmhhhh
-3-15 x: xxjxxxxxxxxxxxbxx
-10-12 z: zzzzzzzzzpzzz
-3-4 h: dnhv
-13-14 g: gggggggggggggg
-7-11 r: rrrrrrrrrrr
-6-9 x: czxxlsxxx
-3-5 h: hhchh
-1-9 j: jjjjjgdjjjjjjjf
-7-10 b: ctsbpxrvwbkbjklghnbn
-10-11 g: gggggggggglg
-1-7 x: xnpsxfm
-9-10 q: xxxzqbpdqj
-4-10 q: pqsqbqcvllfn
-11-12 x: xxxkxxxxxxgxxxx
-3-12 s: pstrsssntsssssbssj
-9-12 s: wnsdfrtssllsfbsssccb
-1-6 r: nrrrrmrc
-11-13 k: kkskkkbkkkzkkk
-4-5 h: hhhhshh
-5-19 f: ffffffffffffffffffcf
-3-4 z: zczzz
-5-8 l: ghlllsllfw
-3-9 g: ggpngglkkf
-7-9 b: xwbbbhhbmgjhbbbhnbb
-4-5 c: cjmgczcccpzqr
-15-16 j: jqfqsnnvffpjjjqj
-5-6 z: zzzztvws
-3-7 t: tftxtvfzs
-1-5 l: tlllll
-5-18 n: nnnngnnnnnnnnnnnnnn
-5-6 m: bchzqm
-9-10 p: lmpsbqgzpxggltl
-2-9 h: hqdpjwpxhg
-4-6 n: nqbnbnknnzd
-2-7 q: qbqqqvq
-7-8 c: cccccclc
-8-12 r: rrkrrrprvrcqnr
-14-15 j: jkpjjnjjjwjjjjjjhjwj
-7-9 s: stsstspsn
-8-11 h: hhhhbhhhhjhhhh
-5-6 d: dddtpdd
diff --git a/2020/inputs/day_3.txt b/2020/inputs/day_3.txt
deleted file mode 100644
index 0fe60b0..0000000
--- a/2020/inputs/day_3.txt
+++ /dev/null
@@ -1,323 +0,0 @@
-...........#..............##...
-...#....................#......
-.....####...........#.#..#.#...
-....##.#.......................
-.......#.##......#.###.........
-.#.....#.......##.......#.....#
-...........##....##.#....#.....
-......#.........#....#.........
-..###....#.........#....#.#....
-....#....#.#..#..#.........#.#.
-..........................#...#
-.##...........#...#.#.......#..
-#....##...#.#....#.............
-....#..##......##..#.#....#....
-#..........#.............#..#.#
-...#.####.....#..#.#.#..#...#..
-..........#......#........#..#.
-............#.....#..#..#....#.
-.................#...#.........
-..#...#...................#....
-..............##...#...........
-..........................#..#.
-#...#...#............#...#.....
-.................#..##.......#.
-............#....#.............
-.#......#.#...#....#...#.......
-.....#.....##..##.....#.......#
-.#..#..##...............#..#...
-#...#...##............#........
-.......#....#.......#..........
-...............................
-#................#...#.........
-...#...#..#..#.............##.#
-......#........#..............#
-...#.....##.#...#...#..........
-.........#..#........##.#...##.
-#.........##..#.......#........
-........##.#.#.................
-.#....#............###....#....
-...#.##....#.....##..#..#....#.
-....#..#........##..#...#..##..
-..........#............#.......
-.........#........##....#..##..
-#....#.........#.#.......#..#..
-...#....#......##.#............
-........#..#...............#...
-..............#.....#........#.
-......#..#.#........#..#..#.##.
-..#........###....#.#..........
-...#..#...#.#....##..#........#
-........#..#..............#....
-#.####.................#....##.
-.#................#............
-....#....#....#................
-#......#........##....#...#....
-......#..##..#..###...#.#.#....
-.#..........##.................
-...#...#....#...#.....#.....#..
-............#......##.........#
-..............##...............
-##....#....#...#...#....#..###.
-...................#.......##..
-#.....##........#....#.........
-...#.......#...........#.......
-...............##..............
-##.......#......#.....#........
-#....#..#..##..#.......#..#..#.
-.....#.............#.......#...
-......#..#........#.......#.#..
-..#...#...........#.##.........
-..#................####.#..#...
-......##....#.........#........
-..#..#.......#...##....#......#
-#.#..........#..............#.#
-.#.#..............#.##...#.....
-................#.....#.#......
-##.........#.........#.....#...
-....#.#.....................#..
-..#..#..#........#.......#.....
-.....#..#.#....#....#.....#....
-..####....#.#.........#........
-#..##...##..#.#............#..#
-.#........#..##.#.....#......##
-.##.##.....##....#.#...........
-....#..#.#..##............#.#..
-........#.#...#....#.........#.
-.....#.#.#.....#....#.....##...
-#...#..#....##..#..............
-..#...#....#...##..#.......#...
-.#....##.......................
-.........#............##.#..#..
-....#................#...#.#...
-...................#..#...#....
-#..#...................#.......
-..##..............#..........##
-...#.##......#.............#...
-.........#.#.........#.........
-...###......#.................#
-..........#....##..............
-.##..#....#.........#.#........
-.........#.......#.......#.#...
-#........#............#......#.
-....................#..........
-.......#...##..........#...#...
-....#.#.......#.#...##..#.#....
-...#..........#..............#.
-........##..............#......
-......#...##......#....##......
-....#.....#.#.##..............#
-...#...........#.#.............
-...........#......#.#..........
-...#.#......#......#...#...#...
-..#.......................#....
-...#...#..#..................#.
-##.....#.....#..#..#.....#...#.
-.#..#.......##.#.#.............
-......##.......##............#.
-.......#..#..#.......#....#.#..
-......#.....##..##...#........#
-.....#........#.##..........#..
-#....##............#........#..
-.....#..#...#............#...#.
-##.#....#........#.............
-.##...............##......#.#..
-###..#..#.......#.#..........#.
-.....#...........#...##........
-..#.#.#.........#.....#....#...
-.....#....##.......#..#.#......
-......#.....#...#..#...##..#...
-.....#....#................#...
-......#....#.#...##......##.#.#
-.....###.............#.........
-.................#......#####..
-.#.......#..........#.#....##..
-..#..#.......#.....#..#......##
-..........#.#.##.......##....#.
-##...#...##.##......#..###.....
-..#..#..#......#....#..........
-..#...#....#......#....#....#.#
-.#...#........#.....#......#..#
-#.........#......#.##.##.......
-#.##..#.............#.....#....
-....#.......#..#..##...##......
-...#.............#.#......#....
-#.....#..........##...##.....#.
-...............#........#....#.
-#.....#...#..#.............##..
-.#....##.#.......#.#..........#
-....#....#.#.....#....#......#.
-......#......#.................
-.#.#..#.#.#...#...#..#.##.#..##
-.............#.....#...........
-............#...#..#..#.....#..
-.#..........#.......#....#.....
-......#..###.#...#.............
-......#..........#.............
-....#.................#..#.#.#.
-...##.##.#....##.##............
-####......#........###......#..
-..#.......#.#..#.##............
-.....#.....#.#.......#.....#...
-.....#..........#.#............
-#.....#.............#......##..
-......##..........##....#......
-.#..............#..........#...
-......#..#...#........#..#....#
-.#......#.......#..#...........
-..#..#....#.#.......#....##..#.
-........#.#................#...
-#.......#.##.#......#...#.....#
-..#...#.#.....##...............
-..........#.....##.............
-.......#............#........#.
-...#............#......#......#
-.#..#.......#...#...#..#..#....
-#....#.#...#......#...#......#.
-.#.......#..#.#...........#....
-...##.#...#.......#..........#.
-.....#..............#..#...#...
-...........................#...
-.............#.....#...........
-....#.#..#..#...#..#...........
-.....#.#.#..#.#....#.#.#.......
-.......#..............#.....##.
-........#..#..#.#..#...#.#.....
-.....#.#...#.#.#.....#..#...#..
-.....#....#.......#......#.#...
-.#.#...........#........#......
-.##..##......#......#......#.#.
-.....#.###.#.......##.#..#.....
-#.......##..#.........#....#...
-.#.............#.........#.#.#.
-..........#..#..#....#....#....
-#....#...........##..#.....#..#
-......#....#...###..#...#......
-.....#....#........#....#..#...
-...##..............#.##...#....
-.#............#........##......
-..##........#.#...........#...#
-..#.#...##...#..#..........##..
-.................#.......#.....
-......#.....#............#.....
-.#.....#.........#.#..#.#......
-.............#.#.#..#.......#.#
-#......#.....#..##...#.......#.
-.......#.#..#...#.........#....
-...#..##...#.........#.#....#..
-........................#..#...
-....##..##................#....
-.......#..#.......#........##..
-.....#....#.##....#............
-.#....#............#.....#...#.
-..##.....#......#......#.#....#
-...#...........#...##....#.....
-......#.##.#..##...##.#.#..##..
-.......##....#......#....#.#...
-.....####..#............#..##..
-......##..##..##.........#...#.
-.#.#...............#.........#.
-......#......#...........#.....
-.....#.......##.....#..#.......
-.....##..#..#....#.#.......#...
-...........###.###.##..#.#..#..
-.#...............##.........#..
-......##..........#..#.....##.#
-.............#....#....#..##...
-.#..............#........#.....
-.#..#.........................#
-.##..............#..........#..
-..#..#.#.#.#......#............
-....#...#.#.#....#........#..#.
-.....#........#....#.....#.....
-.#...#.#......#..#........#.##.
-.......#.....#................#
-.#.#........................#..
-............#..#.......#.......
-....##.#........#...#.#.#.#.#..
-.....#.......##................
-...##...#....#.....#.#.........
-#...#..............#.......#...
-...#.#.#.#..##....##...........
-.....##...#....#.....#.........
-#......#.....#....#............
-....#..###....#.##.......#...#.
-..................##.#......#..
-.....##..............##.#....#.
-.........#...#........#..#....#
-.##..#.........#....#..##...#..
-#.#.##................#.##.....
-..#.#....#.#.......#....#......
-..#.#.##.#.......#.............
-..#....#.#..##.#..........#.#..
-#.....#.....#.....#.........#..
-#.......##.....#....##.....#...
-..#...#.........##.#..##.......
-..#.#.........#.......#........
-#.....#.....##.#.#..#...#..#.##
-.........................#.##..
-..#.#..#..#..#........#......#.
-..#..............#.............
-.....#.......##.##.....#.......
-....#...#...............#..#...
-....#......#.#........##.#..#.#
-....................#..#.......
-.....#.......#......#.##.......
-#.......##..........#.....#....
-.#.......#....#.#......#.......
-......#...#...............#.##.
-....##.#.....#.............#.##
-#..#................##...#.....
-....###......#.#.........#..#..
-...#...#......#...##....#...#.#
-..#...#.#.##.#.................
-.....##......#..#.#....#.......
-##.......#......#.#..#.#.......
-.#.#.#.........#...#.#..#......
-#...#.#........#....#.#.....#..
-....#.......##....#......##....
-.....#..........#......#....#..
-#...#....#...#.....#.#.........
-...#..##.....##....#.....#.#...
-..................#.....##.....
-.....#............#............
-...#.....#..#........#.#..##...
-.......#.#.....................
-......#...#.......#..#...#..#..
-.#..#...#.....##.....#.#.#....#
-....##...#.#............#..#..#
-...........#............#..#...
-.......#.....#................#
-..#......#.#.......#.#.........
-.....#..#.#.##.................
-.....#..#......................
-...#....#...#..#.#..#....#.....
-.#............#.....#..........
-#.##..#..#.......#......#.....#
-.#.........#....#....#.........
-...#.#.#........#.#....#...#...
-#........#..#..#..........#..#.
-.....#..#.....##......##..##.#.
-..............#.......#..#..#..
-....#........#.##.#...#........
-..#.#..#....#........##.....##.
-...##.....#...#.......#.#....#.
-#.....#..##.##.#...##.......#..
-.....#........#.#.#....#.......
-.#................#####..#.#...
-..........##..#..###....#......
-.....#.......#..........#..#...
-..#....#....................#..
-#.....#..#.....#...##.#.....#.#
-...#..##............#.....#....
-##.#..#.......##...............
-........##...#.#.....#......#..
-........#...#..................
-#......#................#.#....
-...........#...#..#.........#..
-...#.##..#.##..................
-.....#......###......#..#......
-..#.#.....#...#..#.##........#.
-....#..........#.#.....#.......
-..#..........#..........#.#....
-..#.##.......#......#..........
diff --git a/2020/inputs/day_4.txt b/2020/inputs/day_4.txt
deleted file mode 100644
index b17cdcd..0000000
--- a/2020/inputs/day_4.txt
+++ /dev/null
@@ -1,1023 +0,0 @@
-ecl:#eef340 eyr:2023 hcl:#c0946f pid:244684338 iyr:2020 cid:57 byr:1969 hgt:152cm
-
-pid:303807545 cid:213 ecl:gry hcl:#fffffd
-eyr:2038 byr:1951
-hgt:171cm iyr:2011
-
-hcl:#c0946f byr:1933 eyr:2025 pid:517067213 hgt:173cm
-ecl:hzl
-iyr:2018
-
-pid:5253256652 byr:2009 hgt:152cm iyr:1989 eyr:1968 hcl:64cb63 ecl:hzl
-
-iyr:2013
-pid:862607211 eyr:2020
-hgt:174cm
-byr:1990
-ecl:blu hcl:#888785
-
-ecl:grn byr:1955
-pid:608098408 eyr:2027 iyr:2020 hcl:#b6652a cid:264
-hgt:181cm
-
-byr:1998 ecl:hzl eyr:2021
-hcl:#866857 hgt:189cm iyr:2030
-pid:013735467
-
-pid:075417314 hcl:#b6652a byr:1957
-iyr:2011
-hgt:154cm
-eyr:2025
-ecl:amb
-
-iyr:1993 hgt:74cm eyr:1960
-byr:2029
-hcl:293244 ecl:#3cb5e5 pid:4861232363
-
-hgt:153cm hcl:#6b5442 pid:065240897 byr:1932
-cid:196 ecl:blu eyr:2028 iyr:2019
-
-eyr:2024 ecl:amb
-hcl:#866857 byr:1922 pid:496904942 hgt:164cm iyr:2020
-
-pid:847705161 byr:1951 cid:124 iyr:1991
-eyr:2028 ecl:dne
-hcl:6b2d28 hgt:172cm
-
-byr:2007 iyr:2029 ecl:hzl eyr:2026 hgt:168in
-hcl:z
-pid:63151612
-
-iyr:2027 hgt:172in
-cid:174 byr:2014 hcl:z eyr:1921
-ecl:grt pid:#cebdc2
-
-ecl:amb hcl:#d09c0f
-iyr:2015 hgt:156cm eyr:2026 byr:1962
-pid:086120872
-
-cid:125
-pid:837849996
-byr:1958 ecl:brn hgt:166cm hcl:#ceb3a1 eyr:2028 iyr:2012
-
-ecl:gry hgt:180cm
-pid:939059935 eyr:2023 byr:1977 hcl:#b6652a
-
-hgt:190in byr:2029 eyr:1984
-ecl:gry hcl:z pid:055092916 iyr:2010
-
-hgt:63in ecl:blu byr:1940 iyr:2012 eyr:2029 hcl:#7d3b0c
-pid:163033394
-
-eyr:2040 pid:181cm
-iyr:1928 hgt:76cm hcl:d8aafb byr:1949 cid:275 ecl:xry
-
-hcl:#cfa07d ecl:oth byr:1948 eyr:2021
-pid:719690182 hgt:179cm iyr:2020
-
-byr:1939 cid:266
-eyr:2026 iyr:2017 hcl:#f116d2
-ecl:hzl pid:522421825
-hgt:68in
-
-hcl:z hgt:61in
-cid:115 pid:180cm iyr:2030 byr:2014 eyr:2032 ecl:hzl
-
-ecl:xry
-eyr:2028 pid:191cm iyr:2015 hgt:150cm byr:2029
-
-eyr:2027
-hcl:#a97842 pid:997937480 hgt:61in iyr:2019
-byr:1921
-ecl:grn
-
-hgt:163cm
-pid:912318455 iyr:2016 byr:1988 ecl:brn hcl:#a97842 cid:221 eyr:2029
-
-cid:333 hcl:#c0946f
-hgt:163cm iyr:2018 eyr:2027 ecl:oth
-
-cid:70 hcl:#c0946f
-pid:961507902 byr:1949 ecl:grn iyr:2017 eyr:2029 hgt:69in
-
-hgt:169cm ecl:amb
-iyr:2013 pid:496169901
-byr:1943 eyr:2028 hcl:#ceb3a1
-cid:249
-
-ecl:blu cid:343
-iyr:1998 hgt:154in hcl:#efcc98 byr:1972
-
-pid:508213120 iyr:2012 eyr:2025 hcl:z hgt:70cm byr:1976
-ecl:brn
-
-iyr:1924
-eyr:2005
-hcl:z
-hgt:167 pid:154cm
-byr:2007
-
-pid:761333244 hgt:180cm iyr:2017 hcl:#18171d eyr:2021
-byr:1983
-cid:67 ecl:oth
-
-eyr:1993
-byr:2003
-hcl:#602927
-ecl:grt
-cid:84 hgt:178
-pid:1847086637 iyr:2026
-
-hcl:#866857 hgt:162cm pid:483774485 iyr:2010
-byr:1946 eyr:2028 ecl:gry
-
-pid:726639691 eyr:2028
-hgt:171cm hcl:#ff65a6
-iyr:2011 byr:1989
-
-hcl:z iyr:2026 ecl:xry
-eyr:2037 byr:2005 pid:#f09a0f
-hgt:68 cid:156
-
-hgt:71in ecl:blu eyr:2026 hcl:#18171d
-byr:1981 iyr:2017
-pid:698636544
-
-eyr:2021
-byr:1957 ecl:brn pid:365378126 cid:93 iyr:2019 hcl:#18171d hgt:179cm
-
-byr:1996 iyr:2014 hgt:64cm
-eyr:2034
-hcl:z
-
-pid:629486472 cid:140
-hgt:192cm eyr:2020 hcl:#b6652a iyr:1988 byr:2021 ecl:brn
-
-byr:1955 iyr:2015 eyr:2030
-ecl:gry hcl:z pid:6550198754
-hgt:158cm cid:305
-
-ecl:gry hcl:#a97842
-hgt:176cm eyr:2022 pid:810146585 iyr:2020
-
-byr:2027 hcl:#cfa07d
-iyr:2011 ecl:#f07598
-cid:293
-hgt:150cm pid:#fa948d eyr:2029
-
-eyr:2028 iyr:2013 hgt:69in ecl:gry pid:317170371
-cid:147 hcl:#bfe1f1
-
-byr:1976
-pid:059341891 hgt:174cm
-ecl:oth
-eyr:2029 iyr:2017 hcl:#733820
-
-iyr:2018 hcl:#ceb3a1 hgt:188cm cid:308
-pid:792826885 byr:1948 ecl:blu eyr:2028
-
-iyr:2017 cid:94 hcl:#95c7dc
-pid:231757803 eyr:2022
-byr:1992 hgt:153cm ecl:amb
-
-eyr:2027
-iyr:2011 hgt:186cm
-ecl:brn pid:996347346 hcl:#866857
-byr:1960
-
-eyr:2025 byr:2001
-ecl:blu pid:755715478 iyr:2019 hgt:61in
-
-ecl:gry
-eyr:2038
-hgt:81 hcl:z iyr:2028
-cid:214 byr:1965
-
-pid:412744447 byr:1979 hcl:#cfa07d ecl:blu
-eyr:2029 cid:157
-hgt:180in iyr:1948
-
-hgt:170cm
-pid:623557081 byr:1924 eyr:2024 hcl:98d623 iyr:2012 ecl:amb
-
-cid:311 ecl:grn
-iyr:2011 byr:1982
-eyr:2002 hcl:#ef318a
-pid:0548169957
-hgt:87
-
-eyr:2030 hcl:#733820 iyr:2016 pid:558470391
-byr:1936 ecl:oth hgt:185cm
-
-iyr:2019
-ecl:amb byr:1949
-pid:376468392
-hgt:178cm
-
-pid:019195245
-ecl:grn hgt:171cm
-byr:1978 iyr:2011 eyr:2022 hcl:#733820
-cid:134
-
-hcl:#623a2f hgt:192cm eyr:2026 byr:1977
-ecl:grn cid:308
-
-ecl:hzl pid:715816358 hgt:69in iyr:2014 hcl:#623a2f
-byr:1996
-eyr:2027
-
-iyr:1947
-ecl:#39a697
-hgt:183cm byr:2029
-eyr:2022 pid:7951883913
-hcl:z
-
-ecl:gry byr:1950
-hcl:#18171d hgt:168cm iyr:2020 pid:677187333 eyr:2027
-
-byr:1969 ecl:blu hcl:#18171d iyr:2011
-hgt:162cm
-pid:701349891
-
-cid:269 byr:1966
-iyr:2011
-pid:905940527 eyr:2023 hgt:190cm
-ecl:brn hcl:#ceb3a1
-
-eyr:2027 pid:454627395 ecl:brn
-hcl:#ceb3a1 cid:302 hgt:184cm
-byr:1959
-iyr:2015
-
-iyr:2011
-eyr:2028
-hgt:166cm
-hcl:#733820 byr:1938 ecl:blu pid:857984986
-
-hcl:#c0946f ecl:brn pid:226877822
-hgt:182cm byr:1998
-cid:160
-
-hgt:186in pid:26499164 byr:2017
-hcl:z
-iyr:1998 eyr:2026
-cid:331 ecl:#236556
-
-pid:328866543
-hgt:165cm eyr:2039 iyr:1987 ecl:amb byr:2018 hcl:z
-
-iyr:2016 eyr:2036 hcl:#888785 byr:1976 pid:160402352 hgt:76cm ecl:blu
-
-ecl:blu
-hcl:#fffffd eyr:2025 hgt:66in pid:979788527
-byr:1957 iyr:2013
-
-ecl:grn pid:279357265 iyr:2019 eyr:2021 byr:1953
-hgt:177cm hcl:#c0946f
-
-ecl:oth hcl:z eyr:2025 byr:1949 hgt:189cm iyr:2020 pid:901383503
-
-byr:2019 hcl:#733820
-pid:31022828 eyr:1929
-hgt:75cm iyr:2012 ecl:grn
-
-pid:080462937
-ecl:blu hcl:#866857
-cid:102
-iyr:2013 eyr:2025 byr:1975 hgt:64in
-
-iyr:2016
-eyr:2028
-cid:125
-byr:1979 hcl:#866857
-ecl:brn hgt:173cm pid:814947616
-
-hcl:z byr:2020 pid:#c3b54b hgt:174in eyr:2038
-iyr:2016
-ecl:gmt
-
-cid:132
-iyr:1958
-pid:61543452 hcl:z
-ecl:zzz eyr:2039 byr:2006
-
-cid:55 eyr:2022 byr:1954 iyr:2015
-hgt:188cm hcl:#a97842 pid:49143631 ecl:amb
-
-hgt:152cm
-byr:1982
-iyr:2013 ecl:blu
-hcl:#341e13
-eyr:2026 pid:440841976
-
-iyr:2019 ecl:blu pid:553456616 hcl:#733820 hgt:160cm byr:1932 eyr:2030
-
-byr:1980 hgt:169cm hcl:#7d3b0c cid:312 iyr:2010
-eyr:2026 pid:028550304 ecl:grn
-
-ecl:amb eyr:2021 iyr:2014 hgt:71in pid:986053283 byr:1981
-
-ecl:oth
-eyr:2023 hcl:#888785
-byr:1949
-iyr:2016 pid:699325656
-
-hgt:63cm cid:297 eyr:2020 pid:990390922
-hcl:#602927 ecl:lzr
-iyr:2012 byr:2016
-
-hcl:9ea2fa eyr:2023 pid:088680493
-byr:1998 iyr:2017 ecl:utc hgt:170cm cid:175
-
-cid:316 iyr:2016 eyr:2026 hcl:#79ff1d hgt:65in
-byr:1997 pid:215466710 ecl:oth
-
-cid:213 byr:1983 hcl:#888785 iyr:2016 pid:767747981 eyr:2025
-ecl:hzl hgt:168cm
-
-eyr:2030 byr:1972
-cid:282
-ecl:gry hgt:178cm
-hcl:#a97842
-iyr:2018
-
-hcl:#6b5442 ecl:amb
-eyr:2028 cid:104 hgt:159cm pid:446429120 iyr:2012
-byr:1938
-
-byr:1940 hgt:178cm ecl:oth
-hcl:#ceb3a1
-pid:845683663 iyr:2015 eyr:2024
-
-byr:1940 pid:496262233
-hgt:184cm hcl:#b6652a
-ecl:grn cid:152 iyr:2012 eyr:2029
-
-hgt:185cm pid:455744229 byr:1954 eyr:2022 ecl:gry hcl:#6b5442 iyr:2012
-
-hgt:182cm byr:1966 eyr:2028 ecl:#a5b7fc
-iyr:2029
-
-pid:343591896
-cid:58
-ecl:hzl
-eyr:2022 hgt:180in byr:2021
-hcl:#6b5442
-
-ecl:utc hcl:#b6652a
-pid:635147657 byr:2020
-eyr:2022 hgt:157cm iyr:2018
-
-ecl:grt cid:312 iyr:1959 pid:154262836
-hgt:171cm
-hcl:#fffffd
-eyr:2024
-byr:1982
-
-hcl:#7a12b4 pid:223424149 ecl:hzl hgt:175cm
-byr:1930 iyr:2010 eyr:2028
-
-hcl:#c0946f pid:633476454 eyr:2026 iyr:2011
-byr:1934
-hgt:186cm
-cid:289 ecl:gry
-
-hcl:#fffffd pid:376300524 hgt:155cm byr:1964 iyr:2017 eyr:2021 ecl:grn
-
-hcl:a5d4dc byr:2006 cid:165 ecl:#db800f iyr:2029 pid:0199789970 eyr:1961 hgt:61cm
-
-eyr:2027 hgt:170cm iyr:2010
-hcl:#c0946f
-ecl:grn pid:415726530
-byr:1985
-
-cid:197 byr:1957 hgt:192in hcl:#a97842 ecl:hzl eyr:2029 pid:958973455 iyr:2011
-
-iyr:2015 pid:933689314 hgt:162cm ecl:amb
-cid:122 eyr:2021
-hcl:#6b5442 byr:1973
-
-eyr:2026 hgt:172cm
-iyr:2012
-ecl:brn hcl:#733820 pid:004474632
-byr:2000
-
-hgt:191cm eyr:2030 byr:1999 pid:9155071477 iyr:2026 hcl:#602927 cid:315
-ecl:grn
-
-iyr:2010 pid:182884251 hcl:#18171d hgt:154cm
-eyr:2020
-byr:1926 ecl:oth
-
-iyr:2019 eyr:1920 pid:132839546
-cid:283 hgt:188in hcl:#efcc98 byr:2027
-
-iyr:2011 hgt:177cm
-cid:117 byr:1976
-ecl:gry
-hcl:#623a2f eyr:2030 pid:134592046
-
-byr:1968 hgt:146
-iyr:2013 hcl:eefdc4 eyr:2028
-ecl:xry pid:722120008
-
-iyr:2016 byr:1941 hgt:67cm cid:51 hcl:#b6652a ecl:hzl eyr:2034 pid:994005715
-
-hcl:#cfa07d ecl:oth
-hgt:182cm eyr:2021 pid:612583941
-byr:1983
-iyr:2019
-
-byr:1922
-hcl:#602927 hgt:161cm ecl:gry eyr:2020 pid:190170808 iyr:2013
-
-hgt:63cm cid:136
-iyr:1999
-pid:8235748647 hcl:z
-byr:2022 eyr:1933
-ecl:#304383
-
-cid:273 ecl:blu hcl:z
-iyr:2011 byr:2007
-eyr:2020
-pid:942473857 hgt:178in
-
-ecl:grt byr:2029 hgt:187in eyr:2030 cid:160
-hcl:#efcc98 pid:#39f22b
-iyr:1966
-
-byr:1978 ecl:oth iyr:2011 hgt:164cm eyr:2027 hcl:#cfa07d
-
-hgt:75cm hcl:#1e8137 byr:1986 ecl:blu eyr:2022 pid:796688423
-iyr:2012
-
-eyr:2026
-ecl:#3013af hcl:z pid:#e8597f hgt:123 iyr:2025 byr:1942
-
-hcl:z hgt:177in
-iyr:1993 pid:#4c9348 byr:2008 eyr:1989
-
-pid:123524366 byr:1935
-hgt:156cm hcl:#7d3b0c
-iyr:2020 ecl:brn eyr:2020
-
-hcl:z eyr:2038 pid:7663741757 ecl:gmt hgt:174
-byr:2008 iyr:1939
-cid:225
-
-hcl:#888785 hgt:172cm
-ecl:oth pid:500711541 eyr:2027
-byr:1931 iyr:2012
-
-pid:575447108 ecl:amb byr:1943
-hcl:#888785 hgt:173cm eyr:2024
-
-eyr:2021 iyr:2010 pid:178773264 hgt:157cm byr:1965 hcl:#bb7bcf ecl:amb
-
-iyr:2023 ecl:#35bd84 byr:2020
-hgt:72in
-eyr:2037
-hcl:#6b5442
-pid:421311669
-
-byr:1921 iyr:2011
-pid:146088688
-eyr:2023 hcl:#15ed24 hgt:183cm
-ecl:brn
-
-hcl:#b6652a cid:243
-byr:1993 eyr:2024
-iyr:2014 hgt:172cm
-pid:771275594
-
-eyr:2024
-hcl:#cfa07d pid:858807920 cid:293 hgt:157cm ecl:hzl iyr:2013 byr:1984
-
-ecl:blu hgt:193cm cid:73 hcl:#18171d eyr:2026
-iyr:2016 pid:124151812 byr:1945
-
-ecl:amb iyr:2018
-pid:214555737 hgt:157cm
-eyr:2028
-byr:1925 hcl:#866857
-
-pid:5633250409
-hcl:4ef7d8
-byr:2004 iyr:1958
-hgt:96
-eyr:2038 ecl:xry cid:274
-
-byr:1972 pid:401239851 hgt:184in hcl:z iyr:2017
-eyr:2030 ecl:#cb289a cid:140
-
-hgt:175cm
-byr:1926 hcl:#cfa07d eyr:2029 ecl:gry pid:325039730 iyr:2017
-
-cid:101 hgt:166cm byr:1986 ecl:amb
-hcl:#7d3b0c iyr:2013
-pid:413769688 eyr:2024
-
-hgt:159cm cid:311
-byr:1993 eyr:2028 pid:188cm ecl:oth hcl:#602927 iyr:2013
-
-pid:565831038
-ecl:amb
-hgt:155cm hcl:#fffffd cid:335 iyr:2016
-eyr:2029 byr:1997
-
-hgt:122
-byr:2022
-eyr:2028 ecl:blu iyr:2017 pid:269710626 hcl:#b6652a
-
-cid:196
-byr:1953 hcl:#6b5442 iyr:2010
-pid:216121215 hgt:188cm ecl:blu
-
-iyr:2011 hcl:98166c hgt:62cm
-byr:2028
-eyr:2024
-pid:792478385 ecl:grn
-
-hcl:#efcc98 iyr:2012 pid:020039675 eyr:2021 byr:1974 hgt:156cm
-ecl:hzl
-
-cid:123 hcl:#7d3b0c
-byr:2026 eyr:2004 iyr:2012 ecl:oth pid:349203133 hgt:160cm
-
-pid:085461475
-byr:1962 iyr:2020 hcl:#623a2f
-eyr:2024
-cid:80 ecl:brn
-hgt:154cm
-
-ecl:oth hgt:156cm iyr:2016
-hcl:#6b5442
-byr:1973
-eyr:2021 pid:539898580
-
-iyr:2026 hgt:191cm
-hcl:z
-byr:1930 pid:#abc2f0 ecl:blu cid:242 eyr:2024
-
-cid:167
-hgt:179cm
-iyr:2017 eyr:2021 pid:756797571 byr:1949 ecl:brn hcl:#a97842
-
-byr:1975 eyr:2030
-ecl:oth hgt:169in pid:4031206183 hcl:#733820 iyr:2017 cid:244
-
-ecl:#54cfeb hgt:152cm
-iyr:2026 hcl:36b4b9
-byr:2030
-pid:#fa1cb9 eyr:1964
-
-byr:1974 cid:99 hcl:9e3296
-eyr:2032
-pid:686747414
-iyr:1995
-ecl:amb
-
-iyr:2030 ecl:oth hcl:z byr:1979
-pid:114661006 hgt:191cm eyr:1941
-
-hcl:#341e13 iyr:2014 byr:1953
-pid:188326193 ecl:gry hgt:189cm cid:283
-eyr:2030
-
-byr:1975
-pid:092061576 hgt:73in eyr:2023
-ecl:brn cid:227 hcl:#5e9d91
-iyr:2011
-
-hcl:#7d3b0c hgt:167cm cid:141
-eyr:1957 byr:2012 ecl:gmt iyr:2019 pid:#1b7c8a
-
-hgt:168cm hcl:#c0946f pid:599500784 byr:1930 eyr:2023 ecl:hzl cid:113
-iyr:2013
-
-eyr:2030 hcl:#b4cb4f
-hgt:68in
-ecl:brn byr:1923 pid:699162086
-
-iyr:2013
-ecl:dne hcl:z eyr:1971
-pid:#580add byr:2020
-hgt:190cm
-
-hcl:#ceb3a1
-byr:1976 eyr:2020
-cid:162 iyr:2016
-hgt:168cm
-ecl:hzl
-
-pid:050478613 hgt:59cm
-iyr:2017
-ecl:grn byr:2030 hcl:#cfa07d eyr:2025
-
-pid:352943968 eyr:2025 byr:1980 iyr:2014 ecl:gry hcl:#c0946f
-hgt:193cm
-
-pid:328621931 cid:310 hgt:170cm
-hcl:#733820 byr:1955
-iyr:2016
-eyr:2028 ecl:hzl
-
-hcl:#866857
-pid:095858739 byr:1956
-iyr:2018 hgt:193cm
-ecl:hzl
-eyr:2029
-
-pid:70973661 eyr:2039 ecl:gry
-iyr:2016
-cid:291
-hcl:#623a2f hgt:97
-
-hcl:4d51a8
-eyr:1978
-ecl:gmt
-byr:2029 iyr:2022
-pid:34507041 hgt:61cm
-
-byr:1989 ecl:brn pid:769582914
-eyr:2026 cid:218
-iyr:2020 hcl:#866857 hgt:184cm
-
-ecl:brn
-iyr:1998 cid:227
-hgt:162in
-byr:2026
-hcl:#602927 eyr:2027 pid:236998728
-
-ecl:gry byr:1984 hgt:157 cid:295
-eyr:2020
-iyr:2018 hcl:#733820
-pid:037871534
-
-hgt:166cm hcl:#c0946f pid:412146401
-iyr:2011
-eyr:2022
-byr:1938
-ecl:brn
-
-ecl:brn cid:95 byr:1981 eyr:2030 hcl:#efcc98 pid:777041035 hgt:152cm iyr:2011
-
-eyr:2024 hgt:89 pid:3761913749 iyr:1939 byr:1967 hcl:a222f6 cid:165 ecl:#7fe574
-
-cid:339 hgt:156cm
-ecl:brn iyr:2013 byr:1951 hcl:#efcc98 eyr:2026
-pid:863566946
-
-ecl:brn hcl:#6b5442 eyr:2023
-pid:787129723 byr:1949 iyr:2015
-
-pid:#7f615a
-cid:202 hcl:#6b5442 eyr:2028
-ecl:#a5419c
-hgt:75cm
-iyr:2011
-byr:2001
-
-pid:864001133
-cid:236
-byr:1943 hcl:#733820 ecl:dne eyr:2025 hgt:171cm iyr:1989
-
-pid:193073684 ecl:grn byr:1962 iyr:2014
-hcl:#cfa07d hgt:189cm
-cid:321 eyr:2029
-
-byr:1959
-hcl:#b6652a
-eyr:2026
-hgt:159cm pid:815014918 iyr:2011 ecl:amb
-
-iyr:2017 hgt:182cm
-hcl:#a97842 eyr:2023 ecl:grn pid:656177536
-byr:1973
-
-eyr:1923 ecl:grn
-cid:138 iyr:2020
-hgt:164cm byr:1958 hcl:#c0946f pid:783366277
-
-iyr:1932 hgt:172 ecl:blu
-hcl:#733820 byr:1962 pid:554221464
-
-cid:169 pid:922622614
-byr:1942 hcl:#ceb3a1 hgt:169cm eyr:2024
-ecl:gry iyr:2017
-
-cid:219 ecl:grn
-hgt:156cm byr:1998 eyr:2021
-iyr:2017 hcl:#ceb3a1 pid:450186263
-
-ecl:amb hgt:179cm pid:768428582 iyr:2010 eyr:2023 byr:1952 hcl:#fffffd
-
-eyr:2024
-hgt:193cm
-iyr:2017 pid:469033795 byr:1979 hcl:#18171d cid:67 ecl:amb
-
-iyr:2016 byr:1937 pid:798267514 hgt:155cm hcl:#866857 eyr:2026
-ecl:oth
-
-hgt:172cm hcl:#866857 iyr:2018 pid:662186551
-byr:1996
-eyr:2025 ecl:amb
-
-pid:2854521962
-iyr:2021
-ecl:zzz
-hcl:12f1ba eyr:2037 hgt:159cm
-byr:1937
-
-ecl:oth pid:488050418 byr:1927 hcl:#a97842 hgt:153cm iyr:2013 eyr:2024
-
-pid:119536312 ecl:#2036ad
-hcl:543178 iyr:2020
-byr:2013
-hgt:177cm
-eyr:2022
-
-pid:788908662 hcl:#602927 eyr:2029
-ecl:oth byr:1930
-iyr:2020
-hgt:179cm
-
-byr:1972
-pid:053386972 iyr:2014 ecl:grn hgt:65in hcl:#cfa07d
-
-pid:9828921035 ecl:blu
-hcl:z hgt:152in
-eyr:1949 byr:2010
-
-cid:157 pid:097910554 byr:1999
-hgt:159cm hcl:#6b5442 ecl:blu eyr:2024
-iyr:2010
-
-hcl:#a97842
-eyr:2040 ecl:#f8ad77
-hgt:173cm
-byr:2019 iyr:2010
-pid:#d16a6e
-
-ecl:dne hgt:191cm iyr:2020 hcl:#b6652a
-eyr:2021 pid:571971509 byr:1983
-
-hcl:#18171d iyr:2016 pid:159074622
-eyr:2027 hgt:163cm byr:1954
-cid:257
-
-pid:243560302 cid:58
-hcl:53a4cf byr:2012
-ecl:#fdbfb8 eyr:1920 hgt:179 iyr:2026
-
-pid:040606106 eyr:2030 hgt:188cm
-byr:1969
-iyr:2012 hcl:#ceb3a1 ecl:amb
-
-eyr:2022
-hgt:175cm hcl:#b6652a byr:1967 pid:269969031
-iyr:2018
-
-hcl:#18171d cid:278 byr:1931
-pid:134809791
-eyr:2035 ecl:#44e6cd iyr:1993
-
-hgt:177in
-ecl:utc cid:289
-iyr:1923
-hcl:13a67a pid:3045345984 byr:2030 eyr:1944
-
-pid:839901650 eyr:2030
-ecl:grn
-byr:2015 iyr:2017 hgt:168 hcl:131f4e
-
-iyr:2015 pid:529736732 ecl:brn hgt:176cm
-eyr:2026 byr:1952 hcl:#6b5442
-
-hcl:#c0946f
-cid:323 pid:303966428 iyr:2019
-eyr:2027 hgt:170cm
-byr:2001
-ecl:brn
-
-pid:193678728 hgt:72in eyr:2027 iyr:2015 byr:1951 ecl:gry hcl:#18171d
-
-eyr:2026 cid:283
-iyr:1938 pid:687430885
-hgt:186cm
-byr:1949 ecl:#521638 hcl:d13b2f
-
-eyr:2024 hcl:#ceb3a1 iyr:2013 ecl:brn
-hgt:168cm pid:792088241
-
-hcl:#888785 ecl:amb
-byr:2009 iyr:2015
-hgt:151cm
-eyr:2020 pid:223927808
-
-byr:1926
-pid:717704850
-hcl:#623a2f eyr:2022 hgt:64in iyr:2018 ecl:gry
-
-eyr:2023 byr:1954
-hgt:169cm
-ecl:hzl
-iyr:2010 pid:116868997 hcl:#18171d
-
-ecl:hzl byr:1965 hcl:#a97842 iyr:2011 pid:506354451 hgt:172cm eyr:2029
-
-eyr:2022 pid:994565705
-iyr:2013 ecl:brn hcl:#623a2f
-byr:1979
-
-iyr:2011
-byr:1931 hgt:183cm hcl:#284f26 cid:306
-ecl:amb eyr:2021
-pid:977533079
-
-eyr:2027
-iyr:2011 ecl:gry
-byr:1993
-pid:272334781 hgt:161cm hcl:#9a35b6
-
-eyr:2026
-hcl:#602927 ecl:blu
-pid:212300161 byr:1946
-cid:193 iyr:2020 hgt:157cm
-
-pid:538594567 byr:1976 eyr:2027 hcl:#efcc98 iyr:2011 hgt:154cm ecl:oth
-
-byr:1949
-hcl:z ecl:#ce67aa
-eyr:1942 pid:7978941589 iyr:2025 hgt:161in
-
-hcl:#c0946f
-cid:55
-byr:1963 ecl:blu hgt:161cm
-pid:547120453 iyr:2015 eyr:2021
-
-hgt:173cm eyr:2022
-iyr:2016 byr:2001
-ecl:hzl pid:239803460
-
-hcl:#b6652a ecl:oth eyr:2021 hgt:167cm pid:401266644 iyr:1969 byr:1974
-
-eyr:2030 pid:581963885
-hcl:#64cb23
-ecl:blu
-byr:1928 hgt:181cm iyr:2018
-
-pid:186338247
-ecl:hzl hgt:193cm hcl:#ceb3a1
-eyr:2022 iyr:2010
-
-iyr:2015 ecl:gry hgt:159cm eyr:2027 hcl:#ceb3a1
-byr:1925 pid:715902111 cid:149
-
-iyr:2018 hcl:#623a2f eyr:2020 hgt:162cm ecl:grn cid:135
-byr:1922
-pid:373216777
-
-eyr:2020 pid:749899012 hcl:#888785 ecl:brn
-iyr:2010 cid:225 hgt:172cm
-byr:1972
-
-iyr:2020 hgt:178cm ecl:grn hcl:#18171d pid:613792489 cid:240
-eyr:2028
-byr:1972
-
-iyr:2015 byr:1938 eyr:2026
-cid:113 ecl:grn
-pid:846231640 hgt:161cm
-hcl:#b6652a
-
-ecl:gry
-hcl:#ceb3a1
-byr:1956 cid:338 pid:936012518
-hgt:62in
-eyr:2029 iyr:2016
-
-pid:730866353 ecl:brn byr:1986
-iyr:2014
-hgt:190cm
-eyr:2021 hcl:#a97842 cid:126
-
-eyr:2021
-cid:180 pid:958310635 ecl:brn iyr:2015 hgt:189cm hcl:#efcc98
-
-hgt:188cm ecl:hzl pid:179001863 iyr:2016 eyr:2029 hcl:#341e13 byr:1932
-
-cid:77 eyr:2027 hcl:#623a2f iyr:2016 ecl:brn hgt:170cm
-byr:1947
-
-hgt:66in pid:617518313 iyr:2013 byr:1977 hcl:#b6652a ecl:brn eyr:2025
-
-pid:787861420
-iyr:2014 hcl:#623a2f hgt:61in
-ecl:oth cid:78
-eyr:2022 byr:1975
-
-ecl:hzl
-iyr:2017 eyr:2028 hcl:#602927
-byr:1958 pid:985208714
-hgt:160cm
-
-byr:2002
-iyr:2013
-hcl:#341e13 pid:188110633 ecl:gry hgt:169cm
-eyr:2025
-
-byr:1981
-eyr:2028
-hcl:#341e13 ecl:amb hgt:160cm cid:121
-iyr:2015 pid:963848397
-
-iyr:2013 hcl:#866857 pid:#db8648 eyr:2021 ecl:gry
-byr:1975
-hgt:153cm cid:114
-
-hgt:109
-cid:287 hcl:#6b5442
-iyr:2028 byr:1926 eyr:2036 pid:2378208387
-ecl:#245a62
-
-pid:857722366
-byr:1975 eyr:2027
-ecl:grn iyr:2019 hcl:#0afad1
-hgt:66in
-
-byr:1935 hcl:#cfa07d hgt:173cm ecl:brn eyr:2021 iyr:2019
-
-cid:66 eyr:2024 hcl:#efcc98 byr:2002 iyr:2010
-hgt:176cm pid:697153153 ecl:amb
-
-iyr:2019
-hcl:#cfa07d ecl:blu
-pid:695914972
-eyr:2024
-hgt:158cm
-byr:1943
-
-ecl:xry hgt:62in
-pid:14733148 cid:148
-iyr:2016 byr:1925 hcl:#6b5442
-eyr:2028
-
-iyr:2025
-cid:53 hgt:132 ecl:gmt hcl:159b19
-pid:156cm
-byr:2025 eyr:2001
-
-hcl:#623a2f ecl:oth byr:1974 iyr:2018 hgt:161cm eyr:2029 pid:6826285172
-
-ecl:gry
-byr:1956 hcl:#7d3b0c hgt:170cm iyr:2020
-
-eyr:2020
-pid:#946a88 hgt:186cm hcl:#733820 byr:1946 ecl:#016645 iyr:2015
-
-hgt:181cm hcl:#888785 iyr:2013 pid:634152817
-byr:1982 cid:245 ecl:grn eyr:2021
-
-ecl:brn
-pid:737531770 iyr:2010
-eyr:2020
-byr:1929 hgt:189cm hcl:#c0946f
-
-cid:158 iyr:2019 hcl:#341e13 eyr:2027 ecl:amb
-byr:1986 pid:834976623
-
-pid:976934668 cid:61 eyr:2020 iyr:2020
-hgt:76in byr:1927 ecl:amb
-hcl:#e05ee3
-
-pid:526042518 iyr:2019 eyr:2027 hcl:#623a2f byr:1976 ecl:amb
-
-pid:279367290 hcl:#a97842 hgt:158cm
-eyr:2027
-byr:1959
-iyr:2020
-
-ecl:xry byr:2028
-pid:357216861 hcl:#a97842 eyr:2024 hgt:66cm
-iyr:2012
-
-hgt:188in
-ecl:lzr cid:64 eyr:1958 byr:2014 hcl:z pid:285207570 iyr:2026
-
-eyr:1973 iyr:2017 ecl:oth cid:282 pid:695814158
-hcl:z
-
-iyr:2010 pid:661168409
-hcl:#53c696
-hgt:186cm ecl:amb
-byr:1960
-eyr:2029
-
-eyr:1982 hgt:169cm
-iyr:2002 byr:2025 hcl:327f93 pid:831648100
-
-byr:1967 ecl:oth
-eyr:2021
-hcl:#602927 iyr:2014
-pid:274974402 hgt:183cm
diff --git a/2020/inputs/day_5.txt b/2020/inputs/day_5.txt
deleted file mode 100644
index 11800ca..0000000
--- a/2020/inputs/day_5.txt
+++ /dev/null
@@ -1,901 +0,0 @@
-BBFBBBBRRL
-FBFFFFBLRL
-FBFBBFFRLR
-FBFFFBFRLR
-FFBBFFFLRR
-FFBBBFFRRR
-BFBBFBFLRL
-BFFFBFFLRR
-FBBBFFBLLR
-BBFFBBFRRL
-BFBBBBBRLR
-FBBBBFFLLR
-FFBFFFBLLR
-FFBBFBFRRR
-BBFBFFFRRR
-FFBFFBBLLR
-FBBFFBBLRL
-FFBBBFBLLL
-FFBFFBBLRR
-FBFFBFBLLR
-FFFBBBFLLL
-BFBBFBFRLR
-BBFBBBFLLL
-FBBBFBBRLL
-FFBBBBFRRL
-BFBBBBFLRR
-BBFBBFBLRL
-FFBFFFBLRL
-BFBBBBBRRR
-FFFBFBFLLR
-BFBFBBBLLR
-FFBFBBBLRL
-FFFBFBBLRR
-BFFBFFFLLL
-BFFFBFBLRL
-BFBFFFBRLL
-BBFFFFBRLR
-FBBFFFBLRR
-BFFFFBFLLL
-BBBFFFFLLL
-BFBFFBBRLL
-BBFBFFFRRL
-BFBBFFFRLR
-BBFBFBFRRL
-FBBFFBFRRL
-BFBFBFFRRL
-FFBFFFFLLR
-FBBBFBBLLR
-BBFFBFBRLL
-BFFBFBBRLL
-FBBFFFFRRR
-BFFFBBBLRL
-FFBBFFBLLL
-FFFBBFFRRL
-FBFBBBBLRR
-FFBBBFFLLL
-FBFBFFBRRR
-FBBFFBBLLR
-FBFFBFFRLL
-BFBBBFFRLR
-FBFFBBBLRR
-FBFFFFBRLR
-BBFFBBFLRL
-FBFFBBFLRL
-FBFBBFFRRR
-BFBBBFBLRL
-FBFBFFFLLR
-FFFFBBBLLR
-BFBFFBBLLR
-BFFBBBFRLR
-BFBBBFFLRR
-BBFFFBBLLR
-BFFFBBFLRL
-FBFFBFBLRL
-FBBBFFFRRL
-FBFFFFBLLL
-BFBFFBBRLR
-BFBFBBBLRL
-BFFBFBBRLR
-FBBFBBBLLR
-FFBFBFFRLL
-FFFBBBBLRR
-BFBFFFFLLL
-BBFBFBBLLR
-BFFFBBBRLR
-FFBFFBFRLR
-FBBFBBBLRL
-BBFFFBBLLL
-FFBFFBBRRR
-FBBBBFBLLR
-BBFBBFFRLL
-BFBBBBFRLR
-BBFBFFBRLR
-FFBFFFFLLL
-BBFBFBFRLL
-FFBFFBBRLL
-FBBFFFFRLR
-FFBBBBBRRR
-BBFFBBBLRL
-BFFBBFBRLL
-BFFFBBFRLL
-BFFBFBFLRL
-FBFFFFFRRR
-BFFBFBBRRL
-FBFBBBFLLR
-FBFBFBBRLL
-BBBFFFFRRR
-BFBFBFFLRL
-FFFFBFBRLL
-FFBBFFBLRL
-BBFFBFBLLL
-BFFBBBBRLL
-BFFBBBBRRR
-BFBBBBFRRL
-BBBFFFBLRL
-FFBBFFFRRR
-BFFFFFBRLR
-FFFBBFBLLL
-BFBFBBFRLR
-FBBBFBFLRL
-BFBFBFFRLR
-BBFBBFFLRL
-BFFFBFBLLL
-BFFFFBBRLL
-FFBFFFFRRL
-BFFBFBBLLR
-FFFFBBBLLL
-FBBFFBBRRL
-BFBFFFFLLR
-FBFBFBFRLL
-FBBBBBBLRR
-BBFFFFBLRR
-FFFFBFBRRR
-FBBBBFBRLL
-BBFBFBBLRR
-FFBBFBFLLL
-BFBBFFBLRL
-FFFBBBBRRR
-BFBBFFFRLL
-BFBBBFBRRR
-FFFFBBFRLR
-FFBBFBFLRR
-FFFFFBBLLR
-BBFBBFBRLL
-FBFBBBBRLR
-BBFFFFBLRL
-FBBFFFBLLR
-FFBFFBBLLL
-FFFBBBFLLR
-FFFBBBFRRR
-FFBBBFBRRR
-FFFBBFFRRR
-FFBBFFBLLR
-BFBFFBFRRR
-FFBFBBFLLR
-BFFFFFFRRR
-FFBFFBFLRL
-BFFBFBBRRR
-FBFBFFFRLL
-BBBFFFBLLL
-BFBBFBFRRL
-BFFFFFBLRR
-FBBBBBFRRR
-FFBBBBFLRR
-BBFBBBBLRR
-BBFBFBFLLR
-FFFFBBFRRR
-FFBBBBBLLR
-BFFFBFBRLR
-FBBBFFBLLL
-FFFFFFFRRR
-FFFBFBFRRL
-BFBBFBBLRR
-FBBBBFBLRL
-FBBBBFBRRR
-BFFFFBFRRR
-BFFBBFFLLL
-FBBFBFBLRL
-BFBBFFFRRL
-FBFBFFBRLR
-FBFFBFFLRR
-BFFFBFBLLR
-BFBBFFBRRR
-BBFBBFBLLL
-BFFBFFFLRR
-FFFBBFFRLL
-BFBBFFFLLL
-BFFFBBBRLL
-FBFFBBFRRR
-FFBFBFBLLR
-FBFFFFBLRR
-FFBBFFFLLL
-FFFBBBBRRL
-BBFBFFFLLL
-BBFFBBFLLR
-BFBFBBBRRR
-FBBBBFBRRL
-FBFFFBFLLR
-FBFBBBFRRR
-BFFFBFBRRL
-FBFBBBFLRL
-BBFFBFFLRL
-BBFBBFFLLR
-FFFFBFFRLL
-FFFBBBBLRL
-FBBBFBFRLL
-BBFFFBBLRL
-FFFBFFBLRR
-BBFBFBBRRL
-FFFFBBBRRR
-FFBBBBBLRL
-FFFFFFBLLL
-FBFFFFFRRL
-FFFFFBBLRR
-BFFFBBBRRL
-FBBFFFFLRL
-FFFFFBBRLR
-FFBFFBFRLL
-FFFBBBFRRL
-BFBBBFFLRL
-FFFFFBFLRR
-BFBFBBBRLR
-FBFBBBFLLL
-BFBFFBFLRL
-FFBFBFFRRR
-FFBBFFFRLL
-BFBFBFFLLL
-FBFBFBBRLR
-BFFBBBFRRL
-FBFFBBBRRR
-FBFBFBBLRR
-BFBBBBFLLR
-FFFBFFFRLR
-BFBBFFBRRL
-BFFFBFFLRL
-BFBFBBFRRR
-FBBFFBFLLL
-FFFFFFBLRR
-FBFFBFBLRR
-FFBBBFFLRR
-FBBBFFBRLL
-BFFFBBBRRR
-FFBFFFFRLL
-BBFFFBFRRR
-BFFBFBBLLL
-BFBBFFBRLR
-FFBFBBBLRR
-FFFBFBBLLL
-FFFBBFFLLL
-FBBBBBBLRL
-BFBFBBBLLL
-BFBFFFFRRL
-FFBFBBFRRR
-FFBFBFBRRL
-FFFBBBBRLL
-BFFBFFBRLL
-BBFFFFBRRL
-FFBFBFBLLL
-FFBFBFBRLL
-FBFBBBFRRL
-FBFFBBFRLR
-BBBFFFFLRL
-FBFBFFFRRL
-FFFBFBFRLR
-FBFBFBBRRL
-BFBBFBBLLL
-FFBBBBBRLL
-BBFFBFBRRL
-FFFBFFFRRR
-FBBFBFBLLL
-BFFFBFFRLR
-FBFBFFBRLL
-BBFBBFFLLL
-FBBBBFFLRR
-FFBBBFFLRL
-FBBBFFBRRR
-FFBBFBBRLR
-FBFBBFFLLR
-BFBBBFFLLR
-FFFBBFFLRR
-FBFFBFFLRL
-BFBFBFFLRR
-BBFBFFFLLR
-FFFBBBBLLR
-FFBBFFBRLL
-BBBFFFBRLL
-FBFFBFBRRL
-BFBFFFFRLL
-FBFBFBFRLR
-BBFFFFFLLL
-FFBFBBBLLR
-FFBFBFFLRR
-FBBBBFBRLR
-FFBFBBBRLR
-BFFBBBBLRL
-FFBBBBBRLR
-BFBBBFFRRR
-FBFBBFBRLL
-FFBFFFBRRL
-BBFBFBFLLL
-BFBBBFBRLR
-BFBBFBFLLR
-FBBFBFFRLL
-FFBFBBFLRR
-BFFBFBFRLL
-FFBBFBBLRL
-FBFBFBBLRL
-BBFFFBFLLR
-BFBFBBBLRR
-BBFFBBBLLR
-BBFFFFBRRR
-BFFFFFBLRL
-FBBBFBBRRR
-BFBFFFBLLL
-FFFBBFFLLR
-BFFBBFFLLR
-BBFBBBBLRL
-FBBFBFFLRR
-FBFBFFBLLR
-BFFFFFFLLL
-BFFBBFFRLL
-BBFFFFFLLR
-FBFFBBFRRL
-FBBFFFFLLR
-BFBFFBBRRL
-FFBFFFBLLL
-BFFFFFBLLR
-FFBBBFBRRL
-FFBBBBFLLR
-BFBFFFBLLR
-FFFFBFFRLR
-BFBBFFBRLL
-FFBBBBBLLL
-FBBFBFFRRR
-BFFFFFFLLR
-FFBBBBBLRR
-FFFFFBFRRR
-BFFFBBBLLL
-BFFFBFFRRR
-FFBBBFBRLR
-BFFBBBBLRR
-BFBBBFFRRL
-BFBFBFFRRR
-BFBBFBBRLR
-BFBBBBFRLL
-FFBBBBFLLL
-FFFBBFBLRR
-FBBFBBFRLR
-BBFBBFFLRR
-FBBFBBBRRL
-BFFBFFFRRL
-BFFFFBFLRR
-FFBFBBFLLL
-FFBFBBBLLL
-FBFFBFBRRR
-FFFBFFBRLL
-BFFFFBFLRL
-FFFFBFFLLR
-BBFBBBBRLL
-FBFBBFBRRR
-BFFFBBBLRR
-FBFFFBFRLL
-FFBBBFBLRL
-FBFFFBBLRR
-FFBBFBFRLR
-FBBBBBFLRL
-FFFFBFBLRR
-BFBFBFBLRR
-FFBBFFFLRL
-BFFBBBFLLR
-FFFFFFBRLR
-FFBBBFBLRR
-FBFBBFFRLL
-BBFBFBFRLR
-FBBFFFFLLL
-BFBBFBFRRR
-BFFBBBFRRR
-FBFFFBFLRR
-FBBFFBFLRL
-BFBBFFFLRR
-FFBFFFFLRL
-BFFBFFBLLL
-FFFBFBBRRR
-BBFFBFFLRR
-BBBFFFFRRL
-FBBBFFBLRL
-FBBFFBBLRR
-FFBFBFFLLR
-FFFBBFFRLR
-FBBBFBBRLR
-FFFFBBBLRR
-BBFFBFBRRR
-FBFBBFFLRL
-FBBBBFFLLL
-FFBFFBBRLR
-BBFFFFFLRR
-FFBFBFBRLR
-FFBFBFBLRL
-FBBBFBBLRL
-FFFBFBBLRL
-FBFBFFFRRR
-BFFBFFFRLR
-BFBBFFBLLR
-BFBFFBFRLL
-FBFBFBFRRR
-FBFFFFBRLL
-FFFFFBBRRR
-FBBBFFFLRL
-FFFBFFBRLR
-BFBFFBFLRR
-FBBFBBFRRL
-BFBBBBFRRR
-BFFFFBBLRR
-FBFFFFFLLL
-BFBFFFBRRL
-FFFBFFBLRL
-FFBFFFBLRR
-FBBFFBFRLL
-BBFBFFBLLL
-BBFFBBFLLL
-FFBBBFFRLL
-BFBBFFFLRL
-FBBFBFFLLR
-FBFBFFBLLL
-FFBBBFFLLR
-FBBFFBFLRR
-FBBFBBFRRR
-BFFFFBBLLL
-FFFBFFBLLR
-FBFBFFFRLR
-FBFBFBBRRR
-FBFBBFBRRL
-BBFBBFBRRR
-FFFFBBBRLL
-FBFFBBBLRL
-BBBFFFFRLL
-FBFFFBFLRL
-BFFFFBFLLR
-FBFBBFFRRL
-BFFBFBBLRR
-FBFBBBBRRL
-FBFBFBBLLR
-FBFFBBFLRR
-FFFFBFFLLL
-BFBFFFFRRR
-BBFFBBBLRR
-FBFFFFFLLR
-BBFBFFFRLR
-BFFFFBBRLR
-FBFFFFFLRL
-FBBBFBBLRR
-BFFBBFBLLL
-BFFBFBBLRL
-BFFBBBFRLL
-FFBFFBFRRR
-BFBFBFBRLL
-BBFBBFBLLR
-FBFBBFBLRL
-FBFFFBBRLR
-BBFBFFBRLL
-BBFFFBFRLR
-FBBFFFBLLL
-BBFBBBBLLL
-BFFFFFFLRR
-FBBBBBFRLL
-BFFFBFBRRR
-BFFFFFFLRL
-FBBBBFBLRR
-FBFFBBBRLR
-FFBBFBFRRL
-FFBBFBBRRL
-FFFBFBFRRR
-FFBBBBFLRL
-BFBBFFFRRR
-FBFBBBBRLL
-FBFFBBFRLL
-FFBFFFFRRR
-BFFFFBBLLR
-FBFBBFBLLR
-BBFFBBBRRR
-FBBFBBBRLR
-BFBFBFFRLL
-BFFBBFBLRL
-BFFBFFFRRR
-FFBBBFBRLL
-FBFFBFFRRL
-FBBBBFFRRR
-FFFBBBFRLL
-BBFFFBBRLL
-BBFFFBBRLR
-FFBBFFFRRL
-BBFFBFBLRR
-BBFBFFBRRR
-BFBBBBBLRR
-BFFBBFFLRL
-BBFFFFBLLL
-FFFFBFBRRL
-FBBFFBBRRR
-FBBBFFFLRR
-FBBFBBFLRR
-FBBBFBBLLL
-FFFFBBFLRL
-FFFFFBBLLL
-BFBBBBBLLR
-BFBFFFFLRR
-FBFFFFBLLR
-BBFFBBBRLL
-FBFFBFFRRR
-FFBBFBFLLR
-BBFBBBFLRR
-FBBBBBBRLL
-FFFFFFBLLR
-FFFFFBFRLR
-FBFFBFBRLL
-BBFFBFFRRR
-BFFBFFFLLR
-FFBBFBBLRR
-BBFFBBBRLR
-FFBBFFBRRL
-FBBBBFFRRL
-BFBFFFFRLR
-BFBBBFBLLL
-BFBFFFBRRR
-FBBBFFFRLR
-BFBBFFBLRR
-BBFBBFFRLR
-BBFFFBBRRR
-FFFFBBBRRL
-FFBFBBFRLL
-FBFFFFBRRL
-FBBBFFBRLR
-FFBFFFBRRR
-FBBBBBBLLL
-BFFBFFBLRL
-FBFFBBBRLL
-BBFBBBFRLR
-BFBFBFBRLR
-BBFFFFBRLL
-FFBBFBBLLR
-FFBBFFBRLR
-BBFBBBBRLR
-BFBBBFBLLR
-FFFFBFFRRR
-BBFFFBFRRL
-FBBFBBBLLL
-FFFBFFFLRL
-BFFFFBBRRR
-FFFBFBFLRL
-BBFFBBFRRR
-FBBFFFFLRR
-FFFBBBFLRL
-BFFBBBFLLL
-BFBBFFBLLL
-FFFFFFBLRL
-FBFFBFFLLL
-FBBBBBBRRR
-FBBFFBBRLR
-BFFFBBBLLR
-BBFBBBBRRR
-BFBFBFFLLR
-BFBFFBFRLR
-FBBBFFFRRR
-FFBFBBFRLR
-FFFFFBFRLL
-FFBFBBBRRR
-BFBFFBBLLL
-FBBBBBFRLR
-FFBBFBBLLL
-BFBFFBBLRL
-FBBFBFBRRL
-BFFBBBBRRL
-FBBFFFBLRL
-FBBFBFBLLR
-FBBFBBBLRR
-BFBBBFBRRL
-FBBBFBFLLL
-BFFFBFFLLR
-FBBBFBFLRR
-FFBFFBBLRL
-BBFBBBBLLR
-BFFFBFFLLL
-FBFFFFFLRR
-BBFBFBBLRL
-BFBFBBFRRL
-FBFBFFBLRR
-BFFFFFFRRL
-BFFFFBFRLR
-BFBBFBBRLL
-BBFFFFFRLL
-FFBBFFFLLR
-FFFBFFFLRR
-FFFBFFBRRR
-BBFBFFBLLR
-BFFBFFFRLL
-FBFBFFBRRL
-BFBBBFFLLL
-BBFFBFBLRL
-FBFBBFFLRR
-FBBFBBBRRR
-FFFBBFBRLL
-FBBFBFBRRR
-BFFFBBFLLL
-FBBBFFBLRR
-BFBFFBBRRR
-FFFFFFBRLL
-BBFFFBFLRL
-BFBFBFBRRR
-BFFFBBFRLR
-BFBFFFBLRR
-FFFBFFBRRL
-BBFFFBBRRL
-BFBBBFBRLL
-BFBFFFBLRL
-FFFBFFFLLR
-BFFBFFFLRL
-BBFBBFBLRR
-FBBBFBBRRL
-FBBFBFFRLR
-FBFFFFFRLR
-FBBBBFFRLR
-BFBFBBFRLL
-BBFBFBFRRR
-BFBFBFBRRL
-FBBBBBBRLR
-BFBFBBFLLR
-BFFFBBFRRL
-BBBFFFFRLR
-BBBFFFBLLR
-FBFBBBFLRR
-FBFFFBBLRL
-FBFFBBBLLR
-BFBFBBFLRR
-BFBBFBBLRL
-BFFFFFBRRL
-FFBBFFFRLR
-BFFBBFFRLR
-BFBFBFBLRL
-BFFBFBFRLR
-FFBBFFBRRR
-BFBBBBBLLL
-BBFFFFFRRL
-BBFFFFFLRL
-FFFBBFFLRL
-BFBBFBFRLL
-FFFBBBBLLL
-FFFFFBFLRL
-FFFFBBFLRR
-FBFFFBFRRR
-BFFBBBBLLL
-BBFBBFFRRL
-BFFFBBFLLR
-FBBBFFFLLL
-FFBFFBBRRL
-BFBBBFBLRR
-BFFBBBFLRL
-BFBBBBBRLL
-FFFBBBFRLR
-FFFFBFFRRL
-FFBFBFFLLL
-BBFBFFFLRL
-BFFFBBFLRR
-FFFBFBFRLL
-BFBFFBBLRR
-FFFBFBBLLR
-BBFFFFFRLR
-FFBFBFFRRL
-FFFFFBBLRL
-FBBBFBFRRL
-FBBBBFBLLL
-FFFFBBBRLR
-FBBBBFFLRL
-BFBBBBBRRL
-BBFFBFBLLR
-FBFBFFFLRL
-FBFFFBFRRL
-FFFBBFBLRL
-BFFFFFBLLL
-BFFBFBFLLL
-FFFFBBFRRL
-FFFBFBBRLR
-FBFBBBBRRR
-FBFFBBBLLL
-FFBBBBFRRR
-BFFFFBFRLL
-BBFBFBBRLR
-BFFBBBFLRR
-FBBFBFFRRL
-FFFFFBFLLL
-BBFBFBFLRR
-FFBFBBFLRL
-BFFBBFBRLR
-FFBBBFFRLR
-FFFBBFBRLR
-FBFBBBBLLR
-BFFBBBBLLR
-BBFBFBFLRL
-BBFFFFFRRR
-FFFBFFFRRL
-FBBFFBFRRR
-BBFFBFFRLL
-FFBBFBFRLL
-FFFFBFBLLR
-BBFFBBFRLL
-BFBBBBFLRL
-FBFFBFFRLR
-BFBFBBFLLL
-FFFFBBFLLL
-BFBBBBBLRL
-FFBFBFBLRR
-BFFFFFBRRR
-FBFBBBBLRL
-FBBFBBFLLR
-FBBFFFFRRL
-FBFFFBFLLL
-FBFFBBBRRL
-FFBFFFFRLR
-FBBFBBBRLL
-FFFFBFBRLR
-FFBFBBBRRL
-BFFBFBFRRL
-FFBFFBFLLL
-BFFBFBFLRR
-BBFBFFBLRL
-BBFFBFFLLR
-BFBBBBFLLL
-BBFBBFFRRR
-BBFFFBBLRR
-BFBFFBFRRL
-FBBFBFBLRR
-BBFBBBFRRR
-FFFBBFBLLR
-FFFBFFFLLL
-FBBBFBFLLR
-BFBBFBFLLL
-BFBFBFBLLL
-BBFFBBFLRR
-FFFBFBFLRR
-BFFFFFFRLR
-BBFBFBBRRR
-BBFFFBFRLL
-FFFFBBFRLL
-FBBFBBFRLL
-FBFFFFBRRR
-FBFFBBFLLR
-BFFBFFBLLR
-FFBFFBFLRR
-FBFFBFBRLR
-FBFBBFFLLL
-FBBFFFBRRL
-FBFBFBFRRL
-FFBFBFBRRR
-FBFBFBFLRL
-FFFBFBBRLL
-FBBBFFFLLR
-FFBBBBFRLL
-FBFFFBBRLL
-BFFBFFBLRR
-FBBFBBFLRL
-FBFFFBBRRR
-FBFFFBBLLR
-BFFBFFBRRR
-FBBBFBFRRR
-FBFFFFFRLL
-BBFBBBFRLL
-FFFBFFBLLL
-FFBFFFFLRR
-FBFFFBBRRL
-BBFFBFFRLR
-FBFBFBBLLL
-FBBBBBBLLR
-FBFBBFBLLL
-BBFBFFFLRR
-BFFFFBBRRL
-BBFFFBFLRR
-FFBFFFBRLL
-FFFFBBBLRL
-BFBBBFFRLL
-BBFBFFFRLL
-FBFBBBBLLL
-BBFBBFBRLR
-BBFFBFBRLR
-BFBFFFFLRL
-FBBBFBFRLR
-FFBFFFBRLR
-FBBBBBFLLR
-FFBBBFBLLR
-BFFBBFBRRL
-BBFFBFFRRL
-FFFFFFBRRR
-FFBBFBBRRR
-FBBBBBBRRL
-BFFBBFFRRL
-FBBFBFBRLR
-FBBFFFFRLL
-FBBBBBFLLL
-FBBFFFBRRR
-BFFFFBBLRL
-FFFFBFBLLL
-FBFBFFFLLL
-FBFBBFBLRR
-FFFFBFFLRR
-FFFBBBFLRR
-FBFFBFFLLR
-BBFFBFFLLL
-FFBFFBFRRL
-BFBBFBBRRR
-BBFFFBFLLL
-FBFFBFBLLL
-BFFBFFBRRL
-BBFBFFBLRR
-FBFBFFFLRR
-BFBBFBBLLR
-BFFBBFFRRR
-FFFFFFBRRL
-BBBFFFFLLR
-BFBFFBFLLL
-FBBBBBFRRL
-BFFBBBBRLR
-FFBBFBFLRL
-FBFBFFBLRL
-FFBBBBFRLR
-BBFBBFBRRL
-FFFFFBFLLR
-FBFBFBFLLL
-BFBFBFBLLR
-FFFBFFFRLL
-BFFBBFBLLR
-FFBBFBBRLL
-FFFBBFBRRL
-FBBFFBBLLL
-FFFBBBBRLR
-FFFBBFBRRR
-BBFFBBBRRL
-FBBFBFFLRL
-FBBBBBFLRR
-BBFBFFBRRL
-FFFBFBFLLL
-FBBBFFFRLL
-BFFBFBFLLR
-FFBBBBBRRL
-BFFBBFFLRR
-FBBFBFBRLL
-BFFFBFFRRL
-BBFFFFBLLR
-BBFFBBFRLR
-BFFFBBFRRR
-FBFBBFBRLR
-FFFFFBBRLL
-FBBFFFBRLL
-BFFFFFBRLL
-BFFFBFBLRR
-BFFBFFBRLR
-FFFFBFBLRL
-FFBFFBFLLR
-FBBFBFFLLL
-BFFBFBFRRR
-BBFBBBFLRL
-BBBFFFFLRR
-BFBBFFFLLR
-FBBFFFBRLR
-FFFFFBFRRL
-FFFBFBBRRL
-BBBFFFBLRR
-FFBFBBFRRL
-FFBBFFBLRR
-BBFFBBBLLL
-BFBFBBBRRL
-BFFFBFBRLL
-FFBFBBBRLL
-FBFBFBFLRR
-FBFFFBBLLL
-FBBFFBFLLR
-BFFFFBFRRL
-FFBBBFFRRL
-FFBFBFFLRL
-BBFBBBFLLR
-FBBFFBFRLR
-FBBFFBBRLL
-BFBFFFBRLR
-BFFFBFFRLL
-BBFBFBBRLL
-BFFFFFFRLL
-FBFBBBFRLL
-BFBBFBFLRR
-BFBFBBBRLL
-BBFBBBFRRL
-BFFBBFBRRR
-BFBFFBFLLR
-FBFBFBFLLR
-FFFFFBBRRL
-FBFBBBFRLR
-FBFFBBFLLL
-FFBFBFFRLR
-BBFBFBBLLL
-FFFFBFFLRL
-FBBFBBFLLL
-BFBFBBFLRL
-FFFFBBFLLR
-BFBBFBBRRL
-FBBBFFBRRL
-FBBBBFFRLL
diff --git a/2020/inputs/day_6.txt b/2020/inputs/day_6.txt
deleted file mode 100644
index ae67ede..0000000
--- a/2020/inputs/day_6.txt
+++ /dev/null
@@ -1,2199 +0,0 @@
-nvlyak
-nyvha
-yaen
-qynia
-
-kend
-endk
-
-atxcykpvmb
-pcvmthyxbak
-ayvpcbtkxm
-cvpkyabtmx
-typbmvckxa
-
-s
-s
-s
-s
-
-on
-aoqc
-owq
-coa
-
-pw
-wpi
-pwxlhqor
-pw
-
-nx
-xn
-
-dlevrzpucfmsq
-pceimlrfsquvd
-dpceruqsfmlv
-hgxudfpqyvbcslrjname
-
-kczmswvorg
-uryvlqaogmdixs
-rmostvg
-gsrmovb
-
-ref
-fer
-
-vmwdhgnlfiyoepsujbk
-epudykjwhignmfbovsl
-fjvuimnwbkogsldhpey
-ibmhuscpgeolfkynvdwj
-psjgubfvlhaknodeiywm
-
-fmnpljusix
-vqrefngyjdahclk
-lfjons
-
-y
-uiwl
-
-lsuqkmjinrzhgevfpwto
-gkmodihnsjtful
-ciguflhkojmtsn
-thkjnoufsimgl
-oskgmdfljntuhi
-
-gaktdwxhmqvfrpsuc
-hmtwkgipdvaurxqf
-akrmpxtughdqwfbv
-gumqniswhrdkvftaxp
-hagouqxpzrjlmedftywkv
-
-zkbyecw
-kczeybw
-wbeyakuzc
-
-iwdkjlarzfynvechgbxsq
-jetfxrzdbcksnavilmwgyh
-wvexlryjbizfgkhanqdcs
-
-vk
-kv
-kv
-vk
-
-yrguw
-rguyw
-pwuryg
-gnuwry
-
-dyhkusanvjwc
-ukaywncj
-uyqjknwac
-aknyjcuw
-jnukwaytxc
-
-toczmkldrevywiajgn
-jyldmgewcvrozinkat
-iynkmatdjerlogzwvc
-
-pthyrfjgqelxa
-qfejxtrynlh
-xwdfkuziyhejtqovrmlc
-
-osjrgc
-vohfpa
-goc
-gjo
-
-j
-jon
-j
-xdj
-
-bpqhmgwzakfrtjvuno
-eafupgombqnwrkzth
-frwqtdngpbhuaklzmo
-wgtnuchpkqibfzmravso
-mfbtvkghauzopnrwq
-
-xiocgdwpastbmyj
-rdzgcbtfaomsy
-dstgbcymozkqal
-
-xvc
-cvx
-xvc
-xvc
-
-dhvtlqkeniymjzoa
-eoazjnhvtkyqdlm
-koltmeyqjhzdva
-doumkhrlyzjqeagtcv
-
-mn
-mfhw
-
-kx
-x
-jm
-
-x
-xv
-
-tdhyubvwqfxejslpringc
-xqhvtbfwrygsdapjiulnec
-vnwbsurdiexghpjtlycqf
-
-pqtdgsmkolzryca
-qjguxdratfeclpmoy
-
-twnviyzmlk
-gknjmyqvziwl
-
-deoabzihqvycxn
-iqcxadpehvry
-
-dbflcxvnapwgei
-pchmodnafl
-hadcflpn
-dlcfanp
-
-tk
-kt
-
-peuroxtzyg
-iwdcnlqfskmbavjh
-
-mjfh
-ynkbrsdpwoqtagci
-lvx
-ujxez
-xl
-
-gyuszwb
-sioduawzrglb
-tsbumxwzg
-zwgeuxbs
-
-tujvkwpy
-tyvrpmjfk
-vwpkuyjt
-
-wdkqailvjmfcshugy
-qugwvlxdsikhfmyjac
-dkiscawvyfqhmjlug
-
-noblsu
-snloub
-sulobn
-lonubsm
-
-osecqjbfg
-fljbmiose
-ojesfbt
-
-zmctviabre
-ajzmicetrvb
-ctmivabzre
-yrztbmieavc
-mivcbtazer
-
-tyql
-osmjgxzrcakn
-iwftdbl
-
-nmqflphkvyjcatgbzd
-jxzemtvdknwqr
-
-ilxrytkdpmsevfjchozqw
-tpdrjxwihvlycozemsfkq
-hitwfmzvjpylcodbqxsrke
-
-flhp
-pflh
-
-ao
-a
-o
-o
-gljzn
-
-ajmkvwqu
-ogvjzwta
-whalvuj
-
-mhktpynfrjgblaqueox
-anmjxplvibukhztqersy
-tabljcpemkyrxhunwq
-
-lnkvfawqo
-nofpsqwavylz
-vofwalqen
-hcnowiaqlfv
-
-dofxbaqrtnyvkpljmhsu
-uklstfynmbxhapojqi
-tufmnpaqyojsklxhb
-oanlusqmxftkpjbhy
-
-tpjle
-the
-vtpez
-ytern
-ouecxwfkt
-
-jbna
-xepqbmufn
-ybjni
-
-jklhaxoqysbt
-tzwpcf
-tenfcvdmpzu
-
-kyqumgfrdiapzwojtvch
-fvczqjrgadiwhnpluomk
-dpwkmrjzauiqvfgcho
-nkpwrmzidfahcvjuogq
-azrkxioghpvcudmwqfj
-
-udjshwgpeaozimcl
-fylwnoevcza
-evlakborcfwz
-
-xhued
-iubgewo
-
-lywovcemagd
-ahveyomxsl
-oqzyfljavbe
-
-pkyn
-befycqpi
-pysk
-yp
-
-mgi
-mgi
-digm
-gmi
-
-cgdqeoyfjranxuv
-lwnkzeptsdqihvcujmg
-
-wzqrhgibdxuyl
-ludbwqxgiyr
-yruxibwdgql
-bgtwqxruylid
-buyrwlidgxq
-
-gqwvxspbl
-xvbwpsgql
-bspgxwvql
-cwlxsvqgpb
-sgpxqblwv
-
-camqk
-onaslperix
-jauw
-yatm
-
-z
-z
-z
-z
-z
-
-fx
-fxe
-
-goemcr
-roegm
-sgmxiero
-ogmert
-germo
-
-czgdxtiprhnwqeujkfl
-dyhmkanzwbv
-
-n
-e
-
-dkcjqbw
-o
-gp
-h
-
-zbwcu
-ubf
-mveurnab
-
-tqwbxuc
-qcwutxb
-ucbxwqt
-xqwutbc
-xqtuwcba
-
-uwhqrt
-wrtq
-trwq
-crtqw
-wrtqc
-
-rqfntm
-nrqm
-rqmn
-
-limsht
-alstikh
-ilhst
-uhitls
-lsahti
-
-oaex
-vsgyo
-lziu
-
-cwqdlxbst
-cdxtlwbsq
-
-hgqc
-hgdq
-qhg
-
-eh
-he
-eh
-
-zfutalwkxms
-ukxltsfzmwa
-
-zpklocsqgwyhb
-zobyqhlcksgpw
-zhspqwovjylkgbc
-
-ymkudfqethwgji
-emtuyfwghjdqki
-zwyeumktfhjdirgq
-wymqgifkudjteh
-
-edhqnrxtpz
-tqdxznrhep
-qzepndrthx
-exzrhnqptds
-zetyhrpdqunx
-
-vmleax
-valxum
-vpmlax
-axlpvumz
-clvamxbn
-
-ebt
-xr
-rl
-u
-
-vzny
-nz
-nz
-
-ywebzj
-ywefjzb
-bxwnjcyzkep
-zjeywfpb
-yldrbhsizajewvu
-
-hfd
-dmf
-fadh
-dvmf
-fcousnld
-
-egar
-hwnrgzcp
-bgofedjr
-jkruvsylg
-rdvgue
-
-jsge
-hesqg
-esug
-
-xaoz
-ocuqev
-fwgrlp
-otxv
-
-fzemjdhwb
-xhdmjzbe
-
-ytsfpumedxqvzhl
-fdteschymvxqlpz
-phyrfwtqlaxgvznesd
-hvlextsbqpzyfd
-jydlhetzoqfpsvix
-
-jxkrobp
-rsplxbgk
-yxmbpkorhj
-
-injbuyktrcs
-bcsriktuny
-skyrhbtnucxe
-
-duck
-cykuv
-osfcurnlwax
-uvmc
-
-vpt
-tpv
-pvt
-vpt
-vtp
-
-dacxvsi
-icaxsd
-xdihcneas
-
-nf
-nkf
-fn
-
-yrewaxckd
-wtydesfcr
-erdftwqyc
-
-hmfezapkqjyri
-ekqajhyzfpmri
-raikjeqmhfypz
-qjmyrekfzphai
-frtjeqkimhazpys
-
-ryxmsbqovuidphfwecajnz
-hdjmiqbxnpvouyfcewsazr
-vubyrcmqeswafxjzhinpdo
-cbjmnaoqurlhsifvwzdexyp
-
-iu
-ui
-isutlr
-iu
-iu
-
-lftaziorb
-rvamfeyjgqnx
-frtak
-aifr
-aftzr
-
-us
-schk
-
-bjafywgieth
-tifbhyjgwade
-imhwefbgatjy
-wgtyifejbah
-
-a
-yj
-b
-iab
-
-qkgazumerlhb
-syritxopfvd
-
-gdiakrne
-ygdpcwqfbmikzanver
-dolarkigen
-gtkanierdh
-
-axv
-axdvl
-
-erpjfh
-prgjfeh
-hrejpf
-pejfhr
-ejrhfp
-
-zijsrtcqdxmy
-mtxdfyji
-timydgxj
-jtmhvakxidyn
-iyjmwdvxnt
-
-rh
-har
-
-tdoyugpljirwenzx
-nurlzgjtyopide
-jnrlitgpzdoyue
-zlptnudjryogie
-pzgyeoliturnjd
-
-ivcyexsotkzqmr
-sgfjhqnpy
-
-omw
-joq
-mop
-
-welbhpzftgjinqyk
-gwpdjqacitshlbykfzmrx
-
-sygqwn
-fwyqsdg
-scgwqy
-
-gdjzwbhltxs
-dlkojzbq
-jfavyipcembun
-
-cydkuqlhan
-uavstnychbqxk
-azqntcuyhk
-
-k
-bf
-z
-w
-
-gyh
-e
-
-rhmpg
-pmhgr
-rpmhg
-
-pas
-vhtsaqfgnu
-kpjsa
-sab
-jcopska
-
-tsjabirpehudncx
-custniapedhxrb
-cepnuastxhdirb
-shbpetcdaxuinr
-dbtiepaucrshnx
-
-tuswfrqpgxk
-kprjsdtqxunf
-pxwfrtuqske
-xwskmfprqut
-pfrtxqskhu
-
-szirxjtu
-zuxjtsi
-jutsxiz
-usjitxz
-ijstxuz
-
-zqesxfbmrivokl
-mevkzirbfol
-fbkomeyvilrz
-
-rlwoeckxnh
-xebkornwcl
-xcoknwler
-wnlkrcoex
-kecronwxl
-
-fmdbraihnpxytkcgezu
-kbeyxmadczhritnpuf
-pnhfmubicxteadrzyk
-updrybtmhzefcnxkia
-kbezfjwmhytnixacudpr
-
-w
-w
-w
-w
-
-fgwdoctvpzymhbrkjxn
-yaqjctxvsrozmwk
-xkwozitrvmeqjcyl
-cwkazxtrmlijyov
-
-vnym
-bvmy
-yvm
-byvm
-vym
-
-mxjblongrfahycqvpu
-ncywhdpxefajbrgloqu
-
-sgukdmfqvbwcei
-zigahlxojdnpc
-
-fudobaklngyjqpstmiz
-psflydzmbtkiqaojgnu
-itgzqsfdyabnolpjkum
-sitlkyuqnjodzmpbagf
-ytdijopqublaksmngzf
-
-vhaobfn
-ohbnfav
-vahofbn
-naovhfb
-
-tfhsqwcbrv
-iqrbzspnwyhtfc
-
-pfbwotesuyhkvgx
-vnrlcxayzdmih
-
-nbyhpfklvtqo
-qbtjopfyk
-qpoeybfkt
-
-uvmgzs
-pvsmizrug
-ghvmszu
-mugszcv
-kusmvzg
-
-mua
-amu
-uma
-mua
-
-d
-m
-
-s
-s
-yuk
-s
-
-gtjqp
-pfotsh
-pshgbt
-wpeztyr
-bqjtplo
-
-zwbvestiaoljy
-gmnzshupfqre
-
-anvsdkbltiugc
-tqsdcanuibgvkl
-stkrvabegidclxun
-takcsgnuvmdibl
-cvqsklngiubadt
-
-txvfnuwcljpqkeryoamigd
-jgarvmodftpniekquxszcyhb
-
-htu
-hegb
-whf
-
-jn
-nj
-jn
-
-vcjlxekmqzoduphynw
-hkyeojlvndumcwzx
-ozhdnvjeckwlmuxy
-ujxdyznvlcmokhew
-vdywzekucjnhoxlm
-
-blxuhyvjrzow
-uzlwokmsripy
-
-rum
-mrl
-rbwfmz
-durmq
-
-obcpqvkitduelwf
-ahcrwiltpuedfobxkv
-cvijgzoukptwdfble
-kpqjduetilovfcbw
-
-irfqsp
-wifas
-
-xvgyrpq
-yrpqvhgzx
-fspxmrivkwgycnequ
-axhyqrpvgz
-xdygqvrpa
-
-xrlmcsibvea
-bdcveasxzip
-esvbclaxi
-vaxsbcei
-xaeibsvc
-
-songrtmwhpydqizlf
-halvzroefxcsubt
-
-uqozritygam
-kmtryqvz
-qfmjstkyrz
-
-rqtepcofhuylnxaj
-xoptqwruhijsmnzcylfe
-hxqcpyfjntleuro
-brjyuoetfxpndlvcqh
-
-prltixwohdmfjukgqzsv
-orluxtzpvjafdqwkhsgbe
-
-iyhuarewvbfjmlz
-vramijyfzhbew
-zyehbmwvifjra
-vjmweybazihrf
-
-duixtbqyhomsla
-suinmaxtlqdoyhb
-htiquxmaybosld
-
-pselyhov
-zhwpovekt
-snheopv
-ivxophe
-nhpoeuv
-
-amqcriebkojlwyuxnhfdptgzvs
-uovdszkygbjhanefqxplimtwcr
-
-ozngukih
-nvksbd
-
-grkotivmcxnyubwleqspjzhfad
-ekmqxnfabwiduopjsgclzvyhtr
-
-jzv
-wzxfivmjb
-zjvp
-zjv
-jzvs
-
-js
-evqis
-qxs
-swyct
-s
-
-n
-n
-zn
-
-udjtxws
-usdwixj
-
-lf
-l
-
-cdsaxzlv
-jcsxlnydtrzvk
-lvdqamzsxhc
-udlxwczvgs
-
-gutwbrhjxyeam
-jrleawgbsnxthimyu
-rbjexdythumwag
-hrwjmoexytqaubg
-uwymabxrhjqgdect
-
-vipjrlbsmcogxznty
-vetpngyzsbmoxcrijl
-hoxvbsnjlfygmrczpti
-pmlgzyasvxticjbrknod
-
-xzakbvtehnlciswmyufjdrgo
-kocmslwbgvuxijernzydfhat
-vcdxgkslnzoarmjwutyiefbh
-tzhugvbcnokyxsfliwardmej
-
-up
-u
-pu
-fu
-
-cbzjelmqivw
-ickezvjlqm
-
-srwnt
-nwrtj
-rswnt
-
-hfjxoskd
-dlpzeyjai
-
-mt
-tm
-mt
-mt
-tm
-
-rpxenfzmhwdvacbygiujkqot
-lhbvkwmpfyazrtojcquxind
-qtcjdairznhuwxmpsvyfkob
-
-apvk
-qvapk
-
-ujscpqtgbyezdfhnwoil
-bftognyujilpwhsqzdce
-zbhslwipdjeqntcfouyg
-tyuqdlfepgzshcoiwnbj
-dzqxjblenucpwshtoiyfg
-
-cdxtsaunbwkezlrp
-vbdpsuktlxczerwan
-pnxudwaclrtebksz
-
-tq
-t
-zt
-t
-jtqg
-
-fvmhiloanbgjzptryucdkxw
-jzhwtkbdpoxfacirngluyvm
-pwnybcjmgxurfzivoklhdta
-brtavopdklnhxwgzmifyjcu
-ncifvypdtgwxbzakhjrmulo
-
-kwhiguft
-uxyo
-ux
-
-ruyoe
-ezqhbi
-clndewsfta
-e
-qrke
-
-doa
-doa
-doa
-
-xt
-tx
-xt
-xt
-xt
-
-roxwktbmgiyc
-qtbejyxzlpcaighfod
-oscgtuyiwvrbkxn
-
-agcdevxkmbnzqjl
-jrdzmnclbgkvexqwa
-
-pqjtyenfmxdaorw
-qayjpxmfdterwon
-frdtlawxmjnoeqpy
-
-aze
-zea
-veaz
-yzxdequoa
-
-eq
-uetqs
-
-jsmezrk
-zskmer
-zmkers
-krezsm
-
-mfzqsukgcw
-cmskguzfqw
-gksucwfmqz
-uwqsgfzmck
-wfzucmgsqk
-
-wftx
-fwtd
-twf
-
-bizwg
-gzwosd
-afzqrwun
-cjpzwb
-
-qjntchmdbgpe
-nqtephjgmdbc
-qjeltdcphgbmn
-nqtbcjhepmdg
-
-g
-g
-gr
-g
-g
-
-yulnpwc
-uplcwn
-nplemufywc
-calkisogupw
-
-sigh
-igsh
-ghski
-
-naqpd
-xydrsjwlibzm
-qdevh
-cd
-
-mraejinsdp
-mierdjansp
-qpsmrianjde
-npirjedams
-ridpaejmns
-
-o
-o
-o
-o
-
-lhfqsxm
-xlmsqfh
-slfqmxh
-
-jhivsoabqlfpeuw
-fvxrelbhuncowqjtsz
-
-yajhetclfk
-jnqbylmpwgxcf
-azchyrsivjeltdf
-
-n
-n
-n
-n
-n
-
-hkuaq
-hkqua
-uakqh
-khqtalu
-ahxkuqy
-
-tguprf
-pfu
-ufp
-uofp
-
-lnmtjo
-njolmt
-
-qymzdw
-vjckmtl
-oipreghfausnxb
-
-niswjectqkldzyg
-wunjdetklisczyqg
-gldcysiqznjtekw
-iqwdczjsytkleng
-lgyiezdncjqktws
-
-dntm
-atm
-tma
-tm
-txm
-
-ntpcwask
-skcna
-nksac
-
-prai
-pria
-arpi
-irpa
-
-mzldgbrtovj
-tbjgldozmvr
-ogzvdlrjtbm
-
-ft
-fq
-
-jgstdlzarcemiopynukfw
-ywlhakgzeoxdnjmsirc
-moicgebadzlwkysrnxj
-
-jpeiqxbz
-xipjebzt
-
-rnpf
-fqhu
-agprm
-wedyzci
-bxur
-
-aynswjoklfeqzcitxudbrvh
-ihrbxwvdqsyoejpnfkzc
-
-hrqliwxtfbk
-qiwfrxbtkhl
-kihqxrftlwb
-wrhlxbtqkif
-tfbqriwlkhx
-
-bwdhnqk
-wbhkqtd
-qwbkhdx
-
-fpcboialrdgqkejntyzm
-lmieayocqpkznbrtdfgj
-mbtdrpozfljkeyangiqc
-pmdjlerfkybgnaoqzitc
-pganmcfbtedkrzloyqij
-
-zfrvn
-zfnr
-znrf
-
-nuq
-ltiuacgjs
-aug
-
-xj
-lyzixn
-eaxwuf
-
-aeywqjkl
-eanklwju
-kjelzaw
-ealjwtk
-azklwej
-
-ncqxulrmfvedao
-eodqxlvmrncu
-elrmnuqpcdoxv
-qloxudmvnecahr
-lcdxqwmurvznjeo
-
-aijnhvxemsqztfk
-xnvkehsiqmzft
-tehvxnfskiwqzm
-epsmzhixqvtnkfr
-htkinzvqefxmrs
-
-wgfzomlbhujxs
-ezvrxmkycafwob
-
-lhyrq
-ylfherq
-hlreyq
-wqlyerh
-hgsqlyru
-
-acnkurdevm
-duernacvm
-nteaducorvs
-
-hxvqtsjzgn
-iakeoyr
-
-id
-i
-di
-hkxi
-
-fqunm
-funxikw
-xfiuknz
-
-wvgpqlzxnui
-livzmwyqgpnu
-
-eanbkcjlxpsm
-ofmdwrqe
-
-w
-ws
-wr
-w
-w
-
-aylsbi
-lyaiqsgb
-vyeblmasuhi
-yblsia
-ylbsiaq
-
-fpbhozqdljytwcnxsvr
-zarwdgqhtvyxcnpbsofji
-dbzhsfwrvqnyjxtpoc
-qwxpbnycrfjsozvhtd
-tsoypwnmzfjhbvdxcqr
-
-bezfskqut
-egbpkdflqtmouzs
-kxzenfustqb
-tsebufkzq
-
-hoekryzuqt
-oreuqhyktz
-teorhukzqy
-kyqehortuz
-
-d
-uqwgitdaj
-dz
-vod
-fvd
-
-smjqnlt
-jsqmlnt
-ntsqlmj
-jqntslm
-
-saxdlkjwvyctqenrio
-wqnvsoyaextcilkrjd
-krdqwevyliojxcntas
-ywlnkcafdoirsvjxetq
-
-ryae
-yaq
-ya
-ya
-ya
-
-epvy
-nvyqu
-vnxy
-oyvh
-
-kschegfmla
-lgfmscaehk
-gshfalcemk
-lcgemshkfa
-mkgaselhctf
-
-bfxqtegnoismrk
-mnuivtxasgbjqyfkp
-mkxgrnltfiqbhsw
-
-s
-s
-s
-
-zoe
-eoz
-oze
-eoz
-
-q
-kuprd
-gvmbn
-vctx
-oi
-
-nbrjveycdlw
-jyhfcwnglerv
-
-vkoxqwfhubrcsnme
-bqkexhovswmntfrc
-
-aidoznexygkjlqs
-neysaiudmoqklgxzc
-
-ypsn
-eyp
-yp
-iyp
-
-gol
-olg
-
-rypjohwvxkisnldatuzfb
-btpxvolknwdhuryiafjsz
-vkahgbsitwdoyjplfruznx
-
-mipqtk
-nikqpvu
-
-kztifpne
-yzit
-rigtz
-zait
-
-jxgvt
-gfjoky
-kvygh
-dmwgqsrcp
-ounalgyze
-
-nypvuiseqtjwxchlbfogdamzr
-apqnbzhwmjldotfsvexruicyg
-bpyjzomwahcrgsutlefxkqdivn
-
-qumcbsvlpthfwyda
-hagwiucnvfdypqlzs
-
-tog
-otg
-gfto
-gto
-
-ctp
-uda
-
-vlbi
-swmiujf
-
-xbi
-upsdbi
-bizr
-
-ltw
-we
-wzavnymh
-iw
-wfe
-
-caqjdphelmtvyfbxo
-acxmtljedhoqbsfyp
-
-fyqthpe
-bmrceljqy
-eyqt
-
-frjdhuyqsgon
-krouhsfgydnj
-
-ltopekjnacgbms
-elngjotmpsca
-splcgnatmoej
-egjctspmlaon
-jtealcmpongs
-
-fvsmiotkb
-fbnupmcsxd
-fmkvjysb
-qbksmywrtf
-
-mklqnp
-mqnlk
-mwqnlke
-
-jykqrlaocvunfpix
-rcymsnwuafdtvgbqoieh
-
-c
-c
-ct
-c
-
-mlv
-lyfpq
-vsli
-vrdwl
-
-srtaq
-nuptlr
-
-hcfjdaqwo
-qmoefalzdh
-
-zxyksijbeahgvc
-xgvjhsczeyikba
-yxickjesbhgavz
-sjvgibeczxhkay
-hvgizjmaxsybcke
-
-wjmypxi
-jipmx
-pjmix
-bjivamxp
-
-dytnalmqkbpruef
-qplfuynbdaertm
-rbnetqdupamlwyf
-
-e
-e
-m
-p
-e
-
-b
-eb
-b
-b
-b
-
-yieovwqukxcnbfjpdg
-qjvunkgywpfoidbxec
-jupowqfbiknvdgeycx
-dqeicgjfpxonbukwvy
-gociquxvjbfdwnpkye
-
-lwrch
-huosc
-
-somiywgdbf
-fbmvdwgzsy
-ufrltkydsnwm
-
-epvfduyh
-vfpeyuhd
-epdchvyuf
-udeohyvpf
-evhpyufd
-
-b
-b
-
-szfgmlxwd
-eapoqydvi
-
-puedtjkqbwfznhvycxrolamsgi
-cvqeyszrwdfnkutjihxmlapbgo
-nfdpoukvizgctxwmeaqjrhlbys
-
-nuf
-je
-uieq
-ctodh
-sbx
-
-psrwqlgd
-lrwdqgpzs
-
-qheijmngzsrdawbvucolxpy
-vhqnlcouibjdarzxpmeygs
-edlixjhrquamovnpbsgycz
-
-jkphyr
-urycxn
-
-snbcyoe
-nuewpy
-
-gbnsoirkwyhp
-iogsqbkymwp
-fzbwkeyutdxp
-
-w
-w
-w
-
-jsbp
-bjsp
-jspb
-
-jfbdpv
-pfjvb
-
-wfhvsjloznb
-gmupxcnrakelfsvzqd
-
-dbsuoriacgnwxtzveyhqfkmp
-adwcifzvsgnkphyburtexomq
-wzbkmsdpfrhiaqxyecuonvgt
-athzyrgbwckvomqudsnexfip
-vidbhyqesancrzugkxfopwmt
-
-nl
-ln
-nl
-osnl
-
-iewcxgqtf
-gtwmfieqc
-icfvqwyhadgkn
-qcgwerfli
-
-wyj
-jy
-atycnje
-qyjg
-yzjsg
-
-ivjwfeuz
-jvcw
-mbhvwj
-rswvhjd
-
-zmjlpeia
-eimrlpzaj
-jmealyqpi
-
-zgkf
-gkz
-
-zuosdlvkxm
-tlxskcvpumo
-kuyomrxlvs
-uvosxmldyk
-
-yuilcqhgmazts
-swhvdcigltmakzuy
-stojxiflyghnazcpum
-gkhqtyciuwszmal
-
-nzhlyu
-hngc
-ngcah
-anch
-nvkhj
-
-xhfvwbkn
-nahwxfo
-fhgnwx
-dmfuxnht
-
-vbhpedluncftoxys
-cydfsolpejhbntux
-
-vkilx
-pvxskd
-
-hvwuecgs
-guvwcsh
-sgrwculmvhb
-wcpznuqsvghi
-vhwcsulg
-
-ndfapjlztc
-npoacfjtld
-
-jzd
-xaulvyksp
-zeh
-
-ck
-ck
-ck
-kc
-
-kiroh
-rh
-
-euxdrkvtfbqon
-ytfvurxwheokqn
-
-sirznatbxkghm
-skaiqzrmhnx
-ztgmhrsikanx
-hksxmairnez
-ywdiracnfsuzhjxmpk
-
-bacgwvmxrdfne
-pdcofwbza
-cfqdwuptzabo
-
-dqmp
-dqpm
-qvmpd
-
-kczxnlerm
-vqrzjmf
-
-qmuorwspx
-dywcxarilegkh
-
-gqzph
-qhapozk
-zhqp
-
-fastkjnl
-jsnafkt
-jfnacskt
-
-fxgpiadjrvhs
-smfwbejadh
-hjmfyaods
-fzdqsjham
-hlcbyfjkaunsdt
-
-dqlevpahscoyi
-iypldavhsqoce
-clhvyaisoepdq
-eayqiosdlpvch
-epodliqvhcsay
-
-nhxbmlqv
-qylkhmnxvbj
-xbnlvqmh
-vxmbhqln
-lbvhxsqmn
-
-exrtdq
-tderq
-djretq
-
-lwqj
-jmwlr
-zbswtx
-
-pxi
-ipx
-ixp
-xip
-
-vgfscwrqzdojxhe
-xfvqhzsjecgownd
-qdopyzjwegfsxchv
-gosqeckhvzdjfxw
-gszxpfveocjhqmdw
-
-gvlyuiscaewfpx
-gfwjtapuoynvqzi
-
-ycsdnbzjoki
-wfpvogmqhautlx
-
-tbjliqdfzgny
-zjwilpghqdyekc
-
-yftcnao
-ncfytaio
-conyfta
-
-yslactbwhjfvnomiue
-mbyiavojlwtunces
-eontumvircsalbjwy
-jguvcxylitsbmwenazo
-bayolijwqcevpmsktdun
-
-ynmki
-ykinm
-inymk
-iykmn
-yimnk
-
-vzjnpybg
-vjqfyno
-rnvity
-
-ilxkjhcfpdmeb
-hwdjleirc
-aiulechdj
-dljiwehc
-
-rptom
-ife
-nuli
-yized
-
-loe
-eg
-
-fprtvcgkwnasljebhm
-nvbltrckumfhpgjew
-grpuefzknmblovjw
-bjwgykpinqlemrd
-mrlegnjwbkp
-
-xtquyrjnszl
-ysrqzj
-zsqyjpr
-
-ft
-fjt
-ft
-tf
-
-ejli
-l
-l
-rl
-
-lwgrihbdvno
-ydbrvhgolniw
-rivdongwhlb
-ndhbrgwilov
-dwvrnlhbgio
-
-fc
-fc
-cqfo
-fc
-fc
-
-nhaoi
-nioha
-osijah
-
-hgrec
-gchre
-cehrg
-
-higmvfbtjre
-ikhxjbrefvq
-brjiefhvl
-ivfeqblhrj
-hrkifjvbe
-
-vsgqmibordtznkl
-dehupjlcxtsrnfawy
-
-t
-crfi
-
-nrai
-hjcmpzla
-dveria
-
-krp
-achvofx
-kbp
-
-vfdzhuskanm
-lhucb
-uh
-
-qu
-uqj
-quh
-qu
-
-tokmzyuxjsbvic
-zegday
-
-wqfxlhyapcdtv
-vctalwmjdpqyfh
-
-nqge
-vneiqt
-hqvfenwj
-nksqcrlmde
-vqgbone
-
-f
-w
-w
-f
-oq
-
-qziwcdjyepvhn
-wvypijednqzc
-
-uwjflbhoq
-dwxublig
-
-c
-lc
-ec
-c
-txcjrkd
-
-cglvpyadf
-rqfvgaplc
-kgpatsxuelvh
-oapgvliwc
-
-ln
-st
-bs
-
-sfra
-dskrnf
-mzhjrfpx
-
-phu
-uph
-uph
-hpu
-phu
-
-pcxhvbf
-hxbtyk
-
-jdzsaiwbphmftqxrlngcyoe
-mqbrsplojgyheznxcdtfwia
-pitajxzhsonwygrfblecmqd
-nyliauzgfbcprewhdtjmsxoq
-taxnylhvgjqewcksfpmzdbior
-
-h
-c
-om
-
-ruplsfnhyjqigwkzexbtoc
-newjivhyckdagob
-ywocjmnkbghie
-
-jdrtpbvohaxy
-dnjxyrfsv
-
-lq
-nsulxvmhj
-l
-lk
-
-fdsxhvqaiblt
-fihykrdlsoaqx
-laqgpznecjiuxfsdhmw
-
-capkzueqjmdv
-ckdvymqazu
-fklcmdbuxqarzv
-zkcsvmqhiadgeu
-jotqkuzndvciwam
-
-lzqbrgkp
-grvpntoz
-ozwvpg
-suefagcp
-pkjygd
-
-zbangyoqjlkdevrxti
-gzniebarjloykqtdxv
-
-xviqehycstgjladuoznfwp
-odwplyiqnxghutezcvsj
-ersxgqtcjouvdiznlyhwp
-cpshuoijtxvelqynwmdgz
-
-tnzkdmgqci
-mqkzgydtijn
-mtikzqdng
-
-d
-ad
-d
-
-k
-iof
-
-otkvualrqdsixf
-nkhwid
-dbkiwpj
-ikd
-ekziydgm
-
-wjvgqsxinfburh
-wxgqsurjvflnhbi
-
-hebmgftkpcq
-owektbpfhqcmg
-egtfbpckhmdq
-qmcetgpfkhb
-
-exukswmlgznjoqhvabid
-dkgmeoahtxpzflnwru
-
-lf
-fl
-lf
-fle
-
-zblhfjqpr
-rzp
-uprzo
-
-wmktipjq
-twmikp
-jmtwikyp
-azcempwtkiv
-itkmpw
-
-qwodjmelanykpxuh
-weqnajoxmupklyihd
-pjodermlyuknwxhqa
-mqbaoxylgdshtnjpwuvkfe
-lnaxijmwqhukodpye
-
-azxw
-xazw
-zwax
-wafqztx
-zaxw
-
-ydzmvpskfjiqneluabgtrw
-vyfdpqrkbistwlaxzjum
-ukortizjvdwhlpafycmqsb
-
-cno
-y
-no
-y
-bqe
-
-zlcotxyhfeij
-xtlvhifkszoj
-
-kczqegopj
-qupzjod
-
-hpclqaktjmbnyxw
-iqphxcamk
-
-rebc
-qcbra
-brc
-crb
-
-flkoiavp
-aduhjeqtyrmzkn
-cslwgfaokp
-
-qmnzcjb
-bmeqzjsc
-jxochgfbmwzvq
-zqcbmja
-
-deyifvsxw
-evdyw
-edbhzyuqv
-
-xmhknbcwdaztvl
-mruslxozyangpj
-xgszalnm
-aoqmleunizxs
-
-eh
-he
-eh
-nxeh
-eh
-
-cjbx
-jxsub
-
-yusezdlpgxtm
-dyrkmstuegpx
-pdxmyeutvkjsrhgaw
-
-ruz
-rzu
-zur
-zru
-
-wgbdctzlsmh
-peglstyhcd
-adtqlhcgvs
-tylndgrcujhsbx
-odltpshecg
-
-ylntchparijwfo
-wtrjpiaohylcf
-wlfyvrehcutapgko
-
-tkbpfhjzravmquxewgl
-goxphazbfvrqkijlwtm
-mkrbzqphvawtyjfxilg
-plhcnwgqmrxfvdzabjkt
-
-pfhtlqawckegij
-wjpaksdctfghlo
-
-jqctpgrvu
-qkvgjuprtc
-vutcqpgrj
-gpruvjtcq
-gvqprujct
-
-dkevisf
-kfei
-mlukicwfje
-
-nsoyjcwzife
-spnocteji
-
-cfuzsbtvdkq
-rcasmqzkpdxuo
-drxzwqckus
-zqsrndeukxic
-
-vkgpbz
-zkpvg
-zkvpg
-
-eqhpyasvnumzgclitofjw
-ofsgpaijzqmtvcuwhlbe
-ujiewctamfxqdghslpvzo
-qivnwtlfcmpgaeouhjzs
-
-lfahbowz
-ryxcwtvs
-mytucdivw
-
-lqetdskgyznojharxvufpwimbc
-kpcoqugdvxibftjmywzslnreh
-mxjgcinhobeldrwfukyvptqsz
-
-jxhc
-fjsqglzwhu
-mhcj
-hecj
-
-ihdsbckn
-
-siponk
-sikonp
-psinkfo
-
-qbvdrutoan
-qbcftunvoi
-qvkoxzbtushny
-qtwojubnv
-
-eu
-u
-xtujdms
-ehu
-
-jkqdoner
-eyxnkuaoqfg
-kqenxmyo
-
-wk
-wk
-ykw
-kw
-kw
-
-gvrebwq
-erkflnbjhagv
-givrybues
-itpvegsrbz
-
-hlykfbqnexots
-tqhgfonkzeyxsbl
-qkcybxtsnloefh
-fxalqkntsuobyech
-hvyjefkbitrqoplwxns
-
-paxu
-parnkxu
-pxua
-xupa
-uxpa
-
-ytzjokcqlmviha
-sykbmizchvq
-aocvizymhkq
-ivhkcqlzym
-iayelkzqmtchv
-
-aekxzstuc
-czetkxsau
-zqpakexsuct
-zuxtacske
-kuszetcax
-
-czlkiprvydnmsoxqwajgb
-byszdijkplawcvnm
-ikmwandcjzlvybsp
-nbvwlikjscdmpzay
-
-fpuxqtigly
-hpuqkfxigyt
-tifpygqkux
-uygqftwpxi
-
-gvdwnrefpj
-nwgapvedr
-egdvwnrp
-xshwezgipdvr
-
-joefgnu
-tknuhvfy
-
-rjo
-rpjyos
-rjo
-roj
-jro
-
-zxvatmfbujgryinokwehsc
-xjzdusehibgtvncmkflyao
-
-fpnkyo
-nopfky
-kpnyof
-ponkfy
-tnpfoyk
-
-mevhflgowbkqdjutrzys
-qrgmkeohvstnbwfdjluy
-
-pejhrgwtmcny
-hjangqtbprsmwe
-umiegvdprwtznhj
-nhgptresjwlm
-
-ohgmls
-othljm
-jmhtlso
-mhxlcnp
-
-dtufxjrbq
-rdfjxtqbu
-qjtdufbrx
-
-iexvaok
-kexu
-xkje
-xkfe
-
-dpursykgo
-ugkrsqpody
-sokpgyrdnu
-kwsuoyrpdg
-sovjiydkagmuptbrhcf
-
-mwxcqs
-mcwxqs
-mwxqsc
-tcswmxq
-
-cqatfowbvmirly
-woibncaylqgvsf
-
-bico
-izdt
-tiz
-
-af
-fkq
-f
-fyb
-f
-
-wxftpjclsrhm
-sdzuvanek
-
-jr
-rjp
-rj
-
-zhpknlosiadcfbjweuqvy
-ulbkhapqzisefdyonjc
-
-oivjy
-djvwbofy
-kvlqyxrj
-bsivdyjf
-
-kifcamqwgy
-amfkgicyq
-miygkcafq
-
-egslifrtvcnhk
-vymgiprjzcxasbqn
-
-gji
-g
-oar
-jgk
-
-gxtkohsqcvmrjzie
-jfghvuxokznqwsdmarcl
-
-xvlnpjdar
-vldnopxaj
-dtnpsayjvlc
-dgjvalnmp
-mfnvjdpal
-
-mnaxd
-xmda
-kdaxm
-
-szpeac
-ezpsac
-aesxpcz
-
-vgpldyruqmfbsehzkxjwa
-wrxmvtqgyjsdazlkbofeuhc
-ablmzyevqgswfnxkdrphuj
-
-aoedxnzjqsbyihtpkcfuwl
-dsbeyathwxjupozlqncikf
-
-mwzkrnhp
-okqj
-
-s
-s
-
-erjyvcwhuitdaogsnfb
-dculesyjotbwhavfirn
-swfbohtjdciaurenyv
-ubsvfamrjoynwchitdke
-
-yb
-yb
-by
-
-pbrhzvjcsgeylfxt
-sjcyezvxfgbhtplr
-
-rphvaxw
-zhjapvrxw
-xahvwspr
-lpdqrvwahmx
-
-rpmild
-vlrpswnb
-ylrezfpi
-pbraslm
-utxgqhpjkorl
-
-pizbmcxreftywhdq
-pqyezcxtidgmhfrw
-ixrctphwqydzfme
-fxdhpyctwrinmazqe
-pctzyrhdiqwmxef
-
-wasjdyzgfu
-zfdyujgwsa
-wbyzjgadufs
-afzswydguj
-
-zqanmksjruhx
-qljaunzmkrshx
-jrxqsmzknhua
-rjazknumxqhs
-kuzqxhjmasrn
-
-virdpbztchkgo
-hdiopebvzaw
-
-ziwscmotk
-jwmas
-
-h
-h
-h
-h
-h
-
-qhywbkuvnst
-zmynwxvufqarkbeht
-
-onfvrqxa
-xrvqnofa
-fiuarnvoxq
-qvzafonrx
-fqvxebnaolr
-
-kmfulryg
-bkswufgylmr
-myulgjrfk
-gouyxrlkmf
-
-skerjmgbvtcphdzafniyxo
-ljybizemsvhokxrdcagptnf
-
-oyt
-hytx
-mdtyjrslkczu
-bvyto
-
-mpwv
-acvbp
-
-m
-ftz
-
-kvtmidlngo
-edznioyvkx
-kofvirdn
diff --git a/2020/inputs/day_7.txt b/2020/inputs/day_7.txt
deleted file mode 100644
index 04950b5..0000000
--- a/2020/inputs/day_7.txt
+++ /dev/null
@@ -1,594 +0,0 @@
-striped white bags contain 4 drab silver bags.
-drab silver bags contain no other bags.
-pale plum bags contain 1 dark black bag.
-muted gold bags contain 1 wavy red bag, 3 mirrored violet bags, 5 bright gold bags, 5 plaid white bags.
-muted teal bags contain 2 pale beige bags, 5 clear beige bags, 2 dotted gold bags, 4 posh cyan bags.
-posh coral bags contain 1 light silver bag, 2 dull blue bags, 3 dim fuchsia bags, 2 dotted magenta bags.
-faded black bags contain 4 light silver bags.
-muted lavender bags contain 1 pale gold bag.
-clear fuchsia bags contain 1 dull gray bag, 2 shiny indigo bags, 3 posh olive bags, 5 vibrant plum bags.
-shiny olive bags contain 1 dotted gold bag, 5 bright violet bags.
-vibrant lavender bags contain 3 dotted aqua bags, 4 pale chartreuse bags, 5 mirrored blue bags.
-pale fuchsia bags contain 5 pale crimson bags, 2 dull teal bags.
-clear lavender bags contain 5 shiny fuchsia bags, 5 wavy teal bags.
-light chartreuse bags contain 5 mirrored yellow bags, 3 bright maroon bags.
-mirrored white bags contain 1 bright gray bag, 4 plaid blue bags.
-dark teal bags contain 4 bright maroon bags, 5 plaid bronze bags, 1 dark brown bag.
-wavy yellow bags contain 4 dim silver bags, 1 striped tomato bag, 5 clear chartreuse bags.
-dark turquoise bags contain 4 clear plum bags.
-posh gray bags contain 2 faded purple bags, 2 faded orange bags.
-wavy tomato bags contain 1 dark purple bag.
-vibrant gray bags contain 3 muted gray bags, 1 dark fuchsia bag, 5 posh white bags, 5 posh tomato bags.
-light crimson bags contain 2 dotted chartreuse bags.
-dull gray bags contain 4 muted brown bags, 2 shiny blue bags, 4 dim crimson bags.
-drab red bags contain 2 bright cyan bags, 1 pale brown bag.
-dotted salmon bags contain 5 mirrored indigo bags.
-vibrant green bags contain 2 dark coral bags.
-light magenta bags contain 4 clear bronze bags, 4 dull teal bags, 4 posh salmon bags.
-vibrant purple bags contain 4 posh plum bags, 2 bright gray bags.
-posh lime bags contain 3 plaid yellow bags, 4 posh salmon bags.
-bright white bags contain 4 dull aqua bags, 1 shiny silver bag.
-faded blue bags contain 5 muted cyan bags, 2 mirrored coral bags.
-dim green bags contain 2 posh lavender bags.
-faded gray bags contain 2 dark gold bags, 1 drab turquoise bag.
-wavy black bags contain 4 dim fuchsia bags, 1 muted orange bag, 4 drab salmon bags.
-plaid plum bags contain 5 dotted tomato bags, 1 shiny beige bag.
-bright tan bags contain 2 posh salmon bags.
-wavy gold bags contain 1 faded olive bag, 5 vibrant black bags, 3 dull orange bags.
-dull fuchsia bags contain 1 faded crimson bag, 5 vibrant white bags.
-shiny maroon bags contain 5 dull lavender bags, 1 dim white bag.
-wavy white bags contain 5 light teal bags, 4 dim salmon bags, 3 dotted red bags, 5 dark red bags.
-dim cyan bags contain 1 muted orange bag.
-muted cyan bags contain 4 dull turquoise bags, 5 posh gray bags, 5 clear turquoise bags, 1 shiny plum bag.
-posh violet bags contain 5 plaid crimson bags, 5 muted purple bags, 1 wavy beige bag, 2 mirrored orange bags.
-faded purple bags contain 3 plaid blue bags, 1 dull lavender bag, 1 muted orange bag, 2 dotted tomato bags.
-wavy beige bags contain 1 dotted beige bag.
-dim black bags contain 1 wavy blue bag, 1 plaid black bag, 3 pale lavender bags, 2 light violet bags.
-dotted lavender bags contain 1 plaid blue bag, 5 dim crimson bags.
-dark yellow bags contain 3 posh green bags.
-wavy salmon bags contain 1 clear aqua bag, 3 mirrored crimson bags, 3 pale magenta bags, 2 dull teal bags.
-clear silver bags contain 3 faded tan bags, 5 faded aqua bags, 1 clear tomato bag.
-vibrant bronze bags contain 1 faded maroon bag, 4 plaid indigo bags, 2 bright purple bags, 5 dim violet bags.
-pale brown bags contain 1 dull lavender bag, 2 clear turquoise bags.
-faded salmon bags contain 1 pale silver bag.
-dark gray bags contain 2 pale teal bags.
-posh red bags contain 3 faded black bags, 2 dull red bags.
-dim indigo bags contain 3 bright green bags, 2 dotted tomato bags, 5 bright magenta bags.
-dull maroon bags contain 5 light green bags.
-wavy teal bags contain 5 faded tan bags, 4 clear orange bags.
-pale chartreuse bags contain 5 bright blue bags, 3 light indigo bags, 3 shiny white bags, 3 wavy bronze bags.
-mirrored gray bags contain 4 vibrant tomato bags, 1 dark red bag, 5 drab silver bags, 3 posh magenta bags.
-dark lavender bags contain 4 dotted white bags, 5 vibrant chartreuse bags, 2 dim teal bags.
-shiny turquoise bags contain 3 dim lime bags, 5 bright cyan bags, 2 pale green bags.
-shiny indigo bags contain 2 dark fuchsia bags, 4 posh chartreuse bags.
-pale crimson bags contain 5 mirrored silver bags, 2 posh black bags.
-light salmon bags contain 2 vibrant orange bags, 2 dotted red bags.
-plaid orange bags contain 1 dotted turquoise bag, 4 vibrant brown bags.
-dim maroon bags contain 5 shiny gold bags, 4 mirrored maroon bags.
-muted green bags contain 1 plaid plum bag.
-faded indigo bags contain 3 faded purple bags, 4 vibrant indigo bags, 1 light coral bag.
-dull blue bags contain 5 dull salmon bags, 2 wavy magenta bags.
-vibrant black bags contain 1 light coral bag, 5 vibrant cyan bags, 3 dim magenta bags.
-striped lime bags contain 1 striped maroon bag, 2 vibrant brown bags.
-drab brown bags contain 1 faded olive bag, 5 dotted beige bags.
-dark plum bags contain 5 faded brown bags.
-clear olive bags contain 3 dull aqua bags, 5 drab yellow bags.
-wavy crimson bags contain 2 posh plum bags, 2 dull aqua bags, 5 shiny teal bags, 2 vibrant purple bags.
-mirrored olive bags contain 2 wavy gold bags.
-dim crimson bags contain no other bags.
-faded plum bags contain 1 plaid indigo bag.
-light maroon bags contain 3 vibrant orange bags, 2 clear olive bags, 3 clear brown bags, 1 pale black bag.
-posh white bags contain 3 dull green bags, 3 clear brown bags.
-drab black bags contain 2 shiny turquoise bags.
-light purple bags contain 2 pale black bags, 5 light silver bags, 1 drab coral bag.
-pale yellow bags contain 2 vibrant orange bags, 5 posh black bags, 2 vibrant tomato bags, 3 dotted lavender bags.
-dull cyan bags contain 5 wavy beige bags, 1 dull yellow bag, 3 drab lime bags, 3 drab chartreuse bags.
-drab lavender bags contain 2 plaid black bags, 4 dotted gray bags, 1 dim silver bag, 2 shiny gold bags.
-striped brown bags contain 5 light maroon bags, 3 light red bags, 3 clear indigo bags.
-drab tomato bags contain 2 light black bags, 2 clear salmon bags.
-dotted red bags contain 4 dim salmon bags, 5 striped indigo bags.
-vibrant teal bags contain 5 bright black bags, 1 dark purple bag, 2 bright turquoise bags.
-striped teal bags contain 4 mirrored silver bags.
-dull beige bags contain 4 clear olive bags, 4 light teal bags, 3 bright plum bags, 4 dotted lavender bags.
-light violet bags contain 2 dull lavender bags, 4 bright gray bags, 5 vibrant orange bags, 3 wavy magenta bags.
-dim brown bags contain 2 clear plum bags, 2 shiny teal bags, 2 posh salmon bags.
-striped magenta bags contain 4 posh turquoise bags, 3 pale cyan bags, 3 faded indigo bags.
-bright orange bags contain 4 plaid gray bags, 4 dark black bags, 4 faded red bags, 4 bright black bags.
-muted olive bags contain 2 dotted crimson bags, 4 faded lavender bags, 2 vibrant gray bags.
-plaid teal bags contain 2 light yellow bags, 4 drab cyan bags, 3 light green bags.
-faded fuchsia bags contain 1 posh silver bag, 4 drab chartreuse bags, 4 drab teal bags.
-dim silver bags contain 1 pale turquoise bag.
-bright lime bags contain 1 striped silver bag, 5 muted teal bags, 1 shiny tan bag, 1 dark silver bag.
-dotted green bags contain 3 posh green bags, 1 drab yellow bag.
-drab purple bags contain 5 bright violet bags, 1 posh tomato bag.
-dull bronze bags contain 4 mirrored black bags.
-striped tomato bags contain 1 posh gray bag, 2 posh magenta bags.
-bright crimson bags contain 2 light olive bags, 4 clear tan bags, 3 drab fuchsia bags.
-bright turquoise bags contain 4 pale teal bags, 3 drab silver bags.
-shiny lavender bags contain 2 striped lime bags, 2 plaid tomato bags, 1 faded orange bag, 5 wavy magenta bags.
-light tomato bags contain 5 dotted olive bags.
-wavy magenta bags contain no other bags.
-vibrant fuchsia bags contain 5 posh brown bags, 5 plaid indigo bags.
-dark tomato bags contain 3 shiny plum bags.
-pale bronze bags contain 5 plaid black bags, 5 vibrant brown bags, 2 dim lime bags, 4 muted bronze bags.
-striped fuchsia bags contain 3 muted brown bags, 2 pale chartreuse bags, 1 dim magenta bag.
-dark brown bags contain 4 clear bronze bags.
-posh teal bags contain 5 dotted plum bags, 2 drab gray bags, 3 dull fuchsia bags.
-wavy turquoise bags contain 1 dull lavender bag.
-striped maroon bags contain 4 muted yellow bags, 4 clear orange bags, 4 vibrant orange bags.
-shiny green bags contain 3 muted brown bags, 1 vibrant black bag, 4 wavy cyan bags, 3 posh brown bags.
-plaid salmon bags contain 4 mirrored indigo bags, 2 wavy white bags, 5 mirrored bronze bags, 3 light coral bags.
-dotted magenta bags contain 2 light olive bags, 2 dark red bags, 4 clear green bags, 3 dim plum bags.
-light orange bags contain 5 dark plum bags, 3 bright maroon bags, 2 dotted lime bags.
-clear brown bags contain 3 dim white bags, 2 posh magenta bags.
-vibrant turquoise bags contain 2 striped yellow bags, 1 mirrored crimson bag.
-muted coral bags contain 4 wavy gold bags, 2 dim tan bags, 1 shiny green bag.
-plaid crimson bags contain 1 dull aqua bag.
-vibrant plum bags contain 4 striped tomato bags, 1 striped turquoise bag.
-dark coral bags contain 5 posh black bags, 1 shiny beige bag, 3 pale brown bags.
-mirrored brown bags contain 1 clear blue bag, 1 dull indigo bag.
-bright blue bags contain 2 light violet bags, 1 dotted tomato bag.
-drab cyan bags contain 2 dim turquoise bags, 5 clear violet bags.
-dotted coral bags contain 3 dotted aqua bags.
-shiny yellow bags contain 1 wavy cyan bag.
-shiny red bags contain 5 shiny beige bags, 3 dotted lime bags, 5 dotted plum bags.
-muted lime bags contain 3 dark turquoise bags, 3 bright chartreuse bags.
-pale gray bags contain 5 dotted coral bags, 4 wavy teal bags, 2 clear aqua bags.
-pale blue bags contain 5 dull salmon bags, 3 posh bronze bags, 2 vibrant tomato bags.
-dim turquoise bags contain 4 posh aqua bags, 2 dark turquoise bags.
-pale turquoise bags contain 5 vibrant brown bags, 2 shiny maroon bags.
-dim gray bags contain 2 faded tomato bags, 2 faded indigo bags.
-clear aqua bags contain 1 light turquoise bag, 3 dotted turquoise bags.
-faded turquoise bags contain 5 muted lime bags.
-clear plum bags contain 2 plaid indigo bags, 5 drab yellow bags.
-vibrant white bags contain 2 bright violet bags, 4 dark plum bags, 1 dim plum bag, 4 plaid indigo bags.
-dark orange bags contain 3 posh purple bags, 5 clear orange bags, 1 dim white bag.
-light olive bags contain 3 drab green bags.
-muted salmon bags contain 4 muted cyan bags.
-clear maroon bags contain 2 muted yellow bags, 5 plaid crimson bags, 1 clear turquoise bag.
-wavy orange bags contain 4 vibrant blue bags, 4 posh brown bags, 2 pale turquoise bags, 5 shiny orange bags.
-dotted gold bags contain 3 posh magenta bags, 1 faded crimson bag, 3 dotted olive bags, 3 plaid olive bags.
-dull purple bags contain 5 drab salmon bags, 4 dim lavender bags.
-light bronze bags contain 2 wavy indigo bags.
-muted turquoise bags contain 5 clear turquoise bags, 4 plaid violet bags, 4 clear orange bags, 2 posh maroon bags.
-mirrored blue bags contain 4 clear chartreuse bags.
-drab tan bags contain 3 striped violet bags, 2 bright silver bags, 2 dark bronze bags, 1 mirrored black bag.
-dark maroon bags contain 1 vibrant orange bag.
-drab yellow bags contain 1 vibrant blue bag, 2 dim violet bags.
-light cyan bags contain 4 posh beige bags.
-vibrant salmon bags contain 3 wavy gold bags.
-muted orange bags contain 3 dotted tomato bags, 4 vibrant tomato bags, 5 dull lavender bags.
-dull turquoise bags contain 1 wavy white bag.
-dotted indigo bags contain 3 wavy bronze bags.
-dark red bags contain 4 wavy bronze bags, 5 wavy turquoise bags.
-light coral bags contain 4 clear tan bags, 2 vibrant beige bags, 1 dull lavender bag, 5 shiny white bags.
-mirrored turquoise bags contain 5 clear fuchsia bags, 3 mirrored black bags, 4 plaid tan bags.
-mirrored yellow bags contain 4 pale turquoise bags, 2 wavy orange bags, 3 drab coral bags, 4 dim chartreuse bags.
-dotted fuchsia bags contain 4 dim bronze bags, 4 striped indigo bags.
-dotted purple bags contain 5 posh maroon bags, 1 dim yellow bag.
-clear coral bags contain 5 dark olive bags, 2 wavy bronze bags, 3 light red bags.
-mirrored teal bags contain 3 drab yellow bags.
-faded green bags contain 2 dark purple bags.
-light lime bags contain 4 bright chartreuse bags, 5 clear tomato bags, 2 bright green bags, 2 faded teal bags.
-bright yellow bags contain 4 dull purple bags, 3 faded beige bags.
-bright maroon bags contain 2 vibrant blue bags, 5 bright violet bags, 5 plaid indigo bags, 3 vibrant orange bags.
-faded red bags contain 5 pale brown bags, 4 striped tomato bags, 2 bright green bags.
-muted maroon bags contain 1 dark tan bag, 5 drab teal bags, 4 dull maroon bags.
-plaid coral bags contain 5 bright blue bags, 1 dotted indigo bag.
-dotted brown bags contain 1 dull beige bag, 2 bright indigo bags, 2 striped chartreuse bags, 1 muted silver bag.
-wavy coral bags contain 2 clear cyan bags, 2 muted teal bags, 1 faded red bag, 2 mirrored silver bags.
-faded coral bags contain 3 bright green bags, 1 bright cyan bag, 3 plaid blue bags, 5 wavy lavender bags.
-dim gold bags contain 5 dim teal bags, 1 vibrant tomato bag, 5 pale chartreuse bags, 3 bright indigo bags.
-bright salmon bags contain 5 plaid chartreuse bags, 5 light tan bags, 5 vibrant maroon bags.
-wavy violet bags contain 4 bright green bags.
-mirrored lavender bags contain 5 drab plum bags, 2 drab turquoise bags, 2 dark magenta bags.
-faded aqua bags contain 3 faded teal bags, 1 dark red bag.
-muted yellow bags contain 1 mirrored silver bag, 1 striped white bag, 3 mirrored gold bags, 1 muted gray bag.
-pale coral bags contain 2 striped gray bags, 2 clear beige bags.
-mirrored cyan bags contain 1 pale beige bag, 4 dim crimson bags.
-dotted aqua bags contain 4 dim crimson bags, 3 vibrant beige bags.
-dark white bags contain 4 dim maroon bags, 1 light olive bag, 3 dull fuchsia bags, 4 mirrored maroon bags.
-dotted chartreuse bags contain 5 clear tan bags, 2 clear white bags, 2 dark coral bags, 4 faded brown bags.
-mirrored red bags contain 5 faded violet bags, 2 dark chartreuse bags.
-drab maroon bags contain 3 bright violet bags.
-dark violet bags contain 5 dark turquoise bags, 1 muted blue bag, 4 plaid bronze bags.
-dull silver bags contain 4 dotted lime bags, 3 dotted silver bags, 4 dull red bags, 3 pale white bags.
-striped lavender bags contain 5 drab silver bags.
-light yellow bags contain 3 posh plum bags, 3 bright olive bags, 4 wavy crimson bags.
-posh chartreuse bags contain 2 bright violet bags.
-pale green bags contain 5 shiny lime bags, 3 faded teal bags, 5 posh gray bags, 1 posh chartreuse bag.
-shiny lime bags contain 1 dull beige bag, 4 light aqua bags, 4 dotted tomato bags.
-plaid tan bags contain 1 mirrored chartreuse bag.
-drab coral bags contain 5 posh gray bags, 2 dull black bags.
-drab salmon bags contain 4 drab yellow bags, 3 mirrored green bags.
-faded yellow bags contain 2 mirrored beige bags, 1 bright turquoise bag, 1 vibrant black bag.
-bright tomato bags contain 4 clear brown bags.
-muted beige bags contain 1 clear turquoise bag.
-striped black bags contain 1 plaid chartreuse bag.
-bright cyan bags contain 5 clear tomato bags.
-striped coral bags contain 2 muted red bags.
-posh bronze bags contain 5 striped yellow bags.
-mirrored maroon bags contain 4 vibrant tomato bags, 5 bright green bags, 4 vibrant maroon bags, 4 striped violet bags.
-dotted turquoise bags contain 1 posh beige bag, 5 muted silver bags.
-bright purple bags contain 5 drab silver bags, 5 shiny blue bags, 2 plaid bronze bags, 4 faded magenta bags.
-posh plum bags contain 5 striped white bags, 2 pale brown bags, 1 wavy turquoise bag.
-dark crimson bags contain 1 dull black bag, 2 dull yellow bags, 1 posh white bag, 3 dotted lime bags.
-plaid bronze bags contain 5 striped indigo bags, 5 light indigo bags, 4 wavy magenta bags, 3 vibrant blue bags.
-clear red bags contain 4 posh silver bags, 1 dim aqua bag.
-striped salmon bags contain 3 bright violet bags, 4 faded olive bags, 5 dim turquoise bags.
-dim bronze bags contain no other bags.
-wavy brown bags contain 4 vibrant turquoise bags.
-wavy maroon bags contain 1 mirrored bronze bag, 2 posh fuchsia bags, 1 mirrored indigo bag.
-mirrored salmon bags contain 2 faded lavender bags.
-dark aqua bags contain 4 faded teal bags, 1 dim tomato bag.
-pale violet bags contain 5 clear blue bags, 3 plaid blue bags, 5 dim teal bags, 2 pale black bags.
-mirrored crimson bags contain 2 posh magenta bags, 2 dotted aqua bags, 1 dim bronze bag.
-bright indigo bags contain 4 bright violet bags.
-muted violet bags contain 4 mirrored maroon bags, 2 dull red bags, 4 plaid tomato bags, 1 pale yellow bag.
-shiny gold bags contain 3 vibrant blue bags, 5 plaid blue bags, 2 dark red bags, 1 dull green bag.
-clear green bags contain 4 dotted lavender bags.
-dark indigo bags contain 2 light lime bags, 3 wavy brown bags.
-muted fuchsia bags contain 3 plaid green bags.
-bright silver bags contain 4 dim tomato bags, 3 clear olive bags, 1 dull teal bag.
-plaid purple bags contain 4 dark silver bags, 1 vibrant crimson bag, 4 dark black bags, 3 faded magenta bags.
-clear chartreuse bags contain 4 posh plum bags.
-plaid tomato bags contain 2 wavy aqua bags, 3 striped indigo bags, 1 wavy magenta bag.
-posh cyan bags contain 3 drab green bags, 3 bright chartreuse bags, 3 muted gray bags, 2 light black bags.
-posh turquoise bags contain 5 wavy teal bags, 3 light tan bags, 1 dull gold bag.
-plaid olive bags contain 2 dim chartreuse bags.
-shiny orange bags contain 4 pale brown bags, 3 dim salmon bags.
-clear gray bags contain 4 bright salmon bags, 5 vibrant crimson bags.
-shiny brown bags contain 1 bright gold bag, 3 clear tomato bags.
-muted aqua bags contain 2 mirrored indigo bags, 1 dim tan bag.
-plaid red bags contain 1 clear plum bag.
-muted bronze bags contain 4 clear white bags, 3 dotted plum bags.
-plaid blue bags contain 2 dull lavender bags, 5 wavy magenta bags, 1 light indigo bag.
-shiny salmon bags contain 2 dotted black bags, 1 light magenta bag.
-shiny cyan bags contain 5 faded violet bags, 3 mirrored bronze bags, 4 dark maroon bags, 2 wavy lavender bags.
-drab magenta bags contain 2 light blue bags, 1 wavy orange bag, 5 posh chartreuse bags.
-dim violet bags contain 5 dark red bags, 4 light violet bags, 2 dotted fuchsia bags, 2 plaid tomato bags.
-faded crimson bags contain 3 clear silver bags, 1 vibrant beige bag.
-plaid fuchsia bags contain 3 plaid red bags, 4 drab purple bags, 4 clear lime bags, 3 dim turquoise bags.
-dull green bags contain 5 dotted beige bags, 4 drab silver bags, 4 posh magenta bags, 1 muted orange bag.
-wavy indigo bags contain 2 pale tan bags.
-plaid lavender bags contain 1 dark black bag.
-clear bronze bags contain 3 pale teal bags.
-clear blue bags contain 2 light teal bags, 5 dotted olive bags, 3 bright indigo bags.
-posh aqua bags contain 2 light violet bags, 2 dull salmon bags, 1 vibrant violet bag.
-dark gold bags contain 2 striped maroon bags.
-vibrant chartreuse bags contain 3 wavy silver bags.
-dark magenta bags contain 1 clear silver bag.
-dim red bags contain 3 wavy indigo bags, 2 muted teal bags.
-muted silver bags contain 5 pale crimson bags, 2 dotted tomato bags.
-mirrored tan bags contain 1 pale salmon bag.
-dull violet bags contain 2 dull black bags.
-striped beige bags contain 4 dark maroon bags, 2 wavy orange bags.
-striped turquoise bags contain 3 light indigo bags, 5 bright maroon bags, 1 light teal bag.
-pale gold bags contain 5 dotted teal bags.
-wavy olive bags contain 3 dotted fuchsia bags.
-clear violet bags contain 1 dotted lavender bag, 5 bright tan bags, 5 dim violet bags, 5 drab salmon bags.
-pale maroon bags contain 4 drab red bags, 1 wavy yellow bag, 1 muted green bag, 1 striped fuchsia bag.
-drab bronze bags contain 4 light gray bags, 3 posh magenta bags, 1 dull yellow bag.
-vibrant gold bags contain 4 dull violet bags, 3 clear white bags, 5 wavy chartreuse bags, 4 pale turquoise bags.
-clear beige bags contain 4 plaid blue bags, 3 shiny plum bags, 1 light silver bag.
-faded silver bags contain 5 drab turquoise bags, 4 plaid green bags, 4 posh yellow bags, 1 plaid blue bag.
-light brown bags contain 1 dark red bag, 1 dotted gray bag.
-shiny violet bags contain 5 posh cyan bags, 5 vibrant plum bags, 5 mirrored chartreuse bags, 4 plaid green bags.
-dark bronze bags contain 4 bright gold bags, 2 striped maroon bags, 4 dark aqua bags, 5 pale chartreuse bags.
-dull black bags contain 2 vibrant tomato bags, 1 vibrant blue bag, 3 pale yellow bags.
-dotted beige bags contain 5 dotted tomato bags, 1 striped indigo bag.
-clear indigo bags contain 3 dark violet bags.
-bright coral bags contain 1 dark indigo bag.
-drab turquoise bags contain 5 drab plum bags, 3 pale magenta bags, 5 drab red bags, 4 dull olive bags.
-shiny fuchsia bags contain 2 dull lavender bags, 5 striped tomato bags.
-dull indigo bags contain 3 pale turquoise bags, 3 faded tomato bags, 5 dim magenta bags, 3 drab indigo bags.
-dim aqua bags contain 4 faded brown bags, 1 mirrored lime bag.
-muted purple bags contain 3 dim salmon bags, 4 light violet bags, 2 striped turquoise bags, 2 shiny teal bags.
-dotted black bags contain 3 dotted cyan bags, 4 wavy magenta bags, 4 posh chartreuse bags.
-drab violet bags contain 4 dark gray bags, 5 dull chartreuse bags, 4 plaid gray bags.
-plaid green bags contain 3 dark red bags, 1 wavy crimson bag, 4 light coral bags, 4 striped indigo bags.
-faded brown bags contain 3 dark orange bags.
-light teal bags contain 3 striped indigo bags, 4 dim bronze bags.
-plaid black bags contain 2 mirrored crimson bags, 5 dim silver bags, 4 posh purple bags.
-shiny blue bags contain 2 plaid green bags, 4 plaid crimson bags, 2 faded plum bags.
-plaid lime bags contain 2 striped maroon bags.
-pale lavender bags contain 2 mirrored indigo bags, 1 pale green bag, 5 dim chartreuse bags, 3 pale white bags.
-drab chartreuse bags contain 1 bright salmon bag, 4 vibrant brown bags, 1 muted violet bag.
-light indigo bags contain no other bags.
-plaid violet bags contain 2 dim white bags, 4 faded lavender bags.
-drab gold bags contain 5 dotted aqua bags, 3 muted beige bags, 4 faded black bags, 5 dark red bags.
-mirrored bronze bags contain 2 plaid blue bags, 1 light orange bag.
-dim olive bags contain 1 striped silver bag.
-plaid white bags contain 5 pale turquoise bags, 4 mirrored orange bags, 2 vibrant aqua bags.
-wavy purple bags contain 3 dark silver bags, 1 dull white bag, 3 dotted magenta bags, 2 dim salmon bags.
-clear orange bags contain 5 striped indigo bags, 1 wavy bronze bag, 4 vibrant blue bags.
-plaid gray bags contain 1 dull aqua bag, 3 dull olive bags, 3 posh black bags.
-vibrant violet bags contain 2 vibrant maroon bags.
-pale olive bags contain 2 vibrant fuchsia bags.
-muted brown bags contain 5 pale teal bags, 2 light brown bags, 4 light tomato bags.
-posh lavender bags contain 4 bright indigo bags, 1 striped indigo bag, 5 dark purple bags.
-dotted blue bags contain 4 muted salmon bags, 3 mirrored red bags, 5 pale white bags, 3 clear red bags.
-dim purple bags contain 4 muted cyan bags.
-bright fuchsia bags contain 5 muted black bags.
-vibrant lime bags contain 3 posh purple bags, 1 drab aqua bag.
-wavy green bags contain 3 drab red bags, 2 faded brown bags, 2 wavy cyan bags.
-dull lime bags contain 3 bright salmon bags, 4 posh crimson bags, 1 drab salmon bag, 4 pale yellow bags.
-mirrored aqua bags contain 4 striped violet bags, 1 striped indigo bag, 2 striped tomato bags.
-striped tan bags contain 4 light blue bags, 4 dull beige bags.
-drab green bags contain 5 muted silver bags, 1 vibrant orange bag, 2 striped indigo bags, 4 striped tomato bags.
-dotted orange bags contain 5 mirrored white bags, 5 muted orange bags, 2 drab tomato bags, 2 dull white bags.
-dim tomato bags contain 2 dull lavender bags.
-dull magenta bags contain 3 faded brown bags, 5 faded teal bags.
-faded maroon bags contain 4 posh brown bags, 2 dotted aqua bags.
-plaid cyan bags contain 4 faded crimson bags, 4 light chartreuse bags, 1 light crimson bag, 1 posh fuchsia bag.
-dim salmon bags contain 1 dotted olive bag, 4 light indigo bags.
-faded chartreuse bags contain 4 bright gold bags, 4 clear silver bags.
-light plum bags contain 2 dotted chartreuse bags, 1 drab white bag.
-posh silver bags contain 3 mirrored black bags, 4 dull blue bags.
-dull salmon bags contain 4 dim white bags, 5 clear tomato bags, 2 mirrored maroon bags.
-light green bags contain 4 plaid chartreuse bags, 5 vibrant aqua bags.
-posh indigo bags contain 2 dull olive bags, 2 dotted lime bags, 1 drab red bag.
-dark blue bags contain 5 dotted green bags, 3 wavy crimson bags, 4 clear silver bags.
-bright black bags contain 5 posh bronze bags, 3 bright cyan bags, 5 muted black bags.
-bright lavender bags contain 1 shiny indigo bag, 1 dim yellow bag, 1 wavy yellow bag.
-faded white bags contain 1 dotted black bag, 5 wavy red bags.
-muted black bags contain 1 mirrored aqua bag, 4 dark red bags, 5 dull yellow bags.
-light turquoise bags contain 3 shiny plum bags.
-vibrant coral bags contain 2 shiny orange bags, 4 bright olive bags.
-vibrant aqua bags contain 2 wavy crimson bags, 2 muted orange bags.
-dotted tan bags contain 1 light indigo bag, 2 dim magenta bags.
-posh yellow bags contain 4 faded lavender bags.
-pale lime bags contain 4 mirrored orange bags, 3 dull gray bags, 1 muted magenta bag.
-drab white bags contain 2 faded tan bags, 3 wavy aqua bags.
-shiny tomato bags contain 4 dim coral bags, 3 dotted lime bags.
-wavy plum bags contain 1 bright orange bag.
-dull crimson bags contain 2 pale silver bags, 1 light beige bag, 4 wavy violet bags.
-dotted violet bags contain 4 light indigo bags, 1 dark black bag, 3 pale green bags.
-dark salmon bags contain 5 light tan bags, 4 dim chartreuse bags, 5 faded green bags, 3 light brown bags.
-dull brown bags contain 5 mirrored aqua bags, 5 dim magenta bags, 4 light brown bags, 5 plaid black bags.
-shiny chartreuse bags contain 5 wavy yellow bags, 3 faded aqua bags, 1 bright fuchsia bag, 5 drab plum bags.
-muted red bags contain 3 drab white bags, 5 dim beige bags, 4 bright olive bags.
-posh blue bags contain 1 dotted beige bag, 1 vibrant cyan bag, 4 vibrant brown bags, 2 clear turquoise bags.
-wavy bronze bags contain 4 wavy turquoise bags, 4 dim bronze bags, 3 shiny beige bags, 2 dull lavender bags.
-posh beige bags contain 3 muted gray bags, 4 light salmon bags, 5 striped turquoise bags.
-vibrant red bags contain 5 muted blue bags.
-dark olive bags contain 5 dark maroon bags.
-dotted gray bags contain 3 wavy magenta bags.
-vibrant cyan bags contain 5 dotted lavender bags, 3 vibrant orange bags.
-dark chartreuse bags contain 3 pale white bags, 1 dull lavender bag.
-faded lime bags contain 4 clear green bags, 3 shiny plum bags, 2 light green bags.
-vibrant blue bags contain 1 wavy turquoise bag, 4 dim salmon bags.
-dull tan bags contain 3 dim chartreuse bags, 1 plaid tomato bag, 4 dark brown bags.
-muted gray bags contain 4 clear tan bags, 3 wavy aqua bags, 5 dim white bags.
-clear yellow bags contain 1 drab white bag, 5 dark salmon bags, 2 dull yellow bags.
-clear tomato bags contain 2 dotted gray bags, 5 vibrant beige bags, 1 bright maroon bag, 2 drab green bags.
-shiny tan bags contain 5 posh lavender bags, 5 pale yellow bags.
-dark black bags contain 4 muted purple bags, 5 light gray bags, 5 drab red bags.
-striped plum bags contain 3 dull red bags, 1 dark tomato bag, 4 dark yellow bags, 5 plaid cyan bags.
-light gray bags contain 3 plaid chartreuse bags.
-light aqua bags contain 4 wavy magenta bags, 3 light black bags.
-vibrant brown bags contain 1 bright blue bag, 1 posh black bag.
-posh tomato bags contain 5 wavy magenta bags.
-dotted bronze bags contain 4 mirrored chartreuse bags.
-mirrored violet bags contain 2 clear maroon bags, 1 light red bag, 4 mirrored gray bags.
-dark purple bags contain 5 bright blue bags, 3 plaid blue bags.
-faded beige bags contain 4 plaid bronze bags, 5 vibrant turquoise bags, 3 pale orange bags, 5 mirrored aqua bags.
-mirrored green bags contain 1 dotted fuchsia bag, 5 light indigo bags, 3 shiny beige bags.
-striped violet bags contain 5 drab silver bags, 2 dim crimson bags, 3 plaid blue bags.
-mirrored tomato bags contain 5 light lavender bags.
-posh purple bags contain 3 pale orange bags.
-dim blue bags contain 5 dotted plum bags, 1 light orange bag, 4 dim maroon bags.
-dark cyan bags contain 4 vibrant white bags, 4 dull white bags, 1 posh purple bag.
-drab beige bags contain 5 dull purple bags.
-vibrant olive bags contain 5 light silver bags.
-plaid beige bags contain 3 muted silver bags, 4 vibrant orange bags.
-wavy silver bags contain 2 dim crimson bags, 4 shiny maroon bags, 4 pale indigo bags.
-posh crimson bags contain 2 light violet bags, 4 pale coral bags, 3 plaid bronze bags.
-vibrant crimson bags contain 3 dull red bags.
-dotted olive bags contain no other bags.
-mirrored beige bags contain 2 plaid gray bags, 5 mirrored yellow bags.
-bright brown bags contain 2 faded aqua bags, 1 dim tomato bag, 5 posh magenta bags.
-bright magenta bags contain 2 posh gray bags, 3 dim salmon bags.
-clear magenta bags contain 2 dim cyan bags, 3 clear red bags, 1 dull fuchsia bag, 4 wavy coral bags.
-clear lime bags contain 5 dull green bags, 2 shiny bronze bags, 2 faded orange bags, 1 bright beige bag.
-muted tan bags contain 4 vibrant maroon bags, 3 vibrant black bags, 5 shiny maroon bags, 5 vibrant turquoise bags.
-pale beige bags contain 3 light tomato bags.
-dark fuchsia bags contain 2 faded brown bags, 3 dotted lavender bags, 4 shiny teal bags, 2 bright blue bags.
-dim magenta bags contain 4 posh chartreuse bags.
-bright aqua bags contain 5 drab violet bags.
-striped crimson bags contain 2 bright green bags.
-dull chartreuse bags contain 4 plaid bronze bags, 2 shiny gray bags, 4 dull lavender bags.
-wavy chartreuse bags contain 1 vibrant tomato bag, 1 dim tomato bag, 3 pale green bags, 1 posh plum bag.
-dotted white bags contain 1 dark teal bag, 4 dotted violet bags, 5 bright beige bags, 3 dim silver bags.
-mirrored purple bags contain 1 posh green bag.
-faded bronze bags contain 4 dotted indigo bags.
-faded lavender bags contain 3 muted purple bags.
-clear turquoise bags contain 4 muted orange bags, 1 striped violet bag, 5 clear tan bags, 5 dim white bags.
-shiny plum bags contain 4 dim crimson bags.
-wavy fuchsia bags contain 3 dotted brown bags, 5 dark magenta bags, 2 dark bronze bags.
-faded olive bags contain 5 plaid indigo bags.
-mirrored orange bags contain 4 striped violet bags, 2 light violet bags, 4 shiny orange bags.
-pale indigo bags contain 3 shiny indigo bags.
-faded tan bags contain 3 shiny maroon bags, 5 posh aqua bags, 1 striped violet bag, 2 dim white bags.
-bright chartreuse bags contain 1 posh black bag, 5 bright gray bags, 3 plaid chartreuse bags.
-drab blue bags contain 1 pale violet bag, 4 vibrant green bags.
-posh tan bags contain 4 shiny lime bags.
-plaid maroon bags contain 2 dotted black bags.
-dull coral bags contain 4 posh coral bags, 1 dotted silver bag, 5 drab beige bags, 1 plaid red bag.
-striped yellow bags contain 1 plaid tomato bag, 1 dotted lavender bag.
-muted magenta bags contain 4 muted black bags.
-dotted cyan bags contain 1 vibrant tomato bag, 3 light indigo bags, 1 wavy turquoise bag.
-dim lavender bags contain 1 muted black bag, 4 pale white bags, 2 mirrored coral bags, 5 pale brown bags.
-bright gold bags contain 5 vibrant green bags.
-light white bags contain 2 striped lime bags, 2 muted lime bags, 5 muted brown bags, 4 bright green bags.
-wavy lavender bags contain 2 vibrant purple bags, 5 posh white bags.
-clear black bags contain 2 posh turquoise bags, 3 dotted orange bags, 3 faded teal bags.
-muted crimson bags contain 1 pale violet bag, 5 drab lavender bags.
-posh green bags contain 4 vibrant beige bags, 5 dark purple bags, 3 dim salmon bags, 3 light black bags.
-vibrant silver bags contain 3 posh coral bags, 4 posh white bags.
-dim coral bags contain 2 posh violet bags, 1 dark cyan bag, 3 shiny green bags, 3 vibrant cyan bags.
-striped red bags contain 5 muted olive bags, 4 wavy teal bags, 3 shiny gray bags, 1 mirrored coral bag.
-bright violet bags contain 3 shiny beige bags, 1 wavy magenta bag, 5 light indigo bags.
-vibrant magenta bags contain 4 striped salmon bags, 1 light tan bag.
-faded gold bags contain 5 light tomato bags, 1 wavy black bag, 4 faded maroon bags.
-muted plum bags contain 1 vibrant brown bag, 2 muted cyan bags, 4 muted salmon bags.
-plaid gold bags contain 5 shiny beige bags, 3 faded fuchsia bags, 5 vibrant cyan bags, 5 shiny gold bags.
-striped indigo bags contain no other bags.
-wavy gray bags contain 2 plaid indigo bags, 3 clear tomato bags, 4 dull blue bags.
-plaid silver bags contain 5 clear salmon bags, 5 faded lime bags, 4 shiny tan bags, 5 mirrored chartreuse bags.
-plaid yellow bags contain 4 shiny chartreuse bags, 1 light lime bag, 2 dull green bags.
-plaid turquoise bags contain 3 dotted aqua bags, 3 posh magenta bags.
-striped olive bags contain 2 faded aqua bags, 5 dotted orange bags, 5 dull turquoise bags, 1 pale violet bag.
-faded teal bags contain 3 striped indigo bags.
-dull red bags contain 1 mirrored gray bag, 4 drab coral bags, 2 bright plum bags, 1 dull green bag.
-dull gold bags contain 5 bright blue bags.
-shiny magenta bags contain 1 light white bag.
-striped green bags contain 1 clear blue bag.
-dull teal bags contain 3 dark purple bags, 4 dim lime bags, 5 clear chartreuse bags.
-faded magenta bags contain 4 shiny gray bags, 5 pale crimson bags, 5 light coral bags, 2 pale white bags.
-pale tomato bags contain 4 dull black bags, 1 posh chartreuse bag, 1 faded cyan bag.
-muted blue bags contain 5 striped white bags, 1 faded orange bag.
-light blue bags contain 4 posh white bags.
-plaid chartreuse bags contain 2 bright gray bags.
-dull aqua bags contain 5 clear tan bags, 5 dotted red bags, 5 vibrant tomato bags.
-light lavender bags contain 5 clear fuchsia bags, 1 striped olive bag.
-bright green bags contain 4 vibrant violet bags, 2 vibrant maroon bags.
-light beige bags contain 1 striped maroon bag.
-drab indigo bags contain 4 posh tomato bags, 5 faded brown bags.
-dotted yellow bags contain 3 wavy violet bags, 4 bright violet bags, 4 vibrant lime bags, 1 pale beige bag.
-striped gold bags contain 2 light indigo bags, 3 dull red bags, 5 vibrant beige bags.
-muted indigo bags contain 5 bright purple bags, 1 pale plum bag, 5 wavy black bags.
-dark lime bags contain 2 faded blue bags.
-shiny white bags contain 4 clear tan bags, 3 pale yellow bags, 5 plaid tomato bags, 4 wavy turquoise bags.
-vibrant maroon bags contain 4 dark red bags, 2 dull aqua bags, 5 wavy aqua bags.
-drab teal bags contain 3 shiny indigo bags.
-bright plum bags contain 2 plaid chartreuse bags.
-vibrant yellow bags contain 3 posh purple bags.
-posh salmon bags contain 4 dim plum bags, 1 pale yellow bag, 2 shiny gold bags.
-shiny black bags contain 3 dim magenta bags.
-bright gray bags contain no other bags.
-dull orange bags contain 3 dotted purple bags.
-pale purple bags contain 2 bright cyan bags, 2 drab teal bags, 2 dotted gold bags, 4 mirrored fuchsia bags.
-dull yellow bags contain 3 posh gray bags.
-muted tomato bags contain 3 faded orange bags.
-drab olive bags contain 4 dim maroon bags, 1 bright turquoise bag, 3 shiny indigo bags, 5 vibrant lavender bags.
-clear salmon bags contain 2 dim chartreuse bags, 2 shiny black bags, 5 dotted indigo bags, 3 dotted aqua bags.
-posh black bags contain 2 wavy turquoise bags, 2 shiny plum bags, 2 mirrored gold bags.
-light gold bags contain 5 shiny tomato bags, 4 light cyan bags.
-shiny coral bags contain 3 faded silver bags.
-plaid magenta bags contain 1 vibrant black bag, 2 bright blue bags.
-dotted teal bags contain 4 faded olive bags, 5 vibrant brown bags, 3 clear salmon bags.
-striped purple bags contain 5 shiny bronze bags.
-dim tan bags contain 2 light tan bags, 1 dotted gold bag, 3 shiny white bags.
-light silver bags contain 5 dotted cyan bags, 4 dotted aqua bags.
-dull white bags contain 5 striped turquoise bags.
-plaid aqua bags contain 3 dim bronze bags, 5 dull brown bags, 3 faded plum bags, 2 mirrored crimson bags.
-dotted silver bags contain 1 faded teal bag.
-dull olive bags contain 1 dark turquoise bag, 3 muted orange bags.
-clear purple bags contain 3 drab salmon bags.
-mirrored plum bags contain 1 vibrant lavender bag.
-bright beige bags contain 4 plaid magenta bags, 1 dull turquoise bag, 4 dim white bags, 1 light aqua bag.
-pale red bags contain 1 muted lavender bag, 2 vibrant teal bags, 4 plaid cyan bags, 5 dull orange bags.
-drab orange bags contain 3 bright plum bags, 5 vibrant chartreuse bags.
-mirrored gold bags contain 2 wavy magenta bags.
-posh maroon bags contain 3 dotted lime bags, 2 muted black bags, 3 faded green bags.
-clear white bags contain 4 pale black bags.
-pale silver bags contain 2 dim coral bags, 2 dull lavender bags, 2 dark teal bags, 3 wavy green bags.
-vibrant tomato bags contain 5 dull lavender bags.
-striped orange bags contain 5 shiny salmon bags, 1 pale gold bag, 4 mirrored gray bags, 1 plaid black bag.
-dim beige bags contain 5 dim salmon bags, 2 striped yellow bags, 5 shiny orange bags, 5 light salmon bags.
-clear gold bags contain 2 dim salmon bags, 4 vibrant cyan bags.
-dim teal bags contain 3 light indigo bags, 3 pale green bags, 5 muted bronze bags.
-shiny silver bags contain 3 drab red bags, 1 pale magenta bag, 3 plaid blue bags, 4 pale white bags.
-dark beige bags contain 4 posh black bags, 1 dark maroon bag.
-bright bronze bags contain 4 mirrored yellow bags, 1 vibrant salmon bag, 2 mirrored teal bags, 1 shiny beige bag.
-dotted maroon bags contain 1 clear tomato bag.
-bright olive bags contain 3 striped tomato bags, 3 plaid indigo bags, 3 posh magenta bags.
-faded tomato bags contain 5 bright violet bags.
-mirrored magenta bags contain 3 wavy coral bags, 4 dull tan bags, 3 wavy chartreuse bags.
-striped aqua bags contain 3 drab teal bags, 3 drab crimson bags, 5 plaid gold bags, 2 vibrant aqua bags.
-clear crimson bags contain 5 striped chartreuse bags, 5 vibrant blue bags.
-striped blue bags contain 4 dull red bags, 3 vibrant white bags, 4 posh black bags.
-posh olive bags contain 5 muted cyan bags.
-plaid indigo bags contain 5 dotted fuchsia bags, 2 plaid chartreuse bags, 3 vibrant blue bags.
-mirrored lime bags contain 2 dotted lavender bags, 2 wavy bronze bags.
-wavy blue bags contain 5 mirrored green bags, 5 faded tomato bags, 1 posh turquoise bag.
-light fuchsia bags contain 3 faded tomato bags, 5 muted beige bags, 2 faded beige bags, 4 wavy indigo bags.
-dull plum bags contain 4 dark blue bags, 5 shiny maroon bags, 3 pale gray bags, 5 drab lime bags.
-drab fuchsia bags contain 3 dark maroon bags.
-pale teal bags contain 4 vibrant blue bags, 1 bright green bag, 3 dim crimson bags, 1 posh salmon bag.
-dull tomato bags contain 3 dim maroon bags, 4 plaid gray bags, 5 striped gold bags, 5 striped white bags.
-pale orange bags contain 4 drab yellow bags.
-wavy aqua bags contain 1 dim bronze bag.
-dim chartreuse bags contain 2 bright violet bags.
-dotted crimson bags contain 5 vibrant orange bags, 4 wavy magenta bags.
-faded cyan bags contain 3 mirrored blue bags, 3 shiny fuchsia bags, 4 bright indigo bags.
-pale salmon bags contain 2 pale cyan bags, 2 muted lime bags, 2 vibrant plum bags.
-drab lime bags contain 2 drab yellow bags, 2 light magenta bags, 3 dotted fuchsia bags.
-shiny bronze bags contain 1 posh lavender bag.
-dim fuchsia bags contain 5 dotted gold bags, 5 vibrant indigo bags, 4 shiny teal bags, 2 dotted silver bags.
-dark green bags contain 2 shiny blue bags.
-bright red bags contain 2 pale brown bags, 3 plaid blue bags, 4 drab bronze bags, 3 dim yellow bags.
-clear teal bags contain 2 drab white bags, 3 muted beige bags.
-pale aqua bags contain 4 light tan bags.
-dull lavender bags contain 1 dim bronze bag, 5 dim crimson bags, 1 dotted olive bag.
-dotted plum bags contain 1 light black bag.
-shiny teal bags contain 3 light indigo bags.
-dotted lime bags contain 1 shiny gold bag, 3 plaid crimson bags.
-dark tan bags contain 5 faded tan bags.
-vibrant indigo bags contain 3 shiny fuchsia bags.
-light tan bags contain 4 pale yellow bags, 1 pale crimson bag, 3 light gray bags.
-drab plum bags contain 2 shiny turquoise bags, 2 vibrant yellow bags, 4 muted brown bags, 2 drab lavender bags.
-dim white bags contain 5 dark red bags, 5 dotted olive bags.
-light red bags contain 2 vibrant indigo bags, 1 wavy salmon bag, 3 dull brown bags.
-mirrored fuchsia bags contain 5 dotted tomato bags.
-mirrored indigo bags contain 5 pale lime bags, 5 light magenta bags, 4 light gray bags, 2 dull red bags.
-dim yellow bags contain 2 muted beige bags, 2 plaid olive bags, 3 faded aqua bags.
-shiny gray bags contain 1 drab yellow bag, 3 shiny lavender bags, 1 posh white bag.
-faded violet bags contain 2 bright olive bags, 5 clear gray bags, 2 dark orange bags, 1 pale magenta bag.
-mirrored black bags contain 4 clear blue bags.
-drab aqua bags contain 1 vibrant crimson bag, 4 clear fuchsia bags.
-pale black bags contain 5 pale turquoise bags, 4 striped yellow bags, 4 dotted beige bags.
-wavy cyan bags contain 1 vibrant brown bag.
-dark silver bags contain 3 light tomato bags, 5 dotted lavender bags, 3 bright turquoise bags.
-faded orange bags contain 3 clear turquoise bags, 3 mirrored gold bags, 2 plaid bronze bags, 2 dotted fuchsia bags.
-drab crimson bags contain 5 clear blue bags.
-posh magenta bags contain 1 bright violet bag, 2 dotted beige bags, 2 bright gray bags.
-posh brown bags contain 3 dim tomato bags, 1 dim chartreuse bag, 5 shiny orange bags.
-drab gray bags contain 3 striped violet bags.
-pale cyan bags contain 5 dotted aqua bags, 3 striped tomato bags.
-wavy tan bags contain 3 pale indigo bags.
-plaid brown bags contain 2 dotted indigo bags, 1 dull indigo bag, 2 light brown bags.
-vibrant beige bags contain 1 shiny teal bag, 3 vibrant cyan bags, 2 posh gray bags, 3 striped tomato bags.
-shiny aqua bags contain 2 vibrant black bags, 2 muted coral bags, 4 vibrant coral bags.
-mirrored silver bags contain 3 drab silver bags, 1 clear turquoise bag.
-pale tan bags contain 3 pale magenta bags.
-striped cyan bags contain 5 drab tomato bags.
-mirrored coral bags contain 1 mirrored crimson bag, 1 bright maroon bag.
-pale white bags contain 4 shiny beige bags, 1 shiny maroon bag, 5 dim bronze bags.
-shiny beige bags contain 3 mirrored gold bags.
-mirrored chartreuse bags contain 1 dotted tomato bag, 2 bright cyan bags.
-wavy red bags contain 1 posh lavender bag, 1 vibrant blue bag, 3 muted brown bags.
-muted chartreuse bags contain 3 dim lavender bags, 4 pale plum bags, 4 light magenta bags.
-shiny purple bags contain 4 muted green bags, 5 light white bags, 2 faded tan bags, 5 light beige bags.
-clear tan bags contain 3 dotted red bags, 1 striped violet bag, 4 plaid chartreuse bags.
-bright teal bags contain 1 faded black bag, 3 faded maroon bags.
-posh orange bags contain 5 light gold bags, 3 posh aqua bags.
-striped gray bags contain 2 bright plum bags, 2 shiny gray bags.
-dim lime bags contain 1 plaid blue bag.
-posh fuchsia bags contain 1 dull indigo bag, 2 plaid blue bags.
-dotted tomato bags contain no other bags.
-dim plum bags contain 1 dim chartreuse bag.
-dim orange bags contain 2 muted magenta bags, 5 faded aqua bags.
-posh gold bags contain 5 light maroon bags, 4 dark turquoise bags, 1 posh white bag, 5 wavy beige bags.
-striped bronze bags contain 1 dark magenta bag.
-wavy lime bags contain 4 mirrored lavender bags, 3 pale bronze bags, 1 dull white bag.
-pale magenta bags contain 2 dim crimson bags, 4 plaid plum bags, 5 muted silver bags, 2 dim yellow bags.
-striped chartreuse bags contain 5 light black bags, 3 bright fuchsia bags, 4 pale black bags.
-vibrant tan bags contain 2 dim tan bags.
-shiny crimson bags contain 5 pale beige bags, 3 clear purple bags, 2 pale violet bags, 4 dotted chartreuse bags.
-vibrant orange bags contain no other bags.
-striped silver bags contain 5 clear orange bags, 2 dotted fuchsia bags.
-clear cyan bags contain 5 muted gray bags, 3 wavy aqua bags.
-light black bags contain 1 striped yellow bag.
-muted white bags contain 3 muted tomato bags, 5 light black bags, 4 pale black bags, 5 shiny gold bags.
diff --git a/2020/inputs/day_8.txt b/2020/inputs/day_8.txt
deleted file mode 100644
index 5ef799e..0000000
--- a/2020/inputs/day_8.txt
+++ /dev/null
@@ -1,626 +0,0 @@
-acc +48
-nop +308
-acc +33
-acc +48
-jmp +379
-acc +27
-acc +23
-acc +29
-acc +3
-jmp +326
-acc -12
-nop +248
-nop +146
-jmp +293
-acc +8
-acc -16
-acc +18
-jmp +255
-jmp +390
-jmp +442
-acc +38
-jmp +451
-jmp +499
-acc +41
-acc +44
-nop +298
-acc +31
-jmp +337
-acc -3
-acc +34
-nop +266
-acc -19
-jmp +281
-jmp +232
-acc -9
-acc +25
-acc -8
-nop +228
-jmp +79
-jmp +58
-acc +38
-nop +318
-jmp +17
-acc +44
-jmp +298
-acc -4
-jmp +196
-jmp +249
-acc -9
-acc -3
-acc +17
-jmp +556
-jmp +1
-acc -15
-jmp +166
-acc +23
-acc +10
-acc +39
-jmp +475
-acc +28
-jmp +41
-jmp +322
-acc +48
-acc -11
-acc -13
-acc +12
-jmp +92
-jmp +1
-acc +9
-jmp -26
-acc +4
-acc -8
-nop +484
-acc -14
-jmp +526
-acc -13
-acc -2
-acc -13
-jmp +419
-acc +22
-acc -17
-jmp +1
-jmp +151
-acc +3
-acc +2
-acc -13
-acc -11
-jmp +352
-acc +24
-jmp -27
-nop +206
-acc +22
-nop +225
-jmp +360
-acc +48
-jmp +105
-jmp +80
-acc -16
-jmp +89
-acc +0
-jmp +339
-acc +37
-acc +41
-nop +156
-jmp +452
-jmp +208
-nop +60
-jmp +155
-acc -16
-jmp +274
-nop -77
-acc -16
-acc +21
-jmp +508
-acc -7
-acc -1
-jmp -83
-acc -11
-jmp +28
-acc +3
-acc +32
-acc -18
-jmp -89
-acc +4
-acc -14
-acc -1
-acc +33
-jmp -75
-nop +185
-acc +8
-acc +22
-acc +26
-jmp +164
-acc -19
-jmp +260
-jmp +174
-acc +2
-acc +34
-jmp -120
-acc -15
-acc +48
-jmp +165
-acc +5
-nop +240
-jmp -121
-jmp +114
-jmp -36
-nop +432
-jmp +1
-acc -18
-jmp +429
-acc +44
-nop +110
-jmp +198
-acc -18
-acc +32
-acc +41
-jmp +102
-nop +177
-acc +35
-acc +24
-acc +46
-jmp +121
-acc +20
-jmp +1
-jmp +407
-jmp +1
-acc +35
-acc +46
-nop -18
-jmp +6
-jmp +422
-acc -19
-jmp -85
-acc +33
-jmp -116
-nop +79
-jmp +284
-acc +3
-acc +49
-nop +317
-jmp +6
-acc +6
-jmp +295
-nop -141
-acc -4
-jmp -44
-nop +155
-acc +48
-acc -17
-jmp +188
-acc +22
-jmp +286
-nop +103
-acc -2
-acc +45
-jmp +20
-acc +21
-acc +37
-jmp +235
-jmp +42
-acc -11
-nop -15
-acc -5
-jmp +235
-jmp +178
-acc +12
-acc -15
-jmp +25
-acc +9
-acc +11
-nop +389
-acc +50
-jmp +146
-acc +26
-jmp +144
-acc -14
-jmp +304
-nop +254
-jmp +337
-jmp +17
-jmp +1
-acc +6
-acc -4
-acc +42
-jmp +117
-acc +25
-acc +50
-acc +45
-jmp -112
-acc +14
-acc +27
-jmp +347
-nop +15
-jmp +14
-acc +29
-jmp +236
-jmp -71
-acc -11
-acc +21
-nop +32
-jmp -162
-acc -15
-jmp +322
-acc -4
-acc +16
-jmp +1
-jmp +100
-jmp +1
-jmp -77
-acc +21
-nop -199
-acc +49
-acc -1
-jmp -231
-jmp +230
-acc -19
-jmp +1
-jmp -49
-jmp -11
-acc +6
-jmp -110
-jmp +331
-acc +44
-jmp +292
-acc -7
-acc -18
-acc +50
-jmp +221
-acc +33
-acc +7
-jmp -45
-jmp +342
-acc -19
-acc +36
-acc +15
-jmp -229
-nop -5
-jmp +57
-acc +26
-acc +43
-nop -175
-jmp +82
-acc +45
-jmp -161
-acc -16
-acc +35
-acc +46
-acc +43
-jmp +1
-nop +195
-acc +39
-acc +27
-acc +32
-jmp +227
-jmp -272
-nop +201
-acc +6
-acc +13
-acc +12
-jmp -177
-acc -9
-acc +46
-nop +199
-acc -1
-jmp +1
-jmp +3
-acc +42
-jmp +75
-jmp +305
-acc +49
-acc -16
-jmp -92
-acc +3
-nop +279
-jmp +54
-jmp +31
-acc +50
-jmp -125
-acc +21
-nop -178
-acc +40
-jmp +193
-acc +39
-acc -5
-jmp +261
-nop -3
-acc -13
-jmp -310
-acc +6
-acc -17
-acc +12
-acc +38
-jmp +267
-jmp -311
-acc -2
-jmp -7
-nop +77
-acc -2
-acc +39
-acc -16
-jmp +10
-nop +59
-jmp -296
-acc -4
-acc +41
-jmp -249
-acc +43
-nop +35
-jmp +95
-jmp +171
-acc +10
-nop +169
-acc -17
-jmp +47
-acc +49
-acc +38
-nop +199
-jmp +249
-jmp -53
-nop -194
-acc +19
-acc +18
-jmp -16
-acc +33
-jmp +194
-nop -194
-acc +49
-jmp +85
-acc +50
-nop -318
-acc -7
-jmp -49
-acc -6
-acc +48
-acc -13
-acc -14
-jmp +67
-acc +12
-acc +19
-acc +3
-jmp -371
-jmp -149
-acc +49
-nop -202
-jmp -315
-acc -6
-jmp -171
-acc -7
-jmp +113
-acc +34
-acc +36
-acc +17
-jmp -97
-acc +3
-jmp -244
-acc +25
-acc +30
-acc +25
-acc -19
-jmp +44
-nop +84
-jmp +124
-nop +17
-acc -11
-acc -8
-acc +4
-jmp +193
-jmp -388
-acc +36
-acc +17
-jmp +1
-acc -5
-jmp +166
-acc +39
-acc -10
-jmp -280
-acc +15
-jmp +1
-jmp -396
-jmp +113
-acc +37
-acc +13
-jmp -35
-nop +109
-acc +8
-acc +6
-acc +19
-jmp +39
-jmp +1
-jmp +1
-acc +39
-acc -14
-jmp -291
-acc +39
-acc +31
-jmp -231
-acc +41
-jmp -55
-nop -167
-jmp +105
-acc -8
-acc +34
-jmp -114
-nop +58
-jmp +1
-nop -270
-acc +31
-jmp -135
-acc +8
-acc +33
-jmp +1
-jmp -64
-acc +24
-acc +16
-jmp +117
-acc +35
-acc -11
-nop +44
-acc +18
-jmp +1
-jmp +88
-acc +29
-nop +34
-jmp +1
-nop -118
-jmp -404
-jmp -144
-acc -12
-nop -372
-acc -14
-jmp -209
-acc +12
-jmp +1
-acc -1
-jmp +132
-nop -93
-jmp -130
-acc +23
-acc +30
-acc +3
-jmp -209
-nop -381
-acc -19
-jmp +23
-nop +87
-jmp -277
-acc +39
-jmp -391
-acc +14
-acc +18
-acc +24
-nop -459
-jmp -267
-acc +35
-nop +84
-jmp -231
-acc +5
-acc +0
-acc +45
-jmp -210
-jmp -211
-acc +7
-acc +8
-nop -249
-jmp -8
-jmp -105
-nop -455
-acc -19
-acc +36
-jmp -368
-acc +33
-acc +10
-acc +9
-jmp -259
-nop +41
-acc -14
-acc +2
-jmp -336
-acc +46
-jmp -261
-nop -284
-acc +21
-nop -154
-jmp -485
-jmp -505
-acc +32
-nop -327
-acc +1
-nop +43
-jmp -23
-acc -7
-jmp -88
-acc +10
-jmp -440
-acc +12
-jmp -430
-jmp +1
-acc +46
-nop -105
-jmp -87
-acc +49
-acc -10
-acc -6
-jmp -411
-jmp -268
-acc +35
-acc +15
-jmp +45
-acc -14
-acc +0
-jmp -234
-nop -67
-acc +32
-acc +1
-jmp -476
-jmp -297
-nop -274
-jmp -435
-acc +36
-acc -2
-acc +33
-acc +9
-jmp -26
-jmp +50
-acc +23
-jmp -172
-jmp +1
-acc +34
-acc +32
-acc -4
-jmp -312
-acc -11
-acc +26
-jmp -150
-acc +41
-nop -79
-acc +25
-jmp -76
-acc -2
-acc +29
-acc +12
-jmp -549
-nop -357
-nop -438
-jmp -320
-acc +7
-acc -6
-jmp -149
-nop -74
-acc +7
-acc +45
-jmp -383
-acc -8
-acc +5
-acc +12
-jmp -463
-acc -17
-acc +5
-jmp -34
-jmp +1
-acc +18
-jmp -523
-acc +38
-acc +35
-nop -222
-jmp -424
-nop -365
-jmp -188
-acc +0
-acc +7
-nop -167
-acc +27
-jmp -351
-acc +26
-jmp -201
-nop -208
-nop -466
-acc +50
-nop -531
-jmp -273
-acc +21
-acc +25
-nop -397
-acc +29
-jmp +1
diff --git a/2020/inputs/day_9.txt b/2020/inputs/day_9.txt
deleted file mode 100644
index 31690cc..0000000
--- a/2020/inputs/day_9.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-37
-7
-16
-34
-48
-24
-5
-40
-30
-35
-2
-45
-19
-33
-36
-49
-32
-1
-44
-21
-25
-3
-11
-38
-15
-4
-6
-7
-8
-16
-9
-10
-5
-12
-13
-17
-14
-35
-18
-19
-20
-23
-36
-53
-22
-21
-41
-28
-11
-24
-15
-25
-26
-27
-29
-64
-50
-31
-30
-34
-32
-44
-33
-47
-74
-35
-66
-37
-36
-38
-45
-39
-40
-41
-42
-57
-51
-55
-68
-70
-71
-72
-61
-88
-65
-75
-140
-77
-73
-82
-110
-81
-74
-116
-86
-80
-112
-83
-92
-128
-141
-106
-120
-146
-126
-147
-133
-134
-138
-139
-156
-209
-162
-160
-154
-155
-233
-216
-163
-313
-298
-273
-189
-198
-226
-253
-232
-265
-259
-260
-316
-267
-272
-277
-449
-428
-314
-309
-471
-318
-379
-430
-458
-387
-683
-475
-415
-421
-486
-525
-544
-575
-532
-519
-632
-539
-590
-739
-586
-623
-627
-688
-696
-697
-804
-1072
-1119
-940
-808
-896
-836
-990
-907
-1107
-1436
-1114
-1129
-1051
-1058
-1754
-1385
-1644
-1459
-1250
-2686
-1324
-2442
-1504
-1501
-1612
-1704
-1915
-1715
-1732
-1826
-1897
-2048
-2431
-2109
-3004
-2165
-2825
-2301
-3039
-2862
-3145
-2574
-2709
-2751
-3447
-4043
-3005
-4198
-3113
-3612
-4910
-3629
-3541
-4306
-4157
-4466
-4349
-4274
-5113
-5027
-5446
-6186
-7889
-8522
-5436
-5854
-5283
-5864
-6292
-6118
-6546
-6617
-6742
-6654
-7241
-7170
-7698
-8431
-11231
-8506
-8623
-9301
-9387
-10140
-10310
-12518
-11137
-10719
-11147
-11290
-11401
-11575
-12156
-12410
-12664
-16757
-13271
-13396
-19611
-14411
-14868
-17129
-16937
-29793
-17807
-17924
-18688
-27532
-23665
-21029
-21866
-23954
-22009
-22976
-30217
-34022
-25986
-27807
-29601
-30400
-26667
-27682
-28264
-40602
-29279
-31805
-34066
-41472
-45606
-41589
-47696
-48711
-55214
-43038
-57543
-69154
-45963
-77223
-66588
-68866
-55265
-115299
-58207
-54349
-95816
-68284
-62330
-115750
-61084
-100312
-90012
-116995
-100820
-84627
-139841
-94674
-89001
-97387
-98303
-190490
-178080
-109614
-112556
-113472
-115433
-116349
-225364
-116679
-122633
-194241
-123414
-145711
-158471
-150085
-173628
-268085
-179301
-198099
-182014
-183675
-186388
-391499
-207001
-207917
-222170
-223086
-229235
-323350
-228905
-530351
-233028
-239312
-262390
-304647
-308556
-389397
-295796
-344859
-415293
-352929
-380113
-430087
-405100
-365689
-370063
-393389
-545520
-431003
-530726
-445256
-456114
-462263
-533552
-524701
-472340
-846296
-535108
-674245
-763452
-604352
-640655
-758059
-697788
-718618
-733042
-1129053
-759078
-838645
-876259
-824392
-918090
-887117
-893266
-907519
-901370
-1591316
-934603
-1469711
-1359500
-1742482
-1139460
-1175763
-1245007
-1302140
-1362411
-1338443
-1571687
-1416406
-1963852
-1557434
-1583470
-1597723
-1663037
-1769525
-2032726
-1780383
-1827869
-3212193
-1808889
-2351009
-2908044
-2538174
-2384467
-3385303
-3352070
-2315223
-2420770
-2547147
-2640583
-2778817
-3886910
-2973840
-2999876
-4336251
-3140904
-3181193
-5009062
-4606686
-4229659
-5601963
-3589272
-3636758
-4124112
-4159898
-4666232
-4699690
-4735993
-4805237
-6183905
-4862370
-4955806
-4967917
-5187730
-5419400
-7370563
-5973716
-6589148
-7226030
-6322097
-10580402
-6817951
-7713384
-11509827
-7749170
-7760870
-7796656
-8824488
-8860105
-8895891
-10281770
-12554407
-15536208
-9667607
-16645061
-13548127
-9923723
-13692660
-10607130
-22222014
-12295813
-14531335
-12911245
-20092469
-19476293
-14567121
-15678056
-15462554
-15510040
-18356300
-30972594
-19141875
-34623804
-17755996
-18563498
-19591330
-25386277
-20274737
-20530853
-27240787
-22902943
-22219536
-30198460
-30667241
-25207058
-26827148
-27442580
-43742577
-32323117
-30029675
-34158451
-33218550
-33266036
-33866340
-36112296
-37347326
-36319494
-52721949
-44977607
-38154828
-39866067
-40805590
-42494273
-43433796
-68014567
-45122479
-55485572
-58425608
-52034206
-52649638
-76652724
-57472255
-128686930
-95216222
-73666820
-66484586
-67084890
-69378332
-91338595
-72431790
-137710495
-74474322
-78020895
-127917362
-84988546
-84239386
-83299863
-85928069
-111607065
-132899930
-135078332
-186342970
-104683844
-109506461
-110121893
-123956841
-124557145
-161700808
-256917030
-186081387
-146906112
-136463222
-141810122
-150452685
-158713708
-207374252
-157774185
-167539249
-168288409
-193421756
-169227932
-269381250
-197535134
-229240989
-214190305
-244584793
-214805737
-219628354
-177777905
-246585115
-286915907
-261020367
-278273344
-311038054
-335827658
-283369334
-292262807
-360961005
-396780238
-437669659
-325313434
-365074383
-448869343
-361710165
-347005837
-608295280
-392583642
-422362698
-391968210
-397406259
-424363020
-456051249
-503091339
-461147239
-893720908
-561642678
-589311398
-570536151
-675337544
-619196992
-575632141
-639268644
-707966842
-708716002
-672319271
-687023599
-821769279
-754293807
-738974047
-739589479
-1483032306
-1031683390
-789374469
-1036779380
-1233961949
-880414269
-1133466510
-964238578
-1022789917
-1809594090
-2272406775
-1164943539
-1209804795
-1214900785
-1194829133
-1247951412
-1461693740
-1359342870
-1791073187
-1411908750
-1651262177
-1478563526
-1493883286
-1821057859
-1776368859
-1753613047
-1954318008
-2156256427
-1844652847
-1903204186
-3010605047
-1987028495
-2129182117
-2187733456
-3196833290
-3284956473
-2359772672
-2404633928
-2409729918
-2442780545
-2607294282
-2771251620
-2837906396
-3920255304
-2905792036
-3747857033
-3323216373
-3247496333
-4630514001
-4802553217
-3598265894
-4510498468
-4307838114
-3831681342
-4174761951
-4116210612
-7346122927
-4316915573
-4597463374
-5652130261
-4847414473
-4764406600
-6236315270
-5050074827
-5214032165
-7618666093
-6369517514
-8918763829
-6153288369
-6229008409
-6570712706
-6921482267
-7422258284
-7714476506
-7906104008
-7915181467
-8148596915
-11663038500
-8679095815
-8290972563
-8433126185
-8914378947
-9081322173
-11168176080
-9611821073
-13362629080
-9814481427
-10264106992
-11203363196
-12382296778
-14284698981
-12522805883
-12724001075
-16834819698
-23726169079
-13492194973
-17995701120
-15136734790
-15620580514
-15821285475
-22196778205
-16439569478
-16724098748
-23306676400
-17514448358
-17347505132
-18728860374
-18693143246
-19426302500
-19875928065
-21467470188
-21017844623
-32651183148
-24905102661
-28002877292
-31949108383
-31860833538
-40450267827
-29313480448
-28628929763
-38018063680
-33616281634
-34238547106
-31441865989
-59143411073
-33163668226
-36040648378
-34071603880
-48956314347
-36243308732
-60070795752
-49020721915
-55083751822
-39302230565
-40893772688
-70744096554
-45922947284
-52907979953
-54218583109
-59951985675
-63385084328
-57942410211
-62477148674
-93101815502
-61792597989
-65680413095
-64605534215
-93919014663
-67235272106
-69204316604
-69406976958
-70112252258
-70314912612
-75545539297
-110813319904
-88322952480
-80196003253
-150800101154
-118824117324
-110098089292
-98830927237
-100141530393
-112160993320
-114170568784
-129027870095
-157729929438
-199136272384
-124269746663
-186062344652
-127473011084
-130285947310
-133809850819
-136439588710
-183374885388
-138611293562
-139519229216
-250332549120
-194366572037
-204465749916
-316348291962
-168518955733
-210481950563
-314563839208
-232640778056
-238752823955
-198972457630
-212302523713
-250610157494
-438833585871
-251742757747
-266992240300
-266084304646
-705825826171
-257758958394
-270249439529
-264095798129
-272421144381
-404848522600
-441133843782
-278130522778
-308038184949
-362885527770
-367491413363
-379000906296
-380821479446
-502352915241
-409454408193
-411274981343
-431613235686
-437725281585
-478386828359
-484723668094
-633575718009
-509501716141
-703809586231
-523843263040
-852408825125
-521854756523
-528008397923
-534345237658
-766448713370
-653242623827
-778766394706
-586168707727
-641016050548
-688859664395
-730376941133
-869844328604
-889661809702
-790275887639
-820729389536
-841067643879
-842888217029
-955456498726
-1110011970767
-1070892375821
-1573265158162
-1227184758275
-1031356472664
-1056199994181
-1045698019563
-1252231697656
-1162870807071
-1169024448471
-1264722178791
-1479135552034
-1239411331554
-1275028372122
-1427236351606
-1510860379152
-2589147522801
-2054998066430
-2180904346588
-1611005277175
-1631343531518
-1776185888262
-1683955860908
-1798344715755
-2077054492227
-2087556466845
-2116590395384
-3761010353135
-2101898013744
-2194227279735
-2208568826634
-2402282138625
-3878083902006
-2331895255542
-4408949747769
-3458949458526
-2514439703676
-2666647683160
-2702264723728
-2938096730758
-3121865656327
-3460141749170
-3242348808693
-4325159222018
-5090292990044
-3315299392426
-3482300576663
-5330434482961
-3992571995490
-4631030099060
-6603177027504
-4218488409128
-4296125293479
-6148948259823
-4402796106369
-6364214465020
-5884582715288
-4846334959218
-4998542938702
-5181087386836
-6017564116154
-5216704427404
-9033826205429
-5640361454486
-8698921399848
-6582007405497
-6557648201119
-9936627949262
-7718095498795
-9199882107714
-7307871387916
-9961464582021
-8838906954708
-10215247366106
-9477365058278
-8514613702607
-20151875315368
-9142460252697
-9401339045071
-9583883493205
-15142551968857
-19249073571535
-11234268543558
-10179630325538
-10397791814240
-15983346450568
-26198593816674
-12198009655605
-12948232842402
-15781889513211
-15724467658194
-13865519589035
-15025966886711
-17679560080816
-15822485090523
-16146778342624
-25939715024300
-30924441482068
-24924349765908
-17657073955304
-18098497195812
-18543799297768
-28913828624374
-18985222538276
-19763513818743
-20577422139778
-31707814108762
-21413898869096
-34325688810979
-27922477313799
-25146242498007
-38256982220594
-32409318886803
-31545079669851
-28891486475746
-53838178390282
-29688004679558
-30848451977234
-39957698166864
-50472467153603
-33803852297928
-68570964349415
-57805315100120
-37083719734088
-35755571151116
-36642296493580
-63239517435353
-38748736357019
-66735007697782
-44909756316750
-79219213969216
-46560141367103
-49336376182895
-57555561384810
-64647057626862
-78706434523883
-115861510462796
-62097323566361
-114974785120332
-78227862658641
-60536456656792
-66771724413646
diff --git a/2021/inputs/.gitkeep b/2021/inputs/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/2021/inputs/.gitkeep
diff --git a/2021/inputs/day_1.txt b/2021/inputs/day_1.txt
deleted file mode 100644
index 42f77f8..0000000
--- a/2021/inputs/day_1.txt
+++ /dev/null
@@ -1,2000 +0,0 @@
-196
-197
-176
-182
-179
-177
-171
-172
-170
-147
-143
-153
-158
-157
-147
-151
-153
-159
-150
-167
-162
-160
-159
-161
-165
-150
-158
-157
-146
-141
-137
-127
-140
-127
-115
-114
-116
-118
-127
-133
-141
-151
-150
-148
-146
-170
-171
-168
-189
-194
-191
-205
-210
-194
-195
-191
-231
-241
-239
-241
-245
-255
-239
-244
-245
-246
-260
-262
-253
-262
-268
-289
-278
-279
-293
-312
-307
-308
-333
-336
-325
-329
-338
-334
-337
-330
-340
-341
-338
-344
-359
-361
-359
-377
-411
-450
-459
-458
-455
-450
-444
-460
-457
-458
-454
-456
-460
-465
-470
-469
-468
-462
-454
-446
-448
-449
-451
-448
-463
-470
-492
-504
-506
-508
-501
-535
-539
-547
-549
-548
-563
-565
-564
-571
-586
-599
-593
-588
-591
-597
-611
-610
-617
-619
-617
-618
-614
-604
-603
-604
-590
-593
-592
-581
-577
-604
-611
-612
-610
-634
-651
-638
-636
-633
-634
-629
-624
-611
-623
-626
-631
-632
-631
-659
-672
-686
-681
-682
-680
-666
-668
-682
-680
-681
-700
-701
-690
-685
-693
-692
-691
-693
-692
-700
-704
-713
-716
-715
-727
-726
-725
-713
-718
-714
-715
-710
-709
-718
-717
-719
-720
-716
-705
-716
-719
-735
-746
-729
-735
-726
-743
-744
-740
-739
-730
-735
-738
-736
-743
-752
-754
-758
-767
-753
-754
-756
-754
-758
-755
-750
-754
-750
-749
-745
-743
-740
-739
-740
-738
-740
-746
-747
-772
-775
-768
-769
-781
-782
-788
-799
-813
-792
-782
-783
-785
-770
-761
-771
-798
-808
-810
-811
-829
-840
-826
-833
-829
-833
-815
-816
-818
-809
-810
-813
-819
-809
-787
-770
-765
-786
-793
-792
-787
-790
-791
-794
-790
-801
-804
-803
-781
-794
-778
-779
-777
-778
-786
-773
-775
-783
-781
-790
-781
-782
-791
-792
-815
-816
-808
-803
-786
-785
-781
-780
-781
-785
-754
-741
-725
-724
-725
-724
-726
-725
-727
-721
-718
-706
-721
-731
-739
-759
-752
-749
-767
-766
-787
-788
-812
-826
-828
-829
-835
-834
-831
-818
-808
-813
-827
-847
-848
-853
-857
-859
-860
-864
-867
-871
-870
-877
-874
-858
-857
-840
-844
-848
-846
-853
-860
-866
-862
-867
-885
-898
-929
-935
-944
-946
-952
-961
-975
-974
-970
-966
-983
-981
-986
-1001
-996
-995
-982
-984
-991
-982
-990
-984
-991
-992
-997
-995
-994
-998
-1004
-1010
-1011
-1010
-1013
-1016
-1025
-1027
-1029
-1040
-1038
-1041
-1045
-1047
-1048
-1050
-1023
-1024
-1019
-1025
-1035
-1036
-1045
-1052
-1053
-1050
-1049
-1050
-1048
-1049
-1059
-1061
-1059
-1031
-1032
-1042
-1051
-1055
-1064
-1058
-1032
-1037
-1039
-1061
-1087
-1088
-1080
-1085
-1069
-1052
-1054
-1060
-1062
-1063
-1062
-1063
-1062
-1048
-1054
-1050
-1031
-1028
-1022
-1034
-1038
-1039
-1036
-1045
-1055
-1054
-1053
-1058
-1088
-1089
-1086
-1095
-1096
-1090
-1087
-1095
-1099
-1097
-1091
-1093
-1068
-1061
-1078
-1073
-1079
-1082
-1068
-1079
-1078
-1067
-1068
-1084
-1091
-1096
-1070
-1061
-1052
-1047
-1065
-1056
-1069
-1070
-1072
-1081
-1083
-1084
-1078
-1079
-1080
-1082
-1085
-1081
-1085
-1086
-1094
-1096
-1097
-1079
-1081
-1082
-1080
-1077
-1084
-1085
-1084
-1088
-1091
-1092
-1101
-1102
-1101
-1116
-1115
-1114
-1117
-1123
-1120
-1113
-1111
-1116
-1119
-1118
-1130
-1116
-1119
-1122
-1120
-1121
-1150
-1153
-1156
-1162
-1163
-1189
-1191
-1192
-1189
-1187
-1186
-1177
-1167
-1140
-1149
-1160
-1142
-1147
-1148
-1170
-1169
-1188
-1190
-1189
-1193
-1187
-1181
-1188
-1193
-1192
-1194
-1216
-1223
-1209
-1199
-1214
-1218
-1211
-1212
-1222
-1227
-1234
-1244
-1235
-1238
-1232
-1238
-1236
-1231
-1223
-1217
-1218
-1229
-1212
-1236
-1237
-1240
-1255
-1257
-1258
-1261
-1258
-1255
-1258
-1256
-1258
-1279
-1275
-1274
-1282
-1292
-1293
-1296
-1287
-1323
-1322
-1332
-1333
-1316
-1327
-1332
-1334
-1314
-1311
-1315
-1317
-1320
-1359
-1362
-1360
-1362
-1372
-1377
-1389
-1382
-1373
-1380
-1388
-1395
-1384
-1375
-1382
-1383
-1368
-1363
-1356
-1352
-1356
-1360
-1355
-1367
-1371
-1382
-1409
-1379
-1421
-1429
-1430
-1448
-1451
-1452
-1449
-1439
-1460
-1431
-1429
-1430
-1427
-1416
-1417
-1454
-1472
-1473
-1476
-1475
-1477
-1476
-1482
-1481
-1489
-1488
-1490
-1495
-1493
-1500
-1517
-1500
-1498
-1494
-1502
-1505
-1536
-1537
-1538
-1543
-1542
-1541
-1554
-1553
-1555
-1558
-1549
-1550
-1557
-1558
-1560
-1561
-1565
-1560
-1565
-1572
-1573
-1575
-1571
-1581
-1605
-1614
-1611
-1619
-1618
-1614
-1612
-1616
-1629
-1628
-1632
-1635
-1644
-1637
-1638
-1632
-1613
-1614
-1615
-1614
-1609
-1611
-1620
-1615
-1608
-1612
-1646
-1647
-1665
-1668
-1665
-1668
-1676
-1677
-1682
-1695
-1696
-1708
-1709
-1686
-1681
-1668
-1669
-1655
-1667
-1681
-1689
-1710
-1718
-1749
-1748
-1746
-1749
-1752
-1748
-1745
-1744
-1743
-1745
-1743
-1744
-1726
-1725
-1724
-1728
-1727
-1739
-1740
-1733
-1739
-1740
-1757
-1759
-1758
-1759
-1762
-1802
-1799
-1792
-1786
-1787
-1793
-1794
-1797
-1798
-1800
-1803
-1802
-1792
-1793
-1795
-1783
-1782
-1772
-1771
-1772
-1774
-1778
-1765
-1766
-1767
-1769
-1771
-1772
-1788
-1781
-1790
-1789
-1791
-1813
-1809
-1810
-1813
-1814
-1819
-1823
-1815
-1814
-1822
-1826
-1812
-1817
-1814
-1818
-1800
-1801
-1804
-1800
-1802
-1813
-1825
-1822
-1832
-1840
-1841
-1830
-1834
-1835
-1841
-1840
-1845
-1881
-1883
-1887
-1886
-1890
-1889
-1896
-1897
-1917
-1923
-1925
-1923
-1924
-1909
-1899
-1904
-1905
-1907
-1905
-1908
-1922
-1912
-1920
-1924
-1920
-1921
-1920
-1919
-1935
-1937
-1955
-1956
-1967
-1972
-1977
-1984
-1982
-1986
-1980
-1975
-2005
-2007
-2018
-2027
-2040
-2039
-2040
-2042
-2040
-2041
-2040
-2034
-2060
-2066
-2074
-2076
-2080
-2081
-2082
-2066
-2071
-2074
-2069
-2070
-2076
-2075
-2079
-2082
-2081
-2080
-2085
-2093
-2097
-2091
-2096
-2097
-2106
-2103
-2110
-2107
-2098
-2097
-2110
-2113
-2097
-2102
-2103
-2107
-2103
-2117
-2097
-2105
-2103
-2099
-2101
-2094
-2102
-2099
-2069
-2067
-2057
-2071
-2073
-2075
-2073
-2060
-2064
-2081
-2057
-2055
-2056
-2064
-2066
-2067
-2069
-2070
-2076
-2075
-2074
-2101
-2099
-2116
-2115
-2119
-2129
-2126
-2124
-2122
-2126
-2143
-2140
-2141
-2146
-2145
-2148
-2164
-2154
-2151
-2148
-2152
-2130
-2129
-2131
-2118
-2123
-2129
-2130
-2127
-2133
-2132
-2142
-2143
-2157
-2156
-2140
-2139
-2141
-2139
-2140
-2142
-2134
-2126
-2128
-2129
-2131
-2126
-2146
-2145
-2134
-2153
-2151
-2140
-2139
-2161
-2165
-2169
-2150
-2151
-2153
-2176
-2183
-2182
-2188
-2165
-2160
-2161
-2165
-2173
-2155
-2154
-2141
-2140
-2161
-2158
-2148
-2164
-2165
-2176
-2163
-2168
-2158
-2159
-2194
-2201
-2203
-2202
-2211
-2213
-2210
-2193
-2199
-2201
-2199
-2206
-2231
-2239
-2246
-2249
-2265
-2266
-2267
-2281
-2291
-2292
-2293
-2296
-2295
-2275
-2273
-2275
-2274
-2286
-2291
-2301
-2300
-2302
-2298
-2300
-2288
-2298
-2300
-2291
-2309
-2303
-2304
-2309
-2318
-2308
-2315
-2314
-2313
-2315
-2314
-2315
-2325
-2326
-2310
-2308
-2314
-2313
-2312
-2311
-2312
-2311
-2310
-2304
-2310
-2308
-2311
-2296
-2295
-2289
-2290
-2292
-2291
-2289
-2290
-2288
-2300
-2302
-2307
-2313
-2312
-2309
-2310
-2312
-2313
-2314
-2315
-2314
-2308
-2309
-2313
-2325
-2324
-2322
-2300
-2298
-2291
-2301
-2298
-2307
-2309
-2308
-2345
-2341
-2342
-2345
-2360
-2367
-2371
-2374
-2368
-2369
-2375
-2406
-2405
-2422
-2423
-2422
-2419
-2417
-2416
-2417
-2421
-2427
-2445
-2449
-2432
-2448
-2454
-2437
-2429
-2430
-2439
-2415
-2418
-2425
-2421
-2401
-2414
-2412
-2416
-2432
-2450
-2443
-2426
-2427
-2428
-2427
-2429
-2430
-2434
-2438
-2431
-2433
-2431
-2427
-2433
-2455
-2462
-2463
-2465
-2461
-2462
-2463
-2496
-2497
-2493
-2486
-2472
-2470
-2475
-2483
-2491
-2492
-2505
-2510
-2511
-2507
-2508
-2506
-2507
-2505
-2506
-2504
-2524
-2528
-2519
-2527
-2543
-2549
-2555
-2567
-2555
-2561
-2560
-2561
-2560
-2541
-2540
-2537
-2530
-2532
-2528
-2529
-2528
-2522
-2516
-2506
-2520
-2526
-2527
-2531
-2534
-2544
-2545
-2542
-2541
-2543
-2544
-2543
-2542
-2558
-2560
-2558
-2559
-2552
-2551
-2558
-2573
-2590
-2589
-2583
-2574
-2565
-2569
-2580
-2596
-2597
-2596
-2585
-2586
-2587
-2598
-2587
-2588
-2571
-2570
-2567
-2579
-2581
-2579
-2572
-2577
-2575
-2574
-2582
-2585
-2592
-2600
-2601
-2608
-2606
-2609
-2612
-2619
-2631
-2636
-2633
-2640
-2654
-2649
-2611
-2598
-2600
-2604
-2608
-2600
-2607
-2623
-2624
-2633
-2632
-2637
-2655
-2658
-2662
-2675
-2676
-2699
-2711
-2714
-2710
-2718
-2750
-2719
-2713
-2714
-2737
-2739
-2733
-2736
-2754
-2773
-2776
-2794
-2795
-2823
-2825
-2826
-2828
-2830
-2815
-2823
-2821
-2825
-2829
-2833
-2834
-2833
-2832
-2844
-2838
-2840
-2845
-2837
-2849
-2878
-2859
-2858
-2859
-2864
-2868
-2870
-2863
-2859
-2860
-2858
-2860
-2857
-2851
-2852
-2856
-2818
-2820
-2822
-2819
-2818
-2819
-2823
-2827
-2836
-2834
-2835
-2842
-2856
-2854
-2853
-2854
-2855
-2854
-2858
-2859
-2866
-2872
-2871
-2869
-2875
-2874
-2888
-2881
-2883
-2900
-2897
-2885
-2880
-2882
-2883
-2886
-2887
-2903
-2894
-2884
-2876
-2877
-2876
-2875
-2887
-2863
-2865
-2880
-2885
-2866
-2882
-2883
-2875
-2873
-2876
-2875
-2912
-2916
-2932
-2927
-2914
-2906
-2911
-2912
-2910
-2908
-2903
-2929
-2925
-2907
-2905
-2906
-2909
-2897
-2895
-2903
-2918
-2945
-2946
-2937
-2919
-2923
-2943
-2947
-2950
-2951
-2963
-2978
-2972
-2954
-2955
-2957
-2969
-2972
-2984
-2987
-2969
-2970
-2974
-2981
-2949
-2946
-2952
-2966
-2968
-2969
-2970
-2956
-2947
-2941
-2949
-2939
-2940
-2953
-2959
-2947
-2957
-2963
-2968
-2964
-2939
-2912
-2904
-2907
-2928
-2948
-2961
-2969
-2963
-2980
-2985
-2986
-2987
-3015
-3017
-3027
-3028
-3031
-3040
-3043
-3044
-3043
-3054
-3053
-3055
-3053
-3047
-3051
-3025
-3030
-3040
-3044
-3046
-3049
-3054
-3057
-3059
-3056
-3060
-3068
-3085
-3104
-3108
-3114
-3115
-3118
-3121
-3118
-3132
-3134
-3129
-3126
-3123
-3111
-3112
-3080
-3097
-3086
-3088
-3089
-3093
-3092
-3096
-3126
-3127
-3128
-3133
-3134
-3137
-3138
-3135
-3141
-3142
-3143
-3162
-3152
-3149
-3166
-3172
-3170
-3171
-3185
-3187
-3193
-3192
-3196
-3186
-3203
-3213
-3216
-3238
-3237
-3246
-3247
-3252
-3250
-3249
-3241
-3246
-3253
-3251
-3258
-3271
-3274
-3268
-3274
-3273
-3269
-3272
-3271
-3266
-3277
-3270
-3274
-3285
-3270
-3263
-3255
-3256
-3247
-3248
-3252
-3259
-3252
-3253
-3259
-3263
-3259
-3240
-3254
-3257
-3241
-3250
-3251
-3254
-3271
-3273
-3281
-3295
-3296
-3293
-3299
-3292
-3301
-3304
-3306
-3303
-3301
-3303
-3304
-3303
-3275
-3273
-3276
-3302
-3307
-3316
-3317
-3288
-3296
-3298
-3313
-3312
-3313
-3306
-3292
-3295
-3315
-3316
-3308
-3311
-3310
-3294
-3327
-3331
-3330
-3333
-3352
-3360
-3362
-3366
-3357
-3361
-3360
-3351
-3345
-3342
-3339
-3338
-3364
-3365
-3368
-3375
-3385
-3389
-3390
-3389
-3407
-3408
-3402
-3433
-3437
-3436
-3435
-3439
-3454
-3425
-3426
-3422
-3426
-3423
-3419
-3420
-3416
-3417
-3426
-3427
-3403
-3406
-3395
-3396
-3397
-3398
-3399
-3407
-3409
-3410
-3397
-3391
-3408
-3419
-3425
-3428
-3420
-3423
-3424
-3426
-3437
-3440
-3434
-3436
-3440
-3443
-3444
-3450
-3454
-3455
-3460
-3484
-3482
-3487
-3489
-3492
-3493
-3498
-3493
-3478
-3479
-3478
-3505
-3506
-3508
-3505
-3500
-3499
-3498
-3499
-3495
-3494
-3492
-3489
-3490
-3492
-3490
-3492
-3487
-3488
-3491
-3484
-3486
-3487
-3483
-3461
-3459
-3463
-3476
-3466
-3464
-3465
-3474
-3487
-3485
-3477
-3464
-3463
-3469
-3465
-3462
-3448
-3452
-3461
-3463
-3466
-3470
-3475
-3488
-3477
-3473
-3472
-3475
-3469
-3458
-3455
-3440
-3430
-3439
-3440
-3437
-3442
-3443
-3446
-3447
-3442
-3453
-3462
-3463
-3462
-3463
-3461
-3455
-3454
-3450
-3449
-3450
-3447
-3451
-3454
-3459
-3460
-3461
-3463
-3466
-3467
-3468
-3469
-3474
-3481
-3480
-3481
-3482
-3474
-3472
-3484
-3502
-3522
-3507
-3509
-3504
-3497
-3487
-3476
-3473
-3495
-3494
-3495
-3493
-3500
-3503
-3516
-3518
-3517
-3524
-3528
-3531
-3530
-3526
-3525
-3527
-3521
-3520
-3526
-3527
-3521
-3527
-3521
-3524
-3525
-3519
-3520
-3540
-3566
-3577
-3575
-3576
-3561
-3562
-3563
-3571
-3572
-3577
-3575
-3607
-3606
-3611
-3612
-3613
-3614
-3615
-3614
-3605
-3619
-3618
-3624
-3634
-3639
-3638
-3660
-3661
-3653
-3650
-3651
-3652
-3650
-3648
-3649
-3653
-3655
-3650
-3651
-3650
-3685
-3656
-3670
-3687
-3696
-3695
-3682
-3685
-3688
-3686
-3672
-3664
-3663
-3659
-3664
-3676
-3689
-3694
-3697
-3713
-3705
-3706
-3725
-3724
-3723
-3728
diff --git a/2021/inputs/day_10.txt b/2021/inputs/day_10.txt
deleted file mode 100644
index 661c46a..0000000
--- a/2021/inputs/day_10.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-{[<([<[[(<[({<<><>><()[]>}<(()())(())>)<(([]())){<()()><{}<>)}>][(((()<>)[{}{}]){<[]<>>({}{})})]>)[(({([{}[]]
-{{[[(<[[[<[<<{()()}(<>{})>[<<><>>[[]]]>[{{[]<>}[[]]}<<[]{}>[<>[]]>]]([[[{}<>]]<<()[]>{()<>}>]([<<
-([<{[[{{((([(<[]<>>{[]<>})<([]){<>{}}>][([<>[]][[]{}])])[[{{()[]}<()[]>}<{(){}}>]]]<{(<[{}<
-(({(<{(([<[({([]())(<>())}{([]{})[{}{}]})]{(({{}()}{<>()}](<[]<>>(()[])))({[[]{}]<[]<>>})}>[[[{<<>[]>(()
-[([<([{({{[{[([]{})[{}[]]][[{}{})]}<([<>{}]<<>()>)>]}([<{[()<>]{()<>}}[[{}{}]<(){}>]><{{{}[]}[()<>]}[{{
-<(([<{{<(<[(<{()()}>(({}()){()[]}))<[<[]()>[[]()]]<{[]()}<<>{}>>>](<[([]())]>(([()()][()<>])({()<>}<[]<>>))
-[{({<(<[{({{{[()[]](<>[])}{([]{})<<>{}>}}}{{<<{}[]>(<>)><(<><>)([]())>}<{({}<>)(<><>)}{[{}{}
-([(<{<[<{[({[<[]{}><<><>>]<({}[])({}<>)>}([{{}<>}<[]()>]<<<><>>>)){({<<><>>[[]{}]}(<()<>>{()}))<{<[
-({{([(<{{{{{{([]{}){<>{}}}}{<<()>{{}{}}>[({}())(()<>)]}}[[[[{}{}](<><>)]{<()[]><[][]>}](([[]](()()))<[[]
-(<<[<{{{({{<{{(){}}{<>()}}<({}{}){[][]}>>[{<[]{}>{<>()}}<{[]<>}[()<>]>]}}({([({}[])(<>{})][{<>}])[{[()<>]<{}
-{[(<<((<[[<{<{<>()}[{}[]]>}{{((){})[()<>]}<{(){})[{}{}]>}>]({((<<>()>){[<>()]{{}()}}){{[()()][<><>]}
-{(((([[(<[({({{}()}[<>[]])<(<><>)([]())>}{<[[]<>]><<()<>><()<>>>})<[[<[]{}><<>{}>]]>]<<{{[
-[{(<[[(<(<[{<({}[])<{}{}>>(<[]<>>)}]<{(<[]()>[()()])}>>{({<{{}()}[<>()]>})<[[(<>())(<>{})]{{{}[]}}][({{}[]}
-{[[<([{[(<<[<<()()>[[]]>[{()()}]](<[()]<()[]>><<{}()>{()()}>)>><[[([{}<>]{{}()})<{{}[]}<()[]>>]]})[([{{{<>()}
-((({[(<<{(((<<{}()>><{<><>}>)))[[{<({}[])[{}[]]>}(<[<><>][()()]><[[][]]<{}[]>>)]]}((({<(<>())>[({}{
-{<{{[(<<{(<{[({}<>)<{}[]>]([(){}](<>[]))}<(({}()){[][]}}[<()[]><{}()>]>>)}<<{(<[{}()]{<>{}}>[[[]()](()
-{(<<({{([<[<[<{}<>>{[][]}]<[<><>][()[]]>>{(({}{})){<()><()()>}}]>(<({{()()}({}<>)}<([]<>){[]{}}>){([[]<>
-<(<({{{([({{<<{}<>><()[]>>[{()<>}[<>{}]]}})({([{()[]}{(){}}]<(()<>)<{}<>>>)}<{{<{}<>>[[][]]}}<[{<>}[<>
-{({{(<<([({{[(()<>)[[]<>]][(<>{})({}())]}})]{(<[<(<>()){<><>}><<{}()>[[]]>][{{<>()}{[]()}}{[()<>]{<>()}}]>)
-([<({{{([[<<[[()[]][<><>]]<<<>[]><()()>>>(<{()<>}<()[]>><{<>()}<[]{}>>)>({(<()[]]<()()>)<[<>()][{}]>
-{[{<((<[<<({<{[]{}}[()()>>({[][]}[[]()])})(([{()}{{}()}]<<{}()>{{}{}}>)<([<>()])(<{}<>><{}[]>)>)>{[{
-{{([([{(<[[{[{()<>}({}())][[[]<>]<{}{}>]}]<<[({}[])(()<>)]({(){}}[()()])>{{(())<(){}>}}>]{[<{[[]()]{<>[]}}
-<(<({<{<<<([<([]<>)([]<>)>]<{{{}{}}<<>()>}>)<<{[[]()](<>{})}(([]())<[]()>)><[{<>{}}[(){}]]>>>>>(<{<[[[{
-(([({<{(<{[<({<><>}){{[][]}}>{<([]()){{}{}}>[([][])<{}{}>]}]}[((<{()<>}>)[{{()<>}{[][]}}])]
-(<<<(({{{([[<{(){}}>{(()())(()[])}]{({{}[]}<[][]>]<{{}<>}{()}>}])<(({[[][]]{{}{}}}(([][])<(){}>)
-{<{{[[({<<{{({{}()}({}{})><[()<>][<>{}]>}([<()[]>({}())][{()<>}[()]])}{<[{(){}}<[]{}>][[[]<>][[][]]]>([[<>]
-{{{[(<([[[[{[[(){}}<{}>]<{<>[]}{{}{}}>}]<[[(<>())((){})]((<>()))]{(<[]{}>([][])){<[]<>>(()[])}}>]
-(<{[([[<(<[<{[<>{}]}(<[]<>>{{}<>})>[{(())}]]>){<{(<(<>())<{}()>>]}({<<[]<>>[[]<>]>((()<>)[<><>])}
-[<{[[(({([((({[]{}}[()()])))]>[((<<[<><>][[]()]>{[()<>][()()]}>({{<>[]}({}<>)})))]})){((<[<[<[<>()]>
-<({[{{{<{[<[({[]{}}<[]>)(({}[])({}<>))]><{((()()))[[()<>]{<>[]}]}(<((){})<{}{}>><({}[])>)]][([<{
-<(<<<<<[(<<[{{[][]}{{}{}}}{{[][]}<()>}](<([]{})[()[]]>[[{}{}]{<>()}])>([{[[]()]<<>[]>}[<<>{}>{<>
-<(<[[<[[[<<(<(()[])<{}()>><(<>{})>)[([{}{}]([]{}))]><<<[<>[]]{<>[]}>{(()<>)({}[])}>>><[[[{<
-([[{[({<({(([<(){}><[]<>>]<{()<>}({})>))([([{}<>][{}[]]){[<>[]]({}<>)}][[({}[]){[]()}]])})>[({{(<(()[]){<>
-<[<{<[{(<<[[{{(){}}({}<>)}<(()[])>]<<<()()>(()<>)>({{}})>]({[(<>{})<{}()>]{<{}<>><<><>>}}<<{()<>}
-{[{({[[(({{{{<()()>{[]{}}}{[<>[]]<()<>>}}(<<<>()><{}<>>>({()<>}[()<>])}}{<{[()[]]{(){}}}>[<<[]{}>>[((){})<(
-{{(<[<(<(<{{(<[]()><()<>>)}{((<><>))[<<>{}>{()[]}]}}>{{<({{}{}}[()<>])[<(){}>(<>[])]><<(<>{}}[{}
-[{{{[[[[{(<{<[<>[]](()[])]{{<>{}}}}{[(()()){[][]}]{([][])}}><<{<<>()>([])}[[[]{}]<{}{}>]>(([{}<>]<[]()>)
-{[[(<([[[[((({<>{}}(<>())){<{}[]>})[([<>[]](<>[])}[({}[])([]())]])([<{{}()}(<>())><[[][]][<>()]>][([()()]<<>[
-<[{[{({(<(((<<<>{}><[]()>][{{}()}{[][]}])[(((){})([][]))[[()<>][[]{}]]])[[(((){})[()])[[(){}]<{}
-[{[[<[<{{(({([(){}]<()()>](([]<>)[()[]])}<<{[][]}([][])>>)<[[([]())<{}[]>]]>){[[[{{}()}[<>[]]]{<[]{}>
-[[<([([[<<<{{[{}[]][<><>]}}{{{{}{}}}}>>>[([[(<<>[]>({}<>))<([]())<<><>>>]{{<<>[]>{<>()}}}][<{{[
-({[<<<((<<<<<<[]{}>[()()]>{[()[]]{()<>}}>[((<>()){()()}){<[][]]<{}{}>}]>{{[[{}{}]<{}[]>]([[]<>])}((
-({<<[[{{<{[[{<()><<>>}<<()[]>([][])>]]([[({}<>)[()[]]](([]{})<<>[]])]<[([]<>){[]}]>)}(((<<{}[
-<(<(<(([([[[{{[]()}{<>()}}{<{}[]>[{}()]}]{{[{}{}]<()[]>}({<>()}<(){}>)}][[{<{}()><[][]>}](<[
-[[<{<[<[<({<<{[]}<()<>>>({<><>}{[]<>})><([<>()]([][]))>}[({[{}{}]<{}[]>})({[<><>]})])>]([[{<({
-<([{[[<<[({<<[{}()]({}[])>{<[][]>{()()}}>{<(<>[])([]{})>([{}[]}[<>])}}{{[<<>[]>{[]<>}][([][]){{}{}}]
-[([({((<[{{{[<{}><<>()>]<<()[]>>}<[{{}{}}([][])]{{()<>}<(){}>}>}<{<[[][]]>({{}<>}{()[]})}>
-[[[{([({{{<{[[[][]]{()()}]}{{<<>[]>[{}[]]}[[[]()]<<>>]}>({{(<>[])[{}[]]}({<>()}[{}[]])}{{(()<
-{<{{{<[{[<{(<{[]{}}{[][]}>{{[]<>}}}}[{((()[])<()()>)[<<>[]><{}()>]}<[{<>{}}[()<>]]<[<>[]][<>{}]>>]>[<[
-<[<{[[<{<[([{({}[])(()<>)}[[<>()]{()[]}]])][[<{[<>[]][<>[]]}<{<>{}}{<>{}}>>{<<()()><()<>>>{([]()
-<[{{({<[<([[[([]{})({}())]]<[{{}}[()<>]]<{<>{}}{()}>>])<[<[<<>()>]{<{}{}>[[]<>]}><({[]()}<<><>>)[(()<>)(<>())
-{<[[[<(<[<{<({<>{}}[<><>])([{}<>]<[][]>)><<[(){}](<>[])>[({}[])<<>[]}]>}{{{(<>())(<>{})}}<((<>())
-<{(<<[{[{<{<<((){})[[]{}]><([]<>)<{}[]>>>{[[[][]]<()()>]}}{({{<>()}<<>()>}{<{}<>><()[]>})}>}<[<([<()()>{()()
-{{([<{[[((<<{<<>()><<>[]>}<(()<>)>>><<[<[][]><{}<>>]>{<([]()){[]<>}>}>))]<{(((<[[]<>]([]<>)>[{{}()}<<
-([{{({{<[[(((<[][]>{<>{}}){<()[]>{[]()}})(<({}<>)([]<>)>(([])[()<>])))(([([][]){()<>}]{{[]<>}{[](
-[{{<{({[<{<{((<>())({}[]))<{<>()}({}[])>}(<[{}()]<{}<>>>({[][]}{()<>}))}{([({}[]){{}[]}]<([][])>)}}{<{({{}(
-[{(([[[([<<(<([]()){<>}>(({}<>)(()())))[((<>{})){[()<>]<<>{}>}]>>][<{{[<()<>>{{}[]}]<<{}[]><{}[]>]}[
-{<<<(<[<[{<[<({}[])>(([])<[]<>>)]<<<{}{}>({}())>{[<>{}}<[][]>}>>[{[<<>()><()()>]{[<>[]]<[]>}}[<<<>[]>{[]()
-([(((<<(<[[<[<{}<>>(<><>)]>([<{}[]>{<>{}}]({<>{}}[()()]))]](<({<<>[]>({}[])}<[[]<>]{<>[]}>)(<{
-([{({{{[(((<<{[]()}<{}<>>>((<><>){[]()>)>({<{}()><(){}>}<[<>()]>))){((([[][]]{<>{}})[([]<>){<>[]}]
-<(({{{[(([<[{<(){}>([]<>)}(<[]><()<>>)]><<([()[]]([]()))>{[(()<>}<{}>]}>]){{[{(({}{})<(){}>){[[]]{[]
-[<{(<({<{((<<<[]<>>([]())>(((){})[[]()])>{[[<>]<{}<>>]}){[<[<>[]]({}())]{{()[]}<()>}]})<([[([]())<<
-[[<<[<{{[{({<[()<>]{<>[]}>{([][]){<><>}}}<[[{}()]][<<><>>{{}[]}]>)}{<{{({}<>)(()())}[{{}{}}[{}()]]
-({<({[{[{(([<<()()>{<>[]}>[([]<>)<()<>>]]{<{<>()}[{}{}]>((<>{}){<>{}})})([<([][])[[]{}]>(<[]()>{<>
-{[[((<{[[<<({<[]<>>[()<>]}{[()]{<>}})>[<{<<>()><()[]>}{{()[]}<()<>>}>(([{}[]]))]>[[{({<><>})}
-{{(<[{{[{<[({(()){{}<>}}(<{}[]>[[]()]))]>}({(<((()[])((){}))<{<><>}[<>()]>>)}(<<[(())<{}<>>]{[[]]<{}
-<{{([<<<<[([<[<><>][[]]><<(){}>[()()]>]<{(<><>)<<><>>}([{}{}])>)][[([<()()><<>()>])(({[]<>}([]{}]){<[]><[]
-{(<<[[<{{((([<[]<>>[{}<>]][([][]){{}{}}>)(<<<><>><[]{}>>{{(){}}[<>{}]}))({<(())[<>()]><{<>{}}(<>[])>}(({
-[[[([({([<<[[[<>{}]{<>{}}]<[<><>]{{}<>}>]>[({[()()]<<>()>}{[()()][{}()]}){({{}()}[(){}))}]>[(<{[()<>
-[{{(<<<[{(((<<()<>>([])>({<>{}}<()[]>)))[{(([]){()<>})(({}[])<{}})}<{([]{})({}())}<(<>[])<<>[]>>>
-{<<<<[{[{({{[<<>()><{}[]>]<[[]{}][{}{}]>}(<({}{})<()<>>>{{()<>}})}{[[{{}{}}[{}{}]]<[<><>](<>{})>]})(([{[<>()
-<(<[<{(<{[{<{[[]{}]{{}[]}}>[{[[]<>][{}{}]}(([]())(<>))]}<{{[{}{}]([]{})}[({}())]}{<<<>()>>([(
-<{{[{[<{[[<[{<[]{}><<>{}>}]{({()<>}(<><>)){[<>[]]}}>{([[<>{}]({}{})](({}{})<[]{}>))<{[{}<>
-{{<<{<<<[{[[([[]()][()()])(({}()))][[({}[])<()()>]]]{<[<{}[]>{{}{}}]>}}[[[[([]())]([<>[]][[]{}]>]]
-[[<<[({{{(<[(<()<>>[<>])]([(()<>){<>())]([<>[]][[]<>]))>{{[[[]()]([]())]{<[]{}>{()<>}}}[<([]<>)<()>>({<>{}}[<
-([[([<{<[<((<(<>[])(<>[])>(<<><>><{}[]>)){<<{}<>>>({{}{}}<()[]>)}>[{{(<><>)(()<>)}[<<>[]>]}]>]<{{
-{{{((<<{[[{<([[]{}][{}<>])>}<[((()())<()<>>)[[[]{}]{[][]}]]<<<[]{}>{{}[]}>(<<>()><(){}>)>>](<
-{(([[{{<[[<{(({}<>)[<>[]])}<{({}{}){{}}}[[()[]](()())]>>]([<[{()[]})({<>}[<>{}])>{[{{}{}}{(){}}]{<{}{}>}}])
-{([(<{<<({[<[{()()}<[]<>>]{<[]{}>}><[[<>][()<>]]>]{<{{[]{}}<(){}>}[({})]>{{<{}{}><()<>>}([{}
-{{[[({{({[(([{{}()}[{}]]({{}<>}([][]))){({{}<>}[[]{}])<<()<>>>})]{(<[<{}{}>{<>()}](({}())((){
-{<({{<<{{([{{{[]<>}{<>{}}}((<><>)<()<>>)}[<[{}<>][()[]]><[<>()][<><>]>]]{{[[()<>]<<>[]>]<(<><>)
-<(<[(<<[[<<<[({}())<[][]>](({}<>)[{}<>])>>[<{{{}}<()<>>}<(()<>){{}{}}>>]>({{<[<><>](<><>)>[(<>{}
-[((<{[{{(<{[({{}[]}((){}))([[][]]{<>[]})]<{<{}[]>[{}<>]}[<{}()><{}<>>]>]>)}}]}{{{(<[(<{{()()}}>{[<{}<>><<>[]>
-{([<<{(<([[({{{}<>}<(){}>}<<()[]>{<>{}}>)((<[][]>[<><>])<<[][]>{<>()}>)]((<{<>[]}{[][]}>[[<>()]{<>[]}]]{{[
-[<{(<{([{{(([<<>()>]{<(){}><()<>>}){(([]{}>)<(<><>)>})}({({[<>]{<>[]}}[[{}<>]])}[{<[()[]]<{}<>
-{[(<(<{(<<[{[<[]()>(<>[])][{{}}[()[]]]}{{[[]{}]{()()}}<<<>>[[]()]>}]>{{<[<{}()>([]())]({(){}}(()<>))>([(<>(
-{{([[([[[<(({<{}<>>[<>[]]}{([]<>)<<>{}>})<{{[]<>}{{}<>}}([()()]<<>[]>>>){{[[()<>]]<((){})<[]{}>>}{<<[]<>><()
-<({([[[[[({[[{{}<>}({}<>)]({<>[]}[<>{}])][([<>[]](<>()))<([]())[{}{}]>]}(((({}[])[()[]])[{{}{}}(<>)])(<<<>
-[({{<{[([(((<{[]{}}{<>()}><[{}<>>{<>[]}>)){([<{}{}><()[]>]<([]{})[{}{}]>){{[[]]<[]{}>}((()[])[(
-(({<[<<{{[[<{(<>{})([]())}([[]{}]{{}()})><[<{}()><{}{}>]<<<>()>[[]()]>>]<[<<()[]><<>()>>[{{}<>}[<>]]]>]
-((<[[<{{{[({<(()[])<()<>>>})]{<(([()()][[]]))({[[]()]{[]<>}}{[<>()]})><<(({}[])[{}{}])>>}}}[[[{{{{[]{}}({}[
-([<[<{{{{[<<{{<>[]}([]<>)}><{{()[]}[<><>]}{<[]>[()<>]}>><{[{[][]}<()[]>]({[][]}(()<>))}<{(<>())(
-{((<(([[<[(<[{()[]}([]())>>[<[<>()]<[]{}>>(<()<>><[]>)])<(<{()}>(([]<>){<>{}}))<[[[]<>]{[]()}
-[(<[([([{{{<([[]<>]<<>>)[{<>[]}{{}<>}]}({(())[{}()]}[<{}<>>{<>()}])}([<[(){}]([][])><(()())
diff --git a/2021/inputs/day_11.txt b/2021/inputs/day_11.txt
deleted file mode 100644
index 674e736..0000000
--- a/2021/inputs/day_11.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-8826876714
-3127787238
-8182852861
-4655371483
-3864551365
-1878253581
-8317422437
-1517254266
-2621124761
-3473331514
diff --git a/2021/inputs/day_12.txt b/2021/inputs/day_12.txt
deleted file mode 100644
index c3ec81f..0000000
--- a/2021/inputs/day_12.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-LP-cb
-PK-yk
-bf-end
-PK-my
-end-cb
-BN-yk
-cd-yk
-cb-lj
-yk-bf
-bf-lj
-BN-bf
-PK-cb
-end-BN
-my-start
-LP-yk
-PK-bf
-my-BN
-start-PK
-yk-EP
-lj-BN
-lj-start
-my-lj
-bf-LP
diff --git a/2021/inputs/day_13.txt b/2021/inputs/day_13.txt
deleted file mode 100644
index b551a62..0000000
--- a/2021/inputs/day_13.txt
+++ /dev/null
@@ -1,806 +0,0 @@
-527,872
-94,740
-502,586
-33,514
-349,784
-1292,133
-733,623
-305,336
-108,628
-1086,396
-845,128
-674,761
-768,317
-783,154
-731,697
-803,844
-865,96
-1263,567
-1141,141
-1218,644
-1115,429
-951,373
-748,326
-1088,422
-259,673
-885,885
-150,732
-181,19
-182,581
-1130,838
-647,386
-53,140
-27,726
-1198,105
-219,476
-545,779
-234,528
-1042,145
-422,852
-683,726
-636,40
-140,590
-415,824
-415,637
-238,478
-0,347
-1277,380
-1076,366
-984,112
-808,787
-321,480
-576,707
-999,810
-1283,392
-604,606
-610,724
-107,487
-657,497
-258,378
-392,224
-1044,498
-53,754
-706,606
-1191,753
-661,256
-895,637
-1015,373
-455,808
-825,753
-929,835
-581,205
-1236,30
-343,74
-207,813
-547,866
-1005,558
-113,420
-445,4
-562,326
-924,593
-209,621
-1078,42
-1265,798
-923,408
-1082,808
-910,889
-850,408
-1277,268
-984,809
-1191,813
-295,541
-108,826
-705,698
-97,666
-878,33
-1245,240
-1257,140
-1001,416
-252,478
-139,51
-75,732
-925,750
-388,502
-721,703
-509,254
-808,532
-478,386
-349,299
-328,85
-463,210
-254,126
-835,281
-895,569
-850,155
-513,782
-195,465
-1066,155
-119,529
-355,826
-1078,68
-176,350
-459,465
-1077,364
-47,567
-674,40
-169,141
-119,305
-541,485
-1009,642
-1212,894
-537,544
-674,754
-517,616
-25,38
-5,32
-191,572
-700,276
-1004,891
-492,547
-701,516
-65,45
-319,60
-1071,325
-621,575
-1131,834
-185,560
-693,571
-441,140
-157,533
-527,32
-915,221
-1212,780
-1131,501
-463,684
-1169,112
-1299,269
-832,350
-555,733
-1115,476
-432,422
-266,310
-835,393
-105,277
-820,499
-967,820
-63,894
-561,754
-301,642
-668,233
-182,600
-801,640
-502,532
-1134,554
-546,68
-11,625
-373,98
-1082,114
-654,771
-763,28
-92,102
-713,74
-869,409
-855,360
-1277,864
-1083,875
-604,288
-924,301
-11,269
-841,511
-1037,140
-868,670
-759,486
-604,222
-917,464
-1034,512
-806,126
-1004,865
-677,670
-763,866
-1305,862
-681,728
-1251,408
-955,390
-224,119
-465,598
-87,773
-442,670
-492,558
-1019,406
-929,59
-513,560
-1146,323
-947,646
-305,224
-656,632
-952,520
-639,82
-1200,99
-984,206
-951,93
-1283,502
-150,574
-825,164
-432,413
-965,579
-436,740
-445,778
-840,254
-1310,547
-93,759
-299,726
-761,725
-793,558
-1202,826
-1173,822
-951,476
-415,40
-423,226
-405,175
-813,529
-499,451
-254,630
-845,369
-73,653
-234,814
-855,808
-465,318
-12,162
-403,284
-730,478
-907,284
-224,396
-301,520
-186,590
-551,486
-832,116
-773,544
-956,362
-273,140
-234,379
-828,182
-306,865
-1193,574
-176,554
-1175,810
-711,617
-1015,541
-928,644
-426,808
-586,826
-535,753
-1173,72
-301,597
-311,532
-233,493
-838,28
-174,227
-219,110
-597,841
-884,780
-271,102
-65,240
-354,362
-932,522
-652,833
-720,894
-895,824
-371,779
-957,374
-293,799
-169,276
-791,532
-580,416
-711,726
-408,462
-239,396
-1077,135
-754,360
-609,322
-880,119
-497,500
-289,323
-875,784
-239,817
-455,154
-137,72
-1101,768
-212,126
-445,452
-1029,546
-108,68
-610,170
-579,162
-295,521
-1124,369
-797,334
-872,347
-137,822
-1202,266
-649,376
-984,645
-1280,150
-102,870
-485,164
-435,476
-924,28
-1289,819
-760,525
-483,3
-1029,348
-1255,168
-276,382
-808,219
-108,714
-1295,596
-1237,395
-556,222
-996,232
-440,341
-30,150
-349,336
-422,826
-113,754
-801,621
-811,239
-15,364
-748,568
-924,749
-661,638
-45,798
-281,546
-228,114
-359,476
-929,588
-1119,210
-470,254
-415,257
-70,698
-649,862
-999,74
-711,700
-381,140
-1305,704
-313,467
-70,366
-475,393
-1011,826
-945,634
-621,366
-1191,305
-288,728
-346,700
-513,112
-863,81
-883,161
-229,493
-507,396
-383,252
-579,732
-309,864
-324,425
-1163,501
-268,145
-1094,547
-579,396
-438,99
-157,365
-1260,606
-373,49
-266,502
-492,150
-1310,632
-381,59
-499,655
-838,313
-447,813
-420,515
-890,515
-961,670
-855,154
-199,422
-927,102
-1044,502
-1128,742
-408,581
-1223,773
-254,217
-764,628
-325,161
-902,581
-1017,416
-887,226
-1265,96
-1071,396
-535,141
-1265,123
-45,330
-562,120
-706,64
-119,813
-1205,277
-209,871
-753,661
-832,126
-53,280
-93,588
-731,396
-515,619
-473,173
-541,409
-326,533
-1163,53
-1101,452
-1285,297
-754,672
-455,740
-472,600
-1289,147
-960,640
-855,534
-311,74
-1009,252
-504,126
-53,166
-1257,754
-836,56
-758,422
-1173,476
-585,194
-465,185
-830,73
-1007,611
-633,670
-68,516
-1310,85
-955,68
-689,319
-1283,726
-513,334
-426,86
-669,427
-1049,586
-1280,744
-1125,831
-1292,854
-663,386
-1266,618
-748,341
-1148,547
-627,420
-1305,302
-268,637
-746,96
-1252,705
-232,42
-1155,239
-281,378
-351,611
-944,789
-731,249
-1004,193
-666,422
-147,277
-639,805
-991,834
-883,875
-713,841
-33,127
-924,252
-835,255
-1173,542
-355,68
-455,360
-937,116
-475,501
-549,169
-835,396
-18,488
-400,406
-523,877
-556,332
-222,33
-627,392
-301,710
-748,553
-818,150
-545,115
-584,196
-55,168
-870,341
-305,558
-634,451
-601,614
-45,123
-254,406
-393,308
-1101,871
-131,93
-970,662
-801,478
-415,817
-1119,322
-550,77
-1258,486
-1251,486
-224,567
-460,155
-1170,590
-238,416
-358,598
-835,501
-786,774
-353,168
-835,57
-855,740
-507,844
-811,655
-179,639
-1064,761
-633,784
-1029,378
-119,753
-326,85
-599,866
-1021,858
-1082,780
-1076,814
-1031,416
-385,750
-345,579
-233,530
-1078,490
-791,154
-145,142
-1056,453
-922,215
-283,331
-393,464
-1066,739
-117,621
-797,560
-609,798
-705,196
-982,137
-604,560
-957,168
-627,502
-557,681
-1128,600
-604,334
-793,542
-445,871
-386,642
-621,268
-1280,374
-231,226
-191,322
-445,96
-845,576
-1305,592
-218,42
-729,732
-435,110
-445,116
-181,478
-919,558
-525,402
-465,766
-806,574
-55,277
-731,809
-542,553
-753,681
-850,632
-1237,284
-25,616
-1265,330
-229,885
-759,72
-276,512
-472,581
-1233,623
-1216,740
-420,528
-1071,369
-1265,378
-556,534
-373,826
-917,430
-599,617
-475,709
-1310,123
-957,726
-191,292
-701,322
-295,373
-499,443
-65,849
-472,742
-682,793
-562,568
-605,698
-765,779
-865,173
-711,476
-837,875
-599,476
-597,302
-530,56
-730,416
-269,750
-1198,553
-726,196
-455,472
-524,344
-683,882
-1064,313
-431,502
-1130,607
-991,123
-361,543
-507,820
-628,793
-1173,128
-510,537
-65,654
-629,194
-432,33
-827,891
-1114,605
-182,742
-326,137
-1058,478
-962,417
-947,406
-1125,560
-738,267
-633,672
-584,698
-355,56
-227,19
-845,318
-396,378
-676,451
-72,574
-400,5
-542,341
-1163,165
-1098,126
-639,530
-436,404
-910,630
-353,642
-938,612
-884,114
-832,544
-1298,680
-1011,378
-97,213
-306,701
-12,680
-838,581
-1246,558
-1064,252
-937,49
-1108,504
-865,350
-174,362
-1094,347
-1237,205
-269,144
-325,733
-1235,732
-937,68
-1175,740
-803,820
-604,64
-601,140
-402,478
-1260,222
-468,590
-246,194
-305,523
-519,292
-1138,264
-319,834
-127,470
-415,854
-299,378
-959,283
-1223,413
-1081,885
-671,162
-186,369
-311,362
-1213,666
-1131,863
-1212,114
-649,638
-686,374
-723,445
-345,315
-565,823
-30,520
-348,254
-465,576
-801,721
-75,681
-214,117
-910,453
-1305,32
-103,408
-599,194
-580,478
-276,672
-1138,712
-689,864
-233,759
-18,133
-1059,661
-970,232
-962,254
-381,588
-922,663
-301,252
-1242,154
-519,602
-1009,374
-773,423
-117,273
-597,820
-556,0
-246,313
-1015,521
-502,308
-914,378
-82,627
-845,525
-902,462
-372,612
-918,808
-455,870
-1268,616
-517,542
-609,378
-1115,465
-874,42
-1094,795
-895,376
-1115,866
-1086,119
-656,470
-629,408
-1284,101
-105,617
-1266,276
-654,470
-714,136
-392,808
-918,224
-1015,821
-755,161
-1021,323
-1056,217
-1280,520
-87,481
-731,162
-1163,396
-244,155
-1131,498
-137,542
-937,826
-681,821
-
-fold along x=655
-fold along y=447
-fold along x=327
-fold along y=223
-fold along x=163
-fold along y=111
-fold along x=81
-fold along y=55
-fold along x=40
-fold along y=27
-fold along y=13
-fold along y=6
diff --git a/2021/inputs/day_14.txt b/2021/inputs/day_14.txt
deleted file mode 100644
index e84aae5..0000000
--- a/2021/inputs/day_14.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-SNPVPFCPPKSBNSPSPSOF
-
-CF -> N
-NK -> B
-SF -> B
-HV -> P
-FN -> S
-VV -> F
-FO -> F
-VN -> V
-PV -> P
-FF -> P
-ON -> S
-PB -> S
-PK -> P
-OO -> P
-SP -> F
-VF -> H
-OV -> C
-BN -> P
-OH -> H
-NC -> F
-BH -> N
-CS -> C
-BC -> N
-OF -> N
-SN -> B
-FP -> F
-FV -> K
-HP -> H
-VB -> P
-FH -> F
-HF -> P
-BB -> O
-HH -> S
-PC -> O
-PP -> B
-VS -> B
-HC -> H
-NS -> N
-KF -> S
-BO -> V
-NP -> S
-NF -> K
-BS -> O
-KK -> O
-VC -> V
-KP -> K
-CK -> P
-HN -> F
-KN -> H
-KH -> N
-SB -> S
-NO -> K
-HK -> H
-BF -> V
-SV -> B
-CV -> P
-CO -> P
-FC -> O
-CP -> H
-CC -> N
-CN -> P
-SK -> V
-SS -> V
-VH -> B
-OS -> N
-FB -> H
-NB -> N
-SC -> K
-NV -> H
-HO -> S
-SO -> P
-PH -> C
-VO -> O
-OB -> O
-FK -> S
-PN -> P
-VK -> O
-NH -> N
-OC -> B
-BP -> O
-PF -> F
-KB -> K
-KV -> B
-PO -> N
-NN -> K
-CH -> O
-KC -> P
-OP -> V
-VP -> F
-OK -> P
-FS -> K
-CB -> S
-HB -> N
-KS -> O
-BK -> C
-BV -> O
-SH -> H
-PS -> N
-HS -> K
-KO -> N
diff --git a/2021/inputs/day_15.txt b/2021/inputs/day_15.txt
deleted file mode 100644
index 7cd7dc4..0000000
--- a/2021/inputs/day_15.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-2494188795949368426672935997553436999123973817111494977966298896479213563868828787114774871959993495
-7269295166912819128199218896192745233371189151296812199288995976199874739992471696989914173889976925
-5191212388827998986649912824634749279971948589689238817721846893532697679994545789897911889729995897
-2168589418228699841979496964487152857627622699771987389157912193827151789199146397936892984945186648
-6173939628157711976563997464999974959831921613389971361747448844585131388314689679172394799717331399
-5899695651247379821996866399919649874365217617874746871338598594867719518499554272189235565993897965
-7485394112785944858863361332818786294335182341788296167915326872949943697179245577456182671381554981
-9266892719919136231211827869936952321796769156938997799961743957799879299829979797999289996519698258
-7917921979835316979873649974359699969481697221634859899429669995158723957697928969198838877882679431
-1491236284143364659399923722198867919166499918548183212698729886479216469986191478946997662853172832
-3767398586846967844992213195183588959313371637243199793963993959286917791341794214391371939868871494
-9928742956264979397583828698198991474967144891939974212795669284197972936548635221944579878942359557
-2591296163233973188949425669798998818121787829476539915785989899996476991741928456884321481461491491
-9991453999117657667486988919926741998881973198189217569482699982656854861887538683949945599464996179
-7785121782479268191396996844959721953747843271399498791933669879859637175866291876796575659279993189
-7776716891792899824695392599338137499166496894838139256577699799459229235864327718998999599938889161
-5839791979939975731327544972918993669998884665789489989759759159981911739962619655578959489319651959
-9398937827918996618898187917114312218979818328154357119792473517498229889994917199791479298969989426
-9193149311416478995456723118877968917584864848296657785894974918318495982911493994794738911468372399
-9769827996996299982985113892343422898578915399986948881116926857688725599882867388823188133721994278
-8818187692494197511189732662739876774788519148132878987446213196194758987589658244842573992965369917
-9692985985717419377379789693788389987764679742169692881958792669418357791948997197357944583299997199
-1655589698936188425679138917313955276139596613919192843881592947255229449287767987981926864969859529
-9699242895916761696979961626847898651779897127819171988159298969595969856231117848529246839289723796
-6918899858935889816997979865999596479948574186514639447389189297279388214912422481934482758598686939
-9996124999974921628385339724671481964691768899569149945536398488739568172834846547989816384911492872
-8346834917676292979994979698956139979926678894814989654839981221562573298658346721681719173725669956
-7996658985879211759466921616176161867986927757827999273979469498688699982778999718998879599891187826
-6789987138357992752226589295829589178911828185979998763692162929329395765591169737899686919889788875
-7197637335578924955696669176672558865939999937795981568398933385959211553997726292683778819899973695
-7969119547891678248796699588889994968987939996198215675832711397499256187159534154919899797617918187
-6926911899812131895651119837176697797919392241689685965558165297919473987229989972939921478114978373
-5841994288699114592993125898675872864168987969699196889625973399229985914231352968138691482158881899
-6867891298189866894719212682879398889498489939663172817599835471792399556867597964989686389769859994
-9216183839556753967949862931537817787984781697457685114963135184139788699929447794287121297683798319
-5961184475118971259559817821178849966985528319614894877141814318889588689738389571282791915658998542
-7796517463682296191129934366199787898432878578178838999284446321338627649991196629939797121785891962
-6869179819567982969986839939999929197979374876888941369191219962943812332887931152176916191949337191
-9949555298548218159821548895199792894846453957998718924987391181922787245277994179172391848939291937
-9194554898149494418187494726757793324999959688688219769989897645955852991449724578587938397525559699
-9839395266191998228728197617917693697789375996118295993584569962144786399964589627981549488787733896
-8798892947496976899997799782965947775618684631612298893931561678929111719994767999284582998895629195
-5971923418391999545117998893871871449928897518896798992962997798871699831697768939889162189217948177
-5858919812839818645171731976975688955947178448898559483839791819932171192959869296448582448911965279
-1968371935371579114969391889167369857978852993227571182176195567113584591687978173852172998299297876
-9818595991179878228913865926959618915114684669669687682418328328426959971759423266149164699675299962
-7313169988896798377992637828717558819632818939589195963274459828798159996969414246778645986912959685
-7175987582985899179876194819674578385889199196894972994931968897971126896672969822346958482487693195
-3899899994999974339297695494999694587728925279418719657933319839559165236843874998959197285872898386
-9143179894278789613961188998997899879989984167462521348529727699979885411983992819969799931648899396
-8721719519784582186657994994597695787791988737117281949127388845793462485588977564523597916812662293
-8611192812559976315185196299139868529583964194698936966669193992848592369935883977685998128921958855
-9939897898864487468688938157636793892493993149941579971537776639995925839997995494499799341196996911
-8952975169934893855698711783493617877741259797391888882838674537287761499137286977596911311795914798
-5973819164498977729977283879968689716999899829329989552936969439956928519569699593711189175982816879
-8992169969711179987999697359795943869189334168512958869138486551393962896928198678797618959592667178
-5198893235999189515823758534932887297573118289138717189899951151794645128875863218397267732544682559
-1325921986621997358689228699823234199583753862125884477531428896914475773981149951219987772989777284
-1767578881144877899227864881927651792585225919996798399996398994171539489225941719236558689987289596
-1697693293932998829129311328298516993977484911198964347455679799762539363996979349779755395869958127
-3713898193499495896831949473519979859286519968829254986836974926445967798179318189714751879952896613
-9916216881218784598988194111975928978834317778788697936768819246855919484199948946983872997799989537
-5418692222281246379686836239999941778791771954439968621669899592193586891966947915978832988949879767
-5946329868375678638572651999898943139289184131912762798677877895898695944967941764178789929296788749
-6239775996391914149474397187426592989328499959996744188988177257137398164298656927588639947169611996
-7726974769124948598778698999782543243598997487367127713261541411788169989779736617197163837998429443
-6111148329281896798281927928447986973659988162159399599953814156215976289871288499437886599369129446
-5854951519241889185939295929639732174661849974497795351828153777386926499257888278938847986849719938
-5984221699399349924974897835513966246932291529259259986518919741383138819187699681468921932862191135
-7247744517283916799878894898841511684972958968888598899899528129686787319513181999663332357287917849
-9619575771852888429993998185894999449977654581892868719896632889994183982173959417945797894859792989
-9987887311965149698616929977895196273977999972615874679953263114467325584669891293619617955392613925
-3459233982935649168889415851457199862587819992969777358114793166474749199299992637999874364191376899
-7943688928864588361988811191325483948768896478821434855799291838959158636199538793219669994353374759
-7859289672994646496294159151719934379268389791695698878689997723696963668819627473895291179249595592
-9941314869878731534751835338688822211841761128799388619893279239832929889693971299176198322989988696
-8842227781495829982998213979935669336595995299977597191369528699162399363739696583936699198339998297
-4713836572615268829578998379651451979528877965188284221548263244343828575977462755943999496539416928
-8997969648694117619993817848699798391349937895138998191853188328148899863968896951342872529854299799
-4821998179179181915669967943833899175819993535997526988947429178781551978844594192169998492291957896
-4195189588992241478996816697172978669351926159581981999991898899275537372449313988179685677999419998
-7562897828594989799593999721399698168294159217347891591919627938573198351476731278382919975715726691
-5289289886391592468511382946949159281295428969892859956998441988997291849472619345291529291989934296
-2119968215975689967875154978999999387426829368331479442781739197214991219186498848963987197926389319
-2619398714969892292337865366952999489167916889966465489596798298768869549286862389939419119395283486
-5891141991985484321796885478397617796913878991923119711484499287684339488268919291995478738911979334
-8114983942818278171367398195885616828459999126819995888739198519259919986496918279919325994993862348
-9799778199299926255679191711375949221688768118898797284688592829217988489896761335847548468981782899
-3297828241798981838196692979721897463899191684523229918888914388941777196891967689798993724124799799
-6587642855381998719928875658181669971111961763447368283978979892939694984843414921587564196767985264
-8868499779173993666956935631879522347992698928849354893756692376863389161268189398695789183996886289
-4384313399189397465391981199547955659912476999789237991829967965898994592593315769962549121389114869
-3165989928816884816238178158923873189899685775749877366272667891986999279928649289915951524688386419
-2614193692887593891959411118711929833726848873925563723329796828281367982397811129881655482798978846
-8547195678964249376891881397319282899129476666886297539869668898819828797769638991899886419148826859
-8178778491299194939588873989868848883795996377199995921984895879486959879816117891527867619711458789
-2358691498849138995117937966497995947487954198989213589121699888997868911988859219584998799742529591
-4564249477614979424868747948799188548777892792598985751974975274769994898988419988258297291881465592
-9297979945165922849989776118448916916471698458557921916479112985169284661994778819637195998913985273
-4789996397188799369699683969576838983199839289799579353875318987692211979981993139884198857448759796
diff --git a/2021/inputs/day_16.txt b/2021/inputs/day_16.txt
deleted file mode 100644
index 57468d0..0000000
--- a/2021/inputs/day_16.txt
+++ /dev/null
@@ -1 +0,0 @@
-A20D5CECBD6C061006E7801224AF251AEA06D2319904921880113A931A1402A9D83D43C9FFCC1E56FF29890E00C42984337BF22C502008C26982801009426937320124E602BC01192F4A74FD7B70692F4A74FD7B700403170400F7002DC00E7003C400B0023700082C601DF8C00D30038005AA0013F40044E7002D400D10030C008000574000AB958B4B8011074C0249769913893469A72200B42673F26A005567FCC13FE673004F003341006615421830200F4608E7142629294F92861A840118F1184C0129637C007C24B19AA2C96335400013B0C0198F716213180370AE39C7620043E0D4788B440232CB34D80260008645C86D16C401B85D0BA2D18025A00ACE7F275324137FD73428200ECDFBEFF2BDCDA70D5FE5339D95B3B6C98C1DA006772F9DC9025B057331BF7D8B65108018092599C669B4B201356763475D00480010E89709E090002130CA28C62300265C188034BA007CA58EA6FB4CDA12799FD8098021400F94A6F95E3ECC73A77359A4EFCB09CEF799A35280433D1BCCA666D5EFD6A5A389542A7DCCC010958D85EC0119EED04A73F69703669466A048C01E14FFEFD229ADD052466ED37BD8B4E1D10074B3FF8CF2BBE0094D56D7E38CADA0FA80123C8F75F9C764D29DA814E4693C4854C0118AD3C0A60144E364D944D02C99F4F82100607600AC8F6365C91EC6CBB3A072C404011CE8025221D2A0337158200C97001F6978A1CE4FFBE7C4A5050402E9ECEE709D3FE7296A894F4C6A75467EB8959F4C013815C00FACEF38A7297F42AD2600B7006A0200EC538D51500010B88919624CE694C0027B91951125AFF7B9B1682040253D006E8000844138F105C0010D84D1D2304B213007213900D95B73FE914CC9FCBFA9EEA81802FA0094A34CA3649F019800B48890C2382002E727DF7293C1B900A160008642B87312C0010F8DB08610080331720FC580
diff --git a/2021/inputs/day_17.txt b/2021/inputs/day_17.txt
deleted file mode 100644
index 039df20..0000000
--- a/2021/inputs/day_17.txt
+++ /dev/null
@@ -1 +0,0 @@
-target area: x=206..250, y=-105..-57
diff --git a/2021/inputs/day_18.txt b/2021/inputs/day_18.txt
deleted file mode 100644
index cc88c31..0000000
--- a/2021/inputs/day_18.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-[[[0,6],[[8,9],[3,7]]],[[[3,4],[7,0]],[[6,9],[4,8]]]]
-[[2,2],[[[7,7],5],[[0,7],2]]]
-[6,[9,[[7,9],7]]]
-[[[[5,1],[9,3]],8],[4,[2,[6,6]]]]
-[[[4,3],[0,4]],[[[4,5],[9,3]],3]]
-[[[[2,7],7],[[6,5],6]],[[[2,3],[7,9]],[0,3]]]
-[[[3,[6,2]],[7,[9,4]]],3]
-[[[[9,3],4],[3,9]],8]
-[[[7,8],[[2,6],1]],[[[1,7],5],[[5,6],[6,1]]]]
-[[[[0,7],9],[[6,6],[8,4]]],[[[9,2],[4,8]],[[8,5],[0,6]]]]
-[[6,[[5,6],[3,8]]],[[8,9],[4,3]]]
-[[[[0,6],1],[[2,4],[1,4]]],[[7,5],[8,3]]]
-[[[[0,7],1],[[5,7],7]],[[[3,3],[6,7]],[[2,8],[2,9]]]]
-[[7,7],[[1,[3,7]],9]]
-[[8,[[3,0],0]],[[[8,3],0],9]]
-[[[[6,2],[2,6]],3],[6,[[4,7],2]]]
-[[[5,[2,3]],[8,[8,7]]],[[0,0],2]]
-[[1,6],[7,[7,[9,0]]]]
-[[[7,[7,6]],[7,4]],[[7,2],[6,5]]]
-[1,[[8,[9,5]],2]]
-[[[[8,2],[6,5]],[4,[9,2]]],[[0,[2,6]],[6,6]]]
-[[1,[[7,2],5]],[[[6,0],[8,1]],8]]
-[[[[0,6],[6,6]],2],[[4,2],[2,4]]]
-[[5,[9,0]],[2,5]]
-[7,[[9,7],[[9,9],4]]]
-[[5,[[6,4],7]],[8,[[4,4],[9,0]]]]
-[2,[[[3,2],[1,9]],[[3,8],[7,5]]]]
-[[[[8,2],0],[5,[4,3]]],0]
-[[[0,[7,8]],[[9,6],7]],[[7,[1,0]],[[0,3],7]]]
-[[[[8,3],0],[[4,8],[7,9]]],[[7,1],[[8,4],[4,4]]]]
-[[[2,0],[[6,6],7]],[[2,[3,9]],[[5,6],[4,6]]]]
-[[[[1,4],8],[9,6]],8]
-[[7,[9,1]],[1,[[8,5],[6,8]]]]
-[8,[[2,6],5]]
-[[[9,[7,8]],[[7,8],6]],3]
-[1,[[[2,1],7],[[2,6],7]]]
-[[7,[4,[6,1]]],[[[4,9],8],[[0,1],[1,7]]]]
-[[[7,9],[[2,6],[2,4]]],[[2,[1,7]],[[3,9],[8,9]]]]
-[[[[4,5],[4,7]],[[4,0],[9,9]]],0]
-[3,[[[6,9],2],[5,3]]]
-[1,[8,[[0,8],[1,3]]]]
-[[[7,[9,2]],[4,[0,3]]],2]
-[3,[[[7,7],6],[[8,4],1]]]
-[[[[6,3],[2,6]],[[6,9],[8,1]]],[[[2,1],[7,5]],[[7,3],[7,3]]]]
-[[[1,6],[[5,1],[5,0]]],[[1,0],[6,9]]]
-[[[[8,6],[3,3]],[[2,1],[4,1]]],[1,[[7,7],[8,5]]]]
-[[1,5],[6,[[2,3],[2,4]]]]
-[[0,[7,[9,0]]],[9,0]]
-[[[5,[1,9]],[0,[9,8]]],[[[6,7],[6,3]],[8,1]]]
-[[[4,7],[6,[2,1]]],5]
-[[3,[4,0]],[2,[4,5]]]
-[[[4,0],[6,[8,3]]],[[0,6],8]]
-[[[[9,9],0],[[1,8],0]],[[1,6],[3,4]]]
-[[[[4,3],4],1],[0,[[2,1],[3,9]]]]
-[[[8,[6,2]],[6,0]],7]
-[[9,[6,[3,1]]],[[[5,9],0],[4,5]]]
-[4,[7,[[2,5],4]]]
-[[2,[8,[2,9]]],[[[0,1],[3,5]],1]]
-[[[7,9],[7,3]],[[1,[7,1]],[1,2]]]
-[[[7,0],[[1,0],8]],[[9,[7,6]],[9,[7,2]]]]
-[[[8,1],[[0,6],2]],[9,[[1,8],[5,4]]]]
-[6,[[[9,5],[5,4]],3]]
-[[4,[[6,8],[8,3]]],[[9,[0,9]],7]]
-[[[6,9],[[2,3],8]],[[9,[5,1]],[[7,6],5]]]
-[[0,1],5]
-[[4,[1,9]],[[8,0],8]]
-[[5,[0,6]],[1,8]]
-[[[[9,2],7],7],[4,[1,[5,6]]]]
-[[7,[9,[6,5]]],[[6,9],1]]
-[[[5,2],[0,[1,4]]],[[0,4],[[9,4],8]]]
-[[[[7,1],[4,9]],3],[[[4,5],8],[7,[0,4]]]]
-[[[9,[8,0]],7],[[[4,5],8],[[4,3],[8,5]]]]
-[[9,[7,0]],[[3,[1,7]],[[7,0],7]]]
-[[2,[[6,2],6]],8]
-[[[8,[9,6]],[[5,8],[7,2]]],[4,[9,9]]]
-[[[[0,5],0],[[8,4],4]],[[7,9],8]]
-[[[0,[0,3]],[0,[8,8]]],[[[2,1],3],4]]
-[0,[[4,1],[[9,9],2]]]
-[[3,[7,[6,7]]],[0,2]]
-[7,2]
-[0,[3,[[3,4],[4,4]]]]
-[[[[0,1],[5,9]],[[4,2],7]],[5,[1,8]]]
-[[7,1],[[1,[9,9]],[[8,4],8]]]
-[[[1,[8,3]],[[3,7],0]],[[2,0],[[1,6],[9,9]]]]
-[[[1,4],[1,4]],[[2,[2,7]],[2,[7,1]]]]
-[[1,[[6,8],[8,6]]],[0,[8,0]]]
-[1,[[2,0],7]]
-[[[[6,0],9],[[6,9],[8,3]]],[[3,[9,9]],6]]
-[[[[9,8],[2,8]],[2,3]],[6,2]]
-[[[6,[2,2]],7],[[3,[7,8]],7]]
-[[[5,[3,7]],1],[[[4,0],3],[5,4]]]
-[[[7,[4,3]],[9,[4,4]]],7]
-[[2,[[1,5],6]],[[2,3],[[2,5],[7,1]]]]
-[[[[3,9],[1,9]],3],[5,[[0,6],[3,2]]]]
-[[[3,[7,5]],[[7,7],[2,8]]],[4,[1,[0,0]]]]
-[[4,[2,[8,7]]],[[[0,5],0],9]]
-[9,[9,[6,4]]]
-[[5,[[4,9],2]],[9,9]]
-[[1,[[6,0],[9,9]]],[[[8,4],1],[[5,2],[6,1]]]]
-[[1,[[9,0],8]],6]
diff --git a/2021/inputs/day_19.txt b/2021/inputs/day_19.txt
deleted file mode 100644
index e2f977f..0000000
--- a/2021/inputs/day_19.txt
+++ /dev/null
@@ -1,856 +0,0 @@
---- scanner 0 ---
-785,-772,752
-548,703,908
-571,658,844
--654,-601,-321
-509,339,-583
-113,-24,5
--685,476,-691
--573,-837,487
-667,-785,773
-417,248,-660
-567,-853,-801
-531,655,675
-543,245,-584
--569,714,648
-520,-824,-758
--551,613,646
--6,-155,84
--645,452,-613
--665,-681,-424
--624,-798,555
-763,-844,821
--455,763,640
--583,-753,-380
-382,-897,-773
--550,444,-612
--567,-808,562
-
---- scanner 1 ---
--762,-848,417
--470,575,-597
-510,-362,658
--452,659,-532
--951,675,325
-650,413,654
-653,-412,637
--847,-836,444
-525,-542,600
--952,-828,466
--534,-483,-635
-263,625,-879
-487,-833,-665
--478,-438,-584
--58,30,-29
-494,-775,-599
-576,364,635
-283,615,-897
--505,-387,-655
--450,583,-662
-289,498,-824
--955,537,301
-609,384,498
-505,-724,-559
--929,545,377
-
---- scanner 2 ---
--4,133,0
-409,846,-912
-511,-669,287
--727,-315,505
-397,674,-855
--391,-664,-755
-455,-676,267
--681,708,805
--534,702,800
--840,-409,440
--455,-619,-732
-544,867,356
-469,-702,368
-391,832,420
--624,-616,-772
--547,811,-518
-410,-260,-715
-429,-224,-632
-397,616,-957
--814,-307,456
-534,-227,-752
--478,883,-540
--528,703,707
--526,824,-636
-509,845,344
-
---- scanner 3 ---
-900,-493,416
--792,754,522
--424,262,-635
--368,454,-613
--746,-725,-569
--752,649,599
-456,-364,-590
--446,-588,509
--634,-755,-694
-839,573,-420
--749,645,413
-690,673,-399
-569,-382,-585
--725,-651,-724
--563,-606,561
--516,-779,510
-804,717,-336
-845,465,483
--362,321,-724
-772,-525,555
-406,-491,-567
-37,-7,32
-687,484,510
-821,-464,374
-751,405,481
-
---- scanner 4 ---
--540,515,741
-856,756,328
-562,-779,560
-797,612,394
-482,-908,548
--585,-571,-807
-709,770,412
--478,433,677
--549,-545,527
-521,-609,-513
--505,-521,-879
--461,-510,-902
--337,-612,537
--32,43,-140
-644,-634,-445
--550,533,700
-766,728,-558
--14,-68,35
-814,686,-634
--712,690,-680
-781,596,-529
-676,-895,583
-559,-558,-534
--789,611,-631
--464,-655,596
--718,530,-751
-
---- scanner 5 ---
-619,-451,-778
--517,534,-801
--617,683,-780
--379,406,390
-423,-502,-802
--704,-496,482
--69,-98,-19
-485,767,293
-470,695,473
--473,648,-864
-573,771,459
--389,301,412
--720,-612,534
-445,-434,-848
-532,321,-712
--364,382,382
--618,-586,385
-520,288,-704
--869,-518,-476
-725,-500,380
--736,-524,-587
--928,-580,-565
-614,471,-707
-779,-495,407
-671,-428,522
-
---- scanner 6 ---
--665,672,665
--565,744,642
--933,-475,-523
-389,717,-914
-254,-687,-701
-523,758,561
--662,504,-786
-468,-298,310
-480,885,502
--960,-354,-558
-234,-687,-751
-439,637,-842
--173,107,-115
--647,682,706
-260,-481,-766
-413,673,492
-11,-28,-159
-418,-340,447
-369,-299,251
--736,-356,408
--727,-524,477
-378,761,-937
--904,-282,-562
--743,433,-666
--684,-386,371
--822,510,-715
-
---- scanner 7 ---
-465,801,-361
--583,551,482
--521,633,546
--593,533,523
-434,583,-327
--451,-805,455
--611,-835,-355
-666,296,811
--574,648,-470
-30,-123,175
--119,-152,-16
-439,-652,399
-436,-717,520
-813,310,895
-413,670,-390
--618,484,-380
--515,-704,545
-406,-557,567
--581,-804,602
-754,454,829
--765,-854,-475
-573,-842,-568
--827,-846,-405
-718,-754,-533
-497,-753,-472
--626,481,-462
-
---- scanner 8 ---
--834,731,729
--579,282,-466
--376,-761,734
-655,-969,-550
-641,575,492
--789,667,706
-722,-978,710
--530,-683,-261
-654,596,610
-693,-935,757
-538,441,-831
--124,-92,62
-532,588,-826
--477,308,-482
--448,-778,-293
--470,-760,768
--379,-837,860
--475,-627,-288
--485,395,-531
--786,498,746
-713,644,514
-719,-888,-497
-533,594,-733
-766,-950,895
-743,-966,-388
-
---- scanner 9 ---
-374,-543,718
--699,-584,548
--401,-360,-681
--666,527,782
--147,-126,155
-695,385,-533
--735,442,672
-763,439,817
-395,-581,769
--676,315,715
-668,563,756
-808,-860,-376
--438,-462,-763
-740,483,806
--577,779,-632
-784,-767,-244
-797,-770,-315
--564,834,-466
--435,-398,-748
--687,-504,419
--12,-91,-12
-662,477,-577
--592,758,-411
-306,-666,693
--722,-698,432
-620,459,-474
-
---- scanner 10 ---
--57,48,-5
-507,768,-684
-490,702,-604
-517,-605,-365
--442,-603,-255
--812,583,625
-692,-604,914
-369,691,-619
-486,386,918
--476,-772,765
-537,-625,-311
-353,-589,-374
--896,597,781
--904,615,790
--358,-698,669
--511,-531,-348
--499,749,-395
--332,-694,727
-624,-745,922
-398,356,966
-654,-852,912
-452,403,810
--467,856,-399
--477,-661,-349
-38,-3,171
--428,739,-376
-
---- scanner 11 ---
-709,533,-849
--495,-544,650
--488,600,604
-736,464,642
--462,762,641
--325,776,-552
-153,177,47
--505,-304,-506
--423,591,584
-853,499,615
-540,-737,-707
-54,23,-83
-756,-686,346
--574,-217,-397
-808,608,647
--412,839,-613
--489,-491,547
-716,-646,426
--505,-414,-420
-834,555,-697
--518,-470,473
-800,-801,448
-683,420,-707
-471,-645,-649
-572,-781,-675
--282,894,-529
-
---- scanner 12 ---
--438,505,-689
-630,785,420
--391,-486,434
-645,789,392
--436,452,649
-402,-547,-680
-37,27,31
-579,865,382
--460,493,-724
-818,609,-455
--599,491,705
--567,-453,350
-858,631,-541
-354,-422,756
--689,-808,-836
--442,-405,279
-760,549,-435
-407,-440,640
--631,-706,-836
--459,-763,-824
-344,-643,-802
--508,546,645
-393,-433,644
-87,142,-114
-332,-520,-754
--473,569,-842
-
---- scanner 13 ---
--830,923,434
--517,-584,-423
-526,-422,-325
--820,786,372
-440,701,541
--740,-600,715
--884,499,-539
-597,-679,703
-358,548,-251
--727,442,-487
-697,-656,775
--741,-747,845
-302,544,-323
--704,-546,-468
-535,-491,-493
--640,-585,-311
--909,441,-436
-329,509,-444
--758,792,378
--640,-657,781
--53,73,94
-578,-385,-355
-615,-720,713
-519,652,464
-600,772,535
-
---- scanner 14 ---
-574,-540,704
-285,381,-354
-515,-466,779
-300,317,-351
-471,-558,746
-733,689,881
--554,416,557
-416,-860,-493
-804,686,868
-367,279,-317
-582,-915,-480
-13,37,-48
--390,-407,604
--590,513,-476
--512,-378,568
-672,779,892
--491,-464,-576
--478,413,641
--551,-420,687
--508,525,647
--672,399,-455
--153,-91,69
--406,-483,-711
--675,542,-562
-637,-839,-508
--516,-428,-610
-
---- scanner 15 ---
--654,605,-887
-290,437,636
--681,722,-852
-449,-680,271
--2,-62,-147
--655,-593,-589
-478,505,-851
-596,-674,276
-259,-587,-558
-396,-562,-499
-316,335,620
-364,504,-669
--675,388,841
--880,-861,605
--619,333,814
--692,-619,-751
-339,474,-774
--712,-554,-760
--961,-797,552
--958,-885,714
--770,306,809
-602,-675,369
--144,-143,-11
-341,-570,-441
--649,677,-743
-403,343,571
-
---- scanner 16 ---
--692,-623,449
-543,-617,-551
-784,-472,679
-560,-738,-414
-803,723,736
--868,-717,-800
--756,-686,376
--6,81,-80
--528,436,506
-772,951,-366
-695,860,-458
-696,954,-492
-724,755,601
-80,-14,78
--732,541,-520
-514,-735,-636
--625,-757,393
--833,-698,-600
--534,586,602
--796,496,-497
--843,-726,-747
--536,485,620
--563,544,-480
-725,747,696
-739,-536,621
-630,-507,673
-
---- scanner 17 ---
--754,753,-378
--683,-534,-954
-533,-622,603
-498,403,-673
--907,673,-415
-811,-522,-627
-650,-422,-612
--703,732,237
-569,491,723
-526,405,-595
-366,476,-633
-584,549,543
--724,652,-426
-535,-770,576
--880,-851,629
--907,-681,559
--680,-511,-926
-454,-669,691
-1,38,-78
--823,-796,553
--578,-470,-910
-799,-467,-509
--893,683,257
-712,512,673
--788,705,249
-
---- scanner 18 ---
--844,226,329
-602,395,686
-478,-694,534
--348,-651,505
--613,490,-691
-348,-738,-528
-99,-39,-2
-368,-688,-528
--469,-664,619
--819,-510,-740
--790,-549,-933
--605,-684,511
-582,323,-917
--821,433,267
-465,-566,523
-483,264,-916
--846,-545,-861
-532,460,-875
--716,303,258
--622,421,-859
-579,362,756
--50,-119,-96
--570,384,-829
-625,314,789
-545,-638,566
-374,-753,-734
-
---- scanner 19 ---
-878,378,296
--797,-402,-756
-718,453,-561
-862,-402,-635
--789,-416,-632
--580,-705,635
--512,590,-477
--786,752,516
--487,713,-545
--436,675,-566
-845,-482,-688
--773,558,551
-808,420,-666
--679,-738,771
-734,437,362
-962,-292,489
--23,-11,11
-865,-472,-504
-892,525,380
--737,-513,-660
-767,-284,520
--657,672,528
-841,-333,477
-162,-53,-105
-850,468,-590
--697,-659,753
-
---- scanner 20 ---
-557,-760,464
--477,-322,-599
-525,781,-733
--396,-771,757
--418,-697,598
--517,-468,-611
-467,781,-835
-697,769,-790
-714,-334,-432
-765,-489,-513
--115,33,18
-718,634,478
--409,768,-593
--376,644,-630
--373,749,-510
-696,669,466
--818,667,409
--471,-462,-594
-40,-70,140
-683,787,542
--825,723,389
-589,-405,-480
--851,709,490
-648,-700,519
--440,-600,673
-720,-704,425
-
---- scanner 21 ---
-748,-630,-477
-545,-599,511
-834,985,537
-887,764,-454
--703,755,410
--650,656,-642
-879,715,-541
--555,-682,-789
-617,-743,516
--462,-670,549
-916,953,632
--669,973,441
--568,653,-650
--497,-582,694
--625,-674,-851
-717,-707,-616
-889,958,481
-100,41,-32
-718,-525,-502
--675,-663,-635
--560,820,-598
--640,842,389
-785,780,-428
--558,-581,473
-500,-708,543
-
---- scanner 22 ---
-791,545,-530
-816,515,-425
-896,-546,-641
--417,694,544
--399,436,-637
-379,650,683
-670,-910,856
-759,-521,-700
--833,-911,715
-359,617,546
--367,551,523
--461,-898,-819
--853,-721,764
-408,691,527
-6,59,88
--514,517,-738
--537,-841,-764
-814,-529,-758
-677,546,-348
--29,-122,-30
-532,-914,880
--531,-925,-649
--547,566,581
--841,-806,737
--487,515,-590
-540,-888,804
-
---- scanner 23 ---
--600,-462,-505
-969,676,350
-539,367,-688
--757,638,-532
-659,-710,231
-589,-880,258
-420,-428,-674
--404,819,242
-476,551,-652
--504,-344,-579
--747,668,-425
-981,703,435
--768,-702,610
-514,-463,-616
--412,743,268
--749,706,-673
-961,654,245
--562,-318,-583
-513,-497,-746
-106,77,-23
--631,-761,635
--686,-819,627
--542,795,246
-665,-825,315
-530,531,-672
-
---- scanner 24 ---
--319,-979,-426
--664,465,584
--793,385,596
--430,-646,617
-885,612,732
--705,449,-405
--372,-954,-417
-511,359,-469
-727,700,750
-533,-628,-549
-548,-575,467
-648,-647,444
-380,411,-440
-630,-637,403
-598,380,-406
-700,-680,-541
--780,579,561
-871,759,816
-6,-30,-98
--568,432,-526
-697,-672,-459
--540,-561,548
--497,-434,607
--483,403,-408
--519,-944,-445
-124,-106,71
-
---- scanner 25 ---
-794,-593,-715
--657,696,404
--560,621,382
-743,-397,-739
--789,-588,481
-659,644,448
--852,-457,-625
-665,954,-502
-817,-645,585
--132,31,-22
-749,730,545
-52,-21,55
-811,-419,-785
--935,-576,441
-745,-699,443
-721,762,-524
--497,487,-593
-750,-753,470
-633,746,597
-727,895,-413
--923,-409,-750
--486,780,360
--768,-490,-801
--557,542,-684
--553,448,-756
--795,-571,435
-
---- scanner 26 ---
--716,663,621
--706,477,-410
-823,361,-502
--749,-353,928
--770,-739,-500
-768,334,-558
-821,555,433
--767,-517,-454
--649,-602,-483
-464,-656,856
-922,-661,-636
-70,56,10
--634,666,629
--730,-553,893
-919,-787,-712
--769,564,-431
--626,499,577
-512,-673,623
--758,-406,903
-850,366,-653
--735,346,-462
-813,604,520
-828,-695,-635
-719,539,407
-509,-633,792
-
---- scanner 27 ---
--781,-794,775
-523,883,-452
-491,838,-561
--497,635,-530
-497,-432,-715
--773,-768,699
-534,-458,-553
-690,830,848
--417,-426,-746
--905,811,422
-712,746,693
--643,-790,751
--954,737,441
-17,148,31
-591,-459,538
--499,-409,-863
-665,-488,517
--119,39,-120
--522,665,-635
--636,666,-453
-496,766,-417
-488,-465,591
--934,770,578
--554,-401,-805
-554,-393,-544
-792,786,733
-
---- scanner 28 ---
-875,474,732
-751,669,-640
--354,949,-878
--553,986,-871
-567,-363,592
-894,-337,-815
--322,-415,-682
-786,-364,-722
-679,761,-750
--346,603,885
--375,-418,576
-492,-334,586
--419,-490,494
-902,-282,-642
-560,-373,535
-702,557,-769
-17,32,-102
--309,425,877
--335,-280,-784
--417,563,824
--328,-250,-663
-106,126,67
-815,410,807
--316,-570,505
-823,424,663
--456,959,-777
-
---- scanner 29 ---
--741,-481,-792
--625,503,-421
-431,449,245
-585,319,-378
-460,-572,554
--482,-517,538
-512,336,-367
--738,270,467
--790,320,398
--574,543,-588
-504,-644,636
--693,-540,-696
-881,-472,-596
-564,370,-525
-401,-724,625
--730,256,323
-853,-428,-411
--672,-553,-814
--475,-527,595
-502,409,306
--23,-53,-119
--407,-488,544
--595,419,-588
-838,-501,-549
-394,271,253
-
---- scanner 30 ---
-850,573,-382
--386,-445,574
-810,650,-487
-807,464,-491
-425,667,659
-631,651,711
-353,-371,673
--781,-369,-563
--746,-285,-419
--771,932,682
--632,-348,-463
--629,561,-652
-336,-301,499
--419,-437,586
-426,-562,-682
-482,-584,-874
--3,40,-88
--85,187,75
--693,532,-731
--569,-442,668
--787,534,-671
--699,946,479
--671,944,575
-404,-347,477
-504,638,724
-420,-673,-815
diff --git a/2021/inputs/day_2.txt b/2021/inputs/day_2.txt
deleted file mode 100644
index 917f466..0000000
--- a/2021/inputs/day_2.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-forward 2
-forward 6
-forward 8
-forward 7
-down 5
-forward 8
-forward 9
-down 2
-forward 6
-down 9
-forward 1
-forward 8
-forward 6
-forward 7
-down 4
-down 5
-forward 1
-up 5
-down 7
-down 7
-down 1
-up 2
-forward 3
-forward 2
-forward 2
-forward 5
-up 5
-forward 4
-forward 9
-forward 6
-down 4
-down 9
-down 2
-up 6
-forward 9
-up 7
-forward 7
-forward 5
-up 3
-forward 4
-forward 9
-up 5
-down 3
-up 6
-down 5
-down 4
-up 6
-forward 9
-forward 6
-down 9
-up 3
-down 7
-up 1
-forward 8
-forward 3
-forward 8
-up 6
-forward 7
-forward 5
-forward 8
-up 2
-forward 2
-forward 7
-forward 7
-down 1
-forward 7
-up 7
-down 3
-forward 9
-down 5
-down 2
-forward 5
-forward 1
-forward 4
-forward 6
-up 2
-up 7
-forward 2
-forward 6
-forward 7
-down 9
-up 8
-down 9
-down 3
-up 8
-down 3
-down 2
-up 6
-forward 3
-forward 9
-down 4
-forward 5
-down 6
-up 8
-forward 1
-down 6
-down 6
-forward 5
-down 6
-forward 8
-up 7
-down 3
-forward 7
-forward 3
-forward 1
-forward 4
-forward 4
-down 3
-up 9
-up 5
-forward 1
-down 2
-up 4
-forward 7
-up 4
-down 3
-down 5
-down 8
-forward 4
-up 8
-forward 7
-up 3
-up 4
-up 9
-forward 1
-forward 1
-down 6
-forward 1
-down 8
-up 4
-forward 9
-forward 9
-down 6
-forward 9
-forward 8
-down 2
-up 3
-up 3
-down 9
-forward 7
-forward 8
-down 4
-forward 1
-up 3
-forward 3
-down 3
-down 9
-down 5
-up 7
-up 2
-forward 7
-forward 2
-forward 5
-forward 4
-down 7
-forward 7
-up 1
-up 3
-down 6
-down 4
-forward 9
-forward 8
-down 5
-down 4
-down 1
-down 5
-forward 9
-forward 8
-down 3
-forward 5
-forward 3
-forward 6
-down 6
-forward 3
-up 9
-forward 4
-down 7
-forward 3
-forward 7
-forward 1
-forward 5
-down 1
-forward 1
-down 6
-up 7
-down 3
-forward 2
-down 4
-forward 6
-up 6
-forward 8
-forward 8
-down 5
-up 4
-forward 7
-forward 6
-up 4
-forward 6
-down 1
-forward 6
-forward 2
-up 4
-down 6
-down 7
-forward 4
-down 4
-forward 1
-down 3
-forward 5
-forward 5
-forward 9
-forward 3
-up 7
-down 7
-forward 7
-forward 5
-down 1
-down 1
-forward 3
-down 8
-forward 1
-forward 2
-forward 9
-forward 1
-forward 3
-down 3
-up 4
-forward 5
-down 1
-forward 3
-up 7
-forward 3
-forward 6
-up 6
-up 3
-forward 9
-forward 5
-down 2
-up 4
-up 3
-forward 3
-forward 7
-down 1
-forward 5
-forward 5
-down 1
-forward 4
-forward 2
-down 1
-down 9
-down 7
-up 1
-forward 2
-down 2
-forward 3
-forward 8
-forward 4
-forward 6
-down 4
-down 1
-forward 5
-forward 1
-forward 7
-down 8
-forward 9
-down 6
-forward 3
-up 5
-up 1
-up 7
-down 5
-forward 7
-forward 5
-forward 5
-up 1
-forward 8
-down 8
-down 7
-forward 9
-forward 9
-down 3
-forward 7
-forward 2
-down 1
-down 6
-down 1
-forward 7
-down 3
-forward 1
-forward 1
-forward 6
-forward 6
-up 9
-down 3
-forward 9
-down 8
-forward 4
-up 6
-down 4
-down 7
-forward 5
-up 3
-forward 1
-forward 8
-up 6
-up 3
-down 2
-forward 2
-forward 5
-forward 1
-down 8
-down 8
-down 3
-forward 5
-forward 4
-forward 4
-forward 5
-up 5
-forward 2
-forward 5
-up 5
-forward 6
-forward 6
-forward 9
-up 5
-forward 4
-up 4
-forward 8
-down 8
-forward 5
-forward 2
-forward 4
-forward 3
-forward 1
-down 1
-down 9
-down 2
-forward 4
-down 3
-down 6
-forward 2
-up 7
-forward 6
-down 4
-up 9
-down 1
-forward 8
-forward 1
-forward 1
-down 9
-down 3
-down 2
-down 7
-up 5
-down 7
-up 9
-down 8
-down 7
-forward 9
-forward 7
-up 4
-forward 5
-up 9
-down 4
-forward 1
-forward 9
-down 7
-up 9
-forward 6
-forward 4
-up 8
-down 2
-forward 1
-up 6
-up 5
-down 4
-forward 8
-down 3
-down 5
-down 6
-up 1
-up 9
-up 7
-up 5
-forward 1
-forward 3
-down 7
-forward 9
-forward 2
-forward 6
-down 4
-down 7
-forward 3
-down 1
-up 5
-forward 3
-down 3
-down 1
-forward 1
-forward 4
-forward 8
-down 4
-down 1
-forward 3
-down 7
-up 9
-down 8
-down 1
-forward 2
-down 6
-down 9
-down 9
-forward 2
-forward 8
-up 2
-down 5
-down 9
-forward 1
-up 9
-down 7
-forward 8
-down 7
-up 4
-forward 8
-down 8
-down 7
-forward 6
-up 7
-down 4
-down 9
-forward 9
-up 8
-down 8
-down 8
-down 8
-down 5
-forward 2
-up 9
-down 2
-up 7
-down 7
-down 3
-down 6
-forward 9
-forward 1
-down 1
-down 5
-up 4
-down 5
-forward 5
-up 2
-forward 5
-down 5
-forward 1
-forward 9
-down 9
-forward 3
-forward 3
-down 8
-down 2
-down 8
-forward 8
-forward 7
-up 6
-down 4
-down 5
-forward 8
-forward 4
-forward 7
-forward 1
-down 9
-down 4
-down 2
-forward 5
-down 3
-down 7
-down 5
-forward 8
-up 1
-down 4
-down 7
-down 7
-forward 2
-up 5
-forward 5
-up 2
-up 4
-down 9
-forward 7
-forward 6
-forward 6
-down 2
-forward 7
-forward 7
-down 7
-forward 8
-down 2
-up 9
-down 1
-forward 9
-down 9
-forward 3
-down 9
-down 2
-forward 9
-forward 8
-down 7
-up 2
-forward 8
-forward 1
-up 2
-down 7
-up 7
-down 8
-up 1
-up 4
-up 2
-up 3
-down 7
-forward 1
-down 8
-down 4
-down 2
-down 4
-up 8
-forward 8
-down 2
-up 5
-up 4
-forward 7
-up 1
-forward 3
-down 8
-down 4
-forward 4
-down 8
-forward 2
-down 1
-up 9
-forward 9
-down 4
-up 2
-down 8
-up 9
-forward 6
-down 7
-up 7
-forward 9
-forward 1
-down 8
-forward 5
-down 9
-forward 6
-down 9
-forward 9
-forward 1
-down 8
-up 4
-forward 9
-forward 3
-down 9
-up 8
-forward 4
-up 8
-forward 7
-down 7
-up 6
-down 7
-down 2
-down 7
-forward 3
-forward 2
-down 6
-down 2
-down 7
-up 4
-forward 5
-down 5
-forward 2
-up 3
-up 8
-forward 8
-forward 1
-forward 7
-down 7
-down 2
-forward 1
-down 7
-down 7
-up 2
-up 7
-up 7
-forward 4
-down 5
-forward 5
-forward 7
-forward 7
-down 7
-down 8
-forward 8
-forward 8
-up 3
-up 9
-forward 2
-down 7
-up 3
-up 1
-up 1
-down 9
-up 5
-down 6
-up 8
-up 3
-up 5
-forward 7
-forward 3
-forward 8
-forward 4
-up 1
-forward 2
-forward 1
-up 5
-forward 9
-forward 8
-down 7
-up 1
-forward 7
-down 8
-forward 1
-forward 9
-forward 9
-forward 9
-forward 8
-down 1
-forward 8
-forward 7
-up 9
-up 3
-forward 8
-forward 2
-up 2
-down 7
-down 6
-forward 4
-forward 3
-forward 6
-up 7
-down 9
-forward 1
-forward 4
-down 1
-forward 4
-up 3
-down 8
-forward 1
-up 6
-forward 8
-forward 2
-forward 1
-forward 8
-forward 4
-down 7
-forward 4
-forward 6
-down 2
-up 4
-forward 4
-forward 3
-down 5
-forward 8
-forward 4
-forward 5
-forward 7
-forward 6
-forward 5
-forward 9
-down 4
-down 9
-forward 6
-up 7
-down 6
-down 3
-down 2
-up 9
-forward 7
-down 4
-down 5
-forward 2
-forward 3
-forward 2
-forward 9
-forward 7
-forward 8
-down 9
-down 7
-down 9
-down 7
-forward 5
-forward 2
-down 5
-forward 6
-down 1
-down 2
-down 6
-forward 9
-down 3
-up 6
-down 4
-down 5
-forward 3
-forward 7
-down 8
-forward 2
-forward 5
-down 9
-down 3
-up 5
-down 6
-forward 6
-up 3
-down 6
-down 1
-down 8
-down 5
-down 3
-forward 3
-up 6
-up 7
-forward 8
-forward 9
-forward 2
-forward 6
-forward 2
-forward 3
-down 7
-down 3
-down 3
-down 6
-down 2
-forward 4
-forward 3
-forward 8
-up 1
-down 9
-forward 5
-up 3
-down 7
-down 6
-forward 8
-forward 1
-up 6
-forward 3
-forward 1
-up 9
-forward 6
-forward 3
-down 9
-down 4
-down 9
-forward 5
-down 8
-down 3
-forward 1
-forward 1
-down 9
-down 6
-down 3
-up 7
-down 3
-forward 5
-down 2
-forward 7
-forward 2
-forward 5
-up 7
-forward 4
-forward 4
-up 3
-down 6
-down 7
-up 1
-down 6
-forward 1
-forward 9
-down 7
-down 8
-forward 5
-down 1
-down 9
-up 5
-up 4
-up 3
-forward 6
-down 6
-forward 4
-forward 8
-up 6
-up 2
-down 9
-forward 2
-forward 5
-forward 1
-forward 3
-forward 9
-up 3
-forward 2
-forward 1
-forward 3
-forward 3
-up 9
-forward 3
-forward 7
-down 6
-forward 2
-down 8
-up 9
-forward 8
-forward 5
-forward 2
-up 8
-down 9
-up 5
-forward 3
-down 4
-forward 1
-up 9
-down 4
-down 5
-up 4
-down 6
-down 4
-down 6
-down 4
-forward 4
-down 2
-down 1
-down 6
-forward 2
-down 1
-down 3
-forward 4
-down 3
-down 5
-down 5
-up 1
-up 4
-down 4
-down 4
-down 5
-down 4
-down 5
-forward 5
-down 8
-down 5
-down 5
-down 9
-up 1
-up 5
-forward 5
-down 1
-down 9
-down 4
-down 3
-forward 3
-down 2
-forward 9
-down 3
-forward 1
-down 9
-down 5
-up 7
-forward 3
-forward 1
-forward 2
-down 5
-forward 8
-down 3
-down 3
-forward 6
-down 8
-down 3
-down 8
-up 9
-forward 3
-down 6
-forward 4
-down 6
-down 4
-up 5
-forward 1
-up 6
-up 2
-forward 2
-down 8
-forward 7
-forward 8
-down 6
-down 7
-forward 7
-up 3
-forward 3
-up 6
-forward 3
-down 1
-down 7
-forward 9
-forward 5
-up 1
-forward 7
-forward 1
-down 3
-forward 1
-up 4
-up 2
-up 1
-down 8
-forward 9
-forward 3
-forward 4
-up 7
-forward 5
-down 1
-down 8
-down 3
-down 4
-down 6
-down 5
-forward 4
-down 4
-down 2
-down 4
-down 3
-down 3
-forward 4
-up 3
-forward 6
-down 7
-forward 4
-up 2
-down 7
-forward 8
-up 9
-forward 6
-forward 8
-down 1
-down 6
-forward 6
-down 6
-down 9
-up 8
-forward 8
-up 5
-forward 6
-forward 9
-forward 4
-up 2
-forward 3
-down 7
-down 8
-down 4
-up 8
-forward 8
-forward 1
-up 5
-up 4
-up 1
-down 9
-down 9
-up 2
-forward 9
-down 7
-down 2
-up 2
-down 1
-forward 6
-forward 2
-down 5
-down 8
-forward 6
-down 2
-down 3
-forward 6
-forward 7
-up 8
-down 4
-forward 5
-down 9
-down 2
-down 7
-down 9
-down 5
-forward 9
-forward 2
-down 6
-forward 7
-up 6
-forward 3
-up 2
-forward 9
-forward 2
diff --git a/2021/inputs/day_20.txt b/2021/inputs/day_20.txt
deleted file mode 100644
index 758420b..0000000
--- a/2021/inputs/day_20.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-##.....##.#.#####.#...###...#.##..#....##..#.##.#.#....##.....#.##.##.#.#.#...#.#.#.###.##..#.#.#.#..#.##.#...#..#.#.#..#####.##.#..#..##.#..#.#...#.....#.###..#..#####.##...#..##..##...#.#...##.##..##...##.##.#......#...##.##.#####.#....####....######.#.#.......#.############.###..#..#......####......#..##.####.##....#..#.#.###..#.####.####.#.##.##.##..###.#..#.......#....#..########....##..##.#...#.#.###.###.###..#..#.###..#....#.###..#.##.##..###.#.#####....###.##.###.....#######........#.#.##...##.#....
-
-..##.#.#..#..##.###....######.####.....#.#..##..####......####...##...#.##..##.##.#.####.##.#.##.#.#
-#.#####.#.#..#.#...##.......#.#...##.#..#.######....#.#####....####...##..##..#.#####..#.##......##.
-....#..#...#...######...#.#.##.##.####..####....####.##.......#..##.#.##..#.#..##..#.##...##...#.#..
-.#..#####..#..#..#.#.....#..###.###.##.#..#....#..#...#....#####...###.....#.##.####.#######.##..##.
-###.###...###..##.##.######..####.#.###..#....####....#...#.##.#.#....#..#....#.#.#.#.#.......#..###
-.#.##.#.#####.....#...##.##..##.##...#####....#.##.###.....##.#..#.######.....###...#.###....#...#.#
-##..##.##...#######..#..#.###.##.#.###..##.#.#.#..#..#....##.#..###....#..##.#..#.#....##.##........
-#..#......#.###.#####.##..#....#...#.#.#.#.###.##.##..#.#.##.#...#.##..##....#######.######..##.#.#.
-.###.....#....###..#.#...##...#.#.####.##.###.#.##..##..###.#.##.####..##.....##....##.......#.#.###
-..#.....#####.#.#..##..##..#.###..#.##.#..#.####....##..####.###....##.##.#.#...#..###.##......#####
-#..#..####.#.#...#..#...#######.#......#.#.#..#.##.#......#......#.##.####.######....#####..##...###
-.###.#...#..####.##...#.#####.##.#...#.#...#...#.#.##.###..#.##.###..#.##...######.#.#.##..#.##..###
-####.#.##....#.#..#########.###.#.###.#..#.####.#..##.##..#.#.#....###...#..#..###..##...#..#.....#.
-....#####.#..##.....###..#..#.##...#####..##...#...#.##.###....#..####.##.#####.##.#..##..##.#..#.#.
-####...#..#####.#..#######.##.#.####...#####.#.#.##....#.###...#.###.##...#...##.##.##.#.#.....##.##
-##..##.##.#.#..##..##.#..#.#..#.##.###.#..#..##.#..##..##.##.#......#.##..##.##.##.....##..#.#...###
-#..#.#.#.#####..#.##..##....#.##.#.###.#.#...##.###.#..##.##...##..###.##...##.####...##.#..##..##..
-####....##.#.#........###..#..####.###..#.#.#....#####.#.#...#.##.####.#..#...#..#.#...#.#...#.##.##
-#..#..##.##..#....#...#.#.....#...#...##.....####.#.###.#.#.####.#..#.#.#...#.##.###...##.#.##..##.#
-##..##..#.###.####.#####.###..#..#.....####.#..#.##.#####.##.#...##...###.######.#.#...#####.#..#...
-#...##.#......#####..##..#.....#..###.#.....##.....#####....#.##.###...##.####.#.#...#.##.######.#..
-##.#.###.##.......#.##.####..######...######...####.#..######....##.#.......####...###..##.##...#...
-#.....##.#####.####..#.##.#.#.....##.#..#....#.....#.....#.#...#.###.#.....#####.#.###..##..##..###.
-#.###..######..#....#...#.#.##..#.....#.###.....#..#.##..#..#.##....#.#..#..#..####.#.##.....#.#.###
-#..##..#...##..##........#...#....###.###.#.########.#..#.............#....####..#..##.#.##.#......#
-.###..#####........##..##.###.##..#.#.#.####.#..##.##.#...#..####..####..##.##..#.#.#.#......#.##.#.
-#.##..##..######....#....##.....#...##..#.#.......#.##.#####.###..##...##.##.#..##.###...##########.
-.##.########.##..###....#####.###.###.#.#.##.#.#.#..##.#.#..#.##..#....#.####..###.##..###.....##.#.
-..##...#.###.#.#.#...#.##..#.#...#..##..##.##..#.#..##..#.##..##.###.##..##...#.###..##...#..#.#..##
-.#.#.####.###.#.##.##.#.###.#.#....##.#........#..##..##..#...##..#.#.###.#.###..#...#.#.##.##..##.#
-#.#.####.#.##...###.###.#...#.###.#.#.....#..#.##.#...#.#..#.#.##...###..###.#..#.###.#.####.###.#..
-##..####...#.#.####..#..#...###.##.###.##...##.#.#..##..#.###.#.##.##.#..#.###.#..#######.#....#.#..
-.#.#.######..##.#..###.##.#....##....#.#..###.....#.##...#..#...#.#.#.#.##....##....####....#......#
-.#.#.#.##.###...##.#...###.#....#.#.#....##...#.######.#.#.#####..#..######.#.##.#.##.....##.####.##
-..######...##..##..#.#.#.##.......##.#.#...#.#####...######..#######...####..##...#.##.##.#..#...#.#
-##..#.#.#..##....#.##....#.....#.#####..#.#.#.#.#.#####....#..###..###.###...#...######...##..#.#..#
-####.....##...##....##.##.#...#..##.#..###.#....#...###...#..######...####.###..##......##..###.##..
-##.####...#.#.#.#..#..#.#.###..##.#....##.##..#..##........##.##.####.##.#.###.#.#....#####.#.....#.
-#...#.....###..#..###..##..#.#..#.###.#..#####.#.###..###..#...##.#..##..#...##...#.#.###.#.#.##.###
-##.#...#....##.########..##....##..###.#....###.#.#....#...###.....###.#.##.#..#####......###.#.#.#.
-###.###.#...###..#.##....#.#.#.........#.#####.#.#...#######.###.#.#.#..#.#...#..##.#...###.#...##..
-.####.###.#..#.###.#.#.######..#####.#...###..#...###..#.########.#.#.#..####..##.###..#..##..##....
-#..##.#.#...####.#..#..#..###.##...#####..#.###......#..####.####.##..###.....###..#....#.#######...
-###..##.#.#.#..##..##...#..#.#......#..####....#.##..#.##.###...####..##..####...#...###...##..#.#.#
-##.##..#....###.##......#.#.##.#.###..##...##.##.#....#.#.#.###....##..#....#.########...#.....##.#.
-#.#..###.....#######..#.###....####...##......####..#...##....#..####.#....##.#...#....##.###.##....
-#....######..##.##..##.###.....##..#.....#....##...#....###.....##.##...##.#..##.####.#..####.##.#.#
-.#.#....#..####..#..#.#...#..#..###..#........###.##...##.##....#.#..#.##..#.##...#####...#..#####..
-.##..####..##...##.###.#..####...#....#..#..##.#...##...#.###.....#.#..######.#.#####..#####..######
-.#...#.#..##.#.##..#.#.#...###..#..#....###.########..######.#.####...##..#..#...##.####...#.#######
-.#####.##.#####.#.#.##.#.#....#..###.#..##......#####..#.##.#########...##..###.######.....#.#.####.
-##.#.#.#.##..##.##...#.....#########.##.#.......#..#####.#..#.#.#######...#..##.#..###.#####...##.##
-##.##...###.###...#..##.#..#.##.##.....##.#.#.###...##.#.##..#.#.#...####..#..###.####..#...##.##.#.
-#...#.#.#..#.##..#..####.#..###.#####...#..#.#..#####.#..#.......#..#.....#.#.#.#.#.##.##.###....#.#
-....##..#..####.##..#.#...#####...#...###.##.#.#...##.##.##..######......####.##.#..#.##..##...####.
-##...###..#.##..##..#.##...#.#.####.####..#.#.###..#.#..##.#...#.#.####..#.#.##.##.#.###.#.###.#.#..
-#.#.#.#..#######.#....#..#.#.####....##...##.###.####.####.#..#..##...##..#..##....#...#..##.####...
-.#####.###.##.##..##.##.##.#.##...##..#..##...#.#.##.#...####..#####..#.............###..#..#..#.#..
-.##..##..###.##.##.....#...#....#..#..#.#######....#...#......##.###..#....#.#.####.#....###..##..#.
-.##.#.###......#.###..#.#..#.##.###.#.#..#.#.##......##.#..##.###..#.###.##...##.#.........###.#.###
-.#.#.###......#..#####.###..#..#.##..........#..##.###.#.##.#..#.##.#.###.#.###..#.#...#.###..###...
-.###.####.##.##.###..#.#..###..##..##....###.###..#...###...#.##.#...#.#.##..###.##.##..###.##....##
-###.########.#.######..#.##.#.#####.###...###.###.#####.###..#...#.###..#...#..#.###.#......#......#
-.##....###...##.####....#....#..##...#....###..#..#..#...#...#..##....#####.#..###...##.####....###.
-.....#..##...##....####.#..#.#.##..####.#####..###...###.###..##..#...##.....#.#.##...#.....#.####..
-.#.###.#.#..#.####....#.#.##..#.####..#...#.#.#.#..#..#.####.###....#####.#..##..#.#..##.#.####.#.#.
-#.####.#.....###..###.#..#.####.#..#.#.##.##..##..#.#.#..##...#.####..#.###...#....#.#...#.#..##.#..
-.#.####...#.#.#..###.##..#.#...##.##.#.....######...#....#.#.##.....###......##.#...#.###..#....###.
-..##.###......#.##...###.#...######..##.#.#.#.#..#####.##...#......#....#.####..#..#..#.#.#.#..#..##
-#.##.##.#.##.#.#..#.#.#..###....#####..#.#####.####.##.##.#.##.#..#.#.#.#.###..##.##.#####..##.#####
-..#.#..##.#.##.#..###..##.#.#..#.#..#.##....#....##..#.#..#.#.##.##.#.#.#..##..###..##.##.#.###.####
-####.####..#..#.#....##.#...##....#.######...#.##.....#.##..#####.#####..##..#.####.#.##......#.#...
-.#####..##...#....#.#..#.#.##.#...#.#..#..###.#..#.#..#..##.#.....#.####.#.#...###..#..##.##......##
-###.#.....###...###########.##.##..#....##.#.####.#.#.#.....#...###.#.##..#.#.#...###..........###.#
-#.#.##.##..#..#.##.#..##.#.#.####..###.#.#..###.#.#.###..###..#.##...#..#..#.#...#...#..##..#..###..
-..#.#####.###..#.......#..#.####.#.######....#.##.##.#..#..#####..#...#.##.##.##..#...#####.##..#..#
-##..##...##...#.####...#.#....##..#.....##.###.####.##..###..#.##..#..##..####....##.#...#.####.#..#
-#.#.##...####..#.##....##...#.###..##....##.#.#.....###...####..###.###..#...##.###.#.#.#.#....#.##.
-..####.##..##.#.....##...#.#.##.#.....#.#.##..##.##..#.##...##....#.#...###..####.#.#######..##.#.##
-#.....##...#...#...#.##.#.####.###..#.#..###.#.#..#######...#.##.###.#.###.#.##.#.##.....#.#...#.##.
-#..#####.....#..#..###.#####..##.##....#.###.##.#.#..##...###...#######.##....#...###...#####..##..#
-#..############.##.####..#..#..#..#.####........#.###.###..#.######...##..####..###......##.#.#..#..
-##.............###.#.####....##.##....#.#.....#.#.###...##.##.#.#..###.##.##..#.#.#####..#.#.#....##
-.####...###.#.###.#..#.#.#.####.#......#..#..#.#...#..#..#....#.##..##.#..##.#..#....#..##.#..##.#.#
-###.#..#..###.#...#....###..########....##....#....#.###.#.##...###.#.#.#..##..#.##....#.######.#.#.
-#.###....#.##.#.#...#.##.###.##..#..###.##...####..#..#..#.####.#..#..#..#.###....#..#.##...##...###
-#..#.##.#.#.#...#.#####.##.#..###.#.#.###........####.#####..#.##..###....#..#.#.#...#.#.#..#.#####.
-#..##.##.#####...##...##.##..##.#...#.#..#...#..#..#.....#..####.#...#..#######....########.....#.##
-#.....####.#.#.#..#.##..#.#.#####..#.#..######.#.#..#...#..#....#.##.##..##.#.###..#.##...##.#...##.
-.###.#..##.##....#.##.#..#.##..####.......##..##.##.#####.###.##.....#.....##.###.#.##.#.#.##..#..##
-##....#.#.##.###.#.##.#####.#..#####.#..#####.##.#..#..#..#####.##.###.#..###...#.#...#....######..#
-####..#..#..#..######...#####..#..#.#...#.##....###...#...##......#...#####.##.#..#.#.##.#...##.##.#
-####...##...#..#..##..#.#....#####...#.#....######.#.#.....#...##..##.##..##...##.###.....##....##.#
-.#.####.#..##..####...#.##.##.##..#####..##.#.#..##....#..#.#.####..##.##.#.###.##..####......##.#..
-...#..####...##.##.#..#.#....#######.####.#...###....##.#...####.#.###.####.#.#.##.#.......###.####.
-.......#..#..#.#..#..#...#.#####.#.#..####..#..#...##..#.#.####.#...#.#.#.#.#.#...#.#.##.#..#.#.####
-...###.#...#..#.#.#.....##.##.#.#..##.#......#.#######.....#..###.#####.##..###.#..#.#######.#####.#
-.####.#..#.#.###...#..#####...#....##..####..#..#######.###.##.##..######.###..##...#####...#.##.#.#
-#..##..####.#.#.#..#.####.###...#..###.#.##.##..####..###.####.....#..#.#.####...#.#.#.##.##..#.#.##
-..#.###.#...###..#...###.###.####..##..#.#...##.#...#..#....#####.#####..##.####..##.##.##..#...####
diff --git a/2021/inputs/day_21.txt b/2021/inputs/day_21.txt
deleted file mode 100644
index bfb2937..0000000
--- a/2021/inputs/day_21.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Player 1 starting position: 7
-Player 2 starting position: 5
diff --git a/2021/inputs/day_22.txt b/2021/inputs/day_22.txt
deleted file mode 100644
index 1d6ce39..0000000
--- a/2021/inputs/day_22.txt
+++ /dev/null
@@ -1,420 +0,0 @@
-on x=-11..33,y=-6..40,z=-16..37
-on x=-44..10,y=-24..30,z=-24..22
-on x=-34..15,y=-21..27,z=-33..11
-on x=-42..12,y=-43..9,z=1..48
-on x=-31..21,y=-11..42,z=-4..49
-on x=0..44,y=-13..37,z=-30..14
-on x=-41..12,y=-32..17,z=-7..43
-on x=-21..27,y=-16..30,z=-33..15
-on x=-28..24,y=-12..42,z=-6..45
-on x=-15..30,y=-32..14,z=-48..5
-off x=-32..-17,y=-6..11,z=-16..-5
-on x=-29..17,y=-6..48,z=-27..17
-off x=-34..-20,y=-22..-6,z=-24..-11
-on x=-39..5,y=-24..22,z=-49..2
-off x=-48..-32,y=32..45,z=31..44
-on x=-40..5,y=-9..39,z=-2..43
-off x=15..34,y=3..19,z=-46..-30
-on x=-10..36,y=-8..43,z=-36..8
-off x=8..22,y=2..11,z=27..44
-on x=-26..22,y=-17..31,z=-23..30
-on x=55966..74708,y=9028..39775,z=-23782..-12392
-on x=46912..62342,y=34758..55202,z=5912..31510
-on x=63138..67807,y=40967..45502,z=-23583..-10004
-on x=-73495..-56406,y=41511..71705,z=5127..32006
-on x=-23106..-1748,y=-86112..-68506,z=-39397..-15794
-on x=-52779..-45652,y=19079..39796,z=49639..57070
-on x=-79175..-53055,y=34141..54701,z=4583..26379
-on x=26517..36583,y=-42144..-26773,z=-80939..-45310
-on x=-47044..-23501,y=-79682..-68957,z=-6125..20082
-on x=-54276..-29269,y=-45877..-28470,z=-59917..-38428
-on x=-23998..7268,y=55542..81737,z=42421..63898
-on x=-94509..-71314,y=-22686..18,z=-22100..-3746
-on x=-74781..-51149,y=-52534..-38370,z=3590..25687
-on x=-50373..-45841,y=-28285..-6170,z=-78397..-51064
-on x=65214..88034,y=24285..54786,z=-6183..23064
-on x=-31431..-12447,y=30325..57775,z=-63903..-49927
-on x=61099..80636,y=13112..36642,z=9225..37647
-on x=49227..58281,y=-72690..-46916,z=6114..26803
-on x=49316..61601,y=52184..69325,z=-34233..-8387
-on x=-8085..8021,y=-67231..-31814,z=-70317..-60600
-on x=43203..69568,y=-38081..-12285,z=-48526..-36342
-on x=67521..77200,y=-30319..-21173,z=-39992..-23255
-on x=-24435..-910,y=-28467..-9403,z=74299..85044
-on x=-68278..-46406,y=32963..49543,z=-36781..-5810
-on x=38044..59188,y=-39588..-15132,z=-78211..-59118
-on x=-16359..8709,y=-83601..-70086,z=-41614..-18943
-on x=-67079..-53633,y=-47134..-17665,z=-33888..-12731
-on x=-10203..25856,y=-65803..-37565,z=-80018..-48632
-on x=-20788..12729,y=-7421..3011,z=-96951..-78895
-on x=36480..60613,y=-69685..-56878,z=-42024..-22583
-on x=-81439..-53199,y=30801..58467,z=5317..21254
-on x=20078..46684,y=47464..77622,z=25360..46337
-on x=51573..75800,y=-51556..-33538,z=-48932..-30407
-on x=-19220..-9675,y=29516..54528,z=58963..71318
-on x=-89405..-71366,y=329..20658,z=17088..39485
-on x=48807..65272,y=-11182..-2515,z=33689..67952
-on x=-62185..-33194,y=-32027..-4968,z=47218..70105
-on x=-49260..-25903,y=-59470..-34424,z=-75405..-44239
-on x=-69424..-62899,y=37068..55605,z=-3476..5226
-on x=-24786..-21772,y=66159..77802,z=-51515..-13605
-on x=-37464..-7009,y=-24318..-14439,z=-88882..-56080
-on x=13491..48426,y=-86533..-69233,z=-11101..8820
-on x=18137..36596,y=56982..87194,z=-26391..-7218
-on x=-73986..-65455,y=-40459..-25641,z=5811..22531
-on x=56480..72410,y=-23085..373,z=-54884..-44893
-on x=-72..9616,y=33541..62581,z=-76024..-41529
-on x=5811..29667,y=76040..84275,z=3794..19078
-on x=31769..54691,y=-72297..-54884,z=11568..30599
-on x=38705..40732,y=53076..81496,z=-20757..9517
-on x=-13332..6003,y=-92149..-67470,z=13826..25305
-on x=-36361..-18175,y=-7198..5782,z=-85116..-65760
-on x=72099..89917,y=-35339..-6561,z=-18702..3529
-on x=14916..21176,y=-17870..14037,z=66567..80508
-on x=15650..31204,y=-65831..-46311,z=-71381..-47512
-on x=57185..76911,y=-2966..9137,z=39217..42970
-on x=-21218..-9089,y=60853..66598,z=-65895..-49482
-on x=12217..37563,y=-33737..3116,z=-79589..-71994
-on x=-24435..-1179,y=61379..96140,z=5111..13700
-on x=-47837..-24016,y=24730..38884,z=62380..65554
-on x=-79483..-69531,y=-3888..15433,z=-50484..-22944
-on x=-74982..-54797,y=-59699..-43075,z=1572..23991
-on x=22536..39698,y=-69795..-36738,z=47715..68342
-on x=-16003..-2396,y=70179..88747,z=17005..49146
-on x=22554..32407,y=-80100..-66240,z=-22164..-1729
-on x=-13583..-6556,y=61638..96038,z=-13494..-7490
-on x=12236..31240,y=-82560..-68788,z=-44096..-25380
-on x=-40040..-32781,y=-7855..12988,z=-87105..-60530
-on x=-50283..-24489,y=43700..58185,z=-45955..-26056
-on x=-62151..-46123,y=-75045..-45373,z=7112..34441
-on x=-56568..-39255,y=40679..69755,z=31070..49467
-on x=-6977..-4516,y=-50981..-37765,z=53142..81539
-on x=58949..79172,y=-38054..-11546,z=-55399..-43258
-on x=12967..29648,y=55993..84110,z=30089..48256
-on x=9968..38213,y=-75798..-54386,z=-28175..-12716
-on x=-44311..-7274,y=-80148..-59517,z=-14241..1861
-on x=18546..46490,y=-65733..-40860,z=-62118..-37572
-on x=-2271..26766,y=64511..83099,z=-51416..-25251
-on x=-90601..-71814,y=6192..25836,z=-32952..-14912
-on x=-26569..820,y=-10340..22351,z=61333..79466
-on x=-9709..3302,y=57621..71334,z=28122..53666
-on x=-75028..-52307,y=-3116..31441,z=33506..37957
-on x=35446..66149,y=25301..62450,z=-42423..-34112
-on x=-63763..-42164,y=-66010..-55301,z=-33540..-2074
-on x=-51080..-35163,y=-76248..-59521,z=22498..45227
-on x=48050..69664,y=48245..50439,z=-43346..-10038
-on x=61239..88801,y=63..10257,z=16547..29381
-on x=1461..12900,y=58310..67961,z=43110..67087
-on x=-64925..-51002,y=-47822..-29558,z=-38492..-17616
-on x=-30974..-14734,y=18687..30483,z=-86407..-67736
-on x=21136..43241,y=38836..54209,z=37478..60357
-on x=57476..77217,y=8846..25808,z=23991..44615
-on x=-23202..8649,y=-73327..-58989,z=-56906..-37911
-on x=58046..60268,y=-13295..4247,z=-61356..-39657
-on x=-71350..-45157,y=-41433..-31528,z=21203..44630
-on x=-94860..-69586,y=8228..33917,z=-6572..28035
-on x=24637..30475,y=51768..66115,z=39375..45973
-on x=-12988..12447,y=-80825..-60518,z=-20069..5301
-on x=-91600..-69209,y=-30521..-20316,z=11234..22677
-on x=-7421..-3636,y=-40727..-17229,z=64137..86775
-on x=59523..76484,y=6288..39603,z=-22000..-3094
-on x=63294..78222,y=-50184..-33082,z=-14565..19078
-on x=43627..60468,y=-52929..-40706,z=27002..50322
-on x=-32412..-6949,y=-90331..-73353,z=522..4134
-on x=-19932..-835,y=43302..58246,z=55217..67369
-on x=-22140..-1580,y=72424..88097,z=-30186..-4633
-on x=32994..47253,y=35570..47312,z=-74294..-42106
-on x=-60383..-49562,y=42559..74096,z=-23034..-766
-on x=47172..63440,y=-69364..-45568,z=-6117..10614
-on x=-81089..-61599,y=27441..62058,z=12608..35576
-on x=34923..69365,y=13653..38800,z=-77261..-43750
-on x=41054..61704,y=27512..34800,z=-57849..-40312
-on x=22144..34980,y=19631..29700,z=-86432..-55572
-on x=-12122..15745,y=-75805..-66340,z=36641..49918
-on x=30910..41979,y=-51045..-39883,z=40132..60580
-on x=16087..41362,y=69442..78280,z=-20140..-6620
-on x=-2498..12657,y=66055..88671,z=24902..37865
-on x=-53541..-33332,y=40522..63114,z=17690..23330
-on x=-25486..-14848,y=-22167..-10217,z=73479..81666
-on x=-49904..-21142,y=-32441..-19796,z=-65094..-48964
-on x=-77185..-52199,y=-43621..-29163,z=-2980..29505
-on x=47628..62285,y=-27324..-6159,z=54741..76523
-on x=-68672..-53382,y=13874..29953,z=-52436..-24787
-on x=24729..35483,y=-39432..-31141,z=55462..68911
-on x=-85643..-60966,y=-16215..708,z=27959..49870
-on x=-70023..-44399,y=28742..46887,z=-48656..-27334
-on x=13237..38992,y=72316..93275,z=9371..18339
-on x=3601..27855,y=-53221..-37588,z=-79390..-59309
-on x=73624..87421,y=647..26355,z=-30957..-5423
-on x=-70851..-47736,y=-45072..-24946,z=37815..58192
-on x=-19325..7381,y=-20048..-3907,z=70818..83270
-on x=65532..77053,y=-13023..4822,z=-55535..-29335
-on x=-77943..-60312,y=18202..34941,z=12108..41626
-on x=-76720..-58569,y=-42973..-22667,z=4073..29355
-on x=46174..59694,y=44339..51223,z=28653..59550
-on x=-44238..-29509,y=-87529..-58268,z=5760..16252
-on x=-62428..-54590,y=7475..19744,z=-69355..-39348
-on x=-40490..-24926,y=11223..28033,z=53505..73784
-on x=-61821..-41060,y=-65031..-26842,z=33274..53261
-on x=-89724..-64590,y=-19721..-327,z=-26607..-9599
-on x=-34431..-20563,y=50755..68833,z=-56541..-35697
-on x=55247..88432,y=7981..44436,z=7759..16910
-on x=-66628..-53580,y=-62370..-42076,z=16219..33691
-on x=14414..42406,y=-85437..-53970,z=17700..34996
-on x=-83467..-76235,y=5890..16777,z=-7053..13257
-on x=38443..46746,y=-76565..-51921,z=-7708..3586
-on x=-68726..-52259,y=32484..44835,z=25077..37882
-on x=-74597..-50281,y=-11754..6056,z=-62256..-26807
-on x=-33170..-16817,y=59734..75543,z=5119..42517
-on x=-37088..-7851,y=21070..40392,z=52712..84858
-on x=-38459..-5698,y=-80141..-51196,z=-42325..-17367
-on x=18454..47906,y=-85662..-56686,z=14396..33029
-on x=-41249..-27006,y=59650..74737,z=-35603..-18205
-on x=-35206..-18846,y=-12542..-592,z=-88090..-60234
-on x=62210..77161,y=-43088..-16886,z=24074..54283
-on x=-15430..13172,y=1904..22129,z=-80564..-70232
-on x=-29859..-12978,y=56105..82581,z=-48724..-23210
-on x=-56887..-50053,y=-29444..-16505,z=-61442..-38029
-on x=30604..54367,y=46212..53964,z=-52852..-34343
-on x=70181..78863,y=-45106..-13492,z=-9745..19529
-on x=8322..22435,y=42430..55347,z=52882..64672
-on x=-69478..-61259,y=1778..24792,z=-63998..-37991
-on x=16179..23834,y=49247..61008,z=51575..70785
-on x=-92447..-65736,y=-35679..-10409,z=-19722..-7466
-on x=-9579..2162,y=-80611..-59056,z=-42233..-29154
-on x=48383..66349,y=-12960..16968,z=-58258..-46009
-on x=-32357..-9984,y=-68069..-49239,z=31105..47676
-on x=66946..83179,y=-5224..11437,z=-43928..-24041
-on x=13814..39369,y=-76170..-41530,z=-56800..-40886
-on x=62282..72077,y=17785..48293,z=8677..37715
-on x=-44382..-29991,y=60002..79555,z=3843..17588
-on x=75247..83629,y=-28545..-6291,z=-10819..-2122
-on x=-956..26375,y=-81524..-71549,z=26313..43930
-on x=30012..36383,y=34248..52598,z=56265..66326
-on x=-48730..-24738,y=-80273..-57415,z=6805..13225
-on x=-58593..-47213,y=-18537..4027,z=54774..80145
-on x=3810..25698,y=70004..81369,z=-51070..-24151
-on x=-24437..-5093,y=-86059..-69302,z=3319..7790
-on x=-31365..-19431,y=-88889..-63893,z=17698..43049
-on x=19977..46038,y=4288..24488,z=65477..72640
-on x=9206..45518,y=-49253..-18169,z=-75545..-51533
-on x=-4478..11513,y=-3222..14383,z=71041..92715
-on x=-83552..-57412,y=-35665..-16854,z=15963..44817
-on x=34730..53067,y=44234..58027,z=31635..55954
-on x=33780..55108,y=-85336..-63582,z=-60..19260
-on x=-60709..-48773,y=27826..52995,z=47092..56789
-on x=4599..16485,y=59775..83142,z=-8444..14929
-on x=39634..47449,y=-10709..-3483,z=56673..65961
-on x=17954..21090,y=46398..64655,z=40116..72009
-on x=51479..62837,y=-27485..-1712,z=-59021..-32232
-on x=26397..48116,y=49913..64456,z=32763..46893
-on x=-40166..-6453,y=54294..88546,z=19469..46914
-on x=-11587..-3465,y=-76385..-45142,z=-55088..-47775
-on x=25337..58818,y=-73241..-50645,z=-60403..-31242
-on x=18670..27833,y=10699..25997,z=-78411..-53777
-on x=57409..75450,y=40962..60348,z=11226..25913
-on x=55748..74851,y=-54477..-43708,z=-28494..-15041
-on x=26830..53176,y=-67735..-51525,z=13985..45082
-on x=-8911..13239,y=-74882..-67577,z=-51935..-26067
-on x=63953..87466,y=35424..47855,z=-20625..-3868
-on x=-20694..2154,y=-3805..15541,z=68000..85521
-off x=-64858..-38773,y=-22979..-12516,z=-72865..-52375
-off x=-36214..-19494,y=-48856..-31044,z=55849..67059
-on x=18769..39214,y=59223..74065,z=-25526..-7466
-off x=4093..19302,y=65172..80228,z=-18875..4459
-on x=-72853..-64913,y=-44437..-23173,z=16546..27389
-on x=-74000..-63343,y=-17952..-11976,z=26071..46600
-on x=55718..89196,y=8034..31868,z=23749..41136
-on x=-61312..-25331,y=60154..82342,z=-29251..-12808
-off x=57932..88657,y=1045..32675,z=23992..37899
-on x=41352..50542,y=-36888..-13463,z=-58939..-54480
-on x=-51121..-21791,y=-6418..16683,z=54132..72199
-on x=22624..43927,y=-9683..12070,z=69475..91968
-off x=-23521..-7662,y=64707..75601,z=-43845..-16424
-off x=-42653..-21236,y=-21354..4353,z=-77029..-71014
-off x=-4664..4504,y=52543..79156,z=29919..46671
-on x=35818..65014,y=41342..70254,z=9185..33026
-off x=-52865..-28342,y=-58289..-33044,z=45771..63238
-off x=-16924..22809,y=60544..81137,z=-66967..-44290
-off x=-30590..-350,y=68584..95548,z=-15319..250
-on x=41065..61522,y=-21779..-15976,z=-79786..-53698
-off x=9525..33346,y=-80916..-56811,z=-61811..-23799
-on x=-85466..-61472,y=-42722..-26161,z=-7728..13705
-on x=29179..51220,y=41045..65007,z=-55867..-32532
-on x=-73524..-55904,y=32162..34120,z=34985..43261
-off x=-15158..643,y=-57242..-24535,z=-75496..-57777
-on x=-26523..-3554,y=-24061..-7071,z=66096..78008
-on x=-68958..-44626,y=43052..58235,z=-27098..-9342
-on x=-84084..-64394,y=-24045..-11011,z=-38978..-15498
-on x=62184..82898,y=-27380..-1888,z=-61447..-39051
-on x=635..23767,y=-54960..-40730,z=67501..86970
-off x=32259..60280,y=41478..46289,z=-55818..-39638
-on x=-52256..-32444,y=38811..69688,z=31521..54783
-off x=2128..5231,y=-81966..-55811,z=-38574..-17048
-on x=-65624..-36454,y=-49647..-30716,z=28718..58149
-off x=33334..50958,y=-3486..16115,z=53857..80381
-on x=-58284..-34017,y=47293..84420,z=-25796..-2948
-on x=-58130..-39664,y=53973..69546,z=2549..17650
-on x=-70876..-46014,y=-61557..-30740,z=19380..39271
-off x=64070..92955,y=7220..28103,z=-4003..32849
-on x=-17535..-470,y=-22144..-17298,z=61197..92477
-off x=13631..45033,y=48414..60988,z=-54682..-42444
-on x=-83453..-72620,y=-22121..-6685,z=-31229..919
-off x=-71588..-48104,y=23697..43494,z=32068..53528
-off x=-73315..-58835,y=29130..39683,z=1818..34677
-off x=-44335..-24761,y=-39652..-28447,z=41105..78848
-on x=1354..23297,y=-87726..-59186,z=16976..34498
-on x=-77045..-53438,y=-9837..13204,z=43872..53252
-on x=-58059..-39277,y=35454..70346,z=22294..32697
-off x=8134..22913,y=27396..53406,z=52828..84609
-on x=53526..67803,y=41292..59253,z=-35827..-26953
-on x=-72413..-43823,y=-58264..-44414,z=-9911..-2235
-off x=-27147..3300,y=2538..20789,z=-91151..-70237
-on x=46087..67095,y=-48984..-29278,z=-54699..-40903
-off x=63670..64821,y=-41248..-3363,z=24908..46333
-off x=2632..22202,y=24847..51542,z=-80467..-64757
-off x=-34027..-18196,y=-47105..-23465,z=-68869..-55326
-on x=41678..54255,y=2720..29359,z=46231..75450
-off x=-4213..20821,y=48132..81158,z=-63979..-27510
-off x=-2170..16894,y=56662..79540,z=44419..50160
-on x=-19834..2114,y=-46280..-10250,z=-77417..-57318
-off x=65385..89282,y=26089..56411,z=-28795..-1266
-off x=-86617..-60352,y=-34282..-6783,z=24678..35755
-on x=-51880..-22038,y=-48878..-34685,z=-54503..-34099
-off x=-6185..7523,y=-80929..-62538,z=-49136..-32906
-on x=-69472..-44311,y=-59766..-35060,z=7986..17809
-on x=-45836..-23351,y=34528..58283,z=-62062..-39907
-off x=-65989..-53476,y=-18..21291,z=45332..55683
-on x=57549..70543,y=6235..34900,z=18154..39248
-on x=-32196..-20894,y=-88953..-64565,z=17496..42389
-on x=-72208..-61402,y=-59142..-31400,z=-29975..-19314
-on x=-25537..-17772,y=63785..78096,z=38132..43670
-off x=-10614..4852,y=1037..34081,z=-88803..-72167
-off x=-71969..-40008,y=45531..61020,z=29194..44542
-off x=-97625..-62135,y=232..24412,z=-6113..4401
-off x=28968..62715,y=-63990..-41136,z=-34394..-16528
-on x=7127..29392,y=-25905..2139,z=67977..79951
-off x=47116..69445,y=43251..70092,z=-35789..-7878
-on x=46541..71892,y=4788..27226,z=31207..52344
-on x=-39441..-22248,y=19261..53073,z=-62518..-57715
-on x=56116..84722,y=-31369..-3302,z=-50073..-34755
-on x=-65536..-47632,y=22971..39112,z=25566..54444
-on x=-8629..13229,y=-55339..-45230,z=46953..70772
-off x=-91996..-64629,y=-22054..5640,z=-18034..3409
-off x=-79435..-68358,y=-50488..-21783,z=-23189..7130
-off x=-31853..-18496,y=35962..43812,z=-78415..-57499
-off x=-53097..-43476,y=-8868..6641,z=-76785..-54439
-on x=18376..52266,y=-11181..7160,z=-77629..-69712
-on x=-53162..-28262,y=-41919..-8199,z=-62348..-54228
-on x=2939..28130,y=61801..91442,z=-11519..4615
-off x=8319..29664,y=-14307..17453,z=59897..95416
-off x=46661..65036,y=-13305..7325,z=-75798..-62581
-off x=-37957..-23478,y=47391..59983,z=35372..55611
-on x=61515..88770,y=-17267..12084,z=-23518..7771
-on x=-48305..-25680,y=-81436..-53793,z=-2439..29818
-off x=-42779..-39019,y=51297..69812,z=37178..50350
-on x=40203..63867,y=-66235..-51382,z=-34991..-11770
-off x=55954..70659,y=33330..68709,z=-12043..-2384
-off x=-29487..-3952,y=-3496..10014,z=-79573..-61455
-on x=55711..74934,y=26358..37763,z=-46597..-28486
-on x=36775..62937,y=43496..55938,z=21471..41166
-on x=-27922..-2750,y=75238..84184,z=-16664..-38
-off x=50743..58719,y=-44526..-33474,z=-67293..-43466
-on x=9282..16932,y=-96919..-64095,z=10331..30664
-off x=-95473..-72710,y=-28988..-8136,z=-10970..9409
-on x=-85389..-67764,y=13685..19641,z=-9526..33
-off x=19898..50323,y=-68676..-46162,z=-62425..-39053
-off x=60425..65023,y=-8453..14534,z=-58877..-45278
-on x=-25428..-720,y=-80104..-62018,z=-1677..13124
-on x=-48530..-37691,y=52321..74595,z=-26453..-21715
-off x=-14126..19313,y=64721..76129,z=-54258..-25715
-on x=-24136..-16023,y=7633..27624,z=56759..87267
-on x=-41213..-21916,y=-34990..-16249,z=-76987..-54730
-on x=-22621..13916,y=62123..74807,z=39068..51378
-off x=-16365..-9094,y=-6481..22514,z=-93559..-64057
-on x=9583..36843,y=-71013..-49912,z=33751..53993
-off x=-65469..-44611,y=25911..46482,z=40095..65714
-off x=-57145..-39149,y=48498..63803,z=12913..42535
-on x=57651..61770,y=-28419..-6391,z=40364..49746
-off x=-75576..-61139,y=-10503..5482,z=-46770..-27191
-on x=-49397..-16777,y=54120..63032,z=-60010..-24837
-on x=-4249..14013,y=20636..52130,z=-75802..-60246
-off x=15523..45332,y=14920..27687,z=-85777..-65031
-on x=50324..75616,y=-58333..-39550,z=1860..9173
-off x=-10760..13032,y=63819..67101,z=30106..45713
-on x=-54735..-16505,y=27874..38730,z=57002..66636
-off x=70142..77459,y=-34967..-4642,z=-28373..-18318
-off x=12924..33851,y=50318..76053,z=33776..47995
-on x=16848..37045,y=39096..53275,z=-64850..-39585
-on x=-48828..-46005,y=-37976..-11049,z=49769..63745
-on x=46761..70212,y=7696..34085,z=-72620..-51191
-on x=-10919..12760,y=-7270..780,z=-93456..-79203
-off x=-12629..17924,y=-81153..-62978,z=-38501..-34017
-on x=33047..42293,y=21628..52131,z=-74825..-42520
-off x=-84656..-57493,y=-29917..-648,z=-39715..-19579
-off x=-39926..-16074,y=-75937..-72179,z=-10631..-2155
-off x=42338..63456,y=-10927..24423,z=-69719..-51820
-on x=-37883..-27447,y=-17784..-7063,z=53825..76661
-on x=72563..90078,y=-2936..19833,z=-26987..-9538
-off x=-61796..-59595,y=-52405..-15746,z=-41889..-25050
-on x=-72693..-53462,y=-25228..-8310,z=16685..25001
-on x=16133..36168,y=-81922..-62779,z=4714..35868
-off x=-38135..-35256,y=40495..63520,z=33859..50700
-on x=-46578..-23290,y=-38997..-19018,z=-80304..-53511
-off x=-68102..-46534,y=33132..63478,z=23336..43023
-on x=-46386..-13403,y=53450..62050,z=34840..56841
-off x=-69714..-58168,y=42581..60977,z=-43045..-15973
-off x=38139..58983,y=33227..67599,z=37065..46982
-on x=-68743..-57954,y=34901..65113,z=14186..30879
-on x=-27159..-2946,y=58211..72993,z=24144..40462
-on x=-12488..3541,y=24512..47183,z=61876..94098
-off x=-21147..-2889,y=12986..18356,z=-92621..-55775
-off x=35806..71388,y=1638..37737,z=-64849..-46796
-on x=-57793..-36707,y=58839..68998,z=-17534..3308
-on x=-59750..-40225,y=-69581..-44645,z=-9931..5157
-on x=-8485..20686,y=-65003..-40249,z=51991..65690
-on x=-39133..-20148,y=9640..31346,z=-93338..-57726
-off x=32301..60879,y=-67384..-38498,z=38892..50795
-off x=-17417..849,y=-29007..-5825,z=75615..94231
-off x=4371..14179,y=18655..31552,z=69630..80480
-on x=-30156..1315,y=-75493..-59188,z=-45573..-23628
-on x=-19974..-7274,y=48510..70738,z=55087..64610
-on x=21319..39947,y=-76865..-54489,z=-36911..-27790
-off x=19086..32378,y=42017..57587,z=-68959..-44763
-off x=-83..8471,y=-72344..-50195,z=36481..68586
-off x=-36375..-25938,y=-69174..-48526,z=-48854..-46853
-on x=-15285..11416,y=-76130..-59563,z=-46407..-22439
-off x=-69367..-52426,y=25391..46453,z=-10234..7828
-on x=-72727..-60225,y=-38827..-25690,z=-42223..-18667
-on x=42838..64386,y=12680..29933,z=-68831..-52183
-on x=18070..42298,y=-78992..-57543,z=-20906..-13301
-on x=-55875..-39308,y=-55098..-35781,z=30971..57698
-on x=35119..47623,y=-73663..-54295,z=-3539..26342
-on x=-84065..-61161,y=-3207..33256,z=-32001..-15249
-off x=-54756..-30571,y=58767..68023,z=12370..28119
-off x=-87490..-62979,y=5645..40459,z=-21364..-3385
-on x=24194..37541,y=-33900..-28321,z=-78880..-54593
-on x=-62478..-38761,y=22212..41436,z=36708..62622
-off x=56713..68194,y=-20789..-14297,z=-61095..-50322
-on x=-72902..-44221,y=-42793..-26280,z=-48733..-33791
-on x=64373..86115,y=15064..33167,z=16921..49077
-off x=24753..42194,y=-6759..12099,z=70552..85054
-off x=-12199..24098,y=49705..63058,z=-63860..-38435
-on x=3734..42354,y=61212..95571,z=-10562..17698
-on x=-17408..-5695,y=-609..8253,z=-97454..-74672
-on x=-42167..-22341,y=-71935..-42581,z=-50253..-24178
-on x=-54481..-38663,y=-16909..21415,z=-77181..-44426
-off x=-11477..9297,y=-50630..-26321,z=55462..79296
-off x=-84974..-60153,y=-48601..-19827,z=8848..26585
-on x=-62596..-36034,y=-58415..-41586,z=-55666..-27573
-off x=47430..67745,y=18197..49591,z=31865..42439
-off x=23925..32353,y=32122..54623,z=57938..79131
-on x=-16801..4162,y=-98731..-68459,z=4760..29002
-off x=20414..42287,y=44769..56648,z=-67173..-38591
-on x=57757..79682,y=-35686..-15384,z=37594..53205
-on x=43425..77866,y=-54033..-33577,z=-14291..1892
-off x=61941..77486,y=-15977..7549,z=-42755..-23589
-off x=-46801..-17722,y=-76833..-62069,z=-16214..21958
-on x=-33113..-17668,y=36644..50102,z=50787..74022
-off x=60521..75760,y=23551..43986,z=-20580..-6589
-on x=-14911..14191,y=57578..66612,z=-60746..-39130
diff --git a/2021/inputs/day_23.txt b/2021/inputs/day_23.txt
deleted file mode 100644
index 3d20443..0000000
--- a/2021/inputs/day_23.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-#############
-#...........#
-###B#B#D#D###
- #C#A#A#C#
- #########
diff --git a/2021/inputs/day_24.txt b/2021/inputs/day_24.txt
deleted file mode 100644
index 9c0248a..0000000
--- a/2021/inputs/day_24.txt
+++ /dev/null
@@ -1,252 +0,0 @@
-inp w
-mul x 0
-add x z
-mod x 26
-div z 1
-add x 12
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 6
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 1
-add x 10
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 6
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 1
-add x 13
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 3
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 26
-add x -11
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 11
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 1
-add x 13
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 9
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 26
-add x -1
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 3
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 1
-add x 10
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 13
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 1
-add x 11
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 6
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 26
-add x 0
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 14
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 1
-add x 10
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 10
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 26
-add x -5
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 12
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 26
-add x -16
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 10
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 26
-add x -7
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 11
-mul y x
-add z y
-inp w
-mul x 0
-add x z
-mod x 26
-div z 26
-add x -11
-eql x w
-eql x 0
-mul y 0
-add y 25
-mul y x
-add y 1
-mul z y
-mul y 0
-add y w
-add y 15
-mul y x
-add z y
diff --git a/2021/inputs/day_25.txt b/2021/inputs/day_25.txt
deleted file mode 100644
index 15fb35a..0000000
--- a/2021/inputs/day_25.txt
+++ /dev/null
@@ -1,137 +0,0 @@
-..>>.....>.v.>..v.v..vv..v..>.v.v.>>..>v....>.>>..v>vv..v>..vv.v.v.>>>..v...>.>...v..>v...>>.>>....>...vv..>>.v>>.>>.vv.v.....v.vvv>.>>.v.>
-vvv>.>v>...>>.v>v>..>.v...vv..>>vvvv...v>..v>.>v>>..>vvvv>v.>....vvv.>.v...v..>.v..vvv>v>..v...v...>>>...vv......v>v....v>.>>.>.>.v.....v..
-..vvvv........>>..v>......>vv>>v...v.>.>..>v.>..>>>.>...>v.....v>.v....>v>>.>.....v.>...v.v>...>.>........v..v.v.>>v.v>.>v...>vv>..>>>.v..v
-.>>v>vvvv>>v.>vv>v.....>.v..>...>..>v>>>.v.v..>.>>>.v.>...>v...v....>........vv.>>v..vv.>>.>..v.>.>>v.v.>>...>>>v.>v>..v...>..>...>>>v..v>.
-.v..v.v.vvvvvv...vv..>>.>......v>..v.>>..>v>>.v>v.>.v.>>..vv...v.>..v>.>.>v>>.>v..v.>>.>.v>v>.v>>>vv>.v..v>v....v.vv....v.....v..v.>...>.v.
-v..>..>.>....vv..vvvv.v..>>.>.v.>v>..vv>..>..>..>.vv.vv.vvvvvv.v>vvv.v>v.v..>..v.vv.vv..v..>>vv...v.v.v..>..>v....>.>..v..v>....v>>>..>..vv
->>..>..v.>>..>>>.v.>>.>v.>..v.v>..v..vv..>vv>..v.>.>v.v..v>...v.>v>.v>vv>v>.......v........>.vv>>.>.v>.>v>..v.vv>vv>>.>vv...v.>>v>v.vv...vv
->v>..>v.>v.vvvvv>>.v.v.v>v...>>.v>.v..v>>v...vv..>...v.v.v.vvv>.>>vv.>...>..v..v.>>.>.>..>...>....v.>v....v.v.v>>v..>v>.>.v>v.>v...>..v..vv
-v..>..v..v>.>>.>v.....>v..>.v.v..>.>>.>>v...v>vv..>.v.>.v>.v>.v......v.>>>..>>>.>>..>.v>.vv>>..v...v...>...v>..>v>.>>v>...vv......>>v...v..
-.....>vv.....v.>v>...>>.>>.>>.vv........>v.>......vvvv...>v...v.v>vvvvv>..v.vv.>v>>vv.v.>.>.>....vv...v....>.v>.v>v..>v.v..>.>.v.>>v.>.....
-..v.>>.>..v>v.v.v>.v.v.>v...vv.>v.vvv>.v>>.....v>>.vv..>v..vv>>.vv..>..>v.vv.vv>>vv....v..>.vv..vv.>v.>vv>v>.v>..>>.>v..>>.....>>v.....v>v.
-v.>v.v...v....v.v>.vv.>..>>v>v>.>v>...>.....>.>>...>>..v...>..>v>>.v..>>......v>v>.v>.>>.>....>v.>..v...v.>>v>v.v..vv>>.v.>...>vvvvv.vv...v
-..>v...>.vv.>.v.v..>v.v..>...>v.>>.v.v>..vv>>.v.v>.>v.>..v.>.v>....vv.v.>.v>......v>.v>..>>..vv..vvv.>.>..>.vvv....>v>...>>>.v.......>.>...
-.>vv...v......>vv.v.vv>...>v>>v.>>>>....v.v>.>.>v....>.......>..v...vv>.v....vv...vvv.v.vv>.>>vvvv>v..v....vvv.v>....v.....>...v.v>vv.v...>
-..>.vv>vv>>>v..vv.>..>>....v>v.>..>vv>....vv.v.vv>.>..>...v...vv>v.v>>>v>>...>v..>>.>..v>........v.vvv.v.v.v>..>..vv.>v.vv..vv>vv.>.>>.>>..
-....>...>....v..>v.>...v.>v.>v.>.>v>.v.v>>.>...v.>>v.>vv.v>>v..>.>>vv>v.>.>>..v....>vvv.v>...>...v>>>v>vvvvvv..v...vv....v.>.>vv....vv>...v
-.>v>.v.vv..vvv..v>>>vv.v>..v.>vv>...>.>v>v>..>......>>v....v.>>.>>>>...>.v>.....v.v.>.>.>.vv>>.>.vv..>>v.>v...vvv..v..v..>........vv.....>v
-...vv>v....v..vv..>.>...>>>>vv.>...>>.vv>..v..>....>.......v>.v.>>v>>v>>v>.v.vvv.....>>>>v..>v>>..vvvv.>..vv>v.>vv.v....v..v.v>v>>>v>v.>.vv
-v..vvv..vvv>>.v>..>v>v>.>>.vvv.vv>..>>v.v......v....v>..v...>..v.>v>vv>.v..v>vv.....>>........>.vvvv>..>v>.vv.v..>..>v.....>>.>>v.>>vvvv.v>
-..>.v>.v.>.vv.>....v.v.>v..>v..>v>.>...>.v.>..v>..>vv>.>>.......v..>>vvv..>>..>.v>..v...>....v.>v..>.>..>>.v>..>v.>..>.>....>v>..>>.>.v>>.>
-..vvvv..vvvv..v..>.v..v...>>vv.>>.>..>.v>>>.>..v>>.vv.>>.v..>v.>..>....v>>v>..>....v....>.>..>v>>...v...>>.vvvv..>>..v...v>v>.v.>v>.>.>.vvv
-..v>v.vv>>.v.>>.>.>v.v>..>>.v>.v.v..vv.v>....v....>>.vv..>.>vvv.v.v.v..>..vvv>>..v>vv..>>.vv...>.>>v.>v...v.>vv>v.>.>v>.v..>>vv>.>>..>>v>..
-....v>v.....>v>v.vvv..vv....>..vvv.v.>.>.>...v>.>..vv..>>.v....>.v.>>.>v>>.>>...v...vv.....vv.>.v.....>.vv>..v>vvv>....>...v>>>v>>>...>.>v>
-.>...v.v...v....v....v..>......v>v..>>.>.>>.>vv.vvvvv.v>..v..v>..v.>v....>..v.vv>vv>.v.>v.>.....>..vv...>....vvv>....v..>.vv>.v>>>>.vv.....
-v.>v..>..vv..v.v>vv>v..>...>....>vv.v>..>v.>v..>.v.v.vvv.>..>vv..v>>.v..>v>..v.>>v...>...v.>.>.....>..vv>vv...>..v..>..v>..>>..v>..v.......
-.>v..v.>v>v..vvv>..>v....v..>.v>vv>..vv>>v...v.>.v.v>.>v.>v.>>>vv>v...v.>...>v.v>.v..>.>v..>...>.vv>>.v.v.>v..>v..>>.v..>vv..v>.v>.........
->..vv.vvv>.>..>v>>vv>...>v>>v......v.vv.v>.v..vv.........v..>...v.v>>v.>.v.v..v.>.vv>v.....vvv>..>.>v.>...v....>.>.>>.v...>.>..>.>v>vv.....
->.>..>>..vv>>>.>v..>vv>.>.>>v...>...>vv....v..>>v>...v.v>...vv.v...>>v.>v>.v.>>.v>v.v.v.v..v.vv>>.>.v..v.v..vv.v.>>vv>......v>>.v.>>.v>...v
-.v>..v.>..>.v.>>v>>.v.>>.v.....v>.>.v.>.vv...v...v.vv.vv>..>v..v>..>.>.>v.>v>.v.>>vv>.v..vvv>....v.>>.>...>.v.v.>v....v..>>.>..>>.>>>...v..
->.......v....>v.>>v...>...vv>vv......>..vvv>>v.>v....>vvv.vv....v.vv>v.>..>vv>v>.>.vv>.>>.vv..>.>>v.>>v..>>>vv>>v......>v...v>.>v.v..>.v.vv
->>v..>.>...v..>...>.v>.v>>.v.v>.vvv>v..>>vv....>vv>...v.v...v..>vv.....v..vv>.>..>....vvv....vvv.>.v.v.v.vv>vv.v......>v....>...v...v...>.>
->>v..>...>>vv.>v...v>.....v..>.....>.>>>>>>>.vv..v..v..v.v.....vv>>..>>.>.v.v...v>>vv.......>.v>.>.>vv.vvv..>v>>v.v>........>>>....>.vv...v
-.>vv.vv>v>v.v.>...vv.v.v...>>vv...>>.v..v.>.v>...>.v..v...vv..>.v..v...>.v.v..v...v.v..v.v.>vvv.vv.....>.v>.>.>..vv..v>...v..vvvv>vv>v..>v.
->.>v..v...v>.>>.vvv...v..vv>>..>>>vv>vv.>...>>v.v>>v>.v>.v.>vv>v.vv.>>>...>.>.v..v.>v...vv..>v>..v...v>>>>..>>>v>.v.v>.>v.vv>vv..v>>>vv>.v>
-v>v...v.>>v.>..>.v.v..>v.v.......>>>.>>v..v.>vv.....>>>v.vvvv..>.v.>.>.>v...>vv>v.>>vvv..v.v>....>v...>.>.v>...v..>v.>..v>v....>>v.vv.>v.v>
-.>............vv>..v>.>..vv.v.....>>>v>.>.v...vv..>>v>>.........v..v.v.>...v>.>v>>.v.....v>.v>vv.>..vv>.v>v.v.v...v>...>v.v...>v.v.>>>.v.v.
-.v.v>.>vvv.>.vv..vv..>..>...v>>v>...v.v.v>.v....>..vv..>.v.>vv>v>v..>>>....>.>..>.vv...>v>>.>......>.v>v....v>v.vv.v..>.vv...v..>>...v.>...
-..v...>..>....v.v>..v..>.......v.v.>>..v>>vvvv.v.>v>>>v>.>v>...>.vv>v.>.vv.v>.v>...>>.v>v...>....v>........v..vv.>..v.v..v...>.>.>..>>v.vv.
-.>...v..>.>vv>v.>...v...>v...>...v....>.>v>.vvv>..>>......>>.>>.>..v>..v.>>v>v......>>......>..v>>v.v.>.vv.>.v>>.>...vv...v.....vvv>>...v.>
-vv...v.>>>>vv.>v...>.....v>>>..vvv.>.>vvvv>v.>.>v>>>v..v>.>>v.....>>...>.>v...>>v>.v..v..v>v.v.vv>v>>>..>vvv..v..>....>..v>>v.vv.>.vv..v>v.
-....>>...>.v>..v>>>.vvvv>>.v...>vv..v.>..v>>v.v>vvv.>v>..>>.vvv>.v>.vv.>.>v>v>>.>.v..v>.>.>v.>v..>.>..v>...>>..>.....v>v.v.>v.>>>>vv.vvvv..
-..v.>vv....vv....v.>v>..>..v....>>vv.>>...>..>vv.>..>v>.v..v..v.v.v.v>v>..>......v..v>...>.v.vvvv>...v...>.>v...>v...>..vvv......>vv..v..>v
-.>vv..vv..>.v...>v..vv>.>>vv.v>...v>.v..>>.>.>v...v>..v.v.....>>.vv>v...>..vv>>v..v.v..>v.v>.vvv.vv>.>vvvvv...>>>>v>v>>....vv>..v.v.vv...vv
-.v..vvv.v.>>>v..>>v.>..>...>.>>...v......>.vv..>>v.v.v.>vv..v..>.>>..>.>v>.v>..vv.>v.vv>..>>>>vv..>..v...v.>>>>..>v.>v.v>.vv>....>>v>.>v>>>
-..vvv>v....v..v>.>v.vv>>>vv..>..>.v...>v.v>v..>>>..>v.v......>vv>...>...v..>..>v...v.>v>vv..>v.v>v.>>>>v.>...v>>.v>>...>.v>..v..v>v...>>.v.
-v.>>>>...v.>.v>.>v..v>..v.v.....>v...v...>..vv.>.v>vvv.....>...vv>...>.>.....v>.v.>>.v>...v..>.>..v...v.>>v...v>>..v>...v>..>..>....vvv.>.v
-.v>.>....>vv>.v.>>vv..>>.>v...>.>v...>>>v.>.vv>..v>>..v>v..>v>...v>.v.>>v.v>.>v....v>v>..v>vvv..>..>v>>>..>v.>.vv.v....>.v.v>.vv...>.>>v.v.
-.>v.>>...v>...>v...>v..>v.v....v.>.>>..>.v.vv>.>>v.....vvv.>....v..vvv.v..>v.....v....v.>.v.>v.>>>>..>v>v...vv.>.v>v>...v.>v.vv>v.>........
-..>>vvv....vv.v.>>vvv....v>..vv>.>v..v>v>.v..>...>.vvv.>>>>..>vv...>>>.v.v>.>.>v..>....>.........>v>v>.>v>>>v......v>>>.>..>>>.>......v>.v>
-v.>vv.>>>>v.v...v>..>v..v..v.>>>.....v...>v.v..v.>.v>vv>.>....>.v>v>.vv.>v..vv.v>.vv.v>vv>v>...v.>.>...v..>.v..>..v..>>>>...>.>>v.v.....>.v
-..v.>.v.vv..>>>v>>>...>>>.>....vv.....v>.>>.v>......v...v.>vvv>.>...vv.v>>...>v..v....v.>.v>v.v..v.>v.v.v.>.v>>vvv..>.v..>.v>v.>...v.vv>.vv
->...>v..v..>>.v.v>.v.v>.v....>v.vvv>.>>.vv>v..>.>>v>.v...v..>.v>.v>.>.v.>...>..>>vv....v.>>..>.>.v>.>.v>..v.>.>>>....>>.>v.>...>.>v.vv.v.v>
-.>......>..>>..v..>.>v>.v...>.>.>.v.>v..>v..v>.v>.....vv.vv>.v.v..vvv.>>>v..v..>...v..>..v.>v>>>>.vv.vvv.>>v..v....>v....v.>.>v>..>>...>>.v
->..v..v.v>v.v.>.vv....v......>..v>>vv.>..vv.>..>>v.v.>>v.v>...>.>>....v...>v.vv>v.>.vv.v....v..>>>..v.>>.vv>>vv.v>.v..>..vvv>.>v..v>...>..>
-v..v>..vv.>.....>.>>v>.>....v>>.>.v....vv.v......vv.vv.v..>.v.v..>...vv.v..>v>..>>v.>....>.vv>>....>>>v>>.>v....>>..v...>....>v.vv..v>.vv.v
->vv>v.v.>.>.>.>>....v.>>>v.>v.>...>.vvv..>v>.v.>>v....>vv..v.vv>vv..>.v>..v>>v.v>>..v...vvv...v.>.....v>v>.>>v>...v>.....>.>.>v>..>v.>.>...
-..v>..vv....>.v..v>.>.>>.v>.>....v>.>v>....v>..>vv.>>.>.vv>.>....>>v....>vv...v..>...v..>v>>>........>.>.v.>vv...v.>v...>>>.....>>...v>.v..
->...>vv..v.vv.....>.v.>.vv.>vv>>....vv..>vv.>vvv.vv..>v..vv......>..v...v.>......vv>.v...>>v..vvv.v>>..v.v>....v..>>..>v...v>>>v...v>.vv.>v
-vv....>.>v.....vv>.>.v..v.v.vv>v>v.>..v....v>>.v.>.>>v>..vv..v.>.>.>.v..v>v.>>v>v..vv..>.>.>v>v>...v>.v.v>>v...>v.v>v>v.>..>>v>..vv>..v>v..
-.>v....v.>vvv..v>.v>>.>.v.v.vvv>.>....v.vv..>...v..>v...v>...>>vvv...>.v>v>..>.v.>.>..vv>v>v>.v........v..v..v.>...>>v>>v>..vv>v>..>>>.v.v.
-v...v>....v....>>>v.v...v.....>...vvv>..v.>.>v>v>v>.>>...>>>>v>>.>>.......>....>v.>>v..>.v.>......vvv>..v..v>vv>..vvv>>v..vv.>v>v>>..>.>...
-..v>.v>>>v.>...>v>v..vv>...>>.v.>>.v..v..v.>.>v..v.vvv.vvv>v>.vv>.>v>v......vvv>.>.v.>...>vv.>.v>>..>v>>.v>vv.v>>.v..>v...>..v>.>.v.>.>>...
-v>vv>v>..>..vv...v.>.vv..v...>>vv>.>>>.v.....>vv>v>...v....>>...>v>v.vv.v...>.....>>v..>>.v.v.>.v.>...>>.v.v.v.v.>v..>>.....>v.......vv...>
-..vv.....v.....v>.>.v...>..v.>vv.v.v>vv.v.v.v>..v>.vvvv>..v...>.>.>.vv>v...>....v.>...>..v.>v.....>>...v>>.>.....v>v....v.vvv...v..>..v....
->.>>.v>>v>v>v.v..>.v...>.....>.v.vv.v.....>..v>v>..>v.>.>...vv..>>..>v.>..v>.>>.>>>vv>.>v>>..v..>vv>>.>.>>.v>>...>v>.v>v..v.>vv..v>.vv.v.v>
-.v..>..vvv......>..v>vv.v.v>>v.v>.....>.v...v.v.....v..v..>...>.>>...v>>....>>v......>....>v..>v.v.>....>>v..v>v....v..v>...v.v>.>.....>v.v
->.>..v>v.>..v...>.v.v>.vv.>>.vv.>.v>.vv.vv>vv>v.>v.>>..v>.v..>>..>vv>>>>>v..>...v...vvv>..>>....>..v.>..v.v>v.....v>vvv..>v>.>v.....v...>>.
->.v....v.v.vvv...v..>.v.>.v>....>>v.v>>.>....v.vv..>.>.....v...v.>..>..v...v.>.>.>>.......vv..v>.>v>.v.>v.v..>v..v.....>..v..vv>.vv>..vv.>>
-..>>.v..vv.vv>v.>v>>..v>......v..v..v..>>>>v..>.>..>.v.>..>......v.v>.>.>.v>>..v..v.v..>v>.>.>>>>v...v..v..>vvvv>.>vvv>....>.v.>>.>>.>...>>
-.>v..>>..>.>v.>>>.>>...>...>..v>..vv.>vv.v...v..v.vv..>.>....>..vvv....>..>.>v.>v.>>v......>vv>v...>...>>>.vv..v..v..>>>.>>v>.....v.....v.>
->v.v>.vv..v>...>.>v..>>...v..>..>....>...v.>v..>...v..>>.v>vvv>..v>>......v.>>.>.>.v>v>v>...>>.vv.vv....v.>v>.v>.v..v.>v...v.>>.....>.v..v.
-v....>v>v...>..v>>>>>>.>vv.>>..v....vv.>>>v..v.vv...vvv>.v..v..>v.vvv>>v.v.>v.v>.....vv>..v.v...>.>>....v>...>>>.>.v.vv.v...v..vv.>v>v...>>
-..v..v..>..>v>>.>vv.v>...vv..vv.>vv.v.v..vv>.vv>vv>.>v.v>.....vv.v.v>v>v..vv..v>...vv.vvv.v.>.v.v....>>.....>.>..vvv>>...v.>.>.v.vv.......>
-....>.>>..>..v>v..>.>v..vv>>>v...>.>...v.v.>.....vv..>.>>.>..>v.>>..>.>>>..v..v.>v...>v>>.>>..v.>..vv.vv>>v>.vv..>v>.>>vv...v.v.>vv.vv>.v.>
-.vvv..v..>.>....v>vv>>v..v.vv.v>..vvv>vvvv....>>.v>>...v.v.v>>>..v>...v..v>>v.>>.v.v>>.>..>>vv..v..>.vv.v>....>.>..>>......v>>.>.v>>..v.>>v
-.v..>.>v.....>>vvv.........v.v.v..>>.>>..>>.v..>>..>.....>...>v.v>.v..>.v>v>....>.......>>v.>v.v...>.>v....v..v.>.>v..vv.>..>>>v>..v.v>>>..
-.v..v.>.v>v>>..>..>v.>>v>>>v.v.v...vv>>.>>....>v.>vv.>...v>>.>v>v....>.>v..>.>.v.....>>v......v..vvv>..>v.v>v>>..vv....>.>....v...>v...v.>v
-..v..vv....>v..>>...v>.......vv..>.>.v>>.>>.>>.>.v..vvv>v..v.v>....>vv....v..>...v.v>.>v...v..>.>>>...>v..>v..>>>..v.>>>....v>.vv.>v......>
-..>...v.v.>v.vv>>vvv>v>.vv..>>>.v.v.vvv...v.>vv.>>.v>....v.v..>.>.v.v..v>..v..v.v...>....>>..>.v...vv.>.>v.>....v..>v..>>.>...vv>.v.v...>v.
-.>.>>.>....>vv>>>v.v.>v..v.v>.v>...v...v>>>>>..>>.......>>>..v.>v>...v>.v.>..v>..>v.vvv.>v>v>.v>.>>..>vv....>>v.v.v.>v.v>..v..v>>.>.>..vv.v
-...>..v.v>v>>.vv...v..>..>vv...>....v.v.v.v.>>.>v..v..v..>>>.>..vv.v.v..>v>.....>.v>vv....v.v>v.v...vv>>.v.>vv>...>>vv>>.>v..vv.....>v.v>vv
->>>v....v...>.>.>>vv...vv.....>v>>>>>.>..>>..vv..v>>...>.vv>..v...v>.>.>..v>.vvvv>>v>.>.v..>vvv>>>vv....>...>.vvv.>v>>.vvv>v>.vv>vvvv....v>
-v..>.>v>>vv.v.........>.>v>..v....>>v...>>.v..v.v>v..vv>vv>>...>>>.>v.>..v>..vv.v>.v.vv.v.>v>.>...v.>.>v.vv..>>..v>........>v.>>.vvv.>>v>..
-...v>vv..>>>...>.......v.v....>...>v>>v...v...>..>>v.v....>vv>..>>.v..v.vv..vvvvvv...v>>.v...>.v....>.v>>.vv.v>....>..>....v>.>v.v>>.v>>.>>
->.>vvvvv..>>v..>.>v>>>.......vv>v>......>>>>.v.....>.>v..>v..vv>>vv>...vv....>>..>.>..v.v.v...v.v>v.v>v..v>>>.....>.v...>v>>>......>>...v..
->vvv>..v.>vv.vvv>>>>>v>.>>vv.v>>...>v.>>..v.....v>>>.v....>>vv.>.>v>>...>>vvv.>..v>vv>.v..vv.v...vvv>>>.v.>v>>.v>>>.vv.v>.v>>vv...vv..v>..>
-.....>.>..>....vv...vv.vvv.v.>...>>v....>.v....>.v>v.>......v....>...>>v..v.v>.v..>.vvvv..v>>vvv..v..v>.>.>...>...v>....v.>v>...>>>v.....vv
-.v>..>.>...>..v.v>vv>.>v>..>>.v>v....>....v..v.v.vvvv>.v...>>>v.>v.>.v.v...>v...v....>>>vv>..>..v...v.vv.>v..v>...vv>v..>>>>v...>vvvv...>v.
-...v.>...>.v..>v..>.>>.>......v.v..v>.v..vvv.vv.>...v>>..v..v......v..v.>....>.>>.>.>>..vvv>.>vv.vv.>.>vv>....>.>.>....v>>..>>v>..>>.v>>v>.
->v.v..>...v..v.....vv>.v>..v>.>.>v..v.>.......>v..>>v>v.v..vv>vv.v..>.......v>.vvvv>>>>.vv>.v.v.v>v>...>.vvv.v.v...v.v.v...v.v.>v..v.vv>>>v
->..>...>v.>v.>>.....v.>.vvv.>.>>..v.>......vvv.>>.v..v>vv.>>...v>.v...vv..v>..>..>>.>.>.vv.>.v..>vv.>>...v>v..>>v...>...v>.v.v.>>.v>>.....v
-v.....v..vv.v......>...v>..>>.>.>..v.vv...>>vv>..>..>v.>vv>v.vv...v...vvv.>vvv.>.>>..vv.v>>..>..vv.vv.v....v.v>v.>v.>.>>..v>vv....>..v>....
->..>.>v.>v...v>..v>v.>>>>>v.vvv...v>>>.v>v..v..v..>.....v....v>.>>v..>>>.v.v......>.....vvv>.v.v>.>....>v>....v.v..>v.v>.v.>>>..>vv>v.>>...
-.>..>>....>>>.v>..>vv>v.>v...v.v.v>.>.>>>.v>>>>.>v>.>>vvv.>>........v>....vv.>...v>v....>>>....>..>.v.>..>v...v..>v>.v>.v>.>...v..>>.v>vv..
-.>..>v...>v..>vvv>v..........v>.....v..>.v>>v.vv>.....>v.>.>...v.>.>.vv..v.v.>.>v>.vvv>v>v>v.>.v.v....v.v.>...vv..>>vvv..>>....v...v.>>v>vv
-v>..v.>v>..>>.>..>.v.>vv.>>v.v>>v.vvv.>v.>.>>.>....v..v.v.v>>>>.v>>v>>.v.vvvvvvv.>.>......>.vv..v.>>.vv.>vv.vv.v...vv>vv>.>>..v>.>.v.v...>.
-.>...v.vv.v.v..>.vv.....>v>.v.v>..>........v>..>>v.vv>v.v..>vv>.>>>v...>...>...>..v>.>>.>>>>>.>v.>>..vv..>....>v>>.v>..>>..>......v....vv..
->..>..>>.v....v>>>>.>.>v.v..>vv.v.v>..v.v>>v.>v.v..>v>......>v.vv>.v.>>>.vv>....>...>v.v.>.>..v>>.>v.v.......v..v.>.>.v>v...>v..v.>..>vv>v.
-...........v>>vvv>..>>>v....v>v>.>....vvv>.v>>v>v>>>>.>vv>vv..>vv.>..>...>v.v..v.v....>vv...v>...>.....>>..>vv..vv....>>v>.v>>v>.>v>>vv>>vv
-..>v.>.>...>....v.>v.v.....v>vv...v>>>>.>.vv....>.>.v.v..>>..v>.v>v.v....>.v..>v>>>vv.v.v>.>..v..vv>v>v...>...>>.>>.>>>v.v..v.>.......>>vv>
-v.>...>>>vvv>v>v.>>.v.>vvvv.>>v.v.>>..v...>>.>vvv..vv>>>v.v>>>>.v>vv.>.v>.vv.>>..>..>.....>....>v.v.v.....v>>...>>..v.vv..>.>...>..v...>.vv
->...v....v.>>>v>..vv>v....v>v.>>.vvvvvvvvvv>.vv...v>..v>vvvv.>>>.>..>>.>.v.v...v>.v.....vvv.>.>>..>v..>.v.v...v.>.v>..vvv.vv..v.>v.v>>v>.v.
-.v..v.v>vvvv..>>v>.v..>...>vv.v..vvv.>v.v>>v..v.vv>vv>>..>.vv>........v>.>..>>.v>v>...>..>...v>.>.....v>>..v..>...>>>...>v..>.v.>..vv..v..>
-..>..v>v..v......>.>>>....vvv..vv..>vv.vv...vv..>.v.vv.....>.>>..>...>..>.>>>..v>.>>>.>v..v..>v.v..>..v>>vv...v....>...>v.v>.v>.v...>vvv>v.
-...>>>>vv>.>.v.v..>vv>..>.v>>v.>vv.>>v.v>>.v..>.>....>>.v>.v.v...v.v.v.>>v>>>...v.>..>..>.v.....vv..>...>..v>..vv....v.>>.>>v....>v>..v.>>v
->.>.v.v....>v.>>...v.vv.>.>....v>.vvv>.v.>.v..v.>..v.>..>>.....v>..>..v.>vv.v.....v.vv..>v>vv>v>.v>..>.....vv>...vv....>...v>.>v..vv..>vv.>
-.v.....>..>....v.vv>>vv.>...vvv>.vvvvv...>......>.v......vv.v...>.>...>.>..vv.v>..v>...v.....v.>v.>..>>.vv>.vv.>...>v.vv>v>.....>v.>....vv.
-.v.>>.>....>.v.>.v.>.v>.>.>..>...vv..>>.>..vv>.>v.vv.vv.v>.>.>>...>vv.>..v..>.>v.v.>v>>.v..>vv.>..v>..........v..v..>vvvv>>.v.>.v.vvv....vv
-vv>.>>v>v.>.>>>vv.v.>v.v....v.vvv.>>>.v>>...>..>>..v.v>..>>>vvv>>>..v.vvv.>v..>>..v..>>..v.v..v.>....>.....>...>..v>...v..vvvvv...>v.>...v.
->.>>>>.vv>.>...>vvv..>v..v.v.>..>>....>..v>v>v.>.......v....>v.v.>vv>v........v....v..>v.vv...>>v...>>v.>vv...>.v>.>vv..v.>...>.v>>v.v..>>.
-.v.>.>>>.vvv..v>v.v.>>..>..>>.v.vv.>>v..>>>..vvv...vv....>..>v>..>>>...>>......v....>..>v.....v>..>.vv.>.>>..vv..v>v...v..v..v>.>v>..vvvv>.
-..>.v>>...v>>....>.>>.>.vvv>v.>v>v>>.....v..>.v.v.vvv>.>.>.vv>vv.>.>......vvvvv.>..>vv..>.>....v>v..>>.>>>.......vv.vv.v.>..>...>..v.....vv
->.vv>v.v..v>v....v..v>...>>...>>.>>..v..>>.>>.>...vvv...v...>..>>>.v>.v...v...>.>.>.>.>>vv...vv>..v>v>vvv.>v..v>.....>>>>...>vv...>>..v>v.v
-.>v.>v.>v.>v.vvvv>..v>vv>..vv...>.>...vv.vv.>...v>..>...>vv..v>..>.v.v...>v.v>>vv>vvv.v>vv.......vv>vv>v....v....v..vv..vv....v......v>v.>>
-....vv..v>>.v>..v.vv..>.v>v..>v.>>v.>vv.....>...vv>>.v..>>.v..>v...v>>..v>.>.v.v.v.>v...v>>...v>.>.........>v>vv.v..>..vv>.v...>.v..v..>>..
->v>.>>.....>..v.v>..>..>v>..>...>.>vvvv..>.v.>v.>.v.>v...v...v..>v>.......v....>v.v..vvv>v.>>>v.>v.vv.>v....v...>>.....>..v.v>.>>>.>v>>>>.v
->.>..>....>..v>v..>>..>>>.vv.>.v>v.v>>v.>....v.....>.>v>v.....>>v>..v>.v....>..>.vv..>>.vvv.v...>vv>...vv.>>.>..v.>..v>>v.>..v.....v>.....v
-.>>>...>..v.>v>.>.v.v.v..>.v>.v..>.>v..v....v.v>.>>v.>.v.>.>v>>.v.>v...v.v>.v.>...v..>>.>.v.>...>.v.>..vvvv.v.v>.v>...>>.>..>...v..>>.>.>.v
-..v.>>v>vvv.>.>v.>...v..>...>.vv..v>..v..v....vvv..>vv>.>v.>v>.......v>vv..v.>..v>...v.>>..>v..vvv.v..v>>>vv>v...>>>..>>...v.vv.>vv>v>.v.>v
-v.>...>.>v...>vv>>.....v.>>>.v...v....v.v.....v>vv>.>...>.v...vvv..v.>.v....>v>vv>v...>.....vv.....v..v..>v>>...>v.>.v.....v>.......>>>>.>>
-......>>..>v.vv>v.>..>>.vvvv..v..vv..........v.v.v.>>...>...vv>.>...>..>.>.>>.>>>>>.>v>.v.v.>v>vv...v.....>>.v>..>>.>>>...>.>>v.v.>...>...v
-..v>v.>.v.>v>....v..>.v.vv.....v.>v>..v...>...>.v.v>.v>.v>..v>....>>.>v...>.>>v.>.v>v>v.>>.v>v..>.>>>.v...v>...v.v.>v.v>v.v.v>v>v...v.vvv..
-..vv.>.v.>..>>>.v..v>..>v>v...v>....>.>.....v...>>..vv..v>.>vv....>...>..v>.......v.v.v..vv.>>vvv.>.v.>.>.v>v>v>.>>.....>.>>.vv>v>>>.>vv>.v
-..v..v>>>..>>.>>>v..v..v...v>>...>..>v..v..vv>v..>vv.v>>>>>..>.>>.vvv>.v....>.>.v.>>..>v>.....>vvv.>.v.v>v..>>...v>vvvv.>.>v.v>v>...v....>>
-.vv..vv>.vvvv>v..>>..v.v.v.>...>.v..>...>.v>..>..>v..>v.....>.>..v..vv>.>.>v>v.v>>....>v.vv.>>v..>>v...>..>v....vv>v.>>vv.>..>>vv>..>v>v>..
-..>v.>.>..>vvv.>.v..>v.>...>>>>..v...>v...>.>.....v>...>....v..vvv..v.v...v....vvv>>vvvv...>.v..vv>v.v>.v...>>..>.......vv.>>..vv..>.>v..v.
-.vv..v..>....v..v.>>>v>vv..v>....v..>v>......v>.>.>v.v>..>v.>v>..v...v..>..>..>..vv.vvvv>...>..>......vvv.vvv>.>>>v.v...v..v.v..vv.v>.>.>.>
-.>>>.v.v>...>.>.v..>>>v>...>.vvvv>>>v...>.>>vv....>.v..v..>.>>.............>..>>..>.>>v.>....>.>v.>>>v...vv..>v..v.vv..>v>v.vv.>v.vv>..>>.v
->v...v>.>...>.>v>v>.>>.v.v>...>>..vv.......v.....>......>>.>>>>...v..>....>.>.>>..v>.>.v>>.v.>.v...v>vvv>..v..v>>..>v.vvv..v.v.>>v.>...>.>.
-v>.....>>>...v.vv>.>.>..>..>.v...v>>.vv>v.>v>...v..>.v..>....v>.>>>>...>>>vv>>.v...vv...vvv.vvv..v.>>v>..>.>.>>.>..>>..v>.vv>>v>.v.....>...
-.>v...vv.>vv.v...v.v>..>.>v>.....>v.>....vv..>v.>v...v>..v...v>.....v..>v.>>.>>..v>v>>.v...>>v>>.>v.v..>..>>....v>vv..v>>>....>.v>.>>..>.>>
->>.v>.v>>....>.vv>v>v>..>v..vv>v..vv.v.....vv..>..>vv>..>>>......>.v..v.>>...>..vv..v>.vv>>>v.vv..v.>.>..>v.>>..v>v.v>v..>..>>....>>>.v...>
-v.v..>v....v.....v...>.v...>.vv..>vv.v.v>v>v>...vv..>>>v>...v>....v..>>>v..vv.v>..>v>v.>.>vvv...v..vvv>.vv>v..>v>.v>.vv.vv.v...v.v>v.vv.>..
-.>vv.v>v.>...>..vv..v>v..v.....>....>>..>..v>vv...v..vv.v.vv>v>.>>v>.v>.>.>......vv>>>.....vvvvv.>..v.>...vvv>..>>>v>>v>v>.v.vv....vv.v....
-......>>>..>..v.v>v...>v>...>>v...v>...>>v...v>v..v..vv.>vv>v.>>>......>.vv.v>v.>.v.v...>.....vv.vvvv.v.v>.vvv...>..>v...>>....>..v>>.v.vv.
-vv...v...>.>v.....>.v>.v.v.>>v..v>..>vvv.v.v......>v.>>.v.v>.>>>..>v>>v..v....>>>.v..vvv.......>..>v>>....v>.vv>........v>>..v..>...>v....v
-...vv.>v..v>>>.v.....>.v>...v>...v.>...v.v..>>.......>vv.>...>v.vv.>>.>.>.....>.v...v....>v.>.>v>>...>>>v.....v...v.>..>.>....v....v>.>.vv.
diff --git a/2021/inputs/day_3.txt b/2021/inputs/day_3.txt
deleted file mode 100644
index 7320494..0000000
--- a/2021/inputs/day_3.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-111100000101
-001110100010
-101110110011
-100000001101
-001101010011
-101111110000
-011101110001
-000000010111
-011011000010
-110110010000
-011101000000
-110010001001
-101110100111
-001001101111
-101001011010
-101001000001
-101110111101
-010100101100
-001000110010
-010100011110
-100100000001
-000110011000
-110100100001
-111000110000
-000111100100
-101100110100
-101111101001
-101110101001
-010010110001
-000111100001
-001100001000
-100011101001
-100010111000
-000001011000
-001011110100
-011110010001
-110000011010
-100011011111
-001001110101
-001010000101
-100000010010
-000011100010
-101010110101
-001110000101
-000111101101
-010100101010
-101111101011
-010001100000
-110101100010
-001001001111
-001101011010
-111010010101
-110001000011
-000011110100
-100010111101
-111100101110
-110110001101
-001000011011
-101110101110
-111011101110
-010000110001
-101111011111
-000001001110
-111101100011
-000100000000
-100001001111
-110010000010
-101111010011
-010000101000
-011010101111
-110101101100
-101101011100
-100101111101
-011101011110
-111001001000
-100111001101
-101101000100
-110111111010
-011001101001
-111101010110
-001111001110
-111100010111
-000100111100
-011100101001
-111100111100
-101000011100
-011100111100
-011010110010
-101111101101
-010111101010
-001011000111
-000010011111
-101000100110
-000100110101
-100101001100
-010100110110
-011111100110
-000000101011
-111111101110
-001011101101
-000010001101
-001100100100
-101010010111
-100010011001
-010100000110
-010000001101
-010001101011
-000111111001
-101110010010
-011100101000
-010101010001
-111011110111
-000010110001
-101111000111
-001101110000
-111111011011
-100010011010
-001011011010
-110111001001
-110101110100
-101100111100
-011110101010
-010000001010
-001111100001
-000110000110
-111010111010
-101110100100
-000001110010
-110111001101
-000001101000
-000010001111
-110000100011
-000000001001
-000111111110
-111101111010
-010110101010
-110101011111
-000111000110
-111001100001
-101111100000
-011011010111
-101011010111
-110011101111
-001110001111
-010001100100
-111001010000
-100111000100
-110101010100
-000011111101
-100010010000
-110110100100
-100111011110
-101011001101
-111011100110
-100000010000
-110000001111
-001000000111
-111011011011
-101111101000
-001110001010
-100110000000
-110001100110
-011110100010
-000001010110
-010100000101
-101010101010
-001101000110
-110100001111
-110000001101
-101101000000
-101101101011
-111001100101
-101010001111
-101101001101
-010111101011
-101000101101
-001010000111
-011110111001
-001011101000
-101101000010
-110111111110
-110001011011
-101111101100
-101110110101
-101100111101
-001110001101
-010111000110
-110101110110
-101001101001
-010100001000
-011011111110
-111010010001
-101110100000
-000101111100
-001111110111
-001010110011
-010011011001
-101111100001
-100101111110
-010001010011
-001101110001
-011100001000
-101100000101
-000111111101
-010101110000
-100110001100
-010101111100
-100101110100
-110111000001
-101110101000
-000011010000
-101011110101
-100011110100
-111100010110
-110100011001
-001001001100
-010110111000
-001000101111
-111101001110
-011110000011
-000111000100
-001101110101
-110111011101
-100000111001
-100000001001
-110110111011
-010011000110
-000100010101
-100101010001
-100100101100
-010001001100
-000010001010
-101100101101
-011011101111
-100010111011
-111111101111
-110001100001
-101011101111
-000100011101
-111000010001
-000001011001
-001101111101
-001000000001
-010100010100
-110010111011
-010100100011
-001010001010
-111111011010
-100101010101
-000111000010
-011010100000
-010100111111
-001011100010
-101010001011
-111011010101
-100100100111
-101110101010
-111100101001
-111010001000
-000100001111
-011010001000
-011011100100
-110011011111
-110111100010
-000100001100
-001001101101
-110111110011
-101111001001
-101010001001
-011011000111
-000110001001
-111011001010
-000110000100
-000000111011
-010110110110
-101000000000
-011100101111
-111101111000
-001110011100
-111110011001
-000010111000
-010111001100
-010010111111
-110101100111
-000110111010
-000001111110
-111000000000
-001110011101
-100000111100
-100010100001
-010011101100
-010001101010
-001001101011
-110100010100
-011000000110
-011000011001
-010001101111
-000101001111
-011101111101
-100010010011
-100101111000
-001101110111
-001000000000
-100100101011
-111000100011
-101100011011
-000000101101
-001110010011
-001010010000
-011000001110
-101011111001
-110101100000
-011011111010
-001000011111
-011000100000
-000010101100
-111100010011
-101010000011
-001100111111
-000001111000
-111101110101
-001010100111
-011100111111
-111010111000
-100101011111
-011100001101
-001011000011
-110001110110
-000011101000
-111110010111
-100010101101
-110001011101
-011010100010
-001110000011
-101001101111
-100110100100
-011010000111
-001111010011
-110111101111
-110101100101
-100011010000
-011110000100
-010110100010
-011000111001
-011111011010
-011110110101
-011011110111
-001111100101
-101110100110
-101010100000
-110100001100
-111010110101
-011010001111
-000010111110
-100110010111
-011100011011
-100101100011
-010110111100
-010011110111
-111001011101
-000011111100
-000111111111
-101000111010
-010110110011
-100110101111
-100010111010
-111001111111
-000110110011
-010010111101
-110001100011
-111100001000
-010011000011
-011011101011
-001010101101
-100011010011
-001100101110
-111000111111
-101001011101
-111011010011
-110101011101
-001011010111
-011001010100
-010011010100
-011100100110
-101111110001
-110111111101
-111110100110
-110001100000
-010110010011
-011100110001
-010111111011
-001010101000
-010100101111
-111101000001
-100000111010
-001010100000
-000001011011
-100111011101
-100011110010
-011111010000
-111001010110
-110111111100
-010110100011
-101111111010
-110111110000
-111100000110
-111101011110
-100101111100
-111110001101
-111110011110
-010101100010
-110101101101
-111100001101
-000100011100
-010011110011
-000100010100
-000110110010
-001010111000
-110111001111
-110101000101
-100011110000
-101010010010
-111110000010
-111011001011
-010110111010
-011101010100
-010010101010
-010011110001
-010000010110
-101111000011
-111111010100
-001111001001
-101001100111
-000011011111
-100111000001
-010111010110
-010100011100
-010100011101
-001111110011
-101100010111
-101110100010
-111101110100
-100100100010
-111010011011
-010110000100
-100100010100
-101000011010
-101001111101
-010000010001
-110111101101
-000001110110
-010001110100
-100100110001
-011111010111
-100000000110
-100001110110
-000001011110
-011000001100
-011001110110
-010010101110
-111100111000
-001010010011
-000001000001
-100010111001
-010001011111
-001110000000
-000010000000
-001101110011
-010100011001
-000001001010
-110001000110
-100010100101
-011100010001
-101100000110
-001001100000
-110100000000
-000010100010
-101101100111
-100001111011
-011000011101
-110100110010
-001011001101
-000111001110
-011100100100
-100010000100
-001101100000
-100010011111
-010101010111
-000101010011
-100011100000
-100001011101
-110011111100
-111010011001
-001011110111
-011010010100
-000011001110
-010110111001
-111000001001
-011100111010
-011111000010
-101100111010
-010100111101
-111001100100
-101111010110
-110111110100
-111110101010
-010011001110
-110101101001
-111101011000
-001010001101
-101111000010
-111110000111
-110000001100
-011111001101
-101001000101
-010111001011
-001010011110
-111010100100
-110000101000
-011101000011
-010010100110
-111010000001
-111101000111
-001010100101
-101011001100
-110010111001
-111000111100
-100101011101
-110010101001
-010010111000
-010101001110
-110000101111
-001101001101
-001000101011
-001110110111
-101111111011
-111001100110
-100101110000
-010000011011
-001010000000
-011001010110
-010101101010
-100100000011
-110010101110
-110011101000
-001010001000
-010000101100
-100110011110
-001010001111
-111010001101
-100100010000
-100100111001
-111111010110
-100010011101
-110100100100
-000110011101
-000101101001
-001011001100
-101000000001
-111101100000
-110110111000
-111111000010
-001010111011
-011011111000
-010111000101
-011100110011
-111111100010
-000000100010
-001000011110
-010001011001
-111100111101
-001111010010
-010110011011
-111110001110
-101111100100
-011100011101
-111001111001
-101001000100
-001011000110
-100011010101
-001101100010
-110111101110
-010101111000
-111010000111
-000110010111
-001100111101
-100000101101
-000110101000
-011000011100
-000101001110
-011010101100
-100010010100
-001001111001
-101100100000
-010011011000
-100110101011
-110111110110
-100111001100
-111010010011
-000100011110
-011100011000
-010000011001
-100110011010
-010000001000
-101010011010
-111111011100
-010110100111
-000110001101
-001011111000
-011010111001
-111011011101
-110000010110
-100110111001
-110010000001
-110001011110
-111100001010
-101110111100
-110011110100
-101111011101
-000101010010
-001111000110
-110010011010
-000010010001
-001110110110
-111101100101
-000000111101
-011110000110
-111011001101
-110111000110
-101100110101
-010001001001
-001010110101
-101100011010
-100011001010
-001011101110
-101000010110
-100100111011
-001011101100
-111110111010
-110011111010
-000001111101
-010000110111
-101101101100
-000110000000
-111110110100
-101100000010
-011000000001
-001000001001
-111101111011
-010100001110
-111100101000
-011000010111
-001000111101
-100000100101
-110111000101
-001111100000
-101110111001
-000100101111
-101011010100
-101111111001
-000010000101
-001100001111
-101001011001
-001110111000
-010011011101
-110110111001
-011111010010
-100111101011
-101110011000
-010011100110
-101111000000
-101000110111
-001100000111
-110001101111
-010011101010
-100100000111
-100011111101
-010111010010
-001010111010
-011111010110
-101101100101
-011110001000
-000100111111
-001010111100
-101101100000
-010010000011
-010011010111
-111000011110
-110111010101
-100100101000
-101001001000
-001111110100
-111011110101
-110001000100
-100111111001
-101010110100
-010111101001
-011011010010
-011111101010
-111100111110
-110011101101
-110110101101
-110010100101
-111110101111
-000011110011
-001100001011
-111110110111
-011011101100
-110111101011
-010111010000
-101000010111
-010100010001
-111101100100
-011101101010
-010000110110
-111001110000
-111111000100
-011001100000
-111100101111
-011001001011
-110100100011
-011001111000
-101010001100
-100010001110
-010111110110
-001011011111
-000001011100
-010010001111
-011101011000
-001010011010
-100010011110
-010011000111
-101011011111
-100101000010
-110111010111
-110111101010
-010100001011
-001001010011
-001011001111
-011000001111
-010100000111
-100011001111
-110100111100
-101110010000
-000010110010
-100010100010
-001010011000
-010101100101
-101100010001
-011011001010
-000101100000
-000101111010
-001001110010
-100011100001
-011110111011
-100000010111
-100001001101
-111000100010
-011000011000
-100001100010
-000000110011
-000101010111
-000101000100
-110111000111
-001100000000
-110100010110
-101001000011
-110111100100
-000111100011
-101110001001
-000010011101
-000011010111
-111101011001
-111010001111
-000100110100
-000011100001
-100100111000
-100111101110
-001110101011
-000111110100
-110000010111
-110010011111
-000001111111
-101011110011
-101100001101
-110101111011
-011111000111
-011110011011
-001000010110
-110110110100
-010101001011
-000100111000
-011101111111
-000111101001
-110101111010
-110000111001
-011000111101
-001101001010
-110100110100
-100110010001
-100000000100
-001100111000
-100000001110
-101000011000
-100010110110
-101011001001
-010010001010
-111011101100
-100010100110
-101101000111
-100110110101
-111001010100
-101000110000
-000101011010
-010001010110
-010111011110
-001101011110
-000100000101
-000001011101
-010010100000
-110110010001
-100111000111
-100010110000
-010110100000
-110111111111
-011111011111
-001011010010
-001111100011
-100010110100
-011010001011
-110011001010
-101110111000
-111001010011
-010011010101
-011100100101
-101010110011
-001001100101
-110010100000
-011000111110
-011101001110
-110110000100
-001111101100
-101100010100
-110001100101
-111111010001
-011001100001
-110100000101
-000000010000
-110101000111
-100100110100
-010010110100
-010010000100
-011000111111
-011001101010
-011111101110
-110110010100
-110001001110
-111111100011
-010001100001
-001001111011
-000101110010
-011111110111
-000011000110
-110101000001
-101110000011
-000000111010
-000101110011
-000011100111
-010010010011
-110011011010
-111100100100
-110010011101
-100001001000
-101000110001
-101001010011
-111000111101
-101011111000
-110011110110
-111110100011
-010110100100
-010101000011
-001010101100
-101010101001
-111100100000
-001111011111
-110101010011
-101111010000
-110011110010
-110110110001
-011010011110
-100010010101
-101000101010
-010111010001
-000001111100
-001000011001
-011110110001
-110100011000
-110000111110
-001001011100
-110110110101
-011011100110
-011110010100
-111011110110
-111110111001
-111010010100
-001000001011
-111101010011
-100111101010
-010100001100
-111101111111
-000111111000
-001010011101
-100000001011
-010010001110
-011011011101
-100000000111
-100101100100
-001110000010
-000000000000
-101000110100
-011010110001
-100001101110
-110001110011
-101100010000
-001111111111
-111110110101
-010111001101
-011001000001
-111110011100
-100100011010
-001000011000
-011101101100
-100110111111
-111011011010
-101001101000
-010011110000
-110010110011
-111000000001
-101101110110
-111000001101
-011111001001
-010010110101
-001100010101
-111011110010
-100011000101
-111010000100
-011001111101
-111010011110
-111011111011
-110110011010
-011111011011
-010010001100
-110100111110
-010100111011
-110110011101
-110011010000
-110001001010
-000011000111
-100011101101
-101010100010
-110111001010
-100101101110
-111100101010
-110001011001
-011010011001
-000001111010
-001010101010
-010001110000
-001001111100
-011110000010
-000100010001
-110100000110
-010110111011
-001100111100
-111100011000
-011011011010
-111001001010
-110110100111
-001011000000
-000001110001
-101100011100
-100011000011
-001100010001
-000100111011
-001001110011
-100111111100
-111010001001
-101001000110
-001101000100
-110000000100
-111010110011
-000101110000
-010000010101
-000110111001
-100100100000
-110010001011
-110111100011
-101101101001
-100001100100
-000111010100
diff --git a/2021/inputs/day_4.txt b/2021/inputs/day_4.txt
deleted file mode 100644
index b01c04f..0000000
--- a/2021/inputs/day_4.txt
+++ /dev/null
@@ -1,601 +0,0 @@
-68,30,65,69,5,78,41,73,55,0,76,98,79,42,37,21,9,34,56,33,64,54,24,43,15,58,61,38,12,20,4,26,87,95,94,89,83,74,97,77,67,40,63,88,19,31,81,80,60,14,18,47,93,57,17,90,84,85,48,6,91,7,86,13,51,53,8,16,23,66,36,39,32,82,72,11,52,28,62,70,59,50,1,46,96,71,35,10,25,22,27,99,29,45,44,3,75,92,49,2
-
-68 16 83 90 69
-14 89 72 33 6
-63 21 43 64 76
-79 65 87 98 85
-41 24 32 53 93
-
-15 94 72 30 6
-14 80 66 4 78
-44 81 68 67 96
-65 21 64 97 35
-84 90 28 60 2
-
-97 39 61 15 94
-75 14 66 98 31
-58 80 9 64 56
-19 42 16 85 37
-25 22 38 65 82
-
-86 31 71 11 56
-99 12 17 10 46
- 5 33 85 61 2
-30 1 28 88 66
-15 38 21 54 64
-
-38 52 84 75 91
-77 5 49 71 31
-45 1 60 0 10
-68 29 98 36 34
-61 90 93 14 12
-
-91 66 28 41 78
-89 16 10 77 39
-84 57 44 32 47
-60 62 26 21 50
-75 61 24 54 93
-
- 2 69 99 8 20
-14 35 61 85 73
-39 94 37 63 12
-57 23 30 50 17
-34 70 19 28 77
-
-50 82 41 59 52
-43 76 85 63 48
-56 67 60 33 45
-42 9 91 23 16
-96 6 34 30 44
-
- 0 41 24 42 83
-17 1 34 29 71
-46 67 86 64 21
-95 36 6 38 62
-93 8 30 77 44
-
- 6 94 11 14 83
-65 85 97 37 55
-56 19 91 69 1
-26 59 13 96 68
- 4 28 7 45 53
-
-96 78 2 32 65
- 3 63 74 17 4
-76 11 91 48 70
-71 55 69 13 49
-88 30 23 59 10
-
-28 4 34 64 47
-99 86 44 59 43
-50 91 35 92 51
-32 21 19 74 33
-10 29 66 52 94
-
- 0 27 12 23 71
-54 59 32 47 45
-22 85 94 34 31
-29 68 44 61 62
-96 46 52 33 69
-
-37 79 34 17 56
-26 62 3 77 80
-88 35 71 87 36
-89 60 86 19 48
-82 97 95 85 0
-
-62 49 48 98 10
-89 37 50 64 17
-80 5 26 42 51
-58 74 6 20 14
-72 2 9 40 69
-
-71 37 47 21 39
-36 29 26 82 53
-10 17 96 15 43
- 8 92 19 6 32
-77 89 38 54 13
-
-16 58 67 23 98
-43 42 26 46 13
-32 22 27 20 21
-37 33 55 86 1
-99 40 17 44 94
-
-81 59 53 27 36
-11 88 92 57 44
- 2 26 93 94 77
-76 47 82 19 75
-99 34 98 37 32
-
-28 13 57 99 7
-42 93 10 76 43
- 1 52 3 20 53
-82 81 51 2 92
-94 35 49 37 0
-
- 5 30 61 77 44
-82 67 98 1 90
-18 62 27 24 15
-16 20 71 69 19
-85 96 25 7 55
-
-39 51 4 32 30
-64 22 29 48 60
-78 31 44 59 92
-65 10 68 84 16
-40 70 35 26 56
-
-54 83 12 79 66
-21 49 70 2 24
-20 51 71 99 50
-82 36 57 96 22
-78 52 67 33 72
-
- 3 62 5 14 63
-54 75 28 22 51
- 1 55 86 30 70
- 9 6 92 83 85
-71 78 96 47 17
-
-71 59 38 27 2
-90 6 97 75 84
-29 69 45 11 65
-46 31 79 4 8
-51 76 74 87 19
-
-83 67 10 39 57
- 7 63 12 59 2
-54 99 95 88 40
-38 71 84 61 56
-81 90 36 58 19
-
- 4 47 21 28 46
-22 40 94 83 86
-82 17 43 0 45
-55 36 68 35 84
-52 24 6 80 2
-
-29 16 75 26 87
- 6 82 67 36 24
-13 95 35 43 40
-80 68 0 79 71
-34 44 21 30 85
-
-91 25 24 15 23
-93 14 50 75 74
-88 30 64 52 8
- 1 7 0 4 80
-96 82 98 81 67
-
-52 21 71 78 4
-45 73 27 30 56
- 7 93 67 6 1
-54 20 57 69 2
-94 36 89 46 68
-
-86 95 15 7 18
- 8 87 29 11 74
-71 72 43 76 40
- 6 60 44 19 99
-97 85 5 39 77
-
-49 14 5 48 33
-95 21 30 1 47
-87 84 85 10 24
-32 86 99 31 23
-69 2 43 37 60
-
-57 48 99 49 73
-31 92 76 60 96
-47 28 15 70 26
-68 19 56 67 95
-12 23 45 88 6
-
-77 49 23 42 62
-47 7 80 43 4
-59 72 87 14 84
-66 81 96 97 78
-61 91 8 17 48
-
-21 25 1 82 20
-78 31 15 30 73
-46 11 13 35 79
-60 22 97 32 4
-23 88 63 17 75
-
- 6 3 41 5 44
-91 21 32 49 81
-29 85 47 20 14
-99 31 43 22 69
-90 4 45 8 16
-
-12 15 96 3 21
-38 71 16 39 24
-77 82 57 55 92
-27 17 19 73 31
-74 48 34 72 14
-
-80 16 10 79 55
-93 60 4 0 29
- 7 97 3 9 86
-43 67 78 64 35
-44 83 40 33 12
-
-36 88 22 21 70
-30 60 13 6 41
-71 89 86 17 39
-73 0 75 32 9
- 5 10 83 85 99
-
-40 41 76 38 25
-21 49 79 47 39
-27 88 34 81 24
-69 64 36 32 4
-57 5 58 67 56
-
-25 95 41 27 19
-93 0 29 56 8
- 2 17 66 11 82
-96 55 44 39 5
-67 4 33 62 40
-
-85 12 46 59 36
-91 29 19 63 0
-72 49 14 6 95
-18 50 60 67 80
-10 62 39 82 58
-
-11 87 4 76 75
-64 47 26 74 98
-89 30 68 21 88
-45 41 77 67 53
-96 92 44 1 18
-
-33 26 21 8 76
-15 27 41 43 52
-64 85 56 57 66
-11 73 62 69 4
-36 13 94 86 55
-
-93 80 67 23 6
-57 20 29 69 1
-76 96 72 95 33
-32 91 52 16 83
-26 54 13 94 47
-
-56 0 58 15 45
-91 40 86 61 60
-14 47 30 5 24
-21 12 33 69 41
-78 98 9 99 46
-
-59 1 63 96 14
-15 56 23 85 84
-29 98 44 87 46
-75 8 21 54 65
-80 30 40 45 6
-
-99 40 87 4 63
-64 78 50 74 58
-37 47 61 48 59
-65 56 45 89 67
-18 70 71 90 32
-
-42 35 1 9 90
-89 13 0 88 17
-67 82 31 77 91
-60 29 68 10 64
-20 92 46 71 95
-
- 0 32 81 13 63
-87 17 2 56 69
-23 33 29 67 24
-98 95 86 36 31
-99 42 35 93 1
-
-71 79 38 84 29
-26 31 73 1 48
-94 85 3 82 89
-19 17 98 92 47
-96 45 11 70 51
-
-14 69 61 56 33
-98 88 82 76 66
-87 92 42 99 35
- 0 68 6 44 47
- 4 91 54 62 23
-
-10 23 20 40 96
-33 0 21 94 25
- 4 67 30 88 54
-43 41 60 1 82
-18 78 74 98 91
-
-60 95 53 7 11
-67 54 44 18 0
-89 98 24 55 37
-39 5 27 62 21
-75 25 43 47 71
-
- 5 95 60 19 3
-13 15 42 97 67
-61 79 7 12 39
-53 58 89 25 34
- 9 11 96 21 66
-
-89 97 45 84 67
-37 22 64 39 95
-68 63 6 90 80
-92 26 33 35 19
-29 70 5 72 31
-
-52 46 53 6 31
-77 8 59 99 49
-11 48 4 90 91
-41 70 58 16 44
- 7 61 9 80 50
-
-75 0 38 37 33
-99 66 98 14 62
-46 51 43 34 24
-71 92 80 32 22
-60 39 17 52 45
-
-92 49 80 99 16
- 6 77 65 9 4
-34 91 86 43 21
- 0 3 27 84 81
-28 5 19 95 76
-
- 5 40 26 89 1
-51 30 75 46 31
-35 58 86 80 0
-98 38 27 81 93
-63 60 39 65 87
-
-27 56 90 44 60
-48 68 47 96 73
-75 13 80 12 38
-81 21 20 46 97
-67 6 72 76 2
-
-33 96 4 55 49
-74 43 54 6 51
-30 0 75 28 62
-90 81 2 83 68
-39 95 70 84 42
-
-97 22 15 30 45
-92 96 50 16 42
-39 23 89 21 2
-72 98 58 48 82
-94 11 1 86 84
-
-41 13 84 51 76
-33 63 0 62 18
-81 32 57 68 21
-20 64 47 24 93
- 7 56 27 66 30
-
-52 81 85 92 3
-15 91 19 13 93
-36 77 74 37 26
-67 16 73 89 33
-43 90 38 31 29
-
- 1 52 96 66 86
-30 15 26 82 42
- 8 94 41 54 5
-84 23 72 77 7
-34 53 18 69 90
-
- 7 67 35 2 36
-91 51 56 85 32
-98 22 76 97 71
-70 29 68 44 1
- 8 80 42 46 93
-
- 4 13 90 64 97
-44 28 17 42 18
-72 77 11 35 22
-25 73 41 1 26
-51 8 92 43 2
-
- 6 68 51 73 39
-32 60 34 74 18
- 5 95 11 8 62
-23 3 70 94 54
-36 20 29 10 26
-
-66 80 77 82 62
-95 25 33 50 14
-94 0 91 46 23
-59 47 96 26 15
-69 6 2 34 75
-
-72 66 35 81 69
-48 44 11 16 40
-94 5 3 51 54
-89 6 78 37 59
-76 45 8 18 10
-
-30 46 96 56 69
-66 29 32 74 4
-85 84 99 87 92
-22 50 64 15 57
-78 47 1 48 10
-
-66 48 90 67 23
- 3 21 73 71 18
-97 52 64 80 94
-49 42 75 47 38
- 4 28 19 68 57
-
-53 46 56 84 57
-55 45 85 89 76
-80 26 2 36 23
-92 10 30 18 69
-67 49 21 8 44
-
-51 47 85 41 8
-70 34 98 30 16
-82 22 18 95 73
-65 21 49 5 15
-56 19 17 23 46
-
-25 28 47 84 8
-35 90 13 39 15
-50 86 41 33 51
-57 73 87 45 5
-31 22 48 7 27
-
-79 71 64 87 21
-10 73 1 40 9
-36 84 80 6 60
-19 81 55 50 56
-67 23 62 86 63
-
-87 45 56 67 13
- 8 79 31 48 86
-32 15 88 6 66
-62 27 44 26 99
-64 63 3 70 90
-
-84 87 89 71 2
-63 67 72 3 75
-39 44 54 20 85
- 1 97 14 37 98
-25 66 92 17 57
-
-27 34 64 60 87
-77 29 21 56 23
-79 53 75 72 69
-95 16 85 52 70
-92 65 62 33 15
-
-42 87 96 79 90
-97 77 58 62 55
-11 86 68 44 52
-93 23 1 61 60
-47 72 14 28 13
-
-14 78 68 48 74
-50 32 29 24 54
-73 99 57 90 64
-12 76 62 15 44
-70 58 22 1 85
-
-49 2 75 88 87
-71 61 95 5 38
-99 86 67 8 83
-17 11 9 54 33
-70 78 62 1 58
-
-11 44 53 73 13
-45 95 15 63 49
-94 34 99 64 10
-78 9 67 12 20
-50 97 96 89 14
-
-55 3 72 93 81
-25 43 60 85 26
-96 45 53 19 40
-73 42 76 47 80
-74 69 22 23 89
-
-24 59 62 91 5
-51 75 76 29 35
-86 96 94 66 55
-87 61 82 40 32
-28 22 27 21 49
-
-66 80 82 46 13
-97 67 41 63 1
-65 89 22 12 15
-94 96 9 91 48
-85 3 60 95 8
-
-57 90 97 56 33
-79 15 75 70 41
-21 26 20 98 81
-18 36 24 76 35
-42 27 11 67 0
-
-89 31 86 10 13
-81 8 16 0 77
-92 67 39 96 74
-90 7 75 55 65
-51 2 97 58 17
-
-92 55 4 83 93
-31 21 74 73 68
-18 41 32 17 77
-56 94 98 72 87
-19 6 49 11 37
-
-15 79 24 60 91
-25 41 63 32 56
-13 83 69 0 57
-77 7 62 45 98
-64 37 94 55 9
-
-81 42 29 98 44
-16 83 27 92 60
-22 63 79 64 45
-80 38 56 5 2
- 0 4 34 37 59
-
-90 85 32 97 52
-69 37 57 29 51
-22 4 99 67 84
- 0 2 76 34 47
-63 96 94 83 40
-
-72 68 70 40 39
-22 7 62 46 76
-25 31 41 71 9
-30 52 78 26 10
-53 17 45 16 98
-
-66 39 96 16 67
-46 34 27 49 2
-93 25 50 70 57
-33 69 64 30 45
-10 91 20 18 3
-
-32 35 71 62 43
-24 57 46 39 87
-28 21 26 31 52
-99 60 14 6 97
- 1 44 89 33 93
-
-47 15 21 23 20
- 4 50 6 93 44
-38 53 2 45 42
-83 57 63 17 24
-99 5 34 66 0
-
-65 91 60 50 62
-16 2 51 14 32
-81 17 58 59 77
-29 98 72 28 3
-15 99 49 37 5
-
-62 23 48 80 28
-68 2 71 89 36
-13 95 64 98 8
-60 86 51 74 11
-35 27 66 78 7
-
-65 9 57 85 30
-29 52 27 83 98
- 7 48 45 21 93
- 5 71 54 34 91
-96 87 25 84 63
-
-38 94 65 69 18
-79 81 80 36 91
-17 2 23 53 98
-92 68 21 74 55
- 3 58 72 70 86
diff --git a/2021/inputs/day_5.txt b/2021/inputs/day_5.txt
deleted file mode 100644
index 4fa6674..0000000
--- a/2021/inputs/day_5.txt
+++ /dev/null
@@ -1,500 +0,0 @@
-105,697 -> 287,697
-705,62 -> 517,250
-531,627 -> 531,730
-21,268 -> 417,268
-913,731 -> 271,89
-214,697 -> 82,697
-376,661 -> 376,177
-519,859 -> 977,859
-782,98 -> 184,98
-612,179 -> 515,179
-340,772 -> 352,784
-111,863 -> 111,298
-944,73 -> 594,73
-465,21 -> 970,21
-122,592 -> 111,592
-975,975 -> 16,16
-327,532 -> 561,532
-811,618 -> 811,945
-623,437 -> 623,202
-380,591 -> 871,591
-278,514 -> 125,667
-797,946 -> 953,946
-325,61 -> 484,61
-450,422 -> 450,862
-923,972 -> 119,972
-813,141 -> 69,885
-926,834 -> 926,687
-137,564 -> 595,106
-415,566 -> 274,566
-726,354 -> 251,829
-889,236 -> 470,236
-282,376 -> 282,193
-343,248 -> 932,248
-790,918 -> 790,528
-532,369 -> 222,369
-15,378 -> 820,378
-279,507 -> 279,719
-641,68 -> 220,68
-340,270 -> 340,680
-939,364 -> 32,364
-686,106 -> 568,106
-919,365 -> 255,365
-870,236 -> 879,227
-322,397 -> 397,322
-984,980 -> 350,980
-392,864 -> 31,864
-846,975 -> 243,372
-253,981 -> 500,734
-98,193 -> 280,11
-477,460 -> 350,460
-690,833 -> 48,191
-469,409 -> 218,409
-321,532 -> 321,106
-868,341 -> 223,986
-185,174 -> 801,790
-256,658 -> 800,658
-808,576 -> 931,576
-959,913 -> 959,785
-976,969 -> 47,40
-891,931 -> 572,612
-600,804 -> 866,804
-149,368 -> 680,899
-799,882 -> 157,882
-803,214 -> 803,668
-53,900 -> 940,13
-424,800 -> 424,261
-985,924 -> 80,19
-158,194 -> 158,281
-683,237 -> 683,341
-493,482 -> 493,921
-664,195 -> 664,824
-689,405 -> 616,478
-946,873 -> 846,873
-977,988 -> 28,39
-305,892 -> 662,892
-891,27 -> 891,440
-136,897 -> 35,897
-948,458 -> 935,458
-569,100 -> 599,100
-542,292 -> 974,724
-501,825 -> 104,428
-875,872 -> 875,441
-631,924 -> 43,336
-874,846 -> 874,389
-947,932 -> 81,66
-75,480 -> 75,403
-211,622 -> 211,482
-344,904 -> 699,549
-227,508 -> 698,508
-677,774 -> 385,774
-279,267 -> 391,155
-294,801 -> 547,801
-717,446 -> 614,549
-490,903 -> 490,225
-872,751 -> 278,751
-580,163 -> 61,163
-198,800 -> 389,800
-147,728 -> 516,728
-675,417 -> 675,752
-147,544 -> 134,544
-977,70 -> 164,883
-349,976 -> 349,23
-897,10 -> 14,893
-602,349 -> 602,354
-326,332 -> 355,332
-53,331 -> 34,331
-617,333 -> 466,333
-661,537 -> 661,131
-985,18 -> 20,983
-953,580 -> 953,124
-70,363 -> 74,363
-448,38 -> 141,38
-957,175 -> 957,634
-88,316 -> 88,899
-231,94 -> 857,720
-643,566 -> 643,832
-724,955 -> 243,474
-368,521 -> 537,521
-649,245 -> 406,245
-92,304 -> 399,304
-978,491 -> 819,491
-99,637 -> 765,637
-243,159 -> 803,719
-139,756 -> 305,756
-815,226 -> 79,962
-317,562 -> 491,562
-783,95 -> 783,277
-207,321 -> 133,321
-752,136 -> 185,703
-752,990 -> 752,433
-282,841 -> 466,841
-314,31 -> 314,829
-637,873 -> 637,854
-60,746 -> 563,243
-646,566 -> 119,39
-260,475 -> 124,339
-603,647 -> 327,647
-990,202 -> 342,202
-981,620 -> 606,620
-475,352 -> 313,352
-184,497 -> 143,497
-130,929 -> 329,929
-779,111 -> 779,975
-892,960 -> 11,79
-37,984 -> 919,102
-589,794 -> 589,548
-665,668 -> 385,668
-668,301 -> 281,301
-860,122 -> 623,122
-18,914 -> 782,150
-691,150 -> 25,150
-117,439 -> 462,439
-926,695 -> 926,651
-907,644 -> 708,644
-545,120 -> 229,120
-181,659 -> 181,820
-362,543 -> 575,330
-603,531 -> 603,142
-754,404 -> 754,678
-703,551 -> 450,551
-794,137 -> 581,137
-866,288 -> 327,827
-676,613 -> 676,470
-874,130 -> 23,981
-132,288 -> 360,288
-706,147 -> 706,433
-734,646 -> 588,500
-641,386 -> 598,343
-743,726 -> 79,62
-308,192 -> 859,192
-858,125 -> 603,125
-694,199 -> 653,240
-251,407 -> 79,407
-254,337 -> 254,310
-586,850 -> 17,281
-937,989 -> 17,69
-503,784 -> 584,784
-17,97 -> 906,986
-909,987 -> 23,101
-11,465 -> 953,465
-645,862 -> 251,862
-741,488 -> 856,488
-488,123 -> 488,641
-720,775 -> 79,775
-228,105 -> 702,105
-344,804 -> 873,275
-953,848 -> 669,564
-188,76 -> 524,76
-473,852 -> 137,852
-515,14 -> 515,183
-362,654 -> 362,335
-76,73 -> 969,966
-987,743 -> 468,743
-912,28 -> 912,31
-464,247 -> 380,331
-171,20 -> 171,863
-855,653 -> 855,941
-505,415 -> 505,808
-947,543 -> 947,821
-907,365 -> 726,365
-475,563 -> 475,63
-927,679 -> 773,679
-938,77 -> 26,989
-345,909 -> 299,909
-46,22 -> 972,948
-197,735 -> 288,735
-552,748 -> 756,952
-946,180 -> 946,695
-956,779 -> 216,779
-120,105 -> 950,935
-924,902 -> 35,13
-530,49 -> 451,128
-491,693 -> 340,693
-533,774 -> 623,864
-177,618 -> 177,123
-543,114 -> 637,114
-503,585 -> 344,585
-34,836 -> 34,625
-618,802 -> 212,396
-863,678 -> 349,678
-26,850 -> 768,108
-99,67 -> 988,956
-11,902 -> 871,42
-658,749 -> 507,900
-967,178 -> 218,927
-671,247 -> 671,525
-421,985 -> 541,865
-279,639 -> 754,164
-627,747 -> 627,290
-77,66 -> 977,966
-177,282 -> 617,722
-400,444 -> 451,393
-540,152 -> 540,888
-521,196 -> 36,196
-32,590 -> 32,537
-145,613 -> 279,747
-45,428 -> 45,12
-785,956 -> 785,728
-205,507 -> 205,539
-117,12 -> 117,221
-395,17 -> 479,17
-104,881 -> 933,52
-918,716 -> 570,716
-121,621 -> 937,621
-516,773 -> 516,917
-311,605 -> 311,168
-611,185 -> 611,976
-373,80 -> 373,295
-987,295 -> 515,295
-416,717 -> 416,121
-251,508 -> 196,453
-498,824 -> 428,754
-956,818 -> 153,15
-266,272 -> 266,748
-769,312 -> 769,387
-604,766 -> 184,766
-656,934 -> 520,934
-224,771 -> 162,771
-588,395 -> 133,395
-219,489 -> 219,948
-67,42 -> 979,954
-684,109 -> 920,345
-168,895 -> 762,301
-761,953 -> 59,953
-583,408 -> 592,399
-129,48 -> 931,48
-694,76 -> 404,76
-808,380 -> 808,886
-643,165 -> 643,757
-714,543 -> 714,913
-258,550 -> 295,550
-400,857 -> 400,38
-267,573 -> 267,779
-124,182 -> 255,51
-399,981 -> 552,981
-197,803 -> 197,275
-791,706 -> 791,373
-500,664 -> 924,664
-177,171 -> 177,935
-703,43 -> 696,43
-265,849 -> 889,225
-847,324 -> 661,324
-369,965 -> 369,780
-169,965 -> 935,199
-742,540 -> 742,355
-210,854 -> 204,854
-58,281 -> 954,281
-858,793 -> 666,793
-276,156 -> 733,613
-537,538 -> 80,81
-985,10 -> 14,981
-79,31 -> 692,644
-77,41 -> 77,502
-684,150 -> 17,817
-295,785 -> 920,785
-171,579 -> 171,16
-763,754 -> 763,86
-719,573 -> 719,71
-183,708 -> 227,708
-826,952 -> 835,952
-124,914 -> 975,63
-807,704 -> 653,704
-140,468 -> 140,874
-408,330 -> 408,291
-501,958 -> 501,302
-834,505 -> 686,357
-267,76 -> 267,526
-18,88 -> 863,933
-147,188 -> 147,454
-922,733 -> 277,733
-509,259 -> 957,259
-614,765 -> 238,765
-77,54 -> 77,252
-591,532 -> 591,384
-539,574 -> 729,384
-347,158 -> 347,10
-389,988 -> 989,988
-696,571 -> 662,605
-656,207 -> 656,883
-802,446 -> 802,693
-121,35 -> 121,66
-967,738 -> 949,738
-12,86 -> 809,883
-96,167 -> 758,829
-790,42 -> 790,549
-14,987 -> 986,15
-363,689 -> 363,386
-148,148 -> 807,807
-891,899 -> 891,710
-445,678 -> 445,464
-649,426 -> 649,452
-641,378 -> 967,378
-580,220 -> 300,220
-376,789 -> 376,572
-770,551 -> 647,428
-651,692 -> 399,692
-432,385 -> 432,835
-242,48 -> 512,48
-955,612 -> 955,520
-926,568 -> 938,556
-626,836 -> 626,266
-973,982 -> 39,48
-64,32 -> 64,653
-503,444 -> 641,444
-593,306 -> 11,888
-287,138 -> 287,891
-529,886 -> 529,826
-217,320 -> 217,875
-11,988 -> 989,10
-291,30 -> 488,30
-864,945 -> 113,194
-550,501 -> 550,89
-269,474 -> 269,40
-953,394 -> 908,394
-451,983 -> 451,293
-135,121 -> 455,121
-30,35 -> 915,920
-31,451 -> 31,936
-300,715 -> 42,973
-577,459 -> 577,700
-291,539 -> 456,539
-373,449 -> 855,449
-222,136 -> 358,136
-206,14 -> 206,211
-977,577 -> 977,535
-183,723 -> 183,900
-888,905 -> 821,905
-51,301 -> 388,301
-859,594 -> 859,227
-767,343 -> 767,472
-36,897 -> 565,897
-450,481 -> 855,481
-137,401 -> 137,643
-771,276 -> 771,61
-767,144 -> 767,562
-212,111 -> 978,877
-841,117 -> 234,724
-975,104 -> 263,104
-839,408 -> 839,588
-122,50 -> 911,839
-748,208 -> 748,929
-230,305 -> 645,305
-107,324 -> 175,256
-726,339 -> 726,968
-780,127 -> 664,11
-392,148 -> 392,133
-228,607 -> 228,689
-469,379 -> 739,379
-797,851 -> 841,895
-896,494 -> 896,568
-351,950 -> 566,950
-593,387 -> 492,488
-939,664 -> 843,664
-463,159 -> 197,159
-164,265 -> 164,16
-164,147 -> 510,493
-989,988 -> 11,10
-98,676 -> 693,676
-118,384 -> 118,544
-220,502 -> 220,593
-530,437 -> 802,437
-321,29 -> 321,819
-438,118 -> 438,531
-268,128 -> 802,128
-602,770 -> 602,183
-841,58 -> 846,63
-582,371 -> 592,361
-174,163 -> 296,163
-927,268 -> 927,391
-579,280 -> 12,847
-52,951 -> 52,772
-645,203 -> 985,203
-725,119 -> 725,367
-155,112 -> 779,736
-988,44 -> 320,712
-438,463 -> 914,463
-193,948 -> 292,948
-217,398 -> 638,398
-70,553 -> 465,158
-271,262 -> 867,262
-964,576 -> 442,54
-253,67 -> 972,67
-537,507 -> 290,260
-537,645 -> 213,321
-366,130 -> 913,677
-834,283 -> 834,523
-858,825 -> 858,391
-146,60 -> 146,701
-865,909 -> 162,206
-503,628 -> 326,628
-49,101 -> 583,101
-692,17 -> 692,218
-704,744 -> 210,744
-144,434 -> 587,434
-630,393 -> 630,870
-606,616 -> 606,330
-41,83 -> 916,958
-80,341 -> 706,967
-426,683 -> 426,173
-919,962 -> 499,962
-442,49 -> 442,970
-740,378 -> 498,378
-563,196 -> 563,442
-222,76 -> 614,76
-398,451 -> 851,451
-62,50 -> 243,50
-775,114 -> 775,234
-650,901 -> 650,195
-164,10 -> 164,149
-127,751 -> 67,751
-122,674 -> 780,674
-325,652 -> 70,652
-944,908 -> 99,63
-40,985 -> 977,48
-946,21 -> 126,841
-872,906 -> 872,136
-365,288 -> 827,750
-348,935 -> 244,935
-371,963 -> 499,963
-816,595 -> 392,171
-953,673 -> 953,585
-223,612 -> 223,362
-327,423 -> 553,649
-661,693 -> 258,693
-10,838 -> 10,859
-985,814 -> 985,25
-331,529 -> 87,529
-611,460 -> 355,460
-928,426 -> 748,426
-540,172 -> 365,347
-57,45 -> 57,129
-20,861 -> 628,253
-460,474 -> 297,311
-549,876 -> 131,876
-748,197 -> 287,658
-639,137 -> 741,137
-917,35 -> 917,273
-482,333 -> 975,826
-176,817 -> 89,730
-894,418 -> 806,418
-555,227 -> 349,433
-317,33 -> 432,148
-93,988 -> 93,479
-635,300 -> 870,300
-301,437 -> 301,760
-660,548 -> 660,909
-696,18 -> 60,18
-231,787 -> 165,787
-500,242 -> 371,242
-88,126 -> 405,126
-983,941 -> 61,19
-242,519 -> 242,489
-519,957 -> 926,550
-606,181 -> 606,432
-873,216 -> 851,194
-880,924 -> 880,844
-321,119 -> 801,599
-963,392 -> 726,155
-190,655 -> 190,305
-542,676 -> 542,819
diff --git a/2021/inputs/day_6.txt b/2021/inputs/day_6.txt
deleted file mode 100644
index 4b2dc63..0000000
--- a/2021/inputs/day_6.txt
+++ /dev/null
@@ -1 +0,0 @@
-4,3,4,5,2,1,1,5,5,3,3,1,5,1,4,2,2,3,1,5,1,4,1,2,3,4,1,4,1,5,2,1,1,3,3,5,1,1,1,1,4,5,1,2,1,2,1,1,1,5,3,3,1,1,1,1,2,4,2,1,2,3,2,5,3,5,3,1,5,4,5,4,4,4,1,1,2,1,3,1,1,4,2,1,2,1,2,5,4,2,4,2,2,4,2,2,5,1,2,1,2,1,4,4,4,3,2,1,2,4,3,5,1,1,3,4,2,3,3,5,3,1,4,1,1,1,1,2,3,2,1,1,5,5,1,5,2,1,4,4,4,3,2,2,1,2,1,5,1,4,4,1,1,4,1,4,2,4,3,1,4,1,4,2,1,5,1,1,1,3,2,4,1,1,4,1,4,3,1,5,3,3,3,4,1,1,3,1,3,4,1,4,5,1,4,1,2,2,1,3,3,5,3,2,5,1,1,5,1,5,1,4,4,3,1,5,5,2,2,4,1,1,2,1,2,1,4,3,5,5,2,3,4,1,4,2,4,4,1,4,1,1,4,2,4,1,2,1,1,1,1,1,1,3,1,3,3,1,1,1,1,3,2,3,5,4,2,4,3,1,5,3,1,1,1,2,1,4,4,5,1,5,1,1,1,2,2,4,1,4,5,2,4,5,2,2,2,5,4,4
diff --git a/2021/inputs/day_7.txt b/2021/inputs/day_7.txt
deleted file mode 100644
index 84d7622..0000000
--- a/2021/inputs/day_7.txt
+++ /dev/null
@@ -1 +0,0 @@
-1101,1,29,67,1102,0,1,65,1008,65,35,66,1005,66,28,1,67,65,20,4,0,1001,65,1,65,1106,0,8,99,35,67,101,99,105,32,110,39,101,115,116,32,112,97,115,32,117,110,101,32,105,110,116,99,111,100,101,32,112,114,111,103,114,97,109,10,1304,510,261,432,1,767,525,1663,1598,125,84,924,216,1049,365,4,21,226,131,178,666,1134,58,839,1065,670,419,11,297,28,80,258,811,659,1288,21,17,436,1184,823,667,7,499,249,406,157,112,715,220,93,710,148,152,1192,15,493,1551,473,760,503,177,124,123,236,848,221,658,771,347,23,264,739,1583,747,17,336,998,159,679,119,2,160,412,873,1480,337,92,369,136,3,188,683,496,214,131,330,493,649,136,503,249,342,240,728,494,150,25,146,95,1328,401,580,743,385,85,1011,466,36,228,1394,77,1009,46,751,782,1501,464,1046,4,317,1566,1661,822,107,487,208,727,53,55,355,370,1319,16,18,965,1582,190,38,386,169,766,111,262,229,248,318,368,70,18,302,87,218,404,265,2,109,62,557,714,1174,429,1082,786,37,470,195,408,598,935,1224,11,83,318,475,354,342,699,209,372,942,801,30,1065,4,110,969,449,266,50,314,771,890,314,394,316,211,1238,84,574,120,698,1382,1039,670,121,281,241,491,742,802,194,41,573,473,824,1283,59,371,1167,32,1645,115,58,845,11,408,1284,414,1618,240,364,991,111,517,146,256,616,968,130,98,414,13,152,332,96,816,366,214,69,1072,1225,98,122,554,236,14,499,89,793,119,945,511,476,112,1201,501,9,23,517,277,283,1600,581,290,248,472,38,144,178,645,477,1016,139,123,4,671,370,1025,290,20,1680,856,212,44,93,656,1163,384,852,461,1248,79,341,1125,812,746,511,1461,420,1070,22,126,274,1698,526,949,20,865,66,1244,157,275,670,384,1142,696,43,74,344,893,237,327,135,272,690,1032,395,1,16,521,1573,304,512,466,243,171,913,323,325,82,16,462,457,1609,24,98,22,528,158,79,1012,60,146,58,504,503,1,42,78,164,3,439,653,217,251,94,584,333,435,254,170,1213,671,548,799,332,434,487,61,710,136,551,556,722,316,365,1403,115,104,597,137,881,577,1334,41,649,177,196,434,191,101,248,14,71,1053,44,1074,51,607,65,161,922,235,132,247,1412,500,1409,15,86,72,327,878,507,1379,454,109,1250,184,19,284,1057,353,476,807,577,305,466,40,136,16,883,516,253,150,125,49,102,404,1606,518,94,1042,204,443,444,22,1197,168,766,1466,1053,695,565,77,406,694,102,84,414,686,800,157,7,516,440,139,1538,144,1327,851,1526,69,315,1078,678,247,1579,100,254,947,758,603,44,535,1242,1117,1119,645,203,97,88,437,886,408,566,351,36,0,461,1098,415,1381,1217,1763,202,1106,466,30,237,757,313,390,38,344,1254,1275,343,278,1064,1116,70,279,276,214,1153,306,67,488,683,432,53,128,91,1082,403,117,1169,568,60,578,475,657,43,509,434,128,1115,872,333,73,954,789,590,185,1305,352,574,266,1634,731,156,562,247,356,743,689,298,637,1125,590,761,123,1508,33,0,558,146,888,236,668,53,94,619,591,422,44,1114,1284,806,39,816,47,59,76,1090,1102,7,1307,676,1161,473,376,175,224,431,284,875,86,28,99,700,459,204,673,1001,31,302,291,386,259,4,181,1048,274,1661,347,614,760,187,1118,196,1076,219,1194,226,909,189,208,265,601,503,693,213,16,63,25,108,133,979,56,195,250,294,920,231,435,1004,352,469,55,1374,605,72,714,534,504,1411,128,724,1216,7,317,948,285,668,320,97,316,298,145,605,40,486,324,399,336,612,386,328,631,44,366,103,109,219,530,39,654,341,132,1090,50,15,654,801,791,169,746,1512,660,383,67,762,46,236,184,51,1051,1161,347,673,554,523,3,463,31,132,258,413,18,293,986,699,608,289,175,70,217,136,857,473,585,14,636,189,119,128,129,358,560,580,425,236,1194,1182,213,79,36,162,200,179,170,892,1398,336,1073,76,798,231,58,216,1134,175,392,688,342,28,300,672,1160,501,44,79,357,1411,856,27,471,600,303,35,546,1466,74,359,234,1200,657,224,431,802,0,584,784,1245,15,776,28,1464,191,275,639,569,179,908,173,1041,630,907,1520,248,1,34,596,53,44,9,782,777,295,818,1295,1115,468,34,530,349,271,99,344,923,733,124,170,208,20,744,530,582,35,58,938,721,253,934,326,528,722,123,0,623,382,889,929,454,457,1024,43,293,521,548,291,654,506,307,1031,1,390,321,727,937,1000,57,52,136,69,920,19,269,950,578,119,207,14,244,274,171,971,548,335,748,553,196,531
diff --git a/2021/inputs/day_8.txt b/2021/inputs/day_8.txt
deleted file mode 100644
index 05a40c6..0000000
--- a/2021/inputs/day_8.txt
+++ /dev/null
@@ -1,200 +0,0 @@
-cgdf eagcbf fc adefg eacdb fbedga geafcd efc dacfe fdgaecb | dcefbag dgcf fc daefc
-bdecf dcagb gbf gcbdf deacbf fg fdebgc fegdcba dgef bgefac | dbfec gbacefd gf bfg
-cfeag becgda bag ab abcd ecgdb gdefba agcbe gdcebf fgebadc | ab cdegbf cbda cgfebad
-gc bcfgea ebdcf cbedg edbfac ebfdgc bacfged ceg dfcg abdeg | eacbdf geabd dcbef fcgebd
-fgbceda afdbge fbcad badgec cfde gfcba ebcda afd abfdce df | fad fdcab fda befcadg
-gfacd dcf bacedg afgec afdbec df agcdb agcdebf gfbd cdgbfa | df df bceagd ecafg
-gbdfe ag gda bfadcg gbedfa gdefcb beag gedaf cdaef bdgcfea | gacfdb gedfab ga gda
-deabg cag cfdea bfgcda ecgb fcbedga cg dcage agebdc gdbfea | bacefdg bdcgfa adcgfb afedc
-agfecbd gbcadf ce defc dabcfe fgeab gbdcae ecb fcabd bcafe | ebafcd ce ceb ce
-fa adfebc gdacef bfeca begca bfad bdfce febcagd dfgceb fea | afe cfdgbe af eabfc
-abge eb efbgadc cadeg cabefd gbced cgdfb abegdc acfged bce | dgeac ebdagc edagc gacbfde
-cfbedg gdafbe fgebd bc cbgdae bcagfed ecgfa bcfge bgc bdcf | gafebdc bgfdce bcfged dfgbe
-cafebgd gafdc bgcef bcagf fba cabefd ba baeg feabgc bdfcge | fba ab ab gaeb
-ecgfbda afbeg fcdeg fecbga cea afbc abdegc befagd ac gcaef | beadgc eca cae gebacfd
-cedag gf afbcd cbaedgf eacbdg acfegb fcadg fgedac gfed fgc | dacbf daecgb bagcef cgf
-fagbd gdaceb ebf efbad gacebf fcde ef ceabdf aecgbfd dbeac | dbeac bagfd cbfdae fbe
-begadcf aedb cgefa ebdgac acfdbg cdebfg agebc ba bac gdbce | ab faceg bac adbe
-bgde gb abefcg fdaecg gcbdf ebdgafc dfgce gfebdc cgb acfdb | fdbcg gb dcegaf cfdge
-efbagd gefcdb dgbefca badce cegdb efdgb gfcbae cge dcgf cg | dbeca bdaec ecg egc
-begdca caef gfebd cgbefda cgf cf gdecf cfagde cagbfd agdce | dgfcbea fcae abcfgd acdgbf
-cadfbeg acd egbad dcbf efcab cd agfbce daebc gefdac afbced | bdefacg cd abgfec dgecfa
-fd bfd bgcfd bagcfe edgf fcbge acbdg cdebgf efbadc bgeacdf | df bdcga fbd gbedfc
-fdgbca deca de edagbc ebadg gbfea bcgda bcdegf dge gcebadf | abgcfde de gdeba acde
-df gdbecaf bdfe fbcgae fedabg fdaegc cgdba fdg adbgf egbfa | gdf fbgaec egafb gadbf
-egfbd cefg gfdbac fbdea bedcg gadcfeb gdefbc gf bfg adgcbe | dfebg dbacfg gcafdb dbafe
-bgadc bacfdg acbdge egafdcb ea deca cfbaeg eab dabeg fgbde | aecd bdcag dgeacb bafdecg
-cfbeag febcgad cge dacbg facdbg ge gcbde eadg acbgde fcbed | cagbed gcabfe gdcfbae bdgec
-cgefa eabf gbedc gcefb cdbfaeg dfabgc fb beacgf gfb gfedac | bf afceg bfg fgaec
-fdg gd edfcbg gaed gfcda febcga ecdafg cgfebad fgcae dfcab | cafegd cedbagf gfcea aecgfb
-dcafbe ebcadfg adcgbf abfcd bg fdaeg agfdb gcba bgd efbgdc | cgab ecbdgf agdbf efcbgd
-adcbf dagfcb dfecb dagc feadbg ad bgacf cegdbfa bad gcafbe | cfdbage deafcbg fcagdb cedgbfa
-afbecg fe egdcf gef afde acdegf feadgbc fdbgca gdceb fgdac | edcbg edafgcb afgcdb dbgce
-gbdfc aecdgb ef bfe acdbe aefc fceadb bcaefgd agbefd bfced | fbe gcbdf fcea adbec
-fcgae ebcfa becdagf fgadcb cba bfdea bedc ebacdf bfgead bc | egbfadc cb cb caefg
-efbd abcde cfeag aecbdg daf df eafcd gcafbd fdeabc cgbefad | gbefadc fecga cgfae acdbe
-afegbc becaf gaf fcagbd egbf adbcef gafec aedcg afdcegb gf | bcfae efacb bcaef fga
-gf bgecdf gaebfdc fdcbg fdg ebfg agcdb cfdbe febacd efcgda | fdcbe gbcdf bcdga cgafde
-fdebac dgac dfega dec feadbcg fdcgea cefgb dfaegb egcdf dc | decgf gdca ecd cfgaebd
-fabdgc dceab dbfgc dagfeb begdfc bdgca dabfcge dga ga facg | gfacdb adgcbef bgedaf facg
-cfeag cgdfa aegb fecdgb dfacbe dcgbfae ebfca ge egc gcbafe | ebgfdca aebg gcebfd cbfea
-dcafg edcgba afebd faedbgc bgef edafbc fabdg bgefad dbg bg | ebdagc abgefd afcebd bfeadc
-dfbgce efcbg efgbac fcbea abdfgce fecad bgac fba ba dfaebg | cafdgeb bcag adcef ab
-acfb bec fabged gbeafc ecgabd fecdg gabfe bc cbgef gcbeadf | cbaf bafcdge baegf fagbde
-fgebcad cgadfe agbdcf gfadc edfcg badefc efag ef gdbec efd | dcfeg becdfa bdecg bgdec
-bafdgc fdcegba deafb dcbfe abf gedfa ab ecab cbaedf fecdbg | aecb ba baf dbefc
-bgfeca cadeg adfgc gea ae bcdagef edba abdceg gbdec fcebdg | dcgefab efcbag fcdag beda
-fcag afecbg cabdge dbefa cef ecbgfda begdcf fceba fc gbaec | gfca bdcegf cfe aebcfdg
-cfbga df bgaed dgef eafdgbc cdabfe bdecag adgefb dfa agbdf | fd gdfe df df
-edagfb cdfbaeg aecd gcbad dcgbef dbeagc da dcegb dab fgcba | cdae ecad abgdfec cfgab
-ebc agbcfe eb bdfcag decgbaf agecd egdbfc egacb afeb bacgf | ebc cbe abfe fegbcd
-dcefabg bfaed feg ebgfa eg egad cgdebf cgfab degbfa acdefb | edbfgca cdfaeb gfe feg
-adfebc dbgce ecfdgb ba daegb beadgc dfgea dcegfab agcb aeb | cagb acebfdg cbga eafgbcd
-afcbged gfdbc cd bdc edgfbc befacg edcf abdceg dgbfa cfegb | gfcdb gebcf bcd fdce
-gbfceda bf bfd cedgf fgdeb gfab befgad gcebda debacf gbade | gfdbe fdebag adegfb gdeba
-eacd cdegafb bac gbedcf gcebd afgdb ca gadbc gdcbae eabfgc | becgd fcbgea aedc edac
-bagd bfgac adbfc aefcg gcbfad cadfbe dgecfb gfb gb gefdabc | fbg dcegabf bgad bdcfa
-bfaedg bfcga cdgfe fcdgba gabcfe eacb debfcag eb fbe gcefb | bef efdcbag cbfaegd ebca
-afcebg dbfag dabe dgbef cebfgd gdafc egadbcf ba abg afdgbe | bga bga gab ba
-ecdabg defgc bdacgf dae eadcg cdbag gcbdafe aecb adebgf ea | bfedagc adcbg eagdc bdgeaf
-acgde bcdea bfcd bface becfad afdcgeb dfaebg bd adb cfgeba | eacdb cbgefa fabcge bcdea
-gecfad fbcegd dbfaceg fgabe dge gfbed fbdgca gdfcb bdec ed | gdbfec egd eagbf gadcfe
-dagfe cbafdge bag dgebcf cfab dafcgb adgbf ab fgdcb geacdb | gacfdb fgbcd gafdb afbc
-afecbdg bdc adefb eabdcg fcged bfdce bfgead bdafce bc bfca | dbcega bc dabgefc fcba
-cdgafb bafcge fb bdfg dagcb cbgafed fcdba cedfa cbdgea fba | deacf dbecga fdbacg gabfdc
-dcf bcadf ebgdfa bcadgf bedac fc dfcbeg beadfcg afgbd fagc | dcf bgdfa cbgdfe agebdcf
-gadbf egdba gfdeca aeg cegdb gdbcfa faeb ae gdaefcb gebfda | ebdag eafb baged ae
-ebfgc daeb cae gceba cgabfde cgabdf ea abcgd bdaecg ecgadf | ace eagbcfd ea efacgd
-bdeaf ag bgdeca dag agfdb agcf dcgbf cfgbeda dfcbeg cdagbf | fbaed fgdabce beacdg ecabdfg
-ecagf gcfdea ba gbfa badgce cab abfce fecdb bagcfe bafegcd | faecdg ab bedcf edcfb
-geadf adgebf eda cdgfab bedg bfadec de gefbdca adfbg gafce | ecagfbd cafge de eda
-fb agcbe gbfc cbaegd ecgfdab edafg bdcefa efgba bfa gabecf | bfa fcbade gceab fba
-bdaefcg dgacfe fbgadc gfbea dcae aegdf ad gcdfe bgdcef dga | cdae da cade gdfcae
-cbeg eacfg fbcage acfdge bgeafd gbfacde afcgb bga gb cbdfa | bg gabfde gba fdagbe
-bca defgab bc gfcae gaebd dfebac bcage deafgcb gcebda cgbd | edbgfa cb gfcea cb
-fcb cgadfeb bcagf abdgf cegdfa begcaf gcbe fcebda cafeg cb | cfeadbg cfb dfbga gdaecf
-fdebag abdcge gfdb efbac gcefad eagfb agb degaf bg acfegbd | agefbdc gfdb gb bedafg
-ec dce cgbaed egabdf dbeacf cagdf ebcg agcde gbedacf eagbd | bafecd eadgbc cdgfa degac
-beg fageb bfgad ge abecf bdcfae caeg efadgbc egbfdc cgebaf | dfabg fabgd fbdceg beg
-gdcfe bacfeg dfb db cfbdae bade aegfcdb fbecd bagdfc fceab | cbagfe bd bd bd
-gab cagdfb fgecdb fgaed ab gcbdf baecgd abcdfge gbfad bacf | gbdfca gab bgdcea abg
-ecfga afdbeg gdceafb gcedf ecgabf afc dcgfab ca bcae gbaef | cgeadbf fagec cfa aebfdcg
-fgaebc aefcdg fdceb dfbeg gbf agefbd fegdbac bdga bg fgdae | bcdfe fgb acfgbe gdab
-dgaecf fadbgc cdfeab cagbe cbd bd bdeac gadbfce afced bdfe | gfdace febd db cgfade
-bfdgac efgdab abd edcbf baeg ab afegd dagecf cgbfdae edbfa | gdaef dbefc dab ba
-acgb bda gdaefb eabcfdg ba abced gdcbe dacef gcdeab bcdefg | adefc bcade deagcb adb
-fgabc cdfabg cga dgcfeb deagbc ag fgda dcfagbe caefb fgbdc | dagfbec bfacg gfdbac edgcab
-gcfdeb fbgdca beagf fgbad ecfba efg egbfacd ge daeg defgba | fcbgade fbgae fbcae adgbfe
-abe dgab defca dbeacg ba fgbdce cbdeg bfceag cebagdf eadcb | bgda dfgbce dfegbc gbcfaed
-cbafg efdgcb cfaebg afecb aefg gafcdeb ecf ef becda fdgcab | cafgeb acgbf acebgf dcbfag
-eb cebg dbe dceab dcbage ecgadf gcaed cbfda agbdef gadefcb | agebdc baedc dacfb gcebda
-degcb cagbef dfceba gbf fg gbacdf gfeacdb fbgec fgae ebafc | bfcdga bfg fbaec fbg
-dbgaf bca gacde cefbga acebgd edcb gbacd fbcagde cb cdefga | gcdea fgcebad cab cdebfga
-bdgfea gb fcdeg gfcdae ecgfbd cdgb egcfb ebafdcg befca gbf | gb dagebcf dgfec dfgcbe
-geacb fg badfc dagecfb bfcgad gfb fcbga gcdf efadbg befadc | dfbgcae badgcf dcbfa aebcg
-febdc aecfd aebgfd gcdfbe dbgcf bef adbfcg dbefacg gbce be | feb eb ebdcf dceaf
-acde cdegb decfbga gebac eag cegfbd ea cdbgea ebgafd cbagf | ae gea bgdafe cagbe
-gefac egbfadc degbfa badgce gef fe efgbac agecb fcdag bfec | afdegb adbecg agbcde agfce
-gfceb bg edcbf afcegd gacb fagec fegdbca gbaefc fgb edgafb | bgf agcb eagcf facged
-bdcagef dcfbg ceafd bead adfcb fgeadc cba cefbga ba cfdeba | gcabfed decfag ecgdfa fgbdc
-cdbfge bfgac efgad cbae daegbcf fgaecb ebg begfa be gdacbf | eb be efbga adefg
-gfabd bgaed gf cebfga fgb eafcbdg degf aegfbd acdfb gdbeac | abged aebdfg bfgeca bdagec
-gcafd efagcd edcg bafdeg bfgdeac ebcgaf gd facdb dgf efagc | fbadc fbcda cbeafg cdebgfa
-dfeba cfb dbcgef dbceafg efgca cbeaf fecdag fbgcea bc gacb | aebcf fcb adgfce fcbea
-badgf agdcef dafbec ag gabe dfeab dgfeab bdgaefc gfa gdbfc | eadfb dcefag cafdebg edfagc
-bef eb abec fabgec facbdg afbcg defbag dcfge fcbge deafgbc | cgebaf eacb dcagbf bfcga
-bdfe dgebcf bcgefa ed cbeadg gefdcba fbceg dcgfe facdg dge | dcfge de cgdabe dge
-gbadc dgbefac cgbafd dfcg dfacb ecgabf cg gcb bcfdae bedag | cbdga cdbag gdabfc bdeag
-bagecd cf fbedcg cefa cafbd bfc cbedfa gafbd baecfgd caedb | gfdebc cdeab cfae cfb
-fgdab efbacd decb cgaefb dbcaf acfdge fbc fdaec edgabcf cb | edbc bc fgecab cfgade
-dcbga adfbc df decfab fbed cfeba afd egfcadb dcaegf befcga | ebfd bgafec aebcgf ebdf
-cbdaegf fdegcb cgbd dafecg dbfgae dfbce gdfec bdf bd eafcb | cbdg dcgb gdfaec ecabfdg
-bgfade bdeagc befcd daecgfb efb abecd eacbfd gdcbf cfae ef | cfea ecdba agdcbfe gbaefcd
-fagd dcafbe gdabfec df bgcfe cgfdba bgadce agdbc fbd gbcdf | bgcdf df edbcfag df
-gfceb ae eac adbegfc gadcef dcbfge afceb adcbf gfbeca ageb | cbegfa cfdab ae ae
-adgeb fcbdg fbdgec cbged ecb ce efgabc dgefcab bfcgad dcfe | abdegfc fgbcae cdbfag gfdbc
-dfbegc cb dgeac afedbg cebf ebacdfg dfegb gdbce cbg fgbdca | efagdb gdbecf dbgec bacgfd
-fdcgabe adfceg fegbcd bg cdefg bfg cegfb ebfca bfagcd edgb | gbf dbge fcedg gb
-dgefc cdaef cbafgd dbgecaf egfb bcegfd gabced eg bdfgc gde | acgdbf bedgac dfgce adcef
-fgeac dgbfeca gaecdf cb bcegfa cgbf ebc cdageb defba ecbaf | fbace ecb gface gbecad
-abedfg cdefb gfb egafd bg ecagfd gbfde agcfbe bdga dgceafb | fbg efgbd bfg bdfce
-gbfcde fb ebdga faced bfca eadfgc adbcef eabdf gedfabc bef | bfca bf bdefa fb
-fbgadec gcbe bfgca cg bacfde egfdca cag afbec gadbf cagbfe | gbecafd bacdfe cga egcb
-cfead fcdbge ebf bace eafdcg bagdf fgbecad be eadfb fecbda | efcdab feb aefdb ebf
-dabfc cfeabd ec cae cagbdf fadeg cdafbeg dbecag bcfe efcad | bcef aec eac bfacd
-fed fbdgea adgfce gfcd acdge acdef afbec df gcabed bdcefga | aebgfd afecd bcfae ecdga
-fcabe da deac fdgeb fbead facebg gcdbefa fcabgd dfbeac dab | fecab bcfgae fcaeb ecbgaf
-cdebg dgebac abe fagcbed ea cbagf adeg cfdbge gacbe edbcaf | dcebaf fgbca adeg cafgbed
-gedfcb bg bgc gfacd fdgcabe dgba bfagc afbec bgacdf eadcfg | gfcab bcg bg dgba
-fecga fgbeda fadec fdcbega cdefba becdf dgfbec ad dacb dfa | cedbfg gebadf agefdb bdac
-bcgade agefd ebfg bag gfdbea afegdcb cfdba dagfb bg gfcdae | adfbg bga gb agb
-fgaced bcdag dcbagef gedcbf dcfge fga af efda gacdf eabgfc | bdcga fga dcfeag fead
-dega abd adbgc eabdgfc dbcefg da fadbec ebcgd cafgb adgcbe | cbdga cabdg adgefbc bfcgde
-bfdacg eabgc bce abgdc cebgafd be ecadgb faebdc bdge gface | bdeg acefg gefbadc dcgba
-fedgc cadefg cedagbf adcfe abfdc efa ae agfedb gace bfecgd | acbfd ae gcbafed cdabefg
-egdcab egdfba gca abfec bafgd gcbefda gfbcad cg fcdg bcfga | gc gc edabgc cga
-eb gdbfca befdc gdcfb ebdg efb edcbgaf ecfdbg fedac egbfca | gbdcf acfegb aedfc dafcebg
-aebcgd bacg ecgbafd dafbec ga dcbae aedbg gad bdgef fadgce | adegb gad becagd edbcfa
-cgad ceabdfg fedbc gd cfbage gfcba abgefd fdabgc dcgfb gdf | dcgfb gbdafec gbfadc dgca
-acgebd fdebga cde cedfa gfceabd baefd cfeb cgadf ce fedcab | afedb deabf afdce fabged
-gcabe adge bcdfea cgebf bgcfda aeb gdacb ea aegdcb cefagbd | bea gaed agbce dgfacb
-cefad cadgbfe cgeafd eg agdbfe acgbf fge cged gfcea ebfacd | dacebf dceafb fabecd gcde
-gbfcde fcg ecgadb cbdge eagdf edgfc bfdc bfecag fc dbcagfe | cfbd gfdecb gfc efdga
-gebafc bcfae fcebd gfabed bea bfagc fdcgba ea ceag gacbefd | ebacfg egac bacfg febac
-ed gfde dcgea cdagf ead cfdgaeb gcdafb aedgfc dbaefc ceagb | dae eda gfabcd gdbfca
-cfbgd bfaecg dgbecf fgcdab dbgaf fba bdcefga af gebad cdfa | feadbcg fcad bfaegcd af
-gbd eabfgc egdfbc dcge dg bdcgfae dbacf cdfbg fbedga cefbg | ecgd gbd dgce dbg
-gac gcdaebf agfcbe gdebcf ga bcfdag adcbg bfgcd dafg cedab | gcafeb agcdb cbfdag ag
-dfg bcfaegd dg gacef dgbefc dbcaef gfcbad ebdg efcdb degfc | efcga dfcgbe gbde cefdb
-bcae aegfb egdaf gdcbfa eb fbcgae afgcbde ebg dbfcge bcfga | cdbegf ebg fbacg egb
-ceafgb ab edbgfac aedcgf abfc fgaedb eab bcedg ebagc acegf | fbac ba ecagf abcgfe
-geafd bgeacfd bcfgda bdca cebfga gdbaf fgdcbe dgfbc ba bga | efagd gfbda cebafgd agfde
-gacfed agc cfgdbe ca ecfdg fagdc agfbced bacdeg bdfga eafc | egdfc badgf egcfbd bfadg
-eca ac cadgef eacbdg fecgdba dbace gbca dfgbec afedb bgcde | gbecad bcag dcaeb cae
-gfaebc fg fcaebd facbe fgeab cbdafg aebgd gfce caefbgd afg | gf cfbea edbag efgc
-fgaed gacedf fbdcga ecfa degabf cga ac efabgdc gecad begdc | efca acg edbgc cag
-afdbgec gcebad fecgad ecagd fdac af bfaegc fae efadg efgdb | acdge afegcb gafde fa
-eadcf dbecgfa dfaegb gdcb ecg adbegc gc geacd ecabgf edabg | gdbace bcdg ebagfd cbdg
-fgade dgb gcbe gafcdb fecdb bfacde ecgdabf bdegf febgcd bg | cdgfab cgbe gdb gacdebf
-dcfbe dbfeag dgebca fbagcde gbafdc cagf bgf dcgfb fg gcbda | abcfdg bfg gcbfd dcfgab
-bgf dgcbef acbefd egadcbf bafdge bfdae bg eagb acfgd dgbfa | deafb bdfae dfagc cdgaf
-bafcd egcbdaf dg cfbgde eagd gfbea bgd adbgf gdeabf befgca | badcf fbaeg dfgab fdgeabc
-gea fecdag gadbfe aegdc acfde dbcefa ge bcagd bgdacef egfc | ecgf defac gea defca
-bfgdae gefabc fd edgcb gefab abgcdf aecgfdb fdea fgbed dbf | fbd cgedb fbd df
-adbgec bc dabfge dafeb dcb cegfd cafb becfd cgdebaf bdecaf | febcd cbfa cb adbcgef
-ecgdf fbdgcae acfbg fdgaeb adf afgcbd dagfc ad adcb acgbef | dbaefg cbfga cabgf gfacd
-cefa ae adcbg gefbad eagfcb decbgf aeg gebcf gfdacbe abgec | cefdgb fedbcg cfeabg gbcea
-ebfag fdbcge gdbaf fcdag fgbace bfd abde gfcdeba db gefbda | bdgecf ebad deafbg fbaged
-bgecd edcba bgacef dgacbe fdcabeg fbeacd gbc fgdce dgab bg | decab bcdeg fcgbea caedb
-bc abged abgfdc dgbac edfgca cfba gcdbef dafgc dbc cbgdfae | adebg bcefgd cabfedg cdgafb
-gcfad fb bceadf cgaeb agfbdc fbc gfaced acdbfge cgbfa gbfd | afedbc cadfg gcbae ecbag
-cgadb begfcad gdcbfe bdegc edab cabfg cagfde dca ad egbdca | adc da adc da
-gfcbd cbegfda dbga da bgdcef bgdcaf gceaf cfebda fdgca acd | dcgfa fedagbc bgcfd afgdc
-afge ge beg abcgd afgcedb fgcabe fcbae cdebfa dgebfc cabge | acefbgd geb fage eadcfb
-fgecadb fcae edgfcb aedgf gdfce eagdb af dagcef fcdabg adf | adfecg ecaf dbafceg cgefbd
-gabfd bedag abegcf df fad abcgfd bafgc bfgcdae fcdb gacfed | aefgbc agdcfb cagdfe afd
-degbafc ga efcga age fdcgae agcd dgfeba dgefcb fcgde cbaef | eadfgb afcbedg degfcab fabecdg
-beg aefgbc eb efbd cbagd gaedb aegcfd afdge dafecbg eagdbf | dagcb geb febd cefdga
-da cagfd fbgcae fgbcda gfbcaed edfcg fad ebfcad dabg bgfac | fcgde daf cgfabe afd
-gefdc ebafgd fgacbd agbc fdacg dcabgef ac cda bafdec abfgd | gacb gdfca fedcbga fdcga
-gedfba bgdca dfgbc bcfgde bdace bacgdf cafg ga dag bdcafeg | debcfg cgbad acfg ecdgbf
-fagde fdgeca agc gc afedbg ecgf agcedb dfaecbg acdfb fgdac | cg adfeg fdgae efcg
-dgcbe fe abcfg cfgead gdcbfa efc egfbadc bgacef fbae gfbce | fbcag abef faeb cafbdg
-beadfc eb gbef fbgda cfbgda gadbe gdace gefadb edb cgdabef | aedcg deb bde dgbaf
-afbdge dbgfcea fadcbe cb febcd bcd gfdce cfagbd bcae bdfea | bdc gfadeb cebdf afdbe
-degca adbfgec bfcgda fa eafb fac bafecd fedbc cfade bgecfd | cbdafg edbacf agcfedb fa
-fabde egdacb bfd fdgbac ebcda bf bdecfa fadge dfegabc fcbe | feabd fdb cfdeba bf
-aedbfcg fadbg cefgba ecdfga efg ge adefc dfebac afdeg dceg | bdfeca gcde aedcfb faecd
-dgaecbf cefdgb bcgdfa edb ed beafc gfed bgfcd dacegb dcfbe | deb gdbcfa cfgdeb gfecabd
-bdagfc bf gcdaeb dbgac gdfce cbdfg abgf bfc abfgdec bdacfe | dcgfb defgc bfga bf
-gef bgcf dafbec bcfde decgf bcefdg fg bgcfade cedag fdbgea | bacefgd gcbf fg dbfagce
-fagcdb cf bcafed cefa bdegf cdaeb edfcb ecdgafb daegcb bcf | dcfgba eagcbdf caebd afbdcg
-ecd dcebaf bgeafdc adfbcg gdafe cbagde ecbf fceda ce fdacb | bgecad decfabg ec bfce
-begda gfbd fbgade agdbcfe gfe gacebd bfega gf bcfae adcgef | efg fcabe geadcf abfcedg
-cbfga ef efcgb befcga fcea fge cbdeg dgebaf fcbgad afegcbd | fadebg ef abefdg fe
-dagbc dab fbdg cdfag efcbda gecba bdcefga gdbcaf cdefga bd | feabdc dgabc db cadgef
-ge beg afcbed edbag fbgcea dgaebcf adbce fbadg bgacde gdce | gced egdc feadcb eagcdb
-geafbdc ca gdafce adbeg cfab bagdc dcgebf adc gdfbc gbcafd | cegfbd adc ecfgbd cfdgb
-adg afgdc gcedfba cadfb bgfaed agbc cabdgf dgfec ag febacd | fbecda cdgafb ga dga
-abcdfge egc egfabc ce gedabc dgfcb edgab gbdec fbaged adce | ec gdbce ceg cbefga
-acbgf ebdfg gefadc fae efbag gcaefb ea cbea cgbafd cagdbfe | bcae ea fdcgbae ecbfag
diff --git a/2021/inputs/day_9.txt b/2021/inputs/day_9.txt
deleted file mode 100644
index 9494363..0000000
--- a/2021/inputs/day_9.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-6587893456954341398543210234567899875421012578932123459998764323569999996432345899989359878998654345
-5476894579873210197654328757678910976532323457891012398997653212998798789521256789879498764679795456
-5345679989864321349865479869799929987643498598932923987989543209876697654320145679965987653567989767
-3235678999965443567976567878999898997654587678949899876878994319965498765421236789764398532479879878
-0124789339897764678987878989998767898986798989298798765756989498754349899535456899879987691298568989
-1235693219799865889698989990987856789997899592139679984445678987643237998646567890998698989987457899
-2348789398678976789569999921976745678998985431095459873234569998765145689987899932349579768976567978
-4567899976599989895478999899875435899359876545984398765145678999843234567898976543998498657697798964
-7688999875487899976789298767986546789999988769873239876234567892954345678909997659876597646579899543
-9799998764325578987899109654397967999879999898764346984345678921986456789319889799989986534466989542
-9989879875413467998998923993239878998758999969975899876476789210987567895498779989992395421355678954
-9876569974324678959987899889101989987646489459896789976567894321297678976987667879893987510134569999
-8765498765456899769996798767992493499832367999789893987678965456998989989876546758789997921235678988
-9874349876567998998965689656789569989753458987678962398989879599879799992965434345678986437367889876
-8765456987678987987654678945679678979768667896569541239899998989965678901977321237899876545459993998
-9876567898789996796543489939798989764979778965499432345789997879974589919898934348901997668567892109
-9987998999896789899755569898987897653989899012378945497899965467893469898789895459919898877679954919
-9898919789965678989876798767346789762399943234569767989999854359932599787698789667899769989789899897
-8759105679654569878998899856235999321239854355878979879998765567893987654589678978998953599896798786
-6543214598979698968899999843123568910198765467989998767899976779964599643279567899687892498945697655
-7954323497898966556789987654013467892499976589099987756789987889995798732153456789576931987432398543
-9899435986577942347896598732123458999987899693239865347991298999989987643012348894345899876541239432
-8798949765456891238965439653234567898976798789399876456789459999879876532145457896876789987832396543
-7686799887347920145976549878347698987755679899989986567897667898965987674234668999987895498743987965
-6595789998967891247897656989498999876544587999879987678998778987864398765545979998998989359654599876
-5434678999298932346789767896569098987623456796567898989539899876543219876656897987889874298765678987
-4323576789399543456789978998789197898212345679335679999421921988754301998767986576569763189896789198
-3212345789987676577899899239899976789853458789124679878999890199865492999878975432478952076999893239
-4523456897898787689998789129998765698767569991012399865788799345987989899989896543578943145698994345
-5635567896789898799029569098899987999878978962193987654647678976799878799998798654567899239987989469
-8756678935978999898998678987799999899989989643989996543234567897898968678987698785678998998795878978
-9897889123467893967899789876678999768393498959878989654346778998987654567896539876789457789654769899
-6998993234679932456999899865589996543212347898765578995487899989998785678974323987992345678943456797
-4349965345789531345799987643499987664324456987654456789598999878999876789865434598943567889752589895
-6459876459999910239898798101989198976535967899532345678949988767899989899989545999759878997643569994
-9878987767899891398989543219879239987649898998721235789039879857999994978998769899998989498957698989
-7999999878986789997679654598768945798959799987632345892129967234678943567899898798767894329878987978
-6989987989345679896598995987654999899898679876543566943298654123487892389989987657656789210989876569
-5978996591236798789456789998743878998786567987664689954679942012456799459876799543234568921298975497
-9769889432445987679345699865432459987675478998785799895799842123867898967995698432123556932967964326
-8958778956759876531256789987543579876564367899896895789998763435798957899854597543012345899859873214
-7643568997969765430347893987654678976444259899987924556799878976899645798643498632124556789645995403
-8532456789879876321346932398767889987320145789699012345679989987896536899854987653246787896539876912
-7421345678989985442457893599898994598321237894556923966889999998998745698765698764345678954321989893
-6530496989498996584668999989999213469644345892349899897899999879799656789876789875456799987553598789
-7699989892397987676789998979992101278955456789498756789999898765688979897987894989667976599679699667
-8987979789986599987899887968989232349866667899976546689998765544567899956598923499878987698798986545
-9976867678965434598999765457678945458978878999895634578987654333456989645459012398989898789987654436
-8765454567897665679998654346567896567989989998764323689999765212345678932399923987698789892498742123
-6874343789799779789876543213458998678999799987653212387921976924566789543989899876554678943985431012
-5432102345678989999965432102349999799987678987654501276892989896677899959876798765432567899876543243
-7643412456789999989878676413456899989876469898876612345999898789998998899995439876753458976987654354
-7655324577897899878989654329567988764514345789987843456798766599889987689984323987764967894398766456
-8786734678976799767998765567978976543101234599998954567899954349778996569876212398876878999989877767
-9897645689565698757899887679999098654332345698999875678999843234567897678965104569997889798976998978
-1998756789434569943535998789899129786445689997999989899998785123456998789874315678998996567895329989
-2349967896513479892124569896788939896576898786789996921989632013667899892965326679019965456996210197
-3959879974323569769023456975767945987687987675678985439876543124589976920976434567997894346789321256
-9899989965434679658934567894556899998999876554567976545987654565697895439876565879876543235678932345
-9768999899565798747895879913445678989678965423456897656898765677796796549987676789998432126799543556
-6756897788979899656789989101236789676569874312345798968999879788954789678999789899987643235689699789
-4346796567898998767899894212345896545456965101276789879998999899432688989989892968998754345678988999
-5657893456987899878998765523466789634349876514567892989987656999543567899876901259789895466789877889
-8789932678976789989579865434567898722298765423698921291296545678957678998765432345678976989898656878
-9897643789865678996469876558778969810129895434789210199986534589998989349876553499899989999986543566
-8987654898754567902345998669899654323345987567994391987673323467899995456987694989999999999986432345
-7898765998843236899458998789998969834589998989879989876542012456945896678998989878998788898976521289
-6569976987654345678967999898587897655678999898765779765432135578935789789459976568986577667898432478
-9439898998765469989998987967476789767789988766434568976543234689124678992349865457997402456789543567
-8998789659989598898989876653345678978999876654323456897654345691012567891998754349876212398897654678
-7987679743497697767878965422234567899999875421012698998765676789323456789876542298765435678998865789
-6592578932398986656467897910123456979899986534123589239876797896454567997984321059876568789999976890
-9421349890199875433356789891954569456798986546254678998987898989765679545975472347998678899897989921
-8210445789987654321245898799895698969897698755378999467998949678976889439986567656999789998796597532
-7421234894599943210134987688789987898987549875489312359879234567987899998797678797899899989689459843
-6439345943239874321345798454698976767895434976678954598762123456899999897698989989989979876568998754
-6598997894999765633466954343567895456795323987889895689953234567999898789439899879876569965457998765
-7987889999889876545789875212398954346789412398998789998764348789898775678919789767996498754345689896
-9895678987676987986791995101457893244898901999975698789765459898799654567997637657984349843234569987
-8654567896565698997892983212346789123457899899894987699986567899654523456789521749873249654445678999
-7643298789434569898939865423567891012346798798795699789297978999543312978898430123965398979966989645
-8964345679323458789920977674578942199967989689589999892198989998662106899986521239877987897897895434
-9876798789012345699891988795689543987899876567477899943019799987543245679199542345998976545789999321
-2989899893123556798789599876897659896789765435356789942165678998765358989098993556799865434668998910
-1094945943238767987699432987999798765679976321234567893234569679878767899987689698899987323457897892
-9943237895445898958567941098998999654789897542348788954345689456989878999865567989989865412368956789
-8832146789556999543479892129987678932396789656569899995456791349897989987654349878878954323779768999
-7654258997697976432358789234987467890145698767678998789767890998756399899785498765469895965689979889
-8765767989989999751234689345986358943235699898989998689878999876543268799996789874399769898789898776
-9979979878879987642956796569875467894346789969799987578989998987654156678998992986987656789899787545
-9898998765968899799899898679989878976459894356678965467899887598721034567899321987896545678998676434
-9767897654656789988778999789398989997568999234579874356789756459842125788965439999999767899876545323
-8656789843234899876567899892127898987678988946698763244578942398763236999877898999899978975975432102
-6545678952123678975457989942016567898789767897987653123569321987654349989989987998799989764986548726
-2135678953234567894345678932123459989894356789796542012459432798789498978990196754678997653297659645
-6545699975545678943234569643234569878943234598679765423498943679899987867891985653589987654398799856
-7678789987656989434126678964365798569892125679569876536567894567998766756789873542357898765989923987
-9989890199788999321018999765456987456789287894379987789879976898987654347898762101237789889875210198
-0198931369899998732129678976569876345994399965456998897989197899599875456999854345345679998764321239
-1987642456910987654334567897679985456895679876597899956791098965431986567899965456786789459875643467
diff --git a/2021/readme.org b/2021/readme.org
index 642364f..f2e71ba 100644
--- a/2021/readme.org
+++ b/2021/readme.org
@@ -1,2 +1,5 @@
* Advent of Code 2021
+In this year, I actually learned to use [[https://lib.rs/nom][Nom]] to parse inputs. This was
+difficult at first, but worked out really well in the long term I'd
+say.
diff --git a/2022/Cargo.lock b/2022/Cargo.lock
new file mode 100644
index 0000000..b3377f8
--- /dev/null
+++ b/2022/Cargo.lock
@@ -0,0 +1,123 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aoc2022"
+version = "0.1.0"
+dependencies = [
+ "derive_more",
+ "nom",
+ "thiserror",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn",
+]
+
+[[package]]
+name = "memchr"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "nom"
+version = "7.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4"
+
+[[package]]
+name = "syn"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8daf5dd0bb60cbd4137b1b587d2fc0ae729bc07cf01cd70b36a1ed5ade3b9d59"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
diff --git a/2022/Cargo.toml b/2022/Cargo.toml
new file mode 100644
index 0000000..af8eee9
--- /dev/null
+++ b/2022/Cargo.toml
@@ -0,0 +1,13 @@
+[package]
+name = "aoc2022"
+version = "0.1.0"
+authors = ["Justin Wernick <justin@worthe-it.co.za>"]
+edition = "2021"
+
+[dependencies]
+derive_more = "0.99.17"
+nom = "7.1.1"
+thiserror = "1.0.37"
+
+[profile.release]
+# debug = true
diff --git a/2022/inputs/.gitkeep b/2022/inputs/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/2022/inputs/.gitkeep
diff --git a/2022/readme.org b/2022/readme.org
new file mode 100644
index 0000000..c073fed
--- /dev/null
+++ b/2022/readme.org
@@ -0,0 +1,2 @@
+* Advent of Code 2022
+
diff --git a/2022/src/bin/day_1.rs b/2022/src/bin/day_1.rs
new file mode 100644
index 0000000..bc988b7
--- /dev/null
+++ b/2022/src/bin/day_1.rs
@@ -0,0 +1,61 @@
+use nom::{
+ character::complete::{line_ending, u32 as nom_u32},
+ combinator::map,
+ multi::separated_list1,
+ sequence::pair,
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_1.txt")?;
+ let elves = Elves::parser(&input).unwrap().1;
+ dbg!(elves.max_calories_sum(1));
+ dbg!(elves.max_calories_sum(3));
+ Ok(())
+}
+
+#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone)]
+struct Elves {
+ elves: Vec<Elf>,
+}
+
+#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone)]
+struct Elf {
+ calories: Vec<u32>,
+}
+
+impl Elves {
+ fn parser(input: &str) -> IResult<&str, Elves> {
+ map(
+ separated_list1(pair(line_ending, line_ending), Elf::parser),
+ Elves::new,
+ )(input)
+ }
+
+ fn new(mut elves: Vec<Elf>) -> Elves {
+ elves.sort_unstable_by_key(|elf| elf.total_calories());
+ Elves { elves }
+ }
+
+ fn max_calories_sum(&self, count: usize) -> u32 {
+ self.elves
+ .iter()
+ .rev()
+ .take(count)
+ .map(|elf| elf.total_calories())
+ .sum()
+ }
+}
+
+impl Elf {
+ fn parser(input: &str) -> IResult<&str, Elf> {
+ map(separated_list1(line_ending, nom_u32), |calories| Elf {
+ calories,
+ })(input)
+ }
+
+ fn total_calories(&self) -> u32 {
+ self.calories.iter().sum()
+ }
+}
diff --git a/2022/src/bin/day_10.rs b/2022/src/bin/day_10.rs
new file mode 100644
index 0000000..6999c52
--- /dev/null
+++ b/2022/src/bin/day_10.rs
@@ -0,0 +1,103 @@
+use nom::{
+ bytes::complete::tag,
+ character::complete::{i32, line_ending},
+ combinator::map,
+ multi::{many0, separated_list1},
+ sequence::{pair, tuple},
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_10.txt")?;
+ let program = Program::parser(&input).unwrap().1;
+ let result = program.process();
+
+ dbg!(result.sum_of_signal_strengths(&[20, 60, 100, 140, 180, 220]));
+
+ for y in 0..6 {
+ for x in 0..40 {
+ if result.pixel_should_activate(x, y) {
+ print!("#");
+ } else {
+ print!(".");
+ }
+ }
+ println!();
+ }
+ Ok(())
+}
+
+#[derive(Debug)]
+struct Program(Vec<TimeSequence>);
+
+#[derive(Debug, Default)]
+struct ProgramResult(Vec<TimeSequence>);
+
+#[derive(Debug, Clone)]
+struct TimeSequence {
+ time: u32,
+ value: i32,
+}
+
+impl Program {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, TimeSequence::parser), Program)(input)
+ }
+
+ fn process(&self) -> ProgramResult {
+ let mut result = ProgramResult::default();
+
+ let mut current_state = TimeSequence { time: 1, value: 1 };
+ result.0.push(current_state.clone());
+
+ for next_step in &self.0 {
+ current_state.time += next_step.time;
+ current_state.value += next_step.value;
+ result.0.push(current_state.clone());
+ }
+
+ result
+ }
+}
+
+impl TimeSequence {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((many0(pair(tag("noop"), line_ending)), tag("addx "), i32)),
+ |(noops, _, value)| TimeSequence {
+ time: noops.len() as u32 + 2,
+ value,
+ },
+ )(input)
+ }
+}
+
+impl ProgramResult {
+ fn value_at(&self, time: u32) -> i32 {
+ self.0
+ .iter()
+ .filter(|t| t.time <= time)
+ .map(|t| t.value)
+ .last()
+ .unwrap_or(0)
+ }
+
+ fn signal_strength_at(&self, time: u32) -> i32 {
+ let value = self.value_at(time);
+ value * time as i32
+ }
+
+ fn sum_of_signal_strengths(&self, times: &[u32]) -> i32 {
+ times
+ .iter()
+ .map(|time| self.signal_strength_at(*time))
+ .sum()
+ }
+
+ fn pixel_should_activate(&self, x: usize, y: usize) -> bool {
+ let time = (y * 40 + x + 1) as u32;
+ let sprite_middle = self.value_at(time);
+ ((x as i32) - sprite_middle).abs() <= 1
+ }
+}
diff --git a/2022/src/bin/day_11.rs b/2022/src/bin/day_11.rs
new file mode 100644
index 0000000..ffba6ab
--- /dev/null
+++ b/2022/src/bin/day_11.rs
@@ -0,0 +1,154 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{line_ending, u64},
+ combinator::{map, value},
+ multi::separated_list1,
+ sequence::{pair, preceded, tuple},
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_11.txt")?;
+ let troop = MonkeyTroop::parser(&input).unwrap().1;
+
+ {
+ let mut troop_1 = troop.clone();
+ for _ in 0..20 {
+ troop_1.monkey_game_round(true);
+ }
+ dbg!(&troop_1.monkey_business_score());
+ }
+
+ {
+ let mut troop_2 = troop.clone();
+ for _ in 0..10000 {
+ troop_2.monkey_game_round(false);
+ }
+ dbg!(&troop_2.monkey_business_score());
+ }
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct MonkeyTroop {
+ monkeys: Vec<Monkey>,
+ gcd: u64,
+}
+
+#[derive(Debug, Clone)]
+struct Monkey {
+ items: Vec<u64>,
+ operation: Operation,
+ test_denominator: u64,
+ true_target: usize,
+ false_target: usize,
+ inspection_count: usize,
+}
+
+#[derive(Debug, Clone)]
+enum Operation {
+ Add(u64),
+ Multiply(u64),
+ Square,
+}
+
+impl MonkeyTroop {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(pair(line_ending, line_ending), Monkey::parser),
+ |monkeys| MonkeyTroop {
+ gcd: monkeys.iter().map(|m| m.test_denominator).product(),
+ monkeys,
+ },
+ )(input)
+ }
+
+ fn monkey_game_round(&mut self, worry_reduction: bool) {
+ for monkey_i in 0..self.monkeys.len() {
+ self.monkeys[monkey_i].inspect_items(worry_reduction, self.gcd);
+
+ let items = std::mem::take(&mut self.monkeys[monkey_i].items);
+ let test_denominator = self.monkeys[monkey_i].test_denominator.clone();
+ let true_target = self.monkeys[monkey_i].true_target.clone();
+ let false_target = self.monkeys[monkey_i].false_target.clone();
+ for item in items {
+ let target_monkey = if item % test_denominator == 0 {
+ true_target
+ } else {
+ false_target
+ };
+ self.monkeys[target_monkey].items.push(item);
+ }
+ }
+ }
+
+ fn monkey_business_score(&self) -> usize {
+ let mut counts: Vec<usize> = self
+ .monkeys
+ .iter()
+ .map(|m| m.inspection_count.clone())
+ .collect();
+ counts.sort();
+ counts.reverse();
+ counts[0] * counts[1]
+ }
+}
+
+impl Monkey {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ preceded(
+ tuple((
+ tag("Monkey "),
+ u64,
+ tag(":"),
+ line_ending,
+ tag(" Starting items: "),
+ )),
+ separated_list1(tag(", "), u64),
+ ),
+ preceded(
+ pair(line_ending, tag(" Operation: new = old ")),
+ alt((
+ map(preceded(tag("+ "), u64), Operation::Add),
+ map(preceded(tag("* "), u64), Operation::Multiply),
+ value(Operation::Square, tag("* old")),
+ )),
+ ),
+ preceded(pair(line_ending, tag(" Test: divisible by ")), u64),
+ preceded(pair(line_ending, tag(" If true: throw to monkey ")), u64),
+ preceded(
+ pair(line_ending, tag(" If false: throw to monkey ")),
+ u64,
+ ),
+ )),
+ |(items, operation, test_denominator, true_target, false_target)| Monkey {
+ items,
+ operation,
+ test_denominator,
+ true_target: true_target as usize,
+ false_target: false_target as usize,
+ inspection_count: 0,
+ },
+ )(input)
+ }
+
+ fn inspect_items(&mut self, worry_reduction: bool, gcd: u64) {
+ for item in &mut self.items {
+ match self.operation {
+ Operation::Add(i) => *item += i,
+ Operation::Multiply(i) => *item *= i,
+ Operation::Square => *item = *item * *item,
+ };
+ if worry_reduction {
+ *item /= 3;
+ }
+ *item = *item % gcd;
+ }
+ self.inspection_count += self.items.len()
+ }
+}
diff --git a/2022/src/bin/day_12.rs b/2022/src/bin/day_12.rs
new file mode 100644
index 0000000..9190113
--- /dev/null
+++ b/2022/src/bin/day_12.rs
@@ -0,0 +1,174 @@
+use nom::{
+ character::complete::{line_ending, satisfy},
+ combinator::map,
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::{
+ collections::{BTreeMap, BTreeSet},
+ fs,
+};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_12.txt")?;
+ let map = HeightMap::parser(&input).unwrap().1;
+
+ let distance_map = MapExploration::explore(&map);
+
+ dbg!(distance_map.distance_to.get(&map.start));
+
+ let min_distance_start = map
+ .heights
+ .iter()
+ .enumerate()
+ .flat_map(|(y, row)| {
+ row.iter()
+ .enumerate()
+ .filter(|(_x, height)| **height == 0)
+ .map(move |(x, _)| Point { x, y })
+ })
+ .filter_map(|p| distance_map.distance_to.get(&p))
+ .min();
+ dbg!(min_distance_start);
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct HeightMap {
+ heights: Vec<Vec<u8>>,
+ start: Point,
+ end: Point,
+}
+
+#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)]
+struct Point {
+ x: usize,
+ y: usize,
+}
+
+impl HeightMap {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, many1(satisfy(|c| c.is_ascii_alphabetic()))),
+ |height_chars| {
+ let mut start = Point::default();
+ let mut end = Point::default();
+ let mut heights = Vec::new();
+ for y in 0..height_chars.len() {
+ let mut new_row = Vec::new();
+ for x in 0..height_chars[y].len() {
+ let height = match height_chars[y][x] {
+ 'S' => {
+ start = Point { x, y };
+ 0
+ }
+ 'E' => {
+ end = Point { x, y };
+ 25
+ }
+ a if a.is_ascii_lowercase() => height_chars[y][x] as u8 - b'a',
+ a => panic!("Unexpected character {}", a),
+ };
+ new_row.push(height);
+ }
+ heights.push(new_row);
+ }
+
+ HeightMap {
+ heights,
+ start,
+ end,
+ }
+ },
+ )(input)
+ }
+
+ fn adjacent_to(&self, p: &Point) -> Vec<Point> {
+ let current_height = self
+ .heights
+ .get(p.y)
+ .and_then(|row| row.get(p.x))
+ .cloned()
+ .unwrap_or(0);
+
+ p.adjacent()
+ .into_iter()
+ .filter(|other_p| {
+ let other_height = self
+ .heights
+ .get(other_p.y)
+ .and_then(|row| row.get(other_p.x));
+
+ match other_height {
+ None => false,
+ Some(&other_height) => other_height + 1 >= current_height,
+ }
+ })
+ .collect()
+ }
+}
+
+impl Point {
+ fn adjacent(&self) -> Vec<Point> {
+ let mut result = Vec::new();
+ if self.x > 0 {
+ result.push(Point {
+ x: self.x - 1,
+ y: self.y,
+ });
+ }
+ if self.x < usize::MAX {
+ result.push(Point {
+ x: self.x + 1,
+ y: self.y,
+ });
+ }
+ if self.y > 0 {
+ result.push(Point {
+ x: self.x,
+ y: self.y - 1,
+ });
+ }
+ if self.y < usize::MAX {
+ result.push(Point {
+ x: self.x,
+ y: self.y + 1,
+ });
+ }
+ result
+ }
+}
+
+struct MapExploration {
+ distance_to: BTreeMap<Point, u32>,
+}
+
+impl MapExploration {
+ fn explore(map: &HeightMap) -> MapExploration {
+ let mut frontier = BTreeSet::new();
+ let mut distance_to = BTreeMap::new();
+ let mut distance = 0;
+
+ distance_to.insert(map.end.clone(), distance);
+ frontier.insert(map.end.clone());
+
+ while !frontier.is_empty() {
+ let mut next_frontier = BTreeSet::new();
+ distance += 1;
+
+ for frontier_point in frontier {
+ for adjacent_point in map.adjacent_to(&frontier_point) {
+ if !distance_to.contains_key(&adjacent_point) {
+ distance_to.insert(adjacent_point.clone(), distance);
+ next_frontier.insert(adjacent_point);
+ }
+ }
+ }
+
+ frontier = next_frontier;
+ }
+
+ MapExploration { distance_to }
+ }
+}
diff --git a/2022/src/bin/day_13.rs b/2022/src/bin/day_13.rs
new file mode 100644
index 0000000..b00d790
--- /dev/null
+++ b/2022/src/bin/day_13.rs
@@ -0,0 +1,146 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{line_ending, u32},
+ combinator::map,
+ multi::{separated_list0, separated_list1},
+ sequence::{delimited, pair, preceded},
+ IResult,
+};
+use std::{cmp::Ordering, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_13.txt")?;
+ let message = EncodedMessage::parser(&input).unwrap().1;
+
+ dbg!(message.ordered_index_sum());
+ dbg!(message.decoder_key());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct EncodedMessage {
+ message_pairs: Vec<(Message, Message)>,
+ ordered_indices: Vec<usize>,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+enum Message {
+ List(Vec<Message>),
+ Value(u32),
+}
+
+impl EncodedMessage {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(
+ pair(line_ending, line_ending),
+ pair(Message::parser, preceded(line_ending, Message::parser)),
+ ),
+ EncodedMessage::new,
+ )(input)
+ }
+
+ fn new(message_pairs: Vec<(Message, Message)>) -> EncodedMessage {
+ let mut ordered_indices = Vec::new();
+
+ for (i, (left, right)) in message_pairs.iter().enumerate() {
+ if left <= right {
+ ordered_indices.push(i + 1);
+ }
+ }
+ EncodedMessage {
+ message_pairs,
+ ordered_indices,
+ }
+ }
+
+ fn ordered_index_sum(&self) -> usize {
+ self.ordered_indices.iter().sum()
+ }
+
+ fn decoder_key(&self) -> usize {
+ let mut all_packets: Vec<Message> = self
+ .message_pairs
+ .iter()
+ .flat_map(|(left, right)| [left.clone(), right.clone()])
+ .collect();
+ let divider_1 = Message::List(vec![Message::List(vec![Message::Value(2)])]);
+ let divider_2 = Message::List(vec![Message::List(vec![Message::Value(6)])]);
+ all_packets.push(divider_1.clone());
+ all_packets.push(divider_2.clone());
+
+ all_packets.sort();
+
+ let index_1 = all_packets.iter().position(|m| *m == divider_1).unwrap() + 1;
+ let index_2 = all_packets.iter().position(|m| *m == divider_2).unwrap() + 1;
+ index_1 * index_2
+ }
+}
+
+impl Message {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ map(u32, Message::Value),
+ map(
+ delimited(
+ tag("["),
+ separated_list0(tag(","), Message::parser),
+ tag("]"),
+ ),
+ Message::List,
+ ),
+ ))(input)
+ }
+}
+
+impl PartialOrd for Message {
+ fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
+ Some(self.cmp(other))
+ }
+}
+
+impl Ord for Message {
+ fn cmp(&self, other: &Self) -> Ordering {
+ match (self, other) {
+ (Message::Value(left), Message::Value(right)) => left.cmp(right),
+ (Message::List(left), Message::List(right)) => {
+ for i in 0..left.len() {
+ if i == right.len() {
+ return Ordering::Greater;
+ }
+ let inner_ord = left[i].cmp(&right[i]);
+ if inner_ord != Ordering::Equal {
+ return inner_ord;
+ }
+ }
+ left.len().cmp(&right.len())
+ }
+ (Message::Value(left), Message::List(right)) => {
+ if right.len() == 0 {
+ Ordering::Greater
+ } else {
+ let inner_ord = Message::Value(*left).cmp(&right[0]);
+ if inner_ord != Ordering::Equal {
+ inner_ord
+ } else {
+ 1.cmp(&right.len())
+ }
+ }
+ }
+ (Message::List(left), Message::Value(right)) => {
+ if left.len() == 0 {
+ Ordering::Less
+ } else {
+ let inner_ord = left[0].cmp(&Message::Value(*right));
+ if inner_ord != Ordering::Equal {
+ inner_ord
+ } else {
+ left.len().cmp(&1)
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/2022/src/bin/day_14.rs b/2022/src/bin/day_14.rs
new file mode 100644
index 0000000..ec5b1cb
--- /dev/null
+++ b/2022/src/bin/day_14.rs
@@ -0,0 +1,184 @@
+use nom::{
+ bytes::complete::tag,
+ character::complete::{i32, line_ending},
+ combinator::map,
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{collections::BTreeSet, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_14.txt")?;
+ let room = Room::parser(&input).unwrap().1;
+
+ {
+ let mut void_room = room.clone();
+ let mut room_is_full = false;
+ while !room_is_full {
+ let drop_result = void_room.drop_sand(true);
+ room_is_full = drop_result != DropSandResult::Settled;
+ if drop_result == DropSandResult::RoomFull {
+ return Err("The room filled up to the top!".into());
+ }
+ }
+ dbg!(void_room.sand.len());
+ }
+
+ {
+ let mut floor_room = room.clone();
+ let mut room_is_full = false;
+ while !room_is_full {
+ let drop_result = floor_room.drop_sand(false);
+ room_is_full = drop_result != DropSandResult::Settled;
+ if drop_result == DropSandResult::FellIntoTheVoid {
+ return Err("This room shouldn't have a void!".into());
+ }
+ }
+ dbg!(floor_room.sand.len());
+ }
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct Room {
+ walls: Vec<Wall>,
+ sand: BTreeSet<Point>,
+ sand_inlet: Point,
+ void_start_y: i32,
+}
+
+#[derive(Debug, Clone)]
+enum Wall {
+ Vertical(VerticalWall),
+ Horizontal(HorizontalWall),
+}
+
+#[derive(Debug, Clone)]
+struct VerticalWall {
+ x: i32,
+ y1: i32,
+ y2: i32,
+}
+
+#[derive(Debug, Clone)]
+struct HorizontalWall {
+ y: i32,
+ x1: i32,
+ x2: i32,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+#[derive(Debug, PartialEq, Eq)]
+enum DropSandResult {
+ FellIntoTheVoid,
+ Settled,
+ RoomFull,
+}
+
+impl Room {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, separated_list1(tag(" -> "), Point::parser)),
+ |wall_segments| {
+ let mut walls = Vec::new();
+ let mut void_start_y = 0;
+ for wall_segment in wall_segments {
+ for point_pair in wall_segment.windows(2) {
+ walls.push(if point_pair[0].x == point_pair[1].x {
+ Wall::Vertical(VerticalWall {
+ x: point_pair[0].x,
+ y1: point_pair[0].y.min(point_pair[1].y),
+ y2: point_pair[0].y.max(point_pair[1].y),
+ })
+ } else if point_pair[0].y == point_pair[1].y {
+ Wall::Horizontal(HorizontalWall {
+ y: point_pair[0].y,
+ x1: point_pair[0].x.min(point_pair[1].x),
+ x2: point_pair[0].x.max(point_pair[1].x),
+ })
+ } else {
+ panic!("Invalid wall segment")
+ });
+
+ void_start_y = void_start_y.max(point_pair[0].y);
+ void_start_y = void_start_y.max(point_pair[1].y);
+ }
+
+ void_start_y =
+ void_start_y.max(wall_segment.iter().map(|p| p.y).max().unwrap_or(0))
+ }
+ Room {
+ walls,
+ sand: BTreeSet::new(),
+ sand_inlet: Point { x: 500, y: 0 },
+ void_start_y,
+ }
+ },
+ )(input)
+ }
+
+ fn point_is_occupied(&self, p: &Point) -> bool {
+ p.y >= self.void_start_y + 2
+ || self.sand.contains(p)
+ || self.walls.iter().any(|w| w.point_is_occupied(p))
+ }
+
+ fn point_is_in_the_void(&self, p: &Point) -> bool {
+ p.y >= self.void_start_y
+ }
+
+ fn drop_sand(&mut self, allow_infinite_void: bool) -> DropSandResult {
+ if self.point_is_occupied(&self.sand_inlet) {
+ return DropSandResult::RoomFull;
+ }
+
+ let mut falling_sand = self.sand_inlet.clone();
+ loop {
+ if allow_infinite_void && self.point_is_in_the_void(&falling_sand) {
+ return DropSandResult::FellIntoTheVoid;
+ } else if !self.point_is_occupied(&Point {
+ x: falling_sand.x,
+ y: falling_sand.y + 1,
+ }) {
+ falling_sand.y += 1;
+ } else if !self.point_is_occupied(&Point {
+ x: falling_sand.x - 1,
+ y: falling_sand.y + 1,
+ }) {
+ falling_sand.x -= 1;
+ falling_sand.y += 1;
+ } else if !self.point_is_occupied(&Point {
+ x: falling_sand.x + 1,
+ y: falling_sand.y + 1,
+ }) {
+ falling_sand.x += 1;
+ falling_sand.y += 1;
+ } else {
+ self.sand.insert(falling_sand);
+ return DropSandResult::Settled;
+ }
+ }
+ }
+}
+
+impl Wall {
+ fn point_is_occupied(&self, p: &Point) -> bool {
+ match self {
+ Wall::Vertical(VerticalWall { x, y1, y2 }) => p.x == *x && p.y >= *y1 && p.y <= *y2,
+ Wall::Horizontal(HorizontalWall { y, x1, x2 }) => p.y == *y && p.x >= *x1 && p.x <= *x2,
+ }
+ }
+}
+
+impl Point {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(tuple((i32, tag(","), i32)), |(x, _, y)| Point { x, y })(input)
+ }
+}
diff --git a/2022/src/bin/day_15.rs b/2022/src/bin/day_15.rs
new file mode 100644
index 0000000..be7645d
--- /dev/null
+++ b/2022/src/bin/day_15.rs
@@ -0,0 +1,167 @@
+use nom::{
+ bytes::complete::tag,
+ character::complete::{i64, line_ending},
+ combinator::map,
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{collections::BTreeSet, fs, ops::Range};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_15.txt")?;
+ let sensors = Sensors::parser(&input).unwrap().1;
+
+ dbg!(sensors.count_covered_non_beacons_in_row(2000000));
+
+ dbg!(sensors
+ .find_hole_in_range(
+ Point { x: 0, y: 0 }..Point {
+ x: 4000001,
+ y: 4000001
+ }
+ )
+ .tuning_frequency());
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct Sensors(Vec<Sensor>);
+
+#[derive(Debug, Clone)]
+struct Sensor {
+ center: Point,
+ closest_beacon: Point,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
+struct Point {
+ x: i64,
+ y: i64,
+}
+
+impl Sensors {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, Sensor::parser), Sensors)(input)
+ }
+
+ fn ranges_in_row(&self, y: i64) -> Vec<Range<i64>> {
+ let mut ranges: Vec<Range<i64>> = self
+ .0
+ .iter()
+ .filter_map(|s| s.get_range_in_row(y))
+ .collect();
+
+ let mut any_changes = true;
+ while any_changes {
+ any_changes = false;
+ ranges.sort_unstable_by_key(|r| r.start);
+ if ranges.len() > 0 {
+ for i in 0..ranges.len() - 1 {
+ if ranges[i].end > ranges[i + 1].start {
+ ranges[i + 1].start = ranges[i].end;
+ any_changes = true;
+ }
+ }
+ ranges.retain(|r| !r.is_empty());
+ }
+ }
+ ranges
+ }
+
+ fn count_covered_non_beacons_in_row(&self, y: i64) -> u64 {
+ let ranges = self.ranges_in_row(y);
+
+ // these beacons are all distinct, and are all definitely on
+ // the line because the beacons are how the line is found!
+ let beacons: BTreeSet<i64> = self
+ .0
+ .iter()
+ .filter(|s| s.closest_beacon.y == y)
+ .map(|s| s.closest_beacon.x)
+ .collect();
+
+ ranges.into_iter().map(|r| r.count() as u64).sum::<u64>() - beacons.len() as u64
+ }
+
+ fn find_hole_in_range(&self, field_range: Range<Point>) -> Point {
+ let full_row_len = field_range.end.x - field_range.start.x;
+ for y in field_range.start.y..field_range.end.y {
+ let ranges = self.ranges_in_row(y);
+ let count = ranges
+ .into_iter()
+ .map(|mut r| {
+ if r.start < field_range.start.x {
+ r.start = field_range.start.x
+ };
+ if r.end > field_range.end.x {
+ r.end = field_range.end.x
+ };
+ r
+ })
+ .map(|r| r.count() as i64)
+ .sum::<i64>();
+ if full_row_len != count {
+ for x in field_range.start.x..field_range.end.x {
+ let p = Point { x, y };
+ if !self.0.iter().any(|s| s.contains(&p)) {
+ return p;
+ }
+ }
+ }
+ }
+ panic!("Didn't find the hole as specified!")
+ }
+}
+
+impl Sensor {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ tag("Sensor at "),
+ Point::parser,
+ tag(": closest beacon is at "),
+ Point::parser,
+ )),
+ |(_, center, _, closest_beacon)| Sensor {
+ center,
+ closest_beacon,
+ },
+ )(input)
+ }
+
+ fn get_range_in_row(&self, y: i64) -> Option<Range<i64>> {
+ let dy = (self.center.y - y).abs();
+ let dx = self.radius() - dy;
+ if dx < 0 {
+ None
+ } else {
+ let min_x = self.center.x - dx;
+ let max_x = self.center.x + dx;
+ Some(min_x..(max_x + 1))
+ }
+ }
+
+ fn radius(&self) -> i64 {
+ (self.center.x - self.closest_beacon.x).abs()
+ + (self.center.y - self.closest_beacon.y).abs()
+ }
+
+ fn contains(&self, other: &Point) -> bool {
+ let d = (self.center.x - other.x).abs() + (self.center.y - other.y).abs();
+ d <= self.radius()
+ }
+}
+
+impl Point {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(tuple((tag("x="), i64, tag(", y="), i64)), |(_, x, _, y)| {
+ Point { x, y }
+ })(input)
+ }
+
+ fn tuning_frequency(&self) -> i64 {
+ self.x * 4000000 + self.y
+ }
+}
diff --git a/2022/src/bin/day_16.rs b/2022/src/bin/day_16.rs
new file mode 100644
index 0000000..e35f04e
--- /dev/null
+++ b/2022/src/bin/day_16.rs
@@ -0,0 +1,236 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{alpha1, line_ending, u32},
+ combinator::map,
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{
+ collections::{BTreeMap, BTreeSet},
+ fs,
+};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_16.txt")?;
+ let nodes = Nodes::parser(&input).unwrap().1;
+ let mut condensed = nodes.condense();
+
+ let mut initial_open_valves = BTreeSet::new();
+ initial_open_valves.insert(0);
+
+ let initial_state = State {
+ actors: vec![Actor {
+ position: 0,
+ time_remaining: 30,
+ }],
+ open_valves: initial_open_valves.clone(),
+ };
+
+ dbg!(condensed.find_optimal_pressure_relieved(&initial_state));
+
+ let initial_state_with_elephant = State {
+ actors: vec![
+ Actor {
+ position: 0,
+ time_remaining: 26
+ };
+ 2
+ ],
+ open_valves: initial_open_valves,
+ };
+ dbg!(condensed.find_optimal_pressure_relieved(&initial_state_with_elephant));
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct Nodes {
+ nodes: BTreeMap<String, Node>,
+}
+
+#[derive(Debug, Clone)]
+struct Node {
+ id: String,
+ flow_rate: u32,
+ exits: BTreeMap<String, u32>,
+}
+
+#[derive(Debug)]
+struct CondensedNodes {
+ nodes: Vec<CondensedNode>,
+ cache: BTreeMap<State, u32>,
+}
+
+#[derive(Debug, Clone)]
+struct CondensedNode {
+ flow_rate: u32,
+ exits: Vec<u32>,
+}
+
+impl Nodes {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, Node::parser), |nodes| Nodes {
+ nodes: nodes
+ .into_iter()
+ .map(|node| (node.id.clone(), node))
+ .collect(),
+ })(input)
+ }
+
+ fn condense(&self) -> CondensedNodes {
+ let node_ids: Vec<String> = self
+ .nodes
+ .values()
+ .filter(|n| n.id == "AA" || n.flow_rate > 0)
+ .map(|n| n.id.clone())
+ .collect();
+
+ let mut condensed = CondensedNodes {
+ nodes: self
+ .nodes
+ .values()
+ .filter(|n| n.id == "AA" || n.flow_rate > 0)
+ .map(|n| CondensedNode {
+ flow_rate: n.flow_rate,
+ exits: Vec::new(),
+ })
+ .collect(),
+ cache: BTreeMap::new(),
+ };
+
+ for (id, mut node) in condensed.nodes.iter_mut().enumerate() {
+ node.exits = node_ids
+ .iter()
+ .map(|original_destination_id| {
+ // +1 because in condensed it includes opening the valve
+ self.find_shortest_path(&node_ids[id], &original_destination_id) + 1
+ })
+ .collect()
+ }
+
+ condensed
+ }
+
+ fn find_shortest_path(&self, from: &str, to: &str) -> u32 {
+ let mut frontier: BTreeSet<&str> = BTreeSet::new();
+ let mut explored: BTreeSet<&str> = BTreeSet::new();
+ let mut distance = 0;
+
+ explored.insert(from);
+ frontier.insert(from);
+
+ while !frontier.is_empty() {
+ let mut next_frontier: BTreeSet<&str> = BTreeSet::new();
+ distance += 1;
+
+ for frontier_point in frontier {
+ for adjacent_point in self.nodes.get(frontier_point).unwrap().exits.keys() {
+ if adjacent_point == to {
+ return distance;
+ }
+ if !explored.contains(&adjacent_point.as_ref()) {
+ explored.insert(adjacent_point);
+ next_frontier.insert(adjacent_point);
+ }
+ }
+ }
+
+ frontier = next_frontier;
+ }
+ panic!("Didn't reach end");
+ }
+}
+
+impl Node {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ tag("Valve "),
+ alpha1,
+ tag(" has flow rate="),
+ u32,
+ alt((
+ tag("; tunnels lead to valves "),
+ tag("; tunnel leads to valve "),
+ )),
+ separated_list1(tag(", "), alpha1),
+ )),
+ |(_, id, _, flow_rate, _, exits): (_, &str, _, u32, _, Vec<&str>)| Node {
+ id: id.to_owned(),
+ flow_rate,
+ exits: exits
+ .into_iter()
+ .map(|destination| (destination.to_owned(), 1))
+ .collect(),
+ },
+ )(input)
+ }
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
+struct State {
+ actors: Vec<Actor>,
+ open_valves: BTreeSet<usize>,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
+struct Actor {
+ position: usize,
+ time_remaining: u32,
+}
+
+impl State {
+ fn sort_actors(&mut self) {
+ self.actors.sort()
+ }
+}
+
+impl CondensedNodes {
+ fn find_optimal_pressure_relieved(&mut self, state: &State) -> u32 {
+ let cache_value = self.cache.get(state);
+ if let Some(cache_value) = cache_value {
+ return *cache_value;
+ }
+
+ let mut computed_value = 0;
+ for (actor_i, actor) in state.actors.iter().enumerate() {
+ let exits_to_investigate: Vec<(usize, u32)> = self.nodes[actor.position]
+ .exits
+ .iter()
+ .enumerate()
+ .filter(|(destination, distance)| {
+ !state.open_valves.contains(destination) && **distance <= actor.time_remaining
+ })
+ .map(|(destination, distance)| (destination.clone(), distance.clone()))
+ .collect();
+
+ for (destination, distance) in exits_to_investigate {
+ let mut open_valves = state.open_valves.clone();
+ open_valves.insert(destination.clone());
+ let new_actor = Actor {
+ time_remaining: actor.time_remaining - distance,
+ position: destination.clone(),
+ };
+ let relief_from_this_valve =
+ self.nodes[destination].flow_rate * new_actor.time_remaining as u32;
+ let mut actors = state.actors.clone();
+ actors[actor_i] = new_actor;
+
+ let mut state_this_way = State {
+ actors,
+ open_valves,
+ };
+ state_this_way.sort_actors();
+
+ let recursive_relief = self.find_optimal_pressure_relieved(&state_this_way);
+ let relief = relief_from_this_valve + recursive_relief;
+ computed_value = computed_value.max(relief);
+ }
+ }
+
+ self.cache.insert(state.clone(), computed_value);
+ computed_value
+ }
+}
diff --git a/2022/src/bin/day_17.rs b/2022/src/bin/day_17.rs
new file mode 100644
index 0000000..46fedc8
--- /dev/null
+++ b/2022/src/bin/day_17.rs
@@ -0,0 +1,238 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ combinator::{map, value},
+ multi::many1,
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_17.txt")?;
+ let nudges = Inputs::parser(&input).unwrap().1;
+ let pieces = Piece::all();
+ let board = GameBoard::new(pieces, nudges.nudges);
+
+ {
+ let mut part_1_board = board.clone();
+ for _ in 0..2022 {
+ part_1_board.drop_next_piece();
+ }
+ dbg!(part_1_board.full_height());
+ }
+
+ {
+ let mut part_2_board = board.clone();
+ for i in 0..1_000_000_000_000u64 {
+ if i % 1_000_000_000 == 0 {
+ dbg!(i / 1_000_000_000, part_2_board.truncated);
+ }
+ part_2_board.drop_next_piece();
+ }
+ dbg!(part_2_board.full_height());
+ }
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct Inputs {
+ nudges: Vec<Nudge>,
+}
+
+#[derive(Debug, Clone)]
+enum Nudge {
+ Left,
+ Right,
+}
+
+#[derive(Debug, Clone)]
+struct Piece {
+ data_at_x: Vec<Vec<u8>>,
+}
+
+impl Inputs {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ many1(alt((
+ value(Nudge::Left, tag("<")),
+ value(Nudge::Right, tag(">")),
+ ))),
+ |nudges| Inputs { nudges },
+ )(input)
+ }
+}
+
+impl Piece {
+ fn new(data_at_x_0: Vec<u8>) -> Piece {
+ let mut shifting_data = data_at_x_0.clone();
+
+ let mut data_at_x = vec![data_at_x_0];
+
+ while shifting_data.iter().all(|b| b & 0b00000010 == 0) {
+ for row in &mut shifting_data {
+ *row >>= 1;
+ }
+ data_at_x.push(shifting_data.clone());
+ }
+
+ Piece { data_at_x }
+ }
+
+ fn all() -> Vec<Piece> {
+ vec![
+ Piece::new(vec![0b11110000]),
+ Piece::new(vec![0b01000000, 0b11100000, 0b01000000]),
+ Piece::new(vec![0b11100000, 0b00100000, 0b00100000]),
+ Piece::new(vec![0b10000000, 0b10000000, 0b10000000, 0b10000000]),
+ Piece::new(vec![0b11000000, 0b11000000]),
+ ]
+ }
+}
+
+#[derive(Debug, Clone)]
+struct GameBoard {
+ pieces: Vec<Piece>,
+ piece_index: usize,
+ nudges: Vec<Nudge>,
+ compound_nudges: Vec<Vec<usize>>,
+ nudge_index: usize,
+ solidified: Vec<u8>,
+ truncated: u64,
+}
+
+impl GameBoard {
+ fn new(pieces: Vec<Piece>, nudges: Vec<Nudge>) -> GameBoard {
+ GameBoard {
+ compound_nudges: pieces
+ .iter()
+ .map(|piece| {
+ (0..nudges.len())
+ .map(|nudge_start| {
+ let mut piece_x = 2;
+ for i in 0..4 {
+ let nudge_i = (nudge_start + i) % nudges.len();
+ match nudges[nudge_i] {
+ Nudge::Left => {
+ if piece_x > 0 {
+ piece_x -= 1;
+ }
+ }
+ Nudge::Right => {
+ if piece_x < piece.data_at_x.len() - 1 {
+ piece_x += 1;
+ }
+ }
+ }
+ }
+ piece_x
+ })
+ .collect()
+ })
+ .collect(),
+ pieces,
+ piece_index: 0,
+ nudges,
+ nudge_index: 0,
+ solidified: Vec::new(),
+ truncated: 0,
+ }
+ }
+
+ fn drop_next_piece(&mut self) {
+ let piece = &self.pieces[self.piece_index];
+ // precomputes the effect of the first 4 nudges
+ let mut piece_x = self.compound_nudges[self.piece_index][self.nudge_index];
+
+ self.piece_index += 1;
+ if self.piece_index >= self.pieces.len() {
+ self.piece_index -= self.pieces.len();
+ }
+
+ self.nudge_index += 4;
+ if self.nudge_index >= self.nudges.len() {
+ self.nudge_index -= self.nudges.len();
+ }
+
+ let mut piece_y = self.first_open_row();
+
+ loop {
+ if piece_y > 0 && self.piece_can_be_at(piece_y - 1, &piece.data_at_x[piece_x]) {
+ piece_y -= 1;
+ } else {
+ break;
+ }
+
+ let nudge = &self.nudges[self.nudge_index];
+ self.nudge_index += 1;
+ if self.nudge_index >= self.nudges.len() {
+ self.nudge_index -= self.nudges.len();
+ }
+
+ match nudge {
+ Nudge::Left => {
+ if piece_x > 0 && self.piece_can_be_at(piece_y, &piece.data_at_x[piece_x - 1]) {
+ piece_x -= 1;
+ }
+ }
+ Nudge::Right => {
+ if piece_x < piece.data_at_x.len() - 1
+ && self.piece_can_be_at(piece_y, &piece.data_at_x[piece_x + 1])
+ {
+ piece_x += 1;
+ }
+ }
+ }
+ }
+
+ let mut to_truncate = None;
+ for (i, piece_row) in piece.data_at_x[piece_x].iter().enumerate() {
+ let full_index = piece_y + i;
+ if full_index >= self.solidified.len() {
+ self.solidified.push(piece_row.clone());
+ } else {
+ self.solidified[full_index] |= piece_row;
+ if self.solidified[full_index] == 0b11111110 {
+ to_truncate = Some(full_index);
+ }
+ }
+ }
+
+ if let Some(to_truncate) = to_truncate {
+ self.truncated += to_truncate as u64;
+ let truncated_len = self.solidified.len() - to_truncate;
+ for move_i in 0..truncated_len {
+ self.solidified[move_i] = self.solidified[move_i + to_truncate];
+ }
+ self.solidified.truncate(truncated_len);
+ }
+ }
+
+ fn piece_can_be_at(&self, piece_y: usize, piece: &[u8]) -> bool {
+ for (i, row) in piece.iter().enumerate() {
+ let full_i = piece_y + i;
+ if full_i >= self.solidified.len() {
+ return true;
+ }
+ if self.solidified[full_i] & row != 0 {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ fn first_open_row(&self) -> usize {
+ self.solidified.len()
+ }
+
+ fn full_height(&self) -> u64 {
+ self.first_open_row() as u64 + self.truncated
+ }
+
+ fn debug(&self) {
+ println!("Clearerd: {}", self.truncated);
+ for row in self.solidified.iter().rev() {
+ println!("{:08b}", row);
+ }
+ }
+}
diff --git a/2022/src/bin/day_18.rs b/2022/src/bin/day_18.rs
new file mode 100644
index 0000000..1111441
--- /dev/null
+++ b/2022/src/bin/day_18.rs
@@ -0,0 +1,157 @@
+use nom::{
+ bytes::complete::tag,
+ character::complete::{i32, line_ending},
+ combinator::map,
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{collections::BTreeSet, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_18.txt")?;
+ let voxels = Voxels::parser(&input).unwrap().1;
+ dbg!(voxels.naive_surface_area());
+ dbg!(voxels.exterior_surface_area());
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct Voxels(BTreeSet<Point3d>);
+
+#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)]
+struct Point3d {
+ x: i32,
+ y: i32,
+ z: i32,
+}
+
+impl Voxels {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, Point3d::parser), |vox| {
+ Voxels(vox.into_iter().collect())
+ })(input)
+ }
+
+ fn naive_surface_area(&self) -> usize {
+ let units = Point3d::units();
+ self.0
+ .iter()
+ .flat_map(|v| units.iter().map(move |u| v + u))
+ .filter(|v| !self.0.contains(v))
+ .count()
+ }
+
+ fn exterior_surface_area(&self) -> usize {
+ let units = Point3d::units();
+ let mut known_internal: BTreeSet<Point3d> = BTreeSet::new();
+ let known_external = self.bounds();
+
+ self.0
+ .iter()
+ .flat_map(|v| units.iter().map(move |u| v + u))
+ .filter(|v| !self.0.contains(v))
+ .filter(|v| {
+ if known_internal.contains(v) {
+ return false;
+ }
+
+ let mut flooded: BTreeSet<Point3d> = BTreeSet::new();
+ let mut frontier: BTreeSet<Point3d> = BTreeSet::new();
+ flooded.insert(v.clone());
+ frontier.insert(v.clone());
+ let mut is_internal = true;
+ while is_internal && frontier.len() > 0 {
+ let mut next_frontier = BTreeSet::new();
+ for front in &frontier {
+ for unit in &units {
+ let adjacent = front + unit;
+ if !self.0.contains(&adjacent) && !flooded.contains(&adjacent) {
+ if known_external.contains(&adjacent) {
+ is_internal = false;
+ }
+ flooded.insert(adjacent.clone());
+ next_frontier.insert(adjacent);
+ }
+ }
+ }
+ frontier = next_frontier;
+ }
+ if is_internal {
+ known_internal.append(&mut flooded);
+ }
+
+ !is_internal
+ })
+ .count()
+ }
+
+ fn bounds(&self) -> BTreeSet<Point3d> {
+ let min_x = self.0.iter().map(|v| v.x).min().unwrap_or(0) - 1;
+ let max_x = self.0.iter().map(|v| v.x).max().unwrap_or(0) + 1;
+ let min_y = self.0.iter().map(|v| v.y).min().unwrap_or(0) - 1;
+ let max_y = self.0.iter().map(|v| v.y).max().unwrap_or(0) + 1;
+ let min_z = self.0.iter().map(|v| v.z).min().unwrap_or(0) - 1;
+ let max_z = self.0.iter().map(|v| v.z).max().unwrap_or(0) + 1;
+
+ let mut result = BTreeSet::new();
+ for x in [min_x, max_x] {
+ for y in [min_y, max_y] {
+ for z in [min_z, max_z] {
+ result.insert(Point3d { x, y, z });
+ }
+ }
+ }
+ result
+ }
+}
+
+impl Point3d {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((i32, tag(","), i32, tag(","), i32)),
+ |(x, _, y, _, z)| Point3d { x, y, z },
+ )(input)
+ }
+
+ fn units() -> Vec<Point3d> {
+ vec![
+ Point3d {
+ x: -1,
+ ..Point3d::default()
+ },
+ Point3d {
+ x: 1,
+ ..Point3d::default()
+ },
+ Point3d {
+ y: -1,
+ ..Point3d::default()
+ },
+ Point3d {
+ y: 1,
+ ..Point3d::default()
+ },
+ Point3d {
+ z: -1,
+ ..Point3d::default()
+ },
+ Point3d {
+ z: 1,
+ ..Point3d::default()
+ },
+ ]
+ }
+}
+
+impl ::core::ops::Add<&Point3d> for &Point3d {
+ type Output = Point3d;
+ fn add(self, rhs: &Point3d) -> Point3d {
+ Point3d {
+ x: self.x.add(rhs.x),
+ y: self.y.add(rhs.y),
+ z: self.z.add(rhs.z),
+ }
+ }
+}
diff --git a/2022/src/bin/day_19.rs b/2022/src/bin/day_19.rs
new file mode 100644
index 0000000..a6c1737
--- /dev/null
+++ b/2022/src/bin/day_19.rs
@@ -0,0 +1,352 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{line_ending, u32},
+ combinator::map,
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{cell::RefCell, collections::BTreeMap, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_19.txt")?;
+ let blueprints = Blueprints::parser(&input).unwrap().1;
+
+ dbg!(blueprints.quality_sum());
+
+ let part_2_state = State {
+ time_remaining: 32,
+ resources: Resources::default(),
+ robots: Resources {
+ ore: 1,
+ ..Resources::default()
+ },
+ };
+
+ dbg!(blueprints
+ .0
+ .iter()
+ .take(3)
+ .map(|b| {
+ let result = b.max_geodes(part_2_state.clone());
+ b.clear_cache();
+ result
+ })
+ .product::<u32>());
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct Blueprints(Vec<Blueprint>);
+
+#[derive(Debug, Clone)]
+struct Blueprint {
+ id: u32,
+ ore_robot: Resources,
+ clay_robot: Resources,
+ obsidian_robot: Resources,
+ geode_robot: Resources,
+ max_geode_cache: RefCell<BTreeMap<State, u32>>,
+}
+
+#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)]
+struct Resources {
+ ore: u32,
+ clay: u32,
+ obsidian: u32,
+ geodes: u32,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
+struct State {
+ time_remaining: u32,
+ resources: Resources,
+ robots: Resources,
+}
+
+impl Blueprints {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, Blueprint::parser), Blueprints)(input)
+ }
+
+ fn quality_sum(&self) -> u32 {
+ self.0.iter().map(|b| b.quality_level()).sum()
+ }
+}
+
+impl Blueprint {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ tag("Blueprint "),
+ u32,
+ tag(": Each ore robot costs "),
+ Resources::parser,
+ tag(". Each clay robot costs "),
+ Resources::parser,
+ tag(". Each obsidian robot costs "),
+ Resources::parser,
+ tag(". Each geode robot costs "),
+ Resources::parser,
+ tag("."),
+ )),
+ |(_, id, _, ore_robot, _, clay_robot, _, obsidian_robot, _, geode_robot, _)| {
+ Blueprint {
+ id,
+ ore_robot,
+ clay_robot,
+ obsidian_robot,
+ geode_robot,
+ max_geode_cache: RefCell::new(BTreeMap::new()),
+ }
+ },
+ )(input)
+ }
+
+ fn quality_level(&self) -> u32 {
+ let result = self.id
+ * self.max_geodes(State {
+ time_remaining: 24,
+ resources: Resources::default(),
+ robots: Resources {
+ ore: 1,
+ ..Resources::default()
+ },
+ });
+ self.clear_cache();
+ result
+ }
+
+ fn max_geodes(&self, state: State) -> u32 {
+ if state.time_remaining == 0 {
+ state.resources.geodes
+ } else {
+ if let Some(cache) = self.max_geode_cache.borrow().get(&state) {
+ return cache.clone();
+ }
+
+ let calculated = state
+ .possible_next_states(&self)
+ .into_iter()
+ .map(|next_state| self.max_geodes(next_state))
+ .max()
+ .unwrap();
+ self.max_geode_cache
+ .borrow_mut()
+ .insert(state.clone(), calculated);
+ calculated
+ }
+ }
+
+ fn clear_cache(&self) {
+ self.max_geode_cache.borrow_mut().clear();
+ }
+}
+
+impl Resources {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(
+ tag(" and "),
+ tuple((
+ u32,
+ tag(" "),
+ alt((tag("ore"), tag("clay"), tag("obsidian"))),
+ )),
+ ),
+ |resources| {
+ let mut ore = 0;
+ let mut clay = 0;
+ let mut obsidian = 0;
+
+ for (amount, _, resource) in resources {
+ match resource {
+ "ore" => ore = amount,
+ "clay" => clay = amount,
+ "obsidian" => obsidian = amount,
+ unknown => panic!("{} isn't one of the specified tags", unknown),
+ }
+ }
+
+ Resources {
+ ore,
+ clay,
+ obsidian,
+ geodes: 0,
+ }
+ },
+ )(input)
+ }
+}
+
+impl State {
+ fn possible_next_states(&self, blueprint: &Blueprint) -> Vec<State> {
+ let mut next_states = Vec::new();
+
+ // build an ore robot
+ if let Some(time) = self.time_to_afford(&blueprint.ore_robot) {
+ let mut next_state = self.simulate_time_passing(time + 1);
+ next_state.robots.ore += 1;
+ next_state.resources -= &blueprint.ore_robot;
+ next_states.push(next_state);
+ }
+
+ // build a clay robot
+ if let Some(time) = self.time_to_afford(&blueprint.clay_robot) {
+ let mut next_state = self.simulate_time_passing(time + 1);
+ next_state.robots.clay += 1;
+ next_state.resources -= &blueprint.clay_robot;
+ next_states.push(next_state);
+ }
+
+ // build an obsidian robot
+ if let Some(time) = self.time_to_afford(&blueprint.obsidian_robot) {
+ let mut next_state = self.simulate_time_passing(time + 1);
+ next_state.robots.obsidian += 1;
+ next_state.resources -= &blueprint.obsidian_robot;
+ next_states.push(next_state);
+ }
+
+ // build a geode robot
+ if let Some(time) = self.time_to_afford(&blueprint.geode_robot) {
+ let mut next_state = self.simulate_time_passing(time + 1);
+ next_state.robots.geodes += 1;
+ next_state.resources -= &blueprint.geode_robot;
+ next_states.push(next_state);
+ }
+
+ // or just do nothing
+ if next_states.len() == 0 {
+ next_states.push(self.simulate_time_passing(self.time_remaining));
+ }
+
+ next_states
+ }
+
+ fn simulate_time_passing(&self, time: u32) -> State {
+ State {
+ time_remaining: self.time_remaining - time,
+ resources: &self.resources + &(&self.robots * time),
+ robots: self.robots.clone(),
+ }
+ }
+
+ fn time_to_afford(&self, cost: &Resources) -> Option<u32> {
+ let mut time_required = 0;
+
+ if self.resources.ore < cost.ore {
+ if self.robots.ore == 0 {
+ return None;
+ }
+ time_required = time_required
+ .max((cost.ore - self.resources.ore + self.robots.ore - 1) / self.robots.ore);
+ }
+
+ if self.resources.clay < cost.clay {
+ if self.robots.clay == 0 {
+ return None;
+ }
+ time_required = time_required
+ .max((cost.clay - self.resources.clay + self.robots.clay - 1) / self.robots.clay);
+ }
+
+ if self.resources.obsidian < cost.obsidian {
+ if self.robots.obsidian == 0 {
+ return None;
+ }
+ time_required = time_required.max(
+ (cost.obsidian - self.resources.obsidian + self.robots.obsidian - 1)
+ / self.robots.obsidian,
+ );
+ }
+
+ if self.resources.geodes < cost.geodes {
+ if self.robots.geodes == 0 {
+ return None;
+ }
+ time_required = time_required.max(
+ (cost.geodes - self.resources.geodes + self.robots.geodes - 1) / self.robots.geodes,
+ );
+ }
+
+ if time_required + 1 >= self.time_remaining {
+ None
+ } else {
+ Some(time_required)
+ }
+ }
+}
+
+impl ::core::ops::Add<&Resources> for &Resources {
+ type Output = Resources;
+ fn add(self, rhs: &Resources) -> Resources {
+ Resources {
+ ore: self.ore.add(rhs.ore),
+ clay: self.clay.add(rhs.clay),
+ obsidian: self.obsidian.add(rhs.obsidian),
+ geodes: self.geodes.add(rhs.geodes),
+ }
+ }
+}
+
+impl ::core::ops::Sub<&Resources> for &Resources {
+ type Output = Resources;
+ fn sub(self, rhs: &Resources) -> Resources {
+ Resources {
+ ore: self.ore.sub(rhs.ore),
+ clay: self.clay.sub(rhs.clay),
+ obsidian: self.obsidian.sub(rhs.obsidian),
+ geodes: self.geodes.sub(rhs.geodes),
+ }
+ }
+}
+
+impl ::core::ops::SubAssign<&Resources> for Resources {
+ fn sub_assign(&mut self, rhs: &Resources) {
+ self.ore -= rhs.ore;
+ self.clay -= rhs.clay;
+ self.obsidian -= rhs.obsidian;
+ self.geodes -= rhs.geodes;
+ }
+}
+
+impl ::core::ops::Mul<u32> for &Resources {
+ type Output = Resources;
+ fn mul(self, rhs: u32) -> Resources {
+ Resources {
+ ore: self.ore.mul(rhs),
+ clay: self.clay.mul(rhs),
+ obsidian: self.obsidian.mul(rhs),
+ geodes: self.geodes.mul(rhs),
+ }
+ }
+}
+
+#[test]
+fn time_to_afford() {
+ let current_state = State {
+ time_remaining: 17,
+ resources: Resources {
+ ore: 1,
+ clay: 6,
+ obsidian: 0,
+ geodes: 0,
+ },
+ robots: Resources {
+ ore: 1,
+ clay: 3,
+ obsidian: 0,
+ geodes: 0,
+ },
+ };
+
+ let time_to_afford = current_state.time_to_afford(&Resources {
+ ore: 3,
+ clay: 14,
+ obsidian: 0,
+ geodes: 0,
+ });
+ assert_eq!(time_to_afford, Some(3));
+}
diff --git a/2022/src/bin/day_2.rs b/2022/src/bin/day_2.rs
new file mode 100644
index 0000000..deb5294
--- /dev/null
+++ b/2022/src/bin/day_2.rs
@@ -0,0 +1,167 @@
+use nom::{
+ branch::alt,
+ character::complete::{char as nom_char, line_ending},
+ combinator::{map, value},
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_2.txt")?;
+ let game_log_part_1 = GameLog::parser(&input).unwrap().1;
+ dbg!(game_log_part_1.total_score());
+
+ let game_log_part_2 = GameLog::parser_part_2(&input).unwrap().1;
+ dbg!(game_log_part_2.total_score());
+ Ok(())
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct GameLog {
+ moves: Vec<GameRound>,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct GameRound {
+ opponent: Move,
+ me: Move,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+enum Move {
+ Rock,
+ Paper,
+ Scissors,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+enum GameResult {
+ Win,
+ Lose,
+ Draw,
+}
+
+impl GameLog {
+ fn parser(input: &str) -> IResult<&str, GameLog> {
+ map(separated_list1(line_ending, GameRound::parser), |moves| {
+ GameLog { moves }
+ })(input)
+ }
+
+ fn parser_part_2(input: &str) -> IResult<&str, GameLog> {
+ map(
+ separated_list1(line_ending, GameRound::parser_part_2),
+ |moves| GameLog { moves },
+ )(input)
+ }
+
+ fn total_score(&self) -> u32 {
+ self.moves.iter().map(|m| m.score()).sum()
+ }
+}
+
+impl GameRound {
+ fn parser(input: &str) -> IResult<&str, GameRound> {
+ map(
+ tuple((Move::opponent_parser, nom_char(' '), Move::player_parser)),
+ |(opponent, _, me)| GameRound { opponent, me },
+ )(input)
+ }
+
+ fn parser_part_2(input: &str) -> IResult<&str, GameRound> {
+ map(
+ tuple((Move::opponent_parser, nom_char(' '), GameResult::parser)),
+ |(opponent, _, result)| {
+ use GameResult::*;
+ use Move::*;
+
+ let me = match opponent {
+ Rock => match result {
+ Win => Paper,
+ Draw => Rock,
+ Lose => Scissors,
+ },
+ Paper => match result {
+ Win => Scissors,
+ Draw => Paper,
+ Lose => Rock,
+ },
+ Scissors => match result {
+ Win => Rock,
+ Draw => Scissors,
+ Lose => Paper,
+ },
+ };
+ GameRound { opponent, me }
+ },
+ )(input)
+ }
+
+ fn score(&self) -> u32 {
+ let victory_points = match self.me.beats(&self.opponent) {
+ GameResult::Lose => 0,
+ GameResult::Draw => 3,
+ GameResult::Win => 6,
+ };
+
+ let throw_points = match self.me {
+ Move::Rock => 1,
+ Move::Paper => 2,
+ Move::Scissors => 3,
+ };
+
+ victory_points + throw_points
+ }
+}
+
+impl Move {
+ fn opponent_parser(input: &str) -> IResult<&str, Move> {
+ alt((
+ value(Move::Rock, nom_char('A')),
+ value(Move::Paper, nom_char('B')),
+ value(Move::Scissors, nom_char('C')),
+ ))(input)
+ }
+
+ fn player_parser(input: &str) -> IResult<&str, Move> {
+ alt((
+ value(Move::Rock, nom_char('X')),
+ value(Move::Paper, nom_char('Y')),
+ value(Move::Scissors, nom_char('Z')),
+ ))(input)
+ }
+
+ fn beats(&self, other: &Move) -> GameResult {
+ use GameResult::*;
+ use Move::*;
+ match self {
+ Rock => match other {
+ Rock => Draw,
+ Paper => Lose,
+ Scissors => Win,
+ },
+ Paper => match other {
+ Rock => Win,
+ Paper => Draw,
+ Scissors => Lose,
+ },
+ Scissors => match other {
+ Rock => Lose,
+ Paper => Win,
+ Scissors => Draw,
+ },
+ }
+ }
+}
+
+impl GameResult {
+ fn parser(input: &str) -> IResult<&str, GameResult> {
+ alt((
+ value(GameResult::Lose, nom_char('X')),
+ value(GameResult::Draw, nom_char('Y')),
+ value(GameResult::Win, nom_char('Z')),
+ ))(input)
+ }
+}
diff --git a/2022/src/bin/day_20.rs b/2022/src/bin/day_20.rs
new file mode 100644
index 0000000..dc4bf4f
--- /dev/null
+++ b/2022/src/bin/day_20.rs
@@ -0,0 +1,91 @@
+use nom::{
+ character::complete::{i64, line_ending},
+ combinator::map,
+ multi::separated_list1,
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_20.txt")?;
+ let coordinates = GroveCoordinates::parser(&input).unwrap().1;
+
+ {
+ let mut coordinates_1 = coordinates.clone();
+ coordinates_1.mix();
+ dbg!(coordinates_1.coordinate_sum());
+ }
+
+ {
+ let mut coordinates_2 = coordinates.clone();
+ coordinates_2.decrypt(811589153);
+ dbg!(coordinates_2.coordinate_sum());
+ }
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct GroveCoordinates(Vec<CoordinatePoint>);
+
+#[derive(Debug, Clone, Copy)]
+struct CoordinatePoint {
+ val: i64,
+ original_order: usize,
+}
+
+impl GroveCoordinates {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, i64), |points| {
+ GroveCoordinates(
+ points
+ .into_iter()
+ .enumerate()
+ .map(|(original_order, val)| CoordinatePoint {
+ val,
+ original_order,
+ })
+ .collect(),
+ )
+ })(input)
+ }
+
+ fn decrypt(&mut self, key: i64) {
+ for p in &mut self.0 {
+ p.val *= key;
+ }
+
+ for _ in 0..10 {
+ self.mix();
+ }
+ }
+
+ fn mix(&mut self) {
+ for original_i in 0..self.0.len() {
+ let encrypted_i = self
+ .0
+ .iter()
+ .position(|p| p.original_order == original_i)
+ .unwrap();
+ let to_move = self.0.remove(encrypted_i);
+
+ let mut destination_i = encrypted_i as i64 + to_move.val;
+ destination_i %= self.0.len() as i64;
+ if destination_i < 0 {
+ destination_i += self.0.len() as i64;
+ }
+ self.0.insert(destination_i as usize, to_move);
+ }
+ }
+
+ fn get(&self, i: usize) -> i64 {
+ self.0[i % self.0.len()].val
+ }
+
+ fn coordinate_sum(&self) -> i64 {
+ let zero_position = self.0.iter().position(|p| p.val == 0).unwrap();
+ self.get(zero_position + 1000)
+ + self.get(zero_position + 2000)
+ + self.get(zero_position + 3000)
+ }
+}
diff --git a/2022/src/bin/day_21.rs b/2022/src/bin/day_21.rs
new file mode 100644
index 0000000..d118826
--- /dev/null
+++ b/2022/src/bin/day_21.rs
@@ -0,0 +1,298 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{alpha1, i64, line_ending},
+ combinator::map,
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{
+ collections::{BTreeMap, BTreeSet},
+ fs,
+};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_21.txt")?;
+ let mut monkeys = Monkeys::parser(&input).unwrap().1;
+
+ dbg!(monkeys.eval("root"));
+
+ let (original_root_left, original_root_right) =
+ monkeys.0.get("root").expect("No root monkey!").values();
+
+ monkeys.0.insert(
+ "root".into(),
+ Expression::Eql(original_root_left, original_root_right.expect("foo")),
+ );
+ monkeys
+ .0
+ .insert("humn".into(), Expression::Value(Value::Input));
+
+ while monkeys.0.len() > 1 {
+ monkeys.simplify();
+ }
+ println!("{}", monkeys.print_expression("root"));
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct Monkeys(BTreeMap<String, Expression>);
+
+#[derive(Debug, Clone)]
+enum Expression {
+ Value(Value),
+ Add(Value, Value),
+ Sub(Value, Value),
+ Mul(Value, Value),
+ Div(Value, Value),
+ Eql(Value, Value),
+}
+
+#[derive(Debug, Clone)]
+enum Value {
+ Ref(String),
+ Literal(i64),
+ Input,
+}
+
+impl Monkeys {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, tuple((alpha1, tag(": "), Expression::parser))),
+ |lines| {
+ Monkeys(
+ lines
+ .into_iter()
+ .map(|(id, _, expression): (&str, _, Expression)| {
+ (id.to_owned(), expression)
+ })
+ .collect(),
+ )
+ },
+ )(input)
+ }
+
+ fn simplify(&mut self) {
+ let ids: Vec<String> = self.0.keys().cloned().collect();
+
+ // simplify to literals where possible
+ for id in &ids {
+ if let Some(val) = self.eval(id) {
+ self.0
+ .insert(id.clone(), Expression::Value(Value::Literal(val)));
+ }
+ }
+
+ // simplify single sides of expressions where possible (especially unwrap refs)
+ for id in &ids {
+ let monkey = self.0.get(id).expect("Unknown monkey!");
+ let simplified = match monkey {
+ Expression::Value(v) => Expression::Value(self.simplify_value(v)),
+ Expression::Add(a, b) => {
+ Expression::Add(self.simplify_value(a), self.simplify_value(b))
+ }
+ Expression::Sub(a, b) => {
+ Expression::Sub(self.simplify_value(a), self.simplify_value(b))
+ }
+ Expression::Mul(a, b) => {
+ Expression::Mul(self.simplify_value(a), self.simplify_value(b))
+ }
+ Expression::Div(a, b) => {
+ Expression::Div(self.simplify_value(a), self.simplify_value(b))
+ }
+ Expression::Eql(a, b) => {
+ Expression::Eql(self.simplify_value(a), self.simplify_value(b))
+ }
+ };
+ self.0.insert(id.clone(), simplified);
+
+ if let Some(val) = self.eval(id) {
+ self.0
+ .insert(id.clone(), Expression::Value(Value::Literal(val)));
+ }
+ }
+
+ // simplify across the equals
+ for id in &ids {
+ let monkey = self.0.get(id).expect("Unknown monkey!").clone();
+ match monkey {
+ Expression::Eql(Value::Ref(r), Value::Literal(v))
+ | Expression::Eql(Value::Literal(v), Value::Ref(r)) => {
+ let referenced_monkey = self.0.get(&r).expect("Unknown monkey!").clone();
+
+ let new_eql = match referenced_monkey {
+ Expression::Add(new_lhs, Value::Literal(added))
+ | Expression::Add(Value::Literal(added), new_lhs) => {
+ Some((new_lhs.clone(), v - added))
+ }
+ Expression::Sub(new_lhs, Value::Literal(subtracted)) => {
+ Some((new_lhs.clone(), v + subtracted))
+ }
+ Expression::Sub(Value::Literal(subtracted_from), new_lhs) => {
+ Some((new_lhs.clone(), subtracted_from - v))
+ }
+ Expression::Mul(new_lhs, Value::Literal(mult))
+ | Expression::Mul(Value::Literal(mult), new_lhs) => {
+ Some((new_lhs.clone(), v / mult))
+ }
+ Expression::Div(new_lhs, Value::Literal(denom)) => {
+ Some((new_lhs.clone(), v * denom))
+ }
+ _ => None,
+ };
+
+ if let Some((new_lhs, new_v)) = new_eql {
+ self.0
+ .insert(id.clone(), Expression::Eql(new_lhs, Value::Literal(new_v)));
+ }
+ }
+ _ => {}
+ }
+ }
+
+ // clearing out unreferenced monkeys
+ let monkey_references: BTreeSet<String> = self
+ .0
+ .values()
+ .flat_map(|expression| match expression.values() {
+ (Value::Ref(v1), Some(Value::Ref(v2))) => vec![v1, v2],
+ (Value::Ref(v), _) | (_, Some(Value::Ref(v))) => vec![v],
+ _ => vec![],
+ })
+ .collect();
+ for id in &ids {
+ if id != "root" && !monkey_references.contains(id) {
+ self.0.remove(id);
+ }
+ }
+ }
+
+ fn simplify_value(&self, val: &Value) -> Value {
+ match val {
+ Value::Ref(r) => {
+ let referenced = self.0.get(r).expect("Unknown monkey!");
+ match referenced {
+ Expression::Value(v) => v.clone(),
+ _ => val.clone(),
+ }
+ }
+ v => v.clone(),
+ }
+ }
+
+ fn eval(&self, id: &str) -> Option<i64> {
+ let monkey = self.0.get(id).expect("Unknown monkey!");
+
+ match monkey {
+ Expression::Value(v) => self.resolve_value(v),
+ Expression::Add(a, b) => self
+ .resolve_value(a)
+ .zip(self.resolve_value(b))
+ .map(|(a, b)| a + b),
+ Expression::Sub(a, b) => self
+ .resolve_value(a)
+ .zip(self.resolve_value(b))
+ .map(|(a, b)| a - b),
+ Expression::Mul(a, b) => self
+ .resolve_value(a)
+ .zip(self.resolve_value(b))
+ .map(|(a, b)| a * b),
+ Expression::Div(a, b) => self
+ .resolve_value(a)
+ .zip(self.resolve_value(b))
+ .map(|(a, b)| a / b),
+ Expression::Eql(a, b) => self
+ .resolve_value(a)
+ .zip(self.resolve_value(b))
+ .map(|(a, b)| if a == b { 1 } else { 0 }),
+ }
+ }
+
+ fn resolve_value(&self, value: &Value) -> Option<i64> {
+ match value {
+ Value::Ref(id) => self.eval(id),
+ Value::Literal(num) => Some(*num),
+ Value::Input => None,
+ }
+ }
+
+ fn print_expression(&self, id: &str) -> String {
+ let monkey = self.0.get(id).expect("Unknown monkey!");
+
+ // The crazy newlines here make it easier to see the
+ // brackets. Drop it in emacs and autoindent, and it's easy to
+ // see the next expression which isn't being collapsed.
+ match monkey {
+ Expression::Value(v) => format!("(\n{}\n)", self.print_value(v)),
+ Expression::Add(a, b) => {
+ format!("(\n{}\n+\n{}\n)", self.print_value(a), self.print_value(b))
+ }
+ Expression::Sub(a, b) => {
+ format!("(\n{}\n-\n{}\n)", self.print_value(a), self.print_value(b))
+ }
+ Expression::Mul(a, b) => {
+ format!("(\n{}\n*\n{}\n)", self.print_value(a), self.print_value(b))
+ }
+ Expression::Div(a, b) => {
+ format!("(\n{}\n/\n{}\n)", self.print_value(a), self.print_value(b))
+ }
+ Expression::Eql(a, b) => {
+ format!("(\n{}\n=\n{}\n)", self.print_value(a), self.print_value(b))
+ }
+ }
+ }
+
+ fn print_value(&self, value: &Value) -> String {
+ match value {
+ Value::Ref(id) => self.print_expression(id),
+ Value::Literal(num) => format!("{}", num),
+ Value::Input => "input".into(),
+ }
+ }
+}
+
+impl Expression {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ map(
+ tuple((Value::parser, tag(" + "), Value::parser)),
+ |(a, _, b)| Expression::Add(a, b),
+ ),
+ map(
+ tuple((Value::parser, tag(" - "), Value::parser)),
+ |(a, _, b)| Expression::Sub(a, b),
+ ),
+ map(
+ tuple((Value::parser, tag(" * "), Value::parser)),
+ |(a, _, b)| Expression::Mul(a, b),
+ ),
+ map(
+ tuple((Value::parser, tag(" / "), Value::parser)),
+ |(a, _, b)| Expression::Div(a, b),
+ ),
+ map(Value::parser, Expression::Value),
+ ))(input)
+ }
+
+ fn values(&self) -> (Value, Option<Value>) {
+ match self.clone() {
+ Expression::Value(v) => (v, None),
+ Expression::Add(a, b) => (a, Some(b)),
+ Expression::Sub(a, b) => (a, Some(b)),
+ Expression::Mul(a, b) => (a, Some(b)),
+ Expression::Div(a, b) => (a, Some(b)),
+ Expression::Eql(a, b) => (a, Some(b)),
+ }
+ }
+}
+
+impl Value {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ map(i64, Value::Literal),
+ map(alpha1, |s: &str| Value::Ref(s.to_owned())),
+ ))(input)
+ }
+}
diff --git a/2022/src/bin/day_22.rs b/2022/src/bin/day_22.rs
new file mode 100644
index 0000000..784a608
--- /dev/null
+++ b/2022/src/bin/day_22.rs
@@ -0,0 +1,501 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{line_ending, u32},
+ combinator::{map, value},
+ multi::{many1, separated_list1},
+ sequence::tuple,
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_22.txt")?;
+ let parsed = Input::parser(&input).unwrap().1;
+
+ dbg!(State::walk_the_map(&parsed, false).score());
+ dbg!(State::walk_the_map(&parsed, true).score());
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct Input {
+ map: Map,
+ instructions: Vec<Instruction>,
+}
+
+#[derive(Debug, Clone)]
+struct Map {
+ grid: Vec<Vec<MapPoint>>,
+ portals: Vec<Portal>,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+enum MapPoint {
+ Wall,
+ Empty,
+ Void,
+}
+
+#[derive(Debug, Clone)]
+enum Instruction {
+ TurnLeft,
+ TurnRight,
+ Walk(u32),
+}
+
+impl Input {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ Map::parser,
+ line_ending,
+ line_ending,
+ many1(Instruction::parser),
+ )),
+ |(map, _, _, instructions)| Input { map, instructions },
+ )(input)
+ }
+}
+
+impl Map {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, many1(MapPoint::parser)),
+ |grid| Map {
+ grid,
+ portals: Portal::add_reverse_portals(vec![
+ Portal {
+ // A -> F
+ src_boundary: LineSegment {
+ start: Point { x: 50, y: 0 },
+ end: Point { x: 99, y: 0 },
+ },
+ src_facing: Direction::Up,
+ dest_boundary: LineSegment {
+ start: Point { x: 0, y: 150 },
+ end: Point { x: 0, y: 199 },
+ },
+ dest_facing: Direction::Right,
+ },
+ Portal {
+ // A -> D
+ src_boundary: LineSegment {
+ start: Point { x: 50, y: 0 },
+ end: Point { x: 50, y: 49 },
+ },
+ src_facing: Direction::Left,
+ dest_boundary: LineSegment {
+ start: Point { x: 0, y: 149 },
+ end: Point { x: 0, y: 100 },
+ },
+ dest_facing: Direction::Right,
+ },
+ Portal {
+ // B -> F
+ src_boundary: LineSegment {
+ start: Point { x: 100, y: 0 },
+ end: Point { x: 149, y: 0 },
+ },
+ src_facing: Direction::Up,
+ dest_boundary: LineSegment {
+ start: Point { x: 0, y: 199 },
+ end: Point { x: 49, y: 199 },
+ },
+ dest_facing: Direction::Up,
+ },
+ Portal {
+ // B -> E
+ src_boundary: LineSegment {
+ start: Point { x: 149, y: 0 },
+ end: Point { x: 149, y: 49 },
+ },
+ src_facing: Direction::Right,
+ dest_boundary: LineSegment {
+ start: Point { x: 99, y: 149 },
+ end: Point { x: 99, y: 100 },
+ },
+ dest_facing: Direction::Left,
+ },
+ Portal {
+ // B -> C
+ src_boundary: LineSegment {
+ start: Point { x: 100, y: 49 },
+ end: Point { x: 149, y: 49 },
+ },
+ src_facing: Direction::Down,
+ dest_boundary: LineSegment {
+ start: Point { x: 99, y: 50 },
+ end: Point { x: 99, y: 99 },
+ },
+ dest_facing: Direction::Left,
+ },
+ Portal {
+ // C -> D
+ src_boundary: LineSegment {
+ start: Point { x: 50, y: 50 },
+ end: Point { x: 50, y: 99 },
+ },
+ src_facing: Direction::Left,
+ dest_boundary: LineSegment {
+ start: Point { x: 0, y: 100 },
+ end: Point { x: 49, y: 100 },
+ },
+ dest_facing: Direction::Down,
+ },
+ Portal {
+ // E -> F
+ src_boundary: LineSegment {
+ start: Point { x: 50, y: 149 },
+ end: Point { x: 99, y: 149 },
+ },
+ src_facing: Direction::Down,
+ dest_boundary: LineSegment {
+ start: Point { x: 49, y: 150 },
+ end: Point { x: 49, y: 199 },
+ },
+ dest_facing: Direction::Left,
+ },
+ // AB
+ // C
+ // DE
+ // F
+ ]),
+ },
+ )(input)
+ }
+}
+
+impl MapPoint {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(MapPoint::Wall, tag("#")),
+ value(MapPoint::Empty, tag(".")),
+ value(MapPoint::Void, tag(" ")),
+ ))(input)
+ }
+}
+
+impl Instruction {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(Instruction::TurnLeft, tag("L")),
+ value(Instruction::TurnRight, tag("R")),
+ map(u32, Instruction::Walk),
+ ))(input)
+ }
+}
+
+#[derive(Debug, Clone)]
+struct State {
+ position: Point,
+ facing: Direction,
+}
+
+#[derive(Debug, Clone)]
+struct Point {
+ x: usize,
+ y: usize,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+enum Direction {
+ Right,
+ Down,
+ Left,
+ Up,
+}
+
+impl State {
+ fn walk_the_map(input: &Input, cube_wrapping: bool) -> State {
+ let mut state = State::spawn(&input.map);
+ for instruction in &input.instructions {
+ state.process_instruction(&input.map, &instruction, cube_wrapping);
+ }
+ state
+ }
+
+ fn spawn(map: &Map) -> State {
+ let y = 0;
+ let x = map.grid[y]
+ .iter()
+ .position(|p| p == &MapPoint::Empty)
+ .unwrap();
+ State {
+ position: Point { x, y },
+ facing: Direction::Right,
+ }
+ }
+
+ fn step_with_wrapping(&self, map: &Map) -> Point {
+ let mut next_point = self.position.clone();
+ let mut made_a_step = false;
+ let mut hit_a_wall = false;
+ while !made_a_step && !hit_a_wall {
+ let peek = match self.facing {
+ Direction::Right => Point {
+ x: if next_point.x < map.grid[next_point.y].len() - 1 {
+ next_point.x + 1
+ } else {
+ 0
+ },
+ ..next_point
+ },
+ Direction::Left => Point {
+ x: if next_point.x > 0 {
+ next_point.x - 1
+ } else {
+ map.grid[next_point.y].len() - 1
+ },
+ ..next_point
+ },
+ Direction::Down => Point {
+ y: if next_point.y < map.grid.len() - 1 {
+ next_point.y + 1
+ } else {
+ 0
+ },
+ ..next_point
+ },
+ Direction::Up => Point {
+ y: if next_point.y > 0 {
+ next_point.y - 1
+ } else {
+ map.grid.len() - 1
+ },
+ ..next_point
+ },
+ };
+
+ let peek_value = map.grid[peek.y].get(peek.x);
+ match peek_value {
+ Some(MapPoint::Empty) => {
+ next_point = peek;
+ made_a_step = true;
+ }
+ Some(MapPoint::Void) | None => {
+ next_point = peek;
+ }
+ Some(MapPoint::Wall) => {
+ hit_a_wall = true;
+ }
+ }
+ }
+
+ if hit_a_wall {
+ self.position.clone()
+ } else {
+ next_point
+ }
+ }
+
+ fn step_with_cube_wrapping(&self, map: &Map) -> (Point, Direction) {
+ let (peek_position, peek_facing) = map
+ .portals
+ .iter()
+ .filter(|portal| portal.src_facing == self.facing)
+ .filter_map(|portal| {
+ portal
+ .src_boundary
+ .distance_from_start_on_line(&self.position)
+ .map(|distance| {
+ (
+ portal.dest_boundary.find_point_on_line(distance),
+ portal.dest_facing.clone(),
+ )
+ })
+ })
+ .next()
+ .unwrap_or_else(|| {
+ (
+ match self.facing {
+ Direction::Right => Point {
+ x: self.position.x + 1,
+ ..self.position
+ },
+ Direction::Left => Point {
+ x: self.position.x - 1,
+ ..self.position
+ },
+ Direction::Down => Point {
+ y: self.position.y + 1,
+ ..self.position
+ },
+ Direction::Up => Point {
+ y: self.position.y - 1,
+ ..self.position
+ },
+ },
+ self.facing.clone(),
+ )
+ });
+
+ let peek_value = map.grid[peek_position.y].get(peek_position.x);
+ match peek_value {
+ Some(MapPoint::Empty) => (peek_position, peek_facing),
+ Some(MapPoint::Wall) => (self.position.clone(), self.facing.clone()),
+ Some(MapPoint::Void) | None => {
+ panic!("Cube wrapping shouldn't land on voids");
+ }
+ }
+ }
+
+ fn process_instruction(&mut self, map: &Map, instruction: &Instruction, cube_wrapping: bool) {
+ match instruction {
+ Instruction::TurnLeft => {
+ self.facing = self.facing.spin_left();
+ }
+ Instruction::TurnRight => {
+ self.facing = self.facing.spin_right();
+ }
+ Instruction::Walk(amount) => {
+ for _ in 0..*amount {
+ if cube_wrapping {
+ let (next_position, next_facing) = self.step_with_cube_wrapping(&map);
+ self.position = next_position;
+ self.facing = next_facing;
+ } else {
+ self.position = self.step_with_wrapping(&map);
+ }
+ }
+ }
+ }
+ }
+
+ fn score(&self) -> usize {
+ (self.position.y + 1) * 1000 + (self.position.x + 1) * 4 + self.facing.score()
+ }
+}
+
+impl Direction {
+ fn spin_left(&self) -> Direction {
+ match self {
+ Direction::Right => Direction::Up,
+ Direction::Down => Direction::Right,
+ Direction::Left => Direction::Down,
+ Direction::Up => Direction::Left,
+ }
+ }
+
+ fn spin_right(&self) -> Direction {
+ self.spin_left().spin_left().spin_left()
+ }
+
+ fn score(&self) -> usize {
+ match self {
+ Direction::Right => 0,
+ Direction::Down => 1,
+ Direction::Left => 2,
+ Direction::Up => 3,
+ }
+ }
+}
+
+#[derive(Debug, Clone)]
+struct Portal {
+ src_boundary: LineSegment,
+ src_facing: Direction,
+ dest_boundary: LineSegment,
+ dest_facing: Direction,
+}
+
+#[derive(Debug, Clone)]
+struct LineSegment {
+ start: Point,
+ end: Point,
+}
+
+impl Portal {
+ fn add_reverse_portals(mut portals: Vec<Portal>) -> Vec<Portal> {
+ let mut reverse = portals
+ .iter()
+ .map(|forward_portal| Portal {
+ src_boundary: forward_portal.dest_boundary.clone(),
+ src_facing: forward_portal.dest_facing.spin_left().spin_left(),
+ dest_boundary: forward_portal.src_boundary.clone(),
+ dest_facing: forward_portal.src_facing.spin_left().spin_left(),
+ })
+ .collect();
+ portals.append(&mut reverse);
+ portals
+ }
+}
+
+impl LineSegment {
+ fn distance_from_start_on_line(&self, p: &Point) -> Option<usize> {
+ if self.start.x == self.end.x {
+ if self.start.x != p.x {
+ None
+ } else {
+ if self.start.y < self.end.y {
+ if self.start.y <= p.y && self.end.y >= p.y {
+ Some(p.y - self.start.y)
+ } else {
+ None
+ }
+ } else {
+ if self.start.y >= p.y && self.end.y <= p.y {
+ Some(self.start.y - p.y)
+ } else {
+ None
+ }
+ }
+ }
+ } else if self.start.y == self.end.y {
+ if self.start.y != p.y {
+ None
+ } else {
+ if self.start.x < self.end.x {
+ if self.start.x <= p.x && self.end.x >= p.x {
+ Some(p.x - self.start.x)
+ } else {
+ None
+ }
+ } else {
+ if self.start.x >= p.x && self.end.x <= p.x {
+ Some(self.start.x - p.x)
+ } else {
+ None
+ }
+ }
+ }
+ } else {
+ unimplemented!("Oh no, we only handle straight portals")
+ }
+ }
+
+ fn find_point_on_line(&self, distance: usize) -> Point {
+ if self.start.x == self.end.x {
+ if self.start.y < self.end.y {
+ assert!(self.start.y + distance <= self.end.y);
+ Point {
+ x: self.start.x,
+ y: self.start.y + distance,
+ }
+ } else {
+ assert!(self.start.y - distance >= self.end.y);
+ Point {
+ x: self.start.x,
+ y: self.start.y - distance,
+ }
+ }
+ } else if self.start.y == self.end.y {
+ if self.start.x < self.end.x {
+ assert!(self.start.x + distance <= self.end.x);
+ Point {
+ y: self.start.y,
+ x: self.start.x + distance,
+ }
+ } else {
+ assert!(self.start.x - distance >= self.end.x);
+ Point {
+ y: self.start.y,
+ x: self.start.x - distance,
+ }
+ }
+ } else {
+ unimplemented!("Oh no, we only handle straight portals")
+ }
+ }
+}
diff --git a/2022/src/bin/day_23.rs b/2022/src/bin/day_23.rs
new file mode 100644
index 0000000..44483a5
--- /dev/null
+++ b/2022/src/bin/day_23.rs
@@ -0,0 +1,346 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::line_ending,
+ combinator::{map, value},
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::{
+ collections::{BTreeMap, BTreeSet, VecDeque},
+ fs,
+};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_23.txt")?;
+ let elves = ElfMap::parser(&input).unwrap().1;
+
+ {
+ let mut elves_1 = elves.clone();
+ for _ in 0..10 {
+ elves_1.process_round();
+ }
+ dbg!(elves_1.count_empty_ground());
+ }
+
+ {
+ let mut elves_2 = elves;
+ for round in 1.. {
+ if !elves_2.process_round() {
+ dbg!(round);
+ break;
+ }
+ }
+ }
+
+ Ok(())
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+struct ElfMap {
+ elves: BTreeSet<Point>,
+ check_order: VecDeque<Direction>,
+}
+
+#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)]
+struct Point {
+ y: i64,
+ x: i64,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
+enum Direction {
+ North,
+ South,
+ West,
+ East,
+}
+
+impl ElfMap {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(
+ line_ending,
+ map(
+ many1(alt((value(true, tag("#")), value(false, tag("."))))),
+ |row| {
+ row.into_iter()
+ .enumerate()
+ .filter_map(|(x, occupied)| occupied.then_some(x as i64))
+ .collect::<Vec<i64>>()
+ },
+ ),
+ ),
+ |rows| {
+ let elves = rows
+ .into_iter()
+ .enumerate()
+ .flat_map(|(y, row)| row.into_iter().map(move |x| Point { x, y: y as i64 }))
+ .collect();
+ ElfMap {
+ elves,
+ check_order: [
+ Direction::North,
+ Direction::South,
+ Direction::West,
+ Direction::East,
+ ]
+ .into(),
+ }
+ },
+ )(input)
+ }
+
+ fn process_round(&mut self) -> bool {
+ // key is destination!
+ let mut elf_moves: BTreeMap<Point, Point> = BTreeMap::new();
+ let mut conflict_moves: BTreeSet<Point> = BTreeSet::new();
+
+ // phase 1: figure out where each elf wants to move
+ for elf in &self.elves {
+ if let Some(destination) = self.find_elf_move(elf) {
+ use std::collections::btree_map::Entry;
+ match elf_moves.entry(destination) {
+ Entry::Occupied(elf_move_entry) => {
+ conflict_moves.insert(elf_move_entry.key().clone());
+ elf_move_entry.remove_entry();
+ }
+ Entry::Vacant(elf_move_entry) => {
+ if !conflict_moves.contains(elf_move_entry.key()) {
+ elf_move_entry.insert(elf.clone());
+ }
+ }
+ }
+ }
+ }
+
+ let any_elf_moved = !elf_moves.is_empty();
+
+ // phase 2: move the elves
+ for (dest, src) in elf_moves {
+ self.elves.remove(&src);
+ self.elves.insert(dest);
+ }
+
+ let rotate = self
+ .check_order
+ .pop_front()
+ .expect("Where did the directions go?");
+ self.check_order.push_back(rotate);
+
+ any_elf_moved
+ }
+
+ fn find_elf_move(&self, elf: &Point) -> Option<Point> {
+ let all_adjacent = elf.adjacent(None);
+ let any_adjacent_elves = all_adjacent.into_iter().any(|p| self.elves.contains(&p));
+ if !any_adjacent_elves {
+ None
+ } else {
+ self.check_order
+ .iter()
+ .filter_map(|dir| {
+ let adjacent = elf.adjacent(Some(*dir));
+ let any_adjacent_elves = adjacent.iter().any(|p| self.elves.contains(p));
+ if !any_adjacent_elves {
+ Some(adjacent[1].clone())
+ } else {
+ None
+ }
+ })
+ .next()
+ }
+ }
+
+ fn count_empty_ground(&self) -> i64 {
+ let elf_x = self.elves.iter().map(|elf| elf.x);
+ let min_x = elf_x.clone().min().unwrap_or(0);
+ let max_x = elf_x.max().unwrap_or(0);
+
+ let elf_y = self.elves.iter().map(|elf| elf.y);
+ let min_y = elf_y.clone().min().unwrap_or(0);
+ let max_y = elf_y.max().unwrap_or(0);
+
+ let all_ground = (max_x - min_x + 1) * (max_y - min_y + 1);
+ let covered_ground = self.elves.len() as i64;
+ all_ground - covered_ground
+ }
+}
+
+impl Point {
+ fn adjacent(&self, direction: Option<Direction>) -> Vec<Point> {
+ let (y_range, x_range) = match direction {
+ None => ((-1..=1), (-1..=1)),
+ Some(Direction::North) => ((-1..=-1), (-1..=1)),
+ Some(Direction::South) => ((1..=1), (-1..=1)),
+ Some(Direction::West) => ((-1..=1), (-1..=-1)),
+ Some(Direction::East) => ((-1..=1), (1..=1)),
+ };
+
+ y_range
+ .flat_map(|dy| {
+ x_range.clone().map(move |dx| Point {
+ x: self.x + dx,
+ y: self.y + dy,
+ })
+ })
+ .filter(|p| p != self)
+ .collect()
+ }
+}
+
+#[test]
+fn follows_the_example() {
+ let mut elf_map = ElfMap::parser(
+ r"..............
+..............
+.......#......
+.....###.#....
+...#...#.#....
+....#...##....
+...#.###......
+...##.#.##....
+....#..#......
+..............
+..............
+..............",
+ )
+ .unwrap()
+ .1;
+
+ elf_map.process_round();
+ assert_eq!(
+ elf_map.elves,
+ ElfMap::parser(
+ r"..............
+.......#......
+.....#...#....
+...#..#.#.....
+.......#..#...
+....#.#.##....
+..#..#.#......
+..#.#.#.##....
+..............
+....#..#......
+..............
+..............
+"
+ )
+ .unwrap()
+ .1
+ .elves
+ );
+
+ elf_map.process_round();
+ assert_eq!(
+ elf_map.elves,
+ ElfMap::parser(
+ r"..............
+.......#......
+....#.....#...
+...#..#.#.....
+.......#...#..
+...#..#.#.....
+.#...#.#.#....
+..............
+..#.#.#.##....
+....#..#......
+..............
+..............
+"
+ )
+ .unwrap()
+ .1
+ .elves
+ );
+
+ elf_map.process_round();
+ assert_eq!(
+ elf_map.elves,
+ ElfMap::parser(
+ r"..............
+.......#......
+.....#....#...
+..#..#...#....
+.......#...#..
+...#..#.#.....
+.#..#.....#...
+.......##.....
+..##.#....#...
+...#..........
+.......#......
+.............."
+ )
+ .unwrap()
+ .1
+ .elves
+ );
+
+ elf_map.process_round();
+ assert_eq!(
+ elf_map.elves,
+ ElfMap::parser(
+ r"..............
+.......#......
+......#....#..
+..#...##......
+...#.....#.#..
+.........#....
+.#...###..#...
+..#......#....
+....##....#...
+....#.........
+.......#......
+.............."
+ )
+ .unwrap()
+ .1
+ .elves
+ );
+
+ elf_map.process_round();
+ assert_eq!(
+ elf_map.elves,
+ ElfMap::parser(
+ r".......#......
+..............
+..#..#.....#..
+.........#....
+......##...#..
+.#.#.####.....
+...........#..
+....##..#.....
+..#...........
+..........#...
+....#..#......
+.............."
+ )
+ .unwrap()
+ .1
+ .elves
+ );
+
+ for _ in 0..5 {
+ elf_map.process_round();
+ }
+ assert_eq!(
+ elf_map.elves,
+ ElfMap::parser(
+ r".......#......
+...........#..
+..#.#..#......
+......#.......
+...#.....#..#.
+.#......##....
+.....##.......
+..#........#..
+....#.#..#....
+..............
+....#..#..#...
+.............."
+ )
+ .unwrap()
+ .1
+ .elves
+ );
+}
diff --git a/2022/src/bin/day_24.rs b/2022/src/bin/day_24.rs
new file mode 100644
index 0000000..71edc71
--- /dev/null
+++ b/2022/src/bin/day_24.rs
@@ -0,0 +1,195 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::line_ending,
+ combinator::{map, value},
+ multi::{many1, separated_list1},
+ sequence::{delimited, tuple},
+ IResult,
+};
+use std::{collections::BTreeSet, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_24.txt")?;
+ let blizzard_map = BlizzardMap::parser(&input).unwrap().1;
+ let start = Point { x: 0, y: 0 };
+ let end = Point {
+ x: blizzard_map.width - 1,
+ y: blizzard_map.height - 1,
+ };
+ let there_the_first_time =
+ dbg!(blizzard_map.find_shortest_path_through(start.clone(), end.clone(), 1));
+ let back_again = dbg!(blizzard_map.find_shortest_path_through(
+ end.clone(),
+ start.clone(),
+ there_the_first_time + 1
+ ));
+ dbg!(blizzard_map.find_shortest_path_through(start, end, back_again + 1));
+
+ Ok(())
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+struct BlizzardMap {
+ width: usize,
+ height: usize,
+ blizzards: Vec<Blizzard>,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+struct Blizzard {
+ start: Point,
+ direction: Direction,
+}
+
+#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)]
+struct Point {
+ y: usize,
+ x: usize,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
+enum Direction {
+ North,
+ South,
+ West,
+ East,
+}
+
+impl BlizzardMap {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ delimited(
+ tuple((many1(tag("#")), tag("."), many1(tag("#")), line_ending)),
+ separated_list1(
+ line_ending,
+ delimited(tag("#"), many1(Direction::parser), tag("#")),
+ ),
+ tuple((line_ending, many1(tag("#")), tag("."), many1(tag("#")))),
+ ),
+ |blizzard_directions| BlizzardMap {
+ width: blizzard_directions[0].len(),
+ height: blizzard_directions.len(),
+ blizzards: blizzard_directions
+ .into_iter()
+ .enumerate()
+ .flat_map(|(y, row)| {
+ row.into_iter()
+ .enumerate()
+ .filter_map(move |(x, direction)| {
+ direction.map(|direction| Blizzard {
+ start: Point { x, y },
+ direction,
+ })
+ })
+ })
+ .collect(),
+ },
+ )(input)
+ }
+
+ fn find_shortest_path_through(
+ &self,
+ start: Point,
+ end: Point,
+ mut current_round: usize,
+ ) -> usize {
+ // Not sure if "visited" makes sense here because of the time
+ // delay. Same position at different times is different. Maybe
+ // makes sense if I keep time in too.
+ let mut frontier = BTreeSet::new();
+ frontier.insert(start);
+ while !frontier.contains(&end) {
+ current_round += 1;
+ let last_frontier = std::mem::take(&mut frontier);
+
+ let blizzards = self.blizzards_at_time(current_round);
+
+ for frontier_state in last_frontier {
+ let mut possible_moves = vec![frontier_state.clone()];
+ if frontier_state.x > 0 {
+ possible_moves.push(Point {
+ x: frontier_state.x - 1,
+ y: frontier_state.y,
+ });
+ }
+ if frontier_state.x < self.width - 1 {
+ possible_moves.push(Point {
+ x: frontier_state.x + 1,
+ y: frontier_state.y,
+ });
+ }
+ if frontier_state.y > 0 {
+ possible_moves.push(Point {
+ x: frontier_state.x,
+ y: frontier_state.y - 1,
+ });
+ }
+ if frontier_state.y < self.height - 1 {
+ possible_moves.push(Point {
+ x: frontier_state.x,
+ y: frontier_state.y + 1,
+ });
+ }
+
+ for next in possible_moves {
+ if !blizzards.contains(&next) {
+ frontier.insert(next);
+ }
+ }
+ }
+ }
+
+ current_round + 1 // extra minute to leave
+ }
+
+ fn blizzards_at_time(&self, t: usize) -> BTreeSet<Point> {
+ self.blizzards
+ .iter()
+ .map(|blizzard| match blizzard.direction {
+ Direction::North => {
+ let t = t % self.height;
+ Point {
+ y: if blizzard.start.y > t {
+ blizzard.start.y - t
+ } else {
+ blizzard.start.y + self.height - t
+ },
+ ..blizzard.start
+ }
+ }
+ Direction::South => Point {
+ y: (blizzard.start.y + t) % self.height,
+ ..blizzard.start
+ },
+ Direction::West => {
+ let t = t % self.width;
+ Point {
+ x: if blizzard.start.x > t {
+ blizzard.start.x - t
+ } else {
+ blizzard.start.x + self.width - t
+ },
+ ..blizzard.start
+ }
+ }
+ Direction::East => Point {
+ x: (blizzard.start.x + t) % self.width,
+ ..blizzard.start
+ },
+ })
+ .collect()
+ }
+}
+
+impl Direction {
+ fn parser(input: &str) -> IResult<&str, Option<Self>> {
+ alt((
+ value(None, tag(".")),
+ value(Some(Direction::South), tag("v")),
+ value(Some(Direction::West), tag("<")),
+ value(Some(Direction::East), tag(">")),
+ value(Some(Direction::North), tag("^")),
+ ))(input)
+ }
+}
diff --git a/2022/src/bin/day_25.rs b/2022/src/bin/day_25.rs
new file mode 100644
index 0000000..d55f30a
--- /dev/null
+++ b/2022/src/bin/day_25.rs
@@ -0,0 +1,111 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::line_ending,
+ combinator::{map, value},
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_25.txt")?;
+ let parsed = SnafuList::parser(&input).unwrap().1;
+ dbg!(to_snafu(parsed.sum()));
+
+ Ok(())
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+struct SnafuList(Vec<i64>);
+
+impl SnafuList {
+ fn parser(input: &str) -> IResult<&str, SnafuList> {
+ map(
+ separated_list1(
+ line_ending,
+ map(
+ many1(alt((
+ value(2, tag("2")),
+ value(1, tag("1")),
+ value(0, tag("0")),
+ value(-1, tag("-")),
+ value(-2, tag("=")),
+ ))),
+ |digits| {
+ let mut result: i64 = 0;
+ for digit in digits {
+ result *= 5;
+ result += digit;
+ }
+ result
+ },
+ ),
+ ),
+ SnafuList,
+ )(input)
+ }
+
+ fn sum(&self) -> i64 {
+ self.0.iter().sum()
+ }
+}
+
+fn to_snafu(mut remaining_value: i64) -> String {
+ let mut result = String::new();
+
+ let mut current_power = 5i64.pow(26);
+
+ while current_power > 0 {
+ let next_digit_range = {
+ let mut next_digit_power = current_power / 5;
+ let mut max_next_digit = 0;
+ while next_digit_power > 0 {
+ max_next_digit += 2 * next_digit_power;
+ next_digit_power /= 5;
+ }
+ -max_next_digit..=max_next_digit
+ };
+
+ let (digit, digit_value) = [('=', -2), ('-', -1), ('0', 0), ('1', 1), ('2', 2)]
+ .into_iter()
+ .filter_map(|(digit, digit_value)| {
+ let digit_value = digit_value * current_power;
+ let remaining_if_digit_set = remaining_value - digit_value;
+ if next_digit_range.contains(&remaining_if_digit_set) {
+ Some((digit, digit_value))
+ } else {
+ None
+ }
+ })
+ .next()
+ .expect("No digit found");
+
+ remaining_value -= digit_value;
+ result.push(digit);
+
+ current_power /= 5;
+ }
+
+ result.trim_start_matches("0").to_owned()
+}
+
+#[test]
+fn round_trip_works() {
+ let str_list = vec![
+ "1=-0-2", "12111", "2=0=", "21", "2=01", "111", "20012", "112", "1=-1=", "1-12", "12",
+ "1=", "122",
+ ];
+ let list = SnafuList::parser(&str_list.join("\n")).unwrap().1;
+
+ assert_eq!(
+ list,
+ SnafuList(vec![
+ 1747, 906, 198, 11, 201, 31, 1257, 32, 353, 107, 7, 3, 37
+ ])
+ );
+
+ for (i, num) in list.0.iter().enumerate() {
+ assert_eq!(to_snafu(*num), str_list[i]);
+ }
+}
diff --git a/2022/src/bin/day_3.rs b/2022/src/bin/day_3.rs
new file mode 100644
index 0000000..ec2d5e2
--- /dev/null
+++ b/2022/src/bin/day_3.rs
@@ -0,0 +1,100 @@
+use nom::{
+ character::complete::{line_ending, satisfy},
+ combinator::map,
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::{collections::BTreeSet, fs, iter::Iterator};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_3.txt")?;
+ let rucksacks = Rucksacks::parser(&input).unwrap().1;
+ dbg!(rucksacks.disorder_sum());
+ dbg!(rucksacks.groups_sum());
+ Ok(())
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct Rucksacks(Vec<Rucksack>);
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct Rucksack {
+ front: BTreeSet<ItemType>,
+ back: BTreeSet<ItemType>,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, PartialOrd, Ord)]
+struct ItemType(char);
+
+impl Rucksacks {
+ fn parser(input: &str) -> IResult<&str, Rucksacks> {
+ map(separated_list1(line_ending, Rucksack::parser), Rucksacks)(input)
+ }
+
+ fn disorder_sum(&self) -> u32 {
+ self.0.iter().map(|r| r.intersection_priority()).sum()
+ }
+
+ fn groups_sum(&self) -> u32 {
+ self.0
+ .chunks(3)
+ .map(|group| {
+ let mut overlap = group[0].union();
+ for m in group.iter().skip(1) {
+ overlap = overlap.intersection(&m.union()).cloned().collect();
+ }
+ overlap.iter().map(|c| c.priority()).sum::<u32>()
+ })
+ .sum()
+ }
+}
+
+impl Rucksack {
+ fn parser(input: &str) -> IResult<&str, Rucksack> {
+ map(many1(ItemType::parser), Rucksack::new)(input)
+ }
+
+ fn new(contents: Vec<ItemType>) -> Rucksack {
+ let mid = contents.len() / 2;
+ let front_str = &contents[0..mid];
+ let back_str = &contents[mid..];
+
+ let mut front = BTreeSet::new();
+ for c in front_str {
+ front.insert(c.clone());
+ }
+
+ let mut back = BTreeSet::new();
+ for c in back_str {
+ back.insert(c.clone());
+ }
+
+ Rucksack { front, back }
+ }
+
+ fn intersection(&self) -> BTreeSet<ItemType> {
+ self.front.intersection(&self.back).cloned().collect()
+ }
+
+ fn union(&self) -> BTreeSet<ItemType> {
+ self.front.union(&self.back).cloned().collect()
+ }
+
+ fn intersection_priority(&self) -> u32 {
+ self.intersection().iter().map(|c| c.priority()).sum()
+ }
+}
+
+impl ItemType {
+ fn parser(input: &str) -> IResult<&str, ItemType> {
+ map(satisfy(|c| c.is_alphabetic()), ItemType)(input)
+ }
+
+ fn priority(&self) -> u32 {
+ if self.0.is_uppercase() {
+ (self.0 as u32 - 'A' as u32) + 27
+ } else {
+ (self.0 as u32 - 'a' as u32) + 1
+ }
+ }
+}
diff --git a/2022/src/bin/day_4.rs b/2022/src/bin/day_4.rs
new file mode 100644
index 0000000..5f08d70
--- /dev/null
+++ b/2022/src/bin/day_4.rs
@@ -0,0 +1,88 @@
+use nom::{
+ bytes::complete::tag,
+ character::complete::{line_ending, u32 as nom_u32},
+ combinator::map,
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{fs, iter::Iterator, ops::RangeInclusive};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_4.txt")?;
+ let assignments = Assignments::parser(&input).unwrap().1;
+ dbg!(assignments.count_containing_assignments());
+ dbg!(assignments.count_overlapping_assignments());
+ Ok(())
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct Assignments(Vec<AssignmentPair>);
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct AssignmentPair {
+ elf_1: Assignment,
+ elf_2: Assignment,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct Assignment(RangeInclusive<u32>);
+
+impl Assignments {
+ fn parser(input: &str) -> IResult<&str, Assignments> {
+ map(
+ separated_list1(line_ending, AssignmentPair::parser),
+ Assignments,
+ )(input)
+ }
+
+ fn count_containing_assignments(&self) -> usize {
+ self.0
+ .iter()
+ .filter(|pair| pair.one_completely_overlaps_other())
+ .count()
+ }
+
+ fn count_overlapping_assignments(&self) -> usize {
+ self.0
+ .iter()
+ .filter(|pair| pair.one_overlaps_other())
+ .count()
+ }
+}
+
+impl AssignmentPair {
+ fn parser(input: &str) -> IResult<&str, AssignmentPair> {
+ map(
+ tuple((Assignment::parser, tag(","), Assignment::parser)),
+ |(elf_1, _, elf_2)| AssignmentPair { elf_1, elf_2 },
+ )(input)
+ }
+
+ fn one_completely_overlaps_other(&self) -> bool {
+ self.elf_1.contains(&self.elf_2) || self.elf_2.contains(&self.elf_1)
+ }
+
+ fn one_overlaps_other(&self) -> bool {
+ self.elf_1.overlaps(&self.elf_2)
+ }
+}
+
+impl Assignment {
+ fn parser(input: &str) -> IResult<&str, Assignment> {
+ map(tuple((nom_u32, tag("-"), nom_u32)), |(start, _, end)| {
+ Assignment(RangeInclusive::new(start, end))
+ })(input)
+ }
+
+ fn contains(&self, other: &Assignment) -> bool {
+ self.0.contains(other.0.start()) && self.0.contains(other.0.end())
+ }
+
+ fn overlaps(&self, other: &Assignment) -> bool {
+ self.0.contains(other.0.start())
+ || self.0.contains(other.0.end())
+ || other.0.contains(self.0.start())
+ || other.0.contains(self.0.end())
+ }
+}
diff --git a/2022/src/bin/day_5.rs b/2022/src/bin/day_5.rs
new file mode 100644
index 0000000..f06012c
--- /dev/null
+++ b/2022/src/bin/day_5.rs
@@ -0,0 +1,147 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{
+ anychar, char as nom_char, line_ending, not_line_ending, u32 as nom_u32,
+ },
+ combinator::map,
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_5.txt")?;
+ let state = CraneState::parser(&input).unwrap().1;
+
+ let mut state_part_1 = state.clone();
+ while !state_part_1.done() {
+ state_part_1.process_next_instruction(false);
+ }
+ dbg!(state_part_1.read_top_row());
+
+ let mut state_part_2 = state.clone();
+ while !state_part_2.done() {
+ state_part_2.process_next_instruction(true);
+ }
+ dbg!(state_part_2.read_top_row());
+
+ Ok(())
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct CraneState {
+ towers: Vec<Tower>,
+ instructions: Vec<Instruction>,
+}
+
+#[derive(Debug, Default, PartialEq, Eq, Clone)]
+struct Tower {
+ crates: Vec<char>,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct Instruction {
+ number: usize,
+ src: usize,
+ dest: usize,
+}
+
+impl CraneState {
+ fn parser(input: &str) -> IResult<&str, CraneState> {
+ let single_crate = alt((
+ map(tuple((tag("["), anychar, tag("]"))), |(_, c, _)| Some(c)),
+ map(tag(" "), |_| None),
+ ));
+ let crate_row = separated_list1(nom_char(' '), single_crate);
+
+ map(
+ tuple((
+ separated_list1(line_ending, crate_row),
+ line_ending,
+ not_line_ending,
+ line_ending,
+ line_ending,
+ separated_list1(line_ending, Instruction::parser),
+ )),
+ |(crate_rows, _, _, _, _, mut instructions)| {
+ let mut towers = Vec::new();
+ for row in &crate_rows {
+ for (i, c) in row
+ .iter()
+ .enumerate()
+ .filter_map(|(i, c)| c.map(|some_c| (i, some_c)))
+ {
+ while i >= towers.len() {
+ towers.push(Tower::default());
+ }
+ towers[i].crates.push(c);
+ }
+ }
+ for tower in &mut towers {
+ tower.crates.reverse();
+ }
+
+ instructions.reverse();
+ CraneState {
+ towers,
+ instructions,
+ }
+ },
+ )(input)
+ }
+
+ fn process_next_instruction(&mut self, maintain_order: bool) {
+ let Some(instruction) = self.instructions.pop() else {
+ return
+ };
+ let mut to_move = Vec::new();
+ for _ in 0..instruction.number {
+ let Some(crate_to_move) = self.towers[instruction.src].crates.pop() else {
+ panic!("Invalid puzzle input: failed to get crate");
+ };
+ to_move.push(crate_to_move);
+ }
+ if maintain_order {
+ to_move.reverse();
+ }
+ for crate_to_move in to_move {
+ self.towers[instruction.dest].crates.push(crate_to_move);
+ }
+ }
+
+ fn done(&self) -> bool {
+ self.instructions.len() == 0
+ }
+
+ fn read_top_row(&self) -> String {
+ let mut res = String::new();
+ for tower in &self.towers {
+ if let Some(top) = tower.crates.last() {
+ res.push(*top);
+ }
+ }
+ res
+ }
+}
+
+impl Instruction {
+ fn parser(input: &str) -> IResult<&str, Instruction> {
+ map(
+ tuple((
+ tag("move "),
+ nom_u32,
+ tag(" from "),
+ nom_u32,
+ tag(" to "),
+ nom_u32,
+ )),
+ |(_, number, _, src, _, dest)| Instruction {
+ number: number as usize,
+ src: (src - 1) as usize,
+ dest: (dest - 1) as usize,
+ },
+ )(input)
+ }
+}
diff --git a/2022/src/bin/day_6.rs b/2022/src/bin/day_6.rs
new file mode 100644
index 0000000..f02feca
--- /dev/null
+++ b/2022/src/bin/day_6.rs
@@ -0,0 +1,20 @@
+use std::{collections::BTreeSet, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_6.txt")?;
+ let chars: Vec<char> = input.trim().chars().collect();
+ dbg!(find_distinct_char_run(&chars, 4));
+ dbg!(find_distinct_char_run(&chars, 14));
+
+ Ok(())
+}
+
+fn find_distinct_char_run(chars: &[char], window_size: usize) -> Option<usize> {
+ for (i, char_window) in chars.windows(window_size).enumerate() {
+ let set: BTreeSet<&char> = char_window.iter().collect();
+ if set.len() == window_size {
+ return Some(i + window_size);
+ }
+ }
+ return None;
+}
diff --git a/2022/src/bin/day_7.rs b/2022/src/bin/day_7.rs
new file mode 100644
index 0000000..8933816
--- /dev/null
+++ b/2022/src/bin/day_7.rs
@@ -0,0 +1,227 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{line_ending, not_line_ending, u32 as nom_u32},
+ combinator::map,
+ multi::separated_list1,
+ sequence::{preceded, tuple},
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_7.txt")?;
+ let terminal_log = TerminalLog::parser(&input).unwrap().1;
+ let dir_tree = terminal_log.process_to_dir_tree();
+
+ dbg!(dir_tree.sum_sizes_below_threshhold(100000));
+
+ let required_disk_usage = 70000000 - 30000000;
+ let required_deletion = dir_tree.size() - required_disk_usage;
+ dbg!(dir_tree.find_min_size_greater_than(required_deletion));
+
+ Ok(())
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct TerminalLog(Vec<TerminalLogItem>);
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+enum TerminalLogItem {
+ Command(TerminalLogCommand),
+ Output(TerminalLogOutput),
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+enum TerminalLogCommand {
+ CdRoot,
+ CdUp,
+ CdDown(String),
+ List,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+enum TerminalLogOutput {
+ Dir(String),
+ File(u32, String),
+}
+
+impl TerminalLog {
+ fn parser(input: &str) -> IResult<&str, TerminalLog> {
+ map(
+ separated_list1(line_ending, TerminalLogItem::parser),
+ TerminalLog,
+ )(input)
+ }
+
+ fn process_to_dir_tree(&self) -> DirTree {
+ use TerminalLogCommand::*;
+ use TerminalLogItem::*;
+ use TerminalLogOutput::*;
+
+ let mut dir_tree_root = DirTree::root();
+ let mut dir_path = Vec::new();
+
+ for log in &self.0 {
+ match log {
+ Command(CdRoot) => dir_path.clear(),
+ Command(CdUp) => {
+ dir_path.pop();
+ }
+ Command(CdDown(dir_name)) => {
+ dir_path.push(dir_name.clone());
+ }
+ Command(List) => {}
+ Output(Dir(dir_name)) => {
+ let dir = DirTree::new(dir_name.clone());
+ dir_tree_root.push_dir(&dir_path, dir);
+ }
+ Output(File(size, name)) => {
+ let file = DirTreeFile {
+ name: name.clone(),
+ size: size.clone(),
+ };
+ dir_tree_root.push_file(&dir_path, file);
+ }
+ }
+ }
+
+ dir_tree_root
+ }
+}
+
+impl TerminalLogItem {
+ fn parser(input: &str) -> IResult<&str, TerminalLogItem> {
+ alt((
+ map(
+ preceded(tag("$ "), TerminalLogCommand::parser),
+ TerminalLogItem::Command,
+ ),
+ map(TerminalLogOutput::parser, TerminalLogItem::Output),
+ ))(input)
+ }
+}
+
+impl TerminalLogCommand {
+ fn parser(input: &str) -> IResult<&str, TerminalLogCommand> {
+ alt((
+ map(tag("cd /"), |_| TerminalLogCommand::CdRoot),
+ map(tag("cd .."), |_| TerminalLogCommand::CdUp),
+ map(preceded(tag("cd "), name_parser), |name| {
+ TerminalLogCommand::CdDown(name)
+ }),
+ map(tag("ls"), |_| TerminalLogCommand::List),
+ ))(input)
+ }
+}
+
+impl TerminalLogOutput {
+ fn parser(input: &str) -> IResult<&str, TerminalLogOutput> {
+ alt((
+ map(preceded(tag("dir "), name_parser), |name| {
+ TerminalLogOutput::Dir(name)
+ }),
+ map(
+ tuple((nom_u32, tag(" "), name_parser)),
+ |(size, _, name)| TerminalLogOutput::File(size, name),
+ ),
+ ))(input)
+ }
+}
+
+fn name_parser(input: &str) -> IResult<&str, String> {
+ map(not_line_ending, |s: &str| s.to_owned())(input)
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct DirTree {
+ name: String,
+ files: Vec<DirTreeFile>,
+ dirs: Vec<DirTree>,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct DirTreeFile {
+ name: String,
+ size: u32,
+}
+
+impl DirTree {
+ fn root() -> DirTree {
+ DirTree {
+ name: "/".into(),
+ files: Vec::new(),
+ dirs: Vec::new(),
+ }
+ }
+
+ fn new(name: String) -> DirTree {
+ DirTree {
+ name,
+ files: Vec::new(),
+ dirs: Vec::new(),
+ }
+ }
+
+ fn push_dir(&mut self, path: &[String], dir: DirTree) {
+ if path.is_empty() {
+ self.dirs.push(dir);
+ } else {
+ let subdir = self
+ .dirs
+ .iter_mut()
+ .find(|d| d.name == path[0])
+ .expect("Subdir doesn't exist");
+ subdir.push_dir(&path[1..], dir);
+ }
+ }
+
+ fn push_file(&mut self, path: &[String], dir: DirTreeFile) {
+ if path.is_empty() {
+ self.files.push(dir);
+ } else {
+ let subdir = self
+ .dirs
+ .iter_mut()
+ .find(|d| d.name == path[0])
+ .expect("Subdir doesn't exist");
+ subdir.push_file(&path[1..], dir);
+ }
+ }
+
+ fn size(&self) -> u32 {
+ self.files.iter().map(|f| f.size).sum::<u32>()
+ + self.dirs.iter().map(|f| f.size()).sum::<u32>()
+ }
+
+ fn sum_sizes_below_threshhold(&self, threshhold: u32) -> u32 {
+ let self_size = self.size();
+ let self_size_below_threshold = if self_size < threshhold { self_size } else { 0 };
+ self_size_below_threshold
+ + self
+ .dirs
+ .iter()
+ .map(|f| f.sum_sizes_below_threshhold(threshhold))
+ .sum::<u32>()
+ }
+
+ fn find_min_size_greater_than(&self, threshhold: u32) -> Option<u32> {
+ let min_subdir = self
+ .dirs
+ .iter()
+ .filter_map(|d| d.find_min_size_greater_than(threshhold))
+ .min();
+
+ match min_subdir {
+ Some(min) => Some(min),
+ None => {
+ let self_size = self.size();
+ if self_size > threshhold {
+ Some(self_size)
+ } else {
+ None
+ }
+ }
+ }
+ }
+}
diff --git a/2022/src/bin/day_8.rs b/2022/src/bin/day_8.rs
new file mode 100644
index 0000000..d044aa6
--- /dev/null
+++ b/2022/src/bin/day_8.rs
@@ -0,0 +1,231 @@
+use nom::{
+ character::complete::{anychar, line_ending},
+ combinator::map_res,
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_8.txt")?;
+ let trees = TreeField::parser(&input).unwrap().1;
+
+ dbg!(trees.count_visible_trees());
+ dbg!(trees.find_best_scenic_score());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct TreeField {
+ width: usize,
+ height: usize,
+ tree_heights: Vec<Vec<i8>>,
+ row_height_fields: Vec<HeightField>,
+ column_height_fields: Vec<HeightField>,
+}
+
+#[derive(Default, Debug)]
+struct HeightField {
+ left_breaking_points: Vec<(usize, i8)>,
+ right_breaking_points: Vec<(usize, i8)>,
+}
+
+enum TreeFieldError {
+ Empty,
+ NotRectangular,
+}
+
+impl TreeField {
+ fn parser(input: &str) -> IResult<&str, TreeField> {
+ map_res(
+ separated_list1(
+ line_ending,
+ many1(map_res(anychar, |c: char| c.to_string().parse::<i8>())),
+ ),
+ TreeField::new,
+ )(input)
+ }
+
+ fn new(tree_heights: Vec<Vec<i8>>) -> Result<TreeField, TreeFieldError> {
+ let height = tree_heights.len();
+ if height == 0 {
+ return Result::Err(TreeFieldError::Empty);
+ }
+
+ let width = tree_heights[0].len();
+ let mut row_height_fields = Vec::new();
+ for row in &tree_heights {
+ if row.len() != width {
+ return Result::Err(TreeFieldError::NotRectangular);
+ }
+ row_height_fields.push(HeightField::new(&row));
+ }
+
+ let mut column_height_fields = Vec::new();
+ for column_i in 0..width {
+ let mut column = Vec::new();
+ for row in &tree_heights {
+ column.push(row[column_i].clone());
+ }
+ column_height_fields.push(HeightField::new(&column));
+ }
+
+ Ok(TreeField {
+ width,
+ height,
+ tree_heights,
+ row_height_fields,
+ column_height_fields,
+ })
+ }
+
+ fn tree_is_visible(&self, x: usize, y: usize) -> bool {
+ let tree_height = self.tree_heights[y][x];
+ let (left_height, right_height) = self.row_height_fields[y].heights_at(x);
+ let (up_height, down_height) = self.column_height_fields[x].heights_at(y);
+ tree_height > left_height
+ || tree_height > right_height
+ || tree_height > up_height
+ || tree_height > down_height
+ }
+
+ fn count_visible_trees(&self) -> usize {
+ let mut count = 0;
+ for y in 0..self.height {
+ for x in 0..self.width {
+ if self.tree_is_visible(x, y) {
+ count += 1;
+ }
+ }
+ }
+ count
+ }
+
+ fn tree_scenic_score(&self, x: usize, y: usize) -> usize {
+ let tree_height = self.tree_heights[y][x];
+ let (left_height, right_height) = self.row_height_fields[y].heights_at(x);
+ let left_score = if tree_height > left_height {
+ x
+ } else {
+ let mut count = 0;
+ let mut shift_x = x;
+ while shift_x > 0 {
+ count += 1;
+ shift_x -= 1;
+ let height = self.tree_heights[y][shift_x];
+ if height >= tree_height {
+ break;
+ }
+ }
+ count
+ };
+ let right_score = if tree_height > right_height {
+ self.width - 1 - x
+ } else {
+ let mut count = 0;
+ let mut shift_x = x;
+ while shift_x < self.width - 1 {
+ count += 1;
+ shift_x += 1;
+ let height = self.tree_heights[y][shift_x];
+ if height >= tree_height {
+ break;
+ }
+ }
+ count
+ };
+
+ let (up_height, down_height) = self.column_height_fields[x].heights_at(y);
+ let up_score = if tree_height > up_height {
+ y
+ } else {
+ let mut count = 0;
+ let mut shift_y = y;
+ while shift_y > 0 {
+ count += 1;
+ shift_y -= 1;
+ let height = self.tree_heights[shift_y][x];
+ if height >= tree_height {
+ break;
+ }
+ }
+ count
+ };
+ let down_score = if tree_height > down_height {
+ self.height - 1 - y
+ } else {
+ let mut count = 0;
+ let mut shift_y = y;
+ while shift_y < self.height - 1 {
+ count += 1;
+ shift_y += 1;
+ let height = self.tree_heights[shift_y][x];
+ if height >= tree_height {
+ break;
+ }
+ }
+ count
+ };
+
+ left_score * right_score * up_score * down_score
+ }
+
+ fn find_best_scenic_score(&self) -> usize {
+ let mut max = 0;
+ for y in 0..self.height {
+ for x in 0..self.width {
+ let next = self.tree_scenic_score(x, y);
+ max = max.max(next);
+ }
+ }
+ max
+ }
+}
+
+impl HeightField {
+ fn new(row: &[i8]) -> HeightField {
+ let mut left_breaking_points = Vec::new();
+ let mut last_height = -1;
+ for (i, height) in row.iter().enumerate() {
+ if height > &last_height {
+ last_height = height.clone();
+ left_breaking_points.push((i.clone(), height.clone()));
+ }
+ }
+
+ let mut right_breaking_points = Vec::new();
+ last_height = -1;
+ for (i, height) in row.iter().enumerate().rev() {
+ if height > &last_height {
+ last_height = height.clone();
+ right_breaking_points.push((i.clone(), height.clone()));
+ }
+ }
+
+ HeightField {
+ left_breaking_points,
+ right_breaking_points,
+ }
+ }
+
+ fn heights_at(&self, i: usize) -> (i8, i8) {
+ let left = self
+ .left_breaking_points
+ .iter()
+ .filter(|(left_i, _)| left_i < &i)
+ .map(|(_, height)| height.clone())
+ .last()
+ .unwrap_or(-1);
+
+ let right = self
+ .right_breaking_points
+ .iter()
+ .filter(|(right_i, _)| right_i > &i)
+ .map(|(_, height)| height.clone())
+ .last()
+ .unwrap_or(-1);
+
+ (left, right)
+ }
+}
diff --git a/2022/src/bin/day_9.rs b/2022/src/bin/day_9.rs
new file mode 100644
index 0000000..ccbb66a
--- /dev/null
+++ b/2022/src/bin/day_9.rs
@@ -0,0 +1,134 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{i32, line_ending},
+ combinator::{map, value},
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{collections::BTreeSet, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_9.txt")?;
+ let movements = Movements::parser(&input).unwrap().1;
+
+ let mut game_board_part_1 = GameBoard::new(2);
+ for instruction in &movements.0 {
+ game_board_part_1.step(instruction);
+ }
+ dbg!(game_board_part_1.tail_visited.len());
+
+ let mut game_board_part_2 = GameBoard::new(10);
+ for instruction in &movements.0 {
+ game_board_part_2.step(instruction);
+ }
+ dbg!(game_board_part_2.tail_visited.len());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct Movements(Vec<Instruction>);
+
+#[derive(Debug)]
+struct Instruction {
+ direction: Direction,
+ distance: i32,
+}
+
+#[derive(Debug, Clone, Copy)]
+enum Direction {
+ Down,
+ Up,
+ Left,
+ Right,
+}
+
+impl Movements {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, Instruction::parser), Movements)(input)
+ }
+}
+
+impl Instruction {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((Direction::parser, tag(" "), i32)),
+ |(direction, _, distance)| Instruction {
+ direction,
+ distance,
+ },
+ )(input)
+ }
+}
+
+impl Direction {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(Direction::Down, tag("D")),
+ value(Direction::Up, tag("U")),
+ value(Direction::Left, tag("L")),
+ value(Direction::Right, tag("R")),
+ ))(input)
+ }
+}
+
+#[derive(Debug)]
+struct GameBoard {
+ rope: Vec<Position>,
+ tail_visited: BTreeSet<Position>,
+}
+
+#[derive(Default, Debug, PartialEq, Eq, PartialOrd, Ord, Clone)]
+struct Position {
+ x: i32,
+ y: i32,
+}
+
+impl GameBoard {
+ fn new(length: usize) -> GameBoard {
+ let mut tail_visited = BTreeSet::new();
+ tail_visited.insert(Position::default());
+ GameBoard {
+ rope: vec![Position::default(); length],
+ tail_visited,
+ }
+ }
+
+ fn step(&mut self, instruction: &Instruction) {
+ for _ in 0..instruction.distance {
+ match instruction.direction {
+ Direction::Down => self.rope[0].y -= 1,
+ Direction::Up => self.rope[0].y += 1,
+ Direction::Left => self.rope[0].x -= 1,
+ Direction::Right => self.rope[0].x += 1,
+ };
+
+ for tail_i in 1..self.rope.len() {
+ let head_i = tail_i - 1;
+ let head = self.rope[head_i].clone();
+ let tail = &mut self.rope[tail_i];
+
+ let tail_must_move = (head.x - tail.x).abs() > 1 || (head.y - tail.y).abs() > 1;
+
+ if tail_must_move {
+ if head.x > tail.x {
+ tail.x += 1;
+ } else if head.x < tail.x {
+ tail.x -= 1;
+ }
+
+ if head.y > tail.y {
+ tail.y += 1;
+ } else if head.y < tail.y {
+ tail.y -= 1;
+ }
+ }
+ }
+
+ self.tail_visited
+ .insert(self.rope[self.rope.len() - 1].clone());
+ }
+ }
+}
diff --git a/2022/src/lib.rs b/2022/src/lib.rs
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/2022/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/2023/Cargo.lock b/2023/Cargo.lock
new file mode 100644
index 0000000..68aa4c4
--- /dev/null
+++ b/2023/Cargo.lock
@@ -0,0 +1,247 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aoc2023"
+version = "0.1.0"
+dependencies = [
+ "nalgebra",
+ "nom",
+ "thiserror",
+]
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+
+[[package]]
+name = "matrixmultiply"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2"
+dependencies = [
+ "autocfg",
+ "rawpointer",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "nalgebra"
+version = "0.32.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa"
+dependencies = [
+ "approx",
+ "matrixmultiply",
+ "nalgebra-macros",
+ "num-complex",
+ "num-rational",
+ "num-traits",
+ "simba",
+ "typenum",
+]
+
+[[package]]
+name = "nalgebra-macros"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rawpointer"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
+
+[[package]]
+name = "safe_arch"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "simba"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae"
+dependencies = [
+ "approx",
+ "num-complex",
+ "num-traits",
+ "paste",
+ "wide",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "wide"
+version = "0.7.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242"
+dependencies = [
+ "bytemuck",
+ "safe_arch",
+]
diff --git a/2023/Cargo.toml b/2023/Cargo.toml
new file mode 100644
index 0000000..20b625c
--- /dev/null
+++ b/2023/Cargo.toml
@@ -0,0 +1,13 @@
+[package]
+name = "aoc2023"
+version = "0.1.0"
+authors = ["Justin Wernick <justin@worthe-it.co.za>"]
+edition = "2021"
+
+[dependencies]
+nalgebra = "0.32.3"
+nom = "7.1.3"
+thiserror = "1.0.50"
+
+[profile.release]
+debug = true
diff --git a/2023/inputs/.gitkeep b/2023/inputs/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/2023/inputs/.gitkeep
diff --git a/2023/readme.org b/2023/readme.org
new file mode 100644
index 0000000..9d68a8d
--- /dev/null
+++ b/2023/readme.org
@@ -0,0 +1,5 @@
+* Advent of Code 2023
+
+Just going to have some fun and solve the cool puzzles this year. No special
+requirements. Probably am going to keep using NOM for parsing inputs because
+that worked well in previous years.
diff --git a/2023/src/bin/day_1.rs b/2023/src/bin/day_1.rs
new file mode 100644
index 0000000..fe3ef1e
--- /dev/null
+++ b/2023/src/bin/day_1.rs
@@ -0,0 +1,81 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{alpha1, anychar, line_ending, none_of, one_of},
+ combinator::{map, map_opt, map_res, opt, peek, value},
+ multi::{many1, separated_list1},
+ sequence::pair,
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_1.txt")?;
+ let parsed = CalibrationInput::parser(&input).unwrap().1;
+ dbg!(parsed.calibration_sum());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct CalibrationInput(Vec<CalibrationValue>);
+
+#[derive(Debug)]
+struct CalibrationValue(u32);
+
+#[derive(Debug)]
+struct CalibrationDigit(u8);
+
+impl CalibrationInput {
+ fn calibration_sum(&self) -> u32 {
+ self.0.iter().map(|d| d.0).sum()
+ }
+
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, CalibrationValue::parser),
+ CalibrationInput,
+ )(input)
+ }
+}
+
+impl CalibrationValue {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ many1(pair(
+ opt(peek(CalibrationDigit::parser)), // peek is to not consume the 'one' in 'twone'
+ none_of("\n"), // this is just to advance the input
+ )),
+ |digits| {
+ let digits: Vec<u32> = digits
+ .into_iter()
+ .filter_map(|(d, _)| d.map(|d| d.0 as u32))
+ .collect();
+ CalibrationValue(digits[0] * 10 + digits[digits.len() - 1])
+ },
+ )(input)
+ }
+}
+
+impl CalibrationDigit {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ alt((
+ map(one_of("0123456789"), |c| {
+ c.to_string().parse::<u8>().unwrap()
+ }),
+ value(0, tag("zero")),
+ value(1, tag("one")),
+ value(2, tag("two")),
+ value(3, tag("three")),
+ value(4, tag("four")),
+ value(5, tag("five")),
+ value(6, tag("six")),
+ value(7, tag("seven")),
+ value(8, tag("eight")),
+ value(9, tag("nine")),
+ )),
+ CalibrationDigit,
+ )(input)
+ }
+}
diff --git a/2023/src/bin/day_10.rs b/2023/src/bin/day_10.rs
new file mode 100644
index 0000000..84d6327
--- /dev/null
+++ b/2023/src/bin/day_10.rs
@@ -0,0 +1,321 @@
+use nom::{
+ branch::alt,
+ character::complete::{char as nom_char, line_ending},
+ combinator::{map, value},
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_10.txt")?;
+ let parsed = Maze::parser(&input).unwrap().1;
+ dbg!(&parsed.find_furthest_point_in_loop());
+ dbg!(&parsed.count_blocks_inside_the_pipe_loop());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct Maze(Vec<Vec<Pipe>>);
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+enum Pipe {
+ Start,
+ Nothing,
+ DownLeft,
+ DownRight,
+ DownUp,
+ LeftRight,
+ UpLeft,
+ UpRight,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+enum Direction {
+ Up,
+ Down,
+ Left,
+ Right,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+struct Point {
+ x: usize,
+ y: usize,
+}
+
+#[derive(Debug)]
+struct FloodFillMaze(Vec<Vec<Option<FloodFill>>>);
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+enum FloodFill {
+ Outside,
+ Inside,
+ Pipe,
+}
+
+impl Maze {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, many1(Pipe::parser)), Maze)(input)
+ }
+
+ fn find_furthest_point_in_loop(&self) -> usize {
+ self.measure_loop_size() / 2
+ }
+
+ fn measure_loop_size(&self) -> usize {
+ let mut position = self.find_start();
+ let mut facing = self.find_start_facing(position);
+ position = position.go(facing);
+ let mut distance = 1;
+
+ while self.at(position) != Pipe::Start {
+ let current_pipe = self.at(position);
+ facing = current_pipe.exit_facing(facing).unwrap();
+ position = position.go(facing);
+ distance += 1;
+ }
+
+ distance
+ }
+
+ fn count_blocks_inside_the_pipe_loop(&self) -> usize {
+ let mut flood_fill_maze = FloodFillMaze::init_for_maze(&self);
+
+ let start_position = self.find_start();
+
+ {
+ // fill the pipe loop
+ let mut position = start_position;
+ flood_fill_maze.fill(position, FloodFill::Pipe);
+
+ let mut facing = self.find_start_facing(position);
+ position = position.go(facing);
+
+ while self.at(position) != Pipe::Start {
+ flood_fill_maze.fill(position, FloodFill::Pipe);
+ facing = self.at(position).exit_facing(facing).unwrap();
+ position = position.go(facing);
+ }
+ }
+
+ for y in 0..self.0.len() {
+ for x in 0..self.0[y].len() {
+ if flood_fill_maze.0[y][x].is_none() {
+ let trace_range = if y <= start_position.y {
+ 0..y
+ } else {
+ y + 1..self.0.len()
+ };
+ let mut outside = true;
+ for trace_y in trace_range {
+ if flood_fill_maze.0[trace_y][x] == Some(FloodFill::Pipe)
+ && self
+ .at(Point { x, y: trace_y })
+ .crossed_by_vertical_hanging_right()
+ {
+ outside = !outside;
+ }
+ }
+ flood_fill_maze.fill(
+ Point { x, y },
+ if outside {
+ FloodFill::Outside
+ } else {
+ FloodFill::Inside
+ },
+ );
+ }
+ }
+ }
+
+ flood_fill_maze
+ .0
+ .iter()
+ .flat_map(|row| row.iter())
+ .filter(|x| **x == Some(FloodFill::Inside))
+ .count()
+ }
+
+ fn at(&self, p: Point) -> Pipe {
+ self.0[p.y][p.x]
+ }
+
+ fn find_start(&self) -> Point {
+ for (y, row) in self.0.iter().enumerate() {
+ for (x, pipe) in row.iter().enumerate() {
+ if *pipe == Pipe::Start {
+ return Point { x, y };
+ }
+ }
+ }
+ panic!("No Start!");
+ }
+
+ fn find_start_facing(&self, start: Point) -> Direction {
+ if start.y > 0 && self.at(start.up()).connections().contains(&Direction::Down) {
+ Direction::Up
+ } else if start.y < self.0.len() - 1
+ && self.at(start.down()).connections().contains(&Direction::Up)
+ {
+ Direction::Down
+ } else if start.x > 0
+ && self
+ .at(start.left())
+ .connections()
+ .contains(&Direction::Right)
+ {
+ Direction::Left
+ } else if start.x < self.0[start.y].len() - 1
+ && self
+ .at(start.right())
+ .connections()
+ .contains(&Direction::Left)
+ {
+ Direction::Right
+ } else {
+ panic!()
+ }
+ }
+}
+
+impl Pipe {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ use Pipe::*;
+
+ alt((
+ value(Start, nom_char('S')),
+ value(Nothing, nom_char('.')),
+ value(DownLeft, nom_char('7')),
+ value(DownRight, nom_char('F')),
+ value(DownUp, nom_char('|')),
+ value(LeftRight, nom_char('-')),
+ value(UpLeft, nom_char('J')),
+ value(UpRight, nom_char('L')),
+ ))(input)
+ }
+
+ fn connections(&self) -> Vec<Direction> {
+ use Direction::*;
+
+ match self {
+ Pipe::Start => vec![],
+ Pipe::Nothing => vec![],
+ Pipe::DownLeft => vec![Down, Left],
+ Pipe::DownRight => vec![Down, Right],
+ Pipe::DownUp => vec![Down, Up],
+ Pipe::LeftRight => vec![Left, Right],
+ Pipe::UpLeft => vec![Up, Left],
+ Pipe::UpRight => vec![Up, Right],
+ }
+ }
+
+ fn exit_facing(&self, facing: Direction) -> Option<Direction> {
+ use Direction::*;
+
+ match self {
+ Pipe::Start => None,
+ Pipe::Nothing => None,
+ Pipe::DownLeft => match facing {
+ Up => Some(Left),
+ Right => Some(Down),
+ _ => None,
+ },
+ Pipe::DownRight => match facing {
+ Up => Some(Right),
+ Left => Some(Down),
+ _ => None,
+ },
+ Pipe::DownUp => match facing {
+ Up => Some(Up),
+ Down => Some(Down),
+ _ => None,
+ },
+ Pipe::LeftRight => match facing {
+ Left => Some(Left),
+ Right => Some(Right),
+ _ => None,
+ },
+ Pipe::UpLeft => match facing {
+ Down => Some(Left),
+ Right => Some(Up),
+ _ => None,
+ },
+ Pipe::UpRight => match facing {
+ Down => Some(Right),
+ Left => Some(Up),
+ _ => None,
+ },
+ }
+ }
+
+ fn crossed_by_vertical_hanging_right(&self) -> bool {
+ match self {
+ Pipe::Start => panic!("Undefined crossing over the start"),
+ Pipe::Nothing => false,
+ Pipe::DownLeft => false,
+ Pipe::DownRight => true,
+ Pipe::DownUp => false,
+ Pipe::LeftRight => true,
+ Pipe::UpLeft => false,
+ Pipe::UpRight => true,
+ }
+ }
+}
+
+impl Point {
+ fn up(&self) -> Point {
+ Point {
+ x: self.x,
+ y: self.y - 1,
+ }
+ }
+
+ fn down(&self) -> Point {
+ Point {
+ x: self.x,
+ y: self.y + 1,
+ }
+ }
+
+ fn left(&self) -> Point {
+ Point {
+ x: self.x - 1,
+ y: self.y,
+ }
+ }
+
+ fn right(&self) -> Point {
+ Point {
+ x: self.x + 1,
+ y: self.y,
+ }
+ }
+
+ fn go(&self, facing: Direction) -> Point {
+ match facing {
+ Direction::Up => self.up(),
+ Direction::Down => self.down(),
+ Direction::Left => self.left(),
+ Direction::Right => self.right(),
+ }
+ }
+}
+
+impl FloodFillMaze {
+ fn init_for_maze(maze: &Maze) -> FloodFillMaze {
+ FloodFillMaze(
+ maze.0
+ .iter()
+ .map(|row| row.iter().map(|_| None).collect())
+ .collect(),
+ )
+ }
+
+ fn fill(&mut self, point: Point, fill: FloodFill) {
+ if self.0[point.y][point.x].is_none() {
+ self.0[point.y][point.x] = Some(fill);
+ }
+ }
+}
diff --git a/2023/src/bin/day_11.rs b/2023/src/bin/day_11.rs
new file mode 100644
index 0000000..f78417e
--- /dev/null
+++ b/2023/src/bin/day_11.rs
@@ -0,0 +1,111 @@
+use nom::{
+ branch::alt,
+ character::complete::{char, line_ending},
+ combinator::{map, value},
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_11.txt")?;
+ let galaxy_map = GalaxyMap::parser(&input).unwrap().1;
+
+ let part_1_expanded_galaxy_map = galaxy_map.expand(2);
+ dbg!(&part_1_expanded_galaxy_map.distance_sum_between_galaxies());
+
+ let part_2_expanded_galaxy_map = galaxy_map.expand(1_000_000);
+ dbg!(&part_2_expanded_galaxy_map.distance_sum_between_galaxies());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct GalaxyMap(Vec<Point>);
+
+#[derive(Debug, Clone)]
+struct Point {
+ x: usize,
+ y: usize,
+}
+
+#[derive(Debug, Clone)]
+enum Token {
+ Space,
+ Galaxy,
+}
+
+impl GalaxyMap {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(
+ line_ending,
+ many1(alt((
+ value(Token::Space, char('.')),
+ value(Token::Galaxy, char('#')),
+ ))),
+ ),
+ |rows| {
+ GalaxyMap(
+ rows.into_iter()
+ .enumerate()
+ .flat_map(move |(y, row)| {
+ row.into_iter()
+ .enumerate()
+ .filter_map(move |(x, token)| match token {
+ Token::Space => None,
+ Token::Galaxy => Some(Point { x, y }),
+ })
+ })
+ .collect(),
+ )
+ },
+ )(input)
+ }
+
+ fn expand(&self, expansion_factor: usize) -> GalaxyMap {
+ let max_y = self.0.iter().map(|p| p.y).max().unwrap();
+ let empty_rows: Vec<usize> = (0..max_y)
+ .filter(|y| !self.0.iter().any(|p| p.y == *y))
+ .collect();
+
+ let max_x = self.0.iter().map(|p| p.x).max().unwrap();
+ let empty_cols: Vec<usize> = (0..max_x)
+ .filter(|x| !self.0.iter().any(|p| p.x == *x))
+ .collect();
+
+ let extra_spaces = expansion_factor - 1;
+
+ GalaxyMap(
+ self.0
+ .iter()
+ .map(|p| Point {
+ x: p.x
+ + empty_cols.iter().filter(|empty_x| **empty_x < p.x).count()
+ * extra_spaces,
+ y: p.y
+ + empty_rows.iter().filter(|empty_y| **empty_y < p.y).count()
+ * extra_spaces,
+ })
+ .collect(),
+ )
+ }
+
+ fn distance_sum_between_galaxies(&self) -> usize {
+ let mut sum = 0;
+
+ for i in 0..self.0.len() {
+ for j in i + 1..self.0.len() {
+ sum += self.0[i].distance_to(&self.0[j]);
+ }
+ }
+
+ sum
+ }
+}
+
+impl Point {
+ fn distance_to(&self, other: &Point) -> usize {
+ other.x.abs_diff(self.x) + other.y.abs_diff(self.y)
+ }
+}
diff --git a/2023/src/bin/day_12.rs b/2023/src/bin/day_12.rs
new file mode 100644
index 0000000..e60b450
--- /dev/null
+++ b/2023/src/bin/day_12.rs
@@ -0,0 +1,323 @@
+use nom::{
+ branch::alt,
+ character::complete::{char, line_ending, space1, u32},
+ combinator::{map, value},
+ multi::{many1, many1_count, separated_list1},
+ sequence::separated_pair,
+ IResult,
+};
+use std::{collections::BTreeMap, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_12.txt")?;
+ let small = SpringField::parser(&input).unwrap().1;
+ dbg!(&small.possibilities_sum());
+
+ let large = small.expand();
+ dbg!(&large.possibilities_sum());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct SpringField(Vec<SpringRow>);
+
+#[derive(Debug, Clone)]
+struct SpringRow {
+ springs: Vec<Spring>,
+ check: Vec<u32>,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+enum Spring {
+ Good,
+ Bad(usize),
+ Unknown,
+}
+
+impl SpringField {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, SpringRow::parser), SpringField)(input)
+ }
+
+ fn possibilities_sum(&self) -> usize {
+ self.0.iter().map(|r| r.possibilities_count()).sum()
+ }
+
+ fn expand(&self) -> SpringField {
+ SpringField(self.0.iter().map(|r| r.expand()).collect())
+ }
+}
+
+impl SpringRow {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_pair(
+ many1(Spring::parser),
+ space1,
+ separated_list1(char(','), u32),
+ ),
+ |(springs, check)| SpringRow { springs, check },
+ )(input)
+ }
+
+ fn expand(&self) -> SpringRow {
+ let mut expanded = SpringRow {
+ springs: Vec::new(),
+ check: Vec::new(),
+ };
+
+ for _ in 0..5 {
+ expanded.springs.append(&mut self.springs.clone());
+ expanded.springs.push(Spring::Unknown);
+ expanded.check.append(&mut self.check.clone());
+ }
+
+ // should only have the extra Unknown between, not at the very end.
+ expanded.springs.pop();
+
+ expanded
+ }
+
+ fn possibilities_count(&self) -> usize {
+ let optimized = self.optimize_tail();
+ optimized.possibilities_count_inner(0, 0, &mut BTreeMap::new())
+ }
+
+ fn optimize_tail(&self) -> SpringRow {
+ let mut optimized = self.clone();
+ while optimized.springs.len() > 0 && optimized.check.len() > 0 {
+ match optimized.springs[optimized.springs.len() - 1] {
+ Spring::Good => {
+ optimized.springs.pop();
+ }
+ Spring::Bad(s) if s > optimized.check[optimized.check.len() - 1] as usize => {
+ panic!("Unsolvable row");
+ }
+ Spring::Bad(s) if s <= optimized.check[optimized.check.len() - 1] as usize => {
+ optimized.trim_bad_suffix();
+ }
+ Spring::Bad(_) => unreachable!(),
+ Spring::Unknown => {
+ break;
+ }
+ }
+ }
+
+ optimized
+ }
+
+ fn trim_bad_suffix(&mut self) {
+ let last_check = self.check.pop().expect("No trailing check to pop") as usize;
+ let mut check_i = 0;
+ while check_i < last_check {
+ match self
+ .springs
+ .pop()
+ .expect("Ran out of springs while optimizing suffix!")
+ {
+ Spring::Unknown => {
+ check_i += 1;
+ }
+ Spring::Bad(inc) => {
+ check_i += inc;
+ }
+ Spring::Good => {
+ panic!("Found a good spring in the middle of what must be a bad spring range");
+ }
+ }
+ }
+ let is_boundary = self.springs.len() == 0;
+ let has_extra_good_or_unknown_to_trim =
+ !is_boundary && !matches!(self.springs.last(), Some(Spring::Bad(_)));
+
+ let valid_suffix =
+ check_i == last_check && (is_boundary || has_extra_good_or_unknown_to_trim);
+ if !valid_suffix {
+ panic!("The suffix had another invalid bad section immediately!");
+ }
+
+ if has_extra_good_or_unknown_to_trim {
+ self.springs.pop();
+ }
+ }
+
+ fn possibilities_count_inner(
+ &self,
+ springs_offset: usize,
+ check_offset: usize,
+ cache: &mut BTreeMap<(usize, usize), usize>,
+ ) -> usize {
+ if let Some(cached) = cache.get(&(springs_offset, check_offset)) {
+ return *cached;
+ };
+
+ let (springs_offset, check_offset) = match self.optimize_head(springs_offset, check_offset)
+ {
+ Some(optimized) => optimized,
+ None => {
+ return 0;
+ }
+ };
+
+ let springs = &self.springs[springs_offset..];
+ let check = &self.check[check_offset..];
+
+ if check.len() == 1 && springs.iter().all(|s| !matches!(s, Spring::Bad(_))) {
+ let mut contigous_unknowns = Vec::new();
+ let mut next_contiguous_unknown = 0;
+ let mut is_in_unknown = false;
+ for spring in springs.iter() {
+ match spring {
+ Spring::Unknown => {
+ next_contiguous_unknown += 1;
+ is_in_unknown = true;
+ }
+ Spring::Good => {
+ if is_in_unknown {
+ contigous_unknowns.push(next_contiguous_unknown);
+ next_contiguous_unknown = 0;
+ is_in_unknown = false;
+ }
+ }
+ Spring::Bad(_) => unreachable!(),
+ }
+ }
+ if is_in_unknown {
+ contigous_unknowns.push(next_contiguous_unknown);
+ }
+
+ return contigous_unknowns
+ .iter()
+ .map(|region| {
+ if *region >= check[0] as usize {
+ region - check[0] as usize + 1
+ } else {
+ 0
+ }
+ })
+ .sum();
+ }
+
+ if check.len() == 0 {
+ if springs.iter().any(|s| matches!(s, Spring::Bad(_))) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+
+ let valid_prefix_possibilities_count =
+ if let Some((without_prefix_springs_offset, without_prefix_check_offset)) =
+ self.trim_bad_prefix(springs_offset, check_offset)
+ {
+ self.possibilities_count_inner(
+ without_prefix_springs_offset,
+ without_prefix_check_offset,
+ cache,
+ )
+ } else {
+ 0
+ };
+
+ let non_prefix_possibilities_count =
+ self.possibilities_count_inner(springs_offset + 1, check_offset, cache);
+
+ let total_possibilities = valid_prefix_possibilities_count + non_prefix_possibilities_count;
+
+ cache.insert((springs_offset, check_offset), total_possibilities);
+
+ total_possibilities
+ }
+
+ fn optimize_head(
+ &self,
+ mut springs_offset: usize,
+ mut check_offset: usize,
+ ) -> Option<(usize, usize)> {
+ while springs_offset < self.springs.len() && check_offset < self.check.len() {
+ match self.springs[springs_offset] {
+ Spring::Good => {
+ springs_offset += 1;
+ }
+ Spring::Bad(s) if s > self.check[check_offset] as usize => {
+ return None;
+ }
+ Spring::Bad(s) if s <= self.check[check_offset] as usize => {
+ match self.trim_bad_prefix(springs_offset, check_offset) {
+ Some((new_springs, new_check)) => {
+ springs_offset = new_springs;
+ check_offset = new_check;
+ }
+ None => return None,
+ };
+ }
+ Spring::Bad(_) => unreachable!(),
+ Spring::Unknown => {
+ break;
+ }
+ }
+ }
+
+ if springs_offset == self.springs.len() && check_offset != self.check.len() {
+ None
+ } else {
+ Some((springs_offset, check_offset))
+ }
+ }
+
+ fn trim_bad_prefix(
+ &self,
+ springs_offset: usize,
+ check_offset: usize,
+ ) -> Option<(usize, usize)> {
+ let first_check = self.check[check_offset] as usize;
+ let mut check_i = 0;
+ let mut springs_i = springs_offset;
+ while check_i < first_check {
+ if springs_i >= self.springs.len() {
+ return None;
+ }
+
+ match self.springs[springs_i] {
+ Spring::Unknown => {
+ check_i += 1;
+ }
+ Spring::Bad(inc) => {
+ check_i += inc;
+ }
+ Spring::Good => {
+ return None;
+ }
+ }
+ springs_i += 1;
+ }
+
+ let is_boundary = springs_i == self.springs.len();
+ let has_extra_good_or_unknown_to_trim =
+ !is_boundary && !matches!(self.springs[springs_i], Spring::Bad(_));
+ let valid_prefix =
+ check_i == first_check && (is_boundary || has_extra_good_or_unknown_to_trim);
+
+ if valid_prefix {
+ let new_springs_i = if has_extra_good_or_unknown_to_trim {
+ springs_i + 1
+ } else {
+ springs_i
+ };
+ Some((new_springs_i, check_offset + 1))
+ } else {
+ None
+ }
+ }
+}
+
+impl Spring {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(Spring::Good, many1_count(char('.'))),
+ map(many1_count(char('#')), Spring::Bad),
+ value(Spring::Unknown, char('?')),
+ ))(input)
+ }
+}
diff --git a/2023/src/bin/day_13.rs b/2023/src/bin/day_13.rs
new file mode 100644
index 0000000..ad97602
--- /dev/null
+++ b/2023/src/bin/day_13.rs
@@ -0,0 +1,82 @@
+use nom::{
+ character::complete::{line_ending, one_of},
+ combinator::map,
+ multi::{many1, separated_list1},
+ sequence::pair,
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_13.txt")?;
+ let parsed = ManyMaps::parser(&input).unwrap().1;
+ dbg!(&parsed.reflection_score_sum(0));
+ dbg!(&parsed.reflection_score_sum(1));
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct ManyMaps(Vec<Map>);
+
+#[derive(Debug)]
+struct Map {
+ rows: Vec<String>,
+ cols: Vec<String>,
+}
+
+impl ManyMaps {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(pair(line_ending, line_ending), Map::parser),
+ ManyMaps,
+ )(input)
+ }
+
+ fn reflection_score_sum(&self, expected_smudge_count: usize) -> usize {
+ self.0
+ .iter()
+ .map(|m| m.reflection_score(expected_smudge_count))
+ .sum()
+ }
+}
+
+impl Map {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, many1(one_of(".#"))), |rows| {
+ Map {
+ rows: rows
+ .iter()
+ .map(|char_array| char_array.iter().collect::<String>())
+ .collect(),
+ cols: (0..rows[0].len())
+ .map(|i| rows.iter().map(|row| row[i]).collect::<String>())
+ .collect(),
+ }
+ })(input)
+ }
+
+ fn reflection_score(&self, expected_smudge_count: usize) -> usize {
+ reflection_i(&self.cols, expected_smudge_count)
+ .or_else(|| reflection_i(&self.rows, expected_smudge_count).map(|y| y * 100))
+ .expect("No reflection!")
+ }
+}
+
+fn reflection_i(rows: &[String], expected_smudge_count: usize) -> Option<usize> {
+ for i in 1..rows.len() {
+ let mut smudge_count = 0;
+ for d in 1..=(i.min(rows.len() - i)) {
+ smudge_count += rows[i - d]
+ .chars()
+ .zip(rows[i + d - 1].chars())
+ .filter(|(a, b)| a != b)
+ .count();
+ }
+ let is_reflection = smudge_count == expected_smudge_count;
+ if is_reflection {
+ return Some(i);
+ }
+ }
+ None
+}
diff --git a/2023/src/bin/day_14.rs b/2023/src/bin/day_14.rs
new file mode 100644
index 0000000..e975f41
--- /dev/null
+++ b/2023/src/bin/day_14.rs
@@ -0,0 +1,145 @@
+use nom::{
+ branch::alt,
+ character::complete::{char, line_ending},
+ combinator::{map, value},
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::{collections::BTreeMap, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_14.txt")?;
+ let rock_field = RockField::parser(&input).unwrap().1;
+ {
+ let mut north_rock_field = rock_field.clone();
+ north_rock_field.tilt_north();
+ dbg!(&north_rock_field.north_load());
+ }
+
+ {
+ let mut spin_rock_field = rock_field.clone();
+ let mut last_east = BTreeMap::new();
+ let mut i = 0;
+ let target = 1000000000;
+ while i < target {
+ spin_rock_field.tilt_north();
+ spin_rock_field.tilt_west();
+ spin_rock_field.tilt_south();
+ spin_rock_field.tilt_east();
+ if let Some(last_i) = last_east.get(&spin_rock_field) {
+ let interval = i - last_i;
+ // relying on integer division to round down here, want to add
+ // interval as many times as possible without going over target.
+ i += ((target - i) / interval) * interval;
+ } else {
+ last_east.insert(spin_rock_field.clone(), i);
+ }
+ i += 1;
+ }
+ dbg!(&spin_rock_field.north_load());
+ }
+
+ Ok(())
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
+struct RockField(Vec<Vec<Rock>>);
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
+enum Rock {
+ Rounded,
+ Cubed,
+ None,
+}
+
+impl RockField {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, many1(Rock::parser)), RockField)(input)
+ }
+
+ fn tilt_north(&mut self) {
+ for y in 0..self.0.len() {
+ for x in 0..self.0[y].len() {
+ if self.0[y][x] == Rock::Rounded {
+ let new_y = (0..y)
+ .rev()
+ .take_while(|new_y| self.0[*new_y][x] == Rock::None)
+ .last();
+ if let Some(new_y) = new_y {
+ self.0[new_y][x] = Rock::Rounded;
+ self.0[y][x] = Rock::None;
+ }
+ }
+ }
+ }
+ }
+
+ fn tilt_west(&mut self) {
+ for x in 0..self.0[0].len() {
+ for y in 0..self.0.len() {
+ if self.0[y][x] == Rock::Rounded {
+ let new_x = (0..x)
+ .rev()
+ .take_while(|new_x| self.0[y][*new_x] == Rock::None)
+ .last();
+ if let Some(new_x) = new_x {
+ self.0[y][new_x] = Rock::Rounded;
+ self.0[y][x] = Rock::None;
+ }
+ }
+ }
+ }
+ }
+
+ fn tilt_south(&mut self) {
+ for y in (0..self.0.len()).rev() {
+ for x in 0..self.0[y].len() {
+ if self.0[y][x] == Rock::Rounded {
+ let new_y = (y + 1..self.0.len())
+ .take_while(|new_y| self.0[*new_y][x] == Rock::None)
+ .last();
+ if let Some(new_y) = new_y {
+ self.0[new_y][x] = Rock::Rounded;
+ self.0[y][x] = Rock::None;
+ }
+ }
+ }
+ }
+ }
+
+ fn tilt_east(&mut self) {
+ for x in (0..self.0[0].len()).rev() {
+ for y in 0..self.0.len() {
+ if self.0[y][x] == Rock::Rounded {
+ let new_x = (x + 1..self.0[0].len())
+ .take_while(|new_x| self.0[y][*new_x] == Rock::None)
+ .last();
+ if let Some(new_x) = new_x {
+ self.0[y][new_x] = Rock::Rounded;
+ self.0[y][x] = Rock::None;
+ }
+ }
+ }
+ }
+ }
+
+ fn north_load(&self) -> usize {
+ self.0
+ .iter()
+ .enumerate()
+ .map(|(y, row)| {
+ row.iter().filter(|r| **r == Rock::Rounded).count() * (self.0.len() - y)
+ })
+ .sum()
+ }
+}
+
+impl Rock {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(Rock::Rounded, char('O')),
+ value(Rock::Cubed, char('#')),
+ value(Rock::None, char('.')),
+ ))(input)
+ }
+}
diff --git a/2023/src/bin/day_15.rs b/2023/src/bin/day_15.rs
new file mode 100644
index 0000000..429e7f4
--- /dev/null
+++ b/2023/src/bin/day_15.rs
@@ -0,0 +1,153 @@
+use std::fs;
+
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{alpha1, u32},
+ combinator::{consumed, map, value},
+ multi::separated_list1,
+ sequence::{pair, preceded},
+ IResult,
+};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_15.txt")?;
+ let parsed = InitializationInstructions::parser(&input).unwrap().1;
+ dbg!(&parsed.hash_sum());
+ dbg!(&parsed.final_focusing_power());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct InitializationInstructions(Vec<Instruction>);
+
+#[derive(Debug)]
+struct Instruction {
+ instruction: String,
+ label: String,
+ action: Action,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+enum Action {
+ Remove,
+ Insert(u32),
+}
+
+#[derive(Default, Debug, Clone)]
+struct LensBox {
+ lenses: Vec<Lens>,
+}
+
+#[derive(Debug, Clone)]
+struct Lens {
+ label: String,
+ power: u32,
+}
+
+impl InitializationInstructions {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(tag(","), Instruction::parser),
+ InitializationInstructions,
+ )(input)
+ }
+
+ fn hash_sum(&self) -> usize {
+ self.0.iter().map(|i| hash(&i.instruction)).sum()
+ }
+
+ fn final_focusing_power(&self) -> u32 {
+ let mut boxes = vec![LensBox::default(); 256];
+ for instruction in &self.0 {
+ let box_index = hash(&instruction.label);
+ let lens_box = &mut boxes[box_index];
+ match instruction.action {
+ Action::Remove => {
+ lens_box
+ .lenses
+ .retain(|lens| lens.label != instruction.label);
+ }
+ Action::Insert(power) => {
+ let existing_position = lens_box
+ .lenses
+ .iter()
+ .position(|lens| lens.label == instruction.label);
+ match existing_position {
+ Some(position) => {
+ lens_box.lenses[position].power = power;
+ }
+ None => {
+ lens_box.lenses.push(Lens {
+ label: instruction.label.clone(),
+ power,
+ });
+ }
+ }
+ }
+ }
+ }
+
+ boxes
+ .into_iter()
+ .enumerate()
+ .flat_map(|(box_index, lens_box)| {
+ lens_box
+ .lenses
+ .into_iter()
+ .enumerate()
+ .map(move |(lens_index, lens)| {
+ (box_index as u32 + 1) * (lens_index as u32 + 1) * lens.power
+ })
+ })
+ .sum()
+ }
+}
+
+impl Instruction {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ consumed(pair(alpha1, Action::parser)),
+ |(instruction, (label, action))| Instruction {
+ instruction: instruction.to_owned(),
+ label: label.to_owned(),
+ action,
+ },
+ )(input)
+ }
+}
+
+impl Action {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(Action::Remove, tag("-")),
+ map(preceded(tag("="), u32), Action::Insert),
+ ))(input)
+ }
+}
+
+fn hash(input: &str) -> usize {
+ let mut result: usize = 0;
+ for c in input.bytes() {
+ result += Into::<usize>::into(c);
+ result *= 17;
+ result %= 256;
+ }
+ result
+}
+
+#[test]
+fn examples() {
+ assert_eq!(hash("rn=1"), 30);
+ assert_eq!(hash("cm-"), 253);
+ assert_eq!(hash("qp=3"), 97);
+ assert_eq!(hash("cm=2"), 47);
+ assert_eq!(hash("qp-"), 14);
+ assert_eq!(hash("pc=4"), 180);
+ assert_eq!(hash("ot=9"), 9);
+ assert_eq!(hash("ab=5"), 197);
+ assert_eq!(hash("pc-"), 48);
+ assert_eq!(hash("pc=6"), 214);
+ assert_eq!(hash("ot=7"), 231);
+}
diff --git a/2023/src/bin/day_16.rs b/2023/src/bin/day_16.rs
new file mode 100644
index 0000000..2c02d92
--- /dev/null
+++ b/2023/src/bin/day_16.rs
@@ -0,0 +1,209 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::line_ending,
+ combinator::{map, value},
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::{collections::BTreeSet, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_16.txt")?;
+ let device = LightDevice::parser(&input).unwrap().1;
+ {
+ let mut part_1_device = device.clone();
+ part_1_device.energize(Point { x: 0, y: 0 }, Direction::East);
+ dbg!(&part_1_device.count_energized_blocks());
+ }
+
+ dbg!(device.find_max_energization());
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct LightDevice {
+ mirrors: Vec<Vec<LightBlock>>,
+ light: Vec<Vec<BTreeSet<Direction>>>,
+ bounds: Point,
+}
+
+#[derive(Debug, Clone, Copy)]
+enum LightBlock {
+ MirrorForwardLeaning, // /
+ MirrorBackwardsLeaning, // \
+ Empty, // .
+ HorizontalSplitter, // -
+ VerticalSplitter, // |
+}
+
+#[derive(Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq)]
+enum Direction {
+ North,
+ South,
+ East,
+ West,
+}
+
+#[derive(Debug, Clone)]
+struct Point {
+ x: usize,
+ y: usize,
+}
+
+impl LightDevice {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, many1(LightBlock::parser)),
+ |mirrors| LightDevice {
+ bounds: Point {
+ x: mirrors[0].len(),
+ y: mirrors.len(),
+ },
+ light: mirrors
+ .iter()
+ .map(|mirror_row| vec![BTreeSet::new(); mirror_row.len()])
+ .collect(),
+ mirrors,
+ },
+ )(input)
+ }
+
+ fn energize(&mut self, start_point: Point, start_direction: Direction) {
+ let mut frontier = vec![(start_point.clone(), start_direction.clone())];
+ self.light[start_point.y][start_point.x].insert(start_direction);
+
+ while let Some((front_light_p, front_light_dir)) = frontier.pop() {
+ let mirror = self.mirrors[front_light_p.y][front_light_p.x];
+ let new_dirs: Vec<Direction> = match (mirror, front_light_dir) {
+ (LightBlock::MirrorForwardLeaning, Direction::North) => vec![Direction::East],
+ (LightBlock::MirrorForwardLeaning, Direction::South) => vec![Direction::West],
+ (LightBlock::MirrorForwardLeaning, Direction::East) => vec![Direction::North],
+ (LightBlock::MirrorForwardLeaning, Direction::West) => vec![Direction::South],
+ (LightBlock::MirrorBackwardsLeaning, Direction::North) => vec![Direction::West],
+ (LightBlock::MirrorBackwardsLeaning, Direction::South) => vec![Direction::East],
+ (LightBlock::MirrorBackwardsLeaning, Direction::East) => vec![Direction::South],
+ (LightBlock::MirrorBackwardsLeaning, Direction::West) => vec![Direction::North],
+ (LightBlock::HorizontalSplitter, Direction::North)
+ | (LightBlock::HorizontalSplitter, Direction::South) => {
+ vec![Direction::East, Direction::West]
+ }
+ (LightBlock::VerticalSplitter, Direction::East)
+ | (LightBlock::VerticalSplitter, Direction::West) => {
+ vec![Direction::North, Direction::South]
+ }
+ (LightBlock::Empty, dir)
+ | (LightBlock::HorizontalSplitter, dir)
+ | (LightBlock::VerticalSplitter, dir) => vec![dir],
+ };
+
+ let new_lights: Vec<(Point, Direction)> = new_dirs
+ .into_iter()
+ .filter_map(|dir| front_light_p.go(dir, &self.bounds).map(|p| (p, dir)))
+ .collect();
+
+ for (new_light_p, new_light_dir) in new_lights {
+ if !self.light[new_light_p.y][new_light_p.x].contains(&new_light_dir) {
+ self.light[new_light_p.y][new_light_p.x].insert(new_light_dir);
+ frontier.push((new_light_p, new_light_dir));
+ }
+ }
+ }
+ }
+
+ fn count_energized_blocks(&self) -> usize {
+ self.light
+ .iter()
+ .flat_map(|row| row.iter())
+ .filter(|set| set.len() > 0)
+ .count()
+ }
+
+ fn find_max_energization(&self) -> usize {
+ (0..self.bounds.x)
+ .flat_map(|x| {
+ vec![
+ (Point { x, y: 0 }, Direction::South),
+ (
+ Point {
+ x,
+ y: self.bounds.y - 1,
+ },
+ Direction::North,
+ ),
+ ]
+ })
+ .chain((0..self.bounds.y).flat_map(|y| {
+ vec![
+ (Point { x: 0, y }, Direction::East),
+ (
+ Point {
+ x: self.bounds.x - 1,
+ y,
+ },
+ Direction::West,
+ ),
+ ]
+ }))
+ .map(|(start_p, start_d)| {
+ let mut energizer = self.clone();
+ energizer.energize(start_p, start_d);
+ energizer.count_energized_blocks()
+ })
+ .max()
+ .unwrap()
+ }
+}
+
+impl LightBlock {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(LightBlock::MirrorForwardLeaning, tag("/")),
+ value(LightBlock::MirrorBackwardsLeaning, tag("\\")),
+ value(LightBlock::Empty, tag(".")),
+ value(LightBlock::HorizontalSplitter, tag("-")),
+ value(LightBlock::VerticalSplitter, tag("|")),
+ ))(input)
+ }
+}
+
+impl Point {
+ fn up(&self) -> Point {
+ Point {
+ x: self.x,
+ y: self.y - 1,
+ }
+ }
+
+ fn down(&self) -> Point {
+ Point {
+ x: self.x,
+ y: self.y + 1,
+ }
+ }
+
+ fn left(&self) -> Point {
+ Point {
+ x: self.x - 1,
+ y: self.y,
+ }
+ }
+
+ fn right(&self) -> Point {
+ Point {
+ x: self.x + 1,
+ y: self.y,
+ }
+ }
+
+ fn go(&self, dir: Direction, bounds: &Point) -> Option<Point> {
+ match dir {
+ Direction::North if self.y > 0 => Some(self.up()),
+ Direction::South if self.y < bounds.y - 1 => Some(self.down()),
+ Direction::West if self.x > 0 => Some(self.left()),
+ Direction::East if self.x < bounds.x - 1 => Some(self.right()),
+ _ => None,
+ }
+ }
+}
diff --git a/2023/src/bin/day_17.rs b/2023/src/bin/day_17.rs
new file mode 100644
index 0000000..8d839e5
--- /dev/null
+++ b/2023/src/bin/day_17.rs
@@ -0,0 +1,144 @@
+use nalgebra::{DMatrix, Point2, Unit, Vector2};
+use nom::{
+ character::complete::{line_ending, satisfy},
+ combinator::{map, map_res},
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::{collections::HashSet, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_17.txt")?;
+ let parsed = HeatlossMap::parser(&input).unwrap().1;
+ dbg!(&parsed.find_shortest_heatloss_path(false));
+ dbg!(&parsed.find_shortest_heatloss_path(true));
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct HeatlossMap(DMatrix<u32>);
+
+#[derive(Debug, Hash, PartialEq, Eq, Clone)]
+struct Position {
+ pos: Point2<isize>,
+ facing: Unit<Vector2<isize>>,
+ duration_with_facing: usize,
+}
+
+impl HeatlossMap {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(
+ line_ending,
+ many1(map_res(satisfy(|c| c.is_digit(10)), |d| {
+ d.to_string().parse::<u32>()
+ })),
+ ),
+ |digits_vec| {
+ HeatlossMap(DMatrix::from_iterator(
+ digits_vec.len(),
+ digits_vec[0].len(),
+ digits_vec.into_iter().flat_map(|row| row.into_iter()),
+ ))
+ },
+ )(input)
+ }
+
+ fn find_shortest_heatloss_path(&self, is_ultra_crucible: bool) -> u32 {
+ let start = Position {
+ pos: Point2::new(0, 0),
+ facing: Vector2::x_axis(),
+ duration_with_facing: 0,
+ };
+ let end_pos = self.end();
+
+ let mut frontier = vec![(0, start.clone())];
+ let mut visited = HashSet::new();
+ visited.insert(start);
+
+ let mut distance_to_end = None;
+ while distance_to_end.is_none() && frontier.len() > 0 {
+ // shortest distance is now at the end
+ frontier
+ .sort_unstable_by(|(distance_a, _), (distance_b, _)| distance_b.cmp(distance_a));
+ let (front_distance, front_position) = frontier.pop().unwrap();
+
+ let mut next_points: Vec<Position> = Vec::new();
+
+ if !is_ultra_crucible || front_position.duration_with_facing >= 4 {
+ let facing_l = rotate_left(&front_position.facing);
+ let pos_l = front_position.pos + *facing_l;
+ next_points.push(Position {
+ pos: pos_l,
+ facing: facing_l,
+ duration_with_facing: 1,
+ });
+
+ let facing_r = rotate_right(&front_position.facing);
+ let pos_r = front_position.pos + *facing_r;
+ next_points.push(Position {
+ pos: pos_r,
+ facing: facing_r,
+ duration_with_facing: 1,
+ });
+ }
+
+ if (is_ultra_crucible && front_position.duration_with_facing < 10)
+ || (!is_ultra_crucible && front_position.duration_with_facing < 3)
+ {
+ let pos = front_position.pos + *front_position.facing;
+ next_points.push(Position {
+ pos,
+ facing: front_position.facing.clone(),
+ duration_with_facing: front_position.duration_with_facing + 1,
+ });
+ }
+
+ for next_point in next_points {
+ if let Some(step_distance) = self.get(&next_point.pos) {
+ if !visited.contains(&next_point) {
+ visited.insert(next_point.clone());
+
+ let distance = front_distance + step_distance;
+
+ if next_point.pos == end_pos {
+ if is_ultra_crucible {
+ if next_point.duration_with_facing >= 4 {
+ distance_to_end = Some(distance);
+ }
+ } else {
+ distance_to_end = Some(distance);
+ }
+ }
+ frontier.push((distance, next_point));
+ }
+ }
+ }
+ }
+
+ distance_to_end.unwrap()
+ }
+
+ fn end(&self) -> Point2<isize> {
+ Point2::new(self.0.ncols() as isize - 1, self.0.nrows() as isize - 1)
+ }
+
+ fn get(&self, pos: &Point2<isize>) -> Option<u32> {
+ let x: Option<usize> = pos.x.try_into().ok();
+ let y: Option<usize> = pos.y.try_into().ok();
+
+ match (x, y) {
+ (Some(x), Some(y)) => self.0.get((x, y)).copied(),
+ _ => None,
+ }
+ }
+}
+
+fn rotate_left(facing: &Unit<Vector2<isize>>) -> Unit<Vector2<isize>> {
+ Unit::new_unchecked(Vector2::new(-facing.y, facing.x))
+}
+
+fn rotate_right(facing: &Unit<Vector2<isize>>) -> Unit<Vector2<isize>> {
+ Unit::new_unchecked(Vector2::new(facing.y, -facing.x))
+}
diff --git a/2023/src/bin/day_18.rs b/2023/src/bin/day_18.rs
new file mode 100644
index 0000000..a4c9355
--- /dev/null
+++ b/2023/src/bin/day_18.rs
@@ -0,0 +1,214 @@
+use nalgebra::{Point2, Vector2};
+use nom::{
+ branch::alt,
+ bytes::complete::{tag, take},
+ character::complete::{char, hex_digit1, line_ending, space1, u32},
+ combinator::{map, map_res, value},
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{collections::HashMap, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_18.txt")?;
+ let parsed = Instructions::parser(&input).unwrap().1;
+ let mut fill_map = parsed.draw_map();
+ fill_map.derive_inside_outside();
+ dbg!(&fill_map.count_inside());
+ dbg!(&parsed.find_internal_area());
+
+ let hex_parsed = Instructions::hex_parser(&input).unwrap().1;
+ dbg!(&hex_parsed.find_internal_area());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct Instructions(Vec<Instruction>);
+
+#[derive(Debug)]
+struct Instruction {
+ direction: Vector2<i64>,
+ distance: u32,
+}
+
+#[derive(Debug)]
+struct FloodFillMap {
+ map: HashMap<Point2<i64>, Fill>,
+ top_left: Point2<i64>,
+ bottom_right: Point2<i64>,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+enum Fill {
+ Outside,
+ Inside,
+}
+
+impl Instructions {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, Instruction::parser),
+ Instructions,
+ )(input)
+ }
+
+ fn hex_parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, Instruction::hex_parser),
+ Instructions,
+ )(input)
+ }
+
+ fn draw_map(&self) -> FloodFillMap {
+ let mut trench = HashMap::new();
+ let mut current = Point2::new(0, 0);
+ for instruction in &self.0 {
+ for _ in 0..instruction.distance {
+ current += instruction.direction;
+ trench.insert(current.clone(), Fill::Inside);
+ }
+ }
+
+ FloodFillMap::new(trench)
+ }
+
+ fn find_internal_area(&self) -> i64 {
+ let mut current_point = Point2::new(0, 0);
+ let mut points = vec![current_point];
+
+ let mut perimeter = 0;
+ for instruction in &self.0 {
+ let next_point = current_point + instruction.direction * instruction.distance as i64;
+ points.push(next_point);
+ current_point = next_point;
+ perimeter += instruction.distance as i64;
+ }
+
+ let mut area = 0;
+ for point in points.windows(2) {
+ if let &[p1, p2] = point {
+ area += p1.x * p2.y;
+ area -= p1.y * p2.x;
+ } else {
+ unreachable!()
+ }
+ }
+
+ (perimeter + 2 + area) / 2
+ }
+}
+
+impl Instruction {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ dir_parser,
+ space1,
+ u32,
+ space1,
+ tag("(#"),
+ hex_digit1,
+ tag(")"),
+ )),
+ |(direction, _, distance, _, _, _, _)| Instruction {
+ direction,
+ distance,
+ },
+ )(input)
+ }
+
+ fn hex_parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ dir_parser,
+ space1,
+ u32,
+ space1,
+ tag("(#"),
+ map_res(take(5usize), |hex| u32::from_str_radix(hex, 16)),
+ hex_dir_parser,
+ tag(")"),
+ )),
+ |(_, _, _, _, _, distance, direction, _)| Instruction {
+ direction,
+ distance,
+ },
+ )(input)
+ }
+}
+
+fn dir_parser(input: &str) -> IResult<&str, Vector2<i64>> {
+ alt((
+ value(Vector2::new(0, -1), char('U')),
+ value(Vector2::new(0, 1), char('D')),
+ value(Vector2::new(-1, 0), char('L')),
+ value(Vector2::new(1, 0), char('R')),
+ ))(input)
+}
+
+fn hex_dir_parser(input: &str) -> IResult<&str, Vector2<i64>> {
+ alt((
+ value(Vector2::new(0, -1), char('3')),
+ value(Vector2::new(0, 1), char('1')),
+ value(Vector2::new(-1, 0), char('2')),
+ value(Vector2::new(1, 0), char('0')),
+ ))(input)
+}
+
+impl FloodFillMap {
+ fn new(map: HashMap<Point2<i64>, Fill>) -> FloodFillMap {
+ let top_left = Point2::new(
+ map.keys().map(|key| key.x).min().unwrap() - 1,
+ map.keys().map(|key| key.y).min().unwrap() - 1,
+ );
+
+ let bottom_right = Point2::new(
+ map.keys().map(|key| key.x).max().unwrap() + 1,
+ map.keys().map(|key| key.y).max().unwrap() + 1,
+ );
+
+ FloodFillMap {
+ map,
+ top_left,
+ bottom_right,
+ }
+ }
+
+ fn derive_inside_outside(&mut self) {
+ self.flood_fill(self.top_left.clone(), &Fill::Outside);
+ for y in self.top_left.y..=self.bottom_right.y {
+ for x in self.top_left.x..=self.bottom_right.x {
+ let current = Point2::new(x, y);
+ self.map.entry(current).or_insert(Fill::Inside);
+ }
+ }
+ }
+
+ fn count_inside(&self) -> usize {
+ self.map
+ .values()
+ .filter(|fill| **fill == Fill::Inside)
+ .count()
+ }
+
+ fn flood_fill(&mut self, start: Point2<i64>, fill: &Fill) {
+ let mut to_fill = vec![start];
+
+ while let Some(next) = to_fill.pop() {
+ if next.y >= self.top_left.y
+ && next.x >= self.top_left.x
+ && next.y <= self.bottom_right.y
+ && next.x <= self.bottom_right.x
+ && !self.map.contains_key(&next)
+ {
+ self.map.insert(next.clone(), fill.clone());
+ to_fill.push(next + Vector2::new(-1, 0));
+ to_fill.push(next + Vector2::new(1, 0));
+ to_fill.push(next + Vector2::new(0, -1));
+ to_fill.push(next + Vector2::new(0, 1));
+ }
+ }
+ }
+}
diff --git a/2023/src/bin/day_19.rs b/2023/src/bin/day_19.rs
new file mode 100644
index 0000000..8a7dabd
--- /dev/null
+++ b/2023/src/bin/day_19.rs
@@ -0,0 +1,348 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{alpha1, line_ending, u32 as nom_u32},
+ combinator::{map, value},
+ multi::separated_list1,
+ sequence::{pair, preceded, terminated, tuple},
+ IResult,
+};
+use std::{collections::BTreeMap, fs, ops::Range};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_19.txt")?;
+ let parsed = PartSortingMess::parser(&input).unwrap().1;
+ dbg!(&parsed.accepted_part_ratings());
+ dbg!(&parsed.count_distinct_combinations());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct PartSortingMess {
+ workflows: BTreeMap<String, Workflow>,
+ parts: Vec<Part>,
+}
+
+#[derive(Debug)]
+struct Workflow {
+ id: String,
+ conditions: Vec<WorkflowStep>,
+ if_none_match: WorkflowOutcome,
+}
+
+#[derive(Debug)]
+struct WorkflowStep {
+ field: PartField,
+ condition: WorkflowCondition,
+ result: WorkflowOutcome,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+enum PartField {
+ X,
+ M,
+ A,
+ S,
+}
+
+#[derive(Debug)]
+enum WorkflowCondition {
+ LessThan(u32),
+ GreaterThan(u32),
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+enum WorkflowOutcome {
+ Accept,
+ Reject,
+ Defer(String),
+}
+
+#[derive(Debug)]
+struct Part {
+ x: u32,
+ m: u32,
+ a: u32,
+ s: u32,
+}
+
+#[derive(Debug, Clone)]
+struct PartRange {
+ x: Range<u32>,
+ m: Range<u32>,
+ a: Range<u32>,
+ s: Range<u32>,
+}
+
+impl PartSortingMess {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ separated_list1(line_ending, Workflow::parser),
+ line_ending,
+ line_ending,
+ separated_list1(line_ending, Part::parser),
+ )),
+ |(workflows, _, _, parts)| PartSortingMess {
+ workflows: workflows
+ .into_iter()
+ .map(|workflow| (workflow.id.clone(), workflow))
+ .collect(),
+ parts,
+ },
+ )(input)
+ }
+
+ fn accepted_part_ratings(&self) -> u32 {
+ let mut rating_sum = 0;
+
+ for part in &self.parts {
+ let mut outcome = WorkflowOutcome::Defer("in".into());
+ while let Some(workflow_id) = outcome.next_workflow_id() {
+ let workflow = self.workflows.get(&workflow_id).unwrap();
+ outcome = workflow.process(part);
+ }
+
+ if outcome == WorkflowOutcome::Accept {
+ rating_sum += part.rating();
+ }
+ }
+
+ rating_sum
+ }
+
+ fn count_distinct_combinations(&self) -> u64 {
+ self.count_combinations_for_workflow(
+ "in",
+ &PartRange {
+ x: 1..4001,
+ m: 1..4001,
+ a: 1..4001,
+ s: 1..4001,
+ },
+ )
+
+ // potential workflow optimizations to make the stack not so deep
+ // - eliminate conditions in a workflow where everything has the same outcome
+ // - inline workflows with a single outcome
+ // - eliminate unreachable branches like a<10, a<5
+ }
+
+ fn count_combinations_for_workflow(&self, workflow_id: &str, part_range: &PartRange) -> u64 {
+ if part_range.combinations() == 0 {
+ 0
+ } else {
+ let mut combinations = 0;
+
+ let workflow = self.workflows.get(workflow_id).unwrap();
+ let mut remaining_range = part_range.clone();
+ for condition in &workflow.conditions {
+ let matched_range: PartRange;
+ (matched_range, remaining_range) =
+ remaining_range.partition(&condition.field, &condition.condition);
+ combinations += match &condition.result {
+ WorkflowOutcome::Accept => matched_range.combinations(),
+ WorkflowOutcome::Reject => 0,
+ WorkflowOutcome::Defer(next_workflow_id) => {
+ self.count_combinations_for_workflow(&next_workflow_id, &matched_range)
+ }
+ };
+ }
+ combinations += match &workflow.if_none_match {
+ WorkflowOutcome::Accept => remaining_range.combinations(),
+ WorkflowOutcome::Reject => 0,
+ WorkflowOutcome::Defer(next_workflow_id) => {
+ self.count_combinations_for_workflow(&next_workflow_id, &remaining_range)
+ }
+ };
+
+ combinations
+ }
+ }
+}
+
+impl Workflow {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ pair(
+ alpha1,
+ preceded(
+ tag("{"),
+ terminated(
+ pair(
+ separated_list1(tag(","), WorkflowStep::parser),
+ preceded(tag(","), WorkflowOutcome::parser),
+ ),
+ tag("}"),
+ ),
+ ),
+ ),
+ |(id, (conditions, if_none_match)): (&str, _)| Workflow {
+ id: id.to_owned(),
+ conditions,
+ if_none_match,
+ },
+ )(input)
+ }
+
+ fn process(&self, part: &Part) -> WorkflowOutcome {
+ for condition in &self.conditions {
+ let val = part.get(&condition.field);
+ if condition.condition.matches(val) {
+ return condition.result.clone();
+ }
+ }
+ self.if_none_match.clone()
+ }
+}
+
+impl WorkflowStep {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ PartField::parser,
+ WorkflowCondition::parser,
+ preceded(tag(":"), WorkflowOutcome::parser),
+ )),
+ |(field, condition, result)| WorkflowStep {
+ field,
+ condition,
+ result,
+ },
+ )(input)
+ }
+}
+
+impl PartField {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(PartField::X, tag("x")),
+ value(PartField::M, tag("m")),
+ value(PartField::A, tag("a")),
+ value(PartField::S, tag("s")),
+ ))(input)
+ }
+}
+
+impl WorkflowCondition {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ map(preceded(tag("<"), nom_u32), WorkflowCondition::LessThan),
+ map(preceded(tag(">"), nom_u32), WorkflowCondition::GreaterThan),
+ ))(input)
+ }
+
+ fn matches(&self, val: u32) -> bool {
+ match self {
+ WorkflowCondition::LessThan(me) => val < *me,
+ WorkflowCondition::GreaterThan(me) => val > *me,
+ }
+ }
+
+ fn partition(&self, val: &Range<u32>) -> (Range<u32>, Range<u32>) {
+ match self {
+ WorkflowCondition::LessThan(me) => (val.start..*me, *me..val.end),
+ WorkflowCondition::GreaterThan(me) => (*me + 1..val.end, val.start..*me + 1),
+ }
+ }
+}
+
+impl WorkflowOutcome {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(WorkflowOutcome::Accept, tag("A")),
+ value(WorkflowOutcome::Reject, tag("R")),
+ map(alpha1, |id: &str| WorkflowOutcome::Defer(id.to_owned())),
+ ))(input)
+ }
+
+ fn next_workflow_id(&self) -> Option<String> {
+ match self {
+ WorkflowOutcome::Accept | WorkflowOutcome::Reject => None,
+ WorkflowOutcome::Defer(id) => Some(id.clone()),
+ }
+ }
+}
+
+impl Part {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ tag("{x="),
+ nom_u32,
+ tag(",m="),
+ nom_u32,
+ tag(",a="),
+ nom_u32,
+ tag(",s="),
+ nom_u32,
+ tag("}"),
+ )),
+ |(_, x, _, m, _, a, _, s, _)| Part { x, m, a, s },
+ )(input)
+ }
+
+ fn rating(&self) -> u32 {
+ self.x + self.m + self.a + self.s
+ }
+
+ fn get(&self, field: &PartField) -> u32 {
+ match field {
+ PartField::X => self.x,
+ PartField::M => self.m,
+ PartField::A => self.a,
+ PartField::S => self.s,
+ }
+ }
+}
+
+impl PartRange {
+ fn combinations(&self) -> u64 {
+ if self.x.is_empty() || self.m.is_empty() || self.a.is_empty() || self.s.is_empty() {
+ 0
+ } else {
+ (self.x.end - self.x.start) as u64
+ * (self.m.end - self.m.start) as u64
+ * (self.a.end - self.a.start) as u64
+ * (self.s.end - self.s.start) as u64
+ }
+ }
+
+ fn partition(
+ &self,
+ field: &PartField,
+ condition: &WorkflowCondition,
+ ) -> (PartRange, PartRange) {
+ let (matched_range, unmatched_range) = match field {
+ PartField::X => condition.partition(&self.x),
+ PartField::M => condition.partition(&self.m),
+ PartField::A => condition.partition(&self.a),
+ PartField::S => condition.partition(&self.s),
+ };
+
+ let mut matched_part_range = self.clone();
+ let mut unmatched_part_range = self.clone();
+
+ match field {
+ PartField::X => {
+ matched_part_range.x = matched_range;
+ unmatched_part_range.x = unmatched_range;
+ }
+ PartField::M => {
+ matched_part_range.m = matched_range;
+ unmatched_part_range.m = unmatched_range;
+ }
+ PartField::A => {
+ matched_part_range.a = matched_range;
+ unmatched_part_range.a = unmatched_range;
+ }
+ PartField::S => {
+ matched_part_range.s = matched_range;
+ unmatched_part_range.s = unmatched_range;
+ }
+ };
+
+ (matched_part_range, unmatched_part_range)
+ }
+}
diff --git a/2023/src/bin/day_2.rs b/2023/src/bin/day_2.rs
new file mode 100644
index 0000000..6f19c1d
--- /dev/null
+++ b/2023/src/bin/day_2.rs
@@ -0,0 +1,109 @@
+use nom::{
+ bytes::complete::tag,
+ character::complete::{alpha1, line_ending, u32 as nom_u32},
+ combinator::map,
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_2.txt")?;
+ let parsed = Games::parser(&input).unwrap().1;
+ let max_pull = Pull {
+ red: 12,
+ green: 13,
+ blue: 14,
+ };
+ dbg!(&parsed.valid_game_id_sum(&max_pull));
+ dbg!(&parsed.power_sum());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct Games(Vec<Game>);
+
+#[derive(Debug)]
+struct Game {
+ id: u32,
+ pulls: Vec<Pull>,
+}
+
+#[derive(Debug, Default)]
+struct Pull {
+ red: u32,
+ green: u32,
+ blue: u32,
+}
+
+impl Games {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, Game::parser), Games)(input)
+ }
+
+ fn valid_game_id_sum(&self, max_pull: &Pull) -> u32 {
+ self.0
+ .iter()
+ .filter(|game| game.is_valid(max_pull))
+ .map(|game| game.id)
+ .sum()
+ }
+
+ fn power_sum(&self) -> u32 {
+ self.0.iter().map(|game| game.min_pull().power()).sum()
+ }
+}
+
+impl Game {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ tag("Game "),
+ nom_u32,
+ tag(": "),
+ separated_list1(tag("; "), Pull::parser),
+ )),
+ |(_, id, _, pulls)| Game { id, pulls },
+ )(input)
+ }
+
+ fn is_valid(&self, max_pull: &Pull) -> bool {
+ self.pulls.iter().all(|pull| {
+ pull.red <= max_pull.red && pull.blue <= max_pull.blue && pull.green <= max_pull.green
+ })
+ }
+
+ fn min_pull(&self) -> Pull {
+ Pull {
+ red: self.pulls.iter().map(|p| p.red).max().unwrap_or(0),
+ blue: self.pulls.iter().map(|p| p.blue).max().unwrap_or(0),
+ green: self.pulls.iter().map(|p| p.green).max().unwrap_or(0),
+ }
+ }
+}
+
+impl Pull {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(tag(", "), tuple((nom_u32, tag(" "), alpha1))),
+ |stones| {
+ let mut pull = Pull::default();
+ for (quantity, _, colour) in stones {
+ match colour {
+ "red" => pull.red += quantity,
+ "blue" => pull.blue += quantity,
+ "green" => pull.green += quantity,
+ other => panic!("Unexpected colour, {}", other),
+ };
+ }
+ pull
+ },
+ )(input)
+ }
+
+ fn power(&self) -> u32 {
+ self.red * self.blue * self.green
+ }
+}
diff --git a/2023/src/bin/day_20.rs b/2023/src/bin/day_20.rs
new file mode 100644
index 0000000..f2e955f
--- /dev/null
+++ b/2023/src/bin/day_20.rs
@@ -0,0 +1,334 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{alpha1, line_ending},
+ combinator::{map, map_res, value},
+ multi::separated_list1,
+ sequence::{delimited, pair, separated_pair},
+ IResult,
+};
+use std::{collections::VecDeque, fs, num::ParseIntError};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_20.txt")?;
+ let circuit = Circuit::parser(&input).unwrap().1;
+
+ {
+ let mut circuit = circuit.clone();
+ let mut pulse_tracker = PulseCounter::default();
+
+ for _ in 0..1000 {
+ circuit.push_the_button(&mut pulse_tracker);
+ }
+ dbg!(pulse_tracker.low_pulse_count * pulse_tracker.high_pulse_count);
+ }
+
+ {
+ let mut circuit = circuit.clone();
+ let mut pulse_tracker = RxWatcher::new(
+ circuit
+ .modules
+ .iter()
+ .find(|m| m.id == ModuleId::rx())
+ .unwrap()
+ .index,
+ circuit
+ .modules
+ .iter()
+ .find(|m| m.id == ModuleId::from_short_alphanumeric("th").unwrap())
+ .unwrap()
+ .index,
+ );
+
+ while !pulse_tracker.rx_got_a_low_pulse {
+ pulse_tracker.i += 1;
+ circuit.push_the_button(&mut pulse_tracker);
+ }
+ dbg!(pulse_tracker.i, pulse_tracker);
+ }
+
+ Ok(())
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
+struct ModuleId(u32);
+
+#[derive(Debug, Clone)]
+struct Circuit {
+ modules: Vec<Module>,
+}
+
+#[derive(Debug, Clone)]
+struct ParsedModule {
+ id: ModuleId,
+ outs: Vec<ModuleId>,
+ state: ModuleState,
+}
+
+#[derive(Debug, Clone)]
+struct Module {
+ id: ModuleId,
+ index: usize,
+ outs: Vec<usize>,
+ state: ModuleState,
+}
+
+#[derive(Debug, Clone)]
+enum ModuleState {
+ FlipFlop(bool),
+ Conjunction(u64),
+ Sink,
+}
+
+#[derive(Debug, Default)]
+struct PulseCounter {
+ pulses: VecDeque<Pulse>,
+ low_pulse_count: u64,
+ high_pulse_count: u64,
+}
+
+#[derive(Debug)]
+struct RxWatcher {
+ pulses: VecDeque<Pulse>,
+ rx_module_index: usize,
+ rx_got_a_low_pulse: bool,
+ logging_module_index: usize,
+ i: usize,
+}
+
+impl RxWatcher {
+ fn new(rx_module_index: usize, logging_module_index: usize) -> Self {
+ RxWatcher {
+ pulses: VecDeque::default(),
+ rx_module_index,
+ rx_got_a_low_pulse: false,
+ logging_module_index,
+ i: 0,
+ }
+ }
+}
+
+#[derive(Debug)]
+struct Pulse {
+ state: bool,
+ input: usize,
+ output: usize,
+}
+
+impl Circuit {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ pair(
+ delimited(
+ tag("broadcaster -> "),
+ ParsedModule::outs_parser,
+ line_ending,
+ ),
+ separated_list1(line_ending, ParsedModule::parser),
+ ),
+ |(broadcaster, parsed_modules)| {
+ let sink_index = parsed_modules.len() + 1;
+ let rx_sink_index = parsed_modules.len() + 2;
+ let mut modules: Vec<Module> = parsed_modules
+ .iter()
+ .enumerate()
+ .map(|(index, module)| Module {
+ id: module.id,
+ index: index + 1,
+ outs: module
+ .outs
+ .iter()
+ .map(|out_id| {
+ parsed_modules
+ .iter()
+ .enumerate()
+ .find(|(_, out)| &out.id == out_id)
+ .map_or_else(
+ || {
+ if out_id == &ModuleId::rx() {
+ rx_sink_index
+ } else {
+ sink_index
+ }
+ },
+ |(index, _)| index + 1,
+ )
+ })
+ .collect(),
+ state: module.state.clone(),
+ })
+ .collect();
+ modules.push(Module {
+ id: ModuleId::sink(),
+ index: sink_index,
+ outs: Vec::new(),
+ state: ModuleState::Sink,
+ });
+ modules.push(Module {
+ id: ModuleId::rx(),
+ index: rx_sink_index,
+ outs: Vec::new(),
+ state: ModuleState::Sink,
+ });
+ modules.insert(
+ 0,
+ Module {
+ id: ModuleId::broadcaster(),
+ index: 0,
+ outs: broadcaster
+ .iter()
+ .map(|mid| modules.iter().find(|m| &m.id == mid).unwrap().index)
+ .collect(),
+ state: ModuleState::Sink,
+ },
+ );
+
+ let modules_snapshot = modules.clone();
+
+ for module in &mut modules {
+ if let ModuleState::Conjunction(ref mut conjunction_state) = module.state {
+ for input in &modules_snapshot {
+ if input.outs.contains(&module.index) {
+ let mask = !(1 << input.index);
+ *conjunction_state &= mask;
+ }
+ }
+ }
+ }
+
+ Circuit { modules }
+ },
+ )(input)
+ }
+
+ fn push_the_button(&mut self, pulse_tracker: &mut impl PulseTracker) {
+ pulse_tracker.button_pulse();
+ for b in &self.modules[0].outs {
+ pulse_tracker.push(Pulse {
+ state: false,
+ input: 0,
+ output: *b,
+ });
+ }
+
+ while let Some(pulse) = pulse_tracker.pop() {
+ let module = &mut self.modules[pulse.output];
+ let new_pulse_state: Option<bool> = match module.state {
+ ModuleState::FlipFlop(ref mut current) => {
+ if !pulse.state {
+ *current = !*current;
+ Some(*current)
+ } else {
+ None
+ }
+ }
+ ModuleState::Conjunction(ref mut current) => {
+ let mask = 1 << pulse.input;
+ if pulse.state {
+ *current |= mask;
+ } else {
+ *current &= !mask;
+ }
+ Some(*current != u64::MAX)
+ }
+ ModuleState::Sink => None,
+ };
+ if let Some(new_pulse_state) = new_pulse_state {
+ for out in &module.outs {
+ pulse_tracker.push(Pulse {
+ state: new_pulse_state,
+ input: module.index,
+ output: *out,
+ });
+ }
+ }
+ }
+ }
+}
+
+trait PulseTracker {
+ fn button_pulse(&mut self);
+ fn push(&mut self, pulse: Pulse);
+ fn pop(&mut self) -> Option<Pulse>;
+}
+
+impl PulseTracker for PulseCounter {
+ fn button_pulse(&mut self) {
+ self.low_pulse_count += 1;
+ }
+
+ fn push(&mut self, pulse: Pulse) {
+ if pulse.state {
+ self.high_pulse_count += 1;
+ } else {
+ self.low_pulse_count += 1;
+ }
+ self.pulses.push_back(pulse);
+ }
+
+ fn pop(&mut self) -> Option<Pulse> {
+ self.pulses.pop_front()
+ }
+}
+
+impl PulseTracker for RxWatcher {
+ fn button_pulse(&mut self) {}
+
+ fn push(&mut self, pulse: Pulse) {
+ if pulse.state && pulse.output == self.logging_module_index {
+ println!("{}: {} into {}", self.i, pulse.input, pulse.output);
+ }
+ if !pulse.state && pulse.output == self.rx_module_index {
+ self.rx_got_a_low_pulse = true;
+ }
+ self.pulses.push_back(pulse);
+ }
+
+ fn pop(&mut self) -> Option<Pulse> {
+ self.pulses.pop_front()
+ }
+}
+
+impl ParsedModule {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_pair(
+ pair(
+ alt((
+ value(ModuleState::FlipFlop(false), tag("%")),
+ value(ModuleState::Conjunction(u64::MAX), tag("&")),
+ )),
+ map_res(alpha1, |id: &str| ModuleId::from_short_alphanumeric(id)),
+ ),
+ tag(" -> "),
+ ParsedModule::outs_parser,
+ ),
+ |((state, id), outs)| ParsedModule { id, state, outs },
+ )(input)
+ }
+
+ fn outs_parser(input: &str) -> IResult<&str, Vec<ModuleId>> {
+ separated_list1(
+ tag(", "),
+ map_res(alpha1, |s: &str| ModuleId::from_short_alphanumeric(s)),
+ )(input)
+ }
+}
+
+impl ModuleId {
+ fn broadcaster() -> ModuleId {
+ ModuleId(0)
+ }
+
+ fn sink() -> ModuleId {
+ ModuleId(u32::MAX)
+ }
+
+ fn rx() -> ModuleId {
+ ModuleId::from_short_alphanumeric("rx").unwrap()
+ }
+
+ fn from_short_alphanumeric(s: &str) -> Result<ModuleId, ParseIntError> {
+ u32::from_str_radix(s, 36).map(ModuleId)
+ }
+}
diff --git a/2023/src/bin/day_21.rs b/2023/src/bin/day_21.rs
new file mode 100644
index 0000000..9ef273e
--- /dev/null
+++ b/2023/src/bin/day_21.rs
@@ -0,0 +1,395 @@
+use nom::{
+ branch::alt,
+ character::complete::{char, line_ending},
+ combinator::{map, value},
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::{collections::BTreeSet, fs, mem};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_21.txt")?;
+ let garden = WalledGarden::parser(&input).unwrap().1;
+
+ dbg!(garden.count_closed_walls_walkable_after_steps(garden.center(), 64));
+ dbg!(garden.count_open_walls_walkable_after_steps(26501365));
+
+ Ok(())
+}
+
+#[derive(Debug, Clone)]
+struct WalledGarden {
+ rocks: Vec<Vec<bool>>,
+ walkable_to: Vec<Vec<bool>>,
+ walkable_to_back: Vec<Vec<bool>>,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+enum WalledGardenState {
+ Empty,
+ Walkable,
+ Rock,
+}
+
+#[derive(Debug)]
+struct MaxWalkable {
+ odd_steps_max: usize,
+ even_steps_max: usize,
+ min_steps: usize,
+}
+
+#[derive(Debug)]
+struct EntryPoint {
+ entry: (usize, usize),
+ max: MaxWalkable,
+}
+
+impl WalledGarden {
+ fn new(tiles: Vec<Vec<WalledGardenState>>) -> WalledGarden {
+ let rocks: Vec<Vec<bool>> = tiles
+ .iter()
+ .map(|row| {
+ row.iter()
+ .map(|t| *t == WalledGardenState::Rock)
+ .collect::<Vec<bool>>()
+ })
+ .collect();
+ let walkable_to: Vec<Vec<bool>> = vec![vec![false; rocks[0].len()]; rocks.len()];
+
+ WalledGarden {
+ rocks,
+ walkable_to_back: walkable_to.clone(),
+ walkable_to: walkable_to.clone(),
+ }
+ }
+
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, many1(WalledGardenState::parser)),
+ WalledGarden::new,
+ )(input)
+ }
+
+ fn count_closed_walls_walkable_after_steps(
+ &self,
+ start: (usize, usize),
+ steps: usize,
+ ) -> usize {
+ let mut garden = self.clone();
+ garden.walkable_to[start.1][start.0] = true;
+ for _ in 0..steps {
+ garden.closed_walls_next_mut();
+ }
+ garden.count_walkable()
+ }
+
+ fn closed_walls_find_max_walkable(&self, start: (usize, usize)) -> MaxWalkable {
+ let mut odd_steps_max = 0;
+ let mut even_steps_max = 0;
+
+ let mut garden = self.clone();
+ garden.walkable_to[start.1][start.0] = true;
+
+ let mut unchanged_count = 0;
+ for i in 1.. {
+ garden.closed_walls_next_mut();
+
+ if i % 2 == 0 {
+ let new_even_max_countable = garden.count_walkable();
+ if even_steps_max == new_even_max_countable {
+ unchanged_count += 1;
+ } else {
+ even_steps_max = new_even_max_countable;
+ }
+ } else {
+ let new_odd_max_countable = garden.count_walkable();
+ if odd_steps_max == new_odd_max_countable {
+ unchanged_count += 1;
+ } else {
+ odd_steps_max = new_odd_max_countable;
+ }
+ }
+
+ if unchanged_count > 1 {
+ return MaxWalkable {
+ odd_steps_max,
+ even_steps_max,
+ min_steps: i,
+ };
+ }
+ }
+ unreachable!()
+ }
+
+ fn closed_walls_next_mut(&mut self) {
+ for (y, row) in self.walkable_to_back.iter_mut().enumerate() {
+ for (x, tile) in row.iter_mut().enumerate() {
+ if !self.rocks[y][x] {
+ *tile = (y > 0 && self.walkable_to[y - 1][x])
+ || (y < self.walkable_to.len() - 1 && self.walkable_to[y + 1][x])
+ || (x > 0 && self.walkable_to[y][x - 1])
+ || (x < self.walkable_to[y].len() - 1 && self.walkable_to[y][x + 1]);
+ }
+ }
+ }
+
+ mem::swap(&mut self.walkable_to, &mut self.walkable_to_back);
+ }
+
+ fn count_walkable(&self) -> usize {
+ self.walkable_to
+ .iter()
+ .flat_map(|row| row.iter())
+ .filter(|s| **s)
+ .count()
+ }
+
+ fn count_open_walls_walkable_after_steps(&self, steps: usize) -> usize {
+ // assumptions:
+ // - this field is square
+ // - there is a direct path from the starting point up, down, left, and right
+ // - there is a direct path around the edges
+ // - the start is in the center
+
+ let (size_x, size_y) = self.size();
+ let (center_x, center_y) = self.center();
+
+ let max_chunks_deviance = if (steps - center_y) % size_y > 0 {
+ 1 + (steps - center_y) / size_y
+ } else {
+ (steps - center_y) / size_y
+ };
+
+ let mut total_walkable = 0;
+
+ for quadrant in [
+ EntryPoint::new((0, 0), &self),
+ EntryPoint::new((size_x - 1, 0), &self),
+ EntryPoint::new((0, size_y - 1), &self),
+ EntryPoint::new((size_x - 1, size_y - 1), &self),
+ ] {
+ let steps_to_quadrant_alignment = center_x + center_y + 2;
+
+ let mut distance_from_edge = 0;
+ while max_chunks_deviance > distance_from_edge {
+ let steps_from_alignment_to_target_chunk =
+ (max_chunks_deviance - distance_from_edge - 1) * size_y;
+ if steps_to_quadrant_alignment + steps_from_alignment_to_target_chunk > steps {
+ distance_from_edge += 1;
+ continue;
+ }
+ let steps_in_chunk =
+ steps - steps_to_quadrant_alignment - steps_from_alignment_to_target_chunk;
+ if steps_in_chunk >= quadrant.max.min_steps {
+ break;
+ }
+
+ let walkable_per_chunk =
+ self.count_closed_walls_walkable_after_steps(quadrant.entry, steps_in_chunk);
+ total_walkable += walkable_per_chunk * (max_chunks_deviance - distance_from_edge);
+ distance_from_edge += 1;
+ }
+
+ let remaining_diagonals = max_chunks_deviance - distance_from_edge;
+ let even_length_diagonals = remaining_diagonals / 2;
+ let odd_length_diagonals = even_length_diagonals + remaining_diagonals % 2;
+
+ let even_length_diagonal_chunks = even_length_diagonals * (even_length_diagonals + 1);
+ let odd_length_diagonal_chunks = odd_length_diagonals.pow(2);
+
+ let odd_diagonal_has_even_steps_left = (steps - steps_to_quadrant_alignment) % 2 == 0;
+ total_walkable += if odd_diagonal_has_even_steps_left {
+ odd_length_diagonal_chunks * quadrant.max.even_steps_max
+ + even_length_diagonal_chunks * quadrant.max.odd_steps_max
+ } else {
+ even_length_diagonal_chunks * quadrant.max.even_steps_max
+ + odd_length_diagonal_chunks * quadrant.max.odd_steps_max
+ };
+ }
+
+ for cardinal in [
+ EntryPoint::new((0, center_y), &self),
+ EntryPoint::new((center_x, 0), &self),
+ EntryPoint::new((size_x - 1, center_y), &self),
+ EntryPoint::new((center_x, size_y - 1), &self),
+ ] {
+ let steps_to_cardinal_alignment = center_y + 1;
+
+ let mut distance_from_edge = 0;
+ while max_chunks_deviance > distance_from_edge {
+ let steps_from_alignment_to_target_chunk =
+ (max_chunks_deviance - distance_from_edge - 1) * size_y;
+ let steps_in_chunk =
+ steps - steps_to_cardinal_alignment - steps_from_alignment_to_target_chunk;
+ if steps_in_chunk >= cardinal.max.min_steps {
+ break;
+ }
+
+ let walkable_per_chunk =
+ self.count_closed_walls_walkable_after_steps(cardinal.entry, steps_in_chunk);
+ total_walkable += walkable_per_chunk;
+ distance_from_edge += 1;
+ }
+
+ let remaining_chunks = max_chunks_deviance - distance_from_edge;
+ let even_index_chunks = remaining_chunks / 2;
+ let odd_index_chunks = even_index_chunks + remaining_chunks % 2;
+
+ let odd_chunk_has_even_steps_left = (steps - steps_to_cardinal_alignment) % 2 == 0;
+ total_walkable += if odd_chunk_has_even_steps_left {
+ odd_index_chunks * cardinal.max.even_steps_max
+ + even_index_chunks * cardinal.max.odd_steps_max
+ } else {
+ even_index_chunks * cardinal.max.even_steps_max
+ + odd_index_chunks * cardinal.max.odd_steps_max
+ };
+ }
+
+ for center in [EntryPoint::new((center_x, center_y), &self)] {
+ total_walkable += if steps >= center.max.min_steps {
+ if steps % 2 == 0 {
+ center.max.even_steps_max
+ } else {
+ center.max.odd_steps_max
+ }
+ } else {
+ self.count_closed_walls_walkable_after_steps(center.entry, steps)
+ };
+ }
+
+ total_walkable
+ }
+
+ fn size(&self) -> (usize, usize) {
+ (self.rocks[0].len(), self.rocks.len())
+ }
+
+ fn center(&self) -> (usize, usize) {
+ let (size_x, size_y) = self.size();
+ (size_x / 2, size_y / 2)
+ }
+}
+
+impl WalledGardenState {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(WalledGardenState::Empty, char('.')),
+ value(WalledGardenState::Walkable, char('S')),
+ value(WalledGardenState::Rock, char('#')),
+ ))(input)
+ }
+}
+
+impl EntryPoint {
+ fn new(entry: (usize, usize), garden: &WalledGarden) -> EntryPoint {
+ EntryPoint {
+ max: garden.closed_walls_find_max_walkable(entry),
+ entry,
+ }
+ }
+}
+
+#[derive(Debug, Clone)]
+struct OpenGarden {
+ rockmap_size: (isize, isize),
+ rocks: BTreeSet<(isize, isize)>,
+ walkable: BTreeSet<(isize, isize)>,
+}
+
+impl OpenGarden {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, many1(WalledGardenState::parser)),
+ |walled_garden_map| OpenGarden {
+ rockmap_size: (
+ walled_garden_map.len() as isize,
+ walled_garden_map[0].len() as isize,
+ ),
+ rocks: walled_garden_map
+ .iter()
+ .enumerate()
+ .flat_map(|(y, row)| {
+ row.iter().enumerate().filter_map(move |(x, s)| {
+ (*s == WalledGardenState::Rock).then(|| (y as isize, x as isize))
+ })
+ })
+ .collect(),
+ walkable: walled_garden_map
+ .iter()
+ .enumerate()
+ .flat_map(|(y, row)| {
+ row.iter().enumerate().filter_map(move |(x, s)| {
+ (*s == WalledGardenState::Walkable).then(|| (y as isize, x as isize))
+ })
+ })
+ .collect(),
+ },
+ )(input)
+ }
+
+ fn count_open_walls_walkable_after_steps(&self, steps: usize) -> usize {
+ let mut garden = self.clone();
+ for _ in 0..steps {
+ garden.next_mut();
+ }
+ garden.count_walkable()
+ }
+
+ fn next_mut(&mut self) {
+ let walkable = mem::take(&mut self.walkable);
+ self.walkable = walkable
+ .iter()
+ .flat_map(|(y, x)| [(y - 1, *x), (y + 1, *x), (*y, x - 1), (*y, x + 1)])
+ .filter(|(y, x)| !self.is_rock(*y, *x))
+ .collect();
+ }
+
+ fn is_rock(&self, y: isize, x: isize) -> bool {
+ let y = y.rem_euclid(self.rockmap_size.0);
+ let x = x.rem_euclid(self.rockmap_size.1);
+ self.rocks.contains(&(y, x))
+ }
+
+ fn count_walkable(&self) -> usize {
+ self.walkable.len()
+ }
+}
+
+#[test]
+fn open_matches_optimized_for_small_steps() {
+ let input = fs::read_to_string("inputs/day_21.txt").unwrap();
+ let walled_garden = WalledGarden::parser(&input).unwrap().1;
+ let open_garden = OpenGarden::parser(&input).unwrap().1;
+
+ let steps = 132;
+ assert_eq!(
+ walled_garden.count_open_walls_walkable_after_steps(steps),
+ open_garden.count_open_walls_walkable_after_steps(steps)
+ );
+}
+
+#[test]
+fn open_matches_optimized_for_medium_steps() {
+ let input = fs::read_to_string("inputs/day_21.txt").unwrap();
+ let walled_garden = WalledGarden::parser(&input).unwrap().1;
+ let open_garden = OpenGarden::parser(&input).unwrap().1;
+
+ let steps = 65 + 132;
+ assert_eq!(
+ walled_garden.count_open_walls_walkable_after_steps(steps),
+ open_garden.count_open_walls_walkable_after_steps(steps)
+ );
+}
+
+#[test]
+fn open_matches_optimized_for_bigger_steps() {
+ let input = fs::read_to_string("inputs/day_21.txt").unwrap();
+ let walled_garden = WalledGarden::parser(&input).unwrap().1;
+ let open_garden = OpenGarden::parser(&input).unwrap().1;
+
+ let steps = 270;
+ assert_eq!(
+ walled_garden.count_open_walls_walkable_after_steps(steps),
+ open_garden.count_open_walls_walkable_after_steps(steps)
+ );
+}
diff --git a/2023/src/bin/day_22.rs b/2023/src/bin/day_22.rs
new file mode 100644
index 0000000..750f975
--- /dev/null
+++ b/2023/src/bin/day_22.rs
@@ -0,0 +1,161 @@
+use nalgebra::Point3;
+use nom::{
+ bytes::complete::tag,
+ character::complete::{line_ending, u32},
+ combinator::map,
+ multi::separated_list1,
+ sequence::{separated_pair, tuple},
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_22.txt")?;
+ let pile = BrickPile::parser(&input).unwrap().1;
+ let settled_pile = pile.settle();
+ let brickfall_sum = settled_pile.brickfall_sum();
+ dbg!(&brickfall_sum.count_disintegratable_blocks());
+ dbg!(&brickfall_sum.sum_brickfalls());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct BrickPile(Vec<Brick>);
+
+#[derive(Debug)]
+struct SettledBrickPile {
+ bricks: Vec<Brick>,
+ settled_count: usize,
+}
+
+#[derive(Debug, Clone)]
+struct Brick {
+ bottom: Point3<u32>, // the lowest z will always be here. The top might still have the same z.
+ top: Point3<u32>,
+}
+
+#[derive(Debug)]
+struct BrickfallSum(Vec<usize>);
+
+impl BrickPile {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, Brick::parser), BrickPile)(input)
+ }
+
+ fn settle(&self) -> SettledBrickPile {
+ let mut settled_bricks = self.0.clone();
+ let mut has_fallen = vec![false; settled_bricks.len()];
+
+ let mut all_settled = false;
+
+ while !all_settled {
+ all_settled = true;
+ for self_i in 0..settled_bricks.len() {
+ let this_brick_is_resting_on_something = settled_bricks[self_i]
+ .is_resting_on_ground()
+ || (0..settled_bricks.len()).any(|other_i| {
+ self_i != other_i
+ && settled_bricks[self_i].is_resting_on_other(&settled_bricks[other_i])
+ });
+
+ if !this_brick_is_resting_on_something {
+ settled_bricks[self_i].fall_one();
+ has_fallen[self_i] = true;
+ all_settled = false;
+ }
+ }
+ }
+
+ SettledBrickPile {
+ bricks: settled_bricks,
+ settled_count: has_fallen.iter().filter(|f| **f).count(),
+ }
+ }
+}
+
+impl Brick {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_pair(point_parser, tag("~"), point_parser),
+ |(a, b)| {
+ if a.z < b.z {
+ Brick { bottom: a, top: b }
+ } else {
+ Brick { top: a, bottom: b }
+ }
+ },
+ )(input)
+ }
+
+ fn min_x(&self) -> u32 {
+ self.bottom.x.min(self.top.x)
+ }
+
+ fn max_x(&self) -> u32 {
+ self.bottom.x.max(self.top.x)
+ }
+
+ fn min_y(&self) -> u32 {
+ self.bottom.y.min(self.top.y)
+ }
+
+ fn max_y(&self) -> u32 {
+ self.bottom.y.max(self.top.y)
+ }
+
+ fn is_resting_on_ground(&self) -> bool {
+ self.bottom.z == 1
+ }
+
+ fn is_resting_on_other(&self, other: &Self) -> bool {
+ self.bottom.z == other.top.z + 1
+ && self.min_x() <= other.max_x()
+ && other.min_x() <= self.max_x()
+ && self.min_y() <= other.max_y()
+ && other.min_y() <= self.max_y()
+ }
+
+ fn fall_one(&mut self) {
+ self.bottom.z -= 1;
+ self.top.z -= 1;
+ }
+}
+
+fn point_parser(input: &str) -> IResult<&str, Point3<u32>> {
+ map(
+ tuple((u32, tag(","), u32, tag(","), u32)),
+ |(x, _, y, _, z)| Point3::new(x, y, z),
+ )(input)
+}
+
+impl SettledBrickPile {
+ fn brickfall_sum(&self) -> BrickfallSum {
+ BrickfallSum(
+ (0..self.bricks.len())
+ .map(|self_i| {
+ self.count_bricks_that_would_fall_if_this_one_is_disintegrated(self_i)
+ })
+ .collect(),
+ )
+ }
+
+ fn count_bricks_that_would_fall_if_this_one_is_disintegrated(&self, i: usize) -> usize {
+ let mut unsettled_bricks = self.bricks.clone();
+ unsettled_bricks.remove(i);
+ let unsettled_bricks = BrickPile(unsettled_bricks);
+
+ let resettled = unsettled_bricks.settle();
+ resettled.settled_count
+ }
+}
+
+impl BrickfallSum {
+ fn count_disintegratable_blocks(&self) -> usize {
+ self.0.iter().filter(|fallen| **fallen == 0).count()
+ }
+
+ fn sum_brickfalls(&self) -> usize {
+ self.0.iter().sum()
+ }
+}
diff --git a/2023/src/bin/day_23.rs b/2023/src/bin/day_23.rs
new file mode 100644
index 0000000..40d0b70
--- /dev/null
+++ b/2023/src/bin/day_23.rs
@@ -0,0 +1,218 @@
+use nalgebra::Point2;
+use nom::{
+ branch::alt,
+ character::complete::{char, line_ending},
+ combinator::{map, value},
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::{
+ collections::{HashMap, HashSet},
+ fs,
+};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_23.txt")?;
+ let forest_map = ForestMap::parser(&input).unwrap().1;
+ let slippery_forked_forest_map = forest_map.build_forked_map(true);
+ let dry_forked_forest_map = forest_map.build_forked_map(false);
+
+ dbg!(&slippery_forked_forest_map.longest_end_path_length());
+ dbg!(&dry_forked_forest_map.longest_end_path_length());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct ForestMap(Vec<Vec<ForestTile>>);
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+enum ForestTile {
+ Wall,
+ Open,
+ SlopeUp,
+ SlopeDown,
+ SlopeLeft,
+ SlopeRight,
+}
+
+#[derive(Debug, Clone)]
+struct DecisionNode {
+ explored: HashSet<Point2<usize>>,
+ current: Point2<usize>,
+}
+
+#[derive(Debug)]
+struct ForkedForestMap {
+ start: Point2<usize>,
+ end: Point2<usize>,
+ connections: HashMap<Point2<usize>, Vec<ForkConnection>>,
+}
+
+#[derive(Debug)]
+struct ForkConnection {
+ to: Point2<usize>,
+ distance: usize,
+}
+
+#[derive(Debug, Clone)]
+struct ForkedDecisionNode {
+ explored_forks: HashSet<Point2<usize>>,
+ current: Point2<usize>,
+ current_len: usize,
+}
+
+impl ForestMap {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, many1(ForestTile::parser)),
+ ForestMap,
+ )(input)
+ }
+
+ fn adjacent(
+ &self,
+ p: &Point2<usize>,
+ not_these: &HashSet<Point2<usize>>,
+ slippery: bool,
+ ) -> Vec<Point2<usize>> {
+ let mut adjacent = Vec::with_capacity(4);
+ let tile = self.at(p);
+
+ if p.x > 0 && (!slippery || matches!(tile, ForestTile::Open | ForestTile::SlopeLeft)) {
+ adjacent.push(Point2::new(p.x - 1, p.y));
+ }
+ if p.y > 0 && (!slippery || matches!(tile, ForestTile::Open | ForestTile::SlopeUp)) {
+ adjacent.push(Point2::new(p.x, p.y - 1));
+ }
+ if p.x < self.0[p.y].len() - 1
+ && (!slippery || matches!(tile, ForestTile::Open | ForestTile::SlopeRight))
+ {
+ adjacent.push(Point2::new(p.x + 1, p.y));
+ }
+ if p.y < self.0.len() - 1
+ && (!slippery || matches!(tile, ForestTile::Open | ForestTile::SlopeDown))
+ {
+ adjacent.push(Point2::new(p.x, p.y + 1));
+ }
+
+ adjacent.retain(|adj_p| self.at(adj_p) != ForestTile::Wall && !not_these.contains(adj_p));
+ adjacent
+ }
+
+ fn at(&self, p: &Point2<usize>) -> ForestTile {
+ self.0[p.y][p.x]
+ }
+
+ fn build_forked_map(&self, slippery: bool) -> ForkedForestMap {
+ let start = Point2::new(1, 0);
+ let end = Point2::new(self.0[0].len() - 2, self.0.len() - 1);
+ let mut forks = Vec::new();
+ forks.push(start);
+ forks.push(end);
+
+ for y in 1..self.0.len() - 1 {
+ for x in 1..self.0[y].len() - 1 {
+ let p = Point2::new(x, y);
+ if self.at(&p) != ForestTile::Wall {
+ let adjacent_count = self.adjacent(&p, &HashSet::new(), false).len();
+ if adjacent_count > 2 {
+ forks.push(p);
+ }
+ }
+ }
+ }
+
+ let mut connections = HashMap::new();
+
+ for start_point in &forks {
+ let mut active_nodes = vec![DecisionNode {
+ explored: HashSet::new(),
+ current: start_point.clone(),
+ }];
+ active_nodes[0].explored.insert(start_point.clone());
+
+ let mut fork_connections = Vec::new();
+
+ while let Some(node) = active_nodes.pop() {
+ for adjacent in self.adjacent(&node.current, &node.explored, slippery) {
+ let mut new_node = node.clone();
+ new_node.explored.insert(adjacent);
+ new_node.current = adjacent;
+
+ if forks.contains(&new_node.current) {
+ fork_connections.push(ForkConnection {
+ to: new_node.current,
+ distance: new_node.path_length(),
+ });
+ } else {
+ active_nodes.push(new_node);
+ }
+ }
+ }
+
+ connections.insert(start_point.clone(), fork_connections);
+ }
+
+ ForkedForestMap {
+ start,
+ end,
+ connections,
+ }
+ }
+}
+
+impl ForestTile {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(ForestTile::Wall, char('#')),
+ value(ForestTile::Open, char('.')),
+ value(ForestTile::SlopeUp, char('^')),
+ value(ForestTile::SlopeDown, char('v')),
+ value(ForestTile::SlopeLeft, char('<')),
+ value(ForestTile::SlopeRight, char('>')),
+ ))(input)
+ }
+}
+
+impl DecisionNode {
+ fn path_length(&self) -> usize {
+ self.explored.len() - 1
+ }
+}
+
+impl ForkedForestMap {
+ fn longest_end_path_length(&self) -> usize {
+ let mut active_nodes = vec![ForkedDecisionNode {
+ explored_forks: HashSet::new(),
+ current: self.start,
+ current_len: 0,
+ }];
+ active_nodes[0].explored_forks.insert(self.start);
+ let mut longest_end_path_length: Option<usize> = None;
+
+ while let Some(node) = active_nodes.pop() {
+ for adjacent in self.connections.get(&node.current).unwrap() {
+ if !node.explored_forks.contains(&adjacent.to) {
+ let mut new_node = node.clone();
+ new_node.explored_forks.insert(adjacent.to);
+ new_node.current = adjacent.to;
+ new_node.current_len += adjacent.distance;
+
+ if new_node.current == self.end {
+ longest_end_path_length =
+ if let Some(current_longest) = longest_end_path_length {
+ Some(current_longest.max(new_node.current_len))
+ } else {
+ Some(new_node.current_len)
+ };
+ } else {
+ active_nodes.push(new_node);
+ }
+ }
+ }
+ }
+
+ longest_end_path_length.unwrap()
+ }
+}
diff --git a/2023/src/bin/day_24.rs b/2023/src/bin/day_24.rs
new file mode 100644
index 0000000..1f22169
--- /dev/null
+++ b/2023/src/bin/day_24.rs
@@ -0,0 +1,242 @@
+use nalgebra::{Matrix2, Matrix6, Point3, RowVector6, Vector2, Vector3, Vector6};
+use nom::{
+ bytes::complete::tag,
+ character::complete::{i64, line_ending},
+ combinator::map,
+ multi::separated_list1,
+ sequence::{separated_pair, tuple},
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_24.txt")?;
+ let parsed = Hailstones::parser(&input).unwrap().1;
+ dbg!(&parsed.count_intersections_2d(200000000000000., 400000000000000.));
+
+ let magic_rock = parsed.find_magic_throwing_rock();
+ dbg!(&magic_rock);
+ dbg!(
+ magic_rock.position.x as i64 + magic_rock.position.y as i64 + magic_rock.position.z as i64
+ );
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct Hailstones(Vec<Hailstone>);
+
+#[derive(Debug)]
+struct Hailstone {
+ position: Point3<f64>,
+ velocity: Vector3<f64>,
+}
+
+impl Hailstones {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(line_ending, Hailstone::parser), Hailstones)(input)
+ }
+
+ fn count_intersections_2d(&self, min: f64, max: f64) -> usize {
+ self.0
+ .iter()
+ .enumerate()
+ .map(|(i, hailstone)| {
+ self.0
+ .iter()
+ .skip(i + 1)
+ .filter(|other_hailstone| hailstone.intersects_2d(other_hailstone, min, max))
+ .count()
+ })
+ .sum()
+ }
+
+ fn find_magic_throwing_rock(&self) -> Hailstone {
+ (0..self.0.len())
+ .flat_map(move |h1| {
+ (h1 + 1..self.0.len()).flat_map(move |h2| {
+ (h2 + 1..self.0.len())
+ .flat_map(move |h3| (h3 + 1..self.0.len()).map(move |h4| [h1, h2, h3, h4]))
+ })
+ })
+ .take(1000000)
+ .map(|hailstones| {
+ let rock = self.find_magic_throwing_rock_for_hailstones(hailstones);
+ (
+ // the solution I'm after uses integers. This tries to find the minimum error.
+ rock.position.x.abs().fract()
+ + rock.position.y.abs().fract()
+ + rock.position.z.abs().fract()
+ + rock.velocity.x.abs().fract()
+ + rock.velocity.y.abs().fract()
+ + rock.velocity.z.abs().fract()
+ + self
+ .0
+ .iter()
+ .map(|h| rock.collition_time(&h).fract())
+ .sum::<f64>(),
+ rock,
+ )
+ })
+ .min_by(|(error_a, _), (error_b, _)| error_a.total_cmp(error_b))
+ .unwrap()
+ .1
+ }
+
+ fn find_magic_throwing_rock_for_hailstones(&self, hailstones: [usize; 4]) -> Hailstone {
+ // unknowns are (x, y, z, dx, dy, dz)
+ let h1 = &self.0[hailstones[0]];
+ let h2 = &self.0[hailstones[1]];
+ let h3 = &self.0[hailstones[2]];
+ let h4 = &self.0[hailstones[3]];
+
+ let coefficients: Matrix6<f64> = Matrix6::from_rows(&[
+ RowVector6::new(
+ h2.velocity.y - h1.velocity.y,
+ h1.velocity.x - h2.velocity.x,
+ 0.,
+ h1.position.y - h2.position.y,
+ h2.position.x - h1.position.x,
+ 0.,
+ ),
+ RowVector6::new(
+ h2.velocity.z - h1.velocity.z,
+ 0.,
+ h1.velocity.x - h2.velocity.x,
+ h1.position.z - h2.position.z,
+ 0.,
+ h2.position.x - h1.position.x,
+ ),
+ RowVector6::new(
+ 0.,
+ h2.velocity.z - h1.velocity.z,
+ h1.velocity.y - h2.velocity.y,
+ 0.,
+ h1.position.z - h2.position.z,
+ h2.position.y - h1.position.y,
+ ),
+ RowVector6::new(
+ h4.velocity.y - h3.velocity.y,
+ h3.velocity.x - h4.velocity.x,
+ 0.,
+ h3.position.y - h4.position.y,
+ h4.position.x - h3.position.x,
+ 0.,
+ ),
+ RowVector6::new(
+ h4.velocity.z - h3.velocity.z,
+ 0.,
+ h3.velocity.x - h4.velocity.x,
+ h3.position.z - h4.position.z,
+ 0.,
+ h4.position.x - h3.position.x,
+ ),
+ RowVector6::new(
+ 0.,
+ h4.velocity.z - h3.velocity.z,
+ h3.velocity.y - h4.velocity.y,
+ 0.,
+ h3.position.z - h4.position.z,
+ h4.position.y - h3.position.y,
+ ),
+ ]);
+ let constants: Vector6<f64> = Vector6::new(
+ h1.position.y * h1.velocity.x
+ - h1.position.x * h1.velocity.y
+ - h2.position.y * h2.velocity.x
+ + h2.position.x * h2.velocity.y,
+ h1.position.z * h1.velocity.x
+ - h1.position.x * h1.velocity.z
+ - h2.position.z * h2.velocity.x
+ + h2.position.x * h2.velocity.z,
+ h1.position.z * h1.velocity.y
+ - h1.position.y * h1.velocity.z
+ - h2.position.z * h2.velocity.y
+ + h2.position.y * h2.velocity.z,
+ h3.position.y * h3.velocity.x
+ - h3.position.x * h3.velocity.y
+ - h4.position.y * h4.velocity.x
+ + h4.position.x * h4.velocity.y,
+ h3.position.z * h3.velocity.x
+ - h3.position.x * h3.velocity.z
+ - h4.position.z * h4.velocity.x
+ + h4.position.x * h4.velocity.z,
+ h3.position.z * h3.velocity.y
+ - h3.position.y * h3.velocity.z
+ - h4.position.z * h4.velocity.y
+ + h4.position.y * h4.velocity.z,
+ );
+
+ if let Some(coefficients_inverse) = coefficients.try_inverse() {
+ let unknowns = coefficients_inverse * constants;
+
+ Hailstone {
+ position: Point3::new(unknowns[0], unknowns[1], unknowns[2]),
+ velocity: Vector3::new(unknowns[3], unknowns[4], unknowns[5]),
+ }
+ } else {
+ panic!("No solution found, matrix didn't invert")
+ }
+ }
+}
+
+impl Hailstone {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_pair(
+ map(
+ tuple((i64, tag(", "), i64, tag(", "), i64)),
+ |(x, _, y, _, z)| Point3::new(x as f64, y as f64, z as f64),
+ ),
+ tag(" @ "),
+ map(
+ tuple((i64, tag(", "), i64, tag(", "), i64)),
+ |(x, _, y, _, z)| Vector3::new(x as f64, y as f64, z as f64),
+ ),
+ ),
+ |(initial_position, velocity)| Hailstone {
+ position: initial_position,
+ velocity,
+ },
+ )(input)
+ }
+
+ fn intersects_2d(&self, other: &Hailstone, min: f64, max: f64) -> bool {
+ let variables = Matrix2::new(
+ self.velocity.x,
+ -other.velocity.x,
+ self.velocity.y,
+ -other.velocity.y,
+ );
+ let constants = Vector2::new(
+ other.position.x - self.position.x,
+ other.position.y - self.position.y,
+ );
+
+ if let Some(variables_inverse) = variables.try_inverse() {
+ let intersection = variables_inverse * constants;
+ let self_t = intersection.x;
+ let other_t = intersection.y;
+
+ let intersection = self.position.xy() + self.velocity.xy() * self_t;
+ self_t >= 0.
+ && other_t >= 0.
+ && intersection.x >= min
+ && intersection.x <= max
+ && intersection.y >= min
+ && intersection.y <= max
+ } else {
+ false
+ }
+ }
+
+ /// This is only intended for hail that definitely collides!
+ fn collition_time(&self, other: &Hailstone) -> f64 {
+ let tx = (self.position.x - other.position.x) / (other.velocity.x - self.velocity.x);
+ let ty = (self.position.y - other.position.y) / (other.velocity.y - self.velocity.y);
+ let tz = (self.position.z - other.position.z) / (other.velocity.z - self.velocity.z);
+ let t = tx.max(ty).max(tz); // sometimes one of these is zero!
+ assert!(t > 0.);
+ t
+ }
+}
diff --git a/2023/src/bin/day_25.rs b/2023/src/bin/day_25.rs
new file mode 100644
index 0000000..7bd3751
--- /dev/null
+++ b/2023/src/bin/day_25.rs
@@ -0,0 +1,154 @@
+use nom::{
+ bytes::complete::tag,
+ character::complete::{alpha1, line_ending, space1},
+ combinator::map,
+ multi::separated_list1,
+ sequence::separated_pair,
+ IResult,
+};
+use std::{collections::BTreeMap, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_25.txt")?;
+ let parsed = Circuit::parser(&input).unwrap().1;
+ let three_cut_partition_sizes = parsed.find_non_zero_three_cut_partition_sizes();
+ dbg!(&three_cut_partition_sizes);
+ dbg!(three_cut_partition_sizes.0 * three_cut_partition_sizes.1);
+
+ Ok(())
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
+struct VertexId(usize);
+
+#[derive(Debug)]
+struct Circuit {
+ wires: Vec<Vec<VertexId>>,
+}
+
+#[derive(Debug, Clone, Eq)]
+struct Edge {
+ a: VertexId,
+ b: VertexId,
+}
+
+impl PartialEq for Edge {
+ fn eq(&self, other: &Self) -> bool {
+ (self.a == other.a && self.b == other.b) || (self.a == other.b && self.b == other.a)
+ }
+}
+
+impl Circuit {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(
+ line_ending,
+ separated_pair(
+ map(alpha1, |s: &str| s.to_owned()),
+ tag(": "),
+ separated_list1(space1, map(alpha1, |s: &str| s.to_owned())),
+ ),
+ ),
+ |vertices| {
+ let mut vertex_id_mapping = BTreeMap::new();
+ let mut wires = Vec::new();
+
+ for (from, tos) in vertices {
+ let from_id = vertex_id_mapping
+ .entry(from)
+ .or_insert_with(|| {
+ let new_id = VertexId(wires.len());
+ wires.push(Vec::new());
+ new_id
+ })
+ .clone();
+ for to in tos {
+ let to_id = vertex_id_mapping
+ .entry(to)
+ .or_insert_with(|| {
+ let new_id = VertexId(wires.len());
+ wires.push(Vec::new());
+ new_id
+ })
+ .clone();
+ wires[from_id.0].push(to_id);
+ wires[to_id.0].push(from_id);
+ }
+ }
+ Circuit { wires }
+ },
+ )(input)
+ }
+
+ fn find_non_zero_three_cut_partition_sizes(&self) -> (usize, usize) {
+ let cut1s = self.edges_to_traverse_everything([]);
+ for (cut1i, cut1) in cut1s.iter().enumerate() {
+ let cut2s = self.edges_to_traverse_everything([cut1.clone()]);
+ for (cut2i, cut2) in cut2s.iter().enumerate() {
+ if cut1s[0..cut1i].contains(&cut2) {
+ continue;
+ }
+ for cut3 in self.edges_to_traverse_everything([cut1.clone(), cut2.clone()]) {
+ if cut1s[0..cut1i].contains(&cut3) || cut2s[0..cut2i].contains(&cut3) {
+ // if (cut2, *) didn't work, then (*, cut2) also wouldn't work.
+ continue;
+ }
+ let (size1, size2) = self.partition_sizes([cut1.clone(), cut2.clone(), cut3]);
+ if size2 > 0 {
+ return (size1, size2);
+ }
+ }
+ }
+ }
+ panic!("No partitions with three cuts");
+ }
+
+ fn partition_sizes(&self, cuts: [Edge; 3]) -> (usize, usize) {
+ let mut visited = vec![false; self.wires.len()];
+ let mut frontier = Vec::new();
+
+ visited[0] = true;
+ frontier.push(VertexId(0));
+ let mut visited_count = 1;
+
+ while let Some(from) = frontier.pop() {
+ for to in &self.wires[from.0] {
+ let edge = Edge::new(from, *to);
+ if !cuts.contains(&edge) && !visited[to.0] {
+ visited[to.0] = true;
+ visited_count += 1;
+ frontier.push(*to);
+ }
+ }
+ }
+
+ (visited_count, self.wires.len() - visited_count)
+ }
+
+ fn edges_to_traverse_everything<const N: usize>(&self, cuts: [Edge; N]) -> Vec<Edge> {
+ let mut visited = vec![false; self.wires.len()];
+ let mut frontier = Vec::new();
+
+ visited[0] = true;
+ frontier.push(VertexId(0));
+ let mut used_edges = Vec::new();
+
+ while let Some(from) = frontier.pop() {
+ for to in &self.wires[from.0] {
+ let edge = Edge::new(from, *to);
+ if !cuts.contains(&edge) && !visited[to.0] {
+ visited[to.0] = true;
+ used_edges.push(edge);
+ frontier.push(*to);
+ }
+ }
+ }
+ used_edges
+ }
+}
+
+impl Edge {
+ fn new(a: VertexId, b: VertexId) -> Edge {
+ Edge { a, b }
+ }
+}
diff --git a/2023/src/bin/day_3.rs b/2023/src/bin/day_3.rs
new file mode 100644
index 0000000..06e1300
--- /dev/null
+++ b/2023/src/bin/day_3.rs
@@ -0,0 +1,149 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{digit1, line_ending, none_of},
+ combinator::{map, map_res},
+ multi::{many1, separated_list1},
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_3.txt")?;
+ let parsed = PartInventory::parser(&input).unwrap().1;
+ dbg!(&parsed.part_number_sum());
+ dbg!(&parsed.gear_ratio_sum());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct PartInventory {
+ parts: Vec<Part>,
+ symbols: Vec<Symbol>,
+}
+
+#[derive(Debug)]
+struct Part {
+ number: u32,
+ symbols: Vec<char>,
+ y: usize,
+ min_x: usize,
+ max_x: usize,
+}
+
+#[derive(Debug, Clone)]
+struct Symbol {
+ symbol: char,
+ parts: Vec<u32>,
+ x: usize,
+ y: usize,
+}
+
+#[derive(Debug)]
+enum LexToken {
+ Space(usize),
+ Part(usize, u32),
+ Symbol(char),
+}
+
+impl PartInventory {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(LexToken::parser, |tokens| {
+ let mut parts = Vec::new();
+ let mut symbols = Vec::new();
+
+ for (y, row) in tokens.iter().enumerate() {
+ let mut x = 0;
+ for token in row {
+ match token {
+ LexToken::Space(_) => {}
+ LexToken::Part(len, number) => parts.push(Part {
+ number: *number,
+ symbols: Vec::new(),
+ y,
+ min_x: x,
+ max_x: x + len - 1,
+ }),
+ LexToken::Symbol(symbol) => symbols.push(Symbol {
+ symbol: *symbol,
+ parts: Vec::new(),
+ y,
+ x,
+ }),
+ }
+ x += token.len();
+ }
+ }
+
+ for part in &mut parts {
+ part.symbols = symbols
+ .iter()
+ .filter(|symbol| part.touches(symbol))
+ .map(|symbol| symbol.symbol)
+ .collect();
+ }
+
+ for symbol in &mut symbols {
+ symbol.parts = parts
+ .iter()
+ .filter(|part| part.touches(symbol))
+ .map(|part| part.number)
+ .collect();
+ }
+
+ PartInventory { parts, symbols }
+ })(input)
+ }
+
+ fn part_number_sum(&self) -> u32 {
+ self.parts
+ .iter()
+ .filter(|part| part.symbols.len() > 0)
+ .map(|part| part.number)
+ .sum()
+ }
+
+ fn gear_ratio_sum(&self) -> u32 {
+ self.symbols
+ .iter()
+ .filter(|symbol| symbol.symbol == '*' && symbol.parts.len() == 2)
+ .map(|symbol| symbol.parts[0] * symbol.parts[1])
+ .sum()
+ }
+}
+
+impl LexToken {
+ fn parser(input: &str) -> IResult<&str, Vec<Vec<Self>>> {
+ separated_list1(
+ line_ending,
+ many1(alt((
+ map(many1(tag(".")), |dots| LexToken::Space(dots.len())),
+ map_res(digit1, |num_s: &str| {
+ num_s
+ .parse()
+ .map(|num_i| LexToken::Part(num_s.len(), num_i))
+ }),
+ map(none_of("\n"), |s| LexToken::Symbol(s)),
+ ))),
+ )(input)
+ }
+
+ fn len(&self) -> usize {
+ match self {
+ Self::Space(len) => *len,
+ Self::Part(len, _) => *len,
+ Self::Symbol(_) => 1,
+ }
+ }
+}
+
+impl Part {
+ fn touches(&self, symbol: &Symbol) -> bool {
+ let part = self;
+ symbol.x >= part.min_x.saturating_sub(1)
+ && symbol.x <= part.max_x.saturating_add(1)
+ && symbol.y >= part.y.saturating_sub(1)
+ && symbol.y <= part.y.saturating_add(1)
+ }
+}
diff --git a/2023/src/bin/day_4.rs b/2023/src/bin/day_4.rs
new file mode 100644
index 0000000..7f5af6b
--- /dev/null
+++ b/2023/src/bin/day_4.rs
@@ -0,0 +1,92 @@
+use nom::{
+ bytes::complete::tag,
+ character::complete::{line_ending, space1, u32 as nom_u32},
+ combinator::map,
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{collections::BTreeSet, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_4.txt")?;
+ let parsed = Scratchcards::parser(&input).unwrap().1;
+ dbg!(&parsed.points());
+ dbg!(&parsed.scratchcard_explosion_sum());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct Scratchcards(Vec<Scratchcard>);
+
+#[derive(Debug)]
+struct Scratchcard {
+ winning: BTreeSet<u32>,
+ owned: BTreeSet<u32>,
+}
+
+impl Scratchcards {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, Scratchcard::parser),
+ Scratchcards,
+ )(input)
+ }
+
+ fn points(&self) -> usize {
+ self.0.iter().map(|card| card.points()).sum()
+ }
+
+ fn scratchcard_explosion_sum(&self) -> u64 {
+ let mut scratchcard_pile = vec![1_u64.into(); self.0.len()];
+
+ for i in 0..scratchcard_pile.len() {
+ let points = self.0[i].winning_numbers();
+ let new_scratchcards: u64 = scratchcard_pile[i];
+ for offset in 0..points {
+ if let Some(pile) = scratchcard_pile.get_mut(i + 1 + offset) {
+ *pile += new_scratchcards;
+ }
+ }
+ }
+
+ scratchcard_pile.into_iter().sum()
+ }
+}
+
+impl Scratchcard {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ tag("Card"),
+ space1,
+ nom_u32,
+ tag(":"),
+ space1,
+ separated_list1(space1, nom_u32),
+ space1,
+ tag("|"),
+ space1,
+ separated_list1(space1, nom_u32),
+ )),
+ |(_, _, _, _, _, winning, _, _, _, owned)| Scratchcard {
+ winning: winning.into_iter().collect(),
+ owned: owned.into_iter().collect(),
+ },
+ )(input)
+ }
+
+ fn winning_numbers(&self) -> usize {
+ self.winning.intersection(&self.owned).count()
+ }
+
+ fn points(&self) -> usize {
+ let winning_numbers = self.winning_numbers();
+ if winning_numbers > 0 {
+ 2_usize.pow(winning_numbers as u32 - 1)
+ } else {
+ 0
+ }
+ }
+}
diff --git a/2023/src/bin/day_5.rs b/2023/src/bin/day_5.rs
new file mode 100644
index 0000000..2243bf8
--- /dev/null
+++ b/2023/src/bin/day_5.rs
@@ -0,0 +1,257 @@
+use nom::{
+ bytes::complete::tag,
+ character::complete::{line_ending, not_line_ending, space1, u64 as nom_u64},
+ combinator::map,
+ multi::separated_list1,
+ sequence::{pair, tuple},
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_5.txt")?;
+ let parsed = Almanac::parser(&input).unwrap().1;
+ dbg!(&parsed.min_location());
+ dbg!(&parsed.range_min_location());
+ Ok(())
+}
+
+#[derive(Debug)]
+struct Almanac {
+ seeds: Vec<u64>,
+ seed_ranges: Vec<Range>,
+ mappings: Vec<AlmanacMapping>,
+}
+
+#[derive(Debug)]
+struct AlmanacMapping {
+ _heading: String,
+ maps: Vec<Mapping>,
+}
+
+#[derive(Debug)]
+struct Mapping {
+ source_start: u64,
+ dest_start: u64,
+ len: u64,
+}
+
+#[derive(Debug, Clone, Copy)]
+struct Range {
+ start: u64,
+ len: u64,
+}
+
+impl Almanac {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ tag("seeds: "),
+ separated_list1(space1, nom_u64),
+ pair(line_ending, line_ending),
+ separated_list1(pair(line_ending, line_ending), AlmanacMapping::parser),
+ )),
+ |(_, seeds, _, mappings)| {
+ let seed_ranges = seeds
+ .chunks(2)
+ .map(|chunk| Range {
+ start: chunk[0],
+ len: chunk[1],
+ })
+ .collect();
+ Almanac {
+ seeds,
+ seed_ranges,
+ mappings,
+ }
+ },
+ )(input)
+ }
+
+ fn locations(&self) -> Vec<u64> {
+ self.mappings
+ .iter()
+ .fold(self.seeds.clone(), |acc, mapping| {
+ acc.into_iter().map(|seed| mapping.convert(seed)).collect()
+ })
+ }
+
+ fn min_location(&self) -> u64 {
+ self.locations().into_iter().min().unwrap()
+ }
+
+ fn range_locations(&self) -> Vec<Range> {
+ self.mappings
+ .iter()
+ .fold(self.seed_ranges.clone(), |acc, mapping| {
+ dbg!(&acc);
+ acc.into_iter()
+ .flat_map(|seed_range| mapping.convert_range(seed_range))
+ .collect()
+ })
+ }
+
+ fn range_min_location(&self) -> u64 {
+ self.range_locations()
+ .into_iter()
+ .map(|r| r.start)
+ .min()
+ .unwrap()
+ }
+}
+
+impl AlmanacMapping {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ not_line_ending,
+ line_ending,
+ separated_list1(line_ending, Mapping::parser),
+ )),
+ |(heading, _, maps)| AlmanacMapping {
+ _heading: heading.to_owned(),
+ maps,
+ },
+ )(input)
+ }
+
+ fn convert(&self, source: u64) -> u64 {
+ self.maps
+ .iter()
+ .filter_map(|mapping| mapping.convert(source))
+ .next()
+ .unwrap_or(source)
+ }
+
+ fn convert_range(&self, source: Range) -> Vec<Range> {
+ let converted_ranges: Vec<(Range, Range)> = self
+ .maps
+ .iter()
+ .filter_map(|mapping| mapping.convert_range(source))
+ .collect();
+
+ let mut result = Vec::new();
+ let mut uncovered_ranges = vec![source];
+ for (covered_source, dest) in converted_ranges {
+ result.push(dest);
+
+ uncovered_ranges = uncovered_ranges
+ .into_iter()
+ .flat_map(|r| r.difference(covered_source))
+ .collect();
+ }
+
+ result.append(&mut uncovered_ranges);
+
+ result
+ }
+}
+
+impl Mapping {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((nom_u64, space1, nom_u64, space1, nom_u64)),
+ |(dest_start, _, source_start, _, len)| Mapping {
+ source_start,
+ dest_start,
+ len,
+ },
+ )(input)
+ }
+
+ fn source_range(&self) -> Range {
+ Range {
+ start: self.source_start,
+ len: self.len,
+ }
+ }
+
+ fn convert(&self, source: u64) -> Option<u64> {
+ if source >= self.source_start && source < self.source_start + self.len {
+ Some(source - self.source_start + self.dest_start)
+ } else {
+ None
+ }
+ }
+
+ fn convert_range(&self, source: Range) -> Option<(Range, Range)> {
+ if let Some(source_intersection) = source.intersection(self.source_range()) {
+ Some((
+ source_intersection,
+ Range {
+ start: source_intersection.start - self.source_start + self.dest_start,
+ len: source_intersection.len,
+ },
+ ))
+ } else {
+ None
+ }
+ }
+}
+
+impl Range {
+ fn end(&self) -> u64 {
+ self.start + self.len
+ }
+
+ fn intersection(self, other: Range) -> Option<Range> {
+ if self.start < other.start {
+ if self.end() <= other.start {
+ None
+ } else if self.end() < other.end() {
+ Some(Range {
+ start: other.start,
+ len: self.end() - other.start,
+ })
+ } else {
+ Some(other)
+ }
+ } else if self.start < other.end() {
+ if self.end() < other.end() {
+ Some(self)
+ } else {
+ Some(Range {
+ start: self.start,
+ len: other.end() - self.start,
+ })
+ }
+ } else {
+ None
+ }
+ }
+
+ fn difference(self, other: Range) -> Vec<Range> {
+ if self.start < other.start {
+ if self.end() <= other.start {
+ vec![self]
+ } else if self.end() <= other.end() {
+ vec![Range {
+ start: self.start,
+ len: other.start - self.start,
+ }]
+ } else {
+ vec![
+ Range {
+ start: self.start,
+ len: other.start - self.start,
+ },
+ Range {
+ start: other.end(),
+ len: self.end() - other.end(),
+ },
+ ]
+ }
+ } else if self.start < other.end() {
+ if self.end() <= other.end() {
+ vec![]
+ } else {
+ vec![Range {
+ start: other.end(),
+ len: self.end() - other.end(),
+ }]
+ }
+ } else {
+ vec![self]
+ }
+ }
+}
diff --git a/2023/src/bin/day_6.rs b/2023/src/bin/day_6.rs
new file mode 100644
index 0000000..138843e
--- /dev/null
+++ b/2023/src/bin/day_6.rs
@@ -0,0 +1,70 @@
+use nom::{
+ bytes::complete::tag,
+ character::complete::{line_ending, space1, u64 as nom_u64},
+ combinator::map,
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_6.txt")?;
+ let parsed = RacePlan::multi_parser(&input).unwrap().1;
+ for plan in parsed {
+ dbg!(&plan.win_count_product());
+ }
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct RacePlan(Vec<RaceRecord>);
+
+#[derive(Debug)]
+struct RaceRecord {
+ time: u64,
+ distance: u64,
+}
+
+impl RacePlan {
+ fn multi_parser(input: &str) -> IResult<&str, Vec<Self>> {
+ separated_list1(line_ending, RacePlan::parser)(input)
+ }
+
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ tuple((
+ tag("Time:"),
+ space1,
+ separated_list1(space1, nom_u64),
+ line_ending,
+ tag("Distance:"),
+ space1,
+ separated_list1(space1, nom_u64),
+ )),
+ |(_, _, times, _, _, _, distances)| {
+ RacePlan(
+ times
+ .into_iter()
+ .zip(distances.into_iter())
+ .map(|(time, distance)| RaceRecord { time, distance })
+ .collect(),
+ )
+ },
+ )(input)
+ }
+
+ fn win_count_product(&self) -> usize {
+ self.0.iter().map(|r| r.count_wins()).product()
+ }
+}
+
+impl RaceRecord {
+ fn count_wins(&self) -> usize {
+ (1..self.time)
+ .map(|charge_time| charge_time * (self.time - charge_time))
+ .filter(|distance| *distance > self.distance)
+ .count()
+ }
+}
diff --git a/2023/src/bin/day_7.rs b/2023/src/bin/day_7.rs
new file mode 100644
index 0000000..3b629bd
--- /dev/null
+++ b/2023/src/bin/day_7.rs
@@ -0,0 +1,169 @@
+use nom::{
+ branch::alt,
+ character::complete::{char as nom_char, line_ending, space1, u32 as nom_u32},
+ combinator::{map, value},
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{collections::BTreeMap, fs};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_7.txt")?;
+
+ {
+ let mut games_without_jokers = CardGame::parser(false)(&input).unwrap().1;
+ games_without_jokers.sort();
+ dbg!(games_without_jokers.calculate_winnings());
+ }
+
+ {
+ let mut games_with_jokers = CardGame::parser(true)(&input).unwrap().1;
+ games_with_jokers.sort();
+ dbg!(games_with_jokers.calculate_winnings());
+ }
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct CardGame(Vec<CardHand>);
+
+#[derive(Debug, PartialEq, Eq)]
+struct CardHand {
+ cards: [Card; 5],
+ bid: u32,
+}
+
+#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
+struct Card(u8);
+
+#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
+enum CardRank {
+ HighCard,
+ OnePair,
+ TwoPair,
+ ThreeOfAKind,
+ FullHouse,
+ FourOfAKind,
+ FiveOfAKind,
+}
+
+impl CardGame {
+ fn parser(with_jokers: bool) -> impl FnMut(&str) -> IResult<&str, Self> {
+ move |input: &str| {
+ map(
+ separated_list1(line_ending, CardHand::parser(with_jokers)),
+ CardGame,
+ )(input)
+ }
+ }
+
+ fn sort(&mut self) {
+ self.0.sort()
+ }
+
+ fn calculate_winnings(&self) -> u32 {
+ self.0
+ .iter()
+ .enumerate()
+ .map(|(i, hand)| hand.bid * (i as u32 + 1))
+ .sum()
+ }
+}
+
+impl CardHand {
+ fn parser(with_jokers: bool) -> impl FnMut(&str) -> IResult<&str, Self> {
+ move |input: &str| {
+ map(
+ tuple((
+ Card::parser(with_jokers),
+ Card::parser(with_jokers),
+ Card::parser(with_jokers),
+ Card::parser(with_jokers),
+ Card::parser(with_jokers),
+ space1,
+ nom_u32,
+ )),
+ |(c1, c2, c3, c4, c5, _, bid)| CardHand {
+ cards: [c1, c2, c3, c4, c5],
+ bid,
+ },
+ )(input)
+ }
+ }
+
+ fn card_rank(&self) -> CardRank {
+ let mut cards_set: BTreeMap<Card, u8> = BTreeMap::new();
+ for card in &self.cards {
+ *cards_set.entry(*card).or_insert(0) += 1;
+ }
+
+ let jokers = cards_set.get(&Card(1)).cloned().unwrap_or(0);
+ cards_set.remove(&Card(1));
+
+ let mut card_counts: Vec<u8> = cards_set.into_values().collect();
+ card_counts.sort_by(|a, b| b.cmp(a));
+
+ if card_counts.len() == 0 {
+ // all 5 were jokers!
+ CardRank::FiveOfAKind
+ } else {
+ card_counts[0] += jokers;
+ if card_counts[0] == 5 {
+ CardRank::FiveOfAKind
+ } else if card_counts[0] == 4 {
+ CardRank::FourOfAKind
+ } else if card_counts[0] == 3 && card_counts[1] == 2 {
+ CardRank::FullHouse
+ } else if card_counts[0] == 3 {
+ CardRank::ThreeOfAKind
+ } else if card_counts[0] == 2 && card_counts[1] == 2 {
+ CardRank::TwoPair
+ } else if card_counts[0] == 2 {
+ CardRank::OnePair
+ } else {
+ CardRank::HighCard
+ }
+ }
+ }
+}
+
+impl Card {
+ fn parser(with_jokers: bool) -> impl FnMut(&str) -> IResult<&str, Self> {
+ move |input: &str| {
+ map(
+ alt((
+ value(2, nom_char('2')),
+ value(3, nom_char('3')),
+ value(4, nom_char('4')),
+ value(5, nom_char('5')),
+ value(6, nom_char('6')),
+ value(7, nom_char('7')),
+ value(8, nom_char('8')),
+ value(9, nom_char('9')),
+ value(10, nom_char('T')),
+ value(if with_jokers { 1 } else { 11 }, nom_char('J')),
+ value(12, nom_char('Q')),
+ value(13, nom_char('K')),
+ value(14, nom_char('A')),
+ )),
+ Card,
+ )(input)
+ }
+ }
+}
+
+impl std::cmp::Ord for CardHand {
+ fn cmp(&self, other: &Self) -> std::cmp::Ordering {
+ self.card_rank()
+ .cmp(&other.card_rank())
+ .then(self.cards.cmp(&other.cards))
+ }
+}
+
+impl std::cmp::PartialOrd for CardHand {
+ fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
+ Some(self.cmp(other))
+ }
+}
diff --git a/2023/src/bin/day_8.rs b/2023/src/bin/day_8.rs
new file mode 100644
index 0000000..2da3cf5
--- /dev/null
+++ b/2023/src/bin/day_8.rs
@@ -0,0 +1,213 @@
+use nom::{
+ branch::alt,
+ bytes::complete::tag,
+ character::complete::{alpha1, char as nom_char, line_ending},
+ combinator::{map, value},
+ multi::{many1, separated_list1},
+ sequence::{pair, preceded, separated_pair, terminated},
+ IResult,
+};
+use std::{collections::BTreeMap, fs, ops::Range};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_8.txt")?;
+ let mut directions = Directions::parser(&input).unwrap().1;
+ dbg!(directions.steps_from_a_to_z());
+ dbg!(directions.ghost_steps_from_a_to_z());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct Directions {
+ turns: Vec<Turn>,
+ packed_map: Vec<PackedFork>,
+ packed_ghost_starts: Range<u16>,
+ packed_ghost_destinations: Range<u16>,
+ distance_to_ghost_dest_cache: BTreeMap<(u16, usize), (u16, usize)>,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+enum Turn {
+ Left,
+ Right,
+}
+
+#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone)]
+struct Location(String);
+
+#[derive(Debug)]
+struct Fork {
+ left: Location,
+ right: Location,
+}
+
+#[derive(Debug)]
+struct PackedFork {
+ left: u16,
+ right: u16,
+}
+
+impl Directions {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_pair(
+ many1(Turn::parser),
+ pair(line_ending, line_ending),
+ separated_list1(
+ line_ending,
+ separated_pair(Location::parser, tag(" = "), Fork::parser),
+ ),
+ ),
+ |(turns, map)| {
+ let map: BTreeMap<Location, Fork> = map.into_iter().collect();
+ let mut locations: Vec<Location> = map.keys().cloned().collect();
+ locations.sort_by_key(|l| l.0.chars().rev().collect::<String>());
+
+ Directions {
+ turns,
+ packed_map: locations
+ .iter()
+ .map(|l| {
+ let unpacked_fork = map.get(l).unwrap();
+ PackedFork {
+ left: locations
+ .iter()
+ .position(|f| *f == unpacked_fork.left)
+ .unwrap() as u16,
+ right: locations
+ .iter()
+ .position(|f| *f == unpacked_fork.right)
+ .unwrap() as u16,
+ }
+ })
+ .collect(),
+ packed_ghost_starts: 0
+ ..locations.iter().position(|l| !l.ghost_start()).unwrap() as u16,
+ packed_ghost_destinations: locations.iter().position(|l| l.ghost_end()).unwrap()
+ as u16
+ ..locations.len() as u16,
+ distance_to_ghost_dest_cache: BTreeMap::new(),
+ }
+ },
+ )(input)
+ }
+
+ fn steps_from_a_to_z(&self) -> usize {
+ let mut step_count = 0;
+ let mut current_location: u16 = 0;
+
+ for dir in self.turns.iter().cycle() {
+ let current_fork: &PackedFork = &self.packed_map[current_location as usize];
+ current_location = match dir {
+ Turn::Left => current_fork.left,
+ Turn::Right => current_fork.right,
+ };
+ step_count += 1;
+
+ if current_location == self.packed_map.len() as u16 - 1 {
+ return step_count;
+ }
+ }
+ unreachable!()
+ }
+
+ fn ghost_steps_from_a_to_z(&mut self) -> usize {
+ let mut current_locations: Vec<(u16, usize)> = self
+ .packed_ghost_starts
+ .clone()
+ .map(|start| self.ghost_step_to_next_end(start, 0))
+ .collect();
+
+ let mut any_stepped = true;
+ while any_stepped {
+ any_stepped = false;
+
+ let current_max = current_locations
+ .iter()
+ .map(|(_, steps)| steps.clone())
+ .max()
+ .unwrap();
+
+ for current_location in &mut current_locations {
+ if current_location.1 < current_max {
+ any_stepped = true;
+ let (new_location, extra_steps) =
+ self.ghost_step_to_next_end(current_location.0, current_location.1);
+ current_location.0 = new_location;
+ current_location.1 += extra_steps;
+ }
+ }
+ }
+
+ current_locations[0].1
+ }
+
+ fn ghost_step_to_next_end(&mut self, start: u16, current_step_count: usize) -> (u16, usize) {
+ self.distance_to_ghost_dest_cache
+ .entry((start, current_step_count % self.turns.len()))
+ .or_insert_with(|| {
+ let mut step_count = 0;
+ let mut current_location: u16 = start;
+
+ for dir in self
+ .turns
+ .iter()
+ .skip(current_step_count % self.turns.len())
+ .cycle()
+ {
+ let current_fork: &PackedFork = &self.packed_map[current_location as usize];
+ current_location = match dir {
+ Turn::Left => current_fork.left,
+ Turn::Right => current_fork.right,
+ };
+ step_count += 1;
+
+ if self.packed_ghost_destinations.contains(&current_location) {
+ break;
+ }
+ }
+
+ (current_location, step_count)
+ })
+ .clone()
+ }
+}
+
+impl Turn {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ alt((
+ value(Turn::Left, nom_char('L')),
+ value(Turn::Right, nom_char('R')),
+ ))(input)
+ }
+}
+
+impl Location {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(alpha1, |l: &str| Location(l.to_string()))(input)
+ }
+
+ fn ghost_start(&self) -> bool {
+ self.0.ends_with("A")
+ }
+
+ fn ghost_end(&self) -> bool {
+ self.0.ends_with("Z")
+ }
+}
+
+impl Fork {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ preceded(
+ tag("("),
+ terminated(
+ separated_pair(Location::parser, tag(", "), Location::parser),
+ tag(")"),
+ ),
+ ),
+ |(left, right)| Fork { left, right },
+ )(input)
+ }
+}
diff --git a/2023/src/bin/day_9.rs b/2023/src/bin/day_9.rs
new file mode 100644
index 0000000..f0acc5e
--- /dev/null
+++ b/2023/src/bin/day_9.rs
@@ -0,0 +1,81 @@
+use nom::{
+ character::complete::{i32 as nom_i32, line_ending, space1},
+ combinator::map,
+ multi::separated_list1,
+ IResult,
+};
+use std::fs;
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_9.txt")?;
+ let parsed = DataSequences::parser(&input).unwrap().1;
+ dbg!(&parsed.sum_extrapolated_values());
+ dbg!(&parsed.sum_extrapolated_front_values());
+
+ Ok(())
+}
+
+#[derive(Debug)]
+struct DataSequences(Vec<DataSequence>);
+
+#[derive(Debug)]
+struct DataSequence(Vec<i32>);
+
+impl DataSequences {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(
+ separated_list1(line_ending, DataSequence::parser),
+ DataSequences,
+ )(input)
+ }
+
+ fn sum_extrapolated_values(&self) -> i32 {
+ self.0.iter().map(|d| d.extrapolate()).sum()
+ }
+
+ fn sum_extrapolated_front_values(&self) -> i32 {
+ self.0.iter().map(|d| d.extrapolate_front()).sum()
+ }
+}
+
+impl DataSequence {
+ fn parser(input: &str) -> IResult<&str, Self> {
+ map(separated_list1(space1, nom_i32), DataSequence)(input)
+ }
+
+ fn extrapolate(&self) -> i32 {
+ let mut differential_tree = vec![self.0.clone()];
+
+ while !differential_tree
+ .last()
+ .map_or(true, |l| l.iter().all(|i| *i == 0))
+ {
+ let last_row = differential_tree.last().unwrap();
+ let mut new_row = Vec::with_capacity(last_row.len() - 1);
+ for i in 0..last_row.len() - 1 {
+ new_row.push(last_row[i + 1] - last_row[i]);
+ }
+ differential_tree.push(new_row);
+ }
+
+ differential_tree.last_mut().unwrap().push(0);
+
+ while differential_tree.len() > 1 {
+ let bottom_row = differential_tree.pop().unwrap();
+
+ let new_last = differential_tree.last_mut().unwrap();
+ new_last.push(new_last.last().unwrap() + bottom_row.last().unwrap());
+ }
+
+ differential_tree
+ .last()
+ .and_then(|l| l.last())
+ .copied()
+ .unwrap()
+ }
+
+ fn extrapolate_front(&self) -> i32 {
+ let backwards = DataSequence(self.0.iter().rev().copied().collect());
+ backwards.extrapolate()
+ }
+}
diff --git a/2023/src/lib.rs b/2023/src/lib.rs
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/2023/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/readme.org b/readme.org
new file mode 100644
index 0000000..7ebc827
--- /dev/null
+++ b/readme.org
@@ -0,0 +1,6 @@
+* Advent of Code Solutions
+
+These are various solutions I've developed to the [[https://adventofcode.com/][Advent of Code]]
+puzzles over the years. Each year may have a different style, as I
+grow as a programmer, or set myself personal challenges to make the
+year more interesting.