summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxander <xander@biltopia.org>2025-12-07 13:12:06 +0100
committerxander <xander@biltopia.org>2025-12-07 13:12:06 +0100
commit516e6ed4a9066fa43d6159b2a0ec58416ab28013 (patch)
tree9925207e97b9e6e1fd83a55bdb878c43071cf73a
downloadaoc2025-516e6ed4a9066fa43d6159b2a0ec58416ab28013.tar.xz
aoc2025-516e6ed4a9066fa43d6159b2a0ec58416ab28013.zip
solve up to day 7
-rw-r--r--.gitignore2
-rw-r--r--build.zig19
-rw-r--r--build.zig.zon17
-rw-r--r--input/1/1.txt4768
-rw-r--r--input/1/example.txt10
-rw-r--r--input/2/1.txt1
-rw-r--r--input/2/example.txt1
-rw-r--r--input/3/1.txt200
-rw-r--r--input/3/example.txt4
-rw-r--r--input/4/1.txt136
-rw-r--r--input/4/example.txt10
-rw-r--r--input/5/1.txt1187
-rw-r--r--input/5/example.txt11
-rw-r--r--input/6/1.txt5
-rw-r--r--input/6/example.txt4
-rw-r--r--input/7/1.txt142
-rw-r--r--input/7/example.txt16
-rwxr-xr-xprepare11
-rwxr-xr-xrun3
-rw-r--r--src/day01.zig72
-rw-r--r--src/day02.zig78
-rw-r--r--src/day03.zig83
-rw-r--r--src/day04.zig99
-rw-r--r--src/day05.zig107
-rw-r--r--src/day06.zig100
-rw-r--r--src/day07.zig88
-rw-r--r--src/main.zig46
27 files changed, 7220 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..880cd5d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+zig-out
+.zig-cache
diff --git a/build.zig b/build.zig
new file mode 100644
index 0000000..ac34dae
--- /dev/null
+++ b/build.zig
@@ -0,0 +1,19 @@
+const std = @import("std");
+
+pub fn build(b: *std.Build) void {
+ const target = b.standardTargetOptions(.{});
+ const optimize = b.standardOptimizeOption(.{});
+
+ const mod = b.addModule("aoc2025", .{
+ .root_source_file = b.path("src/main.zig"),
+ .target = target,
+ .optimize = optimize
+ });
+
+ const exe = b.addExecutable(.{
+ .name = "aoc2025",
+ .root_module = mod
+ });
+
+ b.installArtifact(exe);
+}
diff --git a/build.zig.zon b/build.zig.zon
new file mode 100644
index 0000000..a373852
--- /dev/null
+++ b/build.zig.zon
@@ -0,0 +1,17 @@
+.{
+ .name = .aoc2025,
+ .version = "0.0.0",
+ .fingerprint = 0x52176dd5bb600e94, // Changing this has security and trust implications.
+ .minimum_zig_version = "0.15.2",
+ .dependencies = .{
+ .mecha = .{
+ .url = "https://github.com/Hejsil/mecha/archive/refs/tags/0.11.0.tar.gz",
+ .hash = "mecha-0.11.0-dVGaSDNfAQA6B-SiB1TGG0HoOBdw1BFGMdQJV44pEgB4",
+ },
+ },
+ .paths = .{
+ "build.zig",
+ "build.zig.zon",
+ "src",
+ },
+}
diff --git a/input/1/1.txt b/input/1/1.txt
new file mode 100644
index 0000000..776d310
--- /dev/null
+++ b/input/1/1.txt
@@ -0,0 +1,4768 @@
+R6
+R18
+L39
+L36
+L11
+L24
+R3
+L47
+L11
+R5
+L49
+L12
+L7
+R39
+L9
+R50
+R4
+L30
+L19
+L44
+R43
+R16
+L40
+L19
+L3
+R27
+R10
+R5
+R7
+R41
+R16
+L12
+R27
+R22
+R4
+R28
+R46
+L42
+R29
+R17
+L31
+L12
+R34
+R43
+R32
+L16
+R44
+L37
+R31
+L21
+R74
+L56
+L47
+L97
+L43
+L45
+L12
+R48
+R10
+L58
+L70
+L30
+R45
+L45
+L10
+L18
+L72
+R14
+R97
+L55
+L56
+L99
+L5
+L73
+L36
+R13
+L75
+L25
+L13
+L87
+R59
+R41
+R19
+R4
+R58
+L81
+L97
+L3
+L79
+R26
+L39
+R92
+L13
+L30
+R80
+L17
+R4
+L24
+L66
+R37
+L33
+L38
+R90
+R78
+R32
+R154
+L54
+L11
+L89
+R91
+L829
+L44
+L18
+L759
+R42
+L83
+R93
+R349
+R58
+R859
+L94
+L65
+R1
+L1
+R760
+L68
+L33
+L59
+L97
+L403
+L32
+L868
+L59
+R10
+L13
+L30
+L31
+L90
+R327
+R58
+L88
+L84
+R13
+L32
+L81
+L78
+L22
+L91
+R235
+L87
+R67
+L24
+L4
+R4
+L45
+R88
+L69
+L391
+R87
+L604
+L562
+L204
+L87
+L48
+L79
+L10
+L76
+R89
+R93
+L47
+L35
+R34
+L109
+L461
+L53
+R404
+L15
+R953
+R47
+R47
+L33
+R28
+R22
+R39
+R69
+L872
+R28
+R72
+R950
+R250
+L893
+R51
+L358
+R631
+R327
+R21
+R63
+R34
+L76
+R96
+L63
+R67
+L92
+R46
+R46
+R88
+R95
+L96
+R56
+R57
+R187
+R52
+L795
+L44
+R68
+L12
+R96
+R81
+L33
+R83
+L19
+R39
+L41
+L36
+L924
+R89
+L6
+R26
+L11
+L377
+R77
+R59
+L67
+L88
+L83
+L38
+L843
+L140
+L297
+L34
+L90
+R60
+L2
+L52
+R15
+R54
+L45
+L81
+R45
+L73
+L9
+R2
+L127
+L386
+L61
+R81
+R82
+R18
+L24
+R24
+L44
+R644
+R39
+L65
+L74
+R80
+L80
+L62
+L38
+R598
+R52
+R561
+R31
+R1
+R502
+L63
+L9
+L52
+R79
+L5
+L92
+R598
+L1
+R63
+R12
+L38
+R80
+L73
+R91
+R56
+L24
+L90
+L90
+L56
+R31
+L66
+R4
+L33
+R70
+L96
+R59
+L205
+R5
+L89
+L77
+L44
+L985
+L44
+L450
+L11
+R36
+L48
+R58
+R54
+L18
+L810
+R70
+R22
+R168
+L32
+R70
+L70
+R33
+L13
+L56
+R631
+L27
+L94
+L74
+R54
+R63
+L17
+L10
+L790
+R13
+R53
+L442
+L24
+R55
+R45
+R78
+L69
+L9
+L175
+R30
+L86
+R631
+L17
+R87
+R79
+R51
+L19
+R19
+L9
+R9
+R9
+R33
+L41
+R499
+L57
+L33
+L37
+R73
+R48
+L27
+R62
+R371
+L79
+L59
+R44
+R298
+R85
+R824
+R66
+L79
+R70
+R29
+L96
+L68
+R89
+L54
+L470
+R78
+R39
+R4
+L555
+R634
+L68
+R42
+L74
+R87
+L39
+R52
+L55
+R80
+R75
+R1
+L1
+R62
+L49
+L17
+L96
+L21
+R130
+R91
+R92
+R76
+R32
+R69
+R731
+R4
+R89
+L82
+R73
+R16
+L44
+L56
+L280
+L96
+L412
+R988
+L28
+R928
+L435
+R55
+R844
+L90
+L50
+L224
+R47
+R53
+L23
+R617
+R43
+R72
+L77
+L32
+R412
+R288
+L46
+L53
+R99
+R76
+R59
+L35
+L239
+L55
+R494
+L16
+L624
+L14
+R54
+L45
+L42
+R87
+L62
+L404
+L26
+R86
+L80
+R479
+L15
+L778
+R52
+L552
+L44
+L56
+L1
+L81
+L18
+R98
+R54
+R9
+L61
+L72
+L728
+R82
+L99
+R96
+L974
+R95
+L18
+R18
+R78
+L3
+L76
+R1
+L24
+L76
+L223
+R54
+L94
+L85
+L98
+R62
+L16
+R30
+L55
+R25
+L17
+L99
+L784
+L778
+R88
+R83
+R7
+R59
+R15
+R29
+R58
+R39
+R221
+R79
+R82
+R18
+R58
+R42
+R5
+R95
+R33
+L33
+L81
+L99
+R54
+L74
+R976
+R12
+R160
+L216
+L615
+L17
+L798
+L288
+R49
+L63
+L65
+L602
+R67
+L59
+L24
+L17
+R30
+L56
+R31
+L5
+R111
+L158
+L53
+L664
+R64
+L53
+R79
+R743
+L671
+L98
+L70
+R70
+R19
+L89
+R670
+L83
+L57
+L44
+L45
+L71
+L63
+L37
+R96
+L82
+R40
+L86
+L405
+R76
+L39
+R56
+L277
+R2
+L550
+L31
+L544
+L563
+R51
+R769
+R91
+L72
+L635
+L896
+R12
+L97
+R956
+L385
+L87
+L94
+R94
+R55
+L90
+L65
+R79
+L79
+R83
+R517
+L227
+L81
+L109
+L8
+R30
+L5
+L93
+L1
+R94
+R59
+L26
+L72
+L61
+R77
+R67
+L29
+R85
+R95
+L98
+L97
+R20
+L32
+R591
+L275
+L38
+L18
+L2
+R32
+R82
+R40
+L69
+L9
+L16
+L6
+L46
+L12
+L42
+R59
+R59
+L18
+R890
+L89
+L27
+L55
+L979
+L40
+R230
+L30
+L3
+L79
+R82
+L29
+L719
+L52
+L41
+L59
+L80
+R81
+R549
+R64
+L61
+L794
+L959
+R80
+L154
+R25
+L79
+R84
+R94
+L50
+R17
+L48
+L11
+R189
+L1
+L5
+R28
+R31
+R96
+R804
+R909
+L431
+R22
+L68
+L32
+R907
+L7
+L713
+L67
+L69
+L535
+R73
+L3
+L24
+L77
+L96
+R14
+R1
+R96
+R87
+R13
+L16
+R42
+L26
+R38
+R62
+L298
+R98
+R19
+L446
+R80
+R62
+R82
+R12
+L14
+R31
+L99
+R73
+R424
+R76
+R76
+R276
+L54
+L698
+R20
+R15
+L11
+L138
+R28
+R586
+R39
+L39
+L31
+L69
+R65
+R56
+R79
+R86
+R71
+R32
+R11
+R31
+R69
+R97
+R284
+R19
+L44
+L756
+L49
+R49
+R208
+L97
+R389
+L725
+R748
+R47
+R20
+L90
+L8
+R33
+L25
+R9
+L58
+L51
+L68
+L28
+L41
+R37
+L51
+L49
+R14
+L14
+L569
+L86
+R55
+L73
+L33
+L36
+R53
+R89
+L11
+R8
+L94
+L3
+L8
+L52
+R27
+L67
+R689
+L89
+L290
+R30
+R60
+R85
+L85
+R86
+R14
+R45
+L49
+R4
+R29
+R9
+R441
+L685
+L746
+L18
+L37
+L47
+R54
+L58
+L242
+R27
+R67
+L22
+R1
+R27
+R21
+L43
+L78
+R40
+L14
+R74
+L3
+L53
+R75
+L19
+R82
+L82
+R38
+R93
+R94
+L14
+R88
+L99
+R65
+R35
+L88
+R12
+L4
+L20
+R25
+R13
+R62
+L39
+L62
+L13
+L606
+L227
+R47
+R47
+R53
+L31
+R58
+R73
+R91
+L16
+L73
+R47
+R51
+R21
+L721
+R90
+R27
+R24
+R19
+R24
+L16
+R32
+L208
+R13
+L222
+L332
+L51
+L35
+L29
+R949
+L684
+R99
+R38
+L38
+R662
+L45
+L49
+R732
+R29
+L83
+R51
+R59
+L821
+L735
+L49
+L49
+R75
+L336
+R966
+L350
+R43
+L95
+R77
+R69
+L515
+L98
+R56
+R106
+L101
+L60
+L42
+L3
+L94
+R437
+R63
+L84
+R84
+L54
+L46
+R93
+R7
+L581
+R181
+R854
+L686
+L88
+R33
+R87
+R83
+R48
+L231
+L63
+R63
+R7
+R93
+R885
+R15
+R47
+L70
+L54
+R1
+L93
+L31
+L90
+L110
+L7
+R27
+R73
+R365
+L58
+L65
+L525
+L10
+R30
+R9
+L429
+R90
+L39
+L28
+L33
+L3
+L597
+L69
+L108
+L54
+L63
+R98
+L5
+R215
+L282
+L32
+R946
+R45
+R48
+L39
+L154
+R484
+L29
+R442
+L11
+R80
+L12
+L68
+R168
+R20
+R98
+R78
+L96
+L27
+R23
+R80
+L376
+R598
+R88
+R26
+L89
+R294
+R85
+L102
+L82
+L18
+R44
+R41
+R56
+L91
+R50
+L60
+R60
+R471
+R529
+R60
+L60
+R66
+L62
+L346
+L94
+L64
+L57
+L2
+R97
+L73
+R235
+R96
+L15
+R619
+R14
+R80
+L67
+R73
+L45
+L55
+L37
+R37
+R4
+R96
+R790
+L13
+R23
+L43
+L57
+R77
+L77
+R87
+L787
+L2
+L598
+R59
+L24
+R65
+L644
+L47
+L51
+R586
+R34
+L21
+L45
+L24
+R33
+L5
+R84
+L731
+L69
+R52
+R48
+R30
+L48
+L582
+R16
+L310
+R94
+R10
+L19
+L91
+R4
+L14
+R510
+R11
+R71
+L482
+R47
+L47
+L10
+L56
+L24
+L74
+R64
+R80
+R87
+R16
+R229
+R94
+R29
+R25
+L5
+L55
+L1
+L536
+L63
+L6
+L933
+L66
+R18
+R56
+R31
+L28
+R28
+R70
+R30
+L83
+R183
+L378
+R878
+R93
+R50
+L8
+R60
+R705
+L25
+L33
+L42
+L99
+R62
+R37
+R911
+R50
+R94
+L55
+L106
+R52
+R40
+L86
+R87
+R437
+L49
+L35
+L13
+L88
+R45
+R46
+L62
+L68
+L55
+L67
+L94
+R19
+L3
+L25
+R45
+R80
+L67
+L806
+R76
+L86
+L27
+R55
+L76
+R31
+L45
+L10
+L45
+R312
+R88
+R93
+L2
+L91
+R827
+L27
+L291
+R33
+R78
+L42
+L78
+L786
+L680
+R53
+R15
+L50
+L37
+R75
+L60
+L81
+R51
+L74
+L26
+R34
+R66
+L82
+L18
+R67
+L925
+L49
+R150
+L1
+L18
+L59
+L65
+L48
+L78
+L60
+L82
+R68
+L78
+L5
+R83
+R7
+L7
+L96
+R96
+R64
+L664
+L42
+R42
+R83
+L49
+R92
+R94
+L20
+R38
+L74
+L447
+R99
+R784
+L11
+R854
+L43
+L3
+L64
+R7
+R38
+R74
+R51
+L3
+L41
+L14
+R55
+R64
+L464
+L977
+L313
+L6
+R92
+R4
+L34
+R34
+R542
+R61
+L90
+L60
+L53
+L93
+R94
+R137
+R78
+R42
+L19
+R94
+L833
+R967
+R333
+R80
+L80
+L87
+R21
+R756
+R17
+R72
+R1
+L219
+R75
+R35
+L60
+R94
+L10
+R105
+L50
+L421
+L29
+R47
+L11
+L36
+L74
+L338
+L93
+L26
+L69
+L723
+L77
+L83
+L17
+L82
+R41
+R61
+R7
+L80
+R8
+R58
+R87
+R34
+L36
+R2
+L18
+R24
+L63
+L48
+L35
+R44
+R96
+L84
+L73
+L43
+L88
+L12
+L48
+L889
+L63
+L65
+L80
+L23
+L32
+R397
+R616
+L36
+R76
+L35
+L18
+L16
+R409
+R196
+R11
+L926
+R62
+L867
+L47
+L94
+L56
+L94
+R22
+R827
+R73
+L87
+R71
+L87
+R44
+L37
+L3
+R403
+R27
+R69
+R45
+L45
+R41
+R1
+L443
+R701
+R15
+R8
+R77
+L73
+L27
+L70
+L9
+L436
+L61
+L8
+L68
+R63
+L71
+R8
+L48
+L306
+R87
+L68
+L68
+R83
+L97
+R45
+L64
+R88
+R259
+R894
+L53
+R695
+L95
+L43
+L57
+R16
+R36
+R49
+R736
+R50
+L70
+L479
+R11
+R16
+L134
+L49
+R21
+L387
+L16
+R63
+R37
+L73
+L81
+R554
+L17
+R36
+R451
+R30
+R31
+R51
+L42
+L140
+L82
+L18
+L11
+L5
+L84
+R929
+R71
+L715
+L33
+R848
+L91
+L82
+L27
+R227
+L12
+R82
+R77
+R26
+L45
+R45
+R757
+R43
+R97
+R3
+R901
+L1
+R11
+L10
+L831
+L26
+R56
+R55
+R36
+L85
+L77
+R38
+L45
+L22
+L271
+L933
+R63
+L97
+R55
+L65
+L80
+L265
+R13
+L15
+L78
+L27
+L77
+R90
+L68
+R85
+R70
+L64
+R64
+L44
+L26
+L90
+R60
+L70
+R70
+L15
+R21
+L39
+L46
+L24
+L43
+L66
+L5
+R17
+R43
+R657
+L92
+R40
+R63
+R88
+L99
+R78
+L88
+L13
+R81
+R90
+L738
+R13
+R52
+R215
+R59
+R13
+L695
+R63
+R70
+L61
+L20
+R68
+L287
+L80
+R24
+R556
+L226
+R426
+R67
+L291
+R24
+L594
+L6
+L41
+L38
+L21
+R386
+L10
+R1
+R35
+L39
+R23
+R72
+R32
+R57
+L598
+L8
+L51
+L753
+R53
+L3
+R58
+L529
+R95
+L93
+L95
+R93
+L826
+R52
+R54
+R94
+R23
+R82
+R95
+R489
+R29
+L18
+R28
+R72
+R435
+R743
+L78
+R59
+L669
+L42
+R58
+R87
+L93
+R94
+R72
+R34
+R35
+R65
+R77
+R83
+R940
+L35
+R35
+R78
+L978
+R49
+R29
+L80
+L43
+R45
+L18
+R3
+R15
+R331
+L180
+R16
+R210
+R27
+R196
+L891
+L9
+L52
+L85
+L34
+R91
+R821
+R59
+R84
+L8
+R62
+R8
+L46
+L7
+R77
+L70
+L136
+L860
+R1
+R709
+R40
+L96
+L58
+R613
+L10
+L68
+L51
+R159
+L43
+L176
+R42
+L843
+R77
+R988
+L788
+L82
+R82
+L191
+R91
+L898
+R98
+L31
+L69
+R97
+R3
+R24
+L61
+L16
+L84
+R37
+R63
+L79
+R16
+L613
+L10
+R23
+R96
+L91
+L31
+L92
+L23
+L459
+R39
+L522
+L577
+R87
+R73
+R57
+R90
+R92
+L14
+L25
+R38
+R86
+L24
+R77
+L178
+L99
+L98
+L94
+R43
+L69
+L82
+L80
+L42
+R6
+L28
+L56
+L16
+L761
+L23
+L98
+R98
+R38
+R94
+L532
+R28
+R90
+L18
+L62
+R548
+L8
+L87
+L83
+L34
+R87
+L97
+L86
+R443
+R79
+L501
+R1
+R13
+R52
+R33
+L98
+R46
+L466
+R96
+L76
+L582
+R82
+R47
+R53
+R8
+R18
+L57
+R31
+R865
+L65
+L70
+L94
+R59
+L43
+R48
+L19
+L54
+L13
+L6
+R72
+L855
+R75
+R784
+L29
+L66
+R478
+L613
+L51
+L18
+R4
+R68
+R85
+R13
+L44
+L711
+R531
+R51
+R36
+R87
+R19
+L24
+R97
+R76
+R30
+R28
+R69
+R1
+R99
+R34
+L68
+L51
+R629
+L95
+R811
+R140
+L94
+R77
+L47
+R95
+R169
+L90
+L10
+L77
+L45
+R87
+L65
+R77
+L99
+R78
+L73
+L83
+L93
+L7
+L89
+L92
+L1
+R58
+L76
+R67
+L67
+L68
+L48
+R16
+L174
+L84
+R58
+L51
+R51
+R845
+R25
+L487
+R628
+R19
+R470
+R35
+L45
+R910
+L7
+L31
+R738
+R789
+R24
+L6
+L81
+R2
+L57
+R75
+R48
+L160
+R30
+L29
+R81
+R584
+L36
+R736
+L77
+R61
+L84
+L665
+R34
+R31
+L687
+L113
+L47
+L41
+L76
+L76
+L241
+R354
+R45
+R14
+L32
+L47
+L253
+L28
+R28
+L60
+L40
+R923
+L60
+L163
+R399
+L16
+R17
+R72
+L72
+L6
+L60
+R66
+R96
+L23
+R28
+L1
+R81
+L1
+R68
+L67
+L32
+L20
+R213
+R25
+R33
+R270
+L70
+R425
+L48
+L377
+L25
+L42
+L33
+R104
+L85
+L19
+R669
+R331
+R57
+L40
+L217
+L63
+R15
+L98
+L18
+L55
+L384
+L69
+L85
+L72
+R429
+R45
+L45
+L52
+L62
+R44
+R56
+R414
+L876
+L224
+R641
+R9
+R11
+R78
+R1
+R496
+R98
+R17
+R49
+L506
+R590
+L862
+R93
+R39
+L5
+R51
+R238
+L38
+L644
+R999
+L61
+L94
+R691
+R4
+L55
+L60
+L780
+L481
+R33
+R65
+R83
+R22
+L22
+L430
+R1
+R29
+R83
+R817
+R93
+L14
+L76
+L903
+R39
+R94
+L3
+L43
+L729
+R65
+R12
+R237
+R28
+L12
+L37
+R30
+R65
+R43
+L31
+R42
+L68
+L8
+R72
+R13
+L9
+R73
+L97
+L176
+L584
+L15
+R950
+L629
+R98
+L59
+L61
+R2
+R519
+L227
+L4
+L80
+R90
+R85
+R89
+L767
+R45
+L34
+R65
+R617
+R371
+R29
+L48
+L52
+L214
+R293
+L7
+R28
+L39
+L61
+L56
+L63
+R590
+L6
+R35
+L73
+L327
+R99
+L399
+R827
+R30
+L21
+L636
+R88
+R5
+L70
+R680
+L111
+R8
+L35
+R40
+L5
+L70
+R38
+R46
+L90
+L88
+R19
+R71
+R14
+R60
+R51
+R30
+R319
+L97
+L49
+R46
+L44
+L556
+L90
+L10
+R88
+R12
+R86
+R13
+L88
+R89
+R926
+L26
+R57
+L492
+L65
+R623
+L46
+L72
+R1
+L46
+L60
+L80
+L20
+L40
+L46
+R914
+R361
+R94
+R11
+R33
+L51
+R86
+R692
+L754
+L74
+R174
+R683
+R17
+R91
+L45
+R54
+L55
+R55
+L84
+R98
+R86
+L154
+R62
+L535
+L73
+L354
+L38
+L8
+R97
+L69
+R72
+L30
+R330
+R57
+L81
+L59
+L96
+R24
+R37
+L51
+L31
+R71
+R80
+L24
+R373
+R485
+L85
+R19
+L150
+R31
+L660
+R760
+L63
+R23
+L279
+R63
+R56
+L988
+R2
+L35
+R70
+R91
+L440
+R49
+R13
+R34
+R19
+R31
+L387
+L478
+L81
+R73
+R27
+R38
+R12
+R36
+L86
+R55
+L160
+R5
+R51
+R45
+R59
+R96
+L49
+R98
+R95
+R694
+R11
+L10
+L14
+L839
+R97
+R98
+L532
+R75
+R16
+R71
+L88
+L49
+R75
+L55
+R55
+R53
+R21
+L55
+L19
+L48
+R20
+L68
+L5
+R1
+L35
+L48
+R83
+R61
+R439
+R35
+R65
+L65
+R25
+R957
+L871
+R54
+L37
+R42
+L14
+R65
+R44
+L54
+L19
+R96
+R177
+L98
+R98
+R51
+L75
+L76
+R9
+L3
+R628
+R24
+L43
+R67
+R189
+L189
+R43
+R270
+R80
+R20
+R62
+L49
+R94
+R19
+R579
+R3
+R97
+L625
+L32
+L578
+R90
+L55
+R10
+L83
+L33
+R61
+L98
+R74
+L90
+L41
+R534
+L84
+R305
+R45
+R21
+L621
+L1
+R29
+R72
+R44
+L44
+R65
+L41
+R76
+L256
+L44
+R33
+R67
+R37
+R63
+R95
+L95
+R8
+L208
+R85
+R867
+R48
+L95
+R36
+R556
+L47
+R8
+L58
+L84
+L116
+L56
+R56
+L93
+R43
+L15
+R31
+L26
+L40
+R10
+L10
+R19
+L63
+L656
+R57
+L91
+L57
+L87
+R13
+R85
+R171
+R57
+L68
+R20
+L22
+R264
+L31
+L11
+L38
+L50
+L12
+R947
+R53
+R203
+R86
+L17
+R17
+L89
+L41
+R89
+L6
+R58
+R46
+R54
+L26
+L308
+R76
+L42
+L58
+L27
+L37
+R22
+L789
+R64
+R86
+R809
+L30
+L291
+L12
+R363
+L61
+L39
+R65
+R98
+R26
+L45
+R56
+L748
+R22
+L20
+R50
+L4
+L76
+R76
+R685
+R29
+L68
+L64
+L82
+L49
+L71
+L190
+L290
+R887
+R49
+R85
+R16
+R11
+R12
+L62
+R2
+R91
+L880
+R30
+L64
+L677
+L12
+L84
+R82
+L24
+R48
+R65
+R33
+R92
+L27
+L472
+R712
+R87
+L26
+R26
+R19
+R81
+L82
+R94
+R36
+L48
+R77
+L287
+R78
+R421
+L176
+L86
+L27
+L98
+R586
+R79
+L67
+R20
+R74
+R33
+L78
+R17
+L43
+L815
+L827
+R19
+L488
+L95
+L17
+R176
+R24
+R51
+L451
+L72
+R71
+L41
+R42
+R32
+R67
+L99
+L49
+R154
+R54
+R96
+R45
+R11
+R89
+R363
+L646
+R83
+R95
+R69
+R375
+R61
+L53
+R91
+L13
+L66
+L959
+L9
+R46
+R13
+L66
+R12
+L66
+R70
+R96
+L496
+L647
+R47
+L60
+L63
+R23
+L94
+L6
+L4
+L96
+L74
+R74
+L1
+L99
+R2
+R86
+L47
+R84
+L17
+L8
+L78
+L670
+L52
+R6
+R94
+L95
+L36
+L3
+R50
+R16
+R68
+R28
+L99
+L34
+R5
+L49
+L82
+L57
+R81
+L18
+L49
+R74
+R32
+L32
+R579
+R34
+R62
+R51
+R99
+L62
+L79
+R6
+R30
+L920
+L23
+L26
+L49
+L602
+L52
+L70
+L78
+R70
+R12
+L52
+L90
+R73
+R4
+L33
+L76
+R470
+L78
+L56
+R56
+L29
+R94
+R97
+L81
+L81
+L272
+L76
+L72
+L344
+R864
+L76
+R53
+L77
+L43
+R43
+L9
+L5
+L52
+L88
+R35
+R42
+L75
+R794
+R58
+R180
+R51
+R469
+L41
+L29
+L430
+L449
+L77
+L74
+R89
+R55
+R56
+R680
+R99
+R21
+R2
+L402
+R218
+L6
+R99
+R989
+L10
+L577
+R56
+L69
+L1
+R701
+R191
+L1
+R510
+R7
+R93
+L14
+R14
+R42
+L124
+R776
+R44
+L67
+R29
+L753
+R53
+L92
+R71
+R83
+R315
+R95
+L23
+L70
+R47
+R307
+R46
+L17
+L862
+R95
+L34
+L61
+L14
+L467
+R81
+R4
+R38
+R58
+L92
+L18
+L790
+L5
+L83
+R488
+L369
+R529
+L75
+R43
+R72
+R57
+L457
+L65
+R67
+L659
+R81
+L824
+L540
+R40
+R7
+L19
+L88
+L57
+L68
+L75
+L60
+L725
+L15
+L550
+L59
+R902
+R190
+L1
+L4
+L78
+L35
+L190
+L75
+R71
+L70
+R370
+L78
+R233
+L22
+R96
+R42
+R258
+R58
+L82
+R24
+L740
+R613
+R7
+R81
+L66
+L95
+L79
+L17
+L25
+L79
+R83
+L49
+R36
+L34
+R764
+R99
+L99
+R61
+R858
+R81
+L82
+R7
+L25
+R40
+R55
+R53
+L30
+R86
+R96
+L94
+L6
+R12
+L82
+L68
+L62
+L33
+L96
+L71
+R79
+L97
+R18
+R73
+L62
+R588
+R18
+L17
+R99
+R63
+R938
+L70
+R8
+R62
+R9
+L71
+R6
+R256
+R24
+R83
+L22
+R4
+L99
+R99
+R15
+L56
+L44
+L90
+L14
+L105
+L95
+R2
+R99
+R32
+R25
+L77
+R19
+L80
+R88
+R92
+R19
+R25
+L92
+R41
+R6
+L63
+R30
+L66
+R52
+R624
+L985
+L30
+R694
+L88
+R333
+R52
+L52
+L62
+L38
+R83
+R7
+L90
+R94
+L63
+R66
+L197
+L776
+L33
+L52
+L39
+L68
+L935
+R31
+R49
+L69
+R992
+L43
+L12
+R194
+R25
+R16
+R320
+L228
+R26
+R826
+R29
+L52
+L2
+R34
+R67
+R34
+R53
+R213
+R78
+L298
+R20
+R20
+L96
+R91
+R85
+L61
+L39
+R988
+L72
+L16
+L69
+L507
+R76
+L280
+L25
+L33
+L62
+R8
+L8
+R42
+L42
+R98
+L7
+L4
+R97
+R6
+R410
+R54
+R63
+R683
+L28
+L72
+R70
+R30
+R31
+R69
+L66
+L34
+R45
+R555
+L71
+L24
+L36
+L481
+L139
+L31
+L18
+R50
+L50
+L96
+L968
+L659
+L68
+R15
+L82
+L764
+L96
+R18
+R16
+R11
+R73
+L8
+R14
+L506
+R136
+L22
+L31
+R70
+R11
+R21
+L785
+L15
+L785
+R61
+R39
+L68
+R68
+R39
+R69
+R92
+R99
+R41
+L50
+R89
+L79
+L88
+R88
+L25
+R63
+R26
+R48
+L471
+R620
+L59
+R12
+R54
+L30
+L2
+R64
+L97
+R97
+R939
+L24
+L815
+R392
+R69
+L61
+R67
+R86
+L53
+R81
+L81
+L841
+R8
+R133
+L105
+L26
+R14
+R47
+R70
+L149
+R28
+R25
+R96
+L95
+R84
+R760
+R51
+R60
+L33
+R408
+R69
+L94
+R90
+L646
+R46
+L61
+R27
+R24
+R16
+L5
+L301
+R718
+R5
+R77
+L305
+L95
+L92
+L8
+L5
+L87
+R75
+L20
+L334
+L5
+L24
+L5
+R5
+R858
+L38
+L20
+L68
+R67
+L31
+L99
+R70
+L39
+R36
+L336
+R92
+R8
+L51
+R51
+R25
+L525
+L88
+L12
+L35
+L31
+L58
+L2
+R26
+R54
+R52
+L32
+R20
+R992
+L1
+R15
+R30
+R76
+R12
+L31
+L828
+L67
+R8
+L239
+R39
+L13
+R13
+L39
+L61
+R88
+L15
+L73
+L98
+R277
+R121
+L553
+L22
+R50
+R29
+L66
+R662
+R83
+R18
+L42
+R41
+R38
+L71
+R55
+L22
+L94
+L659
+L52
+R5
+L543
+R48
+L9
+R10
+R12
+L95
+L201
+R178
+R921
+R86
+L7
+L22
+L724
+R46
+L49
+L68
+R17
+L67
+L992
+R42
+R17
+R92
+L27
+R35
+L76
+R13
+L61
+L41
+R79
+L17
+R73
+R112
+R73
+R779
+L88
+L193
+R252
+L35
+R57
+L27
+R862
+R38
+L70
+R69
+L45
+L14
+R46
+R14
+L33
+R273
+R94
+L14
+R17
+R63
+L74
+R857
+L127
+R44
+L79
+R714
+L35
+R470
+R72
+L72
+L877
+R2
+R90
+R434
+L74
+R373
+R29
+R53
+L250
+R24
+R26
+R285
+L85
+L55
+L3
+L70
+L975
+R819
+L16
+R19
+R11
+R340
+L70
+R87
+L78
+R64
+R27
+R20
+R80
+R72
+R69
+R43
+L84
+R949
+L149
+R390
+R12
+R5
+R12
+R281
+R61
+L70
+L91
+L53
+R76
+R54
+L25
+L47
+L25
+R54
+R77
+R8
+R5
+R78
+R17
+R55
+L82
+R40
+L432
+L17
+L481
+R16
+L90
+L76
+L52
+R30
+R4
+L35
+L25
+R326
+R83
+L73
+L10
+R49
+L21
+R972
+L15
+L49
+L336
+L4
+R64
+R440
+L28
+R128
+L3
+L97
+L82
+R23
+R59
+R53
+R36
+L608
+L26
+L93
+R281
+L317
+R74
+L99
+L13
+L27
+R481
+R58
+L49
+R49
+R74
+R26
+R913
+L15
+R19
+L72
+L89
+R90
+R922
+L23
+R50
+L48
+R682
+R74
+L20
+R98
+L381
+R704
+L152
+L652
+L21
+L11
+R13
+R6
+R5
+R90
+R28
+L36
+L63
+R672
+R91
+R326
+L84
+R477
+R56
+L49
+R839
+R85
+R76
+R23
+L26
+L10
+L66
+L21
+R40
+R64
+L95
+R89
+R59
+L57
+R70
+L513
+R43
+L32
+L93
+L36
+R37
+R360
+L60
+L68
+L80
+R32
+R64
+L10
+L14
+L1
+R73
+L69
+L77
+L549
+R2
+R73
+R48
+L532
+R32
+L472
+L628
+R99
+R855
+L54
+L67
+R10
+L865
+L89
+R962
+L66
+R98
+L983
+L91
+R42
+L752
+R96
+R66
+L61
+L42
+R32
+R12
+L39
+R83
+L46
+L80
+L50
+R30
+R42
+L42
+L33
+R33
+R48
+R52
+R44
+R56
+R33
+R79
+R88
+L81
+L396
+R77
+L94
+L27
+L20
+L59
+R42
+L77
+L963
+L2
+L85
+R24
+R276
+L5
+L10
+R93
+R7
+R37
+R937
+L37
+L37
+L31
+L69
+R921
+L21
+L14
+L919
+R933
+R62
+R35
+L90
+R670
+R23
+R78
+R22
+R54
+L74
+R782
+L324
+R62
+L16
+R4
+L88
+R23
+R577
+R528
+L35
+L53
+R360
+L8
+L89
+R97
+L5
+R5
+L33
+L879
+L188
+R29
+L93
+L9
+L61
+R53
+R81
+R82
+L937
+R76
+R79
+R78
+R20
+R502
+L19
+R19
+R29
+R71
+R57
+L28
+R38
+R262
+L34
+L46
+L49
+L27
+R27
+R320
+L8
+L78
+R66
+L80
+L20
+L35
+L18
+L536
+L11
+L4
+R65
+L61
+L33
+R862
+R92
+R76
+R3
+L21
+L79
+L139
+R45
+R694
+R94
+R671
+R130
+R34
+L29
+R22
+L22
+R94
+L94
+L37
+L23
+L69
+R4
+R62
+L44
+R7
+R65
+L84
+L12
+L97
+L43
+R71
+L13
+R15
+L38
+R43
+R44
+L26
+L25
+L31
+L69
+L451
+R409
+R41
+L69
+R57
+L87
+L65
+R65
+L631
+R831
+R59
+L86
+R3
+L81
+L46
+L478
+L171
+R60
+L960
+L51
+R151
+L597
+L3
+L48
+R50
+L30
+L68
+R523
+L66
+R37
+R216
+L14
+L20
+R90
+L70
+R58
+L22
+R116
+L166
+L80
+L83
+R77
+R226
+L98
+R72
+R14
+L63
+L92
+R54
+L25
+R2
+R10
+L94
+R670
+L44
+R68
+L82
+R363
+R293
+R29
+L60
+L11
+R41
+R2
+L87
+R40
+R96
+R280
+L92
+R888
+R434
+L34
+R26
+L726
+L58
+L73
+R131
+R319
+L93
+L74
+R85
+R29
+R34
+R38
+R62
+L97
+R97
+R36
+R171
+L91
+L765
+R179
+R70
+L21
+R93
+L27
+L345
+R48
+L208
+L17
+R16
+R3
+R16
+L98
+R4
+L235
+L29
+R48
+R885
+L1
+L20
+L12
+R40
+R49
+R511
+L5
+L25
+L70
+R80
+L73
+L64
+L78
+R933
+L4
+L94
+L23
+R45
+L12
+L38
+R28
+R803
+L6
+R3
+L65
+R2
+R73
+R17
+L1
+L26
+R20
+L20
+R79
+L64
+L17
+L98
+R95
+R87
+L82
+L6
+R30
+R39
+R62
+L11
+L32
+R51
+L90
+L65
+R22
+L66
+L34
+L68
+R90
+R26
+L137
+L73
+R519
+R43
+L49
+R81
+L60
+L1
+R96
+L48
+L22
+L56
+L11
+R70
+R96
+L78
+L2
+L40
+L247
+R69
+R81
+R37
+L16
+L199
+R192
+R52
+R55
+L87
+R55
+R32
+R64
+R36
+R326
+R66
+R17
+L9
+L88
+L89
+L23
+L3
+R3
+R56
+L856
+R71
+R29
+R23
+R52
+L270
+R7
+L75
+L37
+R95
+L26
+R10
+R58
+L29
+L52
+L218
+L38
+R4
+L47
+R943
+R75
+R44
+L23
+R55
+R49
+L8
+R56
+L48
+L51
+R37
+R81
+R33
+L49
+R47
+L98
+L14
+R14
+R57
+R432
+R25
+R418
+L32
+R71
+L25
+R54
+R53
+L353
+R56
+L5
+R14
+L65
+L46
+R23
+R723
+L87
+L69
+L44
+L39
+L61
+L72
+L58
+L86
+L484
+L71
+L84
+L145
+L74
+R48
+L174
+L929
+R93
+R642
+R56
+R938
+L95
+R42
+R45
+R14
+R49
+R34
+L89
+L66
+R20
+L54
+L550
+R454
+L474
+R70
+L83
+R93
+L46
+R36
+L46
+L54
+L4
+R42
+L804
+L237
+R488
+L885
+L569
+R85
+L182
+L12
+R48
+L70
+L748
+L52
+L69
+L31
+R826
+L35
+L71
+L886
+R66
+R43
+R9
+R48
+L977
+R42
+L29
+L97
+R61
+L7
+L90
+R95
+R32
+L13
+R83
+L49
+L95
+R95
+L351
+R7
+R50
+R66
+L3
+L20
+R162
+L62
+L87
+L13
+R52
+R48
+L658
+R63
+L5
+L24
+R32
+L40
+R32
+L11
+R13
+R97
+L30
+R31
+L21
+R68
+R49
+R560
+L89
+L55
+L60
+L52
+R625
+R751
+L54
+R95
+L94
+R677
+L88
+R45
+R565
+R25
+L3
+L170
+L98
+L13
+R37
+R56
+R9
+L451
+R86
+R85
+R30
+L15
+L96
+L118
+L5
+R869
+L92
+R49
+L7
+L131
+L44
+R75
+R58
+R63
+R279
+R75
+L80
+L95
+L25
+R37
+L68
+R156
+R116
+R24
+L190
+R51
+R193
+L47
+R30
+R78
+L590
+R87
+L52
+L92
+R192
+L43
+L14
+L943
+L6
+R6
+L91
+L9
+L271
+L56
+R27
+L977
+L74
+R96
+R55
+R57
+L89
+L78
+L90
+L57
+L57
+R14
+L26
+R93
+L66
+L1
+R27
+R62
+R11
+R72
+R28
+L60
+R52
+R821
+L96
+R83
+L634
+R34
+L48
+R705
+R95
+R48
+L951
+L85
+L81
+R202
+L85
+L718
+R57
+L28
+L777
+L40
+R45
+R61
+R29
+L29
+L809
+L44
+R54
+R16
+L20
+R103
+L78
+L59
+R37
+R95
+R71
+R72
+R25
+R37
+R896
+R37
+L33
+R58
+R42
+L93
+L941
+L92
+R41
+L74
+L73
+R68
+R64
+R82
+L70
+R88
+L973
+L772
+L82
+R33
+R636
+L42
+R8
+L27
+L43
+L81
+L57
+L43
+L28
+L22
+R56
+L735
+R10
+L38
+R60
+L30
+R79
+L294
+R85
+R275
+L15
+R34
+R6
+L8
+R8
+L726
+L74
+R77
+L88
+R27
+L371
+L30
+L3
+L549
+R10
+L740
+R64
+L97
+R82
+L82
+L131
+R31
+L85
+L4
+R18
+L229
+L55
+R59
+L4
+L337
+L63
+R877
+R567
+R56
+R84
+L243
+L19
+R1
+R777
+R58
+R42
+R21
+L21
+L61
+L39
+L315
+R92
+R23
+R28
+L528
+R13
+R87
+L61
+R4
+L143
+L80
+R80
+R517
+L54
+R37
+R60
+R40
+R96
+L28
+L45
+L79
+L75
+R35
+L68
+L36
+R1
+R99
+R7
+L7
+R76
+L73
+R2
+R17
+R207
+L81
+R15
+R34
+R3
+L16
+L684
+R54
+R960
+R86
+R946
+R69
+R85
+L67
+R773
+R61
+R87
+R32
+R14
+L869
+L855
+L69
+R33
+R85
+L741
+R82
+L34
+R70
+R50
+R48
+L71
+R15
+R56
+R26
+R79
+L16
+L70
+R81
+R794
+L76
+R14
+R83
+L515
+R92
+L69
+L23
+R74
+R1
+L77
+R2
+L62
+L38
+R37
+R63
+L140
+L853
+R493
+R390
+R26
+L16
+R98
+L183
+R85
+R58
+R889
+R53
+L26
+L96
+R33
+R1
+R88
+L23
+L277
+L66
+R507
+R19
+R18
+R977
+R45
+R93
+L684
+L96
+L78
+L35
+R74
+R26
+R39
+L22
+L38
+L79
+R24
+R354
+L78
+L677
+R22
+L56
+L289
+L13
+R14
+L58
+L43
+L503
+R19
+R16
+L32
+R65
+L68
+L99
+L67
+L31
+R460
+L73
+L87
+L2
+L98
+R91
+R9
+L379
+R79
+L68
+R28
+R242
+R66
+L4
+R66
+L33
+L71
+R31
+L57
+L2
+R90
+R69
+L57
+L86
+R71
+L737
+L80
+R232
+R79
+L179
+R52
+L20
+R77
+L67
+L42
+L8
+R97
+R40
+L29
+R4
+L59
+L53
+R16
+L62
+L67
+R21
+L346
+L93
+R48
+L96
+R998
+L45
+L85
+R32
+L23
+R70
+R40
+R51
+R97
+L7
+L41
+R53
+L153
+R474
+L10
+L764
+L36
+L14
+L22
+L152
+R24
+L80
+L23
+R503
+L80
+R11
+L24
+R38
+L813
+L103
+L29
+R70
+R69
+R21
+L202
+R479
+R63
+R125
+L780
+R45
+L790
+L36
+L64
+L48
+L52
+R22
+L432
+L84
+L13
+R70
+R17
+R20
+R4
+L207
+L565
+L85
+R53
+L28
+R11
+R25
+R31
+R61
+L87
+R987
+R60
+L60
+L14
+L75
+R60
+L71
+L780
+R17
+R55
+L92
+L464
+L87
+R28
+L83
+R96
+R610
+R681
+L21
+R50
+L10
+L86
+L88
+R39
+R835
+L32
+L68
+R304
+R14
+L29
+R547
+L89
+R53
+R616
+L16
+L51
+L29
+L56
+R136
+L1
+R301
+R923
+R777
+R813
+L413
+R5
+L791
+R86
+R63
+L19
+L97
+R82
+L29
+L53
+L35
+L645
+R245
+R351
+R2
+L65
+L99
+R35
+L38
+L98
+L9
+L91
+R80
+L94
+R44
+R387
+L73
+L55
+R729
+R63
+L805
+L76
+L306
+L474
+R29
+L422
+R78
+R995
+R248
+R56
+R96
+R2
+R66
+L77
+R71
+L293
+L269
+R24
+L64
+R940
+R48
+R967
+L48
+L65
+L2
+R3
+L78
+R460
+L73
+R62
+L74
+L11
+L76
+L90
+L63
+L61
+R129
+L28
+L797
+L15
+R21
+R6
+L15
+R99
+R1
+L61
+L5
+L8
+L726
+L69
+L703
+R1
+R58
+L721
+L83
+L75
+L83
+R75
+L2
+R64
+R736
+R52
+L30
+R378
+R750
+L85
+R37
+L13
+L224
+R37
+R29
+L55
+R826
+L273
+L51
+R56
+L83
+R51
+R22
+L74
+L48
+L82
+R2
+R80
+R555
+L45
+L10
+R555
+L66
+L88
+L20
+L781
+L609
+R44
+R65
+L575
+L25
+L34
+R31
+L87
+R93
+R97
+R73
+R33
+L5
+R999
+L2
+L16
+L2
+L80
+R66
+R2
+L18
+L28
+R78
+L798
+R798
+L94
+L980
+L22
+R99
+R85
+R77
+R7
+L39
+R67
+R36
+R84
+R80
+L973
+L754
+R27
+L30
+R3
+R7
+L71
+L13
+R4
+L92
+L240
+L80
+R52
+L40
+R96
+L28
+R96
+R19
+R17
+R913
+R387
+R19
+R62
+L36
+L26
+L419
+L34
+L87
+R36
+L703
+R88
+R59
+L59
+R13
+R13
+L26
+R44
+L344
+L98
+L88
+R201
+R50
+R21
+L17
+L20
+L49
+L17
+L83
+R14
+L14
+R169
+R85
+R46
+L7
+R7
+R719
+R5
+R15
+L39
+R640
+R60
+R573
+R592
+L65
+R74
+R26
+R59
+L59
+L4
+R64
+L60
+R370
+R71
+R59
+L30
+R30
+L14
+R414
+R29
+L561
+R32
+L64
+R64
+L42
+R24
+L482
+L89
+L11
+R86
+L69
+R24
+L5
+R76
+R88
+R61
+L61
+L16
+R816
+R56
+L96
+L460
+R60
+L14
+R76
+R49
+R888
+L59
+R71
+R29
+R53
+R347
+L90
+L10
+R35
+R88
+L635
+L5
+L637
+L16
+L30
+R89
+L59
+R70
+R99
+L305
+L22
+R82
+R599
+R33
+L582
+R96
+R931
+L231
+R51
+R78
+R11
+L40
+L42
+R85
+R568
+R618
+R921
+R50
+L68
+R68
+L52
+R52
+R5
+L5
+R8
+L53
+L60
+L27
+L51
+R34
+R53
+L4
+L26
+R72
+R148
+R35
+R68
+R103
+R55
+L14
+R59
+L136
+L54
+L93
+L17
+R64
+L8
+R88
+R556
+R12
+R38
+R50
+L73
+R79
+L824
+R418
+R53
+R761
+R786
+L513
+L87
+L65
+R7
+R1
+R22
+L65
+L17
+L86
+R858
+R12
+R12
+L696
+L2
+L81
+L26
+L74
+R86
+L4
+R18
+L38
+L62
+R94
+R6
+L95
+R56
+L61
+R36
+L94
+L47
+R98
+R7
+R41
+R59
+R30
+R54
+R16
+R69
+R31
+L88
+R11
+R86
+R91
+L30
+R30
+R6
+L6
+L94
+L6
+R93
+R67
+L61
+R1
+L84
+R84
+R81
+R37
+R34
+L87
+L62
+L65
+L30
+L8
+L97
+R15
+L22
+R9
+R28
+L16
+R44
+R30
+L2
+L6
+R1
+R36
+L27
+L28
+R23
+L4
+R39
+L46
+R40
+R13
+L28
+R1
+R45
+L37
+R6
+R18
+R37
+L6
+L41
+L27
+R11
+R13
+L12
+R40
+R18
+R46
+R49
+R46
+L29
+R35
+R48
+L10
+R10
+R16
+R40
+L26
+R42
+R6
+R30
+R19
+L43
diff --git a/input/1/example.txt b/input/1/example.txt
new file mode 100644
index 0000000..53287c7
--- /dev/null
+++ b/input/1/example.txt
@@ -0,0 +1,10 @@
+L68
+L30
+R48
+L5
+R60
+L55
+L1
+L99
+R14
+L82
diff --git a/input/2/1.txt b/input/2/1.txt
new file mode 100644
index 0000000..2e84484
--- /dev/null
+++ b/input/2/1.txt
@@ -0,0 +1 @@
+4077-5314,527473787-527596071,709-872,2487-3128,6522872-6618473,69137-81535,7276-8396,93812865-93928569,283900-352379,72-83,7373727756-7373754121,41389868-41438993,5757-6921,85-102,2-16,205918-243465,842786811-842935210,578553879-578609405,9881643-10095708,771165-985774,592441-692926,7427694-7538897,977-1245,44435414-44469747,74184149-74342346,433590-529427,19061209-19292668,531980-562808,34094-40289,4148369957-4148478173,67705780-67877150,20-42,8501-10229,1423280262-1423531012,1926-2452,85940-109708,293-351,53-71
diff --git a/input/2/example.txt b/input/2/example.txt
new file mode 100644
index 0000000..a3f22ef
--- /dev/null
+++ b/input/2/example.txt
@@ -0,0 +1 @@
+11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124
diff --git a/input/3/1.txt b/input/3/1.txt
new file mode 100644
index 0000000..76f86aa
--- /dev/null
+++ b/input/3/1.txt
@@ -0,0 +1,200 @@
+3443334373333545324339252335233845533545245422755419334136447332543353734352333342352363164324383844
+3433434334423225944433232334354334442333333924335333942343333233383543372333445344524534333323244433
+6445452443354336524556464436667635356536446542335532632338343422556865453434662554935342463434223136
+2522122122222222213514222332223223222122232532121112132223123212333143222121122332225253222212321211
+1222223242242124231221324122442244142124714212424435424317222323122242413232232443422232242244223233
+2234122222122211233222212122322222222222222212122222222222213223132341322332622221213243232112232212
+2356223112523523532351855315332431353232242235731412344613124336231133453223225343122332352374734222
+3343432333333433333353345383224352442322423613343232333233333222334353244322433323333349333323335332
+7342322222321224721259321122442322323912322222234431214315422526522422685252123223422224521263228262
+2321237353323325232227232324323625332343235343331932233222233323332333243732354322373633211232251338
+6587278866858777575848766583196774727779775755865586583751787657778977475965868675678578574775877768
+4243433343343335433332333662344232834535534353463535333433445334453536554362335333523333323222363333
+1222334223412222322312213223222224223224132322142333222313223222232233432133232522222122322232231432
+7266252247353442465575262453542242436244617535242642143465626662245355662263447433233352622264565552
+2252222223221222222322222211322222222222221222222222342312212222112222122222223221212222222121122311
+2252214253222222122211254121212253225342223513152224242122222322183252332223252231255521212124562145
+3232233343223221533552323233322812243222732333237371343223233422352234325413334443214233362223323333
+2342443423434526262344243443334434122353342643463324544542333433334534234212574643223435444444424243
+4234533874331232443932333323515328233454263273334347334324342533222225345733324339333234342333346138
+3225147738277523635463338685217615828176126784146642842386623467638862577174577655862764255576728659
+2222222222232222223122123222122222122122221122112122322222221225232222322222222222232211222112321222
+3479323224342333223222511252232243342322124343433333222423222214453551323235444432472352233322223245
+5463572146329235254353543532352353454434345543284253144835282525757726144212437443336453583455472233
+1222222122232121321224222122262222222212333232225232224222221222242225213721321323323223221132222221
+2341322341242324233451232255415814465512213322234248221211241242354232236212222122232223323452163412
+4454463265754646433444423485756661531442323357343522334426252546663346334245634521226274343347414441
+2647576354734635436333353353454273639633652433471856516225325343333553543454645525636257353443245656
+2434324664221452323121333334642342424422623424453634123334432232245624343446312873326264222232333352
+4341452433364323733343336332333324343344332343333633633443322323333313333234234432234323431333333333
+6539633785395567855785537696565568653433836276358445868355445588635456465735423644556666765566984565
+5242415277566773245362345636373244476363461772322135753412671171452255524256317474564632275365114489
+5234163333754933332443335632313411333333435246363534333435423743312133323253334516354442325433433232
+3232234523232335215332112333353212123545233533533432535143412323324442133233323333783335322314234332
+2222515311121345232324112232115452512513542442222322424443353212315524445431541121234353443231126789
+5313558143442512332546524125525243435455455424424335433324525342573623365424335654441164544354311347
+4455478257574554847563757556444944565455455661632453455457564745577344644385255775475355544554747447
+2222232222222816322121246651222326222342622252382321342283266252222222222222242222444422514231522245
+3343354327136217325663353616348466432624634323433348426344653794243336744293233743844836947223741433
+3424514445433844253564465344255143437345442344265435573554434425523544446613523362352333543424443543
+5335334765735554437649555196451745532315534523724335121443954695742359425344662446569273433433285945
+2632132473654522564767555356372445554543232535557673147423535263276525772527545342377672238656452562
+2312222333232122222223322222123224132232117122222412222122222224222222233321231121233242223222222221
+2352343234122223331264242632222252623232732252223228213733221142225222432527252213236244322222166222
+6434334432333333343432343433343213434333343372212235334424444233425312392255343327333342132323433234
+5637729423342234152122554387233542421266513424335373189249459522522285272426525523426355763452253544
+1222224233242322222222322233127322233331232132232223311212222822331232222124432222231246524221147222
+6475424747754497572362542656556457796568568769777433767624437569464776754776472354349766637572346952
+4242222221222222222222222241423224227112212222431231243222222422223222213324423211114226224421322222
+2213222222622232212222223221212232282221212223122422223124223222211233223231222234322223221122222212
+2421282221212151722211942221412212222232462252222222123322443224232253652231215222222144121223122124
+4353553222439342433445142433224325445464296514322425542453344221214414622423225234311424415513324222
+7622223151232222622212261222225152432242222226541222225324222524227222912222226682216221522423132222
+2412122222222214212322222212232322122232222141121221221112223212222222121122212222153121222222222222
+5551445735555524563425535545654564354444474555454574445775535664655549547554356643253394147355724553
+4457645566443248644666166554434865162753945446668549887534547977635566947447756334473445448979859463
+4363236852223895223662223424222622133211426312533541631223245257332312283241622222732255422423143263
+7432633323845322632582333598134366362223433935433566532323943332684232343362342236334532533418353332
+2542233541433411138234313242333621227213233443133332323344333233222231713334242211312224219332333637
+2252222665222222221322662222212211552222211452262222224722122173622231222227322222221254722231226122
+3755643313323333363755235253262279952396239263391354672333352621235382239432339636273433638355225232
+2112222225522752212222322211371222222222323122212315226215232212531334441421242323454351422225231222
+3234333533435132444344333334664343545434442324443333534333344333444324454344334323333433333334344344
+2222322622213282452522332221222222222232237432127221321321122233273922222222221222322221351222222221
+6129227274182272122984145224242222212132121124251451229412228226221232476134172221272227222222122155
+5272642647797454676726755477544645676654764686657874246376647346444767677484784466478486765477654455
+2221322222422121222122222221131222222122233232222242313222222232112122222212222212222223222422122212
+5852443543485534276376753656457653426447353379363769566362532752436883455659574766487634785555455141
+3372243334531332343136312123221323323126233222322232133332451333144344433215223243473223254363323231
+6435635764515673424343364453865733636633363326333443646576676843474316743743464566487654635434473765
+7645533351466656354332363646543565635855315535354323363632543755466655466643453344655147253433363544
+6986642968797789943597848365783697649676485763847693779673977765435987957576777545514656248774774678
+4222121222522325222112142222212212322212224112221222232122222413223243222222222422122222212232322322
+2232326121335233421131252223622233132322252512122232321538152334322542223222243521522222222112234654
+5342444664463483453437262633322135233373726432336234672536344245545365424532564533336433673244443256
+4634442425423525234475454552964857432553554548383544655653648152538648253744555326645255634434473446
+3218226214142132122212222233223212123122212232223132225271222223221212223322221231335522313224222226
+2223232222322722424241212521222421221141222232411222523223221222222222212221721113142222212122322832
+6565355545444463543535732644355667541335646434342233544316656665576522423334433535833453474524725733
+2532421333243234235353643313631443343384344333535334433435354323343433334323346325333133753542451122
+2282522432124725336322227335422122425322352722132212342221432235233253227133223321347513256225422232
+1253452292222333352435422435523532548132651242426224244225244233229332335341426244532272222222335646
+3627486635954534544524423344731347284252435743355334643685384393434345325534523334455563353332459254
+5423322244233223525424126524225544252424522547455545364463456265663534342325442235743323428465155724
+2124423262221415144242322112633222242422632221411232626232161222242254221232322512221224433442149222
+4345666479678668698677636849647678774678647888345593879897757987766298795455995675544798996739548647
+2212321232222212222326242272323631122322221222624225222421324221112222222222321142226212211212152315
+2641322223673222544141472338955335463224333238122225843432223232331345234424313224332335382352433334
+3535633432363242933333233533333634323414323432223351932543244454243532494323343253375832553563634263
+3585452227854556644975675429775442784231428228835285613535476485625633466326666686231288136933765346
+2265522222225222223422622222221227222533812222245322652243312129222222252522412124212421342332262222
+2221222221222222322111222222212212222222222222122222231122125211231222121221232332222222222222122222
+2224321242222222725222422222222122211221122322222211222333727121222212224213222211222221224313222222
+1222122244341212123222222221222434223222533222841142312423212122223221422122324123221223224232222221
+2212122424418142325432427234222223221121244272224222242122152212323212222542131441141222122222222242
+5247422325224324334251313334573324744323231653313243244343732543343543445533324254144222323444435434
+2222222213222221242412221222422412242222422222222243422222223322223312321222222224312222114242222122
+3433323211432232132333342315221231212122422222223222342532222232222322332322322122223362212332333222
+3336366236534333312658733734812673565367363633493427564523237435227565326333443426834362824644625364
+4357465572665564346562471343766669441943122463423433275637564576536879724267437222494748333653233755
+3251333123384395933353113591332432852332831353331563423331133323737233324232263533334453333438225331
+2221233222523121122232352233223273222162222122321221542123231721423323212234231221312422922232222122
+2347428434388444244454353267556431343444247474423244667448648646734446449355246426429447447667877484
+8223133312212352535242443324233233122222333322183335482423333235243223512333422218371255223152232273
+2333348272232421233328232223363248533322333433625354362434431131835242333338324343538422217313221333
+5244525525422225172222145521135243655351423435465222523127525225526564112232412222533344243322536522
+9337955566474353798357579763925278522639273594985695778467379693266636984829236465674439753475477496
+5547684493542734555559255658454363554452343755544534537387472843235652634565243655331467564552451353
+5443467255446574437533432441334544864864564822444474948446244458644346434464462464463723442446823442
+3333233243233313323577324313231333124332733833133632283286333128323233723332236333523233313333333333
+2362233252522234655222212124632222112222322122222112221223222831251242212221222221321513222221211222
+3354445327232543341248374345453445344433254354223343445433432334362532333452434254535453343443334323
+2231223332232221232122123312222342235222314222312123223211232212412222222332522222222222222221222222
+3122331422322226223252212432593231242142222522332233122321422322323232222323233321232322222422234232
+5335733324234435724423153333323142342535232253531532334343232333323333332253345522324353321633553533
+7169583588263547243342327722838442434722247325245338435256142653493663273773412363285334461371345338
+4315513145533243342177352723333231323465427245425542334392472445333535435572234447721542443115232365
+3598423344472794382532464291685232264482695248493462263157561768216278292523392646639572838674538327
+5523624134533422152411233222312342243132221333546324352223533333222363434433244244332322322232432323
+3133434421232232322223432222233332324722323233331323533243353212312734323222423233123422231133223222
+1422224443333422222353325323342344452434323253344243334431234423231122423323333343332321514234352443
+6395962918225862223357365712226336244825423496424453226299443829425838422422455423268785482242284422
+3643114411566633356554625155132613411634514446251351451346145565241362514361644441451632322655242789
+2523714443344511337123154283355233333362325372532226255455454325224258142552122322214274532253344542
+4553125267216322224232816122612162222321662422222425226932562221235674623355612326234343362433233388
+3333533343821121333522355383343333222333258325323354223327324343334123332322635322435442333344443333
+6223236422282522227431235325123474353122322463322133332647342441122434275163313223265554642123242324
+4272223622412225314212212522622282231832158451323322143823522223912742424122242624132257322244172622
+2224222155323132318342733243342211324912221342623533153232229332522461213221394315222126282217724553
+6444253222632333533343433313232463344324312623234253462151234425362314252346225462342332342362424424
+2333241133333142327223122676122234324325133273451333273432236333232332232333236323362153333511332423
+2622841423321437487245225223923344285242626133252223413726244525122143252222415613238265333255832251
+7422224429353455322152232434625152493853521211212124252942555212213414354224236532225745625232632442
+3121212122222223222222222233222122222412222231412232222222212312126222224221263242221221322222425232
+1334232453342333332322323332343444333323332332422144234453433372346432334433432241233234325432428322
+4945325934553842923574553641695874566754752896523778566836675548475879374364474775377487434446674963
+6343131336333332332234332243632221332242336323333233566232333233223122243233263333613433462363213243
+4333211242332332426414263423453341422333426442332334443334429325223544144442343223423232831223344343
+2334153354134131432442236224421112742323323244414422323512245431275123471434432283112342424431424633
+4534545535564344523732653644424324543536135645545423554446415556545453735455962344345435336344554543
+2363222824233642423243512331621435342321233333215422632323234242613332365438333521365224113394232852
+4234136254444236238432341433752234334336334422354254469347244244342434345315585233442384445354243237
+4213323213431314121332114434141344444132141313113144413112241421311141443321321323123232313423456789
+1343343443443323445354253424327354255342342311441633334435533523333353313235234233634523433234344332
+5655679687663778498467668476986855546947369596975837586696386596866728486757888448648436677688744654
+3553138525342232333314525344432255238835138282723438363743582321542582452873523723234747438252551324
+1244425125443553423454413427556553352248144443433327253355534353453583252542243233453442241554262342
+3562433533563245323438323433411123433324332336533472132253433543363323234135233413133324733323254353
+2123422622317222566221113211225224252222222223115262222714215782223271172282226233213626222212112286
+5476553333435254792363268464263246612943846133375433833334943323443374332644824426453562217343432234
+4533642264534842545364852444441433449423574454644384446843456444473434416342274464344364385466363414
+2553333321342232354553153452423232423344343223613573335643346441233334315233323233343363233523343343
+2222122722241242292222356221123322226212122223232272922122221222222222222224221234223222123212222226
+5864635976747746353755462554626715346468766683655468485847178685788563655943775686234852636677785234
+5324243244361436658433613342334233432254342453534463542344644316552243454822324453631535225254253294
+3453465234532143223414332162355225264753223414256623521652441223656325347156535254834235331452533438
+6443223813144537317435135263352345442373348642424725321731533252432336742322612245432474352545511431
+3363234564333333633362497243233343333343232733343233373234353332222323252736233393322333331339342333
+2443241324223433443655642336433232343343424334342342462334333433333433331432243334433433534344333343
+3554232454243364236347249222743222233228673743534134573522736256331443444342222542223762256765223254
+6144442432122352232123514333244422243233343432231362232243222232322324364352313323321442422233132232
+2122212322372122222222222321222131214222371422362222122122232222211221242222132322223223231222262222
+2121322232422324224223321222222133322225221127322327222222222212261222211172237241224222313222831352
+2229635382476445685567731513152346112256322232543768242126227657323575572257232242593845123284628282
+5655256356356414345348335574336464513646333545552444463142264644665355634532334363315632454645333363
+5775734453444434342446531444443324364553424442434221434233244443472343444234253341324134443444444452
+4944744464449343448344334242424449135452434444442445125458448357443444566344252364452444645474443444
+3422332723526222126332462442345336322829222323332243332421224453374332363222253692321272226427422244
+1232224222233122222212222212242242251422222331232222224322412232223222222223222512222223232222212222
+4236256464656326563412244364635525426422634252632461235444142224656474455665246462444765633675457545
+2152122472281322122422332422413243816824222232214231732243244344324224232712123213212322234142222211
+2932465313335325342244258274323563332423235344543152367233333833243933515436234398833237345311334453
+2114253242242421423325334211224322232222528233533327155232252235223221222362473522525312223222232233
+5545266544555454739575555554595564556554734454655655335157553145285634363484534535356572535555555445
+1424532124222222254421422423224222232253545224231125421422154425524445252421325221222444516522624512
+3233333333342334313334333333433442243332332333342333232312434542536322123339641324442444353532643343
+2275626231322521112322222222922235213331343334636156264463556442336445312221254224121422443332233252
+5837142312346243343356333272244344123354234255432544353533222412333245424233233747442331352442123538
+5533323435353234535633313423234233335433453252323232333843534232436744552133933546334663514483435357
+3623223233325322353532522322331221252232213314224354323422522335252353312322222423233112433123221533
+6652245353237562224222366245152425252254226743346226624254245223535363551226362625322232156213225223
+4543555325658545647363554356555443423347242844527854452256659352673744625422335545354444223763472395
+4245563467623222649626215474422425222222132294244413412343221442222261722633262264432241483142229485
+2433343343337543237236132281673423448424333333552783873366244273333455532631745524431327358417325638
+3523658544374454355545552357541541335445545455345734554554435546434545543335443345457348554555335564
+4532522232233224231184748922225222633234231854726422522552364922513448222412423427223235652546122276
+2241143324516423222423252632222332262332412223243324221422563224212222326224223252336342523222241222
+3324423341314144313333533531425435353455343223324323347435382244243545333322314324555144535334434322
+2344548144254334453735464536325454213654552425352355442444483443453414594244432335443433414334452463
+3313233111537242432322483232452144525253231342333532223212231233232243332542222231354233435224322224
+2132225222222331233221342122122132221232221232321232221222129222222222122221422223223222272222222221
+4345522253633552315442253235632134352442253424533523252245252522444225557251515244245575432556443315
+3675458614467383556471586343723636656299942262685272282858229627727742762492461557426175333293623532
+4566623243142426752274652321653253226553252545512454645454622272473122432663222326222544542294121527
+3432462388237445235355765535373547537452574467533462214534572777243567763523753574545535544266433765
+2343332222544322122633132333623133123542226536423422232822232421335332631422322432332122223154431422
+6426245323142423422454352443241244243226424352452344247545342462216226332484222425426222464333526234
+2235322223332225333123422223222423532421412344863121233237412433122343327322222221512112332343132224
+2225223322223234232321542252323222232322222321351322123227212331322222451232322231233322245353422214
+2333333328623223462232333243232533325132733333332323339273385336343233432354366373333326362532233213
+2645652857354336436442542255243563154464359244632516353543234545556466266556433433385634565844314346
diff --git a/input/3/example.txt b/input/3/example.txt
new file mode 100644
index 0000000..7255fca
--- /dev/null
+++ b/input/3/example.txt
@@ -0,0 +1,4 @@
+987654321111111
+811111111111119
+234234234234278
+818181911112111
diff --git a/input/4/1.txt b/input/4/1.txt
new file mode 100644
index 0000000..654e8ef
--- /dev/null
+++ b/input/4/1.txt
@@ -0,0 +1,136 @@
+@@@@@.@..@@.@@..@..@@@@.@@@...@@...@@.@@@@.@..@@....@.....@@..@@@@@@.@@.@@.@@.@@.@..@@@@@.@@@@@@@.@@@@@.@@@@@@@@@@@.@..@@@@..@@.@....@.@
+.@@@@..@@@@@@..@.@@.@@@.@@@..@@@@@@.@...@@@@@.@@@@.@.@@.....@@@@@@.@@@@@.@@@@..@@.@.@@.@.@@.@@@@.@@.@@@@@@@.@@@..@@@@....@@@..@....@@...
+.@@.@@....@@@..@.@.@@@@@@@@@.@@.@.@.@@@@..@@.@.@@@.@@@....@.@.@.@.@@.@..@@@@@@.@@@@@.@@@@.@..@.@@@@@.@@@@@@@..@@@@.@@@.@@@.@@@.@.@@@.@..
+.@@@....@@@.@@.@@...@@.@@@@@@@@@@....@@.@@@@@@@@..@@.@..@@@.@.@....@...@@@.@..@@.@@@@@@..@.@@@@@@@@@@.@.@@@....@@..@@@..@@@@.@@.@@.@@@@.
+@@@@@@.@@@..@@@..@@.@.@@@....@@@@..@@@.@..@.@@@@@@@@.@@@@.@.@.@@@@..@@.@..@@@@@@@...@@@.@@@@@@@.@@@@@@@..@@.@@@@@@@.@@.@@@@@@@.@...@@@@@
+@@@..@.@@@@@..@@@....@.@@@@.@.@@@@.@.....@.......@..@...@@@...@@@@.@.@@.@.@@.@.@.@@@.@.......@@..@.@@..@@@@@@@@@@@@.@@.@@@...@..@@@@@.@.
+@@@.@@@@.@@.@@@.@.@@.@.@..@@@@@@@@..@@@@@.@..@@@@.@@@..@@..@@.@@@@@@..@@@@@@@@.@.@@@.@...@.@.@@@@@@...@@@@.@@@@@@@..@.@@.@.@@@@@@@@@.@@.
+@@...@@@@...@@@@@@@@@.@@@.@@@@..@@@@.@@@@@@.@.@.@.@@@@@.@@@@@.@@@@@@@@.@@..@.@.....@.@@@@@@.@@@.@..@@.@@@.@@@..@.@@@@...@@@@.....@@@.@@.
+@.@@@.@.@.....@@.@@.@@@@...@@@@...@@@.@@@@@@@@@@@@@@.@@@@@@..@..@@.@@@@@..@@.@@@.@@@..@.@@@@@@.@@..@.@@@.@@@@@@@@@@@.@@@@@....@@@.@@@@@@
+@@@@@@@@@.@@@@@@@.@...@.@..@@@..@..@@..@@.@@.@@@.@.@@@@@@@@@@@.@.@.@@@@@@.@@@.@@.@@@@.@.@@@@@@@@@..@@@@@@.@...@.@.@@.@.@@@@@@.@@@@@.@.@.
+@@@...@.@@@@....@..@@.@@@@.@.@@.@@@.@.@...@@@@@@@@..@@@@.@@@@@@@......@...@..@@@@@@@@@@.@@.@@@@..@@@@...@@.@..@@@.@..@@@.@..@@@@@@@@.@@@
+@@.@..@@.@@@.@@..@..@@@.@@@@@.@@@@@@@@@@@@@.@@..@@..@.@.@@@@.@.@..@@..@.@@.@@@.@@@@@@@@@@@@@@@.@@..@@@@@@@@@@@@@@@@@@.@@.@.@@@@..@@.@@@.
+@@@@.@.@@.@@@@@@@@@@.@@@.......@@@@.@..@@.@.@@@.@@@.@@.@.@@.@.@@@.@@@.@.@@@.@@@@@@@@@.@..@@.@@..@@@@@@@@.@.@@..@@@.@@@.@@.@@@@.@@@@.@.@.
+.@@@.@@.@..@@@@.@..@@..@@.@@.@@@..@@@@@.@.@@@.@@@@@@@@.@@@..@@@..@..@@@@@.@@@.@@.@@.@..@@@@@.@@@@@.@@.@..@@@@.@.@@..@@.@@@@.@@.@@@@@@@@@
+@@.@.@@.@.@....@@@@..@.@@@@@@@...@@@@@.@@...@@@.@@@..@....@@.@@@.@.@@..@.@@@..@@@.@.@@@...@.@@@@..@@.@@@.@..@@@@@..@@.@@@@@@@@.@@@@@@@..
+.@.@@.@@@@.@.@@.@..@......@.@.@.@.@@@.@@@.@@@@.@@@@@.@@@@@@@@...@.@.@.@.@.@.@@.@@@@@@@@..@@@@.@@@@@..@.@@.@@.@@.@@@@@@@@.@.@.@@.@@@@..@@
+@@@.@@@@@.@@@.@.@@.@@.@@@..@.@@.@@@@..@.@..@@@@.@@@@.@@@.@@.@@@.@@@@@@@.@@@@...@@@@..@...@@.@@@@@@@@@..@@@@@@@@@@@.@@@@@.@@@@@@..@@..@@@
+@.@@@@@.@@@.@@.@@@.@@..@.@@@.@@@@@@...@..@@@@@@@@@.@@@@@@@@@@@@@@@@.@@@@@.@@@@@@@@@@@@.@.@@.@@...@.@@.@.@.@@@.@@@..@@@@@.@.@@@@@..@..@..
+@@....@..@.@@.@@@@@@@.@@@.@@@@@.@@.@@.@....@@..@@.@.@@.@@.@@@@.@.@@.@@@@..@@@@@@.@@..@@@@@.@@@@@.@.@@@@...@@@@.@@@@@@@.@@@@@@@@@@..@@@.@
+@@@@@....@...@@@.@@@@.@@.@.@@@@@...@@@@.@.@@..@@.@@@@@.@@.......@..@@@@@@..@@...@@@.....@.@@@@.@@@@..@@@..@@.@@@..@.@.@.@@@.@...@..@@@@@
+...@@@@@@..@@@..@@@@.@.@@@@@@.@.@@@...@.@@@.@@@@@@@@@.@@...@@.@@..@@@@...@@@@.@@.@@..@.@@.@@@.@@@@@@@.@..@.@...@..@.@....@@@..@@@@@@@@@@
+@.@@@@@...@..@@@.@@@.@.@.@@@.@@@....@.@@@.@@..@.@@@@@@.@@..@@@@@@..@@.@@.@.@@@..@.@..@@..@@@@@@@.@.@@@.@@@.@.@@..@@@@@@@@@@@@..@@..@@.@.
+@..@..@..@@@@@..@@...@@.@@@@.@@.@@.@.@@@.@@..@@..@@@..@.@@@@..@@@@.@@@@.@@.@@@.@@@@@@@...@@.@@..@.@@@@@@.@@@@@@.@.@.@.@.@@@.@..@.@@.@.@@
+@@....@@@@@..@@@@@.@@@@@@...@@@@..@@@..@@@@@@@..@.@@@@@@@@.@.@@@@@@@@@@..@.@...@.@.@@..@@.@.@@.@@@@.@@.@@@.@@@..@@...@@@.@@.@@@@.@.@@@.@
+.@@@.@@.@.@.@@@.@@@@@@@.@.@@@.@@@@@@@@.@...@.@..@@.@@@@@....@@@...@.@..@@@@.@.@@.@..@@@@@@@@@.@.@@@.@@..@.@@.@.@@@@@.@@@.@@@@@.@@.@@.@@@
+.@@@@@.@.@@@@@@.@..@.@.@.@@@@....@@.@..@@.@@...@@.@@.@@@..@@@.....@@@.@@...@.@@.@@@@..@@@@.@@....@@..@.@.@@.@@@@@@@@.@@@.@.@.@.@@@@@@..@
+...@@@.@.@@.@.@@.@@@@@@@.@@..@..@@..@@.@@@@@.@@@@..@.@.@..@@.@..@.@@@@@@@.@.@@@@@.@..@@@@.@@.@...@..@@@@@@.@@@@@@@@@@@..@@@@@@@@.@.@@.@@
+@@@...@@@@@...@@..@.@.@@.@@@@..@@@.@@@@.@@@.@@@@@@@@@.@.@..@@@.@@@@@@@@.@.@@@@@@.@@@...@.@.@@@@@..@@@.@.@@.@@@.@..@@@.@@@@@.@@.@....@.@@
+@@.@@@@..@.@@@@@@@.@.@@@@@@@..@@.@@...@@@..@@@@@@@@@.@...@@@@.@@...@@@@@.@.@@@@..@.@@@@...@@.@@@@...@@@.@.@@@.@@.@.@@@.@@.@@...@@..@@@@@
+.@@...@@@@@@.@.@@@.@...@@@@@@..@@@@@.@@.@@@@@@@@@@@@.@@@@@.@.@@..@@@@@.@@.@..@@.@.@@@.@@@..@..@@@.@.@@@@@.@.@@.@@.@.@@.@@@..@@@@@.@@@@@@
+@@..@@@@@@.@@.@@@.@@@@@@.@@@@@...@..@@@.@@@.@.@..@.@@@.@@@.@@@@@@.@@@..@@.@..@..@.@@@@@.@...@@...@@@@.@@.@.@@..@@@.@.@@.@.@@@@.@@...@.@.
+@.@.@@.@@@.@.@@@.@.@@@.@.@...@@@.@@...@@.....@...@@..@.@@.@.@@@@@@@.@@.@@@@@@@.@.@@@.@..@.@.@..@@@@.@@.@.@.@.@@@@@@..@.@@.@@@.@@@..@@..@
+@.@.@@@@.@@@@..@..@@.@@@@@@......@@@..@@..@.@@@@@.@@@@.@.@.@.@..@..@.@...@@@@@@.@.@@@@.@@.@@@@@.@.@@.@@@@@...@.@@@@@.@@@@@.@...@@.@@.@@@
+..@@.@@.@@@@..@....@@@@..@@.@.@.@@@@.@@.@@@...@@@.@@..@....@@...@@@@.@@@@@....@@@@.@@.@@@@.@@@...@.@@@.@@@@.@@@....@.@@.@@.@...@@..@@@@@
+@..@@.@@.@.@@@@@@.@@@@@@.@..@@@@.@.@@.@.@@.@@...@@@@@@.@@@@@...@@@@@@...@.@@@@@...@@@..@..@@@@.@@.@@.@@@@..@@@@@@@@@@@@@@.@@.@.@@.@.@.@@
+@@@@.@.@@@.@@.@@.@@@.@..@...@@.@@@.@@@@@...@.@@@.@@@..@.@.@.@.....@@@@@@.@.@@@.@@.@@....@.@..@@@.....@@.@@@..@@@..@@.@@@.@@@.@@.@@@...@@
+...@..@@.@..@@@@@@@.@@@.@@@@.@.@@@@@@@@@@@@.@@..@.@@@@@.@@@@@@@@.@@.@...@@.@@@@@@@.@@@@.@..@...@.@@@@..@@..@@.@@@.@.@...@@...@..@.@@@.@@
+@@@@@@.@@.@.@.@@@.....@@@@@@@..@.@@@....@@@.@.@@@@..@@.@@@@...@@@@@@..@@@@.@..@.@.@@@.@.@@@@@.@@@@@@@@@...@@.@@@@@@@..@@...@@@@@@@.@.@.@
+@@@@.@@@.@@.@.@.@@@@@@@@@.@@@@@...@.@.@@@.@@..@@@@@@@@@@@.@..@@..@@@@.@@..@@@@@@@@@@.@@..@....@@@@@@@@@.@...@@@@@.@@@.@@@@@..@@@.@@@.@@@
+@.@@.@@..@@....@@.@@.@@@@@.@@@@@@@@@@@@@@..@@.@@@....@..@@@@.@..@.@@@@@@@@@.@@@...@.@@.@@...@@..@@..@.@@@@.@@@@.@.@@.@.@@.@@@@@@@@@..@.@
+.@@@@@.@....@@.@.@@.@@@@@.@@.@@@@.@.@@.@.@@@.@@..@.@@@..@@.@..@@..@.@@@@@.@.@@@@..@@@@@...@@@.@.@@@@@@@@@@.@@@@.@@.@@@@..@@@.@@.@@@@@@.@
+..@..@@@@@..@@@.@@@@@.@@@...@@.@@@@..@@@@@@@..@@@@.@@.@.@@.@@...@@..@@@.@@.@.@@@@...@..@@.@@@..@@..@.@@@@@@..@@@.@@@.@@.@@.@@@@...@.@@@.
+@@@@@@@@@@@@.@@@.@@...@@@.@.@@.@@.@@.@.@....@@@@@.@.@@@@@@@@.@.@.@@@.@@@..@@@.@.@@...@@..@@@.@@@.@@@@@@@..@@@@@@@.@.@@@.@.@@@@@...@.@@@.
+.@@@.@@.@..@@..@@.@@@.@@.@.@@@.@@@@@.@@@@@@@@.@.@.@@.@@@@@..@...@@@.@.@@@@@@@.@.@..@..@...@....@.@..@@@@@.@@@.@..@@@@.@@@.@.@@@@...@.@@@
+..@@@..@@@@..@@@@.@@.@@@.@.....@@@@@@@@@.@@@@@@.@@@@@..@...@@@@@@@@@.@@.@@@@@@@..@@@@@@.@@.@@@@@.@.@@@@@@@.@@@@@@@@@..@@..@.@@@..@@@.@@@
+@@@@@.@@..@..@.@..@.@@@@@@.@@@@@@@@.@@@@@@@@..@@.@..@@@@@@@@.@@@@@@...@@.....@.@@@@@@....@..@@.@..@.@@.@@.@@@.@@@@@@@.@@...@@.@@@@@@@@@@
+.@.@@...@@.@.@.@@.@@@@@@@@@.@.@@@...@@..@@.@@@@.@@@@@@@@@.@@@@@@@@@...@...@@@@@.@@@@@@@@@@@@@.@@@@@@.@@@@@@@.@.@@@@.@.@.@.@.@@@@@.@@@..@
+@..@@@@@.@..@@@@@@@.@@@.@@.@...@@@.@@@.@@.@.@@@.@@@@@@@.@...@@@..@@@@@@@..@.@.@..@@.@@..@@@..@@.@.@@@@@@@@.@@@@.@.@..@@.@@@@..@@@@@@@@@@
+@@..@@.@@@@@@@@@@@@@.@.@.@@@.@@@@@@@.@@@@@..@.@@.@..@@@.@.@.@.@@.@...@.@@@@..@@@@.@.@.@@.@..@.@@.@@@.@@@@@.@.@@@.@.@@@@@.@.@.@@.@@@...@@
+@@@.@@@.@@@@@.@...@.@@@@@.@@..@..@@@..@.@.@@@@@@......@.@@.@@@@@@..@@@@@@@@@..@..@.@.@@.@@@@.@@@@.@..@@@..@@...@@@.@@@@@@.@.@......@.@@@
+@@@..@..@...@@@@@@@@@@.@@@..@.@@..@@@.@@@@.@@..@@@@@..@.@..@@@@.@.@.@..@@@.@@.@.@@.@...@.@@@@@@.@..@@@@@@@@@@@@@@@.@@@@@.@@.@@@@@.@.@@..
+..@@@.@@...@@@@@..@@.@@.@@@@@@@@.@@@@@@...@@....@@...@@@@@@@@@@@.@@.@@@...@@@.@@@@.@.@@@@.@@.@@@.@@@@@@@@@@..@@.@..@@.@@.@@@@.@.@@.@...@
+.@@.@@..@@@@@.@@..@@@@@@.@....@.@@@@..@.@..@.@@@...@@@.@.@@@@@@@.@.@@.@@.@@.@@.@@...@@@@@@.@@@@.@.@@@@@@@@...@@.@@@.@@.@@@@@.@...@@@@@@@
+.@@@@.@@@@@.@@@.@@.@.@.@@@.@.@.@@..@@@.@@...@@.@@.@@.@@@.@@@@@@.@.@@@.@..@..@@.@..@@@@@.@@.@.@@.@@.@..@@.@..@@@@.@@..@@@.@@@@@@@@.@.@..@
+@@.@....@@@.@@.@@..@.@.@.@.@.@@..@@@@@.@@@..@@....@@.@@@..@@@@@..@.@.@@@@.@@@@.@@@@...@@@..@@@@@@.@..@@@.@@@@@@@@@@@..@@..@@@@.@@.@.@..@
+..@.@@.@.@@@....@@@.@.@@@@@@@@@@.@@@...@.@@.@@.@@@@@@@.@.@@@@@@@@.@...@@@.@@@@@..@.@@.@..@.@@@@@..@@@@@@@@@@..@@.@@@@.@@@@@@@@@@...@..@.
+@@..@@.@@@@@@@..@@..@@@@.@.@.@@.@.@@@@.@@@.@.@@..@....@@@.@@@....@@.@@@.@@...@@@..@@.@@...@@@.@@@....@@@.@@@.@@@@..@@..@.@@.@@..@@@.@@@@
+@@.@.@@@@@@@@@@@@@..@@@..@@.@@@@@@@@@@@@.@..@.@@@@@.@.@@@..@@.@@@@@...@@..@@@..@...@@.@..@.@...@@....@.@@.@..@.@@@@@@.@@@.@.@@.@.@@.@@..
+@.@.@@@@@@@@@@..@..@@.@.@@@@@@@@.@@..@@@@@.@@@@@.@..@..@@@.@@@.@@@@.@.....@@@@.@@@@@@@@@@.@@@@@.@@@..@@@.@@@..@.....@@...@..@.@@@..@@@@@
+....@@@@.@..@@@.@@@@...@@@@.@.@.@.@@..@....@@..@@@.@....@@@.@@@..@@@@@....@..@@.@.@.@@.@@@.@..@@@@.@....@@@@@@.@@@@..@.@@.@.@@.@.@@@.@.@
+@.@...@@@@@@@@@.@@@@@@.@.@.@@@..@@.@.@.@@@@@@.@@....@.@@..@.@.@@@@.@@@@@@.@@@.@@.@..@@.@.@@@...@@@.@.@@..@.@@.@.@.@@@@@@@@.@@@@@...@@@@.
+@@.@.@@@@@.@@@.@@@.@@@.@@@..@@@.@.@.@@@@.@..@@@@.@@@@@@@@@.@@...@@@.@@.@..@....@@@@@@@.@.@@@@@@.@@..@.@@@.@@@@@@...@.@.@....@.@.@@.@@@@.
+@@@.....@..@@@@.@.@@@@@@@...@.@@@.@@@.@@.@@@@@@...@@.@.@@@...@@@@@@@..@@@...@.@...@@@@@.@@..@...@@@@@.@@@.@.@@@.@@..@.@@..@@@@@@@.@.@..@
+@@@@@@@.@.@@..@@@@@@@@@...@.@.@@@@.@..@.@.@.@@.@@.@@..@@@.@@@@@.@@@@@.@@@@.@.@@.@@.@.@@..@@@@..@..@@@@@@.@.@@@@@...@@.@..@..@.@@.@.@@..@
+@.@@@@@@@@..@@...@@@.@@@@..@.@@@@@@...@.@@.@@@@@@.@@@@.@@..@.@.@@..@@..@@.@..@.@@..@..@@@@...@@@.@@.@@.@@.@@@@@..@@@.@..@.@@.@@@@@@...@.
+@@.@.@@@@@@@@@@@@..@@@..@.@@@.@.@@@.@@@@...@@@@@@.@.@@@..@@@@@@@.@.@@@@@..@@@...@@@..@@..@...@@@@@..@@..@.@@.@.@@@@@@@@@@.@..@@@.@@@@.@.
+..@@...@@@@@@@.@@.@.@@@@@@@..@@.@@@@..@@@@.@@..@@@.@@.@@.@@.@@.@.@@@..@...@.@@@@@.@@@@@@@@.@.@..@@@@@.@@.....@@@@..@@.@@@.....@@@@@..@@.
+.@.@@@..@@@.@@@@@@..@@@@@@..@....@@@@@.@@@@@@.@@@...@@@@...@..@@.@@@@@@@@@@.@.@@@.@.@@..@.@@@@.@@.@.@..@.@@@@@@@..@@@@@@@@@..@.@....@.@@
+@@@@@@@@@..@@...@@@@.@@@@.@....@.@@@@@@.@@@@@@@.@@.@.@@.@@@..@@@@@@.@@.@@.@@@@@@...@@@@@@@@@.@@@@..@@@..@..@..@@.@.@@@.@@@...@@...@..@@@
+@@@..@.@@@.@@@..@.@...@@.@@@...@.@@..@.@@@@@@.@....@@.@@.@@@@@@@@.@@@@@@..@@.@.@.@@@@@..@..@@@.@.@..@@.@@...@.@@@@@.@..@@..@...@@.@@@..@
+@..@@.@@@@@@.@.@@..@.@@@@@.@@@@@@@.@.@@@.@..@@@@@.@@@@@@@..@.@@@@@...@@@.@@.@.@@.@..@.@..@@@..@@@@@@@@@@@..@@.@.@@@@@.@@@..@@@......@@.@
+.@@.@.@@@.@@.@.@@@@..@@@@@@..@..@@@@....@.@..@@.@@@@..@@@@.@@@@@@@@@...@.@@.@@@@.@@@@@@@@@..@.@@@@@@@@@@@@@@.@@@..@@.@@.....@@@@@@@@@...
+@...@@@@.@@@@.@@@.@...@.@.@@.@@..@@..@..@@@@..@.@@.@@@.@@@@@@@@.@@@.@...@.@....@.@@.@@.@@.@..@@.@@.@@.@@.@@@@@.@@@@.@@@@@.@@.@@@@@..@.@@
+@@@@@@@@..@@...@@..@@.@@@.@.@.@@@..@.@@@.@.@.@@@.@@@.@@...@@@@.@.@@@@@@@.@.@@@.@@.@@@.@@.@@@@@@.@.@@.@.@.@@@..@@@@.@@@@@@@....@@.@@...@@
+@@@.@@@@@@@@@@@.@..@.@....@@@@@.@@@@@..@@@@.@@......@@@@@@@.@.@@@.@..@@@@.@.@@@@@.@@@.@..@.@@...@.@.@.@@.@...@..@@@..@@@.@..@@@@.@..@@@@
+...@@.@@@.@@.@@@@@..@@..@@.@@...@.@@.@..@.@@@@.@@@...@..@@@@@@@@@@@@@.@@@@.@.@.@@.@@@.@.@@@@.@..@@@@.@.@@.@@.@@....@@..@@@@...@@@@@.@@.@
+@@@@@......@@.@@@.@@...@@@@@@@.@.@@@....@@.@..@@.@@.@@@@@@@@@@@@..@....@@.@.@@.@@@@@@@@.@.@@@.@.@.@@@@@@@@@..@@@@.@...@.@@@@@@@..@.@..@.
+@@@.@@.@.@@@@.@@@.@@@.@@@@..@..@@@@.@@@.@....@@@@@.@.@@@@@@.@.@@@@@@...@@..@@@.@@..@..@..@.@..@@@@.@@@@@@@@@@@.@@@.@@@@.@.@@@.@@...@..@.
+...@.@@@.@.@@.@@@@@...@@.@@@@....@@@@@@@@@@@..@@.@..@@...@..@@.@@@@.@..@.@@@....@@@@.@@.@.@@@@@@@...@.@@..@.@@@.@@@@@..@@@@@.@@@@@@@@@@@
+@@.@@@@@@@....@..@@@@@...@@.@@@@@....@.@.@@.@@@.@@.@@@@@.@@@@@@@@@@@.@.@@.@@@@@..@.@@@@@@@.@..@.@.@.@@@@..@@@@@@.@..@@@..@..@@@...@@.@..
+@@@..@.@@@.@...@@@..@.........@@.@.@@@@.@..@@@@@@@@.@@@@.@@@@@@@.@@..@..@@@..@.@@@...@@@..@.@.@@@@.@.@@..@@@@.@..@@.@@@@..@@@.@@.@..@@..
+@.@@@@@..@@@.@@.@.@@.@@@@@@@..@.@@.@.@@@..@.@@@.@@@@@@.@@@@@..@@.@@..@@@@@...@@@@.@@@.@@@..@@.@@@@@..@@@@@.@@@@.@...@.@.@.@..@@@.@@@@@..
+.@@@....@@...@.@.@@.@.@@@@@@@@@@.@.@..@@.@@.@@....@..@@.@..@@@.@@@@@@.@@@.@@@@.@@..@..@.@..@@@@.@@@.@@@@@@@.@@@@.@@@@@@@@.@@@@.@@@@.@.@@
+@@@@@@@@.@@@.@.@@@@@@@.@......@@.@@@.@..@@@.@.@..@@.@@.@.@.@.@@.@@@@.@@@@@.@.@@@.@@.@.@.@@@@.@@..@@@.@@..@@@@.@@@@@..@@@.@@@@.@@.@.@@@.@
+@.@@@@..@@@@@...@@@@.@..@@@@@.@.@..@@.@@@....@..@@@....@.@@@..@..@@.@@@@..@@@@@@@...@...@@.@@@@@@..@@@@@@..@@@@@@@@.@@@.@@@@.@.@@.@.@@@@
+@@.@@.@@.@@@@@.@.@@@.@..@@..@@@@@..@@@@@@@@@..@..@@@..@@@@@.@@..@@@@@@...@.@@@..@@..@@@.@@.@@@.@..@..@@@.@@..@@@@.@@@@@@.@.@..@@@..@.@.@
+.@@@@@.@@@@@.@@@@@@@@@@@@.@@.@@....@@.@@.@@@@@@.@.@@@.@.@.@.@@@@@.@....@.@@.@@.@@.@@@@...@@@.@..@..@.@@@@@..@.@..@@@@@@@@@@@@@@.@@@@...@
+..@..@@@.@..@@..@@@..@@@.@..@.@@@.@@@@@@.@.@.@@@@@..@@@@@.@..@.@@.@@@.@@@@@..@@@...@@@@.@@@@@@.@.@@@@.@@.@@....@....@@......@@@@@@..@@..
+@@@@@@@.@.@@@@.@.@@.@@@@.@.@@@@.@.@@@.@@@@@@.@@@..@@.@..@@..@..@.@.@.@@@.@..@@...@.@@.@@@@.@...@.@@@@.@@..@@@@@@@.@@@@.@@@@@..@@@.@@@...
+.@@@..@@@@.@@@.@@@@@.@@@...@..@..@@@@@..@.@@@..@@@@.@.@@@@.@@@.@.@@@.@@@@@@.@@@@..@@@.@.@.@@@....@@@@@@..@@@.@@..@.@@.@@..@.@@@@@@.@@@@.
+@@.@..@.@@@@@.@@@@@@@@@.@.@@@@@@.@.@.@@...@..@..@.@@@@@@@@@@.@.@@.@...@..@.@.@@..@@@.@..@@@@..@@..@.@.@@@@@@.@.@.@@@@@@@..@.@@@@.@@@@@@@
+.@..@..@@.@@...@.@@@@@@@.@@@@@@.@@.@@.@...@..@@@.@..@@@@..@...@@@.@..@.@@.@@@.@@.@.@@@@..@...@.@.@@.@@..@..@@.@@@.@...@@..@@@@@@..@@....
+@@@..@@@@@@@.@@.@@@@..@..@@@...@@@@@@@@@.@.@..@@@..@@@@.@.@....@..@@@@@..@@@@@@@@@.@@@.@..@@@@@@..@@@...@.@@@@@.@@.@.@.@...@@@.@.@@..@@.
+@@@.@.@@@@....@.@@@.@@@@@@@@@@@@@@@.@@.@.@@@@@@@@@.@.@@.@@.@@@.@@.@@.@@@@@@@@.@@.@..@..@@.@@.@@@....@@..@@@@@@@@@@....@@@@@..@@.@@.@@@@.
+@..@@@@@@@@@@..@@..@.@.@.@@@@@@@@@@@@.@.@@.@@.@@..@.@@@@@.@@@@@@@@.@@@..@.@....@@..@@.@..@..@@@.@.@..@.@..@@@@@@@@@@..@.@.@@@..@@@@@@.@.
+@@@@@.@@..@@@@@@@@@@@.@@@.....@.@@....@@@.@@@@.@.@@@@.@.@@.@@....@@.@@@@.@@.@..@..@@@@@..@@@..@@..@@@@.@@@.@..@@.@..@@...@@@@...@@@@.@@@
+@@.@..@@..@...@@@.@.@....@@..@@@@.@@@@..@@@.@@@.@@@..@@@@..@@@@@@@@..@@@@@@@@.@..@....@.@.@@@@@@.@@@@@....@@@@@....@@@@.@@@....@@.@@.@@@
+@@.@@@@.@@..@.@.@..@@.@...@@..@@@..@@@@..@@@@.@@.@..@...@.@@@@.@@@@@@.@...@@@....@@@@.@.@@..@@.@@@@@@@..@..@@.@@@@@@@@@@.@.@.@@@...@.@@@
+.@..@@@@@..@@@@.@@@.@@..@@@@..@@@.@@.@..@.@..@@...@@.@@@@@@@.@@@@@@.@@.@@.@@@@@@@@@@..@...@@.@@@@..@@@@.@@.@@.@..@...@@@@...@.@@@@@..@@@
+....@@@..@.@@@@@@.@@@@.@@@..@.@.@@.@@@@..@@@.@@@@.@.@@.@@..@..@@@......@.@@@@.@@.@.@.@@..@.@....@@@.@@.@@@@....@@@@@.@.@@@..@..@@.@@@..@
+@@@@@.@.@@@@@..@@.@@@.@.@@@@.@...@@@.@.@@@@@@@@@@@@@..@@@@@..@@@@@.@.@.@@.@@@..@@@@...@..@@.@.@@@.@@@@@..@.@.@@@.@.@.@.@..@@@@..@.@@@@..
+.@.@.@@@.@.@@.@@@.@@@@..@.@@@@..@.@@@.@@.@.@.@.@@@@..@@@.@@@@.@@@@@@@@@.@.@@@@@.@.@.@@@@@.@.@@.@.@@@.@@.@.@..@@@.@@@@@.@@@@@@@@..@@@@@@@
+@..@@..@@..@..@@@.@@.@@.@@@.@.@@.@@@@..@@.@...@@.@@...@@@@..@.@.@...@.@.@.@@@@@@@@@.@@@@@@@@.@@.@@..@.@.....@...@@.@@.@@..@@@@...@@@@@@@
+@@@.@@.@@@..@@@.@@@@@@.@@@.@@@.@@.@@@.@@.@.@..@@.@@...@@.@@.....@.@@@@.@@@.@.@@@@@.@@..@.@@@@@@.@.@@@@.@@.@..@@@@..@@@@.@@@@..@@@@@..@@@
+.@..@@@@@@@@.@@.@@.@.@@.........@@.@@.@@@..@@..@@.@.@.@..@@@@.@@@@@@.@@@..@@@.@@@@.@@.@@.@@..@@@@@@@@.@@@@...@@@@@@...@@@@@.@....@@@@@@@
+@@.@.@@@.@.@@...@.@@.@@@.@@@@@.@..@@.@@@.@...@@@@@@@@.@@@.@@@@@@.@@@.@.@.@@@.@.@@@@..@..@@..@..@@.....@..@@....@.@@@@@@.@@@@@@.@@.@@@@@.
+@..@@@@@@.@.@@@@.@.@@.@@.....@.@.@@@.@@@.@@@....@.@@@.@@@.@@.@@@@.@@.@@.@@@......@@@.@@@@@@@@...@@@.@.@@@..@....@.@.@.@@.@@.....@@....@@
+@.@@@.@@@@@.@@.@.@...@@.@@@@@.@@@@.@.@@.@@...@@.@@@@@@@@@@@@@@@@.@@.@@@@@@@.@@@@@@..@@@@@@@..@.@@.@..@.@.@@@@@.@@@@@@@@.@@@@.@@@@@@@..@.
+@@.@.@@@@....@.@.@@@@@@.@@..@@@@@@@.@.@.@@@.@@@@@...@.@@....@@.@@.@@@@@.@.@.@@..@.@.@@@..@@.@@@..@@@@@@.@@@@@...@.@@@@@.@@@@.@@.@.@.@@@@
+@.@.@.@@@@@...@.@@.@@.@@@@@...@.@@..@@.@.@@@.@.@..@@.@@.@..@..@@@@@@@@@.@@@....@@..@.@@.@.@.@@@.@..@@@@@@@@@@.@.@@..@@.@@@@@@@@@@@@.@@.@
+.@...@@@.@@.@@@.@@@@@@@.@@@@@@.@.@@.@@.@@.@@@@.@....@..@...@@.@@@@@@@.@@@@@@@@@@@@.@@@@@@...@@@@@..@@@.@.@..@@@@@.@@@...@@@@@.@@@@@@@@@@
+.@@..@.@.@@.@@.@@@@@@@@.....@.@@.@..@@@.@@.@@.@@@@.....@.@@@@@.@@@..@.@@....@.@.@@..@..@.@@@..@@.@.@@.@@.@@@@.@@@@@..@@@@@@@...@@.@.@..@
+.@.@@..@@@@@....@@@@@@@.@..@.@@@@@..@.@.@@@@@@@@@.@.@@...@.@@.@.@@.@@.@@@@@.@..@..@.@.@@@@@@@...@..@@@@@@@@.@@@@@.@.@.@@@@@.@.@.@.@.@@@@
+@.@@@.@@@.@@@@.@@@@@@.@@.@@.@.@@..@...@@..@.@.@@..@@@.@.@@.@@@.@@@...@@@@.@..@@@.@.@@..@@@@@@...@@.@@@@@.@@.@@...@.@.@@.@..@@......@@@.@
+.@@..@@@@@@@@@...@@.@@@@@@@.@@@@..@@@.@.@@..@@.@.@.@....@@@@@@@@.@@@.@.....@@@@...@@.@@.@.@@.@..@@@.@@@@@@@@@...@.@.@.@@@@.@@@.@@@.@@@.@
+@@@...@..@@@@.@@.@@@@@.@@@@@..@@@@@@@@@.@@@..@@..@@@@.@@.@.@...@.@.@@@@@@@@@@..@@@@@@.@@...@@.@..@@@@@.@@@@@@@@.@@...@@.@.@@.@@@..@@.@@@
+@@@.@@@@@@.@@.@.@@.@@@.@..@.@.....@@@@@.@@....@@.@..@@@@@.@@@..@@@..@@.@@@.@@@.@@.@@@@@@.@.@@@..@@@@.@@@..@@@..@@@.@@@....@.@@@.@...@.@.
+@.@@.@@@@.@@@..@.@@@.@@.@@...@...@@..@@@@@@.@@.@@@@@@@..@@@@@@@@@.@.@@.@@@@@@..@@..@.@..@.@@@@..@@@@@@@@.@@@.@@@@..@.@.@@.@@.@@@@@@.@@@@
+@..@@...@.@.@@@.@.@.....@..@.@@..@.@..@@@@.@@@..@@.@@@..@@.@@..@.@...@..@@.@..@@@.@@.@@@.@@@.@@.@@@@.@@@.@@@@.@...@@@@@.@@@@@..@@@@.@..@
+.@.@@@.@@.@@.@@.@@@.@@@@@@@@..@@@...@.@@.@@.@@.@@@@@@@@.@.....@.@.@@@@@@@.@.@.@@@@@.@@@@@@@@@@@@@.@@.@@..@.@...@.@@@..@@@.@@.@.@@.@.@..@
+@@@..@@@.@@@@@@@@@@.@..@@.@@@.@@@@@@..@@..@@@.@.@....@@@@@@.@@@@@@@@.@@...@@@..@@...@@@..@.@@..@@@@@..@@@@.@@@.@.@@@@...@..@.@.@@.@@.@..
+..@@.@.@.@@..@...@..@...@@@.@@@@@@@@@..@@@@@@..@@@@.@@@@.@@@@...@@@@@@@@@@.@@@@@@@@..@.@@@@@@@@....@@@@@@@@@@....@@....@@@@..@.@@@.@.@@@
+@.@.@@@@.@@.@.@.@@..@.@@@@.@@.@@@@.@@@@@.@@@.@@@@@@@@@.@@@@.@@.@.@@@@.@@@@.@@@@..@@@@.@.@@.@.@.@@@@@@@.@@.@@@@@...@@@@.@@@@@@@..@@@@.@@@
+.@@.@@@@@@.@.@.@@@@@@..@..@@@@....@@..@@@.@@@@@...@@@@@.@@..@@@@..@.@.@@@@.@.@...@...@@.@..@@@...@@@..@.@@@@@...@@..@@@@.@@@@@...@@.@.@@
+@@@@@....@...@@..@.@...@...@@@@@@.@.@@@@.@@@@@@@.@..@@@@@@@@..@@@@...@@.@@.@.@@.@@...@@@@.@.@@@.@@..@@@@.@@@....@...@.@.@@.@.@..@..@.@@@
+..@.@@.@@@@@@@@.@@.@@.@@@...@@..@@@@@@@.@..@@..@@@.@@.@@.@...@@.@@@@@.@@@@@..@@@.@.@@.@@@@.@@@.@@@..@.@@@@@@@..@@@....@@@@....@@@..@.@@@
+@@@.@@@.@@...@..@.@....@@@.@@..@@.@@@.@@.@@@.@@..@..@..@.@@@.@.@@@@@@@.@@..@@.@@@.@.@@@@@.@.@@@@@@@@..@@..@.@@.@@.@.@..@@.@..@.@@@@@@@@.
+@@@@@.@@@.@..@@@.@@@@@@@@@@@.@@.@@@@@.@@@@@.@@..@@@@.@..@.@@@@@@...@@@@@@.@@..@@.@@.@@.@@..@@@@.@@.@...@@@@@@...@.@@@@@.@@@@@@@@@@@@.@.@
+@.@..@..@....@@@@.@.@@@@@.@@@.@@@@@.@@@@@@@@...@@.@@@.@.@..@..@..@@@@@..@@.@@..@.@@.@@.@.@.@..@@.@@.@...@.@@@@@@.@.@..@.@@.@..@@@..@@@@@
+@.@@@.@@.@@@@.@...@@@.@@@.@@@@@@@@.@@@@@@@@@@.@@@....@@@@.@@@...@@@.@.@@@@.@.@@@..@..@..@@.@@@@@@.@...@@@.@@@@.@@@@@@@@@....@@@.@@.@.@@.
+@@@@..@@@@@.@@@@@@.@@@@...@..@@@.@@@@@@@.@.@@@.@.@.@@@@.@...@.@.@.@@...@@@@@@@@..@@@.@@...@@.@@@.@@@.@@@@@@@@@.@@@@.@@@..@@@@.@@@.@@@.@.
+.@@@@@.@@@..@@@@@.@@@@@.@..@....@@.@@.@@@.@@@@@@@.@@@....@@@@@@@@@@@.@@..@.....@.@.@@@@@@@@..@...@@@.@@@@@@@@.@@.@@.@@@@.@@@@@.@@@..@.@.
+@@..@.@.@.@@@@@.@.@@@....@.@.@.@.@@@@.@@@.@..@@@@@@..@@.@@@...@@@@@...@..@@@@.@.@@..@.@@.@@@@.@@@.@@@.@...@@@.@@@.@.@@@@.@@@@@@....@.@..
+@.@.@@@@.@@@.@.@@@@..@@@@@@.@..@@@..@@.@@@@..@@@@.@.@.@.@@@.@.@.@@@@@@.@.@.@...@...@@..@@@@@.@@..@@@@@@@@@.@@@@.@@@.@.@@@@@@.@@@@@...@@.
+.@.@..@@@@@@@.@@@@@@.@..@..@@@@@@@@@@@@@@@.@.@....@@@@@@@.@.@@.@@..@@@@.@.@.@.@@.@@.@@@@.@.@@@.@.@@@@@@@..@..@@@@@@@@.@@@@@@@.@.@.@.@@@@
+...@@@@@@..@.@@@@@@@..@@@..@@@@@@@.@@...@..@@@.@@@@@...@.@.@.@@@@@@@@@@@..@@@@.@@@@.@...@.@@.@..@@.@@.@..@@@.@@@@@@@@.@.@.@.@@@..@@.@.@.
diff --git a/input/4/example.txt b/input/4/example.txt
new file mode 100644
index 0000000..8209399
--- /dev/null
+++ b/input/4/example.txt
@@ -0,0 +1,10 @@
+..@@.@@@@.
+@@@.@.@.@@
+@@@@@.@.@@
+@.@@@@..@.
+@@.@@@@.@@
+.@@@@@@@.@
+.@.@.@.@@@
+@.@@@.@@@@
+.@@@@@@@@.
+@.@.@@@.@.
diff --git a/input/5/1.txt b/input/5/1.txt
new file mode 100644
index 0000000..59f2f83
--- /dev/null
+++ b/input/5/1.txt
@@ -0,0 +1,1187 @@
+436639876131680-436867778393908
+197700960860637-198893061877806
+255753644093984-256141049798709
+2351348670325-2617031498963
+132305455060243-136355961131249
+435738105327068-436449599122321
+103525263650762-109263601125387
+325790710810736-327242721326766
+14267065719571-19713754885181
+193190914974227-194389809136271
+293982406793751-295216301045006
+323845023844190-329536560310239
+292907892178176-294163809044607
+441279431671536-441734947012175
+195881464266764-197136077647965
+438992222880514-439720188043393
+1138886722630-1854190426883
+2351348670325-2617031498963
+260402819310713-260801313119541
+254684163193254-254912091501406
+320106355013024-320106355013024
+302542078244300-305345714739584
+298727251504138-300461809160696
+396167498820829-398717779535761
+4400855877487-4868742298198
+257130691987536-257951515966143
+541881978152383-541881978152383
+196610234096194-198190244156017
+349383978844235-349762616770401
+183960576643697-184978726668743
+444969405647581-446718802519496
+61304715018545-66159151881093
+81520617554440-87934729706190
+259834369549045-260402819310713
+434587230987565-435466102099160
+475435666013023-481706905967204
+533947161016854-541881978152383
+514845169944552-518052420123995
+416462519847165-420821553093953
+396167498820829-398717779535761
+466870584819758-468197356102742
+377045912599205-379402019526561
+121492005967889-128192960880608
+165350397722588-166567604961683
+523602216130118-528877477075963
+486794930310861-490399985238635
+346668568123798-347498421357501
+263741759784930-270004591104064
+453510559403827-453510559403827
+255753644093984-255883541623862
+237029632750300-240866198325708
+66159151881095-67650364848459
+494183422785944-500125695261257
+345448231703112-345736097412168
+299884465540750-301450036951233
+342394384522054-342917428478173
+342394384522054-343269756664439
+439720188043393-439932277547991
+199278226329158-200874723399666
+156628599411913-156628599411913
+114849046814540-118625964441381
+348650279799842-349135926566982
+251363096532313-251754519029658
+2351348670325-3059454811610
+121492005967889-128192960880608
+215903109993819-220160520317358
+4595724410262-4868742298198
+11764600261815-16408688324351
+305345714739585-309765283857435
+343686692179376-343965801195004
+198536528306933-199895172276409
+290236924432701-290236924432701
+448383547620704-449913008882160
+382502598531196-390914491628140
+405909420201677-410130541503465
+183960576643697-188237935670008
+51962013277697-53813300126585
+434353281411495-435243524406101
+223464595521448-223464595521448
+453510559403828-459559466120965
+252153126561253-252392000276325
+191071678578795-192431819097039
+362692344706710-370654124816167
+296854251448735-298173173031698
+443669236357665-445234551662341
+354976739042432-359653081133687
+3059454811610-3402903612047
+437155425700716-437395474195479
+553779369768552-558816033078841
+1854190426883-2617031498963
+202597802194011-206543173679956
+1138886722630-1854190426883
+192264299244619-193376425428411
+349135926566982-349762616770401
+255522055688549-255883541623862
+257951515966143-258174481575672
+255883541623862-256689490174132
+387931485549597-390914491628140
+6447002120018-6846703895094
+507044218634982-510418885916604
+523602216130118-528877477075963
+6846703895094-7184163411933
+132305455060243-138392298598800
+282461539896047-290236924432701
+426299821128178-431250671557138
+91615122525877-99193390510674
+77643299597-926402139635
+23129086310222-29305409989803
+295643608940970-297332743231859
+263741759784930-263741759784930
+494183422785944-494183422785944
+450219329929070-452081472445466
+477672953090653-481706905967204
+42025986713405-48342473949310
+7741071773556-8327653006670
+214028105426882-215903109993818
+254527097937093-254684163193254
+291709376480177-293396513721433
+112530102990519-118625964441381
+242070259011311-249530233518231
+297760250261113-299278734305541
+416462519847164-416462519847164
+56632535322167-58731225107501
+334482514270603-339477569119550
+81520617554439-81520617554439
+58203914594292-59974261998034
+349383978844235-349762616770401
+2135269863759-2859607276208
+8327653006670-9225102488933
+55390560834705-57384780686928
+34160582965213-38080109850518
+433924147210519-434104886793942
+514845169944552-521116262869677
+166567604961684-166567604961684
+6004431119448-6179579759733
+442544600864973-444396613753445
+314203428586513-320106355013023
+141827641940356-148641129957012
+445992312922664-447520263642758
+54576882197287-56478874126451
+272180081867612-276826775088461
+175555988602786-176659954496397
+483295065685033-487816296558127
+242070259011311-249530233518231
+5051996523582-6004431119448
+1854190426883-2135269863759
+194141831401666-195323930008516
+449106805556747-451175636597919
+233591212883937-240866198325708
+223464595521449-230205054673550
+463724193285528-470600784408067
+348650279799842-348863902351621
+352280675243247-358773687775854
+48342473949310-48342473949310
+431250671557139-431250671557139
+447099768779328-448528894445876
+349383978844235-350138800479175
+103525263650762-103525263650762
+350917040198065-351121872602028
+155000750859284-156628599411913
+50733245894011-52622686819434
+171762399865226-180370699099141
+438627291261910-439468151658994
+294843638106269-296309821215654
+73049437165533-77659104685675
+410879657749-1138886722630
+31094751119447-34160582965212
+433195393462687-433650918405706
+433924147210519-434353281411495
+256141049798709-257023728478502
+374512141167076-377045912599203
+94512132119711-96626145043644
+350028006993020-350408432945327
+405909420201677-405909420201677
+558816033078842-561397097410102
+544924158791414-547465000068998
+194756336340510-196079385685652
+206543173679958-208800572147213
+253635004041523-253905636443611
+348863902351621-349762616770401
+4868742298198-5051996523582
+52847898151490-55115334701038
+274411757710907-279797390154032
+29305409989804-29305409989804
+334482514270603-336538665223902
+547465000069000-551608311243321
+
+350335533203126
+385360574958796
+234262113724981
+294830210489023
+478442158496421
+51060125845386
+489366011838543
+20467539616968
+309493089007385
+35476059920709
+516315157936106
+155843407835959
+456007142767771
+256248574496120
+117783252868310
+486322683612937
+175548061347876
+103964673729519
+249065312035976
+498092818843638
+72408239042494
+384863483578993
+480381880152261
+508904657505666
+141339195200670
+468527710921237
+240801362189672
+311624504474432
+267406879792256
+489790658687327
+172167204303582
+50742356801602
+409406749330462
+77312713808414
+474988254396465
+418028548325337
+203875723280166
+483556396831593
+274006514846650
+44162860853548
+236512782028922
+389003547781439
+97921956237812
+556595697000648
+207306737894164
+481950981140956
+122120359619218
+421488833582880
+318231942684891
+5761995102493
+235532974377623
+55763363544356
+353131795479559
+480489941763012
+94729503790645
+454791687732076
+526770326242653
+535146521681209
+430576500558725
+452804092737195
+167227885430837
+243240581180090
+207903495107687
+146666694218178
+210446424146226
+315494139920614
+446055563038145
+469572585798137
+47134806315711
+65382688781008
+6704514273820
+125525849945174
+216069220801594
+353194438127928
+111704888772907
+245978198462529
+556083956728719
+265743891386149
+120231141741495
+545284921187842
+397142470206228
+2914072097246
+320917378370749
+83386731174984
+418734755997286
+419574342385671
+335717636222461
+494793895423597
+223114699995722
+245599537185358
+365729873777363
+318608968969843
+427361798993788
+302196474473106
+283309598904556
+52428079676476
+538475062255329
+31115840248736
+312547528854616
+233910930594751
+115402673489436
+289957426559612
+151941978545988
+185874224269791
+509254517148165
+87483544474577
+361665510982486
+22442789669325
+402902102113318
+114530458429352
+74472503629811
+406841547599155
+236307603614021
+93528502139832
+377323554623858
+451429078651943
+93363731336668
+449744910433794
+548536035872863
+454145837835578
+475534011143611
+525649090440277
+303096921429072
+288960097387298
+364869866612129
+144937651290974
+441898870983094
+150166133135437
+495494237098195
+191201011747014
+468992254208908
+499863204504806
+24892464308673
+452470235372565
+61264210943118
+353365099308890
+2005600991552
+363508877872418
+557836774701927
+467719783836099
+546504846786729
+473888696863993
+511757753137477
+146280052846099
+266090868158842
+44964568205745
+92510698819492
+44049250730300
+240775881464072
+205074962701912
+184272633037162
+525514956307074
+365377265731443
+50788057369242
+134263171872264
+507103608334781
+448450171436406
+211123397837915
+528265207063504
+291853043601474
+549862060291166
+424108510909056
+283586104321846
+123701407478435
+227612611990824
+336420836095420
+539387439130632
+122079067379608
+229277523070520
+238003497073187
+38995216298170
+335806679080051
+306486852894838
+23795428097255
+180282177990399
+546137401853254
+232416498423919
+33285088052369
+76066140890754
+193290140301613
+499805085633896
+43337073440385
+429787346686911
+192927486506573
+211038043491124
+293032821411478
+243763645806763
+560629851358885
+537228036886047
+427847529028482
+44242024721859
+65731056630098
+155970437870471
+325990440518626
+388430555198874
+136132983443499
+540726756836203
+292559818825276
+244352202573471
+106316808502106
+410410586015926
+48426601921587
+181567510763963
+118072282589142
+106494543793667
+363582544211396
+304777829542749
+86942979495455
+84554465680621
+416590337967435
+479472288183507
+366216950049031
+306892600764410
+329450395319355
+550866675560102
+510535310472069
+317129496346605
+185308997168686
+327101122524533
+540877633468895
+193627093388125
+416876991364870
+417529557558348
+227499069849278
+397910116190177
+331933049256207
+520890291673750
+62217465500801
+553873886997682
+63605908906508
+173269523333398
+519001772512600
+305983930747469
+405486560469617
+539490225847749
+482433167612850
+454292040562867
+265805731868422
+142195748895645
+137593007471463
+230427725651681
+192700146268862
+15002883669233
+184404393246163
+272906145343591
+309729177460290
+317263563199829
+144708657780242
+114310461634963
+288568045429530
+225536134912638
+60707676760834
+115242733560461
+495185370761280
+235876755089517
+208107639941041
+348187702003158
+12904927621583
+165367311459622
+295457123959426
+219930318193898
+19043785910845
+338502378066123
+197264511405876
+520603954987306
+506715026610138
+265894659354076
+485388940068705
+494048371764580
+315622097097757
+253991283332714
+447704507963800
+51864842580539
+525073614236087
+446939056087325
+279295679728212
+80638543252164
+285638213741042
+224187531810143
+279524199887892
+186821738562114
+144881090223203
+198185990675999
+245325001365227
+376426022305901
+325855676545988
+186255794691783
+356294789705458
+539525945293020
+351269615643208
+304419654683550
+32996904990448
+525508918556984
+557244194331309
+319036241459597
+55103779028235
+113064457699087
+57870840608143
+439141147444072
+57828702776882
+286015033624460
+7762072158558
+223656672078296
+193564137438167
+534359123879040
+176922211075803
+305140187899636
+207743709951953
+292763506515034
+136929097153961
+353832774528044
+264860851142312
+129557229248886
+349921485593099
+520714758443675
+93092192949047
+374599574821953
+363221209235065
+216154337365793
+365774816589257
+397567141486590
+296631611876851
+248467879605740
+125185995834579
+406182968984545
+42188163981751
+246977315681721
+179506212825220
+389928186679853
+555750182006516
+205213910579475
+34895823631967
+129556898836918
+519169255693079
+275895777691751
+107187211210198
+237980334370650
+295176304479507
+127691425191387
+207333881364859
+337625495738410
+522245821730736
+113114791655341
+177437435245675
+177194089716495
+307931092900459
+385161056302666
+518618957916859
+26121486542669
+83261854220697
+438862947516233
+365037235100453
+523524240482758
+39049839274644
+162096928927647
+541260969900525
+223946260538682
+252185130164848
+95816552446210
+535633244766886
+114229384442459
+288630683873686
+192747459989976
+241726879176480
+81157613842641
+238386992905380
+467291052089506
+430437825044600
+73475224149330
+396158902280731
+16091670037687
+424870639400583
+492666201901775
+318757381207574
+14685487769412
+476193072794385
+235182011932630
+225473098603578
+505817046791470
+352819279357014
+478463151289923
+16345235096602
+429741187473253
+73549121829547
+8573061642485
+38870989832564
+175140441494098
+143672211811467
+91159778841005
+194349640774626
+59241446475351
+245228532110776
+38044681650664
+77237064743202
+73198381611822
+104716606354910
+508121933075497
+302885321766154
+62148733403893
+294985457958459
+347620995463151
+145696091652920
+145573778187879
+215432784827727
+47311538911018
+356994488349310
+416263051335457
+267902365076734
+359046479193283
+192322917472933
+257035518900533
+487680646496929
+268421586578880
+56496267577450
+177985804450780
+173404137006538
+251655153872098
+452053347034663
+367072364385785
+70610711163465
+562253761390897
+38996558124924
+178582443195523
+348530867097407
+243795265740137
+484365645434191
+342417907282479
+407862752418873
+56364941532306
+482877662606935
+451646806363799
+62240110110332
+535843423215812
+406752359584699
+95827666082447
+187713215199074
+297224790712345
+192154689782220
+346753671504076
+284041880612235
+510436777566029
+309312946785960
+547301816650623
+287259927243741
+113530740453224
+45434698397451
+62982791019947
+214355819532745
+182915378576399
+7948207155585
+520244802580691
+166922771771084
+477760097313198
+560168939407503
+37281470801212
+472246704252716
+43381598096678
+269050299745852
+427294382592471
+99139161125895
+518541002269434
+409011824576078
+308899998997829
+550325898675705
+524331937170139
+282676832247312
+86132648344975
+307777606411601
+358916972434869
+236741518523411
+318978414004033
+231010712166659
+383891393419821
+459238395291798
+320596561731144
+387119936718599
+195211200728721
+448219528654728
+29244240551664
+17597308067329
+159146901454577
+49270538548912
+2427344390356
+155981875931572
+53351586242363
+198287856701980
+236311277873271
+546347262496577
+129990381648173
+467427296856269
+304131219228490
+1157560491232
+444183484196883
+235329314968580
+545264874533863
+364059739420789
+137034554096394
+381126041358073
+43628568996155
+528519120305109
+388937595803291
+217145294038584
+17389090174703
+195919232562390
+300162820880823
+314588955800373
+108671986848175
+241338337100107
+329208898832313
+234787895771582
+239848280934618
+498909678520551
+145658130456776
+189240493717556
+388876097204842
+247477111980740
+53867598130951
+61984582869740
+215224095656928
+507487146581447
+118060523785480
+323906933986147
+219174738596332
+389946475638394
+431040709119388
+135060750000040
+389157043060177
+73243619047108
+203689837956886
+485826931236200
+369938245429324
+273910814455024
+389055368445187
+510361561873841
+307606438398878
+518933413032260
+234024861072984
+519172379042536
+457904973043967
+501057872369242
+256598064895820
+409215086811804
+37793599493711
+498335356691302
+449472105728770
+271625859279111
+300092182559524
+298592199451515
+266934014432111
+455477437923449
+232759119822502
+448673981866378
+47316316772808
+15340919637791
+264786597709871
+36725199173728
+340268725338906
+427945720816710
+525630847706665
+268255843916453
+265750770421474
+259454162893178
+558466898233196
+457866529306107
+273109008804782
+210282731078572
+142429911176230
+75088701038842
+441617167465005
+366240041862759
+451270644202131
+398855414473903
+109057614331362
+55977658623470
+427139803038574
+293329250112719
+205018011348883
+559703115036774
+159333800427091
+224360666007307
+447177812658009
+191128228157881
+74943858619523
+172573214918508
+387399708957803
+218078298882496
+195568266529732
+228829935154819
+275961163179489
+550491805513006
+548218443021336
+208365943788739
+144352515620560
+282607101482790
+8274775675752
+56045524196333
+328091182388585
+469758062559351
+377563268786608
+557992496540156
+185449140720657
+383355777621512
+365547903978770
+236731499122202
+496608539777453
+416746892936693
+338326908521089
+28526629215640
+179724316537608
+385471082271645
+185491038732272
+116429947867893
+205939765934505
+555391007906677
+62755608266965
+417369336169553
+215602206359600
+60820800301773
+335285777672037
+269998317946937
+481262532435947
+16522151939220
+429459061577461
+248382716427584
+296662293820211
+418734458100433
+32320952211623
+420466996717905
+333332158104802
+390375811415981
+105702418625371
+366552772597254
+47855601705658
+192071774026783
+45621945037236
+377029031798650
+98189397886622
+446973952425719
+138021210848926
+178569649117302
+293105867870769
+81652320636119
+298825573668776
+284232934820775
+154690884178639
+133239323980123
+114522878457874
+91764309013649
+362940306301148
+455162353537361
+18460319323838
+306862905070115
+442973468244840
+17483635283493
+358418731925598
+434913379782982
+8484360320988
+132598327945002
+26980128322506
+25811004188634
+390231028374099
+380603448338658
+145943052416454
+559073959457316
+223593651735886
+545478564672272
+467802870583398
+299814347294366
+385324228319559
+177483354597704
+475998737825129
+304158679714957
+115635040500149
+364896031821143
+23187460314348
+95139913138122
+219586350407531
+362054684326468
+475103619263391
+560492315791414
+349787817169619
+515746153064109
+22487563790678
+287119826967871
+539464336413908
+244330585656069
+127069165162062
+357692004496152
+107327944999226
+276807376694206
+316284295981652
+38965919826305
+93692824689788
+213010741884323
+249488955418106
+380579679941806
+107674029193042
+198443625525465
+296324693730294
+14852103824275
+96618476088857
+468552712705725
+193971558175143
+525696462589531
+447280046959418
+536405799454170
+97977578106157
+516583183151712
+5563314188620
+399616447886004
+417202828527573
+483069718599709
+328694525220932
+384368322682664
+83422477961746
+31333667164060
+526335480994287
+233182844423274
+47478593118534
+397682396387259
+316273176238421
+454405946176112
+97421033252163
+2234849224190
+377231141670636
+456218700593158
+183987805788552
+194495680726909
+51515950375873
+228517623369942
+244472732958757
+390550574863594
+161229765665043
+481346506890947
+549263114568170
+176799201970835
+300339075331394
+518792141519158
+448789454464804
+155327014095772
+235160828838351
+104264942590199
+453515466475636
+176605077477901
+326717554248644
+42776286692453
+274615837144431
+447817416261963
+337824579175221
+172202342070460
+276483559792372
+254110170660191
+58153423620945
+43303503704323
+490410262523498
+267422245465704
+352533241673597
+182929067296611
+442867760904183
+24984554515132
+118016260270951
+307486759117545
+205099037842139
+297935653130510
+93101941544800
+178401890896640
+510076073486583
+353025246631866
+417211022829377
+497538740562489
+517593989229898
+85784635838591
+441057969418203
+247585870156658
+314622836369165
+358754429367923
+430123080356332
+199112820188122
+33783569804963
+75162909071003
+474106747323220
+345692882399984
+350343898995797
+17942693713226
+106845850117544
+317828690062067
+83573424694712
+63494535578801
+444407677285520
+103654938369132
+242438081026732
+526968242800863
+180213290097916
+262723516213345
+77230952072784
+193215134156420
+480896973548618
+285249307033482
+146464411142333
+18319440396198
+539265872743833
+134458351753147
+216813625637649
+236001270067552
+351588926393082
+517364282014045
+206699483321012
+269451693523172
+124412413211111
+265715354358310
+59109809813080
+416180649957460
+226235225375827
+363003238616165
+176453080285209
+35232926624253
+238970794341328
+457725227034292
+467501413622165
+424040480962121
+278669759502932
+546547288129340
+521495786924721
+119954411300682
+4639052571615
+516476336639880
+430116252278635
+24778200054684
+17487178330737
+211667819224560
+25125413973346
+411355776884705
+245987139676212
+354685274153181
+365371621459302
+147572350259503
+58555221088890
+331234396802940
+396392382488469
+207147915873631
+288824942338228
+224865305555546
+77334582249242
+263789967668607
+1608590816984
+545782143964917
+439725159715989
+48080832801616
+33792847092087
+25929447389340
+519079159855026
+125982133816588
+426614578624183
+437367058809330
+303697793935365
+114274053891440
+338111764338511
+544946413287104
+339101297061374
+166139400936980
+248028935503564
+478070789941675
+345537295704448
+534411977698376
+326074158905107
+229379087117005
+33066301851353
+136455842691843
+427275637182732
+525696843099220
+61790654998415
+204513922476504
+53636298852254
+517421264301419
+426343741871955
+196659201545557
+287163313488857
+286247862430081
+202793498434151
+98166881026715
+288054311494975
+134713392645450
+93098744337497
+319425306746364
+331101912939558
+151598845441234
+109489797445724
+450653351903818
+477988342867372
+385991512961749
+33282794076459
+145729801092378
+23473433102165
+527743797997284
+36554656395796
+61711754967740
+300419539931760
+374789103857705
+387574026436934
+287671641636459
+499816085229578
+555815288028522
+514316544291227
+117166793718106
+303283750575194
+243455872780372
+485612352528873
+558085705343358
+483317554500975
+477645813981218
+316391304100105
+546360087365755
+324158100663886
+327504985090857
+204728776515463
+280206442600760
+500496936344179
+136517720187609
+434073056928477
+450650554201985
+358984004811241
+356467169269031
+562456272273029
+28392388413323
+417968216910045
+526654474535198
+54950516257959
+53178099677859
+305099509010718
+367405219355916
+73252365889941
+1539279800352
+201526106502214
+276572317110923
+83608669927734
+141714416464935
+267756548100747
+237327357484946
+83451662953011
+225885973021310
+132869904167174
+537410846040249
+425848211676393
+268994342274960
+208464381560359
+91098144557508
+114983424419607
+133698258010346
+235857685962191
+48274039725146
+156887154332837
+15255604514178
+284213794291857
+550465382003962
+362232019945087
+359086047556744
+374768515611132
+396808642280769
+94831734336644
+412989252804170
+83862807377606
+94943210744398
+453532417747573
+43308745180999
+218785147438857
+346948021495876
+383150956958196
+199858400211026
+31870242576099
+200041218696351
+443483000481261
+25553480682221
+436712276096262
+407641268867040
+451874991975388
+426554608097422
+6259084817637
+148286494726676
+478671150687313
+150281614101687
+38917217989541
+539401202390532
+446579096428256
+117172710712819
+218793566500934
+186435642484689
+118987391037016
+550038020369094
+329303314596481
+349141810370996
+389350147844854
+478744362489155
+536701248319379
+98098886944833
+31879487059553
+531388488714611
+327623095481859
+55364872385510
+14473791845353
+426776256058947
diff --git a/input/5/example.txt b/input/5/example.txt
new file mode 100644
index 0000000..2e9078d
--- /dev/null
+++ b/input/5/example.txt
@@ -0,0 +1,11 @@
+3-5
+10-14
+16-20
+12-18
+
+1
+5
+8
+11
+17
+32
diff --git a/input/6/1.txt b/input/6/1.txt
new file mode 100644
index 0000000..231aa84
--- /dev/null
+++ b/input/6/1.txt
@@ -0,0 +1,5 @@
+8373 899 988 15 29 814 685 613 685 476 54 1 442 32 642 86 1 85 47 7 578 98 1 99 579 143 8 12 235 8974 21 4 61 6 73 624 464 51 8 98 42 18 566 837 138 44 5 5 52 75 16 8 683 5 82 8642 2 28 67 63 978 59 9652 128 4668 187 96 751 4254 555 548 298 25 8 73 3238 3228 57 926 99 83 1 379 7497 56 34 98 245 18 76 18 58 881 28 519 7246 83 356 368 738 1 15 79 144 4 62 11 21 792 314 4 855 2 289 96 9 7 57 722 4 1 816 361 49 49 95 39 39 299 556 617 23 484 71 5 4 54 5 65 32 24 127 697 5453 57 72 1 12 16 9 22 9297 9517 92 21 94 9 8 76 3868 4 93 56 44 41 386 49 7 44 42 868 1 76 46 74 53 69 889 26 553 5 9335 6 5 21 3 4 72 584 3 1243 84 8 13 289 538 7563 221 527 28 411 431 8 384 221 314 63 21 24 67 742 8 87 68 76 48 9 6858 2 789 535 68 45 776 4 3328 713 39 69 21 1 632 43 1895 581 74 48 16 464 25 843 86 461 2 37 8826 35 18 77 9171 93 847 17 8 3886 25 3 8 143 82 986 45 3656 695 8 462 4 764 91 738 93 783 892 1 36 85 82 97 17 82 72 94 822 28 6975 5384 9 815 53 44 3218 587 2752 45 79 81 959 1 184 31 979 645 8 2 7 22 21 9 521 25 13 69 925 797 247 8 4 84 47 13 43 91 145 53 582 83 816 71 66 88 1845 74 9577 48 2 22 781 328 1 81 398 28 26 133 58 5 26 978 8 29 466 938 62 83 71 2 99 399 485 7 288 66 3 55 234 23 18 546 849 792 188 52 3 62 24 42 14 9 8 46 358 98 57 79 1468 73 25 38 65 755 41 18 59 622 765 148 251 31 56 353 7 54 58 464 35 3 8 6 64 54 2 771 141 9856 118 453 8852 292 3 64 51 84 4258 11 2263 47 77 26 52 571 4 38 54 57 58 13 38 7 317 89 13 951 339 521 9241 796 63 4 4784 76 338 7 671 6 31 82 155 313 8773 942 2 45 145 54 8 93 452 418 61 77 9 3 4 32 7 545 1 8 66 59 1 3199 79 5 4 1381 4548 69 98 112 2633 83 77 235 6 5 5 9 41 455 76 3833 62 23 5 3 614 96 75 3 765 62 6793 28 8439 297 744 265 33 16 4 2 88 9 64 9 17 75 8 941 3774 12 11 49 5 31 8 73 574 62 96 5 364 7 8 89 8767 2817 44 127 5964 274 4229 29 47 984 27 529 236 7 58 611 86 3797 94 21 72 834 71 76 181 424 63 7 84 3152 247 9 37 23 3 3 8 686 8 749 3912 58 84 21 61 597 166 37 66 6541 52 8 562 4 924 45 99 857 9 14 6 644 23 287 2 68 61 25 77 611 76 88 69 4 2 36 22 5 91 947 848 6 3122 9 33 3258 364 9 191 231 895 962 86 3 423 7 8791 395 52 2 3 5 7 26 19 352 82 7827 9826 29 4 4 48 888 76 6255 1 3 33 735 9 77 67 3255 89 6 766 8273 42 18 838 1 319 237 8 846 978 393 6 157 281 1 84 568 143 38 7 358 13 697 39 96 4 69 11 5 77 43 14 75 6 84 43 3162 3 3 37 3922 821 5 4 5 141 1 97 22 63 3 214 4429 97 1822 5 9289 94 7 284 69 9891 28 922 4 8539 88 6 64 154 573 34 62 28 84 25 54 391 457 45 256 5 1 65 794 9 413 14 85 938 27 24 3236 39 7611 41 19 92 62 784 351 665 2 84 93 7447 28 842 667 26 6 268 45 387 95 297 914 69 925 617 67 214 33 371 16 378 178 532 38 425 799 21 46 315 59 38 2 76 149 8987 89 6 64 45 62 39 74 7756 66 22 5146 4 93 937 822 9 6324 7932 547 44 623 292 89 7287 41 64 2 243 65 3 55 5192 679 833 211 777 999 78 5 96 6 9746 41 633 59 97 36 6747 143 335 64 1 67 77 4 1512 782 1 41 669 257 57 445 77 1 24 46 8 9669 1793 9 69 53 922 21 2 6 8 45 86 72 85 45 371 8 3 47 677 39 189 63 793 6 9 63 489 616 23 72 538 31 46 61 6 532 56 374 4 7839 633 36 46 69 27 51 41 6678 69 6 7631 561 96 86 8 15 4413 85 82 9698 4 467 4 84 55 78 4 212 8364 48 863 598 2 15 387 611 752 64 5898 1895 8 83 261 8 214 44 64 972 79 4935 7 6 433 139 3874 22 317 71 46 981 223 32 18 833 8 37 53 77 1 6 64 933 223 24 111 473 7 86
+788 995 548 18 25 562 387 193 833 474 54 4 131 55 338 986 12 49 772 9 554 31 2 975 187 861 75 44 131 7843 32 775 24 1 24 68 674 13 88 42 76 65 284 522 259 934 89 72 28 688 52 9 878 35 44 3742 5 65 279 24 411 78 8173 385 9997 477 734 341 3958 948 548 7971 676 42 56 469 7787 69 583 11 96 59 793 6634 15 74 951 335 564 95 297 14 644 66 663 8696 25 476 1975 338 3286 9 67 352 68 661 17 12 861 128 4 31 4 644 381 832 3837 2 995 41 15 5 141 49 41 12 53 65 72 437 256 39 157 96 85 8 23 45 51 56 64 471 169 3834 25 34 5 17 98 18 55 268 5725 838 74 56 445 44 66 5645 89 35 324 35 58 994 11 69 793 54 566 27 58 19 72 4783 49 433 71 932 56 321 76 181 56 36 6 96 344 36 5971 14 29 38 284 2684 3893 176 486 74 989 613 316 996 389 565 33 33 777 913 22 829 77 89 36 354 554 2482 151 147 84 31 72 724 39 3854 887 691 94 43 46 545 12 7751 369 15 32 31 921 39 787 72 632 69 4 9894 47 42 619 5613 533 321 31 85 727 872 7 47 938 98 278 16 7418 542 2 256 85 425 14 664 58 46 327 79 564 61 42 4635 31 31 36 778 845 74 4546 8459 169 647 18 7 9753 316 7578 17 94 19 77 18 6984 683 644 731 58 5 48 87 41 43 876 19 796 6 931 815 691 9 79 99 46 134 11 67 911 49 238 6 162 98 47 35 8818 93 4538 73 89 98 116 739 7 45 913 68 82 22 14 89 41 816 3 99 21 997 16 631 824 6 89 462 784 72 8563 33 15 59 848 12 48 325 8893 494 6775 18 517 41 84 64 22 6 4 62 448 58 684 64 3539 848 76 29 23 153 59 555 69 15 939 957 114 95 45 89 6 66 195 431 834 34 51 94 356 72 2 2176 453 3611 993 785 1657 846 6 26 89 84 1422 59 3926 24 17 93 74 841 49 98 847 43 62 69 845 24 628 12 57 162 625 445 569 594 93 26 7683 563 118 2 356 92 85 72 93 989 5377 442 92 69 231 277 5 6617 242 568 21 33 5 44 6 97 7 268 361 1 23 26 817 2891 467 74 34 3111 343 99 65 72 686 45 673 281 81 95 4 52 99 387 83 5385 78 988 776 2 868 53 65 6 263 23 6472 37 2811 599 76 32 29 25 41 6 94 78 35 1 98 91 2 554 2762 94 24 624 42 58 2 348 861 15 99 3 542 16 82 56 4277 5694 52 831 3212 643 3586 39 67 739 76 531 735 6 47 39 867 5165 441 92 331 577 38 31 245 698 474 9 12 3324 819 87 53 953 3897 62 42 856 68 442 1129 14 31 5 81 561 719 95 37 7935 373 98 781 279 163 4 68 562 48 84 86 257 952 539 7 15 3457 46 87 77 126 88 32 9 96 82 82 4 38 29 7 5 9689 8 25 8224 916 92 118 367 977 397 39 345 355 2 4415 284 118 81 81 63 7 62 8233 378 38 1853 8586 38 19 85 87 871 35 4649 6 5 26 618 38 291 36 7923 432 84 899 2342 677 54 21 37 655 531 5 229 742 56 5 288 979 35 41 192 975 5 17 236 66 326 23 89 28 92 38 5 336 31 28 57 74 48 14 4534 6 31 22 188 681 43 57 84 775 441 7 58 34 5 625 615 57 3947 69 4498 94 6 218 18 212 83 778 196 7416 82 87 263 654 383 13 77 8993 698 28 34 978 742 77 635 1 1 29 662 48 357 155 558 45 24 659 5325 72 9526 8 87 36 14 491 39 531 2 12 27 7453 8 6378 634 1891 45 548 31 477 38 96 269 16 143 433 97 661 56 926 31 881 132 974 642 58 279 396 85 899 327 84 2 35 125 2453 38 1 32 13 95 847 337 8952 36 35 6538 2 91 192 624 54 3958 3872 552 3 28 551 36 265 13 38 79 395 432 34 39 9312 3146 454 823 441 856 873 5 81 54 5895 62 757 356 87 69 4458 6364 2616 54 96 41 45 3 6668 449 26 74 643 36 25 573 34 57 366 49 9 738 5147 63 51 561 882 2845 69 58 75 79 798 31 54 34 256 54 78 54 2656 93 716 62 143 9 91 12 87 298 25 63 651 45 31 28 539 361 92 857 99 991 773 68 85 52 64 21 12 8384 23 18 619 313 37 13 9 2 998 19 16 2251 5 5329 2 3773 19 45 74 24 5121 716 913 849 99 265 336 257 496 471 9632 9647 814 77 341 5 585 27 98 951 676 18 554 26 694 127 1854 17 135 99 35 457 218 1284 1499 722 5 426 714 92 54 8 36 532 664 58 471 659 281 89
+187 579 537 41 215 5566 982 287 466 725 8 32 538 81 475 754 527 81 612 83 24 93 21 1222 41 933 417 35 69 3922 55 215 16 81 85 43 744 53 59 757 65 36 861 612 222 269 97 24 25 112 4 69 44 39 7553 711 82 63 3668 79 16 63 2115 271 7794 29 536 43 8752 9 87 1833 435 378 33 959 1828 86 943 28 389 16 994 1517 37 96 946 918 223 84 433 8 828 64 5671 54 24 534 7166 535 6478 6 63 8 46 4291 83 4 543 8363 84 3 83 393 4922 545 4924 3 19 85 38 3 16 766 88 23 87 54 9 41 688 38 578 379 69 527 9 32 38 5 22 132 837 529 42 72 96 274 12 264 549 468 477 868 58 77 274 42 26 81 872 12 855 11 91 311 29 32 1289 922 578 528 22 44 6 9435 42 94 817 886 627 996 538 596 77 48 88 59 253 82 449 42 75 76 395 4311 8155 77 217 87 576 118 578 937 833 152 956 1 1135 7558 4 775 318 61 6 182 587 7765 537 77 93 43 669 66 87 3476 517 3791 25 84 21 57 17 115 655 43 41 16 955 3754 49 7 937 13 8 265 72 44 579 349 194 693 7 21 92 3463 5 88 682 54 491 67 656 749 81 798 95 697 154 355 72 9 4 95 122 93 19 4777 6 31 85 3246 511 111 68 827 448 315 56 3 3717 384 114 79 89 23 9 84 5287 656 433 453 48 16 91 79 49 478 15 76 967 1 4853 17 534 5 218 92 5 269 79 74 33 13 61 9 847 15 46 5 242 14 428 1 189 51 815 211 4 86 68 89 46 21 51 97 29 547 11 45 47 479 65 174 242 84 32 327 819 94 9175 5 78 13 932 86 48 581 9279 852 6516 58 317 14 172 35 59 43 45 9 711 22 863 43 3781 195 89 4 18 763 58 112 64 35 77 956 842 71 56 43 1 76 524 939 669 88 51 32 452 66 9 2897 693 9221 546 22 168 163 58 3 14 19 891 97 164 7 58 93 551 389 96 359 1725 31 56 27 911 55 42 16 29 44 53 769 433 483 85 59 5297 896 338 66 157 83 44 16 15 2937 3168 7 146 93 857 9184 99 9825 918 1 49 49 86 244 35 83 46 179 571 74 87 53 986 864 547 85 38 1858 169 4 81 38 283 36 653 928 686 88 82 366 11 371 77 1372 55 4836 737 29 712 3 28 32 8 86 457 99 7811 97 96 99 48 41 87 3 16 812 42 5 622 48 1 411 1291 41 49 988 352 3595 55 624 187 37 65 88 471 23 326 66 9356 227 6 667 2767 215 415 86 58 79 1 69 819 64 29 57 6367 6383 272 11 562 525 98 58 512 48 7874 44 766 1719 393 24 73 467 2693 68 51 675 18 7 7513 92 19 5 386 782 11 38 11 7527 741 381 35 553 22 5 562 62 38 17 78 529 598 542 36 63 6886 69 69 94 138 53 23 14 28 64 63 5 9 71 5 5 1191 26 129 4931 228 35 876 43 854 1425 246 446 264 423 2513 249 868 442 58 84 4 82 2751 627 4 858 6557 28 62 273 63 573 36 627 21 6 95 54 65 443 49 7726 598 15 264 5747 679 47 8 12 446 811 5 21 35 94 5271 147 27 51 75 79 537 5 42 49 116 756 26 54 855 68 88 124 552 938 53 24 32 762 41 9954 722 323 3 63 67 22 81 86 6 782 5 81 99 92 185 126 166 9528 56 8514 81 53 273 371 949 96 122 458 951 33 451 437 424 758 57 78 3943 363 71 99 366 334 14 72 94 47 9 459 31 14 175 767 66 6 241 3451 753 9386 5 99 76 61 816 35 61 38 75 58 4324 9 5173 243 9383 79 535 51 996 81 77 183 94 242 2159 52 492 63 176 16 292 899 167 841 26 773 1398 17 717 7675 22 32 99 144 8885 9 28 32 87 94 468 657 8978 14 19 425 4 59 425 955 773 127 879 386 2 78 821 39 319 945 4 722 71 2718 76 84 634 5419 226 173 493 266 8184 47 92 27 566 4 681 265 19 723 9879 3166 7343 14 19 81 39 553 844 788 17 53 66 25 91 788 55 737 211 67 9 34 71 24 918 569 726 9139 59 27 98 19 147 98 57 8 495 57 27 95 8263 48 948 56 217 8 24 789 19 955 568 34 57 76 33 17 681 36 18 15 544 278 472 48 74 27 52 15 65 8844 23 93 158 537 532 69 625 3 982 1 85 4676 9 4416 71 2582 35 393 56 79 6412 246 575 191 88 194 346 671 434 964 2564 5162 542 28 182 53 1 34 21 2275 668 7 4429 47 187 445 819 39 426 66 88 484 974 4797 7857 932 84 159 772 87 52 65 16 148 798 897 6 74 8283 79
+65 454 297 88 754 9295 77 83 53 418 6 93 93 6 97 227 392 9 744 74 77 82 25 8638 4 76 464 88 72 4718 33 271 92 83 41 9 879 76 48 543 98 4 434 875 748 167 55 55 1 443 3 71 88 92 6266 8 98 53 6275 95 29 61 8985 623 885 1 612 4 194 7 82 9195 474 516 9 44 182 59 22 27 262 357 142 6259 56 5 744 59 644 5874 913 6 194 55 1514 4 62 277 4258 138 1439 8 89 2 31 7565 35 2 9 8926 94 9 13 552 3389 662 4188 6 86 36 879 4 27 659 36 57 5 3 9 1 33 64 19 761 97 449 9 43 16 9 94 72 6 117 32 38 71 198 8 446 223 7 1 858 75 47 537 74 99 4 617 45 723 9 69 17 62 71 3667 637 768 989 59 77 4 1477 18 44 4366 94 651 4 416 788 67 93 88 45 6 456 9 35 17 89 22 7476 374 36 451 9 83 26 887 634 4 228 188 9 9945 8259 3 187 949 9 5 239 343 6 685 16 32 19 857 7 51 697 77 6954 14 23 84 1 4 437 98 48 15 71 65 1573 76 3 533 73 9 95 16 26 284 16 462 961 3 29 4 5951 83 35 742 6 389 81 843 987 41 738 16 71 232 43 78 5 7 11 695 38 49 2121 7 55 11 7889 41 432 2 85 217 292 91 7 15 744 11 35 37 79 9 82 9216 125 7 563 41 69 63 28 3 1996 58 52 682 2 4835 5 251 93 355 35 1 166 71 28 53 74 1 3 47 76 527 6 55 94 312 5 333 17 967 28 41 6 3 8 3 33 34 91 5 655 75 14 37 131 49 7681 792 12 32 8 183 49 9429 8 53 213 57 38 82 545 9797 473 3187 65 711 61 546 3 11 76 45 7 999 99 456 25 8476 931 89 6 848 228 7 744 81 4 47 855 762 553 16 4 16 41 947 464 7163 61 45 12 787 58 28 1361 275 5877 539 28 52 329 57 9 59 33 276 96 19 9 5 991 918 6 33 627 3711 22 19 2 464 81 93 21 25 4 38 82 792 74 14 158 8876 443 15 37 755 44 37 61 84 7225 36 2 375 64 22 4889 19 5551 41 1 63 6 248 6556 83 14 633 166 856 64 74 59 986 5 868 14 31 39 44 3 11 91 571 56 759 574 837 31 97 454 64 61 87 2 1 8577 714 75 71 7 35 27 6 2 9 77 2378 82 9 3 69 31 76 18 81 334 51 13 688 31 48 776 1894 767 4 184 889 7765 13 892 59 47 7 895 4 26 529 2 17 84 2 492 8139 77 2 87 12 1 5 66 9 92 99 9 1718 983 471 3 979 94 12 52 5 43 6319 31 834 791 677 99 12 413 9615 46 11 23 73 4 8 55 57 8 277 162 47 97 63 766 755 676 1 478 4 8 687 86 67 1 74 39 543 523 456 3 6672 32 9 7 951 2 59 13 29 54 43 63 7 64 7 66 5296 97 944 13 52 72 89 68 89 2132 249 119 381 877 96 475 674 976 911 42 48 89 2392 9 2 717 664 4 31 367 42 18 78 95 39 873 779 5 36 359 92 2722 156 73 69 54 599 59 1 149 893 217 72 4 53 1 1164 336 82 42 7 7 842 9 46 14 625 54 4 32 168 5 83 938 3565 487 17 83 615 311 64 19 147 611 5 34 21 75 18 29 3 561 3 24 83 41 121 682 865 7557 86 862 38 616 29 662 775 41 349 294 85 4 3585 969 6 9 9 39 9955 145 29 8 274 9 6 73 22 157 5 81 41 23 179 588 72 8 692 793 612 3636 2 15 8 5 945 75 91 97 58 77 25 7 2646 929 2993 31 91 94 7 3 78 598 35 77 1872 92 56 22 855 19 43 386 43 627 86 184 3264 1 913 4862 19 446 4 2 337 8 58 34 3 46 198 691 4 36 44 965 33 29 64 73 534 933 71 776 2 8 655 31 393 843 7 867 37 5653 63 98 7 3256 312 63 75 3 8697 36 44 64 176 3 6 846 71 978 116 4227 9272 92 78 9 5 314 11 631 486 57 3 84 95 57 49 537 998 48 47 3 1 86 498 278 323 5927 41 84 15 33 783 8 21 9 22 67 23 81 7954 27 873 28 3 18 27 242 3 191 461 46 2 99 18 65 563 6 29 47 921 8 8 4 38 56 55 93 62 21 49 63 36 134 211 31 262 6 76 5 34 3434 44 9546 38 5679 9 362 32 18 33 467 549 136 15 388 656 157 373 889 695 7981 569 35 686 45 8 53 55 3467 7694 7 7842 38 743 289 95 17 873 11 13 616 42 8844 6578 999 37 728 237 55 52 26 13 74 33 466 1 1 2513 98
++ * * * + + * * * * + + * * + * * * * * * * * + * * * * * + * + + * + * * + * * * + + * * + * + * + * * * + + + * + + + + + + + + + * * + * + + * * * + + * + + * + + + * * * * * + + * * * + + + * + + + * * + * + * * + + * + + * + * + + + * * + + + + * + * * + + + + + * + * + + * * * + + * * * * + * * + + + + + + + + + * * * + + * * * + * * + + + * + * * + + * + + + * + * * + * + * * * * + + + * + * * * + * * * * + + * + * * * + * + * * * * * + * + * + * + * + + + * * * * + + * + + * + + + * + + * * * * + + * + + + * * + + * * * * * * * + * * * + * + + * * + * * + + * * + + + * + * * * * * + * * + * * + + + + * * * * + * * + + * * * + + * + + * * + + * + + + + * * * + * * + + + + + + + * * + + * + + * * + + * * + + * + * * + * + * + + + * + * + + * + * * * * + * + * + + * * * * * + * * + * * * * + + + * * * * * + + + * * + + * * + + + + + * * * + + * + + + + * * + * * * * * + + * + * + + + + + * + * + + + * * + + + + + + * * * * + * + + + * + * * * + + * * + + * * * + + + * * * * * + * * + * + + * * + * * * * + * + * + * * * + * + + * * + + * * + + * * * + + * + * * * + * * + + + * * + * + * * + + * * * * * + + * * + + + + * * + + * + + + + * + * * * + + + * * + * * + + * + * * + + * * + * + * + * * * + + + * + + * * + * + * * * * * + + + * * + + * * * + + + * + * + * * + * * * + + * + + + * + + + * * + * * * + * + + + * * * + * + * * + * * + + + + + * + * + * * + * * * * + + * * * + * * * * + * + * * * + * + * * * * * * * * + + * + * + + * * + + * + * + + + + * * + * + * + * * * * + * + + + + * + * * * * + * + + + * * + + * + * * + + + * + * + * * * * + + * + * + + * + * + + * * + + * + + + + + * + + * + * * * + + * + + * * + + * + + * + + + * + + * * * + + * + + * * * * + * + * + * * + * + + + + * * * * * + + * + + * * + + * + * + + + * + + * + + * + * + * + * + * + * + * * + + * * * * * * + * * * * + * + + + + + + * * + * + + + + + * * * + * + * * + * + + + + * + + + + + * * * * * * * + + * * * + * + * + + + + + + + + * * + * * * + + + * * + + * * * * + + + * + + \ No newline at end of file
diff --git a/input/6/example.txt b/input/6/example.txt
new file mode 100644
index 0000000..337b837
--- /dev/null
+++ b/input/6/example.txt
@@ -0,0 +1,4 @@
+123 328 51 64
+ 45 64 387 23
+ 6 98 215 314
+* + * +
diff --git a/input/7/1.txt b/input/7/1.txt
new file mode 100644
index 0000000..43c81ba
--- /dev/null
+++ b/input/7/1.txt
@@ -0,0 +1,142 @@
+......................................................................S......................................................................
+.............................................................................................................................................
+......................................................................^......................................................................
+.............................................................................................................................................
+.....................................................................^.^.....................................................................
+.............................................................................................................................................
+....................................................................^...^....................................................................
+.............................................................................................................................................
+...................................................................^.^...^...................................................................
+.............................................................................................................................................
+..................................................................^.....^.^..................................................................
+.............................................................................................................................................
+.................................................................^.^.^.^.^.^.................................................................
+.............................................................................................................................................
+................................................................^.^.^...^.^.^................................................................
+.............................................................................................................................................
+...............................................................^.^.^.^.^.^.^.^...............................................................
+.............................................................................................................................................
+..............................................................^.^.^.^.^.....^.^..............................................................
+.............................................................................................................................................
+.............................................................^.^.^.^.^.^.^.^.^.^.............................................................
+.............................................................................................................................................
+............................................................^.^.....^.^.^.^.^.^.^............................................................
+.............................................................................................................................................
+...........................................................^...^.^...^.^.^...^.^.^...........................................................
+.............................................................................................................................................
+..........................................................^.^.^.^.^.^...^.^.^...^.^..........................................................
+.............................................................................................................................................
+.........................................................^...^.....^.^...^.^.^.^.^.^.........................................................
+.............................................................................................................................................
+........................................................^.^...^.^...^.^.^.^.^.^...^.^........................................................
+.............................................................................................................................................
+.......................................................^...^.^...^.^...^.^...^.....^.^.......................................................
+.............................................................................................................................................
+......................................................^...^...^.^...^.^.^.^.^.^.^.^...^......................................................
+.............................................................................................................................................
+.....................................................^.^.^.^.^.^.^...^.^.^.^...^.^.^.^.^.....................................................
+.............................................................................................................................................
+....................................................^.^.^...^.^...^.^...^.^.^.^.^.^.^...^....................................................
+.............................................................................................................................................
+...................................................^.^.^.^.^.^.^...^.^.^.^.^.^.....^.^.^.^...................................................
+.............................................................................................................................................
+..................................................^.^...^.^.^.....^...^...^.^...^.^...^...^..................................................
+.............................................................................................................................................
+.................................................^.......^.^.^.....^.^.^.^.^.^.^.^...^...^.^.................................................
+.............................................................................................................................................
+................................................^...^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^................................................
+.............................................................................................................................................
+...............................................^.^.....^.^.^.^...^.^.^.^.^...^...^...^.^.....^...............................................
+.............................................................................................................................................
+..............................................^...^...^.^.^...^...^.....^.^.......^.....^.....^..............................................
+.............................................................................................................................................
+.............................................^.^.^.....^.^.....^.^.....^.......^.^.^.^.^.^.^.^.^.............................................
+.............................................................................................................................................
+............................................^.^.....^.^.^.........^.^...^.^...^...^.^.^.^...^...^............................................
+.............................................................................................................................................
+...........................................^.^.....^.......^.^.^...^.^.^.^.^.^.^.....^...^.^...^.^...........................................
+.............................................................................................................................................
+..........................................^.^.....^.^.^.^...^.^...^.^.^.^.^.^.^.....^.^.^...^...^.^..........................................
+.............................................................................................................................................
+.........................................^.^.....^.^.......^.........^.^.^.^...^.^.^.^...^.^.....^.^.........................................
+.............................................................................................................................................
+........................................^.^.^.^...^...^...^.^.^.^.^.^.^.^.^.^...^.....^.^.^.^.^.^...^........................................
+.............................................................................................................................................
+.......................................^.....^.^.^.......^.^...^.....^.^.^...^...^.^.^.^.^.^.^.^.^...^.......................................
+.............................................................................................................................................
+......................................^.^.....^...^.^.^.^.^...^.^.^.....^.^.....^.^.^.^.^...^.^.^.^...^......................................
+.............................................................................................................................................
+.....................................^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^...^.^.........^.^.^.....................................
+.............................................................................................................................................
+....................................^.^.^.^.^.^.^.^.^.....^.^.^...^...^...^.^.....^.^.^...^.^...^...^.^.^....................................
+.............................................................................................................................................
+...................................^.^.....^.^.^...^...^.^...^...^.......^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^...................................
+.............................................................................................................................................
+..................................^.^.^.^.^.^.^.^.^.^...^.^...^...^.^.^.^.^.^.^.^.....^.^.^...^.....^.^...^..................................
+.............................................................................................................................................
+.................................^.^.^.^.......^...^.^.^...^.^.^.....^.^...^.^.^.^...^.^.^.^...^.^.^.^...^.^.................................
+.............................................................................................................................................
+................................^.^.^.........^.^...^.^...^.^.^.^.^...^.^...^.^.....^...^.^.^...^...^.^...^.^................................
+.............................................................................................................................................
+...............................^.....^.^.....^.^.^.^.....^.^.^.^.^.^.^.^.^.....^.....^.^...^.....^.^.^.^.^.^.^...............................
+.............................................................................................................................................
+..............................^.^.^.^.^.^.....^.^.^.^.^.....^.^.^.^.^.^.....^...^.^...^.^.^.^.^.^.^...^.^.^...^..............................
+.............................................................................................................................................
+.............................^...^...^.^.^.^...^.^.......^.^...^...^.^...^.^.^.^...^...^.^.^.....^.^.^...^.^.^.^.............................
+.............................................................................................................................................
+............................^...^.^...^.^.^.^...^.^...^...........^.^.^.^.^.^.....^.^.^.^.^.^.^.^.^...^.....^.^.^............................
+.............................................................................................................................................
+...........................^.^...^.^.^...^.^.^.^.^.^.^.^.....^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^...........................
+.............................................................................................................................................
+..........................^.^.^...^.^...^.^.^...^...^.^.^.^.^...^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^...^.^.^.....^.^.^..........................
+.............................................................................................................................................
+.........................^...^...^.^.^.^.^...^...^.......^.^...^.^...^.^.^...^.^.^.^...^.^.^.^...^.^...^.^...^.^.^.^.........................
+.............................................................................................................................................
+........................^.^.^.^.^.^.^...^...^.^.^...^.^.^.^.^.^...^...^...^.^.^.....^.^...^.^...^.^.^.^.^.......^.^.^........................
+.............................................................................................................................................
+.......................^.^.^.^.^.^.^.^.........^.^.^.^...^.^...^...^.^.^.^.^...^.^...^.^.^...^...^.^.^.^...^.^.^.^...^.......................
+.............................................................................................................................................
+......................^.^.^.^.......^.^.^.^.^...^...^...^.^.^...^.....^.^.^...........^.^.^.^.^...^.^.^.^.^.^.^...^.^.^......................
+.............................................................................................................................................
+.....................^.^.^...^...^...^.........^...^.^...^.^.^...^.^.^.^...^.^.^...^.^...^...^...^...^.^.^.....^.^.^...^.....................
+.............................................................................................................................................
+....................^.^.^.....^.^.^...^...^.^.^.^.^.^.^.^.^.^.^.....^...........^...^.^.^.^.^.^.^...^.....^.^...^...^.^.^....................
+.............................................................................................................................................
+...................^.....^.....^.......^.^.^.^.^.^.^.^.^.^.....^.^.^.^.^.^.......^...^.^.^...^.^.^.^.^.^.^.^.^.....^.^...^...................
+.............................................................................................................................................
+..................^.^.^...^.^.^.^.^...^.^.^...^.^.^.^.^.^.^.^.^...^.^.^.^.^...^...^...^.^.^.^.^...^.^...^...^.^.^...^...^.^..................
+.............................................................................................................................................
+.................^.^.^.^.^.^...^.^.^.^.^.^...^.^.^.^.^...^.......^...^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^...^.^.^.^...^...^.^.^.................
+.............................................................................................................................................
+................^...^.^.^.^.^...^...^.^...^...^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^...^.^.^.^.^.....^.^.^.^.^.^................
+.............................................................................................................................................
+...............^.....^.^.^.^.^.......^.^.^...^.^.^.^.^.^...^.^.^.^.^.....^.^.^.....^.^.^.^...^.....^.^.^...^.^...^.^.^.^.^...^...............
+.............................................................................................................................................
+..............^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^...^.^...^.^.......^.^.^.^.....^...^.........^.....^...^.^.^.^.^...^.^.^.^.^..............
+.............................................................................................................................................
+.............^.^.^...^.....^.....^...^.^...^.^...^.^.^.^.^.^.^.^...^.^.^...^.^...^.....^.^.^.^.^.^...^.^...^.^...^.^.^.^.^.....^.............
+.............................................................................................................................................
+............^.^.^...^.^.^.^.^.^.^...^.^...^...^.^.^.^.^.^...^...^.^.^.^...^.^.^.^.....^.....^.^...^...^...^.^.^.^.^.^.......^.^.^............
+.............................................................................................................................................
+...........^...^.^...^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^...........^.^...^.^...^...^.^.^.^.^.^...^.....^.......^.^.^.^...^...^.^...........
+.............................................................................................................................................
+..........^.^.^.^...^...^...^.^.^.....^.^...^.^.^.^...^.^...^.^.^.^...^.^.....^.^...^.^.^.^...^.^.^.^.^...^...^.^.^.^.^.^...^.^.^.^..........
+.............................................................................................................................................
+.........^.....^...^.^...^.^.^.^.^.^.^...^.^...^.^.^.^.^...^...^.......^.^...^.^.^.^.^.^.^.....^...^.....^.^.^.^.^.^.^.^.^...^.^.^.^.........
+.............................................................................................................................................
+........^.^.^.^.^...^...^.^.^...^.^.^.^...^.^.^.^...^.^...^.^.^.^.....^.^.^.^.....^.^.^.....^.^.^.^...^.^...^.....^.^.^.^.^.^...^.^.^........
+.............................................................................................................................................
+.......^.^.......^.....^.^.^.^...^.^.^.^.^...^.....^.^.^.^.^.^.^.^.^.^...^.....^...^.^...^.^.^.^...^.^.^.......^.^...^.........^.^.^.^.......
+.............................................................................................................................................
+......^.^...^.....^.^.^.^...^.^.^.^.^.^...^.......^.....^.^.....^.^.^...^.^.^.^...^.^.^.^.^...^.^.^.^.^...^.^.^.^.....^.....^.^.^.^.^.^......
+.............................................................................................................................................
+.....^.^.^.^.....^...^.^.^.^.^.....^...^.^...^.^.^.^...^.^.^.....^.^...^...^.^.^.^.....^.^.......^...^...^.^.......^.....^.^...^.^.^.^.^.....
+.............................................................................................................................................
+....^.^.....^.^.^.^...^.^.....^.....^.^.^.^.^.^.^.^.^.^.....^.^.^.^.^...^.^.^.^...^.^.^.^.^.^...^...^...^.^.^...^.....^...^...^...^.....^....
+.............................................................................................................................................
+...^...^.^.^.^.^...^...^.^.^.^.^...^.^.^...^.^.^.^...^...^.^.^.^...^...^...^...^.^.^.^.^.........^.....^...^.^...^.........^.^.^...^...^.^...
+.............................................................................................................................................
+..^.^.....^.^.^.......^...^.^.^...^.^.....^.^...^.^...^.....^.^.....^.^.^...^...^.^.^...^.^.....^.....^...^...^.^.^...^.^.^.^.^...^.^.^.^.^..
+.............................................................................................................................................
+.^.^.^.^.^.^.^...^.^...^.^...^.^.....^.....^.^.^.^.^.^.^.^.^...^.^...^...^.....^.^.^.^.^...^.^.^.^...^.^.^.^.^.^.......^.^...^.^.^.^.^...^.^.
+.............................................................................................................................................
diff --git a/input/7/example.txt b/input/7/example.txt
new file mode 100644
index 0000000..57a2466
--- /dev/null
+++ b/input/7/example.txt
@@ -0,0 +1,16 @@
+.......S.......
+...............
+.......^.......
+...............
+......^.^......
+...............
+.....^.^.^.....
+...............
+....^.^...^....
+...............
+...^.^...^.^...
+...............
+..^...^.....^..
+...............
+.^.^.^.^.^...^.
+...............
diff --git a/prepare b/prepare
new file mode 100755
index 0000000..fc35462
--- /dev/null
+++ b/prepare
@@ -0,0 +1,11 @@
+#!/bin/sh
+set -e
+if [ -z "$(command -v zig)" ]; then
+ echo "Install zig v0.15.2"
+ exit 1
+fi
+if [[ "$(zig version)" != "0.15.2" ]]; then
+ echo "Zig version is not 0.15.2. Let's hope this compiles."
+fi
+zig build -Doptimize=ReleaseFast
+echo "Success"
diff --git a/run b/run
new file mode 100755
index 0000000..81221d0
--- /dev/null
+++ b/run
@@ -0,0 +1,3 @@
+#!/bin/sh
+set -e
+./zig-out/bin/aoc2025 "${1}" "${2}" < "${3}"
diff --git a/src/day01.zig b/src/day01.zig
new file mode 100644
index 0000000..2010816
--- /dev/null
+++ b/src/day01.zig
@@ -0,0 +1,72 @@
+const std = @import("std");
+const print = std.debug.print;
+
+pub fn solve(part: []u8, reader: *std.Io.Reader, _: std.mem.Allocator) !void {
+ if (std.mem.eql(u8, part, "1")) {
+ try part1(reader);
+ } else {
+ try part2(reader);
+ }
+}
+
+fn part1(reader: *std.Io.Reader) !void {
+ var pos: i32 = 50;
+ var zero: usize = 0;
+ while (reader.takeDelimiterInclusive('\n')) |line| {
+ if (line.len == 0){
+ break;
+ }
+
+ const numSlice = std.mem.trimRight(u8, line[1..], &[_]u8{'\n'});
+ const rotations = try std.fmt.parseInt(i32, numSlice, 10);
+ if (line[0] == 'R') {
+ pos += rotations;
+ } else if (line[0] == 'L'){
+ pos -= rotations;
+ }
+
+ pos = @mod(pos, 100);
+
+ if (pos == 0) {
+ zero += 1;
+ }
+
+ } else |_| {
+ }
+
+ print("{d}\n", .{zero});
+}
+
+fn part2(reader: *std.Io.Reader) !void {
+ var pos: i32 = 50;
+ var zero: i32 = 0;
+ while (reader.takeDelimiterInclusive('\n')) |line| {
+ if (line.len == 0){
+ break;
+ }
+
+ const numSlice = std.mem.trimRight(u8, line[1..], &[_]u8{'\n'});
+ var rotations = try std.fmt.parseInt(i32, numSlice, 10);
+
+ zero += @divFloor(rotations, 100);
+ rotations = @rem(rotations, 100);
+
+ if (line[0] == 'L'){
+ rotations *= -1;
+ }
+
+ const with_rotations: i32 = pos + rotations;
+ const new: i32 = @mod(with_rotations, 100);
+
+
+ if ((new != with_rotations and pos != 0) or new == 0){
+ zero += 1;
+ }
+
+ pos = new;
+
+
+ } else |_| {}
+
+ print("{d}\n", .{zero});
+}
diff --git a/src/day02.zig b/src/day02.zig
new file mode 100644
index 0000000..f764589
--- /dev/null
+++ b/src/day02.zig
@@ -0,0 +1,78 @@
+const std = @import("std");
+const print = std.debug.print;
+
+pub fn solve(part: []u8, reader: *std.Io.Reader, _: std.mem.Allocator) !void {
+ if (std.mem.eql(u8, part, "1")) {
+ try part1(reader);
+ } else {
+ try part2(reader);
+ }
+}
+
+fn digits(number: usize) usize {
+ var value = number;
+ var n: usize = 0;
+ while (value != 0) : (value /= 10) {
+ n += 1;
+ }
+ return n;
+}
+
+fn part1(reader: *std.Io.Reader) !void {
+ var output: usize = 0;
+ while (reader.takeDelimiter(',')) |line| {
+ const trimmed = std.mem.trimRight(u8, line.?, &[_]u8{'\n'});
+ if (trimmed.len == 0) break;
+ var split = std.mem.splitScalar(u8, trimmed, '-');
+ var start = try std.fmt.parseInt(usize, split.next().?, 10);
+ const end = try std.fmt.parseInt(usize, split.next().?, 10);
+ while (start <= end): (start += 1) {
+ const n = digits(start);
+ if (n % 2 == 0 and start % std.math.pow(usize, 10,n/2) == start / std.math.pow(usize, 10,n/2)) {
+ output += start;
+ start += std.math.pow(usize, 2,n/2);
+ }
+ }
+
+ } else |_| {
+ }
+ print("{d}\n", .{output});
+}
+
+fn part2(reader: *std.Io.Reader) !void {
+ var output: usize = 0;
+ while (reader.takeDelimiter(',')) |line| {
+ const trimmed = std.mem.trimRight(u8, line.?, &[_]u8{'\n'});
+ if (trimmed.len == 0) break;
+ var split = std.mem.splitScalar(u8, trimmed, '-');
+ var start = try std.fmt.parseInt(usize, split.next().?, 10);
+ const end = try std.fmt.parseInt(usize, split.next().?, 10);
+ while (start <= end): (start += 1) {
+ const n = digits(start);
+ for (1..n) |i| {
+ if (n % i == 0) {
+ const p: usize = std.math.pow(usize, 10,i);
+ if (start % p != 0) {
+ const div = start / (start % p);
+ var c: usize = 0;
+
+ for (0..n/i - 1) |_| {
+ c *= p;
+ c += p;
+ }
+ c += 1;
+
+ if (div == c){
+ output += start;
+ start += std.math.pow(usize, 2, n/2);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ } else |_| {
+ }
+ print("{d}\n", .{output});
+}
diff --git a/src/day03.zig b/src/day03.zig
new file mode 100644
index 0000000..c91e60a
--- /dev/null
+++ b/src/day03.zig
@@ -0,0 +1,83 @@
+const std = @import("std");
+const print = std.debug.print;
+
+pub fn solve(part: []u8, reader: *std.Io.Reader, _: std.mem.Allocator) !void {
+ if (std.mem.eql(u8, part, "1")) {
+ try part1(reader);
+ } else {
+ try part2(reader);
+ }
+}
+
+
+fn part1(reader: *std.Io.Reader) !void {
+ var output: usize = 0;
+ while (reader.takeDelimiter('\n')) |line| {
+ if (line.?.len == 0){
+ break;
+ }
+
+ var max1: usize = 0;
+ var in1: usize = 0;
+ var max2: usize = 0;
+
+ for (line.?, 0..) |b, index| {
+ const value: u8 = b - '0';
+ if (value > max1) {
+ max2 = max1;
+ max1 = value;
+ in1 = index;
+ } else if (value > max2) {
+ max2 = value;
+ }
+ }
+
+ if (in1 < line.?.len - 1){
+ max2 = 0;
+ for (line.?[in1 + 1..]) |b| {
+ const value: u8 = b - '0';
+ if (value > max2) {
+ max2 = value;
+ }
+ }
+ output += max1 * 10 + max2;
+ } else {
+ output += max2 * 10 + max1;
+ }
+
+ } else |_| {
+ }
+ print("{d}\n", .{output});
+}
+
+fn part2(reader: *std.Io.Reader) !void {
+ var output: usize = 0;
+ while (reader.takeDelimiter('\n')) |line| {
+ var joltage: usize = 0;
+ if (line.?.len == 0){
+ break;
+ }
+
+
+ var last_index: usize = 0;
+ for (0..12) |i| {
+ var max: usize = 0;
+ var max_index: usize = 0;
+ for (line.?[last_index .. line.?.len - 11 + i], 0..) |b, index| {
+ const value: u8 = b - '0';
+ if (value > max) {
+ max = value;
+ max_index = index;
+ }
+ }
+
+ last_index += max_index + 1;
+ joltage *= 10;
+ joltage += max;
+ }
+ output += joltage;
+
+ } else |_| {
+ }
+ print("{d}\n", .{output});
+}
diff --git a/src/day04.zig b/src/day04.zig
new file mode 100644
index 0000000..5d7b455
--- /dev/null
+++ b/src/day04.zig
@@ -0,0 +1,99 @@
+const std = @import("std");
+const print = std.debug.print;
+
+pub fn solve(part: []u8, reader: *std.Io.Reader, allocator: std.mem.Allocator) !void {
+ if (std.mem.eql(u8, part, "1")) {
+ try part1(reader, allocator);
+ } else {
+ try part2(reader, allocator);
+ }
+}
+
+
+fn part1(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void {
+ var output: usize = 0;
+ var list = try std.ArrayList([]u8).initCapacity(allocator, 0);
+ defer list.deinit(allocator);
+
+ while (reader.takeDelimiter('\n')) |line| {
+ if (line == null){
+ break;
+ }
+
+ try list.append(allocator, line.?);
+ } else |_| {
+
+ }
+
+
+ for (list.items,0..) |row, y| {
+ for (row,0..) |item,x| {
+ if (item != '@'){
+ continue;
+ }
+
+ var adjacent: usize = 0;
+ if (y > 0 and x > 0 and list.items[y - 1][x - 1] == '@') adjacent += 1;
+ if (y > 0 and list.items[y - 1][x] == '@') adjacent += 1;
+ if (y > 0 and x < row.len - 1 and list.items[y - 1][x + 1] == '@') adjacent += 1;
+ if (x > 0 and list.items[y][x - 1] == '@') adjacent += 1;
+ if (x < row.len - 1 and list.items[y][x + 1] == '@') adjacent += 1;
+ if (y < list.items.len - 1 and x > 0 and list.items[y + 1][x - 1] == '@') adjacent += 1;
+ if (y < list.items.len - 1 and list.items[y + 1][x] == '@') adjacent += 1;
+ if (y < list.items.len - 1 and x < row.len - 1 and list.items[y + 1][x + 1] == '@') adjacent += 1;
+
+ if (adjacent < 4){
+
+ output += 1;
+ }
+ }
+ }
+
+ print("{d}\n", .{output});
+}
+
+fn part2(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void {
+ var output: usize = 0;
+ var list = try std.ArrayList([]u8).initCapacity(allocator, 0);
+ defer list.deinit(allocator);
+
+ while (reader.takeDelimiter('\n')) |line| {
+ if (line == null){
+ break;
+ }
+
+ try list.append(allocator, line.?);
+ } else |_| {
+
+ }
+
+
+ var previous_output: usize = 1;
+ while (output != previous_output) {
+ previous_output = output;
+ for (list.items,0..) |row, y| {
+ for (row,0..) |item,x| {
+ if (item != '@'){
+ continue;
+ }
+
+ var adjacent: usize = 0;
+ if (y > 0 and x > 0 and list.items[y - 1][x - 1] == '@') adjacent += 1;
+ if (y > 0 and list.items[y - 1][x] == '@') adjacent += 1;
+ if (y > 0 and x < row.len - 1 and list.items[y - 1][x + 1] == '@') adjacent += 1;
+ if (x > 0 and list.items[y][x - 1] == '@') adjacent += 1;
+ if (x < row.len - 1 and list.items[y][x + 1] == '@') adjacent += 1;
+ if (y < list.items.len - 1 and x > 0 and list.items[y + 1][x - 1] == '@') adjacent += 1;
+ if (y < list.items.len - 1 and list.items[y + 1][x] == '@') adjacent += 1;
+ if (y < list.items.len - 1 and x < row.len - 1 and list.items[y + 1][x + 1] == '@') adjacent += 1;
+
+ if (adjacent < 4){
+ list.items[y][x] = '.';
+ output += 1;
+ }
+ }
+ }
+ }
+
+ print("{d}\n", .{output});
+}
diff --git a/src/day05.zig b/src/day05.zig
new file mode 100644
index 0000000..2f971f9
--- /dev/null
+++ b/src/day05.zig
@@ -0,0 +1,107 @@
+const std = @import("std");
+const print = std.debug.print;
+
+pub fn solve(part: []u8, reader: *std.Io.Reader, allocator: std.mem.Allocator) !void {
+ if (std.mem.eql(u8, part, "1")) {
+ try part1(reader, allocator);
+ } else {
+ try part2(reader, allocator);
+ }
+}
+
+const Range = struct { start: usize, end: usize };
+
+fn part1(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void {
+ var output: usize = 0;
+
+ var ranges = try std.ArrayList(Range).initCapacity(allocator, 0);
+ defer ranges.deinit(allocator);
+
+ while (reader.takeDelimiter('\n')) |line| {
+ if (line == null or line.?.len == 0){
+ break;
+ }
+
+ var split = std.mem.splitScalar(u8, line.?, '-');
+ const start = try std.fmt.parseInt(usize, split.next().?, 10);
+ const end = try std.fmt.parseInt(usize, split.next().?, 10);
+
+ try ranges.append(allocator, Range{ .start=start, .end=end});
+
+ } else |_| {}
+
+ while (reader.takeDelimiter('\n')) |line| {
+ if (line == null) {
+ break;
+ }
+
+ const id = try std.fmt.parseInt(usize, line.?, 10);
+
+ for(ranges.items) |range| {
+ if (id >= range.start and id <= range.end) {
+ output += 1;
+ break;
+ }
+ }
+
+ } else |_| {}
+
+ print("{d}\n", .{output});
+}
+
+fn cmp(_: void, a: Range, b: Range) bool {
+ return a.start < b.start;
+}
+
+fn part2(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void {
+ var output: usize = 0;
+
+ var ranges = try std.ArrayList(Range).initCapacity(allocator, 0);
+ defer ranges.deinit(allocator);
+
+ while (reader.takeDelimiter('\n')) |line| {
+ if (line == null or line.?.len == 0){
+ break;
+ }
+
+ var split = std.mem.splitScalar(u8, line.?, '-');
+ const start = try std.fmt.parseInt(usize, split.next().?, 10);
+ const end = try std.fmt.parseInt(usize, split.next().?, 10);
+
+ try ranges.append(allocator, Range{ .start=start, .end=end});
+
+ } else |_| {}
+
+
+ std.mem.sort(Range,ranges.items, {}, cmp);
+
+ var more = try std.ArrayList(Range).initCapacity(allocator, 0);
+ defer more.deinit(allocator);
+
+ outer: for (ranges.items) |r| {
+
+ const start = r.start;
+ const end = r.end;
+
+ for (more.items) |*range| {
+ if (start >= range.start and start <= range.end) {
+ if (end > range.end){
+ range.end = end;
+ }
+ continue :outer;
+ } else if (start < range.start and end >= range.start) {
+ range.start = start;
+ continue :outer;
+ }
+ }
+
+ try more.append(allocator, Range{ .start=start, .end=end});
+
+ }
+
+ for (more.items) |range| {
+ output += range.end - range.start + 1;
+ }
+
+ print("{d}\n", .{output});
+}
diff --git a/src/day06.zig b/src/day06.zig
new file mode 100644
index 0000000..4105800
--- /dev/null
+++ b/src/day06.zig
@@ -0,0 +1,100 @@
+const std = @import("std");
+const print = std.debug.print;
+
+pub fn solve(part: []u8, reader: *std.Io.Reader, allocator: std.mem.Allocator) !void {
+ if (std.mem.eql(u8, part, "1")) {
+ try part1(reader, allocator);
+ } else {
+ try part2(reader, allocator);
+ }
+}
+
+fn part1(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void {
+ var output: usize = 0;
+ var problems = try std.ArrayList(std.ArrayList(usize)).initCapacity(allocator, 0);
+ defer problems.deinit(allocator);
+
+ while (reader.takeDelimiter('\n')) |line| {
+ if (line == null) {
+ break;
+ }
+
+ var split = std.mem.splitScalar(u8, line.?, ' ');
+ var n: usize = 0;
+ while(split.next()) |part| {
+ if (part.len > 0){
+
+ if (part[0] == '+') {
+ for(problems.items[n].items) |number| {
+ output += number;
+ }
+ problems.items[n].deinit(allocator);
+ } else if (part[0] == '*') {
+ var tmp: usize = 1;
+ for(problems.items[n].items) |number| {
+ tmp *= number;
+ }
+ output += tmp;
+ problems.items[n].deinit(allocator);
+ } else {
+ const number = try std.fmt.parseInt(usize, part, 10);
+
+ if (n >= problems.items.len) {
+ try problems.append(allocator, try std.ArrayList(usize).initCapacity(allocator, 0));
+ }
+
+ try problems.items[n].append(allocator, number);
+ }
+
+ n += 1;
+ }
+ }
+
+ } else |_| {}
+
+ print("{d}\n", .{output});
+}
+
+
+fn part2(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void {
+ var output: usize = 0;
+ var problems = try std.ArrayList([]u8).initCapacity(allocator, 0);
+ defer problems.deinit(allocator);
+
+ while (reader.takeDelimiter('\n')) |line| {
+ if (line == null) {
+ break;
+ }
+
+ try problems.append(allocator, line.?);
+ } else |_| {}
+
+
+ var n: usize = 0;
+ var accum: usize = 1;
+ var operator = problems.items[problems.items.len - 1][0];
+ while(n < problems.items[0].len) {
+ var number: usize = 0;
+ for (0..problems.items.len - 1) |i| {
+ if (problems.items[i][n] != ' ') {
+ number *= 10;
+ number += problems.items[i][n] - '0';
+ }
+ }
+
+ n += 1;
+ if (number == 0) {
+ if (operator == '*') {
+ output += accum;
+ }
+ operator = problems.items[problems.items.len - 1][n];
+ accum = 1;
+ } else if (operator == '+') {
+ output += number;
+ } else {
+ accum *= number;
+ }
+ }
+
+ print("{d}\n", .{output});
+}
diff --git a/src/day07.zig b/src/day07.zig
new file mode 100644
index 0000000..620aaa3
--- /dev/null
+++ b/src/day07.zig
@@ -0,0 +1,88 @@
+const std = @import("std");
+const print = std.debug.print;
+
+pub fn solve(part: []u8, reader: *std.Io.Reader, allocator: std.mem.Allocator) !void {
+ if (std.mem.eql(u8, part, "1")) {
+ try part1(reader, allocator);
+ } else {
+ try part2(reader, allocator);
+ }
+}
+
+fn part1(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void {
+ var output: usize = 0;
+
+ const first = try reader.takeDelimiter('\n');
+
+ var space = try allocator.alloc(bool, first.?.len);
+ defer allocator.free(space);
+
+ for (space) |*b| b.* = false;
+
+ space[(first.?.len - 1) / 2] = true;
+
+ while (reader.takeDelimiter('\n')) |line| {
+ if (line == null) {
+ break;
+ }
+
+ for (line.?,0..) |e, i| {
+ if (e == '^' and space[i]) {
+ space[i] = false;
+ space[i-1] = true;
+ space[i+1] = true;
+ output += 1;
+ }
+ }
+
+ } else |_| {}
+
+ print("{d}\n", .{output});
+}
+
+fn quantum(space: [][]u8, pos: usize, y: usize, output: *usize) void {
+
+ if (space.len == y){
+ return;
+ }
+
+ if (space[y][pos] == '^') {
+ quantum(space, pos - 1, y + 1, output);
+ output.* += 1;
+ quantum(space, pos + 1, y + 1, output);
+ } else {
+ quantum(space, pos, y + 1, output);
+ }
+}
+
+
+fn part2(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void {
+ var output: usize = 1;
+
+ const first = try reader.takeDelimiter('\n');
+
+ var space = try allocator.alloc(usize, first.?.len);
+ defer allocator.free(space);
+
+ for (space) |*b| b.* = 0;
+
+ space[(first.?.len - 1) / 2] = 1;
+
+ while (reader.takeDelimiter('\n')) |line| {
+ if (line == null) {
+ break;
+ }
+
+ for (line.?,0..) |e, i| {
+ if (e == '^' and space[i] > 0) {
+ space[i-1] += space[i];
+ space[i+1] += space[i];
+ output += space[i];
+ space[i] = 0;
+ }
+ }
+
+ } else |_| {}
+
+ print("{d}\n", .{output});
+}
diff --git a/src/main.zig b/src/main.zig
new file mode 100644
index 0000000..79979e4
--- /dev/null
+++ b/src/main.zig
@@ -0,0 +1,46 @@
+const std = @import("std");
+const print = std.debug.print;
+
+const day01 = @import("day01.zig");
+const day02 = @import("day02.zig");
+const day03 = @import("day03.zig");
+const day04 = @import("day04.zig");
+const day05 = @import("day05.zig");
+const day06 = @import("day06.zig");
+const day07 = @import("day07.zig");
+
+pub fn main() !void {
+ if (std.os.argv.len != 3) {
+ print("Usage: {s} <day> <part> < <input> \n", .{std.os.argv[0]});
+ return;
+ }
+
+ var stdin_buf: [1024 * 1024]u8 = undefined;
+ var reader = std.fs.File.stdin().reader(&stdin_buf);
+ const stdin: *std.Io.Reader = &reader.interface;
+
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ const allocator = gpa.allocator();
+ defer {
+ _ = gpa.deinit();
+ }
+
+ const args = try std.process.argsAlloc(allocator);
+ defer std.process.argsFree(allocator, args);
+
+ const day = std.fmt.parseInt(usize, args[1], 10) catch {
+ print("Not valid day format\n: {s}", .{args[1]});
+ return;
+ };
+
+ try switch (day) {
+ 1 => day01.solve(args[2], stdin, allocator),
+ 2 => day02.solve(args[2], stdin, allocator),
+ 3 => day03.solve(args[2], stdin, allocator),
+ 4 => day04.solve(args[2], stdin, allocator),
+ 5 => day05.solve(args[2], stdin, allocator),
+ 6 => day06.solve(args[2], stdin, allocator),
+ 7 => day07.solve(args[2], stdin, allocator),
+ else => print("Day not yet implemented", .{}),
+ };
+}