diff --git a/2020/Makefile b/2020/Makefile
index ede9575..ea0c262 100644
--- a/2020/Makefile
+++ b/2020/Makefile
@@ -1,13 +1,17 @@
-day%.out: out/types.o day%.cpp
-	g++-10 -std=c++2a $(flags) $(@:out=cpp) out/types.o -o $@
+day%.out: out/types.o misc/main.cpp days/day%.cpp
+	g++-10 -O3 -std=c++2a $(flags) -Dcurrent_day=$(@:.out=) days/$(@:out=cpp) misc/main.cpp out/types.o -o $@
 
-day%.cpp:
-	cp template.cpp $@
+day%_test.out: out/types.o misc/main_test.cpp days/day%.cpp
+	g++-10 -O3 -std=c++2a $(flags) -DTEST_BUILD -Dcurrent_day=$(@:_test.out=) days/$(@:_test.out=.cpp) misc/main_test.cpp out/types.o -o $@
 
-out/types.o: types.hpp types.cpp
+days/day%.cpp:
+	cp 'misc/day.cpp.template' $@
+	sed -i -e "s/current_day/$(shell basename $@ | cut -f 1 -d '.')/g" $@
+
+out/types.o: misc/types.hpp misc/types.cpp
 	mkdir -p out/
-	g++-10 -std=c++2a $(flags) -c types.cpp -o $@
+	g++-10 -std=c++2a $(flags) -c misc/types.cpp -o $@
 
 .PHONY: clean
 clean:
-	rm out/* day*.out day*.output
+	rm -f out/* day*.out day*.output
diff --git a/2020/day1.input b/2020/day1.input
deleted file mode 100644
index 3bea509..0000000
--- a/2020/day1.input
+++ /dev/null
@@ -1,200 +0,0 @@
-1587
-1407
-1717
-1596
-1566
-1752
-1925
-1847
-1716
-1726
-1611
-1628
-1853
-1864
-1831
-1942
-1634
-1964
-1603
-1676
-1256
-1906
-1655
-1790
-1666
-1470
-1540
-1544
-1100
-1447
-1384
-1464
-1651
-1572
-907
-1653
-1265
-1510
-1639
-1818
-376
-1378
-1132
-1750
-1491
-1788
-1882
-1779
-1640
-1586
-1525
-1458
-1994
-1782
-1412
-1033
-1416
-1813
-1520
-1968
-715
-1396
-1745
-1506
-1024
-1798
-1870
-1615
-1957
-1718
-1349
-1983
-1387
-1738
-1588
-1321
-1160
-1907
-1861
-1940
-1475
-2004
-1852
-1760
-1608
-1028
-1820
-1495
-1811
-1737
-1417
-1316
-1087
-1803
-1595
-1346
-1971
-1692
-1678
-1330
-1480
-1097
-1898
-1973
-1567
-1733
-1336
-1381
-1327
-1670
-1436
-1989
-1334
-89
-1862
-1715
-1743
-1967
-1765
-1402
-1729
-1749
-1671
-1196
-1650
-1089
-1814
-1783
-1225
-1823
-1746
-2009
-1886
-1748
-1481
-1739
-1912
-1663
-1668
-1314
-1594
-705
-1449
-1731
-1487
-1648
-1466
-1317
-1979
-1799
-1926
-1703
-1656
-1978
-2005
-1865
-1982
-1951
-1892
-1713
-1744
-1598
-1606
-1583
-1895
-1804
-1430
-1816
-1364
-1575
-1918
-1431
-1812
-1471
-1797
-928
-1934
-1156
-94
-1563
-1909
-1453
-1392
-1427
-1819
-1524
-1695
-1866
-2008
-1413
-1698
-1051
-1707
-1904
-1681
-1541
-1621
-1421
-1809
-1576
diff --git a/2020/day10.input b/2020/day10.input
deleted file mode 100644
index 526a28e..0000000
--- a/2020/day10.input
+++ /dev/null
@@ -1,96 +0,0 @@
-133
-157
-39
-74
-108
-136
-92
-55
-86
-46
-111
-58
-80
-115
-84
-67
-98
-30
-40
-61
-71
-114
-17
-9
-123
-142
-49
-158
-107
-139
-104
-132
-155
-96
-91
-15
-11
-23
-54
-6
-63
-126
-3
-10
-116
-87
-68
-72
-109
-62
-134
-103
-1
-16
-101
-117
-35
-120
-151
-102
-85
-145
-135
-79
-2
-147
-33
-41
-93
-52
-48
-64
-81
-29
-20
-110
-129
-43
-148
-36
-53
-26
-42
-156
-154
-77
-88
-73
-27
-34
-12
-146
-78
-47
-28
-97
diff --git a/2020/day11.input b/2020/day11.input
deleted file mode 100644
index 16b4fb4..0000000
--- a/2020/day11.input
+++ /dev/null
@@ -1,95 +0,0 @@
-LLLLLL.LL.LLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLL.L.LLL.LLLLLLLL.LLLLLLLL.LLLLL
-LLLLLL.L.LL.LLLL.L.LLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLL
-LLLLLL.LLLL.LLLL.LLLLLLLLLLLLLL.LLLLL.LLLL.LLLLLLLLLLL.L.LLLL.LLLLL.LLL..LLL.LLLLLLLLLLLLLL
-LLLLLL.LLLL.LLLLLLLLLL.L.LLLLLLLLLLLLLLLLLLL.L.LLLLLLL.L.L.LL.LLLLL..LLLLLLL.LLLLLLLL.LL.LL
-LLLLLL.LLLL.LLLL.LLLLLLLLLLLLL..LLLLLLLLLLLLLL.LLLL.LL.LLLLLL.LLLLL.LLL.LLLL.LLLLLLLL.LLLLL
-LLLL.L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLL.LLL.L..LLLLL.LLLLLLLL.L.LLLLLL.LLLLL
-LLLLLL..LLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.L.LLLL.LLLLLL.LL.LLLLL.LLLLLLLLLLLLLLLLL.LLLLL
-LLLLLL.LLLLLLLLLLLL.LLLL.LLLLLL.LLLLL.LL.LLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL
-LLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLL.LLLLLLLL..LLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLL
-.L.L......LL..LL.....L..L...L...L.L...L.LL.....LL..L..L....L...L....L......L.L.L...L.LLLL..
-LLLLLLLLL.L.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL
-LLLLLLLLLLLLLLLL.LLLLLLL.LLLL.L.LLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLL..LLLLLLLL.LLLLLLLL.LLLLL
-LL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LL.LLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLL
-.LLLLL.LLLL.LLLL..LLLLLL.L.LLLLLL.LLL.LLLLL.LL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLL
-LLLLLL.LLLL.LL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLL.LLL.LLLLL
-LLLLL.LLLLLLL.LL.LLLLLL..LLLLLL..LLLL.LLLLLLLL.L.LLL.L.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL
-LLLLLLLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLL
-.LLLLL.LLLL.L.LL..LLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLL.LLLLL
-LLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLL.L.LLLL.LLLLL.LLLLLLLL..LLLLLLL.LLLLL
-.L...LL.LLL....LL..LL...L..LLL.LL...L...L........L....LL..L...L.....LL......L...L..LL....L.
-LL.LLL.LLLLLLLLL.LLLLLLL.LLLLLL.L.LLL.LLLLLLLL.LLLLLL..LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL
-LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLL..LLLLLLL...LLLL
-LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLL..LLLLLLL.LLLLLLLL.LLLLL
-LLL.LL.LLLLLLL.LLL.LLLLL.LLLLLLLLLLLL.LL.LLLLL..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL
-LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLL.LLLLL
-L..LLL.LLLL.LLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL
-LLLLLL.LLLL.LLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLL.LLLL.
-LLLLLL.LLL..LLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLL.LLLLLLL.LLLLLL.LLLLL.LLLL.LLL.LLLLLLLL.LLLLL
-..LL...LLL....L....L.LLL.L.L...L.LLL..L...L..L..L........L.LL.L.L.LLLLLL...L.L.LL.L....LL..
-LLLLLL.LLLLLLLLL.LL.L.LL.LLLLLL.L.LLL..LLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL
-LLLLLL..LL.LLLLLLLL.LLLL.LLLLLL.LLLLL.L.LLL.LL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.L..LL
-LLLLLL.LLLLLLLLL.LL.LLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLL.L.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLL
-LLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL
-LLLLLL.LLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL
-LLLLLL.LL...LLLL.LLLLLLL.L.LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLL
-L.L.LL.....L.......L.....LLL..L......LL.LLL....L.L.L..........L.LL..LLL..L....LL..L..L..L.L
-LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLL.LLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLL
-LLLLLL.LLLL.LLLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LL.LL.LLLLLLLLLLLLLLLLL.LL.LL
-LLLLLLLLLLL.LLLL.L.LLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL.LL.LLLLLLLLLL..LLLLLLLL.LLLLL
-LLLLLLLLLLLLLLLL.LL.LLLLLLLLLLL..LLLL.LLLLLL.L.LLLLLLL.LLLLL..LLLLLLLLLL.LLL.LLLL.LLLLLLLLL
-LLLLLL.LLLL.LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLL.L
-LLLLL.LLLLLLLLLLLLLLL.LL.LLLL.L.LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.L.LLLLLLLLLLLL.LLLLLLLL.LLLLL
-..LLLL.L...LLL.L......L....L.L..L......LL..L.LL.LL.LL................LL.LL....L.........L..
-LLLLLL.LLLL.LLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLL..LLLL
-LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL..LLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLLL.L.LL.LLL.LLL.L
-LLLLLL.LLLL.LLLL.LLLLLLL.LLLLLL.LLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL
-LLLLLL.LLLL.LL.L.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.L.L.L.LLLLLLLL.LL.LLLLLLLL.LL
-LLL.LL.LLLL.LLLL.LLLLLLL.LLLLL..LLLLL.LLLL.LLL.LLLLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLL.LLLLL
-LLLLLLLLLLL.LLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLL..LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL
-L.LLLL.LLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL
-LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.L..LLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLL
-..L..L.L.LLLL.....LLL.LLL....L..LL.L..L......L.............LL....LL..L.L..L...L.....L.L...L
-LLLLLL.LLLL.L.LL.L.LLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLL.LLLLLLLLLLLL
-LLLLLL..LLL.LLLL.LLLLLLL.LLLLLL.LLLLL.LLLL.LLL.LLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL
-LLLLLL.LLLL..LLLLLLLLLLL.LLLLLL.L.LLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LL.LLL.L.LLLLLLLL.LLLLL
-LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLL.L.LLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL
-LLLLLL.LL.L.LL.L.LLLLLLLLL.LLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL
-LLLLLLLLL.L.LLLLLLLLLL.L.LLLLL.LLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLL.LLLLLLLLLLLL
-LLLLLL.LLLLLL.LL.LLLLLLLL.LLLLL.LLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLL.
-LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLL
-....L..L..LL....L.L.LLL.L.L...L...L.L.L..L..L...LLL.......L.......LL..L...LL..L.L....LL.LL.
-LLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL
-LLLLLL.LLLL.LLLL..LLLLLL.LLLL.L.LLLLL.LLL.LLLL.LLLLLLL.LLLLLLLLLLLL.L.LLLLLL.LLLLLLLLLLLLLL
-LLLLLL.LLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLL.L.LLLLLL..LLLL
-LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL.L.LLLL.LLLLL.LLLLL.LL.LLLLLLLL.LLLLL
-.LLLLL.LLLL.LLLLLLLLLLLL.L.LLLLLLLLLL.LLLLLLLL.LLLLLLLLLLL.LL.L.LLLLLLLLLLLL.LLLLL.LL.LLLLL
-LL.LLL.LLLL.LLLL.LLLLLLLLLLLLLL.LLLLL.LLLL.LLL.L.L.LLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLL.L.LLLLL
-LLLLLLLLLLLLLL.L.LLLLLLL.LLLLLL.LLLLL.LLL.LLLLLLLLLLLL.L.LLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLLL.
-LLLLLL.L.LL.LLLLLLLLLLLL.LL.LLL.LLLLL.LLLLLLLL.LLLLLLL.LLLLLL.L.LLL.LLLLLLLL.LLLLLLL.LLLLLL
-LLLLLLLLLLL.LLLLLLLLLLLL.L.L.LL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLL.LLLLL.LLLLLLLLLLL.LLLLL
-.L...LL..LL....L...L.....LLLL..L....L..LL...L...LLL...L.LLL..L.LL.L.L.LL.L..LL.....LLLL.LL.
-LLLLLL.LLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL..LLLLLLLL.LLLLLLLLLLLLLL
-LLLLLLLLLLL.L.LLLLLL.LLLLLLLLLL.L.LLL.LLLL.LLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLL.LLLLLLL.LLLLL
-LLLLLL.LLLL.LLLL.LLLLLLL.LL.LLLLLLLLL.LLLLLLL..LLLLLLL.LLL.LL.LLLLL.LLLLL.LL.LLLLLL.L.LLLLL
-LLLLLL.LLLL.LLLL.LLLLLLLLLLL.LL.LLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLL
-LLLLLLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL..LLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLL..LLLLLLL.LLLLL
-LLL.LLLLLLL.LLLL.LLLLLLL.LLLLLLLLL.LL.LLLLLLLL.LLLLLLL..LLLLL.LLLLLLLLLLL.LL.LLLLLLLLLLLLL.
-LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLL.LLL.LLLLLLLLLLLLL
-...L...L.L......L..L..L.LL...L..........L..L.L.L........L..L..L.L.LL..LL..LL.........L.....
-LLLL.L.LLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL
-LLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLLL
-LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.L.LLL.LL.LLLLLLLLLLLL..LLLLL..LLLLL.LLLLLLL..LLLLLLLLLLLLLL
-LLLLLL.LLLL.LLLL.LLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LLLLL
-.LLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLL
-L.LL.LLLLLL.LL.L..LLLLLL.LLLLLL.LLLLLLLLLLLLLL.LL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLL.LLLLL
-L..L...L..L...LL...L.L.L..LLL.LL...L......LLL...L.L....L.......L...L.LL.L....L....L...L....
-LLLLLL.LLLL.LLLL.L.LLLLL.LLL.LL.LLLLL.LLLL.LLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLL
-LLL.LL.LLLL.LLL...L.LLL..LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLL
-LLLLLL.LLLL.LLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLL
-LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLL.LLL.LLLLLLLLLLLLL.LL.LLLLL.LLLLLLL.LLLLL
-LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLL
-LLLLLLLLLLL.LLLL.LLLLLLL.LLLLLL..LLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.
-LLLLLL.LLLLLLLLLLLLLL.LL.L.LLLLLLLLLL.LLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLL.L
-LLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.L.LLLLLLLLLLLLLL
-LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLL
diff --git a/2020/day2.input b/2020/day2.input
deleted file mode 100644
index d1612d4..0000000
--- a/2020/day2.input
+++ /dev/null
@@ -1,1000 +0,0 @@
-9-11 p: pppppppppxblp
-2-4 b: bbxbb
-3-5 q: dqfqb
-5-8 g: ggcgggglg
-10-18 l: gllpmlgtrmnllhllrlll
-18-19 z: zzzzznszzzzzzzzzzzxz
-3-6 r: frrhxsnrmgmw
-1-8 n: zkxhnxnzghnm
-11-12 z: zzczzzztlzlzzzz
-4-7 q: qqqbncqqq
-3-4 c: ccvfc
-19-20 l: sltlklljdlzglwllllzl
-6-16 h: dhhhrhvhnhdchfsnhq
-3-7 l: fllllqjlll
-8-9 k: xkkjqklkm
-1-2 l: llgpl
-2-4 x: qkjxvqlv
-5-6 c: cwcccjch
-3-7 n: bnnhnwnqtdnndnncnd
-8-9 n: nnrkmdnkn
-6-9 t: ttttrtltptgvcd
-3-4 h: hhwhhhdhhhh
-7-8 w: wdwvcwwszcwwwwwq
-2-4 n: vnng
-3-13 v: vvvvvvvvvvvvjv
-9-11 c: zcccccccccfcbccc
-10-11 w: wkwwwwwwwxw
-10-12 z: zzzzzjzzzrnzz
-5-6 t: ttttts
-13-19 b: bbmfbbbbbrbbgbbbrbbb
-8-9 d: bdddvkddjbdgdd
-19-20 m: mmmmmmmmmcmmmmmmmmmq
-6-18 w: wwwwwwhwjwwwwwwcwjw
-4-10 t: tttttttttj
-2-7 j: fbdgmfjbjgjn
-7-8 w: wwwwwwcww
-8-12 c: cbmdccbccckjccch
-13-15 f: fpfffffffffffqf
-7-11 t: sbtstwdxjpclwd
-1-3 s: shkkqcs
-7-8 l: bdggzczl
-1-6 g: zgggggglggggggw
-12-16 h: hhhhhhhhhhhhhhphhhh
-8-19 k: htknkhkrkdkhkpwppkk
-8-10 k: kkxkkkbrkgk
-8-9 h: hvhhhhhfhhv
-15-16 x: xxxxxxxxxxxxxxxh
-1-12 b: bgwpjbkhbptsbbb
-9-10 j: pjtjpjpnbjjlsgbn
-8-9 s: sscplbswssssglxs
-14-15 j: jjjhjjjjjjxjjjj
-1-4 q: qnqj
-3-5 d: qpdddqvwbzldf
-14-15 b: bbbbbbbbbbbbbbt
-1-2 t: tdxt
-1-7 g: dlpkvrgjzpnr
-3-11 m: lmnwjjxpfmm
-3-8 l: llglllllll
-2-4 r: gfmrlbmsvqzrmbnd
-5-9 s: srsqssssds
-8-9 v: vvvvmvvvhw
-7-10 d: mddwdvjdcdwdcgddd
-4-7 k: fksjkkkk
-6-9 t: fnrxmlwtt
-11-12 d: dddddddddfmd
-4-5 z: zzdzzzz
-11-13 z: zzzzzzzzzzpzmzzz
-12-14 z: zrgnvcrxkzzzrb
-10-13 q: qpqqqqqrqxvqq
-6-10 g: gglggggggzgggg
-2-8 j: jfqjrdjjjjjj
-7-8 z: hzlvrczjp
-4-5 k: kggjkl
-4-7 m: mpmmmcmm
-13-14 x: xxxxxxzxxxxxxw
-6-7 n: znnnnnlpjcn
-10-16 g: gggzvgggntggfgghggg
-2-17 n: hnchrpvzhkdsnhgcnfql
-2-8 f: fkfpffff
-4-7 s: qwdspspj
-6-7 r: rrrrrnx
-7-8 p: wpppppsp
-8-10 m: mmmwmjmmmvmzpm
-6-7 j: jjjjjncd
-3-4 k: kxkk
-2-4 z: czzmzz
-11-12 t: tttttttttttzkp
-10-17 t: ttttvtltdttrqtztr
-3-6 n: nnnnvvxv
-7-8 v: rvvpvvvpsvv
-1-2 r: nkfgnr
-4-11 c: cccbccclcccc
-7-12 q: qpbqtqkqqqqqqq
-2-7 m: mfmmmmmmxmnm
-10-11 n: bnnnpnnncxrnnnn
-10-14 n: nsnnnnnwljnsnnn
-5-9 b: vcvcblrxbvjbtzbrmbr
-3-9 m: kmmmmxmmkmmk
-2-10 l: llbllgzllnlll
-5-6 d: ddpdwdddxhpdqd
-12-18 j: cjfbjccqgxlczjptqlk
-1-3 z: mzzz
-5-11 m: mdfmmmmtmgw
-2-14 h: nhhnbhghhlhhchsqsr
-3-4 t: jvtt
-2-8 t: tttkxxtsttht
-7-15 w: wwwwfwwwwwwrbww
-1-4 j: rbjj
-8-12 f: ffkhffffcsfzff
-10-12 p: pppcgpqphprh
-10-11 l: lllllllllsl
-7-8 s: svsssssss
-4-5 c: cvjcc
-1-5 v: vcdcd
-5-14 z: zzwkzztzzzzzbzzvzzz
-11-12 s: sssssssssssps
-5-7 b: spmtbpn
-5-6 c: cccccf
-10-12 p: ptpppppppppk
-4-13 f: ffkffffkffflb
-2-5 t: nttqftpnwbjbxmqdqv
-17-18 w: wwwwtwwwwwwwwwwwkwww
-7-9 f: lmrffdbffvfmf
-2-5 h: hhhvzrhh
-10-11 q: qmdrdfqgzql
-3-11 g: ggggggggggm
-4-5 z: zzzrzzp
-5-7 w: wwwwkwwww
-10-11 f: ffffffffffp
-6-9 v: vvvvvvvmv
-4-5 x: wjxxxxxtd
-12-13 p: vppppppppppzbp
-2-7 b: bqntbls
-15-16 p: ppppppppppppzpfxn
-2-3 b: bbcnbq
-10-11 k: kkkklkmkkhk
-4-6 w: wwwdjb
-4-6 b: sczlwbnffbnxbvjbmj
-3-17 m: jmmlmmmgmmmjmmmmmlmm
-6-18 z: zmkwvzkpqzmzdfgdvt
-5-6 q: sqwqqq
-1-3 g: gjgt
-5-8 x: bxcxxzxxws
-4-5 c: rnscvcngbcmpddkcvctk
-7-11 g: ggggglvgggngg
-2-11 l: lsqlzlllllklgfl
-2-9 m: cmqkbmdxp
-6-7 w: wwwwwww
-8-13 q: qbqzqqqqqlqqw
-3-4 n: sfqnnnwvzn
-1-2 w: nwww
-2-4 v: hvvbqgnfl
-14-15 m: gjgdmmmmkmqqcxmrsm
-2-3 z: zzzx
-5-13 q: qqqqdqqqqqtqjqq
-4-5 z: zzzzk
-5-6 t: tttttf
-3-6 z: ztwzczkz
-3-5 l: llpljllllllll
-2-3 s: ssscp
-8-10 d: dddddddwdddddwddg
-2-6 s: sbssps
-1-5 f: ffbfvfxbkmbhvbcfmxpf
-1-6 j: gqfrmjgsgjjhcjhn
-2-5 l: lwvllll
-2-5 z: zkzhzb
-10-11 s: wsblfxvmvsslbhfjtsws
-11-17 f: fffffffxfffffffftfff
-4-5 r: rrrkbrr
-7-10 w: qwqwwwgzrdxww
-6-8 s: ssssssscs
-4-6 q: qbqwqzfqcfgkmzqxb
-6-10 t: ttncfqqtttttp
-2-4 m: bbzcjjqmfvln
-4-7 n: cnqhntshdnnrnrnz
-7-12 d: vmdndkzpmcbd
-6-7 p: tpqpppzpjp
-3-10 r: rgrrrpzrbrrr
-2-15 h: ghbfhbgrtxrshphhl
-2-6 j: pjjjjlj
-6-9 j: rjrjjjwfjn
-10-13 s: sssssssssjsssssss
-1-6 c: crnjccgnw
-6-7 l: qrllgql
-12-13 z: wzzzzzzzzzzfz
-1-2 c: ccclc
-2-6 f: qdlflfr
-4-10 r: drrrrrwrfrr
-5-6 f: ffzffnf
-4-6 p: hkppkbppp
-8-9 r: rrrrrrrrx
-4-12 f: fffffffffffwqp
-4-6 q: qtqtjq
-4-5 w: wwwcw
-2-3 r: qrrr
-7-10 k: nkpgzskkrb
-6-9 h: hmsshhhwhhhhh
-2-18 d: kxqddddqddsmddcdddwd
-6-7 s: sssssssss
-4-8 h: hhhbthhhhh
-1-8 d: dtsbqtrpwdgfdzrtf
-6-7 b: bbbbbwp
-5-6 p: ppnpqjp
-4-13 l: rtqpmllslrlxcblldqtc
-3-4 m: wmmkcm
-4-16 b: qkbvbvgxtlqbgmwc
-4-5 h: hhhlghh
-10-11 f: fjfffffffgjff
-9-12 w: gwnfvwwrwswnqrvg
-4-8 k: pjkkfkbqqzkmfk
-2-8 x: xwxxxxxcxxx
-11-19 w: wwwwwdjwwwrrwwlvwwww
-4-14 w: rwqhwqwwlhpwfwwpww
-7-9 j: vjjjjqdjjjjjj
-15-17 x: kxrmxjvxxxvxxxzxxxf
-3-10 p: pwpxppzgdrrx
-1-5 p: ppppp
-10-19 n: vfnwnjstnnjnqnngnzs
-2-5 m: phsmq
-5-6 m: mmmmxmm
-2-12 f: tftgcmcblzcljsdlbvf
-6-11 b: hbbbbbbbzhwbtbbhmrb
-7-11 j: jjjjjjvjjjq
-3-4 d: dddgddnmd
-11-14 f: fxfffffftqfflffffpf
-14-16 x: xxxxxcxxxxjgxxvt
-6-7 h: hhhhhht
-7-8 h: hhhhhhzphhhh
-5-12 w: wfwwwjzwmpxwmw
-2-7 h: chcjhhqhdlfshxvhz
-7-15 h: hjhhjvhhhhqmhdhjh
-1-2 f: bvhf
-4-6 k: rkctkkm
-5-6 n: nnnnnn
-10-11 j: jjjjjjjcjjs
-4-7 b: bbgbnkp
-2-5 d: dddddjvddxdk
-11-19 z: svzzgzzmzznzzzkcdzzz
-8-9 z: zzzzzgzmz
-4-10 v: vsvvvvnvsr
-5-15 v: mvqvvkjfvwdvvdl
-13-14 s: ssssssqzszssmk
-3-4 w: wbwg
-10-11 d: kdbdcddqddxdddd
-8-9 t: tttttttntt
-2-10 m: mqmmmmmmmm
-3-8 c: bcswcncchpxcxcrccrx
-4-10 q: qqqplwsfxgq
-15-16 h: hhqhhhhhhvhhhhhthhhh
-11-13 s: sssxssswsswsr
-6-7 z: zzzzhvzz
-3-4 j: ktjdxsjjxjtnq
-5-7 w: wwxwlwwr
-2-5 l: llltll
-2-6 m: qmgvtmtp
-11-16 v: vvvgvvlvhvvvvvvvvvgv
-2-4 j: jsnjf
-11-12 g: gdlcvdgzgqpg
-10-12 x: rxxcxxxxxrrxx
-9-12 n: nnnnnnnncdnn
-6-10 j: vjjjpjhjjs
-5-6 d: dcdddt
-3-13 c: cccccvctcbvcvpcccc
-1-7 d: ndddzzdx
-9-10 w: wwwcwwwwfr
-9-18 q: xjhsjqqrqpgprjmqqq
-8-11 b: bprbbbwkbbbb
-4-14 w: wxcwzsswmsqvfjvjzj
-5-6 b: wbbmzbbm
-8-13 f: lpjfsfswfffgfkff
-1-3 x: vxxx
-6-7 x: btxxxxcx
-6-8 r: mwqrrqrrxr
-7-14 h: hhhhjllhrsxtrhmbbpwh
-7-10 f: phqzgfwfrpffpzq
-6-17 d: ddddddddddddxdbdgdd
-5-11 f: fhfnfflfhjvwvfff
-11-12 h: hhgbtnkhhhhh
-2-4 f: fdfgffr
-5-6 w: wwwwxw
-4-9 z: zbzzzczzv
-2-4 k: jfpkc
-3-4 r: kwgr
-4-5 k: kkkks
-5-6 r: rrrdrsr
-5-6 t: tpwnmttclcrtt
-18-19 t: ttbwxtxgfsphgtzzplbt
-1-5 w: tthwwvw
-10-13 z: mzzzzzwzzzzztz
-7-10 r: rzrjrfpdrrrcmmrr
-2-4 w: wwww
-5-9 m: vksmmzdpsm
-1-2 q: qqqqqqq
-1-6 c: pccccn
-3-8 r: pbchhhrr
-3-8 v: bfdvkvdvglvn
-3-6 h: hhhxhshhl
-4-7 m: mkwpkwmtmm
-10-11 g: ggggmggggcg
-1-6 j: jjjjjw
-4-10 z: zvzzxzzgzzz
-7-9 k: kkkkkkkkjkkkk
-4-18 f: vlnfpdzvbqhvsfmhqtf
-8-11 s: sssssksshsssmhs
-2-6 b: bbbbbm
-2-3 h: hhvrlcf
-10-19 c: mccwczqbjdlgfccnrqc
-8-12 x: rxxxnxtfxcxxxpx
-13-14 r: rrrnrrrrrrrrmrr
-4-11 h: mhzstqhhghhhbhhh
-10-11 f: fffffffffpf
-7-8 j: jjjjjjmv
-5-6 f: fhfffv
-3-4 z: zzxtzq
-5-6 v: jvszvzvvg
-9-13 v: wvvgvdvvvsrjcg
-10-11 t: pcttrntttttdthtxst
-1-5 v: vvvvpv
-6-9 q: qfqqqlqqqqq
-4-8 f: ffffffmfkkfzpffffvff
-3-5 n: lnmnnnnnnnn
-1-5 k: kkwmdkflxtqktmcxdl
-1-3 z: tnqp
-15-16 h: hhhnhhhhfhhhhhjhhh
-2-6 m: mmmxmb
-7-12 q: qqjqhqfqwqcqqkqmql
-6-10 s: ssjvrvsgsshsss
-11-15 n: nnnnnnnnnnrnnnj
-14-15 x: xxxxvxxxxxkxxxzx
-9-14 b: bbbbbbpbbqbblbbbb
-4-12 h: knthjdhlrxtpjwhnhn
-8-9 v: vvvvvvvjjvvvv
-2-3 d: dktdvd
-6-8 z: zzzzzzzx
-10-13 t: jrjfklzstpxwt
-4-16 n: mngnnqnbnnwnqrdgk
-3-5 v: vhqvvn
-1-4 t: jhtq
-8-11 f: qfffffqfffff
-14-15 x: xxxxxxxxxxxxxxx
-2-12 s: scsstsssmcssswgsw
-8-13 t: tttttttqttttt
-8-10 d: ddddddvdfbq
-9-15 d: sdqpqddddjrdjnj
-17-19 c: cccccdldcccpbccxgcc
-6-14 v: lvvvvsvvvvvvvp
-16-18 p: ppppppppppvpppppppt
-1-3 v: vkvtzlvrdcvzplznltqs
-8-10 s: sssssssssns
-1-3 w: wcwfwxnwwp
-8-10 v: kvvvvvvvvvkvvv
-7-11 s: shsssssssns
-9-10 w: wwwwtwwgkwww
-1-2 x: vxxn
-4-9 g: lkgggrcgpg
-1-5 n: fjrnn
-4-6 x: xtxzxxx
-18-19 z: zzzzhvzhzzzzzzzzzsz
-15-18 p: ppppppppppppppsppppp
-11-14 h: rdhhhhhhhghhhrh
-3-9 v: vvvvvvvvqvv
-4-8 p: bbpmjpplp
-1-15 n: qndxnnsmnrnsnnnnn
-7-9 c: cccccctccc
-2-6 m: xwfnmmn
-4-16 t: nbttltzvhqjtcgbtttkt
-7-8 r: rrlrrrrsrbr
-3-5 h: hhghh
-3-4 m: mmmxm
-15-16 k: fckzkjskrkkkdkkl
-5-6 c: cbsxmh
-1-6 x: fxxxxxx
-5-12 d: wdddqrdkwkmdfwd
-3-10 s: smsqncrsjjdmjdlsls
-6-7 k: vkkskkjkwkrkkk
-9-17 z: qwzhqgrnvzzbzlhjz
-5-6 w: dwwwwp
-5-8 n: ncvgqnvn
-5-6 v: vvnvvwvv
-3-4 x: dxxxsbsxx
-8-12 t: ttgtshxfmzlc
-10-17 x: xthkjfxlktkbhdxzx
-5-8 q: qqtqqqkqq
-4-10 d: ndddgxvzswlsgdpnrc
-8-11 h: bgcfhhrkhhb
-16-19 g: qgdmbghrjhgcvgwpggg
-3-5 s: fbsqqszkdkqzw
-9-10 h: hhhhhhhhdhhh
-15-17 b: bbbbbbbbbtbbbbzbbb
-11-14 q: qqqhqqqqqqqqqsq
-4-18 r: rhhrrpghwbqfznflrrr
-14-15 l: lllllllllllllrl
-8-14 s: nsfpsrsssnffssjss
-17-18 k: kkkkkkkkkkklkkkkck
-1-12 c: cmnccccccccktcc
-7-14 p: pppppphppppppp
-1-2 j: jtjq
-2-6 w: wwpxxrwwwdwwh
-5-12 p: zspwppnppdghqplnj
-3-5 h: zhqphfth
-1-3 q: xqqq
-4-9 r: qrzrfgpnbj
-7-8 q: qqqjqqqcqw
-4-6 m: mmmmmwdmm
-4-6 s: sqcssgnsrrddgshvbcs
-2-6 m: mmsgtr
-3-9 v: wvwvvvmvv
-3-5 j: jcjvtgjjjxvjjgjbhj
-4-6 f: qsffzgff
-8-9 x: nxxbxwfrxx
-1-7 m: mvmmmbmmljmg
-5-8 d: pdcdqdddwdl
-1-3 m: mmgns
-19-20 r: rrrrrrrrrrrrrrrrrrxr
-1-4 h: hpghbhkhhr
-5-9 x: xxxxtxxxxxxxxxxx
-19-20 p: qvwdwnssfckjczggpghp
-8-12 k: kkkkkkkfkkkkkkkk
-10-12 b: cbbbbdbbbqbkbb
-2-8 n: nkkpnprnfcnnwsmndqnn
-11-12 d: ddddddvddddvd
-4-8 j: jjjjjjjqjjl
-1-3 l: lvdlslllhllsg
-12-15 j: jzjjjjjkjpjjjjqf
-6-9 s: sssssssssssss
-1-2 z: xzzcnjrzzzzzzz
-5-6 h: hhhhhh
-7-13 x: xxzxvsmxlbxpxz
-2-4 d: dpnddbdfdm
-9-16 n: nnnnnnnnknnnnnnr
-4-5 n: nnnvnn
-13-16 p: vppppppppppppppz
-3-6 w: wwtwww
-7-9 n: nnxnwntnnn
-4-12 q: mqcnsrvqqzgqkwz
-3-4 t: dwtj
-9-12 r: rrrrwrrrrdrcr
-8-9 w: wwtcwwjhwwww
-6-8 w: wwwwwwbgw
-5-15 f: pgflfgfbbvvffkfkmw
-10-17 s: ssssssssshsssfsssss
-19-20 m: mmbmxfmmbzqhmxmxmmmw
-11-12 d: ddddddddddsd
-13-14 f: fffffffffffffdf
-1-6 n: nnnnnnnn
-11-19 x: wmxxbxxkxxxpxxxxxxc
-2-3 z: szgkqvmzwztdcxtvn
-16-20 z: zpzhwdtdzhvgcpdpzzzz
-15-19 p: ppmpcxppppprsgnpppg
-4-5 x: rrxfxxxqx
-1-2 q: rqdwn
-4-6 x: pkfxqxxfxbk
-13-17 c: ccccccccccccncclc
-5-7 z: zzzzvhz
-5-6 r: rrrnrl
-2-5 g: mfgkgxhckg
-3-6 c: cnmcjcccdccccv
-7-11 t: dttttttrttxtt
-6-9 p: ptlfppppcvsp
-3-5 g: ggxkwtj
-5-16 x: phzxlbhqxgxzwjwkkxp
-7-8 s: wsssssmsn
-1-7 m: pmgrmkmmnnm
-15-16 n: nnnnnnnnnvnnnnnln
-6-8 t: ttzttftst
-5-7 g: ggggggggggg
-13-16 d: ddddddddddddpddbdfdd
-13-14 f: jclffflwlffbfvffffbn
-3-4 j: xjzjjjr
-8-14 n: nnnwknndnlnlnn
-6-7 s: sxsssnzs
-6-7 r: rrsprrjrcrb
-10-11 w: qwwcwqzwrbq
-7-10 b: bbbbbbzbbbb
-5-6 d: ddddkd
-16-17 d: ldldddddpdldldddd
-5-14 w: zdtwxnxwhwwpww
-6-9 q: mqqxqsqqq
-2-11 g: gpggzvgggkgmcmt
-6-14 k: kfkkkxkkkkkkkjkk
-2-3 m: zfmm
-13-17 k: kkbkkkkmkktkkkrkk
-4-6 z: tzprqwzzcpj
-3-4 w: gblwcxwllzpv
-3-5 d: ddcddd
-9-13 r: rrfjmrcsrrwvrrk
-11-17 m: dgwrmqjmclmczrlwf
-1-4 v: vvhvvv
-10-13 c: clhccbcvbvcfcccqccc
-11-13 s: sssssssssssss
-6-7 k: skkckkk
-2-5 m: mfffq
-3-5 x: jxbxx
-1-2 c: ctcc
-5-8 q: qqqqgqqqq
-11-13 q: hqqbqqqqqqbqqqqqbk
-9-11 q: qqqqqqqqqql
-15-20 q: qqqqqqqqnqqqqqqqqqqq
-5-7 g: gzngbvggmlzzrgx
-2-10 n: zjknggzlvnxtbwnhmf
-2-13 c: cccccccccccct
-4-8 c: cccccccbcccc
-3-5 k: kdkkz
-8-10 h: nchthhghhjhjh
-10-11 l: wllllllllplxllnjj
-14-17 q: qqhqqqqqqtqvqcqqqrq
-5-9 d: dddddddrz
-13-14 z: zzzzzzzzzzzzzm
-7-9 t: tttttctwlttt
-6-13 w: dwcwdtwrwccwwl
-10-11 h: hhhhhwhhmmhhhh
-7-9 t: tttttjtttt
-12-17 n: nnnnknnfpnnwncnnjn
-5-6 c: zccccc
-11-13 s: ssssksxssssss
-9-17 q: qqqqcfbqrqqcqzqqlqqq
-3-4 m: dmml
-4-6 v: slvvvln
-4-5 n: nnbmnn
-2-7 h: whhhhhjvfhhh
-2-5 s: slhss
-4-5 q: zbhqhqgqdq
-2-6 p: pjtxqp
-7-9 h: hhhhhhkhh
-7-8 w: fgvwcwws
-10-13 d: ddddxhdddddvhdddd
-7-16 m: mmnznmmwmwrmqzrqbmpr
-12-13 v: vvvvvvvvvzvvjv
-18-19 g: mztkzhgmndnffztwqfg
-7-8 j: jjjcjjvjjjjpjjjjjjj
-7-10 s: sssssssssz
-18-20 s: sssssssssssssssssssg
-1-4 r: trrrr
-2-16 r: mrrrrrrhrcrrfcpqrh
-5-13 n: nnbljfchnnnnnj
-1-6 v: vvvvvmvv
-7-15 q: szqhbkqxppcbkxmc
-9-10 l: gllllvllsvll
-1-4 m: mxldw
-5-9 x: xxxxxxxxj
-11-16 t: ttttttttwttttttfl
-7-12 j: sjjzpjjjjljhj
-1-5 x: wmplxj
-2-6 z: zzxzzrzqplrh
-4-6 w: cqbwwbww
-14-15 l: llllltllllllllw
-3-4 m: mhmvvz
-3-4 w: wwmw
-1-4 c: ccchpccc
-6-10 p: pppppppppqprbppppp
-9-15 h: hhhjcrhhhhhhchhjht
-8-11 g: gggggggkggggggggg
-4-9 h: hhkqxhhhlh
-7-8 f: mlfdfrmfbfttmffqfff
-7-9 t: nttttttvsn
-6-9 h: hhhhbhvhph
-4-5 f: hhcdf
-3-4 k: kfxkcr
-1-4 z: zzml
-3-5 f: cjjffbzffqfsbm
-4-5 f: ffdfh
-6-17 h: hhhhhhhhhhhhhhhhrh
-8-10 d: qdddzddddzdd
-7-8 j: nfxxthqj
-2-4 n: nnnc
-3-5 v: vlvzx
-6-10 n: nnnnnnnnns
-11-13 q: bzhwhbvwqffzs
-3-6 c: gccmcc
-2-5 m: xmbgm
-2-11 g: tgztmzzbgjzc
-2-5 j: jsjbj
-3-4 v: vvljvvv
-3-6 p: pxwcnwmp
-2-7 j: ndjnzmjklxqwpkpnwb
-1-20 s: slssswsnssscgbssxsdg
-3-4 r: rrrfjc
-5-16 t: ttntptttsqtttpwtgbt
-3-4 g: fxgg
-13-17 l: llltllllllllvllllvrl
-5-8 q: vxfpqhqd
-4-8 c: cvqcwkccp
-5-11 x: kxqkghvxxdqfwxxkxx
-4-5 t: tttht
-8-11 n: mnnpnnpsnqdknnvsh
-1-4 g: gggngpdggv
-5-6 s: ssssss
-4-7 d: mddfddk
-7-8 f: fffffffb
-4-11 x: cbmcvvvvxgn
-14-16 d: vdddkddpddddllrddddd
-8-9 h: qhhhsnxhjmzhlhdjxhf
-5-13 f: fxfhlqsffxfgwpcz
-14-16 g: jggggnngggngggggjggg
-1-5 z: rzgzt
-3-6 f: fffgrv
-3-4 w: zwwtwdw
-9-12 g: dkmhhvhjgsvqglbrr
-4-5 g: gbrtx
-1-5 r: xrrrr
-2-5 d: ddddddddddddddd
-4-5 j: jjvjz
-2-4 b: blbbbt
-16-17 b: bbbbbbbbbbblbbbzbc
-8-13 l: lljlqlkslqllllll
-6-15 g: wgfgzggggggbtch
-4-13 w: cwvbtpnjdkvww
-8-10 x: xtdxxxxxxhxxx
-3-6 p: pprpppp
-15-17 p: ppppppppppppppkpppp
-1-3 w: wnwpwwbllb
-3-5 m: mxqdq
-13-16 s: hsrsssqssssscgssss
-1-2 c: zccccm
-5-8 r: rrrrkrrm
-5-6 j: njjkjjsj
-5-10 r: rrrrhrrrrr
-5-12 x: xmxwxnmxsldlrpgxxxc
-4-6 z: ztzwfzj
-11-15 w: wwcwwwwwwwzwwww
-5-7 c: cpccccnd
-1-16 q: qqvhqhnpqscqqldqbzh
-8-9 s: kfpdswzssssqssscms
-2-16 l: hppbqldllnlljvflltl
-4-12 c: cccccccccccpccc
-5-6 r: rrrrqb
-11-12 f: ffffdffffmfdkff
-5-6 k: lhkkkf
-12-15 z: bzzzzzzzzstzzzz
-5-13 c: kgsscwsfzcbwchwk
-11-18 m: wmmjbmfpvmmmthfwpsxf
-7-14 m: mmmfmmtqmmmmmmmmrc
-14-15 g: wbqfggngtbqvpqp
-10-11 k: kkkvxktjtkbjkkkk
-2-4 b: wbtkp
-4-10 v: vvvvbffvmtvvz
-6-8 m: vtvgmmbc
-1-7 d: hddsnzd
-2-3 d: rndxchftldndc
-2-11 z: zzcwbxkzzqzzp
-5-6 q: wqqqjq
-9-10 d: ddddddpdcdd
-1-12 g: ggfggggggggbn
-4-5 v: vvvrvv
-12-14 r: rrrrrrrrrrrqrr
-6-10 s: sssshvssss
-7-10 g: gqgzgggksggggdqghs
-8-9 c: ccccccccf
-13-18 j: gfjjjjjjjjgjhwjjch
-11-15 m: mmmmmmmmmmmmmmm
-2-4 s: ssqsr
-7-8 v: vxxvbfdgvvgvtw
-2-7 x: xwxxxxx
-3-5 p: pzppfp
-1-2 z: zfzwpzpxzc
-6-7 r: vrrxrrnrb
-3-4 f: nvftvrjsgxszkfsffg
-1-5 w: kndqwltttskcwtzqt
-1-9 z: zzzzzzzzzz
-10-11 v: vvvvvvvvvvv
-1-5 m: gmjhm
-7-11 j: sdjjpjjjdgnccjjjsq
-1-6 m: rrmcmmmmmbm
-1-6 n: nlclfggwnm
-3-7 s: clfnmssns
-3-7 m: tqjmmmx
-13-14 n: nfnvkntnlnnnxfwlnnnn
-3-4 p: xphp
-8-9 n: nnnlnnnzn
-11-12 h: hhhhhhhdhhhhh
-1-4 p: pjgsphp
-3-9 f: pvfnfmfrcffffjf
-15-16 d: dddddddddzddldgdd
-2-4 b: bvztgnzbpr
-3-7 w: wgwhmpwwwlwzzhwnv
-5-9 n: nmznnvnnsznnw
-4-6 f: zqffsnffdlbkt
-6-7 s: sssssss
-2-5 q: kqlqqmv
-11-14 q: pjqrzjfdgmqzpd
-17-18 s: sssssssssssssssssj
-8-12 x: zxxxpxxxxxxt
-2-4 h: hqhhhwfshp
-1-9 b: qzwgfbzjvt
-8-10 c: cccccccccn
-3-5 n: nnnkwn
-4-6 m: zmmhdzmmx
-7-13 v: vvvvvnvvvvvvsvv
-1-12 z: zzvzxzfzzrzm
-6-11 p: ppppplppppvppppfp
-1-5 s: sjsss
-2-19 w: wwwwwwwwwwwwwwwwwwcw
-5-6 k: zxlkrkbcrcwkdqtkkw
-1-4 w: hjjbzqwnpjrbglkr
-8-9 n: sznnljnqn
-7-13 k: dwkpnjkdkglnm
-14-20 x: xzxrxxsxxxxxxxxxxxjx
-4-7 w: rtrwdvww
-14-18 m: mmmpmmmmmmmmmlmnmq
-3-4 z: zzxz
-8-10 z: zzzzzzzzzjz
-11-14 v: vcvwvxvcslbvvhv
-4-8 j: jgjjbrjhp
-5-6 d: dddddm
-4-5 n: nnnzn
-15-16 t: ttttttttttttttnc
-5-8 b: bbtbspvbbgllcrgxd
-8-9 w: wwwwwwwqw
-3-5 j: vbjmxwjgjfrzttznwc
-12-14 l: llllllllllnglzlwbl
-2-4 f: ntffj
-2-4 c: gvccrcc
-19-20 w: wwwwwwwwwwwwwwwwwwpw
-1-3 k: klwgkc
-3-9 s: qsmlssskpsbsscs
-8-9 j: jjjjjjjdj
-5-9 s: bszlpsssss
-13-14 l: llxllhlllllllllll
-1-6 s: ssssscs
-7-8 v: pbvptdvv
-10-15 v: vvvvvvgvvvvvvvcv
-4-5 k: kkcskfldskdc
-13-14 v: vvvvvvvvvvvvvgv
-3-7 n: hnjnnnnnsnfp
-3-8 m: mtmjhrzzllqml
-9-11 w: wwwwwwwwwwxw
-10-20 g: pkvgkfvmxgkpjjhtqvcg
-8-11 w: wwwwwwzwwwdw
-5-7 r: rrrrrrb
-2-7 b: sbldlwvcb
-10-17 v: vvvvvvqgcvvkdvsvvjv
-4-5 d: tkddnddzqpdfdddd
-10-12 p: npppppppppfm
-1-12 t: wttttttttttttt
-4-5 f: qfffz
-11-14 p: ppppppppppppgvpcp
-6-8 w: qswwwrwwmww
-9-15 g: txgchzlpgggdhgggbg
-2-10 h: hthhzhhhshhh
-5-8 l: lllllzkk
-17-18 l: nlllllllllllllllvll
-3-6 c: zdwcjcccdqct
-8-17 m: mmmmmmmmmmmmmmmmjm
-10-12 c: ccccncrccccb
-4-12 j: jjjbjjjjjjnwjj
-2-6 h: chbhhfc
-5-6 c: cccpncc
-6-7 m: dmwmkmphmmdmm
-6-7 k: rxwkmkv
-1-5 f: fzgfl
-4-7 x: dxkmxhb
-1-5 f: hhfzfpfffffsff
-1-7 s: sssslsvv
-3-7 w: wgwwwsh
-12-15 d: mdsdbkltdvthvfjdddn
-16-18 x: xxxxxxxxxxxxxxxxtl
-5-19 x: xwxxxxxxxxxxxxxxbpn
-3-5 h: hhrfh
-8-10 g: ggggggggggkgg
-3-8 c: cccccccmc
-5-7 r: wrrrxrrr
-7-8 p: phpprdslbpxprpg
-17-19 z: zzzzvzzzzzdzzzzzzzg
-2-4 x: kxxxxxm
-2-11 w: gwwzpwwwwwplrqfh
-6-9 t: qtcttttgf
-9-12 g: gggggggggggsg
-3-6 n: fzmnxb
-5-9 x: pqxxxwdtn
-5-6 j: jjjjjkq
-10-12 h: hhhhhdhhhzhh
-1-4 g: gskgk
-3-5 c: ccccj
-1-10 m: wmxsgmzmrzmrmmmjmmct
-5-10 p: lmpppvptdgpjpwfwpp
-2-4 z: bzgm
-6-7 d: ddzdddj
-3-7 r: gchrfwr
-4-7 k: kkcvkkkkkk
-8-12 t: tpwtttctvtttftpt
-11-12 c: ccccccxcdncbwcc
-2-10 p: jwwxlppppppnpn
-9-16 w: chmwwwwwjwrwjwzjww
-1-6 j: jkqjjbj
-5-8 k: kkkkkklhkk
-3-5 q: qqqqc
-16-17 x: xxxxxxxxxxxxxxxtg
-4-9 f: fmfkcfffffkcfmfhnzf
-5-6 z: zhzzlz
-4-17 k: kbwmwvkkvvhxkkkckqvk
-3-5 d: dddmmdt
-4-10 m: mmmmmmmmms
-5-6 g: ghgggpj
-1-5 c: cccck
-3-7 z: zzjzzzzz
-2-7 v: xrprnvvtsrgsk
-1-5 s: sqqsn
-3-5 j: xwpnj
-5-7 v: vvvvvvqmv
-4-5 j: jjjjzjjjjljjc
-2-4 h: hghh
-3-5 n: fnnpc
-16-20 d: dddddddzdddddddpdddd
-3-4 t: tnpt
-2-7 f: fxffffkff
-6-9 b: bbbhbbwhbbrblmtb
-7-10 m: msmxmrnmrmmmm
-3-4 r: rrzrr
-7-8 m: mgmmmmjmm
-2-3 l: lmll
-2-6 h: cngphhhbfpvvsgrqhhzq
-6-8 d: dddddddg
-12-15 p: vfjxwpcpdvpnjwp
-12-17 m: mzfmmsvfxmqsmcfjmwjb
-15-19 b: bbbbbfbbbbbsbbmbbbbb
-7-8 n: qdnjnnnpvmfnn
-6-8 l: llllllll
-3-4 n: nnbdh
-11-12 w: hprdhfrpvcwbgwjcw
-2-7 r: jrfrbjrhrw
-1-6 v: fvzknvvv
-10-11 t: tttstdhttqrttt
-5-14 f: fxffnffffnfffff
-10-13 q: qqqqqqqqqjqqqqq
-1-5 v: tnvfvxvjvbvjk
-4-5 c: ccccpc
-4-6 t: tttttktttt
-1-2 r: rwrsq
-11-12 c: cccggjcccccr
-11-16 g: gwggggggggqggbgggfg
-12-14 b: bbggzhxsjjsbsf
-5-7 r: kjdwpfbmcptrslrrr
-1-2 l: lvbl
-6-11 c: hsksgzhccbccbdfnzqcv
-6-7 m: gmmmmmc
-1-2 h: hhhh
-1-3 g: rggg
-4-8 z: rzzzzfbwzxkzzz
-3-6 w: wwwwww
-3-4 g: ggwtg
-9-11 v: wxfltmvjvjm
-2-4 l: llck
-2-3 m: mmkgpdwzdm
-2-5 d: bdjhdhjldzh
-10-12 j: jnjlmjjjjpcdkjjjx
-3-9 q: qqzqqqqqqqqqq
-4-8 d: ddzwdpddd
-3-7 m: mzmbsmcjgmpmmdkmr
-8-13 q: xrxvgqdvvmjhhgdfz
-3-12 z: zzjzzzzzzzzzzz
-5-10 k: jkkkmkkkmkk
-6-7 m: mmllmmtm
-17-19 c: ccccccccccccccnckccc
-6-9 w: wwwtbrwwwxww
-7-9 d: wfdkwddsdsmdbswv
-11-12 g: ggggggggggbgg
-13-14 j: prjjdjjjjjjjcjjj
-3-5 j: jjlljv
-3-4 h: hrlh
-6-7 l: hplnxlsjnwxzllllljcj
-4-5 g: gfgml
-4-5 z: zwkznzn
-4-11 n: stnzhznnfnqcnn
-2-5 h: hmzhh
-4-6 w: wwbwwc
-4-11 w: vmwwrxpkwcp
-4-8 t: thxttstmtbstcvjtlflh
-6-8 v: hvvkvvhfm
-16-18 b: tbbbbbbbbbbbbbbbbr
-8-10 f: fffffffcfl
-13-15 r: rrrdrrrrrrrrrbr
-8-14 t: ztstxttttttttwz
-8-12 j: jgjjjjgjjjjx
-5-6 m: nmqjdmgfqqmcmmvndztl
-2-6 v: vwvvvvtv
-15-16 l: llllllllllllllll
-3-10 q: qqqqqqqqqxqq
-8-9 j: rggxhvjjjk
-1-3 p: pqhp
-4-11 z: nkjddzczjrzktvnckmg
-5-12 r: tfrdrswgwnbc
-8-13 r: rrrrrrrrrrrrrr
-13-18 x: xxmxvxxxxxxxhrxxxc
-7-8 z: zzkzzzzw
-4-8 m: mmmqmmskqlmmgm
-1-3 w: bmwg
-1-4 z: vzzzzzwz
-3-4 d: dqdw
-2-9 z: hzhqpndtllsw
-10-13 t: tttttttttttbjb
-12-14 r: rrrxrrsrrrgfrrr
-12-19 g: hdxnlgglxwrgzkggcwp
-3-4 x: qxjx
-1-2 r: rrpdlqhcnwwr
-5-11 c: vdbzvccdccldsjcq
-4-6 k: kxkwkk
-16-18 k: kkkknkkkkkkkfkkkkx
-1-2 q: tqtghddbk
-7-8 g: ggcgggvgg
-13-19 d: ddddddfjdddddfddddd
-9-15 z: pzhzzzzzqpzzzzzz
-4-5 l: lclld
-2-15 r: jrrmtzrxlczbttrcvkn
-3-5 z: zzzzc
-15-16 k: kkkckkdjnkkkkkkkkk
-11-13 m: mmmmmmmmwmmmzm
-8-13 p: ppdpptppdppxkppppppp
-1-3 g: gszcmgjg
-5-11 h: skbchhdbnphpbfl
-4-7 d: prdjctk
-15-18 f: ffcffffffffffzdffc
-7-11 g: npggtwgzgtgzhx
-12-14 m: mmmmmmmmmmmpmkm
-10-11 b: bbbbbbbbbbb
-3-16 k: kgxtvmlgpkptpghkb
-4-6 m: zcwmzmvqvgmmsxj
-6-15 m: mzmmccmmlmmrmlnl
-12-13 x: xxxxxxxxwxxxz
-4-5 d: mhvdtxfklzdpgdqdpqhd
-5-10 g: nghgggggggqg
-7-9 k: kkkkfkkkwk
-6-7 c: cvcvczncn
-10-11 t: tttqttttttv
-18-20 h: hfsqhkwfhttgfhmbghhx
-6-7 v: vgvvvwz
-3-4 z: zzzj
-3-5 d: dhqjnhgldtdzx
-3-4 b: jbrbbbbbbbblwb
-12-15 g: gsgfdfksrggqvgggjgt
-6-11 p: pmppnpqpdppdpppphpf
-13-14 z: zzzzgzbzzzzzgzz
-4-12 c: ccjcrvcnwccwctcczcp
-10-11 c: szcccfccfpcchqs
-10-14 l: lllllltgjlnlbprlll
-12-17 z: zhzzzxzpzzzfzzzqznz
-12-15 l: llllllllmvlvllfll
-7-12 c: ccccccncccccc
-1-5 m: mhmmzmm
-11-17 r: rrzrrwrrsrcrsmdrvrr
-4-5 w: fwwpwfw
-7-8 n: nnnnnnnk
-3-18 n: rxhzsscgbnmzpvbqmzf
-4-11 k: kkkkkkkkkkkxkkskkkdz
-10-11 c: cccccccccckcccccc
-8-15 r: zrrtfrjrrrrrjrrrrrr
-15-16 h: ghgvlhwgqslhhhhxmp
-3-5 f: ffffqf
-3-8 s: bssmfsgspxssgjhsjdv
-3-5 q: bfdhq
-4-7 k: qknkkkd
-6-9 b: bbbtbnfbbb
-12-14 x: xxxxxxxqxkxvxxwxxcw
-3-6 c: chfckc
-3-8 h: kzkhgrffz
-10-16 f: fffgjfffsvffdzfhfzff
-1-3 r: rgcr
-16-17 x: xxxxxdxxxxxxxxxxl
-6-11 j: rsjcjjcbpchkvfjpml
-9-10 s: sssqvsssjsss
-17-18 v: vvvvvvvvvvvvvvvvvv
-3-5 t: jtmtgtxxhzskzk
-1-6 t: ttqkvdgs
-13-16 q: qqqqqqhqqqqqzqqjqq
-10-11 b: bbbbbvbbbbw
-6-7 w: sgwmqwgwtbrllf
-10-11 f: ffffffftffff
-12-13 w: wwwwwwwwwwwzt
-18-19 t: ttttttttttttttttttt
-1-5 h: zghhr
-1-2 v: dvjnctwvlp
-1-2 j: jhzkzjh
-3-6 h: rhhbhhh
-2-4 d: dddrd
-17-18 s: ssssssssssssssssns
-1-8 m: smmmmmmmm
-2-4 s: dcfsbzwqq
-11-12 d: vnldqthkptgkkfdmtw
-8-12 p: vpppzpprppppp
-6-8 q: jqqqsphqjwrqj
-8-10 k: ktkkkkdkkkk
-4-12 v: nvvwvvvjzvvvv
-5-6 z: zzzzzt
-1-5 w: xwwwwwwww
-11-14 p: pppfbpppkpftdpkpgpp
-2-3 v: zrlv
-2-4 f: fbwff
-5-6 s: ssssmn
-11-12 z: zzwztpzpjzhz
-5-6 c: cccjcc
-4-6 v: vvvgpvcpwv
-5-6 j: jnzcpjnzjjcpsjfps
-12-14 m: tpzwjjgpbbdmgxgphd
-13-15 n: nznnnncnnnnnnnf
-8-11 w: qsxwnlhwwxw
-6-9 t: ltbdttnst
-10-12 t: hnjdfgrhtgkl
-2-4 d: dbddddc
-13-14 g: gggggggbgggmgmgm
-4-12 r: rrrzrgkrrrrkr
-14-17 n: nnhnnnnnnnnnnnnnhnn
diff --git a/2020/day3.input b/2020/day3.input
deleted file mode 100644
index 6727b2a..0000000
--- a/2020/day3.input
+++ /dev/null
@@ -1,323 +0,0 @@
-.....#............#....#####.##
-.#.#....#......#....##.........
-......#.#.#.....###.#.#........
-......#...#.....#####....#..##.
-...#............##...###.##....
-#.....#...#....#......##....##.
-#...#.#....#..#..##.##...#.....
-.......#..........#..#..#.#....
-.#.....#.#.......#..#...#....#.
-#..#.##.#..................###.
-...#.#.##...##.###.....#..#...#
-..#.#...#............#.......#.
-#..#.#..#.#....#...#.#.....#..#
-#......##....#..#.#.#........#.
-....#..#.#.#.##............#..#
-....#..#..#...#.#.##......#...#
-##...#...........#.....###.#...
-..#...#.#...#.#.....#....##.##.
-....##...##.#....#.....#.##....
-#........##......#......#.#.#.#
-....#.#.#.........##......#....
-.#......#...#.....##..#....#..#
-....#..#.#.....#..........#..#.
-..##...#..##................#.#
-.....#....#.#..#......#........
-........#..#.#......#.#........
-.....#.#....##.###....#...#....
-...##.#.......#....###..#......
-............##.#..#...#........
-#..###..#.....#.####...........
-.......##.....#......#......#..
-#........##..#.....##.......#.#
-#.##...#...#...#......##..#.#.#
-......#....##.#.#...#...##....#
-#..#....##.#......#.......##...
-.#..........#..........#....#.#
-#.....##......##....#..........
-..#.#.....#.#...#........#.....
-...#........#..#..#.##..##.....
-......###.....#..#...#.###...##
-.##.##.......#.......###...#...
-#.#..#.#.#....#.....###..#...##
-......#.##..........#.......##.
-#..#.#.........#.....##...##...
-..#...#....#....###.#......#...
-.....#..#.######.....#..#.#....
-..#.#.....#.....##.#....##.#.##
-...#.#.#....#....##..#..#.#.##.
-...........#.#...#..#..####....
-.........#####.#.#.#...#.##.#..
-.......#...#......#.##.#.##....
-....#.....#.....###..........#.
-.#.###....##.#..#..........#...
-#...#.........##.....####....#.
-##....##...#..........#........
-...#.#.#.#....#..........#.....
-.......#....#......##.......#..
-.#.#..#.........#.#.##....#....
-..#.............#..##.#.##..###
-.#.##..............#..#..##..#.
-..##.#..#......#...##..#.##...#
-......#..#....#....#....##..#..
-...#...##.............#..###...
-...##....#.#.##........#.....##
-....#.#.......#..###..#....####
-#...#...##..#.####..#...##....#
-.......#..#.##..#...#.#........
-###.#......#..##..#......#.##..
-#....#............#.....#......
-..##...#..##......#..#....#....
-.#..##...#....#.#...#...#..#..#
-........#....###...#..##..###.#
-.........#....#....#..#.#.#...#
-.#....###.##...#.#...........##
-..#..#.#..#.#.##..#...##.......
-##..#.#.#....#...#..#..........
-#..#.......#....#..##...####...
-............#.#..........##.##.
-#...#..#.#....#..#.#....##.....
-......#...#...#.##............#
-#.....##..###..#.#..#.#.##..#.#
-#..#.#..#......#.......##.#....
-##..#.#..#...#......#.##...###.
-.#....#..............#....#.#..
-..#.#..##....#....#..##........
-.#.#...#..#.....#.#..##........
-.....#..#.#......#....#.#..#.#.
-....#.###...###.#.#.....#......
-...........#.#....##....##.....
-..#..#.##..........#...#...#..#
-.....#.###.#..........#........
-....#....##........###...#.....
-.#.....##.......#....#..##..###
-#.....#...............##......#
-#..#.#..#.#.#.....#.#...#......
-.##.###...#....#..........##...
-.#.......#.....................
-.#.#....#...##..#...#...##.....
-.#.#...#.......#.......#...#...
-....#.#..#.#..#...#....##......
-....##.....#.##....#.##..##..##
-..#............#...###.##..#...
-.#..#.........#.##....#....#..#
-.#..##..#..#........#.#.##.#.##
-.###.#...#...............#...#.
-...#.##.##.#......#...#....##.#
-#......##.......##...###....#.#
-#..##.....##......#.#.##....#.#
-...#.#....#.#.#...........##..#
-#.....##......##.#..........##.
-###....#.#...#.#..####.........
-.##.#.#...##..#.....#..#...#...
-#.....#.#......#..........#.#..
-..###.##.#...................#.
-#.............#..#........#.##.
-#.#.#.#..#.....##..##.#....#...
-...#...#..#...#..##..##........
-...##...##..#...##...........#.
-.####..#.#.#.##.#.......#......
-...#....#.......#......#.......
-.....#.#...#...#..##..#..#.....
-......#.....###.#..#..#.#..###.
-.#....#....#..#..##.....##...#.
-.#.............##.###.#...#.#..
-#..#..#......#.###............#
-##.#..##....#..........#.#.#...
-......#........#...#.......##..
-....#.#..#..........#.....#.#..
-...#..#...#.#...#........#.....
-.....##...#....#.........##.##.
-....#...#...#.##.##...#....#...
-.#..#.....##......#..#.#..#....
-........##...##.##......#.#.#.#
-.................#..#.....##.#.
-...#.....#...#.........#..#.#.#
-....##.#.....#........#...#..#.
-#...............#..#.....#...#.
-.....#..#....#...#.####.#.#....
-####.#..#.##...#....#...##.....
-#...##..#...####..#....#.#...#.
-..#.......#.##..##...#.#.......
-...........##.......#....#..#..
-#.##....#...#.....#....##......
-....##.#.......#..#...##.......
-...#.........##.#..#......#.###
-.#..#..#....#.#.##....###..###.
-....#.#........##........##....
-....########....#.#.#.###.#...#
-...#.###.###.##......##.......#
-.#...#.###.......#..........#..
-..#..##.........#............#.
-.......##.#...#...##...#...#..#
-#.##....#.#...#.....#..#.#.....
-..#........#..#.#.#.#....#.##..
-...#...#.#.........#...#.#..##.
-#....#......#.#...........#..##
-...#.#.#..#...##...#...#...#...
-###..........#.#..........#....
-..#....#.#.#.#............#.#..
-....#...#..###...#.#....#......
-#...........####......##.#.....
-..#..##.#...#.....#..#.......##
-#.....#..###.....#...##..##....
-##..###..##...........#.#...#..
-.....#......#..............#...
-#..#.##.###.......#.......#...#
-#........#....##......#.#......
-.#.#.#...#.......#........#.##.
-#..#..##.....#...#.#.#.#..###..
-.#.#....#..#..#.#....##.#.#....
-..#.#.........####.#...#.#.###.
-....##........##....#........#.
-................#..........#...
-..#...................###.##..#
-.........#..#..#.#...#....#.#.#
-......#.....###.....#.#..#...#.
-.#.#.....#..##............##...
-...##......##.#....#...........
-...##..##..###.#...##..........
-....###...#..#.#......#......#.
-....##..............#..#..#.#..
-####.......#...##.##..#.#......
-.#......#.....#....###..#....#.
-.#.......#...##...#..##.#......
-#.......#.......#.#....#.#.#..#
-........#..#..#............##.#
-#.#...#.#..##..#.......##..#...
-...#....#...#..........##..#...
-#.#...#.##....###......##....#.
-#..#...###........#..#....#..#.
-#....#....###....#..#.......#..
-....#.#........#.............#.
-.#.##........##...#...#...#...#
-#.....##.....#.......#.#.#.....
-.#.##..........##..#....#......
-.#..##.##.#...##....#.#....##..
-........#.#.##.#....#.#..#....#
-..#...........................#
-.#...........#....#....#.#..#..
-........##...........#...#...#.
-..#.....#..#......#..##.......#
-..#....###..###...#.#.#..#....#
-#..#.#...#......##......#......
-...........#...##..##....##....
-#.#......###..#.....#.......#.#
-#.....#....#....#.#...#...#....
-....#...#.......#....##.#..#...
-.####..##......##.#........#..#
-..###..#.#.....#...........##..
-..##.#.#..#....#..#..#.........
-..........#.#.#####...#........
-.###......##.#....#........#...
-.....#..#..#.#..#.........#....
-..#....#...#...#...##..........
-....#..##.#.........##.#..##...
-##.####..#...#.#...#.....#..###
-..#..#...#...#.....##....#..#.#
-#..##..#.....#....#.#.....##..#
-...#...........##.....#......#.
-......#...#.....#.#..###.......
-.........#.....###.##..#...#...
-.#...#.##...#..........#.#..##.
-......#.......##.....#.....##..
-........###..........#...#.....
-##.......###..###...##...#.....
-#.#.............#..#..#.#......
-..##........#.###.....#....##..
-......#...#......#....##......#
-..#.....#...##...#.......#..#..
-..#.###..##.##...#....#...##.#.
-........##...#..#.#..##.....#.#
-.......................#......#
-..##.###......#.#.............#
-....#...........###............
-##...##.....#.......##.......#.
-...#..##..##..#.#.###..#......#
-........#........#.#..#..#.....
-.#......#....##..........#...#.
-.##...........##....#..........
-.#..#....###.......#....#..##..
-.....###..........#....#.#.#...
-...#....###.#.#......#......#..
-#.#.##.#.....#..#........#...#.
-...#.##.........#..#.....#.....
-.##...##......##...###...#.....
-...#.....#.##..#...#..#........
-........#............#.#.#..##.
-###...#.....#...#..#........##.
-##...#..#.....#.#....#.#.#.....
-#..##.......#...#.#...##..#....
-#...#.##.....#.#..#.##......#.#
-..#......#.#.#.##.##..........#
-..#.##......#.#.#..##..........
-....#..#....#..#..............#
-..........###.....##..#........
-...#.....##.....#..#.#..#...##.
-.#..##.#..#....#.#......#.##...
-...#.....#..#.#...#..#.....#.#.
-#...#.#......##...#..#...#....#
-..#.......##...#..#.......#...#
-#.....#...........##.#.........
-.#......##.....####...#.......#
-........#..#.....#.......#..#..
-....#.#...##..##...#..#....#...
-#.#......#...#.#.###.....#.....
-..##...#.#........#.##....#.#.#
-.#....#......#.#...###.#.......
-.......#.#...##....#.#....#....
-.....##..##...#..#.#.....##..#.
-.##..#.#.#....##.#...#.....#...
-.#..#..##....#.##.......#...#..
-....#.##...#..##......#.....#..
-.#..#....##....#...............
-..##...#.....###...............
-..............#.#.##........#.#
-.#.#....#....#...#.#........#..
-.##...#...#.#....#....#.#.....#
-#..............#......#.####.#.
-......#...........#..#.....##..
-#.#..##.##.....#......#..#.#..#
-##.##..#.##.#.............#...#
-...#..#......#....#............
-........###.#.#..#...#.....#.##
-..#.......#.##.........#..#....
-...##.#........##...#.#.##..#..
-...#..#......#...#....#........
-...........#..#..#...##...#....
-...#.....#....#..####..##.....#
-.......#..#..#......#.........#
-#......#........###.....##....#
-..#..#..#.#.#....##...##......#
-#.#..#..###.#..#.....####......
-.#................#####....#...
-.#.........#...#.......#......#
-..#.......#######........#.....
-..#........#.....#..#...#..#..#
-.#..#.#..#....#.#..##...#..#.#.
-..#...........#.#...#.#.##.....
-...#.#.#....##.###....#...####.
-.....#..#.....#..#.#.........#.
-......##...#...###............#
-..#.#......###..####..#......#.
-###.##.#..#......##.#..##.....#
-....###...##............#.#....
-..#.....##...#...##....#...#...
-#.....#.....#...#...#.#..#.....
-####..........##.#.#..#.....##.
-...#..........#...#...##..##.#.
-..........#.........#.#..#..#..
-#....###.....#.#...#.......##.#
-#..#.##.....#..........#...#...
-...#.#.###.......##..#.....#...
-#...#.#..#.............#..#.#..
-#........#.................#..#
-..#.#....#.#..##.#...#..#....#.
-#...#..........#...###....#...#
-......#.............#....#....#
-#.#.......##.......#.#....##..#
-##...#....#.............#..#...
-........#...###.##.#..###.#...#
-...##...#..#..#...##..##......#
-..#.......##....#.#.##....#....
-.....#....#..#.#...##.#.#.....#
diff --git a/2020/day4.input b/2020/day4.input
deleted file mode 100644
index e703e66..0000000
--- a/2020/day4.input
+++ /dev/null
@@ -1,1147 +0,0 @@
-byr:1983 iyr:2017
-pid:796082981 cid:129 eyr:2030
-ecl:oth hgt:182cm
-
-iyr:2019
-cid:314
-eyr:2039 hcl:#cfa07d hgt:171cm ecl:#0180ce byr:2006 pid:8204115568
-
-byr:1991 eyr:2022 hcl:#341e13 iyr:2016 pid:729933757 hgt:167cm ecl:gry
-
-hcl:231d64 cid:124 ecl:gmt eyr:2039
-hgt:189in
-pid:#9c3ea1
-
-ecl:#1f58f9
-pid:#758e59
-iyr:2022
-hcl:z
-byr:2016 hgt:68 eyr:1933
-
-hcl:#fffffd ecl:gry eyr:2022
-hgt:172cm pid:781914826 byr:1930 iyr:2018
-
-hcl:#08df7e ecl:grn byr:1942
-eyr:2028 iyr:2011 cid:141 pid:319110455
-hgt:186cm
-
-pid:991343040 hgt:179cm
-hcl:#a97842 iyr:2020
-eyr:2024
-byr:1984 cid:181
-
-pid:188cm byr:2005
-hgt:170cm cid:163 ecl:#a08502 hcl:2964fb eyr:1994
-iyr:2005
-
-ecl:grn hcl:#fffffd iyr:2013
-pid:705547886
-byr:1928 hgt:168cm eyr:2030
-
-cid:219
-pid:016251942 hcl:#602927 hgt:163cm
-byr:1943 eyr:2029 ecl:oth iyr:2019
-
-ecl:gry hgt:184cm eyr:2026
-iyr:2010
-pid:117647952 hcl:#efcc98
-byr:1942
-
-cid:243 hcl:#888785 ecl:blu eyr:2027 pid:362697676
-iyr:2011 byr:1962 hgt:154cm
-
-hgt:154cm byr:1965 ecl:blu eyr:2030
-pid:779104554 iyr:2016 hcl:#435634
-
-hcl:z eyr:1996 iyr:1993
-pid:#50f768
-ecl:zzz hgt:62cm byr:2017
-
-ecl:grn byr:1988 iyr:2016
-hgt:167cm
-hcl:#cfa07d
-eyr:2030 pid:951967790
-
-pid:320348494 iyr:2018 cid:281
-byr:2004
-hcl:#06a58b
-eyr:2033
-ecl:zzz
-hgt:76cm
-
-cid:83 ecl:brn eyr:2028
-byr:1941 iyr:2016
-hcl:#341e13 pid:806979833
-hgt:179cm
-
-ecl:brn
-byr:1982 iyr:2010 eyr:2029 pid:535752324 hcl:#efcc98
-
-ecl:oth
-hgt:70in hcl:#866857 eyr:2025 pid:203320330 iyr:2018 byr:2000
-
-hgt:70cm byr:2015 pid:#218eb5 hcl:#0ec4fe iyr:2014 cid:228 ecl:#c8533a
-eyr:2035
-
-hcl:#6b5442
-eyr:2020 ecl:hzl iyr:2017 hgt:173cm
-cid:330 byr:1988 pid:173148327
-
-iyr:2011 byr:1964 hgt:83 ecl:grn hcl:#c0946f pid:931162400 eyr:2028
-
-cid:239
-byr:1960 ecl:hzl
-hgt:164cm
-hcl:#51040b iyr:2018 eyr:2025
-
-cid:163 hgt:154cm
-iyr:2015 eyr:2027 pid:838964596
-byr:1972 ecl:oth hcl:#efcc98
-
-hgt:181cm
-eyr:2028 ecl:blu
-pid:853714682 hcl:#623a2f byr:1976 iyr:2020
-
-cid:225 byr:1957
-hcl:#a97842 iyr:2013 eyr:2025
-pid:511588647 hgt:173cm ecl:blu
-
-hcl:#efcc98
-byr:1993
-ecl:oth
-pid:871652492 eyr:2028 hgt:177cm iyr:2016
-cid:220
-
-ecl:hzl
-hgt:165cm
-hcl:#733820 eyr:2028 cid:57 byr:1973 iyr:2018 pid:018982018
-
-pid:491710153 iyr:2012 ecl:#c85046 hcl:#b6652a
-eyr:2040 hgt:175cm byr:1981
-
-pid:917105765 eyr:2021 hgt:181cm iyr:2019 cid:159 byr:1995
-ecl:gry
-
-hcl:#9d2ec4 iyr:2011
-eyr:2028 pid:149288934 hgt:63in ecl:blu byr:1960
-
-byr:1923 pid:705818464 eyr:2024 cid:221 ecl:oth hcl:#7d3b0c hgt:193cm iyr:2014
-
-pid:117111015 eyr:2030
-byr:1967 hcl:#ceb3a1 ecl:blu
-hgt:157cm
-iyr:2011
-
-iyr:2019 ecl:oth
-hcl:#fffffd hgt:172cm pid:215010680
-eyr:2025
-
-pid:157cm cid:277
-iyr:1976 hgt:159in hcl:#341e13 ecl:#6c7644 eyr:2029 byr:1965
-
-pid:787186482 ecl:brn
-byr:1980 hcl:#f5dfb9 eyr:2020
-iyr:2018 hgt:188cm
-
-cid:168
-eyr:2023 hcl:#07c809
-iyr:2013
-hgt:169cm pid:250679100 byr:1945 ecl:gry
-
-hcl:#6b5442 pid:683134187 iyr:2013 eyr:2023 byr:1965 hgt:171cm ecl:hzl
-
-eyr:2028 hgt:180cm ecl:blu byr:1952 cid:314 iyr:2016
-pid:720794393 hcl:#602927
-
-byr:1982 iyr:2016
-ecl:brn eyr:2027
-hgt:156cm pid:185583837 hcl:#ddbf30
-
-hcl:#ceb3a1 pid:987624973
-eyr:2026
-iyr:2013 byr:1988 hgt:175cm ecl:grn
-
-eyr:2028 byr:1974 pid:350988773 hcl:#a97842 iyr:2015
-ecl:oth
-hgt:160cm
-
-hcl:#b6652a
-eyr:2028
-pid:717504683 byr:1970
-iyr:2013
-ecl:gry
-hgt:156cm
-
-pid:453874703 iyr:2015 hcl:#a97842 ecl:hzl byr:1986 hgt:175cm cid:132 eyr:2025
-
-hcl:#7d3b0c
-eyr:2026
-ecl:brn hgt:154cm
-byr:1959 pid:580659686 iyr:2015
-
-ecl:amb hgt:191cm iyr:2018
-pid:681417707 byr:1994 eyr:2023 hcl:#c0946f
-
-eyr:2022 pid:302326561 iyr:2018 ecl:blu byr:1987 cid:89 hcl:#a97842 hgt:184cm
-
-eyr:2020 pid:457081226
-ecl:blu hcl:#866857 iyr:2011
-hgt:159cm byr:1959
-
-eyr:2024 cid:322 byr:1991 pid:210415503
-hgt:69in ecl:grn
-hcl:#623a2f
-
-ecl:blu iyr:2012 pid:524745721 hcl:#c0946f eyr:2026 hgt:176cm byr:1964
-
-hgt:189cm iyr:2014 pid:679155617 hcl:#efcc98 eyr:2027
-cid:88 byr:1974
-ecl:blu
-
-byr:1935 eyr:2029
-iyr:2020
-hcl:#733820 ecl:blu hgt:190cm pid:509009432
-
-hcl:#fffffd pid:446558583 byr:1931 ecl:brn iyr:2019
-hgt:159cm cid:146
-eyr:2024
-
-eyr:2028 hcl:#efcc98 pid:330588516 hgt:65cm
-byr:1972 iyr:2014 ecl:oth
-
-ecl:blu hgt:175cm cid:197 pid:068138358 eyr:2023 iyr:2017 hcl:#0441c6 byr:1999
-
-byr:1992 hgt:193cm
-ecl:brn iyr:2018 hcl:#866857 pid:905992465
-eyr:2022
-
-hgt:95 byr:1965
-pid:810311252 eyr:2034 hcl:z iyr:1985 cid:254
-
-hcl:#c0946f byr:1985 eyr:2030 hgt:161cm iyr:2010 ecl:gry pid:616639221
-
-iyr:2011 eyr:2023 hgt:172cm cid:260 ecl:hzl
-pid:594747312
-hcl:#a97842 byr:1937
-
-eyr:2028 pid:134536806 cid:83
-ecl:brn byr:1928
-iyr:2015
-hcl:#fffffd hgt:157cm
-
-iyr:2016
-pid:035433923 hgt:180cm ecl:amb eyr:2027 byr:1934
-cid:195 hcl:#583d02
-
-eyr:1936 cid:130 byr:1969 hgt:74cm hcl:50e1a7 ecl:gmt iyr:2010 pid:82008848
-
-hcl:#733820
-eyr:2020
-hgt:174cm iyr:2018 ecl:hzl byr:1983 pid:087167304
-
-byr:1972 hcl:#888785 eyr:2020 pid:593301831 iyr:2013 ecl:hzl hgt:188cm
-
-cid:282 hcl:#888785 hgt:170cm ecl:oth eyr:2029
-byr:1942 pid:014356555 iyr:2020
-
-byr:1966 hcl:#623a2f ecl:oth hgt:165cm
-eyr:2028 iyr:2012 pid:558908746
-
-pid:#4f5b92
-hcl:#6b5442 hgt:188cm
-byr:1994 iyr:2014 cid:127 eyr:2020
-ecl:oth
-
-hgt:153cm
-ecl:brn iyr:2020
-eyr:2026 hcl:#18171d
-pid:101990935
-byr:1932
-
-iyr:2011 byr:1981 hgt:157cm hcl:#c0946f
-eyr:2029 pid:545992967
-ecl:utc
-
-byr:1929 hcl:#602927 iyr:2018 ecl:grn
-eyr:2027
-pid:256056759
-hgt:178cm
-
-iyr:2016 pid:813526512 eyr:2027 hcl:#20799c
-ecl:blu
-byr:1971 hgt:185cm
-
-iyr:2021 eyr:2040
-pid:5135078781 byr:2013 hcl:#7d3b0c hgt:62cm ecl:#dedf53
-
-iyr:2013
-byr:1979 cid:269 hgt:179cm pid:871628606 eyr:2026 hcl:#53b66c
-ecl:grn
-
-eyr:2020
-hcl:#ceb3a1 byr:1988 ecl:oth iyr:2012
-pid:558371571
-
-pid:908462345 byr:1972 hgt:183cm ecl:gry cid:51 hcl:#af82df eyr:2023 iyr:2019
-
-pid:106942710 ecl:hzl
-hgt:157cm hcl:z eyr:2025 iyr:2016
-byr:1998 cid:271
-
-iyr:2011 ecl:oth pid:191542220
-byr:1951 eyr:2027 hcl:#c0946f hgt:190cm
-
-eyr:2028 hgt:193cm pid:235913726 iyr:2012 hcl:#325350
-ecl:amb
-
-iyr:2018 hcl:#a97842 ecl:hzl byr:1988 pid:481250123
-cid:328 hgt:165cm eyr:2028
-
-ecl:#a51d9c hcl:91236c pid:2538922220 byr:2017 eyr:2004
-iyr:2026 hgt:174
-
-pid:959660262 eyr:2022 cid:339 hgt:170cm iyr:2012
-hcl:#cfa07d ecl:brn
-
-hcl:#866857
-ecl:dne hgt:70cm eyr:2013 iyr:1980 pid:780067045
-byr:1950
-
-iyr:2011
-byr:1981
-pid:902964474 ecl:gry eyr:2021
-hgt:154cm
-hcl:#602927 cid:156
-
-iyr:2016
-hgt:156cm ecl:brn cid:315 eyr:2023 byr:1997
-hcl:#623a2f pid:339892714
-
-ecl:brn hgt:73in cid:184 byr:1960 eyr:2024 iyr:2014 hcl:#888785
-pid:561655785
-
-pid:579663338
-eyr:1977
-hcl:#ceb3a1 ecl:grt hgt:188cm
-byr:2017
-iyr:2018
-
-byr:1941 eyr:2029 pid:252436521
-hgt:170cm ecl:hzl
-
-hcl:#888785
-pid:378073052
-hgt:185cm
-cid:343 byr:2001
-ecl:oth iyr:1988 eyr:2029
-
-pid:286459107 byr:1973 eyr:2023 ecl:oth cid:273
-hgt:184cm
-
-pid:406853460 eyr:2028 hcl:#b6652a
-hgt:179cm
-iyr:2020 cid:346
-ecl:brn byr:1973
-
-hcl:#ceb3a1 eyr:2026 pid:001798001 ecl:gry hgt:157cm
-cid:235
-byr:1968
-iyr:2013
-
-hcl:#b6652a hgt:151cm pid:504383643 iyr:2018
-ecl:brn byr:1990
-eyr:2021
-
-hgt:164cm iyr:2015 hcl:#888785 byr:1998 pid:045813631 cid:237
-ecl:grn
-eyr:2026
-
-hcl:#733820 hgt:172cm
-eyr:2030 iyr:2015 ecl:gry pid:507769390 byr:1979 cid:212
-
-cid:138 hgt:176cm hcl:#efcc98
-eyr:2024 byr:1984
-ecl:brn iyr:2015 pid:968062470
-
-hcl:#733820 iyr:2015 ecl:oth
-eyr:2028 pid:431922630 hgt:160cm byr:1941
-
-iyr:2017
-eyr:2023 ecl:grn cid:294 byr:1969
-hcl:#602927 pid:720065302
-hgt:67in
-
-ecl:gry byr:2002 eyr:2024 hcl:#7d3b0c
-hgt:174cm
-iyr:2012 pid:296913847
-
-pid:42057861 hcl:bb7ace eyr:2023 byr:2013 hgt:188 ecl:#312118 iyr:2024
-
-eyr:2021
-byr:1958
-hgt:170cm ecl:brn iyr:2012
-pid:064919306 cid:349 hcl:#602927
-
-eyr:2022
-pid:248168906
-iyr:2013 byr:1996 hcl:#cfa07d
-hgt:151cm ecl:hzl
-
-cid:301 ecl:brn hcl:#fffffd
-hgt:183cm
-pid:806659387
-eyr:2021
-byr:1970 iyr:2013
-
-cid:192
-iyr:2013
-ecl:#5ad460 hgt:64cm
-pid:001255475 byr:1984 eyr:2027 hcl:#cfa07d
-
-iyr:2012 pid:194936105 eyr:2028 byr:2000 ecl:oth hcl:#733820 hgt:158cm
-
-cid:323
-hcl:#a97842 eyr:2027 pid:625573908
-iyr:2019 byr:1987 ecl:grn
-hgt:191cm
-
-pid:997956152 hgt:193cm ecl:hzl eyr:2024 byr:1983
-cid:113 hcl:#888785
-iyr:2013
-
-iyr:2017 hgt:153cm hcl:#733820 byr:1984 eyr:2025 pid:138608494 ecl:blu
-
-ecl:brn
-byr:1987 hgt:174cm
-iyr:2013 pid:459148475 eyr:2023 hcl:#623a2f cid:266
-
-byr:2000 iyr:2017 ecl:brn pid:469155516 hcl:#b6652a
-eyr:2027 hgt:193cm
-
-byr:1967 eyr:2028 pid:064940030
-iyr:2016
-ecl:gry hcl:#18171d hgt:74in
-
-iyr:2020 hcl:#efcc98
-byr:1968 hgt:164cm ecl:hzl pid:834180009 eyr:2022
-
-pid:021397352
-iyr:2018 hcl:#341e13 byr:1978 eyr:2022 ecl:oth hgt:67in
-
-hgt:160cm cid:213 ecl:#a46ef7 pid:157cm eyr:2020 iyr:2020 byr:1923
-
-iyr:2016
-cid:235 pid:454188395 eyr:2022 hgt:73in ecl:hzl
-hcl:#7d3b0c byr:1964
-
-iyr:1930 eyr:2033 hgt:76cm pid:41117341 byr:2028 ecl:utc
-hcl:#6b5442
-
-pid:41316572
-hcl:#cfa07d byr:1965 eyr:2027 hgt:179cm iyr:2010
-ecl:grn
-
-hgt:152cm pid:886168412 iyr:2027
-eyr:1989 hcl:9993d6 byr:2005 ecl:zzz
-
-pid:661569613 hgt:166cm
-hcl:#18171d iyr:2010 byr:1922 eyr:2030 ecl:brn
-
-byr:1958
-ecl:blu pid:978855125
-eyr:2020 iyr:2019
-hgt:190cm hcl:#18171d
-
-hgt:68in iyr:2012 hcl:#ceb3a1 eyr:2028 ecl:oth pid:067088299
-byr:1975
-
-eyr:2020
-pid:507464869 hcl:#fffffd hgt:156cm iyr:2016
-byr:1957 ecl:blu
-
-cid:259 eyr:2025 byr:1954
-ecl:gry hgt:167cm pid:832017347 iyr:2020 hcl:#623a2f
-
-hgt:69in hcl:#a97842
-pid:426496916 byr:1947 eyr:2021 iyr:2015 ecl:oth
-
-eyr:2025 ecl:blu pid:543125976 cid:192 iyr:2017
-byr:1920 hgt:154cm hcl:#a7ecdc
-
-hgt:69in iyr:2017
-byr:1932 hcl:#6b5442
-ecl:hzl cid:349 pid:494399909 eyr:2029
-
-eyr:2030 ecl:gry hcl:#6b5442
-iyr:2010 byr:1938 cid:100 pid:477259022 hgt:67in
-
-hgt:145 byr:2009 hcl:#b6652a iyr:2015
-pid:180cm ecl:dne cid:315 eyr:1920
-
-byr:1930 hgt:65in
-eyr:2022 ecl:blu
-pid:671271699
-iyr:2010
-hcl:#b6652a
-
-byr:1989 eyr:2020
-ecl:hzl
-hcl:#341e13
-pid:625435489
-hgt:189cm cid:72
-iyr:2013
-
-hgt:184
-byr:2025 ecl:#a1368a eyr:2038 cid:111
-iyr:2025 hcl:z pid:7952164402
-
-pid:165478949
-hcl:453b30 ecl:amb hgt:75cm eyr:1987 iyr:2015
-byr:1960
-
-eyr:2022 ecl:blu
-cid:100
-hcl:ead803 iyr:2025 byr:2018
-
-eyr:2024
-ecl:gry hgt:167cm
-hcl:#623a2f cid:259
-byr:1932 iyr:2014 pid:360279704
-
-hgt:191cm
-ecl:oth pid:070592110 cid:275 eyr:2027
-iyr:2011 hcl:#4a4252 byr:1937
-
-ecl:blu cid:256 iyr:2017 eyr:2027 hcl:#341e13 hgt:150cm
-pid:152140902 byr:1923
-
-eyr:1972 iyr:2020 ecl:gry hcl:#888098 byr:1974 hgt:188cm
-pid:586853292
-
-iyr:2014
-ecl:brn hcl:#866857 eyr:2020
-hgt:184cm pid:422142863 byr:1999
-
-iyr:2025 ecl:amb eyr:1928 hcl:#18171d byr:2008 hgt:62cm pid:42120034
-
-byr:1923 cid:85 iyr:2017
-hcl:#602927 eyr:2026 pid:922322363
-hgt:68in ecl:amb
-
-cid:97 hcl:#602927
-pid:436567964
-eyr:2028 iyr:2016
-byr:1994
-
-hcl:#9c166d
-eyr:2025 pid:834335216 iyr:2011 ecl:blu byr:1946 hgt:174cm
-
-byr:2018 iyr:2027 hgt:187in
-cid:118 eyr:2038
-ecl:lzr hcl:z
-
-ecl:blu
-byr:1998 pid:186cm eyr:2026 hcl:z iyr:2027 hgt:70in
-
-hcl:#623a2f eyr:2020 ecl:amb iyr:2010 pid:743059641 cid:240 hgt:169cm byr:1957
-
-ecl:oth pid:089778639 cid:305 eyr:2027 iyr:2012 byr:1935
-hcl:#efcc98
-
-hgt:151cm hcl:#602927 cid:97 byr:1968 iyr:2014 pid:447599233
-ecl:oth
-eyr:2030
-
-pid:621084188 byr:1941 ecl:gry cid:188 iyr:2012 hgt:75in eyr:2028 hcl:#6b5442
-
-hcl:#c0946f
-ecl:amb
-hgt:66cm
-pid:185cm byr:2022 eyr:2039 iyr:2024
-cid:321
-
-hgt:177cm byr:1954 ecl:amb pid:445374119 cid:137 hcl:#341e13 iyr:2010
-eyr:2020
-
-hgt:160cm
-byr:1923
-ecl:grn
-eyr:2021 iyr:2012
-pid:286304911
-hcl:#18171d
-
-hgt:153cm byr:1933
-iyr:2015
-ecl:gry
-pid:365430749 eyr:2029
-
-cid:294 pid:817081355 byr:1969
-eyr:2030 ecl:oth iyr:2014 hgt:181cm hcl:#623a2f
-
-iyr:2011
-ecl:gry hgt:177cm eyr:2025 pid:446342686 hcl:#b6652a byr:1991
-cid:241
-
-byr:1999
-iyr:2018
-cid:306 hcl:#18171d eyr:2021
-hgt:188cm ecl:gry pid:473752814
-
-byr:2002 hcl:#733820
-pid:867697169
-ecl:gry hgt:165cm eyr:2020
-cid:316
-
-eyr:2026 cid:59 hgt:175cm byr:1993 pid:531385722
-ecl:hzl hcl:#733820
-
-eyr:2027
-cid:50 pid:433963708
-byr:1969
-iyr:2011 ecl:hzl hgt:164cm
-hcl:#b6652a
-
-eyr:2020 ecl:gry hgt:186cm pid:917147781 hcl:#341e13
-iyr:2016 cid:68
-
-pid:857547233 hgt:64in
-cid:274
-eyr:2020 ecl:hzl iyr:2019 hcl:#866857 byr:1948
-
-eyr:2022 hgt:183cm pid:557280094
-byr:1936 hcl:#602927 iyr:2019 ecl:oth
-
-byr:1933 eyr:2023
-iyr:2020
-ecl:blu hgt:72in
-
-pid:682285472
-ecl:blu hgt:166cm eyr:2021
-byr:1993
-hcl:#ceb3a1 iyr:2011 cid:266
-
-iyr:2012 cid:172 ecl:#04ce29 eyr:2021 hgt:160cm byr:1926 pid:2235389773
-
-eyr:2029 hcl:#cfa07d pid:387564370 cid:276 hgt:74in
-ecl:amb
-byr:1926 iyr:2019
-
-eyr:2026
-hcl:#733820
-pid:230583200 byr:1997
-ecl:brn
-iyr:2010
-hgt:179cm
-
-byr:1946 hcl:#866857 ecl:#87b6f4 hgt:150cm pid:298537901
-eyr:2024 iyr:2011
-
-hcl:#cfa07d
-byr:1961
-eyr:2022
-hgt:167cm
-pid:230816154 ecl:oth iyr:2018
-cid:164
-
-pid:167899852 hcl:#18171d eyr:2023 hgt:173cm ecl:amb byr:1960 iyr:2010
-
-hcl:#866857
-hgt:165cm
-ecl:hzl pid:325078465 byr:2002
-cid:61 eyr:2025 iyr:2020
-
-cid:268
-hcl:#a97842 iyr:2011 byr:1966 pid:450468785
-eyr:2030 hgt:173cm
-ecl:gry
-
-hgt:181cm
-eyr:2026 cid:77 pid:229016136 ecl:grn byr:1929
-
-ecl:#ad9ae9 hcl:z iyr:2012
-byr:2029
-cid:77 pid:#b1f685 eyr:2015
-
-ecl:amb byr:1920
-eyr:2026 hcl:#92e796 iyr:2011 pid:503853254 hgt:186cm
-cid:101
-
-hcl:#7d3b0c eyr:2022 ecl:amb pid:536474715 hgt:64in
-iyr:2026 byr:1924
-
-hgt:72in ecl:hzl hcl:#888785 eyr:2030 pid:048654766 byr:1977 iyr:2016
-
-hgt:171cm ecl:brn byr:1976 pid:844553043
-eyr:2024
-cid:241
-
-cid:243 eyr:2023 pid:998276626 iyr:2011 hcl:#623a2f ecl:oth hgt:183cm byr:1920
-
-eyr:2030
-ecl:amb pid:896953299
-hgt:157cm byr:1934 hcl:#9c12d8 iyr:2015
-
-hcl:#cfa07d iyr:2011 byr:1974 pid:451819357 hgt:168cm ecl:grn eyr:2024
-
-iyr:2018
-pid:908304519 hcl:#fffffd byr:1936 cid:203
-ecl:amb hgt:76in
-eyr:2029
-
-byr:1967
-hgt:186cm
-eyr:2026
-hcl:#ceb3a1 ecl:grn
-pid:594830518 iyr:2017
-
-pid:20921789 iyr:2024 hcl:z byr:2026 ecl:zzz hgt:153cm eyr:2037
-
-hcl:#888785 iyr:2016 cid:323 byr:1958 ecl:gry pid:118638859 eyr:2029
-hgt:163cm
-
-hgt:167cm ecl:brn eyr:2020
-pid:557999801
-byr:1988
-cid:273 iyr:2011
-hcl:#fffffd
-
-ecl:gry pid:206008517 eyr:2022
-hcl:#ceb3a1
-byr:1983 hgt:187cm
-
-eyr:2020
-byr:1931 cid:78
-hcl:#6b5442 ecl:oth hgt:170cm pid:039713280 iyr:2015
-
-eyr:2024 ecl:amb
-byr:2002 hgt:162cm hcl:#866857
-iyr:2012 pid:696390563 cid:184
-
-hgt:189cm byr:1992 pid:712592503 iyr:2012 ecl:oth hcl:#602927
-eyr:2029
-
-ecl:hzl
-byr:1965 hgt:182cm eyr:2023
-iyr:2014 hcl:#a97842
-
-byr:1927 ecl:gry
-hcl:#d91aa0 pid:082227536 eyr:2021
-iyr:2011
-
-eyr:2003 iyr:1953 byr:1954
-cid:327 hgt:62in ecl:utc
-hcl:z pid:#97c11a
-
-cid:252 pid:98689392
-iyr:2020 hgt:103
-hcl:298df8 byr:1934
-ecl:oth eyr:2012
-
-hcl:#fffffd eyr:2020
-byr:1993 ecl:brn
-pid:338398225 iyr:2015 hgt:159cm
-
-iyr:2017 pid:624798709 hgt:151cm eyr:2029
-ecl:gry cid:111
-hcl:#866857
-
-byr:2010
-ecl:hzl eyr:1975 hgt:150cm iyr:1930 hcl:159a9a
-
-iyr:2010
-hcl:#7d3b0c eyr:2024 cid:224 hgt:163cm byr:1971 pid:631469024 ecl:grn
-
-ecl:hzl iyr:2017 hgt:167cm
-hcl:#623a2f pid:417970460 byr:1949 eyr:2020
-
-eyr:2030
-hgt:84 byr:2007 ecl:xry cid:153 pid:9655548750 iyr:1957
-
-ecl:oth hcl:#733820 cid:336 byr:1996 iyr:2014 pid:736143470 eyr:2025 hgt:182cm
-
-hgt:69in hcl:#623a2f
-cid:126 iyr:2019 pid:638479310 eyr:2022 ecl:grn byr:1935
-
-cid:240
-pid:804066884 byr:1987 hcl:#049f0e
-eyr:2023
-hgt:174cm
-ecl:brn
-iyr:2020
-
-ecl:amb iyr:2010
-pid:200411701
-cid:70 eyr:2023
-hcl:#341e13 byr:1974 hgt:61in
-
-eyr:2022 hgt:186cm hcl:#18171d ecl:hzl pid:613033358
-iyr:2014
-
-hgt:189cm
-iyr:2020 pid:874302209 byr:1928 ecl:blu
-hcl:#1c52f4
-eyr:2029
-
-byr:2026
-eyr:2007 pid:166cm iyr:2030 ecl:utc
-hgt:137 hcl:8e8916
-
-pid:781251989
-eyr:2029 hgt:178cm iyr:2010 byr:1942 hcl:#cfa07d
-
-pid:671017167 eyr:2030 ecl:amb byr:2002 hgt:166cm
-iyr:2011 hcl:#7d3b0c
-
-pid:369327568 byr:1955 ecl:hzl iyr:2013 hcl:#341e13 eyr:2020 cid:90 hgt:154cm
-
-pid:169149205 iyr:1947 ecl:amb eyr:1977
-byr:2003
-hcl:z
-hgt:75cm
-
-hcl:#cfa07d iyr:2016
-eyr:2022 pid:941218673 byr:1999 cid:186
-ecl:brn hgt:173cm
-
-hgt:159cm eyr:2021 byr:1962 hcl:#efcc98
-pid:792538993 iyr:2011 ecl:blu
-cid:222
-
-pid:#994231 byr:2024 iyr:1977 hcl:b98ff6 eyr:2010 hgt:71
-ecl:#875a67
-
-byr:2007
-iyr:2023 hgt:141
-eyr:2021 ecl:grt pid:22002588
-
-hgt:190cm
-pid:524515058
-cid:217
-ecl:grn byr:1999
-eyr:2027
-iyr:2019
-
-ecl:dne byr:2019 eyr:1942 hgt:62cm pid:5866040917
-iyr:2018 hcl:z
-
-pid:754032301 byr:1985 eyr:2029 hgt:185cm iyr:2016
-ecl:oth
-
-ecl:amb byr:1948 iyr:2010 hgt:157cm pid:153547581 eyr:2027 hcl:#cfa07d
-
-eyr:2026 byr:1942 pid:368975422
-hcl:#733820
-cid:322 hgt:188cm
-iyr:2019
-ecl:blu
-
-ecl:brn
-pid:535822939 byr:1994
-eyr:2027 iyr:2020 hcl:#18171d hgt:193cm
-
-pid:706755664
-hcl:#7d3b0c
-ecl:grn cid:304
-hgt:152cm byr:1972 iyr:2013 eyr:2021
-
-hgt:163cm
-byr:1922 iyr:2014 eyr:2028 pid:852815945 cid:324
-ecl:brn hcl:53b08b
-
-hcl:#888785
-eyr:2023
-iyr:2020 byr:1962 ecl:blu
-pid:407158186
-cid:269
-
-ecl:blu
-eyr:2027 pid:567155642 hcl:#a97842 hgt:74in byr:1995
-iyr:2016
-
-iyr:2017 eyr:2020
-pid:782403650
-byr:1952 ecl:gry hgt:193cm cid:273 hcl:#efcc98
-
-byr:1963 eyr:2021
-pid:639445576 hcl:#c0946f iyr:2013
-cid:306 ecl:blu hgt:154cm
-
-hgt:68in cid:191
-hcl:#7d3b0c
-iyr:2017 byr:1935 ecl:gry
-
-ecl:brn iyr:2019
-eyr:2021
-hcl:#733820
-byr:2017
-pid:714110829 hgt:155cm cid:178
-
-cid:203 pid:455383907
-ecl:grn byr:1965
-hcl:#866857 eyr:2024 hgt:172cm iyr:2012
-
-iyr:2018 eyr:2033
-pid:462538213 byr:1974 hcl:#c0946f
-ecl:amb hgt:160cm
-
-hcl:#623a2f
-pid:116799148 cid:336
-ecl:grn eyr:2027
-iyr:2020
-byr:1976
-
-pid:654088396
-ecl:utc eyr:2021
-byr:2016
-hcl:#866857
-iyr:2030 hgt:191cm
-
-byr:1939
-eyr:2023
-iyr:2011 hgt:168cm
-cid:141 ecl:brn
-hcl:#6b5442
-
-eyr:2025 hgt:61in
-byr:1977
-ecl:brn iyr:2016 cid:198 pid:401742648
-
-ecl:brn
-iyr:2012 eyr:2027
-byr:1990 hcl:#6b5442
-pid:476691172
-hgt:72in
-
-cid:176 ecl:oth iyr:2011 hcl:#c0946f
-eyr:2028
-byr:1957 pid:959615191
-
-byr:2027
-iyr:2021 hcl:#733820 hgt:165cm pid:6155507056
-
-iyr:2012 ecl:blu
-pid:397461435 eyr:2022 byr:1993 hgt:170cm
-hcl:#b59662 cid:185
-
-ecl:hzl byr:2015
-hcl:z hgt:185cm eyr:2036 iyr:2017
-pid:172cm
-
-ecl:oth
-hgt:181cm iyr:2019
-cid:113 byr:2000
-hcl:#866857 pid:045077916 eyr:2029
-
-iyr:2013 ecl:grn
-pid:717028913 byr:1953 eyr:2025
-hgt:191cm hcl:#6b5442
-
-pid:825834003 eyr:2027 byr:1941
-hgt:163cm iyr:2010 hcl:#6b5442 ecl:amb
-
-eyr:2026 hgt:59in
-hcl:#e9ebf8 byr:1966
-iyr:2018 pid:677886127 ecl:grn
-
-hcl:#888785 pid:771218458 ecl:hzl eyr:2029
-cid:153 byr:1991 iyr:2011
-hgt:76in
-
-hgt:161cm hcl:#888785
-ecl:brn byr:1928 pid:913959218 eyr:2020 iyr:2013
-
-hgt:188cm eyr:2026
-byr:1964 ecl:blu hcl:#733820 iyr:2017 pid:874400552
-
-ecl:hzl iyr:2017
-cid:59 pid:130750853 byr:1964 eyr:2028 hgt:177cm hcl:#602927
-
-pid:200888672 ecl:oth iyr:2016 eyr:2020 hcl:#efcc98 hgt:163cm
-
-eyr:2026
-ecl:gry
-hgt:189cm
-hcl:#c0946f iyr:2019 pid:741121671 byr:1971
-
-ecl:amb eyr:2028 hcl:#888785 iyr:2017 pid:060053163 byr:1952 hgt:191cm
-
-hcl:#55c45a
-eyr:2022 ecl:blu
-iyr:2019 pid:326991534
-hgt:158cm
-cid:149
-
-hcl:#a97842 iyr:2013 ecl:hzl byr:1941 hgt:179cm
-
-hgt:68in hcl:#18171d
-eyr:2021 byr:1938 ecl:oth iyr:2015
-pid:888616887
-
-eyr:2026 iyr:2018 ecl:oth byr:1990
-hcl:#efcc98
-pid:472330538
-hgt:192cm
-
-byr:1933 ecl:grn hcl:#7d3b0c hgt:74in iyr:2011
-eyr:2028 cid:55
-
-iyr:2014 hgt:165cm ecl:blu hcl:#18171d byr:1998 pid:601177268 cid:64 eyr:2027
-
-iyr:2011 ecl:grn cid:188 pid:440822084 eyr:2028
-hcl:#c0946f byr:1987 hgt:154cm
-
-hcl:#f29c57
-cid:114 iyr:2010
-byr:1989 eyr:2023 hgt:61in
-pid:166071094
-
-hgt:71cm
-iyr:2022 byr:1965
-ecl:#bb3dce pid:88829820 eyr:2040 hcl:z
-
-hgt:62in hcl:#7d3b0c pid:585528668
-eyr:2028 ecl:oth
-byr:1941
-
-ecl:oth eyr:2030
-byr:1952
-iyr:2018 pid:422437243 hgt:185cm
-
-pid:054717793 byr:1989 hcl:#18171d
-iyr:2014
-ecl:grn
-eyr:2025 hgt:151cm
-
-eyr:2027
-hcl:#cfa07d pid:071196833
-cid:297 byr:1932 hgt:173in
-ecl:grn iyr:2016
-
-hcl:#6b1c3d eyr:2026 pid:963034490 iyr:2011
-hgt:175cm byr:1961 ecl:oth
-
-hgt:69in
-hcl:#b6652a ecl:oth
-pid:771661551 iyr:2016 eyr:2023 byr:1960
-
-cid:63
-pid:190cm byr:2021 ecl:#252d02 eyr:1931
-iyr:1966 hgt:101 hcl:dc9531
-
-byr:1976 eyr:1925
-ecl:grt cid:203
-iyr:2019
-pid:170cm hgt:181in
-
-iyr:2014 ecl:amb
-hgt:182cm cid:283 byr:1983
-pid:307867769 eyr:2024 hcl:#cfa07d
-
-hgt:157cm hcl:#ceb3a1 eyr:2026 pid:109243500
-byr:1926
-iyr:2015 ecl:oth cid:330
-
-hcl:#602927 byr:1940 pid:389818848
-iyr:2016 ecl:brn
-hgt:68in eyr:2023
-
-ecl:brn pid:340990019
-eyr:2020 iyr:2011
-hcl:#fffffd hgt:175cm byr:2001
-
-cid:264
-hgt:154cm pid:128094068
-hcl:#888785 iyr:2013 eyr:2027
-byr:1929 ecl:amb
-
-cid:270 hcl:#602927 hgt:156cm iyr:2018
-byr:1983
-eyr:2020 pid:621875145
-ecl:gry
-
-cid:345 pid:68093057 ecl:grt
-iyr:2019 byr:1992 hgt:109 hcl:35d6e4 eyr:1976
-
-pid:714839913 ecl:grn hcl:#733820 iyr:2020 hgt:153cm
-byr:1996 eyr:2027
-
-pid:820650878 eyr:2027
-hcl:#866857 byr:1957
-iyr:2015 ecl:grn hgt:167cm
-
-pid:600488426
-hcl:#ceb3a1 hgt:151cm
-ecl:amb eyr:2021 byr:1936 iyr:2015 cid:326
-
-cid:256 hgt:169cm
-iyr:2014
-pid:261369952 eyr:2028 byr:1982
-ecl:brn
-hcl:#733820
-
-eyr:2021 iyr:2011
-pid:745066100 hcl:#3bbbd5 byr:1998 ecl:amb hgt:166cm
-cid:257
-
-ecl:#a38be3 cid:256 hgt:154 eyr:2033
-byr:2006 pid:5154675209 hcl:z
-
-hgt:160cm cid:103 ecl:gry byr:2000 hcl:#a97842 eyr:2026 pid:528503931
-iyr:2010
-
-eyr:2025 cid:131 iyr:2011
-byr:2001
-pid:346722892
-hcl:#cc0362
-hgt:168cm
-ecl:brn
-
-hcl:#ceb3a1 iyr:2012
-hgt:188cm pid:760916817 byr:1985
-eyr:2020 ecl:oth
-
-hgt:179cm
-cid:317
-ecl:amb pid:411265118 iyr:2018
-byr:1982 hcl:#733820 eyr:2028
-
-byr:1927 hcl:#7d3b0c iyr:2020 ecl:gry
-hgt:155cm pid:937138356 eyr:2021
-
-hcl:#efcc98 pid:793804751 eyr:2022 byr:1961 hgt:193cm iyr:2016 cid:222
-
-pid:715207875 hcl:#18171d eyr:2030 byr:1974 hgt:157cm ecl:blu
-iyr:2019
-
-eyr:2022 pid:134624402 hgt:159cm cid:154
-byr:1938 hcl:#cfa07d
-iyr:2018 ecl:gry
-
-ecl:oth eyr:2021
-cid:259 pid:0484880795 hcl:#cfa07d hgt:189cm iyr:2019 byr:1958
-
-byr:1960
-pid:752967111 iyr:2010 hcl:#52a9af
-hgt:151cm ecl:amb eyr:2025
-
-eyr:2028 byr:1974 ecl:oth cid:348
-hcl:#b6652a hgt:164cm iyr:2018
-
-eyr:2029
-byr:1942 cid:232 iyr:2016 hgt:193cm
-hcl:#733820 pid:175cm ecl:oth
-
-byr:1990 hcl:#b6652a eyr:2028 iyr:2011 pid:054326137 hgt:153cm ecl:blu
-
-byr:1933
-pid:659875882 hgt:181cm
-eyr:2023 iyr:2012
-ecl:grn hcl:#18171d
-
-ecl:grn iyr:2019 hcl:#866857 byr:1946
-eyr:2023 hgt:193cm pid:494553757
-
-cid:331
-ecl:blu eyr:2021 hcl:#733820 hgt:174cm
-iyr:2010 byr:1950 pid:405416908
-
diff --git a/2020/day5.input b/2020/day5.input
deleted file mode 100644
index 4ed7747..0000000
--- a/2020/day5.input
+++ /dev/null
@@ -1,817 +0,0 @@
-FBFFFFBRLL
-FFBFFFFRLR
-BFBBFFBRLL
-FBBBBFFLLR
-BFFFBFFLRL
-FBBFBFFLRR
-FBBFBFBLLL
-BFFBFFFLRL
-FBFFBBBLRR
-BFFFFFBRRR
-BFBBFFBRRL
-FFBFFFBLRL
-BBBFFFFLRR
-BBFFBFBLRR
-FBFBFFBRRR
-FFBFFBBLLL
-BFBFFFBRLR
-BFFFFBFLLL
-FFBBFFBRRL
-BFBBBFBLRL
-BFFBBFBLRL
-FFBBBFBRRL
-BFBBBFBLLR
-BBFBFBBRRL
-FFBBFBFRLR
-BFBBFBBLLR
-FFBBBBBRLL
-FBFBFFFRLR
-FBFBBBFRRL
-FBFFBFFRLR
-FBFBFBFRRL
-BFBFFFFLRL
-BFBFBFBRRR
-FFBBBBBRRR
-BFFFFBFRRR
-FBBFBFBRRL
-FFBFFBBLLR
-FBBFFFBRRR
-BFBFFBFLLL
-BFFBBBBLLR
-BFBFBFFRRR
-BFBBFFFRLR
-FBBFFBFLRR
-BBFBFBBLRR
-BBBFFFFLLL
-FFFBBBFRRL
-FFFBBFFRRL
-BFFFBFBLRR
-FFBBFFFRRR
-BFFFBFFLLR
-BBFFBBFLLR
-BFFFBBFLRL
-BBFBBFBRRL
-FFBFFBBRLL
-BFFFBBBLLR
-FBBFFFFLRL
-BFBFBFBRLL
-FFBBFBFRLL
-FBFFBBFLLR
-FBFBBBFRRR
-BFFFBBFRRR
-FBFFBFBRRL
-FBFBFBFLLR
-FBBFFBBRRR
-FBBBFFFRRR
-BFBFBBFRLL
-FBBFFFBLLL
-FFBBFBBLLL
-BFBFBBBRLR
-FBBFFBFRLR
-BFBFFBBLLR
-BFFBBBFRRR
-FBFBBBFLLL
-BFFBFFBRLR
-BBFFBFBLLL
-FBBFFBFLLR
-BFBFBBFRRL
-FBBFFBBLLL
-FFBFFFBLRR
-BFFBFBBRLR
-BFBBBBFRLR
-BFBBFFFLLL
-FBFBFBFLLL
-BFBFBFFLRL
-BBFBBBBRLL
-FBBBBFBLLL
-BFFFFFBRRL
-BFBFFFFRLL
-FBFBBFBRRR
-FBFFFFFLRL
-FFFBBFBLRL
-BFFFFBBRRL
-FBFBFFBLLL
-BFBBBFFLRR
-BFBFFBBLRL
-BBFBFFBRRL
-FFBFBBFLLR
-FBBFFFFLLR
-FBFFFFBLRL
-FFFBBBBLLL
-BFFBBFBLLR
-BBFBBBFLRR
-FBFFFBFLRL
-BFFBBFFLLR
-FBBBFBBLRL
-FBBBBFFLLL
-BFBBBBFRRL
-BFFFFFBLRL
-FBBFBBBLRL
-FFFBBFFLRL
-BBFBFFFLRR
-BFBFBFBLRR
-FBFBFFBRLL
-FBFFFFFRLR
-BFFBBBFLRR
-FBBFFFBRLL
-BFBBFBBRLL
-BBFBBBFRRL
-FBFBBFFLLL
-FFFBBFBRRR
-FBBBFBFLRL
-FFBBFFFLRL
-FBBFBBFLLL
-BBFBBBBLRL
-BBFBBFBLLR
-BBFFFBFRLL
-FFBBFBFRRL
-BFBBBFFRRL
-FBBBBBBRLR
-BFFFFFBLLR
-FBBFBBFRLR
-FFFBBFBLLL
-BFBFFFFRRL
-BFFBFBFLLR
-FBBBBBFRLL
-FBBFBBBLRR
-BFFFBFBRRR
-FBBBFBFLLR
-BFBBFFFRLL
-FFBFBFFLRR
-BBFFBBFRLL
-FBBFBFBRLR
-BBFBFBBLLR
-BFFBFBBRRR
-FFBBBBFRLR
-FBFBBFBRRL
-FBBFFFBRLR
-FBFBBFFLRL
-FFBBBBFLLL
-FFFBBFBRRL
-FBFFFBBLRL
-FBBFBFBLLR
-BFFBFBFLRL
-FFBBFBBLLR
-BFFFBFBLLL
-BFBBBFBLRR
-FBBBBBBLRL
-BFFFFFBRLL
-BBFFBBFLRR
-FBBBBBBLLR
-FBFFBFBRLL
-BBFFFFFRLL
-FBFBFBFRRR
-BFBBFBFLLR
-FFBFFFFLRL
-BFBBFBBLRR
-FBFFFBBLLL
-FFBBBBFLLR
-BBFFFBBRRL
-BFFBFFFLLL
-BFBBFFBRRR
-FBFFFBFLLR
-BFFFBFFLRR
-FBFFBBFLRR
-FFFBBBFLRL
-FBFBBFBLRL
-FFBBBFBRRR
-BBFBBFFLLR
-BBFFBFFRLL
-BFFBBFFLRR
-BFFBFFBLRL
-BBFBFFBRRR
-BBFBBBFLLL
-BBFBFBFRRL
-BBFFFFBLLL
-FFBFBBBRRL
-FBFBBBFRLR
-FBFBBBBLRR
-BFFFFBFRLR
-FFBFBBFLRR
-FFBFFBBRLR
-FFFBBBFLRR
-BFFBBFFRLL
-BFBFFBBRLL
-FFBFBBFLRL
-FBBBBFFLRL
-FBBFBFFRLR
-FBFBBFFLRR
-BBFFFBBRLR
-BFFFFBBLLR
-BFBBFBFRRL
-FBBFBBFLRR
-FBFBFBFLRL
-BFFBFFBRLL
-BBFBFFFRRR
-FBBBBFFRLL
-FFBBBBFLRR
-FBBFFFFRLL
-FFFBFBFRLL
-FBBBBFBLRL
-FBFFBBFLRL
-FFBFBFBRRL
-FFBFBFFRLL
-FBBFBFFLLL
-FBBBBBFRLR
-BFFBBFBLLL
-FBBFBFBLRR
-BBFFFBFRRL
-BFFFBBBRLL
-BFBBFFFRRR
-FBFBFBBRLR
-FBBFFBBRRL
-FFBBFFBLRR
-FBBBBBFRRL
-FBBBBBFRRR
-FBFFBFBRRR
-BFBBBBBRLR
-BFBFBBBRRR
-BBFFBBBRRL
-FBBFFBBLRR
-BFBBFBFLRL
-BFFFFFFRLL
-FBFBFFFLLL
-FFBBFBBRRL
-BFFFBFFRLL
-FFBBBFBLRL
-FFBFBFFLLL
-BBFFFBBLLR
-BFBBBBBRRL
-FBBFBBBLLL
-BFFBBFBRRL
-FFBBFBBLRL
-BFBBBBFLRL
-BFFBFBBLLL
-FFFBFBBLRL
-FFBBFBBRRR
-FBBFFFFRRR
-FBFFFFFLRR
-BBFFBFBRLL
-BFBFFFFLLL
-FFBFBFFRLR
-FFBFFFBLLL
-BBFFFFFRRR
-BFBFBFFRRL
-FBBFFBFLLL
-BFFFBFFRLR
-BFBBBFFRLR
-FFFBBFFRLR
-FBBBBFBRLL
-FBBBFFBRLL
-FBFBFFBRRL
-BFFBFFFRRL
-BFFBBBFLRL
-BFBBBBBLLL
-BFBFFFFRLR
-FFBFBBBLRL
-FFBFBBBLLR
-FFBBFBFLRL
-BBBFFFFLLR
-FBBFBFBRLL
-BFFFFBBLLL
-BFBFBBBLLR
-FBFFBFFLRL
-BBFFBBFRRL
-FBBFBBFLLR
-FFFBBFBLLR
-FFBBBBBLLL
-FFBFBFFLRL
-BFFFFBFLLR
-BFBFBBFLRL
-BFFFBFBLLR
-BBFFBFBRLR
-FBBBFFBLRL
-FBFFBBBRLL
-FBBFFBFRRL
-FFFBBFBLRR
-BBFFBBFRRR
-BFBFFFBRRL
-FBBBBFFRRL
-BFFFBBFLLL
-FFBBBFFLRL
-FBFBBBFRLL
-FBBBFBBRLL
-BBFFBFFLRL
-FFBFBFBLRR
-FFFBBBFRRR
-BFFBFBBLLR
-FBBFBBBRLR
-BFFFBBBRRR
-FFFBFBFRRR
-FBFFBFFRRR
-FFFBBBBLRR
-BFFFBBFLLR
-BFFFBFBLRL
-FBBFFBBRLL
-BBFFBBFRLR
-BFFFBBFRLR
-BFFBBBBLLL
-FFBBFFBRLR
-FFBFBFFRRL
-BFBBBFFLLL
-BFBFBBFRRR
-FBFBFBFRLL
-BFBBFBFRRR
-BBFBFBBRRR
-BFBBBBBLLR
-FFBFFFBRLL
-FFBFFBFLLR
-BBFBFBBLRL
-BBFFBBFLRL
-BFBFBBBLRR
-FFBFBBBRLL
-BBFBBFFLLL
-FBFFBBBLRL
-FFBBBFFLLL
-FBBFBBBRRL
-BBFFFBBLLL
-FBBBFFBRRL
-FFBBBBBRRL
-BFBBFBBLLL
-FFBFFBBRRR
-BFBBFFBLLR
-BFFFFFFLLL
-BFFFFBBLRR
-BFBFFBFLRR
-FBBBBBFLRR
-BBFBFBFLRL
-FBBFFBFLRL
-BFFFFBFRLL
-BFFFBBBRRL
-FFBFBFBRLR
-FFBBFBBLRR
-FBBFBBBLLR
-FBBFFFBRRL
-BFFFBFBRLL
-BFFBBBBRLL
-FFBBFFFLRR
-BBFBBFFRRR
-FBFBFBBLLR
-FFBBBBBLRR
-FFBBBFBLRR
-BBFBBBFRLL
-BFBBFFBRLR
-FBFFBFFRLL
-FBBBFFFLLL
-BFBBFBFLRR
-FBFFFFFLLR
-FBBBFBFRRR
-FFBBBFFLLR
-FBBBFFBLLR
-FBFFFBFLRR
-FBFFBFBLRL
-BFFBBFFRLR
-FBFBBFFRLR
-FBBBFFFRRL
-FFBFFFFRRR
-FFFBFBFRRL
-FFFBBBBRRL
-FBFFBFFLLL
-FFFBBFFRRR
-BFFBFFFLLR
-BFFBBBFRRL
-BBFFFBFLLR
-BBFBFFFLLR
-FFFBBFBRLL
-FBFBBFFRRR
-BBFFBFFRLR
-FBFFBFBLLR
-BFBFBFFLRR
-FBBBBBBLRR
-BFBBBFBRRR
-FFFBBFFLLR
-BFFFFBFLRR
-FFBFFBFRRL
-BBFFBFFLRR
-BFBFFBFRRR
-BBFBBBFLLR
-FFBBFFFLLR
-FBBFFFBLRR
-FFFBFBBRRL
-FBFBFBBRRR
-BBFBFBBRLL
-FBFBFBFRLR
-FFBBBBBLRL
-BFBBFBBRRL
-FBFBFFFLLR
-BFBFBFBLRL
-BFBBBFFLLR
-BBFFFFBLLR
-BFBFBBBLRL
-BBFFFFBRLR
-BBFBBFBLRL
-BFBFBFFLLL
-FFBFBFBLLR
-FBBBFBBRLR
-FBFBBBFLRL
-FBBFBBBRLL
-BFFFFBFRRL
-BFBFBBFRLR
-FFBFFFBRRL
-BFFBFFBRRR
-BBFBBFFRRL
-FBBBBFBRRR
-FFBFFBBRRL
-BFBFFBBLLL
-BFBFFFBLLL
-FFFBBBBLLR
-FBFBFFFLRL
-FFBBBFBLLL
-BFFBFFBLLR
-FBBBFBFRLL
-FFBBFFBLRL
-BFBFFFBLLR
-FBFFFFBRRL
-BFFBFFBRRL
-BBFFFBBLRR
-FBFFFBBRLR
-BFFFFFBLRR
-BBFBFFBRLR
-FFBBBFFRRR
-FBBFFFFLRR
-FBBBFBFLLL
-BBFBBFBRLL
-FFBFFBBLRR
-BBFBBBBRLR
-FBBBBBFLRL
-BBFFBFBLRL
-BFBFBFFRLL
-BBFBFBFLLL
-FBFFBBBRRR
-BBFFBFFRRR
-FFBBBFFRRL
-FBFBFBBRRL
-BFFBBBBRRR
-BBBFFFFRLR
-BBFFFBBRLL
-FBFBBFBLLR
-BBFBFFFRRL
-BBFFBBBLLL
-BBFBFBFRRR
-FBFFFBBLLR
-BBFFBFBLLR
-BBFBBFFLRR
-BBFFFBBRRR
-BFBBBFFRRR
-BFBFBBBRLL
-FBBBFFFLRR
-FBFFFFFLLL
-FBFBFFBRLR
-FBFFBFBLRR
-FBFBFFFRRL
-FBBBBBBRRL
-BFFFFBBRLR
-FBFFFFBLLL
-BFFBBBBRRL
-BFBBBBBRLL
-BFBBFFBLLL
-BFFBFBFLLL
-FFFBFBBRLR
-FFBFBBFRRL
-FFBFBFBRLL
-BBFBFFBLRL
-BFFBBFBRLR
-BFFFFBBRRR
-FFBBFBFLLR
-BFBFBFBRRL
-BFFFFFFRRL
-BFFBFBFRLR
-FBBFBFFRRL
-FBFBBBBLLR
-BFFFBBBLLL
-BBFBFFFLRL
-BBFBFBFRLL
-FFBFBFFLLR
-BBFFBFBRRL
-BFFBBFFRRR
-FBFFBBFRLR
-FBFBFFBLRR
-BFFBFBFLRR
-BFFFFFBRLR
-FBFFFFBRRR
-FBFFBFFRRL
-FFBFBBFRLR
-FFBBBBFRRR
-FFBBBFFRLL
-FBBBBBBLLL
-FBBBFBBLRR
-FBFBBFBLLL
-BFBFFFBRRR
-FBFBBBBRLR
-FFBFBBFRRR
-FBFBBFFRRL
-BFFBBBBLRR
-BBFFBBBLRL
-BBFFBBBLLR
-FFBFBFBLRL
-BFBBFBBLRL
-FFBFBBBRRR
-BBBFFFFLRL
-FFFBBFFLRR
-BFBBBBFLRR
-BFFFBFBRRL
-FBFFFBFRLL
-BBFFFBFRRR
-BFFBBBBRLR
-FFBFFFBRLR
-FFFBFBBLRR
-BFBFFBFLRL
-BFBBFBBRLR
-BFFBFFFRLL
-FFBFBFFRRR
-BFFBBFBRLL
-FBFBBFBRLL
-FBBFFBBLLR
-BFBFFFFLRR
-BFFFFBBLRL
-FBFBBFBRLR
-FFBBFFFRRL
-FFBBFFBLLL
-BFBFBBBLLL
-FFFBBBBRLL
-FFFBFBBRLL
-BFFBFBFRRR
-FFBBFBFLLL
-BBFBBFFRLR
-BFBBBBFRLL
-BBFFFFFLLR
-FFBBFFBLLR
-FBFFBFBRLR
-FBBFBBBRRR
-BFFBBBFLLL
-BFBFFBBRRR
-BFBFFFFLLR
-FFFBBBBRRR
-FBBFBFBLRL
-BFFFFBBRLL
-FBFFBBFRLL
-FFBBBFFRLR
-BFFFBFBRLR
-FBBFBBFRRL
-FBBFBBFRRR
-BFBFFFBLRR
-BFFFFBFLRL
-BFBFFBBRRL
-BFBFBBFLLR
-FBBBFBBRRR
-FFBFBBBRLR
-BFBBBFBRLL
-BFFBFFBLRR
-BFFFFFFLRR
-FBFFFFBLLR
-BBFBFFFRLL
-FBFFFBBLRR
-FBBBFFFRLL
-BBFFFFFRLR
-BFBFFBFRLL
-FBBFFFBLRL
-FFBFFBFRLR
-FBBFFFBLLR
-BFBFBFBLLL
-BFFBFFFRLR
-BFFFBFFRRL
-BFFFBBFRLL
-BFFBBFFRRL
-BBFFBBBLRR
-BBFBBBBRRR
-FBBBFFBRLR
-FBBBBFBRLR
-BFBBBFFRLL
-BBFBFFBLLL
-BFBBBFBLLL
-FFBFFFFRLL
-BBBFFFFRLL
-BBFBFBBRLR
-BBFBFBFRLR
-FBFBBFFLLR
-FFBFBBFLLL
-FFFBBFBRLR
-BBFBBBFLRL
-BFBBFFBLRR
-BBFFFBFLRL
-BFFBBFBRRR
-BFFBFBBLRL
-BFFBBBFRLR
-BFBBFBFLLL
-FBBBFFFLRL
-FBFBFFBLLR
-FFFBBBFRLR
-FFBFFBBLRL
-FBBBFFFLLR
-FBBBFFBLLL
-BFBFFBBLRR
-FFBFFFFLLR
-FBFBBBFLRR
-BBFBFBBLLL
-FBFBBBBRLL
-FBBBFFBRRR
-FBBFBBFLRL
-FBFBFBFLRR
-FBBBFBFLRR
-BFFFBFFLLL
-BFBBBFBRRL
-BFBFBFBRLR
-FBFFFFFRLL
-BBFBFFFLLL
-FBFBBBBLRL
-BBFBFBFLRR
-FBFBFBBLLL
-BBFFBBFLLL
-BBFBBBBLLR
-BBFBBFBRLR
-BFFBFBBRLL
-FBBBFFBLRR
-FFBFFFFLLL
-FBFFBBFLLL
-FFBBFBFLRR
-FBBBBBFLLL
-FBFBFFFRRR
-BFBFBFFRLR
-FFBBFBFRRR
-FBFBBBBRRL
-BFBFBFFLLR
-FBFBFBBLRR
-FBBBBFBLRR
-BFFFBFFRRR
-BBFBBBBRRL
-BBFBBBFRLR
-BFBBBBBRRR
-BBFFFFBLRL
-BBFFFFBLRR
-FBFBBFBLRR
-FBBBFBBLLL
-FBBBFFFRLR
-FBBBFBBRRL
-BBFFFFFLRL
-FBFFFFBLRR
-FFFBFBBLLL
-BFBBFFFRRL
-FFBFBBFRLL
-FFBFBFBLLL
-BFFBFBBRRL
-BFFBBBFLLR
-FBBBBFFRRR
-FBFBFBBRLL
-FFBBFFFRLR
-FFBBFFBRRR
-BBFFFBFLRR
-FBFBBBBLLL
-BFFBBBFRLL
-BBFFBBBRRR
-FFFBBBFRLL
-BFFBBFBLRR
-FBFFFBFRRR
-FFBBBBFRLL
-FBFFFBBRLL
-FBBBBBBRRR
-BFBFFFFRRR
-FFBBBFBRLL
-FBBFBFFLRL
-FBBFFBBRLR
-BBFBBFBRRR
-BBFBFFFRLR
-FFFBFBBRRR
-FFFBBBFLLR
-BBFBBBFRRR
-BFFBBBBLRL
-FFBFFFFLRR
-BFFBBFFLLL
-BBFFBFFLLR
-BFBFFBFRRL
-FBFFFBFLLL
-FFBFBFBRRR
-FFBBFFBRLL
-BFBBFBFRLL
-FBFBBBFLLR
-FFBFBBBLLL
-FFBBBFBLLR
-FBFFFFBRLR
-FFBFBBBLRR
-FFFBBBBRLR
-FFBBBFFLRR
-FBFFBBFRRL
-BBFBFFBRLL
-BFFFBBFLRR
-FBFBFFFLRR
-FBBBBFFLRR
-BFFFBBBLRL
-BBFFFBFLLL
-FBFFFFFRRL
-FFBBBBBRLR
-BFBFFFBRLL
-FBFBFBBLRL
-FBBFFBBLRL
-FBBFFFFRRL
-BBFBBFFRLL
-FBBFFFFLLL
-FFBBFBBRLR
-BFBFBBBRRL
-FFBBBBBLLR
-FBBFFBFRLL
-FFBFFBFLRL
-FBBBBFBRRL
-FFFBBBBLRL
-BFFBFBFRLL
-FBFBFFBLRL
-FBFFFBBRRL
-BFFBFFBLLL
-BFBBBBFLLL
-FBFBBBBRRR
-FBBBFBFRLR
-BFBBFBFRLR
-BFFBFFFRRR
-BFBBBFBRLR
-BFFBFBBLRR
-BBFFFBFRLR
-BFFFFFFLRL
-BBFFFBBLRL
-BFFFFFFRRR
-FFBFFFFRRL
-FBBFBBFRLL
-BBFBFFBLLR
-BFFFFFBLLL
-BFBBBBBLRL
-FBBBBBFLLR
-BBFFFFFLRR
-BFBBBBBLRR
-FBBFBFFRLL
-FFFBBBFLLL
-BBFFFFBRLL
-BFFFBBFRRL
-FBFFBBBRRL
-FBBBBBBRLL
-FFFBBFFLLL
-FFBFFBFLLL
-BFBBFFBLRL
-FBFFFFFRRR
-BBFFFFFRRL
-FBFFBBBLLR
-BFBFBBFLRR
-FBFFBFBLLL
-FBFBBFFRLL
-BBFBBFBLRR
-BBFFFFBRRR
-FBBBFBFRRL
-FFBBFBBRLL
-BFFBFFFLRR
-FBBBBFFRLR
-BBFFFFFLLL
-FBBFBFBRRR
-BFBBBFFLRL
-FFBFFBFLRR
-BFBFBFBLLR
-BFFFBBBRLR
-FBFBFFFRLL
-BFFFFFFLLR
-FFBBFFFLLL
-FFBBFFFRLL
-BBFFBFFRRL
-BFBBFFFLRR
-FBFFFBBRRR
-BBFFBFFLLL
-BFBBFFFLRL
-BFBFFFBLRL
-FBFFFBFRRL
-BBFFBBBRLR
-FBFFBBFRRR
-BBFFBBBRLL
-FBBFBFFLLR
-FBBFFBFRRR
-BBFBBFFLRL
-FFBFFFBLLR
-FBFFFBFRLR
-FBFFBBBLLL
-FBBBBFBLLR
-BFBBFBBRRR
-BFBBBBFRRR
-FBFFBBBRLR
-BFBFFBBRLR
-FFBBBBFLRL
-BBFFFFBRRL
-BFFFBBBLRR
-BBFBBBBLRR
-FBBFBFFRRR
-FBFFBFFLRR
-BFFBFBFRRL
-FFBFFBFRLL
-BBFBFFBLRR
-FFFBFBBLLR
-BFBFFBFLLR
-BFFFFFFRLR
-BBFBBFBLLL
-BBFFBFBRRR
-BFBFBBFLLL
-FBFFBFFLLR
-FFBBBBFRRL
-FFFBFBFRLR
-BBFBFBFLLR
-FBBFFFFRLR
-FFBFFBFRRR
-FFBFFFBRRR
-FFFBBFFRLL
-BFFBBFFLRL
-BBFBBBBLLL
-BFBBBBFLLR
-BFBBFFFLLR
-FFBBBFBRLR
-FBBBFBBLLR
diff --git a/2020/day6.input b/2020/day6.input
deleted file mode 100644
index f8efe7a..0000000
--- a/2020/day6.input
+++ /dev/null
@@ -1,2249 +0,0 @@
-fekdcbayqxnwvh
-fycwqktvxandeb
-kqbafvcxyewrdn
-akwqcvenxfydbs
-ewbaxdcvnkyfq
-
-timjneyhbvxkfagdpzrous
-gsumijvxoheptbafnkyzrd
-yxtbnupramvdezhkfojsig
-soaruhxnpiemjvytzbfdkg
-vfanlgjoiskzmubtxhceyprd
-
-dhgabzfspkltq
-pflzsbtaxhqdkg
-kzpbfgasthldq
-
-xeu
-uoe
-tnpeox
-e
-vrdzwglecbk
-
-nucwl
-hnmx
-fqv
-
-kfubtzpovrdlw
-vdjmblrztpkosfg
-kavpdbgfzreol
-qpdzfrvokibcy
-
-yhknrqpubeolzixtvsj
-tlysdjzovxhnuqreimk
-
-bclpmatw
-btqmcw
-cvwtbm
-bmwct
-ctmwb
-
-qmo
-oqm
-
-su
-s
-s
-s
-s
-
-ztfmocgiesxdq
-fpjmthksidlbo
-
-smzbn
-bmnzes
-skzmnb
-mbszn
-
-kibmrznqcyladupv
-umnbkdpievlqcyar
-idavpbmnrklqucy
-
-favynhqocijkmtbzsrulp
-ycbzrmkuvlhnpfqsitjao
-ujbomprktafvliqhycnzs
-nymjkczihqbpfvutosalr
-
-tdev
-vh
-wva
-va
-gzv
-
-d
-d
-d
-
-ejrmqwg
-merjguw
-jmreugw
-mjrgwtie
-
-wxiqgpu
-guxqiwp
-puigxqw
-pugqwxi
-
-ealugrzsvhpxfmjdbqknoy
-doyhvplkjqarnbeutxsgfmz
-uhvxjaklmzoyqdbegrpfsn
-
-iv
-os
-
-o
-amtle
-n
-npz
-
-vbfxystq
-knsxyqubtvf
-
-t
-p
-p
-o
-
-xtz
-ptz
-ftx
-ujt
-tp
-
-rs
-qdfan
-mkpz
-
-idewynukmzac
-yacfmdwuizke
-ieuamdczkywf
-iczwymuekad
-adwekumyciz
-
-agnq
-gn
-gno
-gni
-vkmnxug
-
-ftlyhuvaj
-xsribwknlgmt
-
-a
-nay
-a
-a
-
-leq
-q
-qj
-
-sxrwi
-isrwx
-wrsix
-iwsvxjr
-rixwbs
-
-p
-p
-p
-p
-p
-
-unvlyxripzbmaedwjsfqth
-uvefyibspxrzjdlwtqhnam
-hnbapqzflsvxreiutmydwj
-nwdefhtzrxuqpsvljabyim
-razbwymsdfpnlutqxveijh
-
-zfihqcvwdbsm
-sufwpahczlbvd
-
-tqjanyicszeodpmk
-ljmtwvkrcfghdqbu
-
-ydxnthpazbskufcq
-txymsjdfhwuqbz
-vhyuqsfjbxdrtzg
-
-smyvegtwiu
-imyqtuesv
-idrluzhjatkvpc
-
-pzacglju
-pzulcagj
-jcalgupz
-
-rgzbvefacsw
-vafbrezcw
-wegjvrczfqba
-zwrvabpfce
-rlhekwzyfbacovm
-
-hfqu
-fq
-
-kywvrsxgiojp
-xosvigpkwyjr
-irwkjfvmxpsyog
-pvxyrwiksjgo
-
-ynebghqmrkcjlpiuftdoaz
-reaqjoyngdbiltkmuphcf
-ynobfdgluriphskejcqtam
-
-uac
-ca
-
-fmxawgkrin
-xfrnbigok
-sfighjeckrux
-girxkfl
-gaxirnfk
-
-smoyaxbku
-uobkxysam
-kyszxumojba
-
-uocvgjr
-hjponwcuzg
-
-fobhkeascqluwrzm
-hzcolfipysnrjaguwkeq
-ezwlhkcfsoxqrua
-
-blnosjgezuqcrvxwm
-cmeznoglqxubwjrsv
-zxnqvwoubpremsjcgl
-umxrlsgqoczwbvnej
-cuxanesjkivzrmlboqgw
-
-dewtyuqjlv
-ucvazfm
-
-kbm
-imltbj
-
-ydqnxlmbouvaztcg
-vhrkwxjzfnpisye
-
-jqeadkcibtgflsz
-ltbxqifjedsawkzcg
-zdfqgkijestcl
-jczfqdektlsig
-scdgufyjeizlkqt
-
-w
-w
-w
-w
-s
-
-wygptc
-ygctpw
-gcptyw
-tpycgw
-
-xaqicwhtdpvk
-aixdcpkzhvqwt
-qkcdhxpwaivt
-
-wt
-xtrowm
-wt
-wt
-tw
-
-sncq
-cus
-
-zehxb
-txe
-exuma
-exz
-
-epjgfknhvuwmr
-nkwrmfhjegp
-rjkpynefgmwh
-ehfprjkgndmw
-mewkfdnrgjhp
-
-hgyc
-kgc
-ghc
-cgxjzl
-
-evsloum
-leosvmu
-mejvuzoxdsl
-evmolsu
-
-fugckqhymrxbtvdpnose
-beyorulcqxgdkzafh
-
-s
-s
-sq
-
-wtjfgezdhsxckibrqyunvpo
-uaonrpkmidbgftwlsjz
-
-mrylewxsgvfodhu
-sfdxoyghwlrvmu
-dungfohvlwrxsym
-ulmsoghvxfrwdy
-uoifgdlwrsvymhx
-
-tbg
-btdg
-tbg
-tgb
-btg
-
-pukht
-huk
-fhkqu
-hykcfu
-hedvmgubsk
-
-dxycvosnr
-xcsdyrgmapf
-qoyrsxdc
-uedsxtyrc
-ucdrsbxy
-
-m
-xz
-m
-
-gcjsybuhrotm
-dojcsubhprt
-
-opmgsudhej
-mjceogdsuhp
-djpgmoushe
-jgeptsluhfomakdvyq
-
-jugocetyrzwfbhp
-ipvqwcozxbsdu
-gybprkmznowultcaj
-
-ipcau
-n
-
-juzmidp
-iudjp
-digjups
-pajiud
-
-zxnugrosjvlcphwmqbdyt
-bvtlmqnudzrjwysxcohagp
-tdxhyuwemcvbrpzgnoqfjls
-
-hoefmguvxyiazwcpbrjk
-umlbagzxeowthjfpik
-hmxeziglfbwjup
-jgxbspifzwqhneum
-
-mgvupsk
-ezwcui
-
-adczjnguyq
-ygnujdacqz
-
-ohricgqjfu
-rqgucfhoji
-
-vygwkszidxqa
-onxkejczsguywqv
-stvzbqypwmxkg
-
-ydjm
-fpbustykx
-yrq
-ry
-
-vjphn
-npvhj
-phvnj
-
-bryndzmekui
-oathqpcv
-
-yczewurklaxnfdhoqbt
-rlyhawcdunqeofxkzbt
-lhbsqfkxctyonwrdzuea
-zltnhdkqybaxufoerwc
-
-cjwarkog
-joawgrkc
-wcjgkrao
-wrcjogak
-coerwgsajk
-
-umwjqsetdg
-sjwmet
-jbteyhownvsaxm
-dmuspcztjrew
-
-xtswpc
-eahncvzqxkgmo
-lcixybdrsuft
-
-pcrfwszodmqnj
-vrcylgb
-iruc
-
-bqigzouxryndpa
-jaixybnro
-oabixhnjry
-
-pbznr
-xrb
-bdntx
-qecbyi
-
-zbvhxyfm
-vxmbyfpz
-vbxzmyfh
-
-nfcqwuhsrxojk
-jrqvokfscnxuh
-nxqiaulkrojszchyf
-
-dkwqfb
-wd
-hwd
-nhwd
-dnw
-
-vjtpxorsdyzbwhqi
-kirdlmofpnectxqwuz
-
-ynzxtvqogrdhwl
-yhdjomktn
-
-hqwn
-hnwq
-hnqw
-hwnq
-
-gosxz
-xog
-gfomxa
-ogxd
-
-wctesuhxonyl
-oxwhtecynusl
-cslwxehupyton
-
-pr
-spr
-pr
-pr
-
-maqfseovdhzj
-sqodparevimfzjl
-dxosqmafejvz
-dqzojehfasvm
-
-awsicurgfmxeqjylnvktbd
-dywmreaitvjgcnbklxs
-
-wmvbnqtxuriz
-hbuwefypzlkadq
-
-asjcpwml
-lcasmjpw
-ajspcmwl
-cmslwjap
-
-unkrl
-n
-ny
-yan
-nv
-
-zrjwsxduie
-jswxrziunde
-xrujwhsidze
-
-qnl
-unc
-xhtdjbvf
-omauis
-
-wxvoqihatseg
-setwqgi
-ewgstqci
-fetwqgis
-wqtfgkiesd
-
-vmpikgfsarbnxqudwjtoh
-bdovpatjgnxkqufsihmrw
-bjhnrtaokxudmfqpigwvsc
-kaqbvihwmsnxjpgrtoufd
-fmabtdgkuhxpwrivsoqnj
-
-eazsitkjronml
-otmrenjakzsi
-samrojenitzfk
-tkzenmrjoais
-tszkioaejrnm
-
-r
-rbq
-r
-r
-
-lwbrfsuahoq
-yjawifugdtrvs
-rfbaswu
-cfsarlknupw
-
-ist
-ay
-kc
-cu
-kd
-
-mbku
-bkva
-
-sxktwmyfaldbn
-ymkbnfpdltx
-xbyftnmkdl
-dlkfetbimxycn
-
-cjru
-rcju
-rjucl
-kcjrum
-auzcjrtn
-
-vkinfzqbrled
-rinldvbqfze
-rqizebfvldn
-aciqrfbsnelvxdz
-
-ig
-ig
-gi
-gi
-
-rskzxocuq
-kcovqsnztur
-skzocrnyuq
-vourxysqzkc
-opescqukrhjz
-
-i
-u
-
-xqfviycpuzjbwkn
-lnxbfkpcyqdawm
-xofypnwkbcqv
-wbvxcfkqtnpry
-bnoixpfqgkcwy
-
-ziwlofkdgpc
-qzayrwjvks
-
-krybec
-ryk
-yrk
-kyr
-yrk
-
-xkhdreqfbyipmzalco
-wiepqtyhxflvcomabjdsz
-
-jpgankzcvbtw
-kxzugtvnbjp
-gknqpjxzvtb
-kbtjpvzgmn
-bptzvmjkng
-
-hdaxwiypslz
-ndbylw
-xdkwtflpyqsz
-wlrvcdyjg
-mlfewsqodyu
-
-c
-c
-o
-c
-
-mah
-a
-gwa
-
-heczudoqwmvtyab
-acevwozyqtdumhb
-
-v
-e
-
-rom
-mor
-romi
-rom
-
-uxdj
-d
-
-p
-p
-m
-db
-t
-
-dtpzeykh
-pkdhryzetu
-zdkhtpyac
-
-qanetkhrc
-ndlhkceqof
-
-khbfjlnacvz
-cmavfjlkn
-aynljofvqkgc
-tlkjcnavfm
-
-ejcbnl
-mbgcoiuhsfl
-qblyc
-blyjevc
-
-vgqlcfhnx
-xwgonuc
-pystigbca
-cnqlgmdk
-rlfcwg
-
-nazyhitgcjr
-nytgizahwprjc
-zjcgrinmahyt
-nrcdhzgjyati
-
-xtljebqpg
-bpjewtgn
-gjtpebx
-gmoipkebtcsj
-ptwejlbng
-
-e
-exa
-
-h
-nohegc
-h
-
-ivbgpd
-isfglyvbdo
-dgvbi
-bdivug
-gvikbd
-
-wyjmpxghiqfeoctdnbuar
-qetnaimxlgsfcbrpj
-kbcrhxgjnqpadefzimwt
-
-kindbwqlusyh
-tpzryjgehaucfmov
-
-wzgou
-ugo
-guo
-voug
-
-ndwhzsrugpjmltxiqofvkbyc
-lgirqyotwjbmvuspfnxhdzck
-jbqzgwcvhxofkrmsdlytpuni
-xrqzfjolsywtcghdbmukpivn
-oqryngdmhljvctxwkbfusipz
-
-saw
-as
-sa
-msajv
-sfa
-
-oxtrnhvfqyswldb
-tmzwgrakc
-
-coqyrbzjhsmwivanep
-xkshzgft
-hsz
-slzh
-
-z
-glh
-
-dtusogw
-fmpkzvbxnjwh
-eaqdciyw
-
-bgcyqhrztvdxwn
-vqtanbyurxczowdg
-kmjxyvnbqztfgcrwd
-
-vospejybinm
-fiosvkbnjep
-johqpznbeisv
-iysbokmjvepn
-
-nxsrfohagwb
-agblosrxwnhf
-xgircuhsaobfw
-hfxpgosarnbw
-
-bgqurk
-eumkrnvxqg
-gkrqhspafuoc
-qtogubkr
-
-bxlapnm
-nptix
-oqxpn
-npx
-
-rytbpswaezlufdqxo
-imazhtjqnglc
-
-encpqudzigamorv
-vamkeznqirdcgp
-opvrglqsmcindzae
-mpvncrisdezaqg
-
-ikxqemun
-zadbkqjtxney
-kenmpxuoq
-
-vjdqxfyhckrpton
-hmngcfpytkdxqvo
-ohdvuywpstzkcaqf
-
-tepj
-te
-ecvty
-
-jqotiphkmsexvfugd
-gwpyfuhlevkdiotjqx
-tjkfvghibocaqxeudp
-onexjzpgthuidfkvqs
-
-ltfq
-lqts
-oqtl
-
-nqsyglepwzhmtiojbuvxf
-wihkgaoydpzvfxclsenqjmt
-
-fqxmt
-bsgtmxqyrjfdv
-tfqmx
-itmhqwfx
-qtmxf
-
-rgv
-vjwo
-nlekpa
-
-ldytkguwhazeqpb
-pqzaytglhbmfuedki
-dqbatkpyezhglu
-ztgyqjebhkdvpual
-kpalzeytqghudb
-
-xsynhr
-hsnury
-
-qyjukdtmnwhrczvolsb
-ymsutqrchdblznowvj
-
-mpw
-wmq
-tdwm
-wmd
-
-n
-n
-n
-no
-
-vnutqbxrygmjwhks
-rhoalixstfyuq
-
-jeyfhsotc
-setchyoj
-hcyoejst
-
-ylhpvfiawoekjbq
-pkroabqvljiyefhw
-
-akqbyjpziglmfedw
-wjdbyeaqpzligmkf
-lfikyqwzbmadjegp
-aswgkzdyfrqpmnlibje
-fqpmyedjklgzibaw
-
-qe
-eqo
-
-jbxoe
-qoikde
-
-c
-n
-j
-j
-j
-
-rfh
-rhf
-rfyh
-rhbf
-qfrh
-
-hokvgpxyunam
-bmpyogvhunlw
-morevjuznhydgit
-
-ohns
-nhos
-ohns
-hons
-hsno
-
-kxclzyqpan
-aexnyqzkpc
-pakcqnxzy
-
-gkytw
-mgtw
-gptmw
-
-fixsozjwykhupqmvtbrc
-syimxhzbpwcktrofuvjq
-xuiwfjvzcpykqhbrosmt
-mwrbvqjtkcsipxfolyhzu
-
-bzhxpyfmk
-yfzxmakphb
-mkzpxbhyof
-hbmzfkxpwyu
-pxzhkoybmf
-
-osdyp
-dbsroy
-sydoj
-
-yterzphvxdm
-vtxrmyhzedp
-vymperdhxtz
-mpxrvyhedzt
-
-esakn
-cseak
-hxasge
-enksta
-
-u
-gfzua
-
-jsymd
-dmxjy
-jmdy
-xymjd
-
-sezfhlvxmaqtd
-ajvtmqsecyghfixzwl
-ksbhxzvafqpmuet
-zfeqytxhadmsvc
-nextsvazhmyfq
-
-rucla
-auclyr
-uticrapl
-
-akizsuwdmnhpxbgyceft
-gwxpfeoyihcklbndasz
-zwhsbigdynkpxceaf
-
-zag
-vmisa
-yphkcant
-jdma
-bia
-
-nplydbkoq
-oasptkqgldnbey
-doypnqklbc
-yblkodncpuq
-lqkynpdob
-
-hmj
-jm
-
-gniearxpdbjlkfm
-qdvjlute
-
-omsihqlnwzbt
-blzmhisnqoftw
-onqlmwsetzbphi
-
-jzoxcwdf
-wdcjzifxq
-
-ykdshgzwjfecimnp
-jhipmsaftezkoc
-ziaspcjfmkhve
-
-t
-t
-t
-f
-
-zmevcjhbsainxoquwpftkydlr
-cygwbtvxemnzfjhrqkdspaolu
-efdtnrlwczymxqvpsoukjbah
-
-oujkhnlzydsirva
-dxgzjsuptaohqvnkic
-aoiujdlnkzehvs
-uriadhksjyoznv
-iydmovnzakhfusj
-
-ycajzrtie
-zctyriesap
-pxiacrztehby
-qaenyxtzirc
-saecrytzi
-
-xrnjkgdpuzqvcm
-ndqkvuxczjpgrm
-ucgmzjpqrnxkvd
-npqxkumdcezvgrj
-
-thymlxwaoz
-ylhowtmazx
-
-nwaisrejbtqfmh
-mbwhqnrfjesa
-hfnrqebjasmw
-jecwhfgrsqodanmb
-qasbhnjwferm
-
-ny
-ny
-yne
-
-lgkmfbthwaouscxpznvyrdi
-nhlmtpwyrojfvbuaczxkgds
-askbuvdozmnxhfygrlwctp
-fytznqhlbmxgrwcdoupavks
-wcplxyvsrdjnfgkmuzbtaho
-
-fklceui
-kclfiue
-klefiuc
-clfekiu
-iklcufe
-
-yavcmhwbp
-capvymhbw
-whypmabcv
-pbzmcywvhja
-
-lbevjz
-gnvefbu
-webvd
-
-ewzcqndmjhvy
-jevrqnym
-guqpiotaevsbmynlj
-vqmekjynf
-nefqmjxvy
-
-akgwyjfi
-giwfyljak
-
-pdejr
-jerd
-redj
-
-liwtk
-kiwl
-wikl
-
-rbwvox
-bxvnor
-vbwxro
-vkrxob
-xbvirwo
-
-ntsbkwqefjphro
-nqdvgxihopwc
-
-dn
-nd
-nd
-
-j
-f
-g
-k
-j
-
-tfsul
-usftl
-
-ov
-v
-w
-tj
-sl
-
-gdlufaesv
-uagvd
-vudag
-
-cbegxmuiwkzo
-okrmgbfwvnecp
-uybxehawmgqkoc
-yloqmbwgtczke
-
-jms
-ymsfjo
-lmsuiwhe
-ydsmk
-
-wgckujsd
-irp
-
-zgeulsjvimptdaxrqnk
-zbxtefdmvganulqprikjs
-ptslznrjqkxemagiudv
-
-fqtb
-qp
-aq
-q
-q
-
-hrkzci
-bhwkpidxtflcue
-hkic
-chki
-kcjhiv
-
-gi
-s
-
-rakewmostbfvjzgi
-begtioavfrkzjm
-zoeikjtbfagrvm
-
-xnbhdlctm
-bgfhwlxsaqnkov
-pelmnhuxryb
-
-e
-qr
-jh
-
-vhtwuokdqpa
-jfaniksczbeymr
-
-ngedtljsvybxkmhfuzw
-tbzedwsjgknvhlmfu
-lzbgdsuhkjtvermwfn
-smizqluwdetfavbnhjg
-blwtngusvdjzhefm
-
-lxaiqvkoh
-feioxvwbsrl
-
-fy
-yfbqlm
-fy
-yf
-yf
-
-cuygpzd
-kv
-k
-v
-
-antp
-nat
-
-uk
-ku
-uk
-
-tdjbri
-rdwezgjtlck
-stvfhapyx
-
-psu
-spy
-ps
-pksy
-bpsq
-
-db
-o
-o
-
-yi
-iq
-pmxi
-i
-
-oxt
-atox
-txo
-
-wn
-sgzth
-b
-m
-ynq
-
-ayxvhzu
-vhyzxu
-hvzuyx
-
-cxoygklt
-toky
-ovkpyt
-voystpk
-
-yqtjwifbvsn
-vstyfbxjqwin
-vsjtinqfwby
-qxysnitjwfvb
-bjfynsthqiwv
-
-zobny
-zynob
-ozbyn
-noybz
-onyzb
-
-inpdmtkblgqrvaowzxu
-zhrbpuwiqdomgvlnt
-topveguwzrcbndmqli
-
-eapmtqrski
-islukrmpe
-sevcbzfngx
-
-pcbl
-vxqwe
-
-ky
-t
-p
-qzfo
-
-bkhdlpnrxezivu
-lztsfxpgknho
-knwlxmzjhpy
-
-t
-ita
-oqt
-sbt
-
-omwk
-eowm
-wmo
-wmo
-osbtmxwd
-
-dwgpvjemitbcnuhr
-vyjlitenkbpmuhqwxd
-iedvbwjczstunpmhg
-
-yfakujntsriwgxm
-rfatigyjkxusnm
-uyxitmkagnjfs
-isjafytxumgnek
-tiknjmugxsyaf
-
-pahkyfojrv
-enxmd
-
-sehnkcr
-shkrc
-hcwxilkru
-skgchrfpjt
-
-zdcvpant
-nizclpmtgbv
-jtcpnzv
-phtnscvza
-azcntrowvpd
-
-ativhgmyedozw
-nvztmiahewg
-uhaimgzventw
-txiqfmzglphvwae
-ehmgiwtzav
-
-qdpreikohtyjc
-ihtydekrocpqj
-djkoticqhpery
-jcorkdepqyiht
-
-kgwunqm
-qgjunwk
-oinqruwzyk
-
-wtkqceimludr
-mkhpwdcqleurzt
-mqweldutkcr
-kdtmwceulrq
-rqlutcidwmke
-
-k
-h
-k
-k
-k
-
-irb
-arbi
-bri
-irb
-fbxvri
-
-umpkng
-qmnugpk
-
-sbdxmlzacj
-sbzlcamjxd
-cajmslzxdb
-
-fwndcxr
-xbmusn
-
-t
-t
-gh
-p
-t
-
-zovqiwdhuaslkjxrbcnt
-flhnkoxvadiqrwpzbjs
-gqkisrxodznabjwvlhp
-koqlswdahnzjvbrmyxie
-
-apecofvgshiyqbj
-icegjhasytobfpvq
-ocsheqagjfpyivb
-pewjncobqiysgzrfahv
-
-wzomnlgyxj
-thazprgi
-
-rywgaemsubhvkqcozpnxl
-avehbwolxnzmqyprgu
-qyrgpxhazluvenobmw
-jhtrzywlnmbeoxvgpiaqu
-gavmwzrponyxhduqble
-
-tw
-wt
-tw
-
-qpzxrctf
-
-iqpunlsawtcykmxbdvgfzjr
-vnwdruyptakbgqxjimlzcfs
-fgizdmcblparnsvtuqwxkjy
-pxwylavndgqtjbicfksmzru
-xtpdfrbkcglzvqjuminaysw
-
-xkyvhtdwpjnulig
-hvegnyitdwxjz
-vthsnxjaywdig
-whdagyqvxjtni
-wjvgytdaxnhi
-
-ygduev
-clqoa
-qxc
-xaz
-fc
-
-rzeqvofasyhjgxwkmtcudn
-vkuogexmwhznrycdqft
-zupwcondeklthrbvxgmyfqi
-
-mtredzn
-xcnozebtrmd
-elzrmwtund
-emtdnrz
-tedmzorn
-
-tlbunpqygz
-xmehasrifvwj
-
-hoskgitlw
-owrailhtfkg
-wigbjvhtolk
-tbhivwgsuklo
-
-fxnachtsdmiwvuzkg
-hacwldskfgvuixmtzn
-xghufdizawvnmsctk
-
-gnauvfizjdortq
-rinjautyqdzvg
-giunqazvtdrjmc
-wndhjzuqviatgr
-
-vtpsy
-sptvy
-svpty
-ptksyv
-
-yaskce
-xdtvyjnqma
-faoyb
-psyfa
-
-lbxounj
-lijrmoxnb
-mioybjnx
-afbjnvopxsch
-bjlzoknx
-
-vqmsgwjfkzdbthal
-jszvlwthkmqfgdba
-akmfjzgldswvqth
-tuswfahjmdqkgvlcz
-jvatqgfmnwzhdksl
-
-uqyfkzdwta
-hctzeiywabpgvlqonmuf
-zyurtaqwsxf
-wyruzjaqft
-
-rwltyhqdecxagbov
-azthexlkoqmvrdngcwfs
-corjvwqhutexadlg
-lecogwrhavqdtx
-qpdvrgctyaohwlex
-
-egsilhd
-hxmijg
-
-tzdmnvsyiwjrhakbgp
-wmzhsctpdrbnagvyei
-bvwtaylgdnzhsmipr
-rhmlswzvpandgtybi
-
-qriopbacexhnlwfvsmdk
-wblaondrszhcfpei
-pdnahlrjseiwfcob
-cerwaoshjldbfnipzu
-oalsrdienwcfhpb
-
-xcpe
-pcx
-cxpl
-nbpyzixc
-lpecx
-
-xyfcgdaew
-jdlcopnaixqbv
-ehkcdrax
-dcytarmuhgxews
-
-bqozpsd
-pqzosd
-zgqdop
-ocqzdfp
-
-uxy
-szj
-jzl
-fhvk
-
-muz
-m
-omycvi
-im
-
-t
-u
-
-xslkmbzarnfeo
-axmndjpsqzelrbkfo
-eykroszbaxlmhfn
-
-rsz
-rzq
-kzrit
-
-hkmqiydpzlosuanvwj
-czsjklbvwaidhnxpu
-ejvwqmatlkziundhps
-udgjnfoepkwilrhsvaz
-
-czlnqtdy
-bcv
-cvga
-hvcb
-ac
-
-lcmytwdeqifzakjhuon
-mdqxhfgpzykvteajn
-emfpxqnhbykzdatj
-
-rtgmujlen
-eguclrkmtnj
-npjgemtrlu
-untmegrjl
-
-olykiz
-orxyswdtka
-
-qelnh
-yijmfxtvbs
-gweh
-wrc
-
-vjcediawtnrmoh
-lvnhmabrxcjwet
-ajmkbntrvchlegw
-
-yicrxeztbdpjuqlfgnvksmah
-rayjtgdsfhexiqvpcznlkubm
-crxijflabsgkhtqmdeunpvyz
-
-gpbklvxy
-pybxg
-ypwgxbd
-gpxyb
-
-vos
-sv
-vs
-
-hqiktnmezpvacby
-uekhv
-egskvh
-kvehog
-
-myhoetiwlqrpdk
-pgfkbqleywmhtic
-tezpslhymwkiq
-
-t
-vxh
-g
-t
-
-gjimn
-ijugmn
-njmgi
-
-drojlynvs
-nrysdjvlo
-lydosnjvr
-sjylnrodv
-nyjrdvols
-
-vjrclek
-vuljbckqfteds
-cihklevgj
-
-rqbvni
-flxuv
-
-gpywjntefcm
-cnoaetmyjpgd
-mpeynjcg
-rbnpymcgexzhqji
-cjumnegpwy
-
-h
-c
-h
-h
-h
-
-hzrqoybi
-wynqkcmlduae
-zqybh
-
-itnoq
-rtinoq
-tqhlin
-imtbq
-
-moetialxhyqkznjwscgdpv
-qwcagyzjvtoednmixlsphk
-kxqajsiotvnlhcgwdzympe
-ynejvlhsopakcmzdtxgiqw
-yaxdpiqktjsozmgvncewlh
-
-qyrlgevbzsutwmxjhindcaokp
-vtdjrqaocngwehspylbukmz
-
-aev
-ve
-a
-byqg
-
-ycfvpamkhliot
-wmckyrthxusfqiedjlaz
-atcmhkboiylf
-
-sfqkmlhdc
-mlhkscqdf
-fcqsdhmlk
-kqfhcdmsl
-kqslzfdmhoc
-
-dgveoupsmhabyfkrztclj
-vedwkmptusfhzaygqolcr
-
-tfoaevgbi
-yfu
-sfwqh
-kpfxlj
-dufl
-
-mlwhb
-jvgtzp
-
-jzp
-szwipyj
-
-larkxcqsbpeuiv
-fharycntpzi
-
-lsympnqboj
-nlpjmobqys
-njoslbqpym
-qsnodjtlmbyp
-lnosbmpjyq
-
-jpovmflgikracyqunwthe
-hawgrlcyvpnmkjeofuit
-pltojwgrcfkhaneuivmy
-klaoumwtfgejnhcripvy
-
-hmvxakwrtundglz
-mkacvnhwrlxbzdug
-
-asvoizlprxjefycmthugnqw
-zohmwpxdaiyvrfnulecgjtq
-
-natmhjdg
-zctmdalg
-vbiamufq
-
-vhxbajdokyn
-dkvxonyhmab
-hnexvbdaoyk
-
-gyjfnm
-gmfnyj
-jfygmn
-
-bjqn
-bnqj
-nqbj
-qbnj
-
-hawjpsxeolr
-rwlqenjhpsobgamx
-
-tovhgbwjdckpqn
-ifzl
-mleysuzrax
-
-sky
-ky
-mgfpwk
-
-zx
-h
-ict
-gz
-
-zsjitm
-lijor
-jmwabyit
-
-nbzmj
-abvfwrdn
-csnbm
-
-hdqyski
-ywvclhdsq
-hsqbyxd
-
-jmt
-mtsuhxjzkla
-
-fijlt
-psjbtfieg
-zqcohan
-
-gwnfpqb
-pnwf
-wpnf
-wfnp
-nwpf
-
-irgkabh
-khgibar
-akgirhb
-
-emonkbuycsz
-noyzscmuk
-
-ejsqzftblax
-scomdrxgibw
-
-afdjtiyvgqorsmnhubweplkxzc
-fmznscjliqbyevhxwoktdugrap
-
-cgyxhiubmptdokesrjzlafq
-pmdqvjuygbeslzatokxfr
-
-hyawt
-wh
-wh
-wh
-
-vojux
-ei
-nq
-
-pvnjgmxksluctq
-zfrdoa
-
-d
-z
-x
-xd
-d
-
-dwpscgknx
-kwxc
-xcwk
-wxkci
-
-qipb
-ildp
-ziacpr
-pbdi
-
-x
-xb
-x
-x
-x
-
-fenqcuwi
-niczkhxeq
-mcejqnxit
-iycrngpqel
-
-uyj
-yju
-yuj
-ujy
-
-b
-bd
-
-e
-e
-e
-e
-fei
-
-tncbizahupsdwlog
-oclbqdskwnaymx
-atloswndebjcriv
-
-msojaeqnphzylgdbc
-ebmzlphcgyjoadq
-
-apehlz
-tozlmeba
-ekyflaz
-
-qpnhfgjdzymlctkrb
-slmbhkqpfyngzj
-mlpqjyzbghnkf
-nmzghjyblkfpq
-bngqfhymkzpjl
-
-apgvczsfuybdiklq
-gmhxdubftesavzlpjcqyi
-aswyzugkicpfvqldb
-oylsvgbcnuqzdafpi
-
-ncrkh
-nhkrc
-kncrh
-hkrnc
-hcknr
-
-nvrjtzamfuhqxp
-ebdigavktsywflmco
-
-evrabhcmxkonl
-vlcxmbnkrheo
-cxloknrmeb
-pkclmerbonx
-lbkoryunexmc
-
-zdmhgatfpqcwrsu
-beravdksgly
-
-wfo
-fw
-bfwh
-
-kpzlhbtjfiw
-fjwpzhkbli
-bfhpkjzwil
-pjwoikhzlbf
-
-yworad
-adsyr
-
-atqhenzlswmufgkojrb
-lfoanzusbhgtjkyeqwm
-nsgajlhqeobkfztwmu
-mlcisaozwkhetnqfjgbdu
-
-xhqkmdutfzasylbw
-hqubgdwxlztkmsyfae
-pfhuacyitsqxmbwlzkd
-
-tqbpnosumlj
-jdtpqbyoli
-ulobptqjn
-tfqlvwzopbajc
-jxpeobqtulis
-
-awg
-wag
-awgk
-
-czbledy
-avgwqu
-
-kf
-f
-
-bh
-gm
-tj
-
-l
-dm
-lspg
-zfeauxn
-qt
-
-zwep
-pwze
-wpze
-ewzp
-
-jptngbzhk
-tgnkrpzxdjh
-ghjznktp
-
-ofrbuieszcakqt
-snomauqcerdpbt
-
-nbjxhyvtpl
-tbxzgovhjy
-yhbtxjovizk
-bytvxhj
-
-pibogfjn
-fogbinjl
-bonqgfji
-banjisugcmwfvoe
-iobghfjn
-
-tz
-t
-ta
-
-qnraf
-qrxf
-qfr
-ezroqf
-
-iachtzfemxwbs
-gzsfycehaqwkm
-twmhzcsbrafe
-zmafhcewxs
-
-gqoznmrlxvudwehf
-uvzrohmlgdnwqxef
-frgvqedxohmlnuwz
-fqledmnvwghruzxo
-
-rxcvnyjbqgm
-cjygxmrvbqn
-vuybxmkcrnqg
-ipgrxvnobcmeyq
-yvqnbmrgcx
-
-ay
-ay
-ay
-ya
-ay
-
-np
-xa
-ba
-
-ibrcmtxqvyaed
-vycdaeitmbxqr
-dvqiytmcxabre
-dvbaicqeyxrtm
-
-hgzd
-zdlho
-zhd
-zdh
-zdh
-
-hcipn
-zchnipb
-
-rwptzv
-ymoedzaltsc
-
-ubdwmjecyqxltipzfn
-mvfulhydqewjtzpnci
-
-najhotpuyrsxdlqbk
-wxetrjaobduqpznklsyc
-
-jwcgbxoipeyfmkvhr
-cmblwpoudxteyfvnhkrg
-qzseparbjxvykfocghwm
-eqvwroycibpxmfghk
-
-xwedaqgiznj
-khubyeatir
-avgncxeljzmsoif
-
-zf
-f
-f
-htbcr
-
-st
-kmr
-rm
-tvebzs
-cig
-
-gdij
-gvi
-jhgies
-
-fduipkhlz
-izdplfu
-
-pdculaojmwsqebvgh
-zmhjsdwlefgoucrpvy
-
-bzwagcde
-uhsqpmloni
-
-mf
-f
-ltfn
-
-xlhmpdyieob
-mlxpyhideo
-mixkldhpoye
-
-lwthjcvgnmxuypos
-vixqojmy
-evrxmoyj
-ymkajoxv
-zfvjdymaxo
-
-voh
-h
-
-onqdyf
-qmnf
-wiktfqsajgn
-
-poaheifqcl
-plqcoifaeh
-paegritwhnvlofzucjd
-ipeohaflc
-oielhpafcs
-
-tzvenpcqxisbjhmgkrw
-xvnckipbhszegfwm
-pkchgoxbavsmewizn
-csvzekmhyngipxbaw
-
-wgim
-ixaw
-wixka
-iyownrps
-iwk
-
-caofbkuznsiqrtvpjyg
-pyroglzcjtfub
-pcfjryzgtubmo
-
-junoecpfwmhtxkayziqvgrl
-zqigynpcvufwohjlemtkxar
-oeavkrhizljumtgfpxwcqny
-tyizfjnoqcbgxarepklvwsudmh
-
-itvqcxburwo
-idtvacoqbex
-btvifjxcqyo
-ojikvqcltbx
-
-bromkxwdfq
-dkfrbwqamxo
-korxywiqfdmb
-
-smyfvkg
-xmkgvsf
-kgnsfvem
-mkfvgs
-
-pdxa
-mqgx
-lxsezkbjic
-xy
-wfprx
-
-ynhepftgslro
-wytlefgosarn
-ysgtndocwlrf
-lrgnfoswtya
-zlibfutmrkxsvjnqgyo
-
-kht
-tkh
-htk
-hkt
-
-pcdxhjnovlusitq
-dbtrjizv
-
-bjhnkitaegvrsx
-nxghvbestra
-bwetgsarvhxdn
-
-oleswygxbnfmtzkjuar
-xuaezbtcwlgmnrofsjy
-
-hdrgyowbfktavjuqlzm
-gtkvfdulwqjzhymabro
-rzojgmltbyhafvwdqku
-
-uxpwqbyr
-xpquwyrb
-rwxyqubp
-rwbyquxp
-qxrbyuwp
-
-kqlwz
-rkve
-klnf
-ucqk
-
-irqgpjmdk
-ctqmvnkfbgj
-
-dv
-dv
-dv
-
-fariyqplzoetb
-zykjphxcg
-
-pytmwqvx
-txvpqmdwy
-xtyqvwmp
-wvqmxypt
-
-oekfrmuatwl
-axsvpcjkgqdzhiby
-
-fnyuqsihvmatgwxlr
-ufjmioapebxnqydhtk
-
-tpskxdqc
-kxsqcdtp
-ytqsdkxcp
-cxpqdtks
-tcxpsdqk
-
-soivtnhezljymw
-mhcyptneuvob
-nfetymhgdavo
-vnbhmxetaoy
-
-sqruavzncixgbpof
-vioanzfgreuxqc
-acetqngfrxoziuv
-gqcfmxvrnzaoliju
-
-earxh
-gmizfq
-
-tejlcvwgxpdbhsorufmiz
-oftmijdscxlvzbuwpehgry
-cvnksdzamhgbporwtufiljxe
-
-wdmgbxyihk
-khmxyidwg
-hikxwdlpygm
-
-nzcf
-cz
-
-vhfecblgmowtqxpaskyi
-xwgztblrjiacpfmheksvy
-
-pemi
-e
-e
-ze
-e
-
-fxwy
-xyfw
-yzxfw
-
-kshfqrlmyea
-xsqboukan
-
-vknp
-levn
-pknv
-
-vqsdyhzwei
-poijeyhscazl
-
-ryf
-ofit
-txw
-jqvlhmbgeuznps
-
-qhzycdugf
-cuhqdzfg
-fghuqzcd
-
-emqngdv
-meaqh
-ezqmax
-exqm
-qmaze
-
-jgrnahfyvotupkxziqsdmceblw
-ntughqlksexifdraozvmbcpwy
-
-imt
-tim
-
-pthzw
-tpnwhz
-piztlw
-tzpw
-
-xpuh
-xbqrvys
-lxw
-
-cpidsmqk
-rkpcdmisq
-pcdkqsmi
-pmskqdic
-
-thxqby
-bqxohty
-qybhxt
-yqtbxh
-yqbxth
-
-qkplixrshe
-jndbsraivm
-zrgelsyit
-lfsri
-
-zqr
-zrtc
-rz
-
-deabt
-ueatgs
-hwiqknj
-ulxb
-tdm
-
-sfpwq
-phsqw
-kpsqw
-
-guhmbl
-gmuhb
-mhndpub
-yuihmgcb
-uismhby
-
-qioblnp
-olnqbip
-loqbinp
-
-rqc
-qcr
-crqay
-rqc
-
-z
-z
-z
-z
-zp
-
-ljo
-lcbajeorg
-jlox
-oljx
-
-loasmqxdy
-mqld
-lvmdqb
-
-iq
-qi
-
-filjwt
-fwitlj
-fliwtj
-wtljif
-tjwfil
-
-dx
-xd
-dx
-xnd
-xd
-
-vzo
-zov
-
-ogbwntefukpch
-ebwnsfkgupocht
-noctepwgfhkub
-wfqkugnpodjthbce
-
-genbzqkvspy
-brkwjevpqsczn
-fdxnvtzsobqiekau
-
-nxwb
-wnj
-
-imfvncxbhlrdzgok
-vbfdakgnhlcrixmo
-cnzbholrkvdifmxg
-ucoklqmbdxnvigrhf
-blndpvmhkirgcxfo
-
-hquykcmexvza
-evnayxkchmzq
-jfyxamhqpiwzeokgcvs
-ekzdruqamhlbtvxyc
-
-nk
-knwct
-pbykwan
-dzsegnfqrom
-linuwk
-
-tbc
-tqbe
-tcub
-
-lzxybkftrhis
-ylrxhdasutjzncipgbfw
-xktyhfizlrobqsmv
-
-sjb
-pdkaowvu
-
-bnhcaqjprkx
-ncdrqxbolaijkt
-zaxrnksqchybj
-cbnaxejqrk
-
-bteqziwsumofxpvchr
-choiepzjxuwtvfrsm
-irtuwcsemlpvfzhox
-twhximepcsfzorlvgu
-
-ta
-at
-
-xjdybasehgpm
-edaosjpgxhmby
-xybgpdjemsha
-dmexjpbaslhywg
-xpmedyahjbsg
-
-cbjxvynghstrfluoempdk
-idhbtapleufcsrgywnvmox
-xohdljfecvupmsgrbytkn
-rvleksucfbdymxgotqpnh
-
-klfewtsaihpxnmogudy
-seqdufxypnlikwtogah
-ewpohdiknstxugayfl
-xwenydkuhfasotlgpij
-fignpyousdtkwexalh
-
-oudzygfimh
-xvj
-
-qbpviwoadmfr
-dimbswlpqnh
-yzgxbqidwuj
-
-ismkdvnyzajbuowlpqfr
-vjqwufylscopgmkrdabi
-rhbwefvqiykupsajolmd
-msdqtukoipvfxlyjrabw
-
-lho
-hol
-jfolhv
-
diff --git a/2020/day7.input b/2020/day7.input
deleted file mode 100644
index 4a770f4..0000000
--- a/2020/day7.input
+++ /dev/null
@@ -1,594 +0,0 @@
-faded plum bags contain 5 wavy cyan bags.
-dull aqua bags contain 4 dark fuchsia bags, 1 shiny purple bag.
-dotted olive bags contain 1 striped gray bag.
-vibrant brown bags contain 4 dark tan bags, 4 mirrored gray bags.
-shiny black bags contain 3 mirrored black bags.
-dull bronze bags contain 2 plaid aqua bags, 4 shiny magenta bags, 2 faded green bags, 3 dotted gold bags.
-wavy plum bags contain 5 dim indigo bags.
-drab brown bags contain 5 clear fuchsia bags.
-vibrant maroon bags contain 3 shiny coral bags, 1 dim indigo bag, 4 muted crimson bags, 5 clear black bags.
-posh magenta bags contain no other bags.
-dull brown bags contain 3 dim violet bags, 3 striped silver bags, 1 shiny purple bag.
-pale gray bags contain 3 plaid magenta bags, 3 clear teal bags, 3 pale white bags.
-plaid turquoise bags contain 4 bright orange bags, 5 drab white bags, 4 dotted coral bags.
-dotted silver bags contain 2 pale silver bags, 4 dark teal bags, 5 posh gold bags, 1 bright orange bag.
-light red bags contain 1 dark violet bag, 1 mirrored coral bag, 3 drab tan bags, 4 muted olive bags.
-shiny brown bags contain 5 vibrant lavender bags, 4 dark lavender bags.
-plaid plum bags contain 1 faded green bag.
-vibrant lavender bags contain 4 bright chartreuse bags, 3 dark teal bags, 4 muted aqua bags.
-muted yellow bags contain 5 posh yellow bags, 3 dim olive bags, 1 light cyan bag, 1 plaid gray bag.
-light beige bags contain 2 wavy orange bags, 5 vibrant salmon bags, 2 dim brown bags.
-muted indigo bags contain 3 dim brown bags, 3 drab brown bags.
-dim bronze bags contain 4 dim black bags, 5 wavy turquoise bags, 5 bright violet bags, 2 dark bronze bags.
-shiny teal bags contain 5 plaid chartreuse bags.
-pale aqua bags contain 2 striped lime bags, 4 dark turquoise bags, 3 dull tomato bags, 2 mirrored lavender bags.
-plaid violet bags contain 2 light olive bags.
-dotted maroon bags contain 5 striped maroon bags, 2 shiny turquoise bags, 2 dull gold bags, 4 pale olive bags.
-dim chartreuse bags contain 5 striped plum bags.
-plaid gold bags contain 1 striped green bag, 3 plaid coral bags, 4 dotted violet bags.
-faded tomato bags contain 2 dark indigo bags.
-posh plum bags contain 1 wavy chartreuse bag, 4 vibrant blue bags.
-drab bronze bags contain 2 mirrored gray bags, 3 vibrant plum bags.
-muted blue bags contain 1 bright brown bag, 2 pale coral bags, 5 plaid purple bags, 4 dim lavender bags.
-striped indigo bags contain 5 dark salmon bags.
-shiny tan bags contain 2 faded bronze bags, 3 mirrored lavender bags, 2 mirrored cyan bags.
-dim red bags contain 5 dull salmon bags, 3 dim purple bags, 2 striped crimson bags.
-plaid gray bags contain 5 bright violet bags, 4 vibrant aqua bags, 4 dull tomato bags.
-dotted white bags contain 1 drab brown bag, 5 light brown bags.
-plaid tan bags contain 3 striped teal bags, 2 dotted brown bags.
-vibrant black bags contain 3 plaid tan bags, 4 muted white bags, 4 drab orange bags, 5 muted aqua bags.
-drab purple bags contain 5 muted violet bags, 2 vibrant blue bags, 4 pale olive bags.
-mirrored beige bags contain 1 plaid gray bag, 2 mirrored lime bags, 3 dark brown bags.
-vibrant olive bags contain 5 shiny indigo bags.
-drab green bags contain 1 muted violet bag.
-faded turquoise bags contain 2 striped brown bags, 3 vibrant white bags, 1 dull lavender bag, 5 bright olive bags.
-shiny maroon bags contain 1 dim bronze bag.
-dull white bags contain 1 muted salmon bag, 4 dim olive bags, 5 drab white bags, 1 dotted teal bag.
-dim white bags contain 3 mirrored lavender bags.
-clear beige bags contain 5 shiny cyan bags, 3 clear chartreuse bags.
-plaid tomato bags contain 5 muted beige bags.
-bright teal bags contain 5 shiny gold bags, 4 clear beige bags, 5 vibrant chartreuse bags.
-dotted salmon bags contain 1 clear fuchsia bag, 2 muted maroon bags, 4 posh yellow bags, 1 drab chartreuse bag.
-light gold bags contain 4 light maroon bags.
-faded cyan bags contain 2 posh magenta bags, 2 dark violet bags.
-drab cyan bags contain 5 faded purple bags, 4 striped crimson bags, 1 shiny maroon bag, 4 drab tomato bags.
-dotted black bags contain 3 striped turquoise bags, 4 dark tan bags, 4 vibrant lavender bags.
-faded purple bags contain 4 dull purple bags.
-dim violet bags contain 2 clear blue bags.
-wavy gray bags contain 4 muted crimson bags, 2 mirrored silver bags, 5 vibrant chartreuse bags.
-posh tan bags contain 4 drab tan bags, 3 muted crimson bags, 2 striped crimson bags, 2 plaid fuchsia bags.
-mirrored magenta bags contain 5 pale bronze bags.
-plaid brown bags contain 1 bright chartreuse bag.
-drab orange bags contain 4 drab teal bags, 1 dark bronze bag, 2 clear purple bags.
-dim green bags contain 5 dull maroon bags, 1 dull green bag.
-faded teal bags contain 2 bright yellow bags, 2 posh red bags, 2 posh indigo bags.
-dim gray bags contain 4 wavy blue bags, 2 shiny maroon bags, 1 pale cyan bag.
-light crimson bags contain 1 wavy plum bag, 3 muted magenta bags, 3 plaid aqua bags, 2 striped chartreuse bags.
-clear white bags contain 2 posh magenta bags, 5 bright white bags, 5 drab bronze bags, 3 vibrant beige bags.
-drab magenta bags contain 4 pale olive bags.
-plaid silver bags contain 4 bright violet bags, 3 dim brown bags, 1 dark teal bag.
-bright bronze bags contain 4 posh white bags, 3 dull salmon bags.
-drab maroon bags contain 3 clear black bags, 2 dotted orange bags.
-dark fuchsia bags contain 3 faded chartreuse bags, 5 clear green bags, 4 bright brown bags.
-vibrant salmon bags contain 1 bright red bag, 5 clear black bags, 2 clear green bags.
-shiny crimson bags contain 4 muted fuchsia bags, 2 plaid red bags, 3 clear green bags.
-plaid crimson bags contain 4 bright gold bags, 2 clear turquoise bags, 3 faded magenta bags.
-dim turquoise bags contain 3 drab brown bags, 5 plaid cyan bags, 3 plaid teal bags, 5 shiny silver bags.
-clear crimson bags contain 3 plaid blue bags, 2 drab tomato bags, 2 dull cyan bags, 3 mirrored fuchsia bags.
-pale tomato bags contain 1 dull yellow bag, 3 muted aqua bags.
-dim orange bags contain 1 posh magenta bag, 2 wavy gray bags, 5 faded indigo bags.
-mirrored orange bags contain 1 posh bronze bag, 2 faded white bags, 1 light orange bag, 2 posh red bags.
-striped turquoise bags contain 5 muted salmon bags, 5 dark white bags, 1 mirrored purple bag, 3 pale chartreuse bags.
-dotted coral bags contain 3 bright brown bags, 2 posh yellow bags, 3 drab maroon bags.
-wavy maroon bags contain 2 clear lime bags.
-mirrored indigo bags contain 1 mirrored cyan bag, 1 posh plum bag, 2 plaid silver bags.
-wavy indigo bags contain 5 dark violet bags, 5 drab black bags, 4 dark orange bags, 5 muted green bags.
-striped tomato bags contain 4 dark indigo bags, 5 light lavender bags.
-pale lime bags contain 2 bright orange bags.
-muted maroon bags contain 2 bright violet bags, 1 shiny coral bag, 1 posh gray bag.
-drab lavender bags contain 1 muted magenta bag.
-bright fuchsia bags contain 1 striped lime bag.
-wavy beige bags contain 2 bright brown bags, 1 pale black bag, 1 drab tomato bag, 4 vibrant blue bags.
-shiny olive bags contain 2 dim teal bags, 1 mirrored cyan bag, 4 dim yellow bags, 4 muted aqua bags.
-posh coral bags contain no other bags.
-dark green bags contain 2 posh brown bags, 2 muted white bags, 4 bright fuchsia bags.
-shiny green bags contain 1 faded crimson bag, 3 striped purple bags, 4 shiny salmon bags, 2 dark bronze bags.
-clear coral bags contain no other bags.
-dull salmon bags contain 1 muted white bag.
-dark lavender bags contain 2 plaid gray bags, 4 muted olive bags.
-bright silver bags contain 5 pale black bags.
-posh green bags contain 5 muted olive bags, 4 dotted crimson bags, 4 dotted brown bags.
-dotted fuchsia bags contain 5 shiny chartreuse bags, 1 dotted coral bag, 1 shiny cyan bag.
-dim fuchsia bags contain 1 striped orange bag, 1 clear crimson bag.
-dotted cyan bags contain 5 muted olive bags, 3 shiny white bags.
-dark beige bags contain 4 light teal bags, 4 drab teal bags, 5 wavy beige bags.
-striped magenta bags contain 5 plaid purple bags, 3 dotted crimson bags, 2 dull tomato bags.
-striped blue bags contain 3 dim aqua bags.
-light silver bags contain 3 shiny green bags, 2 vibrant black bags, 1 wavy turquoise bag, 3 faded bronze bags.
-pale indigo bags contain 4 pale silver bags, 3 dotted tomato bags, 1 dark violet bag, 3 clear lime bags.
-mirrored turquoise bags contain 1 pale salmon bag, 2 dotted crimson bags, 1 drab tomato bag, 2 muted green bags.
-striped beige bags contain 3 dotted tomato bags, 4 vibrant purple bags, 2 plaid tomato bags, 4 dark salmon bags.
-pale silver bags contain 5 dark lavender bags, 4 drab tan bags, 5 clear yellow bags.
-dark lime bags contain 3 pale aqua bags, 5 posh green bags.
-faded coral bags contain 3 dull tomato bags, 4 dark bronze bags, 3 drab tomato bags, 2 bright white bags.
-mirrored lavender bags contain 3 mirrored cyan bags.
-bright crimson bags contain 2 mirrored silver bags.
-striped gray bags contain 3 dotted coral bags, 4 muted maroon bags, 4 dark teal bags, 5 pale bronze bags.
-dotted magenta bags contain 2 dim teal bags, 2 wavy turquoise bags, 5 dull turquoise bags.
-posh white bags contain 4 drab tomato bags, 2 muted aqua bags.
-striped red bags contain 2 plaid blue bags, 1 light plum bag, 3 bright white bags.
-pale white bags contain 1 light purple bag.
-shiny coral bags contain no other bags.
-dark magenta bags contain 4 pale tan bags, 1 posh chartreuse bag, 2 pale yellow bags, 2 pale indigo bags.
-light gray bags contain 4 pale green bags, 5 dotted green bags, 4 shiny gray bags.
-dim gold bags contain 3 clear violet bags, 5 plaid aqua bags, 2 bright tomato bags, 2 wavy teal bags.
-dim crimson bags contain 4 muted blue bags, 2 light tan bags.
-wavy tan bags contain 1 posh plum bag, 3 mirrored gray bags, 1 muted purple bag.
-posh brown bags contain 4 mirrored black bags.
-bright plum bags contain 3 vibrant plum bags, 3 mirrored crimson bags.
-faded black bags contain 1 pale lime bag, 2 pale tomato bags.
-mirrored yellow bags contain 1 pale aqua bag, 4 dull aqua bags, 4 shiny white bags, 3 clear lime bags.
-muted tan bags contain 2 clear brown bags.
-drab white bags contain 5 dull coral bags, 2 drab green bags, 4 wavy tomato bags, 5 mirrored cyan bags.
-dull black bags contain 4 vibrant tan bags, 1 shiny chartreuse bag, 5 pale gold bags.
-posh maroon bags contain 5 dark coral bags, 5 faded yellow bags, 2 light lavender bags, 2 wavy teal bags.
-drab coral bags contain 4 posh chartreuse bags, 2 dim red bags.
-posh indigo bags contain 2 plaid brown bags, 4 muted green bags.
-drab aqua bags contain 2 pale magenta bags, 2 posh orange bags.
-drab crimson bags contain 2 pale bronze bags, 4 dotted blue bags, 2 dim silver bags.
-drab silver bags contain 5 clear blue bags, 4 pale bronze bags.
-clear salmon bags contain 2 pale aqua bags, 1 plaid gray bag, 1 clear coral bag.
-wavy chartreuse bags contain no other bags.
-dull plum bags contain 3 plaid gray bags, 3 plaid aqua bags, 2 mirrored beige bags, 2 wavy magenta bags.
-faded gray bags contain 2 dull cyan bags, 3 light lime bags, 3 bright lavender bags, 5 wavy plum bags.
-striped teal bags contain 4 drab maroon bags.
-clear lavender bags contain 3 clear coral bags, 5 bright crimson bags, 5 drab brown bags, 2 dim indigo bags.
-mirrored maroon bags contain 1 clear gray bag, 3 shiny salmon bags, 3 mirrored violet bags.
-muted turquoise bags contain 2 drab teal bags, 2 plaid plum bags, 4 plaid coral bags, 2 wavy chartreuse bags.
-dark white bags contain 4 bright fuchsia bags, 1 dull white bag, 3 shiny indigo bags, 3 dim white bags.
-drab red bags contain 3 dotted teal bags, 2 striped purple bags.
-muted teal bags contain 3 dark violet bags, 4 plaid chartreuse bags, 2 pale crimson bags.
-wavy red bags contain 2 clear crimson bags.
-striped olive bags contain 2 mirrored lavender bags.
-dull teal bags contain 4 pale teal bags, 5 pale violet bags, 2 drab white bags.
-light black bags contain 1 dark red bag, 2 plaid tan bags.
-clear orange bags contain 5 bright cyan bags.
-pale yellow bags contain 2 bright lavender bags.
-posh cyan bags contain 4 clear coral bags.
-drab tomato bags contain 4 vibrant blue bags, 5 faded beige bags, 3 clear coral bags, 2 mirrored white bags.
-pale orange bags contain 2 light aqua bags.
-dull tomato bags contain 5 plaid aqua bags, 2 posh magenta bags, 3 vibrant aqua bags.
-pale turquoise bags contain 1 pale coral bag, 3 dim teal bags.
-plaid maroon bags contain 5 posh maroon bags.
-vibrant beige bags contain 5 dull coral bags.
-bright purple bags contain 2 vibrant salmon bags, 5 dotted purple bags, 5 clear silver bags.
-dull coral bags contain 4 vibrant aqua bags, 3 dotted brown bags, 4 shiny coral bags.
-drab gray bags contain 4 vibrant lavender bags.
-dull lavender bags contain 3 vibrant lavender bags, 1 posh red bag, 4 drab tan bags, 3 light purple bags.
-striped maroon bags contain 3 bright silver bags.
-mirrored silver bags contain 5 clear blue bags, 3 posh magenta bags, 2 bright brown bags.
-faded yellow bags contain 2 muted maroon bags.
-striped purple bags contain 2 dotted yellow bags, 1 clear cyan bag, 2 dark teal bags.
-clear gray bags contain 5 dim black bags, 1 faded green bag, 5 muted crimson bags.
-plaid cyan bags contain 2 dark teal bags, 1 pale lime bag, 1 wavy beige bag.
-bright orange bags contain 5 mirrored brown bags, 2 dotted gold bags.
-dotted turquoise bags contain 3 plaid gray bags, 3 clear chartreuse bags.
-vibrant turquoise bags contain 1 muted brown bag, 3 dim purple bags, 1 posh gray bag, 5 pale bronze bags.
-striped lime bags contain 1 shiny gold bag.
-light violet bags contain 4 mirrored purple bags, 5 clear blue bags.
-striped orange bags contain 3 light gold bags, 3 light olive bags, 3 muted crimson bags, 2 pale cyan bags.
-drab turquoise bags contain 3 dim magenta bags, 4 pale black bags.
-pale salmon bags contain 2 mirrored cyan bags, 4 vibrant blue bags.
-shiny yellow bags contain 5 vibrant tomato bags, 3 muted salmon bags, 5 wavy tomato bags.
-plaid lime bags contain 2 pale yellow bags, 2 shiny red bags, 3 muted crimson bags, 4 dull green bags.
-muted cyan bags contain 4 bright green bags, 5 striped bronze bags, 1 vibrant lavender bag, 4 posh violet bags.
-dull cyan bags contain 5 dark lavender bags, 5 drab green bags, 1 bright crimson bag, 4 mirrored silver bags.
-pale beige bags contain 3 posh coral bags.
-shiny chartreuse bags contain 4 mirrored silver bags.
-dark silver bags contain 2 dull turquoise bags, 1 muted maroon bag, 5 vibrant magenta bags.
-mirrored violet bags contain 4 dark brown bags.
-clear aqua bags contain 2 striped beige bags, 1 dotted indigo bag, 5 faded violet bags, 5 vibrant violet bags.
-plaid teal bags contain 3 mirrored lavender bags, 4 posh gray bags.
-wavy olive bags contain 3 dull blue bags, 5 bright salmon bags, 5 shiny purple bags.
-pale lavender bags contain 4 light purple bags, 2 dotted gray bags, 2 pale plum bags, 3 shiny silver bags.
-shiny blue bags contain 2 vibrant white bags, 3 light gold bags, 3 mirrored lavender bags, 1 drab plum bag.
-light coral bags contain 4 light teal bags, 1 striped chartreuse bag, 5 dotted chartreuse bags.
-pale brown bags contain 2 dim gold bags, 2 clear turquoise bags, 3 bright cyan bags, 4 clear maroon bags.
-vibrant tomato bags contain 3 dark brown bags, 1 vibrant blue bag.
-dull olive bags contain 5 mirrored yellow bags, 2 shiny cyan bags.
-light chartreuse bags contain 2 dull aqua bags, 4 dull brown bags, 1 clear fuchsia bag, 4 bright yellow bags.
-posh gray bags contain 4 posh green bags, 1 mirrored gray bag.
-bright yellow bags contain 4 pale aqua bags.
-bright gold bags contain 3 pale indigo bags, 3 dull crimson bags.
-dotted red bags contain 4 pale turquoise bags, 4 muted blue bags, 1 bright bronze bag, 2 light blue bags.
-clear brown bags contain 1 mirrored yellow bag.
-light plum bags contain 2 bright violet bags.
-dim purple bags contain 3 faded chartreuse bags, 5 light teal bags.
-dull yellow bags contain 5 muted aqua bags, 3 dotted coral bags, 2 drab maroon bags.
-shiny gold bags contain 4 pale black bags, 4 dim violet bags, 3 muted yellow bags.
-mirrored crimson bags contain 1 striped teal bag, 5 mirrored cyan bags.
-shiny lavender bags contain 4 bright brown bags, 3 bright tan bags, 5 dotted crimson bags, 4 pale black bags.
-vibrant cyan bags contain 1 dim yellow bag, 5 bright tan bags.
-wavy gold bags contain 2 dark brown bags, 1 dull yellow bag.
-dark cyan bags contain 4 dim white bags, 2 mirrored indigo bags, 4 muted white bags, 2 bright white bags.
-posh lime bags contain 4 shiny plum bags, 3 plaid fuchsia bags.
-posh purple bags contain 3 muted salmon bags.
-pale magenta bags contain 1 drab gold bag, 1 dark white bag, 3 posh silver bags.
-dim plum bags contain 4 dark chartreuse bags, 4 mirrored lavender bags.
-plaid indigo bags contain 2 clear lime bags, 5 dull tomato bags.
-dark blue bags contain 1 bright olive bag, 1 dull bronze bag, 1 shiny gold bag.
-dull red bags contain 2 wavy teal bags, 3 wavy crimson bags, 1 faded olive bag.
-striped yellow bags contain 4 drab salmon bags.
-vibrant magenta bags contain 4 light beige bags, 2 dark red bags, 1 plaid magenta bag, 5 dim magenta bags.
-plaid red bags contain 2 striped red bags, 4 light plum bags, 3 mirrored silver bags.
-wavy orange bags contain 5 vibrant white bags, 1 posh coral bag, 5 muted purple bags, 2 light coral bags.
-pale green bags contain 5 pale aqua bags, 1 clear gray bag.
-dotted chartreuse bags contain 4 muted violet bags, 5 striped teal bags.
-light turquoise bags contain 5 dull turquoise bags, 2 dark aqua bags, 1 dull teal bag.
-shiny violet bags contain 2 pale indigo bags.
-light white bags contain 3 mirrored indigo bags, 1 faded blue bag, 1 plaid white bag, 1 posh plum bag.
-muted beige bags contain 4 drab gold bags.
-faded silver bags contain 2 drab white bags, 5 pale white bags, 3 clear lime bags.
-faded red bags contain 1 bright turquoise bag, 5 faded coral bags, 2 drab purple bags, 5 bright olive bags.
-shiny bronze bags contain 4 plaid purple bags, 5 bright red bags, 1 muted white bag, 2 dull fuchsia bags.
-dull gold bags contain 1 dotted orange bag.
-muted olive bags contain 1 clear coral bag, 1 posh magenta bag, 2 bright violet bags, 1 wavy chartreuse bag.
-dotted bronze bags contain 1 plaid beige bag, 3 clear olive bags, 2 light lime bags, 5 dull beige bags.
-shiny orange bags contain 5 pale brown bags, 5 clear tomato bags.
-wavy salmon bags contain 2 shiny maroon bags.
-wavy crimson bags contain 5 bright violet bags, 3 plaid violet bags.
-bright coral bags contain 1 dull bronze bag, 5 dotted gold bags, 1 posh gray bag.
-dotted crimson bags contain 2 posh magenta bags, 4 mirrored white bags.
-bright violet bags contain no other bags.
-drab blue bags contain 5 shiny gold bags, 1 shiny brown bag, 4 dark silver bags.
-posh salmon bags contain 4 dim purple bags, 1 striped lime bag, 1 muted gray bag, 2 drab gold bags.
-dim coral bags contain 3 dark red bags, 2 faded crimson bags.
-dark aqua bags contain 3 dotted salmon bags, 4 pale olive bags, 1 vibrant aqua bag, 5 dull lavender bags.
-dark orange bags contain 4 mirrored teal bags, 5 clear salmon bags.
-vibrant red bags contain 3 vibrant blue bags.
-muted lime bags contain 1 dull silver bag.
-clear tan bags contain 2 striped beige bags, 1 posh coral bag, 1 wavy teal bag, 2 faded plum bags.
-vibrant coral bags contain 2 faded blue bags, 4 bright turquoise bags.
-dark olive bags contain 2 dark indigo bags.
-dotted blue bags contain 5 faded cyan bags, 4 striped aqua bags, 4 dotted gold bags.
-bright maroon bags contain 1 dark bronze bag, 3 vibrant aqua bags, 4 dim magenta bags, 3 clear crimson bags.
-bright cyan bags contain 2 wavy tomato bags.
-plaid olive bags contain 3 striped indigo bags, 5 dim purple bags, 3 striped bronze bags, 2 light teal bags.
-plaid chartreuse bags contain 3 plaid yellow bags, 1 faded brown bag, 1 vibrant tan bag, 4 wavy fuchsia bags.
-dull maroon bags contain 3 muted yellow bags.
-light fuchsia bags contain 5 drab maroon bags, 5 muted silver bags.
-dull orange bags contain 4 dim indigo bags, 4 posh beige bags, 1 bright red bag.
-dull blue bags contain 5 wavy yellow bags, 4 posh gray bags.
-plaid yellow bags contain 1 bright fuchsia bag, 1 faded beige bag, 1 wavy beige bag, 4 light green bags.
-clear black bags contain 1 dull tomato bag.
-muted coral bags contain 5 drab indigo bags.
-plaid magenta bags contain 3 posh salmon bags.
-clear tomato bags contain 5 dotted brown bags, 3 dim tomato bags, 3 drab brown bags.
-clear yellow bags contain 3 clear black bags, 2 mirrored black bags.
-dark gray bags contain 5 light bronze bags, 4 dotted coral bags, 4 dim chartreuse bags.
-light magenta bags contain 4 wavy turquoise bags, 1 mirrored green bag, 2 plaid chartreuse bags.
-shiny indigo bags contain 1 bright silver bag, 2 pale tomato bags, 4 light teal bags, 4 posh coral bags.
-muted gray bags contain 3 faded beige bags, 1 dark teal bag, 3 muted violet bags, 3 muted white bags.
-wavy lavender bags contain 1 clear chartreuse bag, 2 clear maroon bags, 5 dull plum bags.
-faded olive bags contain 4 mirrored yellow bags, 4 vibrant tomato bags, 5 muted olive bags.
-muted crimson bags contain 1 mirrored gray bag, 4 dim violet bags.
-drab chartreuse bags contain 1 pale olive bag, 1 vibrant plum bag.
-wavy cyan bags contain 2 mirrored coral bags.
-mirrored plum bags contain 3 bright turquoise bags, 3 dark beige bags, 4 mirrored beige bags.
-plaid lavender bags contain 1 drab white bag.
-muted gold bags contain 1 clear black bag, 2 light orange bags, 4 dotted red bags, 4 dull silver bags.
-faded bronze bags contain 4 posh plum bags.
-clear turquoise bags contain 1 light gold bag, 1 clear beige bag, 2 striped chartreuse bags.
-vibrant gray bags contain 1 plaid white bag.
-bright tan bags contain 3 drab silver bags, 2 faded yellow bags, 2 bright green bags.
-pale bronze bags contain 5 posh coral bags, 4 clear coral bags, 1 dotted orange bag, 4 wavy chartreuse bags.
-clear plum bags contain 1 dim plum bag, 4 light gold bags.
-posh turquoise bags contain 3 wavy bronze bags, 4 shiny purple bags.
-posh teal bags contain 2 striped magenta bags, 3 dark magenta bags, 5 faded silver bags, 5 mirrored chartreuse bags.
-dim yellow bags contain 4 pale bronze bags, 3 shiny tan bags.
-faded lavender bags contain 3 dull white bags, 3 striped teal bags.
-wavy magenta bags contain 2 pale aqua bags, 4 shiny indigo bags.
-dim brown bags contain 2 bright brown bags, 3 striped chartreuse bags, 5 dull purple bags, 1 light cyan bag.
-light lime bags contain 5 clear crimson bags, 4 plaid indigo bags, 1 pale silver bag.
-striped silver bags contain 3 posh green bags, 3 muted violet bags, 1 drab green bag.
-bright brown bags contain no other bags.
-vibrant fuchsia bags contain 4 dull olive bags, 2 mirrored gold bags, 3 mirrored bronze bags, 1 posh crimson bag.
-plaid purple bags contain 3 faded beige bags, 1 drab green bag, 2 striped chartreuse bags.
-wavy violet bags contain 2 vibrant gray bags, 5 wavy fuchsia bags.
-dark maroon bags contain 5 pale chartreuse bags, 5 striped brown bags.
-pale coral bags contain 3 vibrant plum bags.
-dark black bags contain 4 striped salmon bags, 4 dim bronze bags.
-plaid bronze bags contain 2 mirrored black bags, 1 drab bronze bag, 4 plaid purple bags, 5 dull tomato bags.
-faded orange bags contain 5 plaid indigo bags.
-light lavender bags contain 2 shiny magenta bags, 5 dim lavender bags, 1 dotted crimson bag.
-dull chartreuse bags contain 4 clear lime bags.
-dark gold bags contain 4 light magenta bags.
-dim black bags contain 4 shiny silver bags, 1 dull tomato bag.
-plaid salmon bags contain 3 light magenta bags, 4 dull fuchsia bags, 2 striped salmon bags.
-vibrant bronze bags contain 5 mirrored white bags, 1 dull coral bag.
-wavy brown bags contain 1 light gold bag, 4 drab purple bags, 3 muted violet bags, 4 muted fuchsia bags.
-dotted lavender bags contain 4 dotted indigo bags, 2 dull lavender bags.
-dotted gold bags contain 1 posh magenta bag, 2 posh yellow bags.
-faded brown bags contain 4 muted blue bags, 3 wavy teal bags.
-light yellow bags contain 3 clear black bags, 1 dotted crimson bag.
-striped salmon bags contain 1 dull yellow bag, 5 mirrored gray bags, 5 light lavender bags, 5 mirrored brown bags.
-light blue bags contain 5 mirrored purple bags, 3 dim violet bags, 2 pale tomato bags.
-faded gold bags contain 3 plaid gray bags.
-shiny aqua bags contain 1 striped crimson bag, 5 pale black bags.
-shiny lime bags contain 4 dark green bags.
-vibrant tan bags contain 3 clear silver bags, 3 pale white bags.
-vibrant aqua bags contain no other bags.
-vibrant teal bags contain 3 wavy tan bags.
-light maroon bags contain 3 vibrant silver bags.
-faded crimson bags contain 3 plaid red bags.
-light teal bags contain 2 dark teal bags, 1 faded beige bag, 4 dull cyan bags.
-mirrored coral bags contain 2 vibrant plum bags.
-muted black bags contain 2 drab magenta bags, 1 mirrored gray bag, 4 drab tan bags, 1 dim indigo bag.
-striped gold bags contain 1 dark lavender bag, 4 drab brown bags, 2 bright silver bags, 2 striped teal bags.
-light purple bags contain 3 posh gray bags.
-dull silver bags contain 2 clear chartreuse bags, 3 plaid silver bags, 1 drab salmon bag, 2 wavy teal bags.
-clear bronze bags contain 4 dull red bags.
-wavy yellow bags contain 3 dull tomato bags, 2 posh green bags, 4 plaid aqua bags, 2 faded purple bags.
-muted purple bags contain 5 pale black bags, 2 muted salmon bags, 2 muted yellow bags.
-plaid aqua bags contain no other bags.
-drab plum bags contain 3 drab turquoise bags.
-muted orange bags contain 1 faded blue bag, 5 plaid brown bags, 4 mirrored chartreuse bags.
-dim silver bags contain 4 dark fuchsia bags, 2 clear cyan bags, 2 dark green bags, 4 dotted silver bags.
-pale tan bags contain 5 shiny silver bags, 5 drab indigo bags.
-wavy tomato bags contain 4 clear black bags, 4 plaid gray bags.
-posh bronze bags contain 4 drab green bags.
-clear blue bags contain 3 bright brown bags, 5 dull tomato bags, 1 clear black bag, 5 bright violet bags.
-striped plum bags contain 4 plaid yellow bags, 3 dark teal bags, 2 mirrored lavender bags, 1 dotted salmon bag.
-muted salmon bags contain 1 dull cyan bag, 2 clear coral bags, 1 posh coral bag.
-light aqua bags contain 4 clear maroon bags, 4 striped black bags.
-bright blue bags contain 4 drab violet bags, 4 light indigo bags, 3 muted indigo bags.
-light brown bags contain 5 striped lavender bags.
-light salmon bags contain 1 drab beige bag, 5 faded orange bags, 4 plaid coral bags, 5 light chartreuse bags.
-posh beige bags contain 1 shiny red bag.
-dotted orange bags contain 2 dotted brown bags, 3 mirrored silver bags, 1 dull tomato bag.
-wavy purple bags contain 1 mirrored green bag, 1 clear maroon bag.
-dark coral bags contain 5 bright chartreuse bags, 4 clear lime bags.
-dim lime bags contain 3 bright olive bags, 3 dull gold bags.
-pale plum bags contain 1 light orange bag, 3 drab orange bags, 5 mirrored purple bags.
-dim beige bags contain 5 pale fuchsia bags, 4 mirrored fuchsia bags, 4 plaid teal bags, 1 shiny orange bag.
-drab tan bags contain 5 plaid silver bags, 3 muted crimson bags, 1 clear salmon bag.
-posh blue bags contain 4 plaid aqua bags, 2 drab salmon bags, 4 pale teal bags, 2 drab gold bags.
-drab violet bags contain 3 shiny white bags.
-shiny plum bags contain 3 mirrored green bags, 2 dark yellow bags, 3 pale salmon bags.
-pale fuchsia bags contain 5 faded violet bags.
-clear fuchsia bags contain 2 dark lavender bags, 3 posh green bags.
-mirrored lime bags contain 3 light bronze bags.
-plaid white bags contain 1 dim lavender bag, 4 dim olive bags, 3 clear yellow bags.
-striped violet bags contain 4 plaid plum bags, 3 plaid black bags, 4 pale teal bags, 5 wavy magenta bags.
-dark purple bags contain 2 shiny gold bags, 3 faded blue bags.
-mirrored blue bags contain 1 drab fuchsia bag, 4 posh white bags, 3 wavy red bags.
-pale black bags contain 2 dim olive bags, 5 bright brown bags.
-dark brown bags contain 5 dotted purple bags, 2 striped silver bags.
-muted lavender bags contain 3 posh brown bags, 2 clear yellow bags, 3 posh coral bags, 1 shiny tan bag.
-muted bronze bags contain 1 drab teal bag, 5 drab tomato bags, 1 drab magenta bag, 5 posh maroon bags.
-posh violet bags contain 5 bright white bags, 5 vibrant tan bags.
-clear green bags contain 3 mirrored silver bags, 2 dotted orange bags.
-dotted plum bags contain 3 plaid yellow bags, 1 wavy yellow bag, 1 drab cyan bag.
-drab olive bags contain 1 shiny indigo bag.
-wavy turquoise bags contain 3 muted yellow bags.
-dark violet bags contain 2 bright crimson bags, 4 bright fuchsia bags, 2 dull blue bags.
-posh gold bags contain 3 drab teal bags.
-dim cyan bags contain 5 clear olive bags, 4 bright turquoise bags, 1 pale gray bag.
-posh red bags contain 1 bright salmon bag.
-dull tan bags contain 4 plaid cyan bags.
-faded indigo bags contain 3 light gold bags, 5 dotted brown bags, 3 dotted cyan bags, 2 drab teal bags.
-clear violet bags contain 1 wavy turquoise bag, 1 vibrant chartreuse bag, 1 dark violet bag, 3 bright bronze bags.
-clear indigo bags contain 1 mirrored tan bag, 4 faded indigo bags.
-bright turquoise bags contain 1 drab teal bag, 4 dull salmon bags, 4 pale olive bags, 2 faded chartreuse bags.
-muted tomato bags contain 1 dark purple bag, 3 striped tan bags.
-posh silver bags contain 4 muted gray bags.
-mirrored olive bags contain 5 bright lavender bags, 2 clear blue bags, 5 dotted crimson bags, 5 pale black bags.
-shiny tomato bags contain 1 mirrored purple bag, 4 posh gold bags, 3 vibrant plum bags.
-striped coral bags contain 5 clear orange bags, 3 muted coral bags, 4 bright green bags, 1 clear chartreuse bag.
-mirrored chartreuse bags contain 4 clear blue bags.
-pale maroon bags contain 1 muted indigo bag.
-striped black bags contain 3 striped gray bags, 1 striped lime bag, 4 bright cyan bags, 4 light orange bags.
-dim maroon bags contain 4 dull cyan bags.
-bright beige bags contain 2 pale fuchsia bags, 5 vibrant beige bags, 1 light lavender bag.
-shiny gray bags contain 2 striped lime bags, 1 pale black bag, 4 wavy tomato bags, 2 vibrant brown bags.
-drab lime bags contain 5 muted bronze bags, 2 posh indigo bags.
-dull gray bags contain 2 dull plum bags, 4 dim white bags, 2 shiny purple bags.
-light olive bags contain 4 clear salmon bags, 1 dim indigo bag.
-vibrant violet bags contain 5 striped tan bags, 1 pale lime bag, 4 posh plum bags, 4 mirrored black bags.
-posh lavender bags contain 4 pale tomato bags.
-plaid coral bags contain 3 mirrored olive bags, 2 muted black bags, 3 light plum bags.
-vibrant blue bags contain 4 mirrored silver bags.
-dim aqua bags contain 5 dim maroon bags.
-wavy bronze bags contain 5 wavy plum bags, 1 bright cyan bag, 2 drab chartreuse bags.
-muted plum bags contain 3 plaid silver bags, 5 faded black bags, 3 drab maroon bags.
-dull turquoise bags contain 4 plaid silver bags.
-plaid blue bags contain 3 plaid purple bags.
-dotted tan bags contain 5 plaid chartreuse bags, 4 dotted coral bags, 4 posh green bags, 1 striped turquoise bag.
-plaid black bags contain 2 drab salmon bags, 5 posh maroon bags.
-light cyan bags contain 2 dotted orange bags, 5 drab green bags, 1 bright lavender bag.
-dull fuchsia bags contain 2 posh red bags, 4 mirrored beige bags, 2 dull salmon bags, 4 striped purple bags.
-dark turquoise bags contain 4 drab tomato bags, 3 dotted chartreuse bags, 5 muted salmon bags, 4 posh magenta bags.
-vibrant silver bags contain 3 dark brown bags, 2 wavy beige bags, 5 dull turquoise bags, 2 drab tan bags.
-dotted tomato bags contain 3 drab tan bags, 2 striped magenta bags, 5 dim violet bags, 4 wavy tomato bags.
-vibrant white bags contain 5 bright crimson bags, 2 mirrored white bags, 5 mirrored indigo bags, 4 wavy teal bags.
-shiny fuchsia bags contain 1 pale lime bag.
-wavy fuchsia bags contain 4 clear cyan bags.
-dotted gray bags contain 3 striped chartreuse bags, 1 dark fuchsia bag.
-bright tomato bags contain 4 wavy orange bags, 2 dotted salmon bags, 1 striped gray bag, 3 pale tomato bags.
-clear chartreuse bags contain 3 clear purple bags.
-dim teal bags contain 3 faded silver bags, 5 vibrant silver bags, 2 wavy fuchsia bags.
-dotted yellow bags contain 5 bright bronze bags, 4 drab teal bags.
-dark indigo bags contain 5 plaid red bags, 5 dim purple bags.
-wavy black bags contain 5 shiny tomato bags, 2 clear gray bags, 4 dim lavender bags, 3 clear blue bags.
-striped green bags contain 3 light crimson bags, 5 mirrored cyan bags, 2 mirrored maroon bags, 2 faded yellow bags.
-dull lime bags contain 3 pale yellow bags.
-faded chartreuse bags contain 2 wavy teal bags, 3 dim olive bags, 2 dull purple bags, 5 vibrant plum bags.
-dark yellow bags contain 2 muted brown bags.
-plaid beige bags contain 3 pale green bags, 3 bright purple bags, 5 faded black bags, 1 drab brown bag.
-faded maroon bags contain 5 drab tomato bags.
-muted silver bags contain 3 striped lime bags, 3 dim orange bags, 3 muted aqua bags, 1 plaid black bag.
-pale violet bags contain 1 mirrored gray bag, 1 dull gold bag, 1 wavy crimson bag, 1 pale magenta bag.
-dim olive bags contain no other bags.
-mirrored bronze bags contain 2 drab white bags.
-dull green bags contain 1 striped silver bag, 2 bright orange bags, 4 dull yellow bags, 4 dotted chartreuse bags.
-bright gray bags contain 1 striped gray bag, 5 dull teal bags, 4 light beige bags, 2 vibrant orange bags.
-light indigo bags contain 1 dim maroon bag, 4 dark indigo bags, 1 dark brown bag, 2 muted beige bags.
-bright magenta bags contain 2 muted lime bags.
-posh crimson bags contain 4 pale indigo bags, 2 faded green bags.
-vibrant plum bags contain 1 posh gray bag, 3 mirrored silver bags, 4 bright brown bags, 2 posh magenta bags.
-wavy lime bags contain 4 wavy black bags, 4 shiny cyan bags, 5 striped aqua bags, 4 plaid gray bags.
-shiny silver bags contain 5 dotted crimson bags, 2 wavy turquoise bags, 1 shiny coral bag.
-dark tan bags contain 5 clear silver bags.
-mirrored brown bags contain 1 dotted brown bag, 2 plaid gray bags, 5 dull tomato bags, 5 clear black bags.
-muted brown bags contain 3 drab magenta bags, 4 plaid aqua bags, 5 dim black bags.
-posh black bags contain 2 bright turquoise bags, 3 mirrored maroon bags, 1 dull white bag.
-wavy aqua bags contain 3 drab green bags, 3 clear magenta bags.
-vibrant chartreuse bags contain 3 muted violet bags.
-wavy silver bags contain 2 muted yellow bags, 4 plaid violet bags.
-shiny salmon bags contain 1 clear yellow bag.
-clear purple bags contain 2 posh green bags, 2 muted gray bags.
-clear cyan bags contain 5 posh gray bags, 5 plaid aqua bags, 1 wavy tomato bag, 1 dim lavender bag.
-wavy coral bags contain 5 dim yellow bags, 3 clear yellow bags.
-wavy green bags contain 4 plaid bronze bags, 4 dull coral bags.
-mirrored gold bags contain 5 bright lavender bags.
-muted fuchsia bags contain 1 dotted purple bag.
-clear maroon bags contain 3 muted gray bags, 2 bright chartreuse bags, 3 dotted gold bags.
-faded salmon bags contain 5 clear green bags.
-striped aqua bags contain 5 pale yellow bags, 1 dotted salmon bag, 1 wavy teal bag, 1 muted yellow bag.
-plaid fuchsia bags contain 2 dim olive bags.
-pale chartreuse bags contain 3 posh magenta bags, 3 mirrored yellow bags.
-shiny beige bags contain 1 mirrored indigo bag.
-posh aqua bags contain 3 pale silver bags, 3 shiny tan bags, 5 striped blue bags, 5 dull salmon bags.
-dull magenta bags contain 5 dotted lime bags, 4 bright plum bags, 5 vibrant turquoise bags.
-posh tomato bags contain 5 shiny tan bags, 1 wavy salmon bag.
-clear red bags contain 5 clear black bags.
-dotted aqua bags contain 1 clear black bag.
-clear olive bags contain 1 plaid gray bag, 3 clear cyan bags.
-dotted green bags contain 3 light red bags.
-clear teal bags contain 5 faded coral bags, 3 wavy plum bags, 5 bright orange bags, 1 clear purple bag.
-plaid orange bags contain 4 pale chartreuse bags, 1 dark silver bag, 2 drab tomato bags.
-pale teal bags contain 1 drab black bag.
-posh chartreuse bags contain 1 dotted gold bag, 4 bright salmon bags.
-pale red bags contain 2 vibrant plum bags, 4 wavy cyan bags, 2 dotted white bags, 1 posh silver bag.
-faded violet bags contain 1 mirrored white bag, 4 muted green bags, 5 mirrored olive bags, 1 dim brown bag.
-faded fuchsia bags contain 2 dark brown bags.
-dotted brown bags contain 4 clear blue bags.
-dark teal bags contain 5 dull cyan bags.
-bright salmon bags contain 2 pale black bags, 5 dotted chartreuse bags, 2 striped chartreuse bags.
-pale blue bags contain 4 shiny gold bags, 2 clear white bags, 1 dotted coral bag.
-dim tan bags contain 3 plaid yellow bags, 5 clear blue bags, 2 clear cyan bags.
-dull beige bags contain 5 shiny maroon bags, 4 mirrored bronze bags, 4 dark plum bags.
-clear magenta bags contain 5 dim bronze bags, 5 wavy olive bags.
-bright black bags contain 2 bright bronze bags, 5 mirrored gold bags, 4 dark yellow bags.
-muted aqua bags contain 2 dark teal bags.
-faded blue bags contain 4 clear salmon bags, 1 light cyan bag, 5 wavy tomato bags.
-dotted indigo bags contain 2 shiny maroon bags, 2 wavy tan bags, 4 dim tomato bags, 1 posh plum bag.
-striped chartreuse bags contain 2 dotted orange bags, 3 bright lavender bags.
-dim indigo bags contain 4 shiny coral bags, 4 mirrored olive bags.
-dotted purple bags contain 4 mirrored white bags, 1 posh yellow bag, 5 drab maroon bags.
-muted chartreuse bags contain 5 bright silver bags, 2 bright brown bags.
-shiny purple bags contain 3 dim maroon bags, 2 mirrored lime bags, 2 light lavender bags, 3 dotted salmon bags.
-faded white bags contain 3 vibrant white bags, 5 muted gray bags.
-muted red bags contain 3 posh coral bags.
-mirrored tan bags contain 1 dotted gold bag, 2 dark coral bags, 3 light purple bags.
-dim blue bags contain 3 dull blue bags, 4 posh plum bags.
-bright indigo bags contain 1 muted white bag, 1 wavy fuchsia bag.
-striped crimson bags contain 3 dotted coral bags.
-light orange bags contain 3 striped chartreuse bags, 4 bright silver bags, 5 clear cyan bags.
-posh yellow bags contain 3 bright brown bags.
-dotted beige bags contain 1 plaid red bag.
-faded aqua bags contain 3 drab tan bags.
-shiny red bags contain 3 striped lime bags, 5 wavy teal bags, 2 muted olive bags, 1 shiny chartreuse bag.
-light tomato bags contain 4 muted green bags.
-bright olive bags contain 4 shiny maroon bags, 1 striped tan bag, 2 drab teal bags, 3 mirrored chartreuse bags.
-mirrored white bags contain 4 vibrant aqua bags, 4 clear blue bags, 4 bright violet bags, 1 muted olive bag.
-posh olive bags contain 2 shiny maroon bags, 3 faded coral bags, 1 dark turquoise bag.
-vibrant lime bags contain 1 light lime bag, 5 bright lime bags, 4 vibrant olive bags.
-striped brown bags contain 3 clear chartreuse bags, 4 drab magenta bags.
-striped lavender bags contain 1 wavy plum bag.
-wavy white bags contain 4 dotted red bags.
-dark bronze bags contain 2 posh green bags, 1 dotted crimson bag, 5 bright lavender bags, 1 shiny coral bag.
-mirrored black bags contain 3 muted salmon bags.
-shiny magenta bags contain 4 dotted orange bags, 4 bright silver bags, 3 posh coral bags.
-light bronze bags contain 3 dotted coral bags.
-mirrored gray bags contain 1 muted olive bag, 1 bright violet bag.
-bright lavender bags contain 1 dull tomato bag, 2 clear blue bags.
-drab yellow bags contain 3 dim tomato bags, 3 striped green bags.
-dark chartreuse bags contain 5 vibrant violet bags, 4 shiny tan bags, 4 dark orange bags, 1 dull tan bag.
-vibrant indigo bags contain 3 mirrored violet bags, 3 light teal bags, 2 dim red bags.
-plaid green bags contain 3 wavy blue bags, 4 wavy yellow bags, 1 dull lavender bag.
-mirrored purple bags contain 5 vibrant silver bags.
-vibrant yellow bags contain 4 plaid brown bags, 3 drab bronze bags, 5 posh bronze bags, 3 mirrored lime bags.
-pale gold bags contain 4 shiny indigo bags, 4 clear maroon bags.
-shiny cyan bags contain 3 dim olive bags.
-dim salmon bags contain 5 faded beige bags, 2 faded orange bags, 2 shiny purple bags.
-dark crimson bags contain 3 dull aqua bags, 1 wavy olive bag, 3 posh plum bags, 3 bright brown bags.
-vibrant gold bags contain 3 wavy gray bags, 4 clear white bags, 1 faded salmon bag, 3 drab aqua bags.
-faded magenta bags contain 5 plaid aqua bags, 4 faded purple bags, 5 wavy bronze bags.
-drab black bags contain 3 pale aqua bags, 2 clear coral bags, 2 mirrored silver bags, 5 dark cyan bags.
-bright green bags contain 1 shiny aqua bag, 5 drab salmon bags, 5 wavy tomato bags, 4 faded beige bags.
-bright aqua bags contain 2 vibrant magenta bags, 3 dim indigo bags, 5 dark fuchsia bags.
-pale olive bags contain 1 dotted brown bag.
-mirrored fuchsia bags contain 1 dull brown bag, 3 light cyan bags.
-mirrored red bags contain 3 plaid lavender bags.
-wavy blue bags contain 5 wavy turquoise bags, 3 light green bags, 4 dim indigo bags, 3 posh coral bags.
-clear silver bags contain 4 plaid gray bags.
-muted white bags contain 2 dotted salmon bags, 4 mirrored white bags, 3 clear cyan bags, 2 muted chartreuse bags.
-dim tomato bags contain 3 drab white bags, 1 posh gray bag, 3 dark cyan bags, 5 posh green bags.
-drab beige bags contain 1 light orange bag, 3 bright salmon bags, 3 pale silver bags.
-clear gold bags contain 2 vibrant white bags, 2 plaid yellow bags.
-vibrant orange bags contain 5 muted chartreuse bags.
-striped tan bags contain 1 wavy gold bag, 3 mirrored black bags, 1 shiny aqua bag, 5 vibrant red bags.
-bright lime bags contain 4 dim indigo bags, 3 dull tomato bags.
-bright red bags contain 5 drab magenta bags, 1 clear salmon bag.
-vibrant green bags contain 4 plaid tomato bags.
-light tan bags contain 5 muted green bags.
-striped white bags contain 1 faded silver bag, 2 vibrant red bags.
-dull violet bags contain 5 dull turquoise bags.
-drab salmon bags contain 3 posh magenta bags, 1 dark teal bag.
-mirrored cyan bags contain 2 dim violet bags, 1 plaid aqua bag, 1 vibrant blue bag, 1 posh magenta bag.
-wavy teal bags contain 1 bright crimson bag, 2 light cyan bags, 4 striped silver bags.
-vibrant purple bags contain 5 shiny magenta bags, 1 dotted orange bag, 2 wavy teal bags.
-faded beige bags contain 1 posh green bag, 5 clear coral bags.
-faded lime bags contain 1 wavy gray bag, 1 light orange bag, 5 clear bronze bags.
-mirrored green bags contain 5 drab bronze bags, 3 muted violet bags, 1 clear blue bag.
-light green bags contain 5 mirrored lavender bags, 3 drab gold bags.
-pale crimson bags contain 3 pale chartreuse bags.
-mirrored aqua bags contain 4 drab plum bags.
-dull crimson bags contain 2 bright white bags, 5 drab olive bags, 5 pale salmon bags.
-dull purple bags contain 1 posh magenta bag, 3 mirrored brown bags.
-bright white bags contain 4 vibrant blue bags, 3 dull brown bags, 4 drab green bags.
-drab indigo bags contain 2 bright salmon bags, 2 muted maroon bags, 2 clear gray bags.
-striped fuchsia bags contain 2 drab gold bags, 4 mirrored white bags, 3 muted black bags, 1 dark teal bag.
-dark tomato bags contain 3 muted fuchsia bags, 1 dotted lavender bag, 4 drab turquoise bags.
-mirrored tomato bags contain 5 dark olive bags, 4 light black bags, 4 dark magenta bags.
-dark plum bags contain 4 wavy yellow bags, 4 shiny salmon bags.
-dark salmon bags contain 1 dim bronze bag, 4 pale indigo bags, 5 dotted chartreuse bags.
-dotted lime bags contain 1 shiny brown bag, 3 faded lavender bags.
-dark red bags contain 3 posh green bags, 1 vibrant bronze bag, 2 dull maroon bags.
-dim lavender bags contain 2 dark turquoise bags.
-striped cyan bags contain 1 clear chartreuse bag.
-dull indigo bags contain 5 shiny brown bags.
-faded green bags contain 1 drab maroon bag.
-drab fuchsia bags contain 2 clear olive bags, 1 bright cyan bag.
-drab gold bags contain 2 dull turquoise bags, 5 dim lavender bags, 4 light teal bags.
-dotted violet bags contain 3 drab tomato bags, 5 dark lavender bags, 4 bright fuchsia bags.
-shiny turquoise bags contain 4 light black bags.
-muted green bags contain 3 vibrant bronze bags, 4 dim olive bags, 2 posh yellow bags, 2 dull cyan bags.
-pale purple bags contain 2 drab yellow bags, 3 bright crimson bags.
-posh fuchsia bags contain 1 dull tan bag, 2 dim orange bags.
-drab teal bags contain 1 dim violet bag, 2 drab green bags, 5 mirrored lavender bags, 2 faded purple bags.
-mirrored teal bags contain 4 vibrant aqua bags, 2 dull turquoise bags, 4 vibrant bronze bags, 3 mirrored olive bags.
-muted violet bags contain 3 wavy chartreuse bags.
-mirrored salmon bags contain 3 clear cyan bags, 5 posh plum bags, 1 shiny coral bag.
-vibrant crimson bags contain 4 dotted chartreuse bags, 2 wavy yellow bags, 3 drab green bags.
-dotted teal bags contain 3 clear black bags, 1 faded blue bag, 1 clear beige bag, 4 striped brown bags.
-posh orange bags contain 1 dim olive bag.
-striped bronze bags contain 1 dull salmon bag, 4 wavy teal bags, 1 pale salmon bag, 2 dim aqua bags.
-clear lime bags contain 1 dim lavender bag, 1 drab magenta bag.
-muted magenta bags contain 1 shiny indigo bag, 4 mirrored cyan bags, 4 shiny cyan bags, 2 posh bronze bags.
-bright chartreuse bags contain 5 drab white bags, 3 dotted purple bags.
-dim magenta bags contain 2 dull turquoise bags, 1 dull coral bag, 3 dark violet bags, 4 muted crimson bags.
-pale cyan bags contain 5 dotted coral bags, 4 drab chartreuse bags, 4 dull plum bags.
-shiny white bags contain 2 drab salmon bags, 3 shiny silver bags.
-faded tan bags contain 4 posh magenta bags, 1 pale teal bag.
diff --git a/2020/day8.input b/2020/day8.input
deleted file mode 100644
index a348b44..0000000
--- a/2020/day8.input
+++ /dev/null
@@ -1,610 +0,0 @@
-acc +0
-jmp +516
-acc -16
-nop +326
-jmp +366
-jmp +400
-jmp +494
-acc -5
-jmp +475
-acc +29
-nop +24
-jmp +186
-jmp -5
-acc +50
-acc +49
-acc +49
-nop +507
-jmp +236
-acc -4
-acc +50
-acc +48
-jmp +293
-jmp +461
-acc +48
-acc +2
-jmp +241
-acc +38
-jmp +544
-jmp +1
-jmp +382
-acc -4
-acc -10
-acc +44
-jmp +444
-jmp +1
-acc +20
-acc -1
-acc +25
-jmp +332
-acc +18
-jmp +184
-acc +1
-acc +20
-acc -7
-acc -12
-jmp +84
-acc +30
-jmp -19
-nop +491
-acc +37
-acc +44
-jmp +220
-acc +3
-acc +19
-jmp +485
-jmp +222
-nop +264
-acc +4
-jmp +151
-nop -36
-acc +48
-jmp +356
-acc +28
-acc +29
-nop +397
-jmp +168
-nop +115
-acc -13
-acc -11
-jmp +470
-jmp +201
-acc +48
-acc -6
-acc -18
-acc -13
-jmp +442
-jmp +266
-acc +10
-acc +30
-acc -7
-acc -8
-jmp +380
-acc +1
-nop +106
-acc +9
-acc -11
-jmp -79
-jmp +166
-acc -9
-jmp +300
-acc +39
-acc +1
-acc +27
-acc +26
-jmp +367
-jmp +291
-acc +18
-jmp +100
-acc +25
-acc +43
-acc -8
-acc -12
-jmp +475
-acc +15
-jmp +492
-acc -5
-acc -12
-acc +35
-acc +25
-jmp +360
-nop +301
-acc +32
-acc -1
-jmp +436
-acc +21
-jmp +109
-acc +1
-nop +230
-jmp -113
-acc +24
-acc +12
-acc +13
-acc +27
-jmp -52
-jmp +476
-acc +15
-acc -18
-acc -13
-jmp +323
-acc -10
-acc +35
-acc -6
-nop +377
-jmp +8
-jmp +430
-nop +50
-acc +33
-acc -1
-jmp -72
-acc -19
-jmp -92
-jmp +1
-jmp -87
-nop -120
-nop -34
-jmp +159
-jmp +183
-jmp +1
-acc -4
-acc +49
-acc -4
-jmp +73
-acc -18
-acc +34
-acc -8
-jmp +403
-acc +32
-acc +0
-acc +0
-jmp +390
-acc +19
-jmp +305
-acc -15
-jmp +176
-acc +3
-jmp +36
-acc +29
-acc +21
-jmp +1
-acc -17
-jmp +144
-acc +16
-acc +4
-acc +49
-acc -7
-jmp -65
-acc +28
-acc +2
-acc +23
-acc +46
-jmp +278
-jmp +424
-acc +45
-acc +7
-jmp -49
-jmp -50
-acc -11
-nop -121
-jmp -140
-jmp +1
-acc -8
-jmp +206
-acc -7
-jmp +1
-acc +20
-acc +30
-jmp +375
-nop +312
-jmp +111
-acc +23
-jmp -15
-acc +27
-acc +46
-acc +36
-jmp +360
-acc +1
-acc +25
-acc +29
-jmp -137
-jmp +177
-acc +15
-acc -13
-acc +48
-acc +29
-jmp +76
-nop -174
-acc +27
-jmp +214
-acc +4
-jmp +120
-nop -165
-acc -16
-jmp +2
-jmp +238
-jmp +224
-jmp -154
-acc +12
-jmp +162
-acc +31
-acc +26
-acc -13
-acc +18
-jmp +173
-acc +38
-jmp +1
-jmp +199
-jmp -202
-jmp +127
-acc -12
-jmp -42
-acc -12
-acc +36
-acc -4
-acc +24
-jmp +343
-acc -17
-nop +277
-acc +13
-jmp +56
-jmp +41
-nop +92
-acc +32
-jmp +182
-nop +111
-acc +0
-acc +29
-jmp +219
-nop -234
-acc +0
-acc +31
-acc +49
-jmp +216
-jmp +247
-acc +24
-acc -10
-jmp +218
-acc +14
-acc -19
-acc +14
-jmp +11
-jmp +82
-acc +5
-acc +28
-acc +35
-jmp -93
-acc +24
-jmp -210
-acc +39
-jmp -107
-jmp -150
-acc -7
-jmp -185
-acc +25
-acc -15
-jmp +63
-acc +14
-acc +50
-jmp -7
-acc +13
-jmp +298
-nop +69
-jmp -268
-acc -5
-jmp +66
-jmp +48
-nop -1
-acc +38
-acc +3
-acc +46
-jmp +259
-nop +235
-acc +4
-jmp -186
-jmp +94
-acc -16
-acc +6
-jmp +287
-acc -19
-jmp -221
-jmp -69
-acc +8
-nop -102
-acc +31
-jmp +204
-jmp -81
-acc +12
-acc +21
-acc -8
-nop +151
-jmp -155
-acc +50
-nop +145
-acc -6
-acc +0
-jmp -296
-acc +16
-acc +30
-acc +11
-jmp +254
-acc +0
-acc -8
-nop +162
-acc -17
-jmp -144
-acc +6
-acc +2
-acc +32
-acc -5
-jmp +21
-jmp -77
-acc +38
-jmp +117
-acc +27
-acc -11
-nop -203
-jmp +201
-jmp -305
-acc +40
-nop -330
-acc -7
-jmp -279
-jmp +60
-nop -163
-jmp -53
-nop +115
-acc +24
-jmp +1
-acc +45
-jmp -92
-acc +0
-acc +13
-jmp -302
-acc +25
-jmp +208
-nop -293
-jmp +5
-jmp +1
-acc -13
-nop -272
-jmp +62
-acc -4
-acc +32
-acc +49
-jmp -124
-acc -19
-nop -246
-jmp -353
-nop -349
-acc +13
-acc +21
-jmp -165
-acc +14
-acc +37
-nop +28
-acc +7
-jmp -308
-acc +11
-jmp +71
-jmp -139
-nop -19
-acc -7
-acc -3
-jmp -302
-acc -2
-acc +1
-nop -43
-jmp -280
-acc +10
-acc +9
-jmp -358
-acc +39
-acc +16
-acc -11
-jmp +1
-jmp +142
-acc -15
-acc -17
-acc +9
-acc +11
-jmp -172
-jmp -90
-nop +135
-acc -1
-jmp -379
-acc +39
-acc -13
-jmp -57
-acc -3
-acc -7
-jmp +1
-jmp +80
-acc +7
-acc +11
-acc +30
-nop +69
-jmp -140
-acc +11
-acc +7
-acc +3
-jmp -417
-jmp -314
-acc -6
-jmp -6
-jmp -224
-acc +0
-jmp -131
-acc +7
-acc +33
-jmp +20
-acc +32
-acc -14
-nop -375
-jmp -394
-acc +8
-acc +47
-acc +29
-acc -6
-jmp -381
-acc -8
-jmp -353
-jmp -108
-acc -16
-acc +21
-jmp -329
-acc +13
-acc +0
-acc +0
-jmp -402
-acc -8
-jmp -307
-jmp -308
-jmp -358
-acc +38
-acc -19
-acc +33
-jmp -276
-jmp -114
-acc -6
-jmp +55
-acc +16
-jmp -244
-nop +22
-acc -7
-acc +19
-jmp -154
-jmp +18
-jmp -50
-acc +31
-acc +50
-acc +2
-jmp -260
-acc -16
-jmp -135
-acc +50
-acc -9
-acc +50
-acc +27
-jmp -323
-acc +26
-nop -249
-acc +46
-acc +3
-jmp -474
-acc +50
-acc -7
-jmp -78
-jmp +1
-acc -6
-acc +6
-jmp +94
-acc +47
-acc -3
-acc +13
-jmp -485
-nop -499
-acc +35
-acc +35
-acc -1
-jmp -259
-nop -486
-acc +48
-acc -4
-jmp +23
-acc +33
-acc +37
-acc +10
-jmp +61
-acc -1
-jmp +1
-jmp +1
-acc -8
-jmp +61
-jmp -237
-jmp -164
-acc +39
-acc +38
-nop -302
-jmp -468
-acc -15
-jmp -6
-acc -9
-acc +1
-acc +41
-acc +48
-jmp -285
-acc +1
-acc +24
-jmp -111
-jmp -90
-acc +46
-acc +21
-acc +43
-jmp -103
-acc -9
-nop -5
-jmp -274
-acc -13
-jmp -262
-jmp -39
-acc +43
-nop -463
-acc +15
-acc +23
-jmp -176
-nop -305
-acc +2
-acc +28
-jmp -198
-acc +15
-acc -18
-jmp -473
-acc -13
-acc +9
-jmp -46
-acc +1
-acc +43
-acc +6
-jmp +10
-acc +24
-acc -3
-jmp -424
-acc -1
-acc +47
-jmp +1
-acc +20
-jmp -17
-jmp -59
-nop -19
-acc +42
-acc +47
-jmp -9
-jmp -576
-nop -148
-acc +0
-jmp +12
-acc -15
-jmp -209
-acc +13
-jmp -442
-nop -548
-nop -62
-acc +22
-jmp -92
-jmp -516
-acc +8
-jmp -301
-acc +1
-jmp -146
-acc -15
-jmp -366
-jmp -440
-acc +17
-acc +25
-acc +28
-jmp -240
-acc -2
-acc +25
-nop -68
-acc +14
-jmp +1
diff --git a/2020/day9.input b/2020/day9.input
deleted file mode 100644
index ea99600..0000000
--- a/2020/day9.input
+++ /dev/null
@@ -1,1000 +0,0 @@
-8
-11
-27
-48
-5
-19
-18
-36
-3
-45
-22
-37
-46
-4
-31
-42
-39
-30
-41
-14
-40
-29
-43
-25
-6
-7
-28
-8
-52
-9
-49
-13
-20
-34
-10
-11
-12
-17
-15
-18
-53
-21
-16
-26
-19
-14
-54
-39
-22
-23
-24
-25
-27
-28
-29
-80
-33
-35
-30
-31
-72
-32
-34
-36
-37
-38
-48
-60
-47
-51
-41
-45
-49
-67
-50
-64
-62
-77
-57
-65
-66
-68
-71
-107
-108
-69
-70
-119
-73
-94
-79
-117
-86
-88
-90
-133
-202
-99
-116
-141
-122
-148
-218
-223
-131
-134
-137
-139
-258
-142
-155
-143
-152
-161
-263
-259
-219
-174
-178
-189
-420
-215
-221
-238
-261
-253
-393
-265
-440
-270
-271
-311
-482
-285
-294
-443
-295
-313
-335
-389
-367
-352
-363
-663
-810
-491
-526
-459
-572
-712
-629
-535
-565
-541
-660
-556
-832
-580
-579
-589
-648
-702
-1351
-687
-715
-1000
-811
-952
-1907
-950
-1239
-1031
-1145
-1161
-1076
-1258
-1204
-1515
-1121
-1135
-1530
-1159
-1168
-1276
-1237
-1335
-1389
-1402
-1498
-1526
-1761
-1763
-1902
-1981
-2026
-2917
-2363
-2289
-2197
-2211
-2833
-2724
-3546
-2327
-2294
-2396
-3448
-2557
-4275
-3096
-2737
-2791
-3024
-3259
-3960
-3524
-4159
-3883
-4007
-5811
-4408
-4486
-4500
-4491
-4505
-8434
-5118
-4621
-4690
-4851
-5844
-5815
-5348
-6120
-5528
-7683
-6283
-7750
-8697
-7407
-7531
-7890
-9029
-10971
-8894
-10876
-8991
-9112
-8996
-10349
-9472
-9311
-9541
-10038
-10199
-11468
-11163
-11811
-18423
-14519
-13690
-18089
-20474
-17756
-16919
-15421
-20057
-17885
-18435
-17890
-17987
-18103
-18653
-18537
-24557
-29914
-30609
-19579
-25459
-21362
-22631
-45516
-25501
-31446
-28209
-29111
-33856
-32340
-38116
-33306
-33311
-35877
-36325
-66325
-35993
-36756
-43562
-43094
-50877
-53668
-65302
-40941
-46821
-43993
-54673
-86119
-73725
-69299
-61451
-57320
-62417
-69096
-88993
-71422
-105176
-69188
-79087
-72318
-79555
-80749
-105550
-131605
-84035
-126508
-116120
-119737
-84934
-106410
-133839
-205113
-118771
-123868
-126416
-141972
-141504
-143740
-138284
-140610
-151873
-159836
-148275
-151405
-188438
-164489
-164784
-224645
-283704
-283555
-409971
-191344
-246153
-203705
-278607
-311709
-262511
-242639
-250284
-264700
-316189
-500147
-372920
-278894
-288885
-342749
-299680
-453989
-355833
-329273
-356128
-368489
-395049
-433983
-437497
-618639
-441628
-446344
-564380
-579557
-492923
-539169
-615869
-711238
-543594
-762533
-567779
-578574
-588565
-642429
-962828
-628953
-790111
-685106
-935685
-1369668
-763538
-1122603
-871480
-930420
-1372048
-887972
-1958233
-1057303
-1032092
-1036517
-1082763
-1111373
-1966937
-2045591
-1357890
-1146353
-2179906
-1217518
-1271382
-1850800
-1392491
-1475217
-2034920
-1699223
-2629272
-1635018
-2586590
-2735740
-3015536
-3669938
-1920064
-2119280
-2068609
-3091714
-2147890
-2194136
-2257726
-2363871
-2417735
-5273262
-2488900
-3395281
-3885720
-2663873
-4714759
-2867708
-3110235
-6634823
-3334241
-3555082
-4557509
-5509449
-5755587
-5178844
-4114200
-3988673
-4326335
-5061844
-4342026
-4405616
-6201949
-5972817
-4852771
-4906635
-5152773
-6043982
-8240876
-6665317
-5531581
-6422790
-9744260
-6444476
-8440535
-7448441
-9258387
-8102873
-8315008
-11222826
-8330699
-12510285
-9050517
-8668361
-8747642
-9194797
-9558389
-10005544
-9759406
-10950617
-10059408
-10684354
-18807050
-11954371
-11976057
-15981179
-16503884
-14759484
-14547349
-15551314
-15763449
-17942439
-16417881
-16645707
-16999060
-24298956
-19764950
-17416003
-18306031
-18753186
-18954203
-20509006
-29437540
-21735463
-20743762
-26665533
-25443838
-40716837
-23930428
-26735541
-29306833
-48060019
-30098663
-34415063
-39677902
-33063588
-33416941
-37059217
-33644767
-35305091
-46853543
-35722034
-36370206
-37260234
-37707389
-39463209
-42244469
-54881378
-42479225
-44674190
-60082474
-49374266
-50665969
-53237261
-56042374
-68722032
-63515604
-63162251
-66480529
-76723443
-70677175
-69138975
-68949858
-69366801
-71027125
-86918659
-72092240
-82381579
-74967623
-77170598
-107836441
-98521599
-102561699
-95340159
-123244725
-114181573
-100040235
-103903230
-123914436
-126677855
-139976983
-197704980
-164706960
-139816150
-167432399
-141231215
-213596514
-143119365
-140393926
-145994748
-147059863
-152138221
-172510757
-238915525
-216986748
-193861758
-195380394
-268610190
-199243389
-246034983
-230581085
-226718090
-227817666
-250592291
-346303252
-279793133
-291954371
-280210076
-465633615
-281625141
-315630122
-283513291
-409004116
-345999979
-341375142
-299198084
-367891151
-485596938
-477375049
-514645173
-422098484
-394623783
-425961479
-458398751
-454535756
-992020222
-477310381
-591967433
-530385424
-560003209
-923649289
-573579512
-565138432
-580823225
-774028873
-760823672
-582711375
-721296568
-640573226
-667089235
-693821867
-907695422
-1506360664
-816722267
-871934164
-820585262
-1008672854
-880497235
-1023537183
-756008079
-1334403184
-1007695805
-1090388633
-1095523856
-1125141641
-1138717944
-1145961657
-1223284601
-2108432057
-1249800610
-1276533242
-1307662461
-1334395093
-2090411263
-1360911102
-1449829946
-1572730346
-2181496364
-1828281067
-1576593341
-1966546919
-1636505314
-1763703884
-1779545262
-1846396712
-2098084438
-2132837446
-2271103298
-3404874408
-2263859585
-3401011413
-2369246258
-3540392827
-4477678315
-2849263588
-2584195703
-3274209380
-2937504443
-4977604754
-3730157360
-3022560292
-3416050576
-3213098655
-3340297225
-3356138603
-3400209198
-3482902026
-3610100596
-3912382708
-4369187736
-5638477265
-5484201953
-5113123173
-7376982758
-7769396934
-6477897270
-4953441961
-5433459291
-5606755995
-5960064735
-6740506423
-6211713823
-6150603098
-7391748028
-8824499178
-6235658947
-6966239199
-7395284734
-6696435828
-6839040629
-6883111224
-9025505881
-7522483304
-8281570444
-9322629697
-11104045059
-10066565134
-10386901252
-11040215286
-15800526967
-10560197956
-13201898146
-11393524026
-15804053748
-12110667833
-12362316921
-13033714322
-25126683445
-40930737193
-12932094775
-13074699576
-13535476457
-19916825546
-14405594528
-14361523933
-27436223509
-21483468590
-22643094377
-17604200141
-19389194831
-20453466386
-20626763090
-21953721982
-21600413242
-25564215067
-22922514877
-23504191859
-31139676598
-24472984754
-26610176033
-25294411696
-26006794351
-26467571232
-27293618708
-33988942843
-27480294104
-46682813539
-28767118461
-31965724074
-33750718764
-36993394972
-40015957921
-38230963231
-38057666527
-46190978157
-41080229476
-42227176332
-43554135224
-50479779105
-61469236947
-52474365583
-47977176613
-49767396450
-51766603462
-77773397813
-51301206047
-53300413059
-111949016052
-54773912812
-68959119046
-94701541915
-60732842535
-90495737026
-65716442838
-98790509062
-75051061499
-89783354371
-76288629758
-79137896003
-84634364700
-83307405808
-85781311556
-155503151276
-112034048582
-121433484629
-133074802258
-189286246088
-101068602497
-183424873762
-126352267546
-104601619106
-120490355650
-115506755347
-123733031858
-126449285373
-144040248343
-191795385105
-241923840279
-180206498500
-159685426199
-155426525761
-344789397364
-159596035566
-162445301811
-167941770508
-169088717364
-220108374453
-205670221603
-298931629109
-216575357844
-221558958147
-235997110997
-319281461765
-225091974756
-356487466647
-228334650964
-422245579447
-239239787205
-250182317231
-270489533716
-299466774104
-315022561327
-384004259958
-315111951960
-317871827572
-322041337377
-598398403213
-569421162825
-330387072319
-535130935780
-468020346473
-425778596056
-427229179750
-441667332600
-438134315991
-464331761961
-475236898202
-742341131710
-453426625720
-498824184680
-467574438169
-580569389550
-489422104436
-811463441813
-1002705373949
-614489335431
-645499024279
-632983779532
-757616252069
-820865522057
-652428409696
-863912912047
-890110358017
-910956461869
-865363495741
-853007775806
-1108220677734
-952250810400
-879801648591
-1082063773600
-917758387681
-1105855035416
-921001063889
-1113313520111
-1113073462448
-1353335016483
-1433577165356
-1103911439867
-1266917745127
-1247473114963
-1285412189228
-1516341321743
-1410044661765
-1532230058287
-1832052458991
-1505436185502
-2132281240868
-1718371271547
-1732809424397
-1745165144332
-1770766163487
-2360786635074
-1797560036272
-1800802712480
-2185975213467
-2030831850129
-2024912503756
-2331045725654
-2466408478931
-2360546577411
-2351384554830
-3234379877836
-2992638259295
-2980282539360
-2532885304191
-2695456850993
-3277395202619
-2915480847267
-3223807457049
-3238245609899
-3515931307819
-3463536415879
-3918784637864
-3530369460669
-3542725180604
-3568326199759
-3598362748752
-3822472540028
-7352842000697
-5567637684360
-4726288701122
-4355958229410
-5972920798655
-7084257507578
-4711931132241
-5448366151458
-5228342155184
-5513167843551
-5610937698260
-5756692761240
-7060718149927
-7111051380363
-6139288304316
-8175467548120
-9211166408554
-14439508563738
-10883190689955
-9209300447012
-7073094641273
-7141087929356
-8796668354943
-7420835288780
-8178430769438
-10337226399382
-11776793518190
-12301436796457
-9067889361651
-10160297283699
-10468623893481
-9940273287425
-10676708306642
-13932160309360
-11124105541811
-11367630459500
-11895981065556
-13250339684679
-15596302836900
-15251525410711
-14214182570629
-19265292248424
-25299790768860
-15319518698794
-18647054662919
-14493929930053
-14561923218136
-15599266058218
-20805850292863
-23190612972104
-20844682879841
-19744597668293
-26110163636185
-30161189276354
-20100570571124
-20408897180906
-28426090239413
-22491736001311
-23020086607367
-24617970144179
-26389910995609
-25146320750235
-29745455340764
-34584810947218
-29055853148189
-28708112500682
-29813448628847
-50154352521670
-34306520886429
-49464750329095
-60416684522614
-35699836629342
-35343863726511
-39845168239417
-40153494849199
-51446176846780
-70284647576560
-64330266287982
-59558903969611
-45246891321359
-46798808176515
-45511822608678
-47109706145490
-65299815599434
-85752697733209
-95666175130348
-94143714916829
-57763965648871
-114764565928529
-70006357515771
diff --git a/2020/day1.cpp b/2020/days/day1.cpp
similarity index 87%
rename from 2020/day1.cpp
rename to 2020/days/day1.cpp
index 5eda877..03d3b48 100644
--- a/2020/day1.cpp
+++ b/2020/days/day1.cpp
@@ -30,7 +30,8 @@
 #include <iostream>
 #include <fstream>
 
-#include "types.hpp"
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
 
 // Find 2 numbers that sum to 2020
 auto find_2020_x2(const std::vector<i32> & list) -> void {
@@ -44,7 +45,7 @@ auto find_2020_x2(const std::vector<i32> & list) -> void {
 			--end;
 		}
 	}
-	std::cout << (list[begin] * list[end]) << std::endl;
+	print((list[begin] * list[end]));
 }
 
 // Find 3 numbers that sum to 2020
@@ -53,13 +54,13 @@ auto find_2020_x3(const std::vector<i32> & list) -> void {
 		for (auto n1 = 1; n1 < list.size() - 1; ++n1) {
 			auto low  = n0 + 1;
 			auto high = n1;
-			auto n2   = (low + high) / 2;
-			while (low < high - 1) {
+			while (low < high) {
+				auto n2  = (low + high) / 2;
 				auto sum = 0;
 				if ((sum = list[n0] + list[n1] + list[n2]) == 2020) {
-					std::cout << (list[n0] * list[n1] * list[n2]) << std::endl;
+					print((list[n0] * list[n1] * list[n2]));
 					return;
-				} else if (sum > 2020) {
+				} else if (sum < 2020) {
 					low = n2 + 1;
 				} else {
 					high = n2;
@@ -69,11 +70,11 @@ auto find_2020_x3(const std::vector<i32> & list) -> void {
 	}
 }
 
-auto main(i32 argc, char * argv[]) -> i32 {
+auto day1() -> void {
 	auto list = std::vector<i32>();
 	{
 		auto line = std::string();
-		auto file = std::ifstream("day1.input");
+		auto file = std::ifstream("inputs/day1.input");
 		while (getline(file, line)) {
 			list.push_back(std::stoi(line));
 		}
@@ -82,6 +83,4 @@ auto main(i32 argc, char * argv[]) -> i32 {
 
 	find_2020_x2(list);
 	find_2020_x3(list);
-
-	return 0;
 }
diff --git a/2020/day10.cpp b/2020/days/day10.cpp
similarity index 91%
rename from 2020/day10.cpp
rename to 2020/days/day10.cpp
index 9f6fab4..0da5b83 100644
--- a/2020/day10.cpp
+++ b/2020/days/day10.cpp
@@ -29,7 +29,8 @@
 #include <iostream>
 #include <fstream>
 
-#include "types.hpp"
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
 
 struct Pair {
 	u64 jolt;
@@ -40,11 +41,11 @@ auto operator<(const Pair & left, const Pair & right) -> bool {
 	return left.jolt < right.jolt;
 }
 
-auto main(i32 argc, char * argv[]) -> i32 {
+auto day10() -> void {
 	auto jolts = std::vector<Pair>{{ 0, 1 }};
 	{
 		auto line = std::string();
-		auto file = std::ifstream("day10.input");
+		auto file = std::ifstream("inputs/day10.input");
 		while (getline(file, line)) {
 			jolts.push_back({ (u64) std::stoll(line), 0 });
 		}
@@ -59,7 +60,7 @@ auto main(i32 argc, char * argv[]) -> i32 {
 		else if (jolts[i + 1].jolt - jolts[i].jolt == 3) ++dif3;
 	}
 
-	std::cout << (dif1 * dif3) << std::endl;
+	print((dif1 * dif3));
 
 	for (auto i = i32(0); i < jolts.size() - 1; ++i) {
 		for (auto j = i + 1; j < jolts.size(); ++j) {
@@ -70,7 +71,5 @@ auto main(i32 argc, char * argv[]) -> i32 {
 			}
 		}
 	}
-	std::cout << jolts[jolts.size() - 1].count << std::endl;
-
-	return 0;
+	print(jolts[jolts.size() - 1].count);
 }
diff --git a/2020/day11.cpp b/2020/days/day11.cpp
similarity index 94%
rename from 2020/day11.cpp
rename to 2020/days/day11.cpp
index c5aaa78..ecbd826 100644
--- a/2020/day11.cpp
+++ b/2020/days/day11.cpp
@@ -30,7 +30,8 @@
 #include <iostream>
 #include <fstream>
 
-#include "types.hpp"
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
 
 template <typename Lambda>
 auto iterate_seats(const auto & seats, Lambda callback) {
@@ -62,12 +63,12 @@ auto count_seats(const auto & seats) -> usize {
 	return occupied;
 }
 
-auto main(i32 argc, char * argv[]) -> i32 {
+auto day11() -> void {
 	auto bit = u8(0b1);
 	auto seats = std::array<std::vector<std::string>, 2>();
 	{
 		auto line = std::string();
-		auto file = std::ifstream("day11.input");
+		auto file = std::ifstream("inputs/day11.input");
 		while (getline(file, line)) {
 			seats[bit].push_back(line);
 		}
@@ -94,7 +95,7 @@ auto main(i32 argc, char * argv[]) -> i32 {
 	}
 	while (!seats_equal(seats));
 
-	std::cout << count_seats(seats[0]) << std::endl;
+	print(count_seats(seats[0]));
 
 	iterate_seats(seats[0], [&seats](i32 i, i32 j) {
 		seats[0][i][j] = seats[1][i][j] = 'L';
@@ -129,7 +130,5 @@ auto main(i32 argc, char * argv[]) -> i32 {
 		});
 	} while (!seats_equal(seats));
 
-	std::cout << count_seats(seats[0]) << std::endl;
-
-	return 0;
+	print(count_seats(seats[0]));
 }
diff --git a/2020/days/day12.cpp b/2020/days/day12.cpp
new file mode 100644
index 0000000..cc0ee01
--- /dev/null
+++ b/2020/days/day12.cpp
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include <vector>
+#include <string>
+#include <iostream>
+#include <fstream>
+
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
+
+struct Instruction{ char op; i32 num; };
+
+auto day12() -> void {
+	auto instructions = std::vector<Instruction>();
+	{
+		auto line = std::string();
+		auto file = std::ifstream("inputs/day12.input");
+		while (getline(file, line)) {
+			instructions.push_back({ line[0], std::stoi(line.substr(1, line.size() - 1)) });
+			if (line[0] == 'L' || line[0] == 'R') {
+				instructions[instructions.size() - 1].num /= 90;
+			}
+		}
+	}
+
+	{
+		auto ship_x = i32(0);
+		auto ship_y = i32(0);
+		auto direction = i32(2);
+		for (const auto & instruction : instructions) {
+			switch (instruction.op) {
+				case 'N': ship_y += instruction.num; break;
+				case 'E': ship_x += instruction.num; break;
+				case 'S': ship_y -= instruction.num; break;
+				case 'W': ship_x -= instruction.num; break;
+				case 'R': direction = (direction - instruction.num + 4) % 4; break;
+				case 'L': direction = (direction + instruction.num    ) % 4; break;
+				case 'F':
+					ship_x += ((direction - 1) % 2) * instruction.num;
+					ship_y += ((direction - 2) % 2) * instruction.num;
+					break;
+			}
+		}
+		print((std::abs(ship_x) + std::abs(ship_y)));
+	}
+
+	{
+		auto ship_x = i32(0);
+		auto ship_y = i32(0);
+		auto waypoint_x = i32(10);
+		auto waypoint_y = i32( 1);
+		for (const auto & instruction : instructions) {
+			switch (instruction.op) {
+				case 'N': waypoint_y += instruction.num; break;
+				case 'E': waypoint_x += instruction.num; break;
+				case 'S': waypoint_y -= instruction.num; break;
+				case 'W': waypoint_x -= instruction.num; break;
+				case 'R':
+					for (auto i = i32(0); i < instruction.num; ++i) {
+						auto copy = waypoint_x;
+						waypoint_x =  waypoint_y;
+						waypoint_y = -copy;
+					}
+					break;
+				case 'L':
+					for (auto i = i32(0); i < instruction.num; ++i) {
+						auto copy = waypoint_x;
+						waypoint_x = -waypoint_y;
+						waypoint_y =  copy;
+					}
+					break;
+				case 'F':
+					ship_x += waypoint_x * instruction.num;
+					ship_y += waypoint_y * instruction.num;
+					break;
+			}
+		}
+		print((std::abs(ship_x) + std::abs(ship_y)));
+	}
+}
diff --git a/2020/days/day13.cpp b/2020/days/day13.cpp
new file mode 100644
index 0000000..db18feb
--- /dev/null
+++ b/2020/days/day13.cpp
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include <vector>
+#include <string>
+#include <iostream>
+#include <fstream>
+
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
+
+struct Pair{ i64 id; usize index; };
+
+// f = a + n0 * b = c + n1 * d
+// f = req_base + n0 * req_loop = new_base + n1 * new_loop
+// Solve for the smallest integer value f such that this holds true
+auto find_least(i64 new_base, i64 new_loop, i64 req_base, i64 req_loop, i64 iter) -> i64 {
+	while ((req_base - new_base + ++iter * req_loop) % new_loop != 0);
+	return req_base + iter * req_loop;
+}
+
+auto day13() -> void {
+	auto ready = usize(0);
+	auto buses = std::vector<Pair>();
+	{
+		auto line = std::string();
+		auto file = std::ifstream("inputs/day13.input");
+		getline(file, line);
+		ready = std::stoi(line);
+		getline(file, line);
+		auto start = usize(0);
+		auto end   = usize(0);
+		auto index = usize(0);
+		auto id    = std::string();
+		while ((end = line.find(',', start)) != std::string::npos) {
+			id = line.substr(start, end - start);
+			if (id != "x") {
+				buses.push_back({ i64(std::stoi(line.substr(start, end - start))), index });
+			}
+			start = end + 1;
+			++index;
+		}
+		end = line.size();
+		id = line.substr(start, end - start);
+		if (id != "x") {
+			buses.push_back({ i64(std::stoi(line.substr(start, end - start))), index });
+		}
+	}
+	
+	auto id      = buses[0].id;
+	auto minutes = buses[0].id - (ready % buses[0].id);
+	for (auto i = usize(1); i < buses.size(); ++i) {
+		auto local_minutes = buses[i].id - (ready % buses[i].id);
+		if (local_minutes < minutes) {
+			id      = buses[i].id;
+			minutes = local_minutes;
+		}
+	}
+	print((id * minutes));
+
+	auto req_base = usize(buses[0].index);
+	auto req_loop = usize(buses[0].id   );
+	for (auto i = usize(1); i < buses.size(); ++i) {
+		req_base = find_least(-buses[i].index, buses[i].id, req_base, req_loop, -1);
+		if (i < buses.size() - 1) {
+			req_loop = find_least(0, buses[i].id, 0, req_loop, 0);
+		}
+		/*
+		required_base (rqb), required_loop (rql)
+
+		base_loop (bl), repeat_loop (rl)
+
+		rqb + a0 * rql = bl + a1 * rl < minimize and store in required loop
+		a0 = (bl + a1 * rl - rqb) / rql
+
+		b0 * rql = b1 * rl < minimize and store in required loop
+		*/
+	}
+	print(req_base);
+}
diff --git a/2020/days/day14.cpp b/2020/days/day14.cpp
new file mode 100644
index 0000000..a38fbd6
--- /dev/null
+++ b/2020/days/day14.cpp
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include <vector>
+#include <map>
+#include <string>
+#include <bitset>
+#include <iostream>
+#include <fstream>
+
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
+
+struct Op{ u8 op; u64 num1; u64 num2; };
+
+auto set_memory(std::map<u64, u64> & map, u64 addr, const std::vector<bool> & maskX, usize index, u64 value) -> void {
+	while (++index < maskX.size() && !maskX[index]);
+	if (index == maskX.size()) {
+		map.insert_or_assign(addr, value);
+	} else {
+		set_memory(map, addr, maskX, index, value);
+		set_memory(map, addr ^ (u64(1) << (maskX.size() - index - 1)), maskX, index, value);
+	}
+}
+
+auto day14() -> void {
+	auto ops = std::vector<Op>();
+	{
+		auto line = std::string();
+		auto file = std::ifstream("inputs/day14.input");
+		while (getline(file, line)) {
+			if (line.find("mask") != std::string::npos) {
+				auto mask0 = u64(-1);
+				auto mask1 = u64( 0);
+				for (auto i = usize(7); i < line.size(); ++i) {
+					if (line[i] == '0') {
+						mask0 ^= (u64(1) << (42 - i));
+					} else if (line[i] == '1') {
+						mask1 ^= (u64(1) << (42 - i));
+					}
+				}
+				ops.push_back({ 0, mask0, mask1 });
+			} else {
+				auto value = line.find("=") + 2;
+				ops.push_back({
+					1,
+					u64(std::stoll(line.substr(4, line.find("]") - 4))),
+					u64(std::stoll(line.substr(value, line.size() - value)))
+				});
+			}
+		}
+	}
+	auto mask0  = u64(-1);
+	auto mask1  = u64( 0);
+	auto memory = std::map<u64, u64>();
+	for (auto op : ops) {
+		if (op.op == 0) {
+			mask0 = op.num1;
+			mask1 = op.num2;
+		} else {
+			memory.insert_or_assign(op.num1, (op.num2 & mask0) | mask1);
+		}
+	}
+	auto sum = u64(0);
+	for(auto mem : memory) {
+		sum += mem.second;
+	}
+	print(sum);
+
+	mask1  = u64(0);
+	memory = std::map<u64, u64>();
+	auto maskX = std::vector<bool>(36);
+	for (auto op : ops) {
+		if (op.op == 0) {
+			mask1 = op.num2;
+			for (auto i = usize(0); i < maskX.size(); ++i) {
+				auto bit = u64(1) << u64(35 - i);
+				maskX[i] = (op.num1 & bit) && !(op.num2 & bit);
+			}
+		} else {
+			set_memory(memory, op.num1 | mask1, maskX, -1, op.num2);
+		}
+	}
+	sum = u64(0);
+	for(auto mem : memory) {
+		sum += mem.second;
+	}
+	print(sum);
+}
diff --git a/2020/days/day15.cpp b/2020/days/day15.cpp
new file mode 100644
index 0000000..c33fb2a
--- /dev/null
+++ b/2020/days/day15.cpp
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include <unordered_map>
+#include <string>
+#include <iostream>
+#include <fstream>
+
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
+
+struct Pair{ u64 num; usize last; };
+
+auto day15() -> void {
+	auto last     = usize(0);
+	auto index    = usize(0);
+	auto sequence = std::unordered_map<u64, u64>();
+	{
+		auto line = std::string();
+		auto file = std::ifstream("inputs/day15.input");
+		getline(file, line);
+		auto start = usize(0);
+		auto end   = usize(0);
+		auto num   = std::string();
+		while ((end = line.find(',', start)) != std::string::npos) {
+			num = line.substr(start, end - start);
+			sequence.insert_or_assign(u64(std::stoll(num)), ++index);
+			start = end + 1;
+		}
+		end = line.size();
+		num = line.substr(start, end - start);
+		sequence.insert_or_assign(u64(std::stoll(num)), ++index);
+	}
+	while (++index < 30000000) {
+		if (index == 2020) {
+			print(last);
+		}
+		if (sequence.contains(last)) {
+			auto new_last = index - sequence[last];
+			sequence[last] = index;
+			last = new_last;
+		} else {
+			sequence.insert_or_assign(last, index);
+			last = 0;
+		}
+	}
+	print(last);
+}
diff --git a/2020/days/day16.cpp b/2020/days/day16.cpp
new file mode 100644
index 0000000..6c1989c
--- /dev/null
+++ b/2020/days/day16.cpp
@@ -0,0 +1,209 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include <vector>
+#include <string>
+#include <iostream>
+#include <fstream>
+
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
+
+struct Rule { u64 r11; u64 r12; u64 r21; u64 r22; };
+
+auto read_ticket(std::vector<u64> & ticket, const std::string & line) -> void {
+	auto start = usize(0);
+	auto end   = usize(0);
+	while ((end = line.find(",", end + 1)) != std::string::npos) {	
+		ticket.push_back(std::stoll(line.substr(start, end - start)));
+		start = end + 1;
+	}
+	end = line.size();
+	ticket.push_back(std::stoll(line.substr(start, end - start)));
+}
+
+auto matches_rule(const Rule & rule, u64 field) -> bool {
+	return (rule.r11 <= field && field <= rule.r12) || (rule.r21 <= field && field <= rule.r22);
+}
+
+auto remove_if_exists(std::vector<u64> & v, u64 search) -> bool {
+	auto low  = usize(0);
+	auto high = v.size();
+	while (low < high) {
+		auto index = (low + high) / 2;
+		if (v[index] == search) {
+			v.erase(v.begin() + index);
+			return true;
+		} else if (search > v[index]) {
+			low = index + 1;
+		} else {
+			high = index;
+		}
+	}
+	return false;
+}
+
+auto contains(std::vector<u64> & v, u64 search) -> bool {
+	auto low  = usize(0);
+	auto high = v.size();
+	while (low < high) {
+		auto index = (low + high) / 2;
+		if (v[index] == search) {
+			return true;
+		} else if (search > v[index]) {
+			low = index + 1;
+		} else {
+			high = index;
+		}
+	}
+	return false;
+}
+
+auto day16() -> void {
+	auto find        = std::vector<u64>();
+	auto rules       = std::vector<Rule>();
+	auto your_ticket = std::vector<u64>();
+	auto tickets     = std::vector<std::vector<u64>>();
+	{
+		auto line  = std::string();
+		auto file  = std::ifstream("inputs/day16.input");
+		auto index = usize(0);
+		while (getline(file, line) && line != "") {
+			auto rule  = Rule();
+			auto start = line.find(":") + 2;
+			auto end   = line.find("-");
+			rule.r11 = std::stoll(line.substr(start, end - start));
+			start = end + 1;
+			end   = line.find(" ", end);
+			rule.r12 = std::stoll(line.substr(start, end - start));
+			start = end + 4;
+			end   = line.find("-", end);
+			rule.r21 = std::stoll(line.substr(start, end - start));
+			start = end + 1;
+			end   = line.size();
+			rule.r22 = std::stoll(line.substr(start, end - start));
+			rules.push_back(rule);
+			if (line.find("departure") != std::string::npos) {
+				find.push_back(index);
+			}
+			++index;
+		}
+		getline(file, line);
+		getline(file, line);
+		read_ticket(your_ticket, line);
+		getline(file, line);
+		getline(file, line);
+		while (getline(file, line)) {
+			auto ticket = std::vector<u64>();
+			read_ticket(ticket, line);
+			tickets.push_back(std::move(ticket));
+		}
+	}
+	auto valid = std::vector<std::vector<u64>>();
+	{
+		auto foo = std::vector<u64>(your_ticket.size());
+		for (auto i = usize(0); i < your_ticket.size(); ++i) {
+			foo[i] = i;
+		}
+		for (auto i = usize(0); i < rules.size(); ++i) {
+			valid.push_back(foo);
+		}
+	}
+	auto sum = u64(0);
+	for (auto k = usize(0); k < tickets.size(); ++k) {
+		const auto & ticket = tickets[k];
+		auto invalid_ticket = false;
+		for (auto i = usize(0); i < ticket.size(); ++i) {
+			auto invalid_field = true;
+			for (auto j = usize(0); invalid_field && j < rules.size(); ++j) {
+				if (matches_rule(rules[j], ticket[i])) {
+					invalid_field = false;
+				}
+			}
+			if (invalid_field) {
+				sum += ticket[i];
+			}
+			invalid_ticket = invalid_ticket || invalid_field;
+		}
+		if (invalid_ticket) {
+			tickets.erase(tickets.begin() + k);
+			--k;
+		}
+	}
+	print(sum);
+
+	for (auto i = usize(0); i < tickets.size(); ++i) {
+		const auto & ticket = tickets[i];
+		for (auto j = usize(0); j < valid.size(); ++j) {
+			auto & v = valid[j];
+			for (auto k = usize(0); k < v.size(); ++k) {
+				if (!matches_rule(rules[j], ticket[v[k]])) {
+					v.erase(v.begin() + k);
+					--k;
+				}
+			}
+		}
+	}
+	for (auto i = usize(0); i < your_ticket.size(); ++i) {
+		auto cont_index = usize(0);
+		auto contained  = usize(0);
+		for (auto j = usize(0); j < valid.size(); ++j) {
+			if (contains(valid[j], i)) {
+				cont_index = j;
+				++contained;
+			}
+		}
+		if (contained == 1) {
+			for (auto j = usize(0); j < valid[cont_index].size(); ++j) {
+				if (valid[cont_index][j] != i) {
+					valid[cont_index].erase(valid[cont_index].begin() + j);
+					--j;
+				}
+			}
+		}
+	}
+
+	auto loop = true;
+	while (loop) {
+		loop = false;
+		for (auto i = usize(0); i < valid.size(); ++i) {
+			if (valid[i].size() == 1) {
+				for (auto j = usize(0); j < valid.size(); ++j) {
+					if (j != i) {
+						auto temp = remove_if_exists(valid[j], valid[i][0]);
+						loop = temp || loop;
+					}
+				}
+			}
+		}
+	}
+
+	auto product = u64(1);
+	for (auto i = usize(0); i < find.size(); ++i) {
+		product *= your_ticket[valid[find[i]][0]];
+	}
+	print(product);
+}
diff --git a/2020/days/day17.cpp b/2020/days/day17.cpp
new file mode 100644
index 0000000..a016751
--- /dev/null
+++ b/2020/days/day17.cpp
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include <vector>
+#include <array>
+#include <string>
+#include <iostream>
+#include <fstream>
+
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
+
+constexpr auto CYCLES = 6;
+constexpr auto BUFFER = CYCLES + 1;
+
+auto neighbor3d_count(const auto & pocket, i32 x, i32 y, i32 z) -> usize {
+	auto count = usize(0);
+	for (auto i = i32(-1); i < 2; ++i) {
+		for (auto j = i32(-1); j < 2; ++j) {
+			for (auto k = i32(-1); k < 2; ++k) {
+				count += (i != 0 || j != 0 || k != 0) && pocket[x + i][y + j][z + k];
+			}
+		}
+	}
+	return count;
+}
+
+auto neighbor4d_count(const auto & pocket, i32 w, i32 x, i32 y, i32 z) -> usize {
+	auto count = usize(0);
+	for (auto i = i32(-1); i < 2; ++i) {
+		for (auto j = i32(-1); j < 2; ++j) {
+			for (auto k = i32(-1); k < 2; ++k) {
+				for (auto l = i32(-1); l < 2; ++l) {
+					count += (i != 0 || j != 0 || k != 0 || l != 0) && pocket[w + l][x + i][y + j][z + k];
+				}
+			}
+		}
+	}
+	return count;
+}
+
+auto day17() -> void {
+	auto pocket = std::vector<std::vector<std::vector<std::vector<bool>>>>();
+	{
+		auto lines = std::vector<std::string>();
+		auto line = std::string();
+		auto file = std::ifstream("inputs/day17.input");
+		while (getline(file, line)) {
+			lines.push_back(line);
+		}
+
+
+		pocket = std::vector<std::vector<std::vector<std::vector<bool>>>>(BUFFER * 2 + 1);
+		for (auto w = usize(0); w < pocket.size(); ++w) {
+			pocket[w] = std::vector<std::vector<std::vector<bool>>>(lines[0].size() + BUFFER * 2);
+			for (auto i = usize(0); i < pocket[0].size(); ++i) {
+				auto vec = std::vector<std::vector<bool>>(lines.size() + BUFFER * 2);
+				for (auto j = usize(0); j < vec.size(); ++j) {
+					vec[j] = std::vector<bool>(BUFFER * 2 + 1);
+					if (w == BUFFER && i >= BUFFER && i < BUFFER + lines[0].size() && j >= BUFFER && j < BUFFER + lines.size()) {
+						vec[j][BUFFER] = lines[j - BUFFER][i - BUFFER] == '#';
+					}
+				}
+				pocket[w][i] = std::move(vec);
+			}
+		}
+	}
+
+	{
+		auto pockets = std::array<std::vector<std::vector<std::vector<bool>>>, 2>{ pocket[BUFFER], pocket[BUFFER] };
+		auto bit = false;
+		for (auto i = usize(0); i < CYCLES; ++i) {
+			auto & read  = pockets[bit];
+			auto & write = pockets[bit = !bit];
+			for (auto x = i32(1); x < read.size() - 1; ++x) {
+				for (auto y = i32(1); y < read[0].size() - 1; ++y) {
+					for (auto z = i32(1); z < read[0][0].size() - 1; ++z) {
+						auto neighbors = neighbor3d_count(read, x, y, z);
+						if (read[x][y][z] && (neighbors < 2 || neighbors > 3)) {
+							write[x][y][z] = false;
+						} else if (!read[x][y][z] && neighbors == 3) {
+							write[x][y][z] = true;
+						} else {
+							write[x][y][z] = read[x][y][z];
+						}
+					}
+				}
+			}
+		}
+
+		auto & pocket = pockets[bit];
+		auto count = usize(0);
+		for (auto i = usize(0); i < pocket.size(); ++i) {
+			for (auto j = usize(0); j < pocket[0].size(); ++j) {
+				for (auto k = usize(0); k < pocket[0][0].size(); ++k) {
+					count += pocket[i][j][k];
+				}
+			}
+		}
+		print(count);
+	}
+
+	{
+		auto pockets = std::array<std::vector<std::vector<std::vector<std::vector<bool>>>>, 2>{ pocket, pocket };
+		auto bit = false;
+		for (auto i = usize(0); i < CYCLES; ++i) {
+			auto & read  = pockets[bit];
+			auto & write = pockets[bit = !bit];
+			for (auto w = i32(1); w < read.size() - 1; ++w) {
+				for (auto x = i32(1); x < read[0].size() - 1; ++x) {
+					for (auto y = i32(1); y < read[0][0].size() - 1; ++y) {
+						for (auto z = i32(1); z < read[0][0][0].size() - 1; ++z) {
+							auto neighbors = neighbor4d_count(read, w, x, y, z);
+							if (read[w][x][y][z] && (neighbors < 2 || neighbors > 3)) {
+								write[w][x][y][z] = false;
+							} else if (!read[w][x][y][z] && neighbors == 3) {
+								write[w][x][y][z] = true;
+							} else {
+								write[w][x][y][z] = read[w][x][y][z];
+							}
+						}
+					}
+				}
+			}
+		}
+
+		auto & pocket = pockets[bit];
+		auto count = usize(0);
+		for (auto i = usize(0); i < pocket.size(); ++i) {
+			for (auto j = usize(0); j < pocket[0].size(); ++j) {
+				for (auto k = usize(0); k < pocket[0][0].size(); ++k) {
+					for (auto l = usize(0); l < pocket[0][0][0].size(); ++l) {
+						count += pocket[i][j][k][l];
+					}
+				}
+			}
+		}
+		print(count);
+	}
+}
diff --git a/2020/days/day18.cpp b/2020/days/day18.cpp
new file mode 100644
index 0000000..c459a7a
--- /dev/null
+++ b/2020/days/day18.cpp
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include <vector>
+#include <string>
+#include <iostream>
+#include <fstream>
+
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
+
+auto evaluate_part1(const std::string & equation, usize & index) -> u64 {
+	auto value     = u64(0);
+	auto operation = 0;
+	while (equation[index] != ')') {
+		if ('0' <= equation[index] && equation[index] <= '9') {
+			auto end = index;
+			while ('0' <= equation[++end] && equation[end] <= '9');
+			if (operation == 0) {
+				value += std::stoll(equation.substr(index, end - index));
+			} else {
+				value *= std::stoll(equation.substr(index, end - index));
+			}
+			index = end;
+		} else if (equation[index] == '+') {
+			operation = 0;
+			index += 2;
+		} else if (equation[index] == '*') {
+			operation = 1;
+			index += 2;
+		} else if (equation[index] == '(') {
+			if (operation == 0) {
+				value += evaluate_part1(equation, ++index);
+			} else {
+				value *= evaluate_part1(equation, ++index);
+			}
+		} else if (equation[index] == ' ') {
+			++index;
+		}
+	}
+	++index;
+	return value;
+}
+
+auto evaluate_part2(const std::string & equation, usize & index) -> u64;
+auto evaluate_part2_addition(const std::string & equation, usize & index) -> u64;
+auto evaluate_part2_factor(const std::string & equation, usize & index) -> u64;
+
+auto evaluate_part2(const std::string & equation, usize & index) -> u64 {
+	auto value1 = evaluate_part2_addition(equation, index);
+	if (++index < equation.size() && equation[index] == '*') {
+		auto value2 = evaluate_part2(equation, index += 2);
+		return value1 * value2;
+	}
+	--index;
+	return value1;
+}
+
+auto evaluate_part2_addition(const std::string & equation, usize & index) -> u64 {
+	auto value1 = evaluate_part2_factor(equation, index);
+	if (++index < equation.size() && equation[index] == '+') {
+		auto value2 = evaluate_part2_addition(equation, index += 2);
+		return value1 + value2;
+	}
+	--index;
+	return value1;
+}
+
+auto evaluate_part2_factor(const std::string & equation, usize & index) -> u64 {
+	auto value = u64(0);
+	if (equation[index] == '(') {
+		value = evaluate_part2(equation, ++index);
+		++index;
+	} else {
+		auto end = index;
+		while ('0' <= equation[++end] && equation[end] <= '9');
+		value = std::stoll(equation.substr(index, end - index));
+		index = end;
+	}
+	return value;
+}
+
+auto day18() -> void {
+	auto equations = std::vector<std::string>();
+	{
+		auto line = std::string();
+		auto file = std::ifstream("inputs/day18.input");
+		while (getline(file, line)) {
+			equations.push_back(line + ')');
+		}
+	}
+	auto sum = u64(0);
+	for (auto i = usize(0); i < equations.size(); ++i) {
+		auto index = usize(0);
+		sum += evaluate_part1(equations[i], index);
+	}
+	print(sum);
+
+	sum = u64(0);
+	for (auto i = usize(0); i < equations.size(); ++i) {
+		auto index = usize(0);
+		sum += evaluate_part2_factor('(' + equations[i], index);
+	}
+	print(sum);
+}
diff --git a/2020/days/day19.cpp b/2020/days/day19.cpp
new file mode 100644
index 0000000..9f3ed8c
--- /dev/null
+++ b/2020/days/day19.cpp
@@ -0,0 +1,195 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include <vector>
+#include <unordered_map>
+#include <string>
+#include <iostream>
+#include <fstream>
+
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
+
+enum RuleType { Char, Sequence, Alternator };
+
+struct Rule {
+	RuleType type;
+	char c;
+	std::vector<u64> list;
+	std::vector<std::vector<u64>> or_list;
+
+	explicit Rule(char c) noexcept : type(Char), c(c) {}
+	explicit Rule(std::vector<u64> && list) noexcept : type(Sequence), list(std::move(list)) {}
+	explicit Rule(std::vector<std::vector<u64>> && or_list) noexcept : type(Alternator), or_list(std::move(or_list)) {}
+};
+
+auto extract_numbers(const std::string & list) -> std::vector<u64> {
+	auto nums  = std::vector<u64>();
+	auto end   = usize(0);
+	auto start = usize(0);
+	while ((end = list.find(" ", ++end)) != std::string::npos) {
+		nums.push_back(std::stoll(list.substr(start, end - start)));
+		start = end + 1;
+	}
+	return std::move(nums);
+}
+
+auto matches(const std::string & string, usize & index, std::unordered_map<u64, Rule> & rules, u64 rule_id, bool sub) -> bool;
+
+auto matches_list(const std::string & string, usize & index, std::unordered_map<u64, Rule> & rules, const std::vector<u64> & rule_ids, bool sub) -> bool {
+	auto local_index = index;
+	for (auto i = usize(0); i < rule_ids.size(); ++i) {
+		if (!matches(string, local_index, rules, rule_ids[i], true)) {
+			return false;
+		}
+	}
+	index = local_index;
+	return (sub || index == string.size());
+}
+
+auto matches(const std::string & string, usize & index, std::unordered_map<u64, Rule> & rules, u64 rule_id, bool sub) -> bool {
+	if (index >= string.size()) {
+		return false;
+	}
+	auto & rule = rules.find(rule_id)->second;
+	switch (rule.type) {
+		case Char: {
+			if (string[index] == rule.c) {
+				++index;
+				return (sub || index == string.size());
+			} else {
+				return false;
+			}
+		}
+		case Sequence: {
+			return matches_list(string, index, rules, rule.list, sub);
+		}
+		case Alternator: {
+			for (auto i = usize(0); i < rule.or_list.size(); ++i) {
+				auto local_index = index;
+				if (matches_list(string, local_index, rules, rule.or_list[i], sub)) {
+					index = local_index;
+					return true;
+				}
+			}
+			return false;
+		}
+	}
+	// むだ!makes the compiler happy though
+	return false;
+}
+
+auto min_length(std::unordered_map<u64, Rule> & rules, u64 rule_id) -> usize;
+
+auto min_length_list(std::unordered_map<u64, Rule> & rules, const std::vector<u64> & rule_ids) -> usize {
+	auto len = usize(0);
+	for (auto i = usize(0); i < rule_ids.size(); ++i) {
+		len += min_length(rules, rule_ids[i]);
+	}
+	return len;
+}
+
+auto min_length(std::unordered_map<u64, Rule> & rules, u64 rule_id) -> usize {
+	auto & rule = rules.find(rule_id)->second;
+	switch (rule.type) {
+		case Char:     return 1;
+		case Sequence: return min_length_list(rules, rule.list);
+		case Alternator: {
+			auto min = min_length_list(rules, rule.or_list[0]);
+			for (auto i = usize(1); i < rule.or_list.size(); ++i) {
+				auto len = min_length_list(rules, rule.or_list[i]);
+				if (len < min) {
+					min = len;
+				}
+			}
+			return min;
+		}
+	}
+	// このもむだ!
+	return 0;
+}
+
+auto day19() -> void {
+	auto rules   = std::unordered_map<u64, Rule>();
+	auto strings = std::vector<std::string>();
+	{
+		auto line = std::string();
+		auto file = std::ifstream("inputs/day19.input");
+		getline(file, line);
+		while (line != "") {
+			auto end = line.find(":");
+			auto id = std::stoll(line.substr(0, end));
+			if ((end = line.find("\"")) != std::string::npos) {
+				rules.insert_or_assign(id, Rule(line[end + 1]));
+			} else if (line.find("|") != std::string::npos) {
+				end = line.find(":") + 2;
+				line = line.substr(end, line.size() - end) + " |";
+				auto sequences = std::vector<std::vector<u64>>();
+				end = usize(0);
+				auto start = usize(0);
+				while ((end = line.find("|", ++end)) != std::string::npos) {
+					sequences.push_back(extract_numbers(line.substr(start, end - start)));
+					start = end + 2;
+				}
+				rules.insert_or_assign(id, Rule(std::move(sequences)));
+			} else {
+				end = line.find(":") + 2;
+				rules.insert_or_assign(id, Rule(extract_numbers(line.substr(end, line.size() - end) + ' ')));
+			}
+			getline(file, line);
+		}
+		while (getline(file, line)) {
+			strings.push_back(std::move(line));
+		}
+	}
+
+	auto successful = usize(0);
+	for (auto i = usize(0); i < strings.size(); ++i) {
+		auto index = usize(0);
+		successful += matches(strings[i], index, rules, 0, false);
+	}
+	print(successful);
+	
+	successful = usize(0);
+	auto min_length42 = min_length(rules, 42);
+	auto min_length31 = min_length(rules, 31);
+	for (auto i = usize(0); i < strings.size(); ++i) {
+		auto unsuccessful = true;
+		auto base = min_length42 * 2 + min_length31;
+		auto list = std::vector<u64>{ 42, 42, 31 };
+		for (auto j = usize(0); unsuccessful && j * min_length42 + base <= strings[i].size(); ++j) {
+			auto copy = list;
+			for (auto k = usize(0); unsuccessful && k <= j; ++k) {
+				auto index = usize(0);
+				unsuccessful = !matches_list(strings[i], index, rules, copy, false);
+				copy.push_back(31);
+			}
+			list.insert(list.begin(), 42);
+		}
+		successful += !unsuccessful;
+	}
+	print(successful);
+}
diff --git a/2020/day2.cpp b/2020/days/day2.cpp
similarity index 91%
rename from 2020/day2.cpp
rename to 2020/days/day2.cpp
index cec8af6..fa57af9 100644
--- a/2020/day2.cpp
+++ b/2020/days/day2.cpp
@@ -29,7 +29,8 @@
 #include <iostream>
 #include <fstream>
 
-#include "types.hpp"
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
 
 struct Password {
 	u32 min;
@@ -72,11 +73,11 @@ auto count_valid_toboggan(const std::vector<Password> & passwords) -> u32 {
 	return valid;
 }
 
-auto main(i32 argc, char * argv[]) -> i32 {
+auto day2() -> void {
 	auto passwords = std::vector<Password>();
 	{
 		auto line = std::string();
-		auto file = std::ifstream("day2.input");
+		auto file = std::ifstream("inputs/day2.input");
 		while (getline(file, line)) {
 			auto index = usize(0);
 			auto password = Password{};
@@ -88,8 +89,6 @@ auto main(i32 argc, char * argv[]) -> i32 {
 		}
 	}
 
-	std::cout << count_valid_sled(passwords)     << std::endl;
-	std::cout << count_valid_toboggan(passwords) << std::endl;
-
-	return 0;
+	print(count_valid_sled(passwords)    );
+	print(count_valid_toboggan(passwords));
 }
diff --git a/2020/days/day23.cpp b/2020/days/day23.cpp
new file mode 100644
index 0000000..f3cc3b4
--- /dev/null
+++ b/2020/days/day23.cpp
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include <vector>
+#include <array>
+#include <string>
+#include <iostream>
+#include <fstream>
+
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
+
+constexpr auto CUP_COUNT = 9;
+
+auto day23() -> void {
+	auto start = usize(0);
+	auto nums = std::array<usize, CUP_COUNT>();
+	auto big_nums = std::vector<usize>(1000000);
+	{
+		auto line = std::string();
+		auto file = std::ifstream("inputs/day23.input");
+		getline(file, line);
+		for (auto i = usize(0); i < CUP_COUNT; ++i) {
+			nums[line[i] - '1'] = line[(i + 1) % CUP_COUNT] - '1';
+		}
+		start = line[0] - '1';
+		for (auto i = usize(0); i < CUP_COUNT; ++i) {
+			if (nums[i] != start) {
+				big_nums[i] = nums[i];
+			} else {
+				big_nums[i] = CUP_COUNT;
+			}
+		}
+		for (auto i = CUP_COUNT; i < big_nums.size() - 1; ++i) {
+			big_nums[i] = i + 1;
+		}
+		big_nums[big_nums.size() - 1] = start;
+	}
+
+	auto begin = usize(0);
+	auto end   = usize(0);
+
+	// Part 1
+	auto current = start;
+	for (auto i = usize(0); i < 100; ++i) {
+		begin = nums[current];
+		end   = nums[nums[begin]];
+		nums[current] = nums[end];
+		auto destination = current;
+		while (
+			   begin       == (destination = (destination + CUP_COUNT - 1) % CUP_COUNT)
+			|| nums[begin] ==  destination
+			|| end         ==  destination
+		);
+		nums[end] = nums[destination];
+		nums[destination] = begin;
+		current = nums[current];
+	}
+	auto out = std::array<c8, CUP_COUNT + 1>{ 0 };
+	for (auto i = nums[0], j = usize(0); i != 0; i = nums[i], ++j) {
+		out[j] = (i + '1');
+	}
+	print(&out[0]);
+
+	// Part 2
+	current = start;
+	for (auto i = usize(0); i < 10000000; ++i) {
+		begin = big_nums[current];
+		end   = big_nums[big_nums[begin]];
+		big_nums[current] = big_nums[end];
+		auto destination = current;
+		while (
+			   begin           == (destination = (destination + big_nums.size() - 1) % big_nums.size())
+			|| big_nums[begin] ==  destination
+			|| end             ==  destination
+		);
+		big_nums[end] = big_nums[destination];
+		big_nums[destination] = begin;
+		current = big_nums[current];
+	}
+	print(((big_nums[0] + 1) * (big_nums[big_nums[0]] + 1)));
+}
diff --git a/2020/day3.cpp b/2020/days/day3.cpp
similarity index 60%
rename from 2020/day3.cpp
rename to 2020/days/day3.cpp
index 4c6268b..647d627 100644
--- a/2020/day3.cpp
+++ b/2020/days/day3.cpp
@@ -29,40 +29,53 @@
 #include <iostream>
 #include <fstream>
 
-#include "types.hpp"
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
 
-auto read_field_and_count_trees(std::vector<std::string> & trees, usize horizontal_increment, usize vertical_increment) -> u64 {
-	auto tree_count = u64(0);
+struct TreeVector{ usize horz;    usize vert;    };
+struct Coordinate{ usize x_index; usize y_index; };
 
-	auto x_index = usize(-horizontal_increment);
-	auto y_index = usize(-1);
-	auto line = std::string();
-	auto file = std::ifstream("day3.input");
-
-	while (getline(file, line)) {
-		auto vertical_check = (++y_index % vertical_increment == 0);
-		tree_count += vertical_check * (line[(x_index += (vertical_check * horizontal_increment)) % line.size()] == '#');
+auto read_field_and_count_trees(const std::vector<TreeVector> & vectors) -> std::vector<u64> {
+	auto tree_counts = std::vector<u64>(vectors.size());
+	auto coords      = std::vector<Coordinate>(vectors.size());
+	for (auto i = usize(0); i < coords.size(); ++i) {
+		coords[i] = { usize(-vectors[i].horz), usize(-1) };
 	}
 
-	return tree_count;
+	auto line = std::string();
+	auto file = std::ifstream("inputs/day3.input");
+
+	while (getline(file, line)) {
+		for (auto i = usize(0); i < vectors.size(); ++i) {
+			auto & vector = vectors[i];
+			auto & coord  = coords[i];
+			
+			auto vertical_check = (++coord.y_index % vector.vert == 0);
+			tree_counts[i] += vertical_check * (line[(coord.x_index += (vertical_check * vector.horz)) % line.size()] == '#');
+		}
+	}
+
+	return std::move(tree_counts);
 }
 
-auto main(i32 argc, char ** argv) -> i32 {
+auto day3() -> void {
 	auto trees       = std::vector<std::string>();
-	auto tree_counts = std::vector<u64>();
+	auto tree_counts = read_field_and_count_trees(
+		std::vector<TreeVector>{
+			{ 3, 1 },
+			{ 1, 1 },
+			{ 5, 1 },
+			{ 7, 1 },
+			{ 1, 2 },
+		}
+	);
 
-	tree_counts.push_back(read_field_and_count_trees(trees, 3, 1));
-	std::cout << tree_counts[0] << std::endl;
+	print(tree_counts[0]);
 
-	tree_counts.push_back(read_field_and_count_trees(trees, 1, 1));
-	tree_counts.push_back(read_field_and_count_trees(trees, 5, 1));
-	tree_counts.push_back(read_field_and_count_trees(trees, 7, 1));
-	tree_counts.push_back(read_field_and_count_trees(trees, 1, 2));
 	auto tree_count_product = u64(1);
 	for (auto tree_count : tree_counts) {
 		tree_count_product *= tree_count;
 	}
-	std::cout << tree_count_product << std::endl;
 
-	return 0;
+	print(tree_count_product);
 }
diff --git a/2020/day4.cpp b/2020/days/day4.cpp
similarity index 95%
rename from 2020/day4.cpp
rename to 2020/days/day4.cpp
index f0c5b78..1ba17f8 100644
--- a/2020/day4.cpp
+++ b/2020/days/day4.cpp
@@ -29,7 +29,8 @@
 #include <fstream>
 #include <iostream>
 
-#include "types.hpp"
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
 
 struct KeyValue {
 	std::string key;
@@ -46,13 +47,13 @@ auto try_num(const std::string & passport, usize index) -> bool {
 	return Min <= num && num <= Max;
 };
 
-auto main(i32 argc, char * argv[]) -> i32 {
+auto day4() -> void {
 	auto valid_count1 = usize(0);
 	auto valid_count2 = usize(0);
 
 	auto passport = std::string();
 	auto line     = std::string();
-	auto file     = std::ifstream("day4.input");
+	auto file     = std::ifstream("inputs/day4.input");
 	while (getline(file, line)) {
 		if (line == "") {
 			auto elements = std::vector<KeyValue>{
@@ -108,7 +109,6 @@ auto main(i32 argc, char * argv[]) -> i32 {
 		}
 	}
 
-	std::cout << valid_count1 << ", " << valid_count2 << std::endl;
-	
-	return 0;
+	print(valid_count1);
+	print(valid_count2);
 }
diff --git a/2020/day5.cpp b/2020/days/day5.cpp
similarity index 90%
rename from 2020/day5.cpp
rename to 2020/days/day5.cpp
index 70d3d35..5a68158 100644
--- a/2020/day5.cpp
+++ b/2020/days/day5.cpp
@@ -30,12 +30,13 @@
 #include <iostream>
 #include <fstream>
 
-#include "types.hpp"
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
 
-auto main(i32 argc, char * argv[]) -> i32 {
+auto day5() -> void {
 	auto seat = usize(0);
 	auto line = std::string();
-	auto file = std::ifstream("day5.input");
+	auto file = std::ifstream("inputs/day5.input");
 
 	auto seats = std::vector<usize>();
 
@@ -49,16 +50,14 @@ auto main(i32 argc, char * argv[]) -> i32 {
 		}
 		seats.push_back(local_seat);
 	}
-	std::cout << seat << std::endl;
+	print(seat);
 
 	std::sort(seats.begin(), seats.end());
 
 	for (auto i = usize(0); i < seats.size() - 1; ++i) {
 		if (seats[i] + 2 == seats[i + 1]) {
-			std::cout << (seats[i] + 1) << std::endl;
+			print((seats[i] + 1));
 			break;
 		}
 	}
-
-	return 0;
 }
diff --git a/2020/day6.cpp b/2020/days/day6.cpp
similarity index 91%
rename from 2020/day6.cpp
rename to 2020/days/day6.cpp
index ae1035b..b3a3dbe 100644
--- a/2020/day6.cpp
+++ b/2020/days/day6.cpp
@@ -29,12 +29,13 @@
 #include <iostream>
 #include <fstream>
 
-#include "types.hpp"
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
 
-auto main(i32 argc, char * argv[]) -> i32 {
+auto day6() -> void {
 	{
 		auto line    = std::string();
-		auto file    = std::ifstream("day6.input");
+		auto file    = std::ifstream("inputs/day6.input");
 
 		auto answers = std::vector<u32>(26);
 
@@ -57,8 +58,7 @@ auto main(i32 argc, char * argv[]) -> i32 {
 				}
 			}
 		}
-		std::cout << sum_1 << ", " << sum_2 << std::endl;
+		print(sum_1);
+		print(sum_2);
 	}
-
-	return 0;
 }
diff --git a/2020/day7.cpp b/2020/days/day7.cpp
similarity index 93%
rename from 2020/day7.cpp
rename to 2020/days/day7.cpp
index 97991ea..8c2d8cc 100644
--- a/2020/day7.cpp
+++ b/2020/days/day7.cpp
@@ -32,7 +32,8 @@
 #include <iostream>
 #include <fstream>
 
-#include "types.hpp"
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
 
 struct SubBag { std::string type; u32 count; };
 
@@ -60,11 +61,11 @@ auto count_to(const std::string & search, std::map<std::string, Edges> & map) ->
 	return counted;
 }
 
-auto main(i32 argc, char * argv[]) -> i32 {
+auto day7() -> void {
 	auto bag_graph = std::map<std::string, Edges>();
 	{
 		auto line = std::string();
-		auto file = std::ifstream("day7.input");
+		auto file = std::ifstream("inputs/day7.input");
 		while (getline(file, line)) {
 			auto find = line.find("bag") - 1;
 			auto bag_type = line.substr(0, line.find("bag") - 1);
@@ -96,9 +97,7 @@ auto main(i32 argc, char * argv[]) -> i32 {
 			}
 		}
 	}
-	std::cout << seen.size() << std::endl;
+	print(seen.size());
 
-	std::cout << (count_to("shiny gold", bag_graph) - 1) << std::endl;
-
-	return 0;
+	print((count_to("shiny gold", bag_graph) - 1));
 }
diff --git a/2020/day8.cpp b/2020/days/day8.cpp
similarity index 94%
rename from 2020/day8.cpp
rename to 2020/days/day8.cpp
index 030bceb..0d770cd 100644
--- a/2020/day8.cpp
+++ b/2020/days/day8.cpp
@@ -29,7 +29,8 @@
 #include <iostream>
 #include <fstream>
 
-#include "types.hpp"
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
 
 enum OpCode { Acc, Jmp, Nop };
 struct Op{ OpCode code; i32 num; bool executed; };
@@ -81,11 +82,11 @@ auto attempt_swap(State & state, std::vector<Op> & ops) -> bool {
 	return false;
 }
 
-auto main(i32 argc, char * argv[]) -> i32 {
+auto day8() -> void {
 	auto ops = std::vector<Op>();
 	{
 		auto line = std::string();
-		auto file = std::ifstream("day8.input");
+		auto file = std::ifstream("inputs/day8.input");
 		while (getline(file, line)) {
 			ops.push_back(extract_op(line));
 		}
@@ -95,18 +96,16 @@ auto main(i32 argc, char * argv[]) -> i32 {
 	while (!ops[state.isp].executed) {
 		execute(state, ops);
 	}
-	std::cout << state.acc << std::endl;
+	print(state.acc);
 
 	for (auto & op : ops) { op.executed = false; }
 
 	state = State{ 0, 0 };
 	for (;;) {
 		if (attempt_swap(state, ops)) {
-			std::cout << state.acc << std::endl;
+			print(state.acc);
 			break;
 		}
 		execute(state, ops);
 	}
-
-	return 0;
 }
diff --git a/2020/day9.cpp b/2020/days/day9.cpp
similarity index 92%
rename from 2020/day9.cpp
rename to 2020/days/day9.cpp
index 1668fd5..987fc9c 100644
--- a/2020/day9.cpp
+++ b/2020/days/day9.cpp
@@ -29,7 +29,8 @@
 #include <iostream>
 #include <fstream>
 
-#include "types.hpp"
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
 
 auto find_sum(usize index, std::vector<u64> xmas) {
 	for (auto i = index - 25; i < index - 1; ++i) {
@@ -42,10 +43,10 @@ auto find_sum(usize index, std::vector<u64> xmas) {
 	return false;
 }
 
-auto main(i32 argc, char * argv[]) -> i32 {
+auto day9() -> void {
 	auto xmas = std::vector<u64>();
 	auto line = std::string();
-	auto file = std::ifstream("day9.input");
+	auto file = std::ifstream("inputs/day9.input");
 	while (getline(file, line)) {
 		xmas.push_back(std::stoll(line));
 	}
@@ -53,7 +54,7 @@ auto main(i32 argc, char * argv[]) -> i32 {
 	auto invalid = u64(0);
 	for (auto i = usize(25); i < xmas.size(); ++i) {
 		if (!find_sum(i, xmas)) {
-			std::cout << (invalid = xmas[i]) << std::endl;
+			print((invalid = xmas[i]));
 			break;
 		}
 	}
@@ -82,7 +83,5 @@ auto main(i32 argc, char * argv[]) -> i32 {
 			max = xmas[i];
 		}
 	}
-	std::cout << (min + max) << std::endl;
-
-	return 0;
+	print((min + max));
 }
diff --git a/2020/template.cpp b/2020/misc/day.cpp.template
similarity index 91%
rename from 2020/template.cpp
rename to 2020/misc/day.cpp.template
index 51a940b..52dfe9d 100644
--- a/2020/template.cpp
+++ b/2020/misc/day.cpp.template
@@ -29,16 +29,15 @@
 #include <iostream>
 #include <fstream>
 
-#include "types.hpp"
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
 
-auto main(i32 argc, char * argv[]) -> i32 {
+auto current_day() -> void {
 	{
 		auto line = std::string();
-		auto file = std::ifstream("dayNUM.input");
+		auto file = std::ifstream("inputs/current_day.input");
 		while (getline(file, line)) {
 			
 		}
 	}
-
-	return 0;
 }
diff --git a/2020/misc/main.cpp b/2020/misc/main.cpp
new file mode 100644
index 0000000..c4752db
--- /dev/null
+++ b/2020/misc/main.cpp
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include "types.hpp"
+
+extern auto current_day() -> void;
+
+auto main(i32 argc, char * argv[]) -> i32 {
+	current_day();
+
+	return 0;
+}
+
diff --git a/2020/misc/main_test.cpp b/2020/misc/main_test.cpp
new file mode 100644
index 0000000..0d8954d
--- /dev/null
+++ b/2020/misc/main_test.cpp
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include <iostream>
+#include <string>
+#include <chrono>
+
+#include "types.hpp"
+
+extern auto current_day() -> void;
+
+auto main(i32 argc, char * argv[]) -> i32 {
+	auto TEST_CYCLES = 1;
+	if (argc >= 2) {
+		TEST_CYCLES = std::stoi(argv[1]);
+	}
+
+	std::cout << "Starting test with " << TEST_CYCLES << " iterations..." << std::endl;
+	auto begin1 = std::chrono::high_resolution_clock::now();
+
+	for (auto i = usize(0); i < TEST_CYCLES; ++i) {
+		current_day();
+	}
+
+	auto end1 = std::chrono::high_resolution_clock::now();
+
+	if (argc >= 3) {
+		if (argv[2] == std::string("millis")) {
+			std::cout << "Tests completed in " << std::chrono::duration_cast<std::chrono::milliseconds>(end1 - begin1).count() << " milliseconds"<< std::endl;
+		} else if (argv[2] == std::string("nanos")) {
+			std::cout << "Tests completed in " << std::chrono::duration_cast<std::chrono::nanoseconds>(end1 - begin1).count() << " nanoseconds"<< std::endl;
+		} else if (argv[2] == std::string("micros")) {
+			std::cout << "Tests completed in " << std::chrono::duration_cast<std::chrono::microseconds>(end1 - begin1).count() << " microsenconds"<< std::endl;
+		} else {
+			std::cout << "Unkown time scale '" << argv[2] << "'" << std::endl;
+		}
+	} else {
+			std::cout << "Tests completed in " << std::chrono::duration_cast<std::chrono::microseconds>(end1 - begin1).count() << " microseconds"<< std::endl;
+	}
+
+	return 0;
+}
+
diff --git a/2020/misc/print.hpp b/2020/misc/print.hpp
new file mode 100644
index 0000000..5960cd8
--- /dev/null
+++ b/2020/misc/print.hpp
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#ifndef TEST_BUILD
+#define print(x) std::cout << (x) << std::endl
+#else
+#define print(x)
+#endif
diff --git a/2020/types.cpp b/2020/misc/types.cpp
similarity index 100%
rename from 2020/types.cpp
rename to 2020/misc/types.cpp
diff --git a/2020/types.hpp b/2020/misc/types.hpp
similarity index 100%
rename from 2020/types.hpp
rename to 2020/misc/types.hpp
diff --git a/2021/Makefile b/2021/Makefile
new file mode 100644
index 0000000..2978a55
--- /dev/null
+++ b/2021/Makefile
@@ -0,0 +1,17 @@
+day%.out: out/types.o misc/main.cpp days/day%.cpp
+	g++ -O3 -std=c++2a $(flags) -Dcurrent_day=$(@:.out=) days/$(@:out=cpp) misc/main.cpp out/types.o -o $@
+
+day%_test.out: out/types.o misc/main_test.cpp days/day%.cpp
+	g++ -O3 -std=c++2a $(flags) -DTEST_BUILD -Dcurrent_day=$(@:_test.out=) days/$(@:_test.out=.cpp) misc/main_test.cpp out/types.o -o $@
+
+days/day%.cpp:
+	cp 'misc/day.cpp.template' $@
+	sed -i -e "s/current_day/$(shell basename $@ | cut -f 1 -d '.')/g" $@
+
+out/types.o: misc/types.hpp misc/types.cpp
+	mkdir -p out/
+	g++ -std=c++2a $(flags) -c misc/types.cpp -o $@
+
+.PHONY: clean
+clean:
+	rm -f out/* day*.out day*.output
diff --git a/2021/days/day1.cpp b/2021/days/day1.cpp
new file mode 100644
index 0000000..4f8c65c
--- /dev/null
+++ b/2021/days/day1.cpp
@@ -0,0 +1,54 @@
+/*****************************
+ *
+ * Copyright (c) 2021 Gnarwhal
+ *
+ *****************************/
+
+#include <vector>
+#include <string>
+#include <iostream>
+#include <fstream>
+
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
+
+auto current_day() -> void {
+	{
+		auto line = std::string();
+		auto file = std::ifstream("inputs/day1.input");
+		getline(file, line);
+		auto value     = stoi(line);
+		auto increases = 0;
+		while (getline(file, line)) {
+			auto new_value = stoi(line);
+			increases += new_value > value;
+			value = new_value;
+		}
+
+		std::cout << increases << std::endl;
+	}
+
+	{
+		auto line = std::string();
+		auto file = std::ifstream("inputs/day1.input");
+		getline(file, line);
+		auto index     = 2;
+		auto values    = std::vector<i32>{ 0, 0 };
+		while (getline(file, line)) {
+			auto new_value = stoi(line);
+			values.push_back(0);
+			values[index - 2] += new_value;
+			values[index - 1] += new_value;
+			values[index    ] += new_value;
+			++index;
+		}
+
+		auto increases = 0;
+		for (auto i = 3; i < values.size(); ++i) {
+			increases += values[i - 1] < values[i];
+		}
+
+		std::cout << increases << std::endl;
+	}
+}
+
diff --git a/2021/inputs/day1.input b/2021/inputs/day1.input
new file mode 100644
index 0000000..bc99d0b
--- /dev/null
+++ b/2021/inputs/day1.input
@@ -0,0 +1,2000 @@
+199
+227
+229
+230
+233
+228
+231
+226
+237
+259
+262
+265
+266
+265
+269
+276
+278
+279
+281
+287
+305
+316
+314
+320
+313
+314
+315
+329
+346
+357
+370
+369
+360
+384
+383
+401
+402
+403
+404
+403
+406
+408
+406
+401
+393
+395
+416
+418
+408
+411
+412
+416
+417
+404
+421
+436
+437
+436
+420
+388
+405
+403
+371
+376
+378
+374
+378
+377
+403
+411
+444
+424
+417
+416
+419
+436
+415
+413
+429
+446
+462
+463
+464
+467
+466
+475
+483
+478
+487
+488
+469
+470
+472
+473
+460
+463
+465
+477
+487
+508
+506
+509
+512
+513
+519
+525
+531
+498
+506
+504
+506
+507
+509
+510
+512
+537
+553
+536
+533
+524
+525
+526
+527
+530
+531
+533
+537
+538
+537
+539
+544
+552
+550
+576
+560
+556
+561
+552
+560
+572
+573
+572
+571
+573
+578
+581
+582
+578
+541
+546
+537
+545
+556
+565
+566
+571
+561
+573
+579
+578
+581
+600
+603
+604
+597
+598
+599
+598
+599
+580
+585
+586
+596
+597
+602
+593
+598
+599
+604
+608
+609
+616
+615
+613
+622
+625
+620
+632
+636
+628
+633
+640
+621
+620
+638
+646
+647
+648
+647
+654
+655
+663
+652
+664
+668
+669
+668
+663
+667
+659
+658
+666
+670
+685
+703
+706
+705
+706
+727
+730
+729
+735
+743
+749
+750
+751
+756
+774
+776
+767
+778
+777
+790
+791
+794
+798
+801
+804
+812
+818
+819
+818
+821
+825
+818
+829
+832
+835
+849
+848
+863
+859
+863
+871
+870
+869
+873
+875
+878
+874
+896
+903
+890
+891
+905
+912
+913
+911
+917
+941
+943
+944
+940
+943
+945
+947
+948
+953
+930
+932
+933
+948
+936
+937
+941
+947
+952
+957
+951
+953
+954
+958
+979
+982
+971
+974
+979
+984
+988
+989
+986
+987
+992
+998
+1013
+1024
+1022
+1023
+1014
+1019
+1042
+1048
+1047
+1060
+1056
+1067
+1054
+1053
+1061
+1063
+1068
+1074
+1104
+1105
+1107
+1119
+1126
+1127
+1129
+1143
+1145
+1146
+1151
+1159
+1183
+1185
+1192
+1183
+1185
+1182
+1180
+1198
+1215
+1221
+1224
+1227
+1230
+1262
+1289
+1291
+1294
+1297
+1300
+1303
+1321
+1323
+1329
+1331
+1341
+1362
+1369
+1370
+1388
+1389
+1393
+1407
+1386
+1380
+1381
+1378
+1398
+1402
+1399
+1422
+1433
+1449
+1451
+1449
+1462
+1454
+1455
+1452
+1471
+1472
+1487
+1477
+1459
+1463
+1461
+1463
+1473
+1489
+1482
+1516
+1527
+1521
+1522
+1527
+1529
+1531
+1538
+1550
+1553
+1548
+1549
+1545
+1548
+1543
+1546
+1549
+1572
+1576
+1581
+1575
+1584
+1602
+1604
+1605
+1606
+1611
+1610
+1623
+1618
+1614
+1622
+1613
+1608
+1611
+1638
+1632
+1643
+1649
+1652
+1655
+1652
+1653
+1654
+1658
+1659
+1661
+1667
+1695
+1710
+1719
+1726
+1727
+1725
+1726
+1736
+1741
+1763
+1752
+1769
+1770
+1767
+1768
+1769
+1771
+1799
+1798
+1810
+1813
+1816
+1826
+1837
+1842
+1841
+1848
+1853
+1823
+1836
+1835
+1837
+1836
+1839
+1838
+1840
+1841
+1839
+1843
+1844
+1862
+1873
+1877
+1880
+1882
+1881
+1895
+1891
+1896
+1899
+1893
+1894
+1892
+1894
+1895
+1921
+1920
+1922
+1928
+1925
+1933
+1943
+1942
+1936
+1941
+1919
+1912
+1914
+1922
+1918
+1934
+1932
+1946
+1949
+1955
+1964
+1974
+1977
+1978
+1983
+1984
+1986
+1990
+2005
+2022
+2026
+2032
+2031
+2029
+2031
+2035
+2041
+2042
+2043
+2053
+2054
+2058
+2062
+2063
+2055
+2049
+2021
+2022
+2054
+2052
+2084
+2076
+2079
+2090
+2088
+2093
+2095
+2093
+2091
+2089
+2095
+2096
+2102
+2127
+2129
+2132
+2117
+2125
+2131
+2132
+2126
+2134
+2140
+2137
+2138
+2136
+2137
+2141
+2153
+2152
+2170
+2177
+2147
+2159
+2161
+2160
+2173
+2176
+2194
+2205
+2206
+2213
+2231
+2232
+2242
+2243
+2217
+2224
+2225
+2230
+2226
+2214
+2212
+2227
+2230
+2237
+2238
+2241
+2264
+2283
+2288
+2308
+2309
+2311
+2312
+2314
+2316
+2317
+2318
+2321
+2326
+2324
+2325
+2321
+2324
+2322
+2325
+2327
+2335
+2369
+2370
+2374
+2375
+2344
+2347
+2348
+2341
+2346
+2355
+2356
+2371
+2368
+2370
+2375
+2378
+2379
+2370
+2363
+2365
+2366
+2363
+2364
+2372
+2374
+2392
+2399
+2397
+2384
+2400
+2401
+2402
+2401
+2400
+2402
+2412
+2422
+2423
+2426
+2424
+2425
+2421
+2422
+2440
+2441
+2451
+2442
+2443
+2444
+2446
+2451
+2452
+2450
+2458
+2457
+2490
+2496
+2506
+2507
+2508
+2511
+2531
+2536
+2537
+2539
+2529
+2530
+2561
+2562
+2592
+2595
+2584
+2601
+2603
+2589
+2586
+2588
+2586
+2596
+2613
+2616
+2618
+2621
+2629
+2637
+2638
+2619
+2621
+2619
+2631
+2621
+2619
+2624
+2628
+2634
+2636
+2637
+2626
+2632
+2623
+2630
+2629
+2630
+2633
+2620
+2629
+2635
+2614
+2617
+2612
+2613
+2609
+2601
+2604
+2611
+2602
+2607
+2611
+2639
+2646
+2647
+2618
+2613
+2614
+2635
+2642
+2649
+2653
+2652
+2628
+2629
+2631
+2636
+2639
+2649
+2665
+2667
+2666
+2665
+2668
+2672
+2673
+2675
+2693
+2694
+2696
+2701
+2702
+2703
+2700
+2716
+2718
+2719
+2718
+2719
+2722
+2723
+2715
+2726
+2737
+2757
+2758
+2759
+2762
+2760
+2765
+2759
+2763
+2764
+2774
+2785
+2786
+2802
+2803
+2802
+2824
+2833
+2834
+2830
+2832
+2842
+2828
+2829
+2836
+2838
+2813
+2811
+2798
+2799
+2796
+2805
+2808
+2807
+2811
+2812
+2811
+2812
+2793
+2787
+2802
+2805
+2804
+2822
+2825
+2837
+2835
+2842
+2838
+2849
+2840
+2841
+2853
+2854
+2863
+2877
+2886
+2864
+2866
+2846
+2860
+2840
+2842
+2844
+2866
+2867
+2870
+2856
+2860
+2861
+2860
+2872
+2877
+2881
+2883
+2881
+2883
+2880
+2881
+2882
+2880
+2902
+2903
+2904
+2937
+2939
+2938
+2945
+2954
+2950
+2966
+2967
+2976
+2980
+2982
+2976
+2986
+2997
+2996
+2994
+3004
+3007
+3008
+3016
+3014
+3054
+3078
+3095
+3114
+3115
+3120
+3107
+3109
+3124
+3140
+3144
+3150
+3163
+3165
+3164
+3158
+3172
+3175
+3174
+3184
+3188
+3198
+3193
+3224
+3226
+3227
+3252
+3273
+3280
+3289
+3291
+3290
+3291
+3279
+3281
+3282
+3281
+3298
+3302
+3289
+3304
+3295
+3312
+3314
+3327
+3328
+3337
+3348
+3349
+3340
+3348
+3351
+3350
+3351
+3350
+3345
+3339
+3343
+3344
+3329
+3354
+3356
+3358
+3363
+3365
+3373
+3376
+3383
+3384
+3388
+3389
+3390
+3397
+3398
+3401
+3409
+3411
+3412
+3411
+3418
+3428
+3430
+3432
+3418
+3410
+3418
+3424
+3425
+3426
+3430
+3439
+3441
+3422
+3423
+3425
+3426
+3428
+3429
+3436
+3448
+3447
+3443
+3445
+3468
+3482
+3483
+3499
+3506
+3513
+3518
+3523
+3524
+3525
+3529
+3532
+3529
+3565
+3577
+3576
+3577
+3576
+3539
+3557
+3554
+3563
+3562
+3564
+3565
+3586
+3583
+3590
+3589
+3580
+3581
+3574
+3599
+3597
+3609
+3610
+3611
+3614
+3613
+3611
+3612
+3611
+3598
+3596
+3597
+3585
+3568
+3569
+3550
+3561
+3563
+3551
+3552
+3555
+3553
+3554
+3553
+3552
+3555
+3557
+3560
+3585
+3591
+3604
+3609
+3640
+3641
+3645
+3644
+3643
+3646
+3644
+3664
+3653
+3660
+3667
+3664
+3665
+3668
+3670
+3649
+3640
+3639
+3647
+3654
+3650
+3648
+3654
+3651
+3652
+3653
+3654
+3655
+3671
+3660
+3671
+3675
+3679
+3680
+3681
+3686
+3690
+3691
+3693
+3695
+3698
+3697
+3699
+3708
+3712
+3714
+3712
+3711
+3716
+3731
+3732
+3736
+3753
+3755
+3756
+3767
+3747
+3746
+3733
+3711
+3722
+3718
+3721
+3722
+3723
+3724
+3727
+3731
+3732
+3741
+3743
+3750
+3751
+3738
+3741
+3739
+3740
+3756
+3755
+3751
+3750
+3755
+3757
+3773
+3778
+3781
+3782
+3768
+3772
+3766
+3770
+3778
+3792
+3798
+3801
+3803
+3801
+3812
+3833
+3873
+3868
+3865
+3866
+3906
+3910
+3897
+3907
+3910
+3898
+3914
+3917
+3908
+3912
+3920
+3934
+3930
+3934
+3935
+3937
+3942
+3943
+3948
+3964
+3978
+3985
+3986
+3993
+3995
+4014
+4021
+4024
+4025
+4024
+4027
+4028
+4043
+4047
+4049
+4036
+4039
+4038
+4037
+4045
+4040
+4041
+4043
+4035
+4046
+4063
+4054
+4055
+4064
+4067
+4060
+4061
+4062
+4069
+4070
+4063
+4064
+4077
+4065
+4074
+4076
+4078
+4091
+4100
+4104
+4105
+4106
+4107
+4115
+4110
+4112
+4113
+4114
+4115
+4092
+4093
+4107
+4109
+4108
+4112
+4143
+4144
+4145
+4146
+4145
+4144
+4126
+4130
+4134
+4149
+4151
+4161
+4162
+4160
+4146
+4170
+4188
+4196
+4194
+4193
+4196
+4197
+4198
+4200
+4205
+4218
+4228
+4216
+4224
+4226
+4241
+4245
+4247
+4251
+4245
+4244
+4266
+4259
+4262
+4269
+4270
+4275
+4281
+4298
+4305
+4309
+4311
+4325
+4328
+4346
+4347
+4357
+4360
+4359
+4357
+4391
+4396
+4391
+4397
+4395
+4405
+4410
+4412
+4433
+4420
+4421
+4422
+4423
+4431
+4437
+4447
+4451
+4458
+4457
+4458
+4456
+4455
+4458
+4460
+4431
+4432
+4431
+4441
+4444
+4436
+4408
+4406
+4414
+4415
+4413
+4422
+4449
+4430
+4428
+4397
+4395
+4396
+4398
+4396
+4399
+4406
+4413
+4422
+4421
+4429
+4431
+4430
+4462
+4460
+4480
+4482
+4486
+4484
+4483
+4497
+4493
+4496
+4506
+4504
+4497
+4498
+4503
+4513
+4525
+4533
+4547
+4560
+4561
+4563
+4562
+4572
+4571
+4575
+4557
+4561
+4562
+4550
+4552
+4543
+4537
+4534
+4542
+4561
+4563
+4562
+4583
+4582
+4591
+4592
+4597
+4601
+4599
+4600
+4610
+4601
+4612
+4630
+4616
+4619
+4623
+4624
+4636
+4638
+4645
+4651
+4655
+4660
+4659
+4658
+4657
+4658
+4661
+4670
+4665
+4656
+4664
+4666
+4667
+4669
+4696
+4701
+4712
+4711
+4719
+4679
+4680
+4686
+4684
+4685
+4689
+4682
+4686
+4688
+4687
+4688
+4687
+4693
+4672
+4670
+4667
+4673
+4643
+4644
+4653
+4668
+4669
+4672
+4685
+4663
+4665
+4672
+4696
+4698
+4701
+4699
+4687
+4690
+4687
+4684
+4685
+4687
+4689
+4685
+4692
+4690
+4696
+4702
+4703
+4704
+4717
+4718
+4719
+4711
+4717
+4719
+4726
+4722
+4736
+4735
+4739
+4748
+4741
+4738
+4736
+4737
+4736
+4740
+4748
+4749
+4757
+4760
+4768
+4754
+4756
+4772
+4773
+4775
+4770
+4766
+4769
+4762
+4771
+4773
+4775
+4776
+4778
+4782
+4770
+4763
+4765
+4764
+4765
+4764
+4777
+4780
+4786
+4797
+4803
+4812
+4811
+4818
+4823
+4820
+4821
+4831
+4834
+4862
+4865
+4856
+4857
+4863
+4860
+4861
+4858
+4846
+4848
+4852
+4853
+4854
+4856
+4832
+4833
+4832
+4830
+4826
+4833
+4851
+4852
+4855
+4856
+4857
+4852
+4854
+4860
+4863
+4887
+4878
+4879
+4880
+4893
+4888
+4891
+4892
+4896
+4897
+4900
+4905
+4903
+4909
+4927
+4942
+4946
+4952
+4970
+4971
+4987
+4990
+4991
+4990
+4989
+4988
+4989
+4995
+4996
+5004
+5003
+5005
+5009
+4997
+4981
+4977
+4979
+4982
+4984
+4994
+5005
+5009
+5008
+5036
+5034
+5033
+5030
+5032
+5034
+5030
+5031
+5034
+5070
+5072
+5071
+5073
+5077
+5078
+5070
+5084
+5085
+5091
+5071
+5080
+5075
+5070
+5067
+5072
+5075
+5082
+5085
+5091
+5104
+5120
+5123
+5122
+5105
+5120
+5128
+5116
+5118
+5122
+5120
+5140
+5142
+5145
+5148
+5152
+5153
+5154
+5157
+5172
+5179
+5177
+5185
+5191
+5200
+5201
+5207
+5205
+5206
+5198
+5205
+5186
+5188
+5197
+5194
+5203
+5204
+5205
+5208
+5214
+5220
+5219
+5224
+5227
+5241
+5233
+5253
+5283
+5287
+5291
+5289
+5296
+5297
+5294
+5288
+5289
+5290
+5278
+5290
+5288
+5294
+5295
+5294
+5292
+5289
+5299
+5283
+5285
+5290
+5289
+5291
+5302
+5304
+5305
+5315
+5316
+5323
+5337
+5341
+5345
+5346
+5358
+5361
+5367
+5348
+5354
+5344
+5339
+5342
+5341
+5354
+5356
+5355
+5354
+5355
+5356
+5342
+5348
+5350
+5351
+5355
+5378
+5380
+5404
+5405
+5407
+5417
+5419
+5411
+5412
+5413
+5416
+5420
+5391
+5377
+5386
+5387
+5390
+5383
+5385
+5384
+5390
+5389
+5390
+5409
+5414
+5424
+5427
+5428
+5430
+5443
+5435
+5430
+5427
+5428
+5422
+5452
+5460
+5464
+5465
+5472
+5473
+5481
+5480
+5481
+5482
+5483
+5493
+5495
+5492
+5501
+5517
+5519
+5527
+5532
+5529
+5532
+5542
+5532
+5550
+5551
+5560
+5543
+5549
+5555
+5554
+5555
+5552
+5562
+5563
+5564
+5566
+5568
+5571
+5549
+5556
+5557
+5563
+5564
+5567
+5563
+5570
+5559
+5580
+5585
+5568
+5569
+5562
+5578
+5579
+5565
+5567
+5583
+5584
+5592
+5590
+5593
+5595
+5594
+5597
+5582
+5588
+5594
+5596
+5598
+5597
+5595
+5605
+5593
+5590
+5599
+5603
+5597
+5632
+5621
+5624
+5628
+5634
+5662
+5663
+5666
+5674
+5678
+5677
+5678
+5679
+5680
+5681
+5687
+5690
+5685
+5684
+5683
+5689
+5690
+5691
+5689
+5694
+5698
+5701
+5698
+5733
+5757
+5767
+5794
+5812
+5804
+5802
+5810
+5826
+5856
+5855
+5860
+5861
+5846
+5865
+5885
+5874
+5883
+5888
+5892
+5894
+5877
+5840
+5841
+5814
+5815
+5818
+5821
+5822
+5819
+5818
+5842
+5849
+5850
+5851
+5854
+5856
+5854
+5851
+5864
+5866
+5867
+5871
+5874
+5879
+5888
+5886
+5890
+5894
+5889
+5875
+5863
+5847
+5857
+5853
+5858
+5859
+5862
+5867
+5862
+5866
+5874
+5875
+5894
+5897
+5877
+5886
+5887
+5891
+5881
+5886
+5885
+5886
+5887
+5888
+5892
+5891
+5903
+5902
+5901
+5902
+5903
+5908
+5905
+5912
+5914
+5920
+5927
+5916
+5917
+5918
+5921
+5931
+5939
+5942
+5943
+5949
+5962
+5990
+5985
+5982
+5980
+5979
+5990
+5995
+6012
+6029
+6038
+6050
+6051
+6057
+6052
+6061
+6060
+6050
+6058
+6059
+6060
+6064
+6065
+6092
+6091
+6090
+6089
+6085
+6101
+6107
+6110
+6109
+6120
+6117
+6110
diff --git a/2021/misc/day.cpp.template b/2021/misc/day.cpp.template
new file mode 100644
index 0000000..c2f20b4
--- /dev/null
+++ b/2021/misc/day.cpp.template
@@ -0,0 +1,23 @@
+/*****************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ *****************************/
+
+#include <vector>
+#include <string>
+#include <iostream>
+#include <fstream>
+
+#include "../misc/types.hpp"
+#include "../misc/print.hpp"
+
+auto current_day() -> void {
+	{
+		auto line = std::string();
+		auto file = std::ifstream("inputs/current_day.input");
+		while (getline(file, line)) {
+			
+		}
+	}
+}
diff --git a/2021/misc/main.cpp b/2021/misc/main.cpp
new file mode 100644
index 0000000..c4752db
--- /dev/null
+++ b/2021/misc/main.cpp
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include "types.hpp"
+
+extern auto current_day() -> void;
+
+auto main(i32 argc, char * argv[]) -> i32 {
+	current_day();
+
+	return 0;
+}
+
diff --git a/2021/misc/main_test.cpp b/2021/misc/main_test.cpp
new file mode 100644
index 0000000..0d8954d
--- /dev/null
+++ b/2021/misc/main_test.cpp
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include <iostream>
+#include <string>
+#include <chrono>
+
+#include "types.hpp"
+
+extern auto current_day() -> void;
+
+auto main(i32 argc, char * argv[]) -> i32 {
+	auto TEST_CYCLES = 1;
+	if (argc >= 2) {
+		TEST_CYCLES = std::stoi(argv[1]);
+	}
+
+	std::cout << "Starting test with " << TEST_CYCLES << " iterations..." << std::endl;
+	auto begin1 = std::chrono::high_resolution_clock::now();
+
+	for (auto i = usize(0); i < TEST_CYCLES; ++i) {
+		current_day();
+	}
+
+	auto end1 = std::chrono::high_resolution_clock::now();
+
+	if (argc >= 3) {
+		if (argv[2] == std::string("millis")) {
+			std::cout << "Tests completed in " << std::chrono::duration_cast<std::chrono::milliseconds>(end1 - begin1).count() << " milliseconds"<< std::endl;
+		} else if (argv[2] == std::string("nanos")) {
+			std::cout << "Tests completed in " << std::chrono::duration_cast<std::chrono::nanoseconds>(end1 - begin1).count() << " nanoseconds"<< std::endl;
+		} else if (argv[2] == std::string("micros")) {
+			std::cout << "Tests completed in " << std::chrono::duration_cast<std::chrono::microseconds>(end1 - begin1).count() << " microsenconds"<< std::endl;
+		} else {
+			std::cout << "Unkown time scale '" << argv[2] << "'" << std::endl;
+		}
+	} else {
+			std::cout << "Tests completed in " << std::chrono::duration_cast<std::chrono::microseconds>(end1 - begin1).count() << " microseconds"<< std::endl;
+	}
+
+	return 0;
+}
+
diff --git a/2021/misc/print.hpp b/2021/misc/print.hpp
new file mode 100644
index 0000000..5960cd8
--- /dev/null
+++ b/2021/misc/print.hpp
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#ifndef TEST_BUILD
+#define print(x) std::cout << (x) << std::endl
+#else
+#define print(x)
+#endif
diff --git a/2021/misc/types.cpp b/2021/misc/types.cpp
new file mode 100644
index 0000000..cc4d3da
--- /dev/null
+++ b/2021/misc/types.cpp
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#include "types.hpp"
+
+constexpr auto operator "" _u8   (unsigned long long int num) noexcept -> u8    { return    u8(num); }
+constexpr auto operator "" _i8   (unsigned long long int num) noexcept -> i8    { return    u8(num); }
+constexpr auto operator "" _u16  (unsigned long long int num) noexcept -> u16   { return   u16(num); }
+constexpr auto operator "" _i16  (unsigned long long int num) noexcept -> i16   { return   i16(num); }
+constexpr auto operator "" _u32  (unsigned long long int num) noexcept -> u32   { return   u32(num); }
+constexpr auto operator "" _i32  (unsigned long long int num) noexcept -> i32   { return   i32(num); }
+constexpr auto operator "" _u64  (unsigned long long int num) noexcept -> u64   { return   u64(num); }
+constexpr auto operator "" _i64  (unsigned long long int num) noexcept -> i64   { return   i64(num); }
+constexpr auto operator "" _usize(unsigned long long int num) noexcept -> usize { return usize(num); }
+
+constexpr auto operator "" _c8 (char c) noexcept -> c8  { return  c8(c); }
+constexpr auto operator "" _c16(char c) noexcept -> c16 { return c16(c); }
+constexpr auto operator "" _c32(char c) noexcept -> c32 { return c32(c); }
+constexpr auto operator "" _c8 (unsigned long long int c) noexcept -> c8  { return  c8(c); }
+constexpr auto operator "" _c16(unsigned long long int c) noexcept -> c16 { return c16(c); }
+constexpr auto operator "" _c32(unsigned long long int c) noexcept -> c32 { return c32(c); }
+
+constexpr auto operator "" _f32(long double num) noexcept -> f32 { return (f32) num; }
+constexpr auto operator "" _f64(long double num) noexcept -> f64 { return (f64) num; }
diff --git a/2021/misc/types.hpp b/2021/misc/types.hpp
new file mode 100644
index 0000000..bc94dab
--- /dev/null
+++ b/2021/misc/types.hpp
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2020 Gnarwhal
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files(the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+
+#ifndef GNARWHAL_REDWOOD_TYPES
+#define GNARWHAL_REDWOOD_TYPES
+
+#include <cstddef>
+#include <cstdint>
+
+using u8    = std::uint8_t;
+using i8    = std::int8_t;
+using u16   = std::uint16_t;
+using i16   = std::int16_t;
+using u32   = std::uint32_t;
+using i32   = std::int32_t;
+using u64   = std::uint64_t;
+using i64   = std::int64_t;
+using usize = std::size_t;
+
+constexpr auto operator "" _u8   (unsigned long long int num) noexcept -> u8;
+constexpr auto operator "" _i8   (unsigned long long int num) noexcept -> i8;
+constexpr auto operator "" _u16  (unsigned long long int num) noexcept -> u16;
+constexpr auto operator "" _i16  (unsigned long long int num) noexcept -> i16;
+constexpr auto operator "" _u32  (unsigned long long int num) noexcept -> u32;
+constexpr auto operator "" _i32  (unsigned long long int num) noexcept -> i32;
+constexpr auto operator "" _u64  (unsigned long long int num) noexcept -> u64;
+constexpr auto operator "" _i64  (unsigned long long int num) noexcept -> i64;
+constexpr auto operator "" _usize(unsigned long long int num) noexcept -> usize;
+
+using c8  = u8;
+using c16 = u16;
+using c32 = u32;
+
+constexpr auto operator "" _c8 (char c) noexcept -> c8;
+constexpr auto operator "" _c16(char c) noexcept -> c16;
+constexpr auto operator "" _c32(char c) noexcept -> c32;
+constexpr auto operator "" _c8 (unsigned long long int c) noexcept -> c8;
+constexpr auto operator "" _c16(unsigned long long int c) noexcept -> c16;
+constexpr auto operator "" _c32(unsigned long long int c) noexcept -> c32;
+
+using f32 = float;
+using f64 = double;
+
+constexpr auto operator "" _f32(long double num) noexcept -> f32;
+constexpr auto operator "" _f64(long double num) noexcept -> f64;
+
+#endif // GNARWHAL_REDWOOD_TYPES