Advent of code 2025 (not proud)

first commit

1/1

This is a binary file and will not be displayed.

+71
1/1.c
···
···
+
#include <math.h>
+
#include <stdio.h>
+
#include <stdlib.h>
+
+
+
int to_int(char* line, ssize_t nread) {
+
+
+
line = realloc(line, (nread-2)*sizeof(char));
+
line++;
+
+
return atoi(line);
+
+
+
}
+
+
+
int sign(int num) {
+
return ((num%2)+((num+1)%2));
+
}
+
+
int main(int argc, char *argv[]) {
+
+
FILE *f = fopen(argv[1], "rw");
+
char *line = NULL;
+
char m;
+
size_t size = 0;
+
int move;
+
ssize_t nread;
+
int password = 0;
+
int dial = 50;
+
+
+
while ((nread = getline(&line, &size, f))!= -1) {
+
printf("%s, ",line);
+
m = line[0];
+
move = to_int(line, nread);
+
if (m == 'R' ) {
+
for (int i = 0; i<move; i++) {
+
dial++;
+
if (dial==100) {
+
dial = 0;
+
password++;
+
}
+
}
+
} else {
+
for (int i = 0; i<move; i++) {
+
dial--;
+
if (dial==0) {
+
password++;
+
}
+
if (dial == -1) {
+
dial = 99;
+
}
+
}
+
}
+
+
+
+
printf("%d, dial at :", to_int(line, nread));
+
printf("%d\n", dial);
+
}
+
+
printf("password: %d",password);
+
+
free(line);
+
fclose(f);
+
+
return 0;
+
}
+
+4317
1/input.txt
···
···
+
R19
+
R5
+
R29
+
R30
+
L24
+
L12
+
R24
+
R2
+
R35
+
L18
+
R22
+
L20
+
L1
+
R12
+
R46
+
L31
+
L38
+
L27
+
L33
+
L6
+
R50
+
L22
+
L37
+
L18
+
R7
+
L28
+
R50
+
L44
+
R5
+
L24
+
L5
+
R36
+
L38
+
R16
+
L50
+
R5
+
R17
+
R32
+
R33
+
R23
+
R12
+
R39
+
L48
+
R28
+
R50
+
L49
+
R5
+
L44
+
L41
+
R62
+
L90
+
R19
+
L15
+
R4
+
R96
+
L6
+
R6
+
L40
+
R55
+
R11
+
R69
+
R5
+
R29
+
R14
+
R57
+
R23
+
L76
+
L15
+
L32
+
R98
+
L58
+
L1
+
R61
+
R67
+
L67
+
L18
+
R61
+
L27
+
R84
+
R16
+
L37
+
R21
+
R44
+
R95
+
L27
+
R47
+
R68
+
R95
+
R78
+
R87
+
L87
+
R66
+
L82
+
R63
+
L84
+
L63
+
L85
+
L15
+
L19
+
L96
+
R805
+
R710
+
L73
+
R46
+
L31
+
R14
+
R28
+
L54
+
L87
+
R62
+
L60
+
R5
+
R27
+
R42
+
L19
+
R69
+
R35
+
L57
+
L47
+
R99
+
L199
+
L62
+
L43
+
R98
+
L21
+
R12
+
R671
+
R45
+
L81
+
L943
+
L76
+
L95
+
L605
+
L20
+
R92
+
L2
+
L79
+
L343
+
L79
+
L56
+
R29
+
R61
+
R308
+
R237
+
L36
+
L12
+
R50
+
L27
+
R292
+
L15
+
R48
+
L97
+
R49
+
L26
+
L36
+
R38
+
L44
+
L42
+
L90
+
R95
+
R51
+
L46
+
R73
+
R1
+
R26
+
L704
+
L53
+
L43
+
R944
+
R56
+
R230
+
R29
+
R45
+
R96
+
R71
+
L642
+
R71
+
L92
+
R456
+
L82
+
L83
+
L51
+
L51
+
L88
+
R7
+
L16
+
L88
+
R95
+
R66
+
R27
+
L68
+
L32
+
L306
+
L91
+
L87
+
R73
+
R11
+
L49
+
L90
+
R41
+
L202
+
R31
+
L83
+
R247
+
L97
+
L38
+
L20
+
R95
+
R65
+
R34
+
L34
+
R44
+
R50
+
L803
+
L97
+
R452
+
R61
+
L90
+
L17
+
R3
+
L803
+
R34
+
L217
+
R57
+
R394
+
R32
+
L84
+
R74
+
L90
+
R29
+
R71
+
L293
+
L40
+
R33
+
L66
+
R66
+
R37
+
L80
+
L57
+
R86
+
R14
+
R219
+
L97
+
L85
+
L37
+
L26
+
R92
+
R3
+
L69
+
R40
+
R538
+
R22
+
R16
+
R275
+
L616
+
L931
+
R856
+
R44
+
R56
+
L93
+
R95
+
R49
+
R12
+
L63
+
R13
+
R87
+
R15
+
R753
+
R332
+
R479
+
R67
+
R69
+
L40
+
L75
+
R88
+
R12
+
R9
+
R35
+
L79
+
R446
+
L11
+
L54
+
R63
+
R92
+
L16
+
L66
+
R20
+
L917
+
L5
+
R83
+
R8
+
L1
+
R32
+
R562
+
L73
+
R62
+
R26
+
L752
+
L39
+
R604
+
R71
+
L63
+
L86
+
L84
+
R39
+
R684
+
R113
+
L3
+
R69
+
R60
+
L786
+
R49
+
L19
+
L373
+
L93
+
R93
+
L76
+
L610
+
L68
+
L46
+
R12
+
R721
+
R67
+
R62
+
L62
+
L12
+
R56
+
R85
+
L427
+
L385
+
R82
+
L11
+
L478
+
L810
+
R2
+
R4
+
L57
+
L149
+
R17
+
R83
+
L98
+
L64
+
R73
+
L80
+
L31
+
L559
+
L41
+
R66
+
R93
+
R41
+
R559
+
L84
+
R32
+
L839
+
R14
+
L82
+
R36
+
R30
+
L18
+
L48
+
R83
+
R2
+
L27
+
L93
+
L65
+
R51
+
R49
+
R70
+
L270
+
R39
+
R61
+
R75
+
L75
+
L88
+
L53
+
R22
+
L87
+
L994
+
R88
+
R812
+
R81
+
R19
+
R11
+
R18
+
R71
+
R296
+
L729
+
R12
+
L979
+
R295
+
R5
+
L19
+
R22
+
R26
+
R71
+
L2
+
R86
+
R81
+
L65
+
R86
+
R52
+
R1
+
L628
+
L740
+
R73
+
R56
+
R73
+
R27
+
L566
+
R33
+
R81
+
R91
+
L39
+
R54
+
L67
+
L418
+
L84
+
L51
+
R828
+
L782
+
L80
+
L384
+
L4
+
L73
+
R70
+
L87
+
R60
+
R18
+
R64
+
R36
+
L10
+
L92
+
L98
+
L19
+
R82
+
R37
+
R689
+
L19
+
L70
+
L3
+
L47
+
R50
+
R17
+
L70
+
L47
+
R1
+
L94
+
L58
+
L802
+
L47
+
L185
+
R67
+
L82
+
R19
+
R14
+
R24
+
R43
+
L17
+
R56
+
L239
+
R26
+
R574
+
L18
+
R16
+
L726
+
L72
+
L944
+
R44
+
R24
+
R92
+
R31
+
R92
+
R41
+
L31
+
R9
+
L69
+
L46
+
L30
+
R87
+
R2
+
R61
+
R15
+
L84
+
L94
+
L42
+
L58
+
L427
+
L85
+
L4
+
L226
+
R842
+
R80
+
R90
+
R30
+
L423
+
L30
+
L21
+
L86
+
R12
+
R68
+
R73
+
R213
+
R94
+
L210
+
R50
+
R60
+
L971
+
L50
+
R19
+
R66
+
R36
+
R11
+
R9
+
R175
+
L96
+
L84
+
L74
+
R382
+
L811
+
L20
+
L1
+
R9
+
L12
+
L77
+
R789
+
R1
+
L85
+
L16
+
L96
+
R17
+
L17
+
L24
+
R163
+
R62
+
R60
+
L83
+
L74
+
L48
+
L59
+
R93
+
R6
+
L759
+
L77
+
L64
+
L28
+
R32
+
R87
+
R716
+
L7
+
R55
+
R36
+
L91
+
R22
+
L1
+
R35
+
L56
+
R54
+
R962
+
R515
+
R969
+
R88
+
R85
+
L73
+
R991
+
R99
+
L37
+
R47
+
L14
+
L28
+
L58
+
L78
+
L12
+
R12
+
L22
+
L2
+
L50
+
L48
+
L32
+
R32
+
L13
+
L3
+
L584
+
L16
+
R45
+
R71
+
R38
+
R718
+
L8
+
R152
+
R31
+
R78
+
R813
+
L422
+
R390
+
R877
+
L42
+
L515
+
L88
+
L1
+
R203
+
L24
+
L44
+
L156
+
L104
+
L60
+
R64
+
L4
+
R2
+
R2
+
L1
+
L10
+
R89
+
R17
+
L64
+
L59
+
L69
+
L13
+
R92
+
R1
+
L68
+
R85
+
R395
+
L95
+
R46
+
R82
+
L73
+
L43
+
R88
+
R39
+
L57
+
L10
+
L772
+
L82
+
R97
+
R85
+
R63
+
L33
+
L30
+
L19
+
L10
+
R9
+
R467
+
L581
+
L666
+
L19
+
R819
+
R466
+
L575
+
R655
+
R754
+
R70
+
R37
+
L51
+
R40
+
L85
+
R89
+
L80
+
R47
+
L67
+
R48
+
L19
+
L49
+
L17
+
R37
+
L19
+
R89
+
L76
+
L62
+
L89
+
R8
+
R651
+
L2
+
R234
+
L97
+
R63
+
R610
+
R90
+
L68
+
R68
+
L310
+
R71
+
R414
+
R9
+
R91
+
R25
+
R24
+
R48
+
L11
+
L58
+
L3
+
L8
+
R54
+
R74
+
L84
+
L436
+
R69
+
R31
+
L74
+
R74
+
R21
+
L87
+
R32
+
R73
+
R72
+
L45
+
R20
+
R314
+
R88
+
L18
+
R19
+
R11
+
R309
+
L409
+
L88
+
R25
+
L637
+
L10
+
L98
+
R90
+
L97
+
L685
+
R96
+
R740
+
R59
+
L29
+
R34
+
R19
+
L19
+
R78
+
L271
+
L7
+
R864
+
L764
+
R42
+
R58
+
R59
+
L11
+
R54
+
L42
+
R40
+
L298
+
L35
+
L91
+
L876
+
R69
+
L79
+
L41
+
R913
+
L26
+
R59
+
L71
+
R65
+
L24
+
R735
+
L31
+
L79
+
R910
+
L65
+
R65
+
R67
+
R49
+
R84
+
R750
+
R491
+
L41
+
L73
+
L31
+
R4
+
L9
+
R9
+
R46
+
R7
+
L12
+
R58
+
R151
+
R50
+
L372
+
L25
+
R58
+
L90
+
L8
+
L33
+
R15
+
L17
+
R26
+
L26
+
R817
+
R98
+
L902
+
L59
+
R18
+
R807
+
L607
+
L41
+
R77
+
R564
+
L68
+
R6
+
R631
+
R931
+
R12
+
R29
+
L41
+
L81
+
L19
+
L45
+
R21
+
L90
+
R24
+
L84
+
L26
+
R10
+
L29
+
L81
+
L379
+
L21
+
L676
+
R16
+
R633
+
L35
+
R108
+
L746
+
R934
+
R66
+
L89
+
R85
+
L36
+
L62
+
L587
+
L721
+
R31
+
L21
+
R26
+
R92
+
L41
+
L92
+
R15
+
R18
+
R82
+
R57
+
L347
+
L52
+
L58
+
L56
+
R70
+
R86
+
L37
+
R337
+
L840
+
L613
+
R21
+
R132
+
L87
+
L513
+
L31
+
R768
+
R63
+
R25
+
R7
+
L90
+
R32
+
L78
+
L96
+
R87
+
R78
+
R75
+
R77
+
R92
+
L49
+
L52
+
L86
+
L22
+
R73
+
R37
+
L10
+
R65
+
R43
+
L3
+
L76
+
R26
+
L366
+
L47
+
R42
+
L70
+
L62
+
L98
+
R3
+
R43
+
L228
+
R12
+
R49
+
L33
+
R24
+
R76
+
L33
+
L2
+
L12
+
L50
+
L103
+
L38
+
R72
+
L209
+
L209
+
L48
+
R29
+
L897
+
L19
+
R203
+
L92
+
L192
+
L55
+
L47
+
L866
+
R68
+
L221
+
R17
+
R45
+
L61
+
L3
+
R72
+
L667
+
L26
+
R31
+
L87
+
R44
+
R82
+
R7
+
L67
+
R4
+
L63
+
L1
+
L63
+
R28
+
L10
+
R487
+
R952
+
L59
+
R50
+
L423
+
R32
+
L72
+
L629
+
R88
+
L50
+
R19
+
R44
+
L17
+
L48
+
R65
+
R2
+
L78
+
R576
+
L991
+
R91
+
R76
+
R924
+
L18
+
L82
+
L10
+
L85
+
R45
+
L27
+
R95
+
R651
+
R62
+
R269
+
R41
+
R59
+
R99
+
R537
+
R64
+
L28
+
R928
+
L21
+
L98
+
L22
+
L59
+
L92
+
R92
+
L624
+
L34
+
L242
+
R59
+
L17
+
L42
+
R82
+
L632
+
R50
+
R57
+
L82
+
R988
+
L63
+
L70
+
R34
+
L29
+
R93
+
R72
+
L74
+
L17
+
L9
+
L749
+
L13
+
L138
+
L191
+
R91
+
L78
+
R818
+
L94
+
L674
+
L458
+
R985
+
L43
+
L56
+
R65
+
R35
+
R30
+
R844
+
R443
+
R609
+
R58
+
R778
+
R19
+
R19
+
R51
+
R49
+
R49
+
R451
+
L87
+
R33
+
L46
+
L551
+
R51
+
L998
+
R17
+
R13
+
L32
+
L59
+
R59
+
R3
+
R12
+
L43
+
R1
+
L6
+
L42
+
L25
+
R705
+
R95
+
L89
+
L38
+
R77
+
L25
+
R75
+
L32
+
R30
+
L19
+
L814
+
R35
+
R33
+
L56
+
L16
+
R39
+
R68
+
L368
+
L42
+
L91
+
L468
+
L86
+
L85
+
L41
+
L87
+
L14
+
R97
+
L4
+
R47
+
R74
+
L89
+
L36
+
R12
+
R214
+
R63
+
R36
+
L98
+
R98
+
R12
+
L708
+
L92
+
R13
+
R975
+
R25
+
L469
+
L637
+
L59
+
L160
+
L182
+
L99
+
R3
+
L122
+
L81
+
L76
+
R57
+
R615
+
L479
+
L570
+
R34
+
R64
+
L964
+
R99
+
L99
+
L77
+
R77
+
R70
+
R98
+
L10
+
R642
+
R7
+
L97
+
L39
+
L55
+
L16
+
L70
+
L23
+
L27
+
L91
+
R91
+
R137
+
R37
+
R46
+
L74
+
L96
+
L46
+
L14
+
L980
+
R83
+
L73
+
L295
+
L92
+
R44
+
R278
+
L39
+
R76
+
R34
+
R14
+
L64
+
R344
+
R609
+
L1
+
R527
+
L87
+
L86
+
R57
+
R81
+
L28
+
R64
+
R64
+
R90
+
R5
+
L958
+
R64
+
L301
+
L128
+
R28
+
R97
+
L68
+
R730
+
R41
+
L139
+
L45
+
R84
+
L537
+
L38
+
R75
+
R106
+
R683
+
L94
+
L95
+
R28
+
R72
+
L43
+
R46
+
R39
+
L3
+
R36
+
L38
+
R51
+
L88
+
R10
+
R44
+
R16
+
L60
+
L95
+
L72
+
R57
+
R16
+
L10
+
L6
+
R221
+
L202
+
L87
+
R168
+
R46
+
L70
+
L32
+
L51
+
L84
+
L9
+
L17
+
L83
+
L76
+
L97
+
R1
+
R84
+
L12
+
R17
+
R83
+
L72
+
R72
+
R88
+
L78
+
L22
+
R12
+
L433
+
L8
+
L52
+
R18
+
R75
+
L89
+
R89
+
R62
+
R38
+
L82
+
R48
+
L466
+
R18
+
L118
+
R29
+
R747
+
R24
+
L403
+
R3
+
R9
+
L39
+
R30
+
L331
+
R73
+
L12
+
R75
+
R95
+
L781
+
R89
+
L8
+
L230
+
L17
+
L75
+
R91
+
L75
+
L43
+
R677
+
L472
+
L79
+
L77
+
L3
+
R68
+
L45
+
R80
+
L41
+
L40
+
R60
+
R26
+
L73
+
L78
+
R64
+
R94
+
R40
+
R48
+
L18
+
R239
+
L21
+
R97
+
R80
+
R23
+
R37
+
L73
+
L44
+
L220
+
R55
+
L15
+
R60
+
R61
+
L72
+
R125
+
R404
+
L542
+
R553
+
R71
+
R73
+
L42
+
R43
+
L10
+
L39
+
L25
+
L7
+
R260
+
L53
+
L47
+
R87
+
R60
+
L667
+
R67
+
R34
+
L34
+
R35
+
R82
+
R81
+
R69
+
L83
+
L84
+
R14
+
L96
+
R90
+
L66
+
R75
+
R76
+
R80
+
R4
+
L77
+
R84
+
L17
+
R44
+
L622
+
L50
+
L123
+
L16
+
L4
+
R27
+
R80
+
R11
+
R54
+
R86
+
R46
+
R54
+
L17
+
R63
+
R35
+
L35
+
R98
+
L7
+
L91
+
R20
+
R17
+
L37
+
R20
+
L43
+
L58
+
L19
+
L887
+
L18
+
L18
+
R23
+
R57
+
R43
+
L132
+
R51
+
L24
+
R48
+
R879
+
R64
+
R31
+
R638
+
R38
+
R184
+
L34
+
R57
+
L51
+
L71
+
L78
+
R448
+
L48
+
L48
+
R48
+
L131
+
R66
+
L935
+
L13
+
L87
+
L28
+
R901
+
R50
+
L87
+
R64
+
L83
+
L17
+
R702
+
L61
+
L9
+
R27
+
L30
+
L11
+
R77
+
R921
+
R84
+
L27
+
L55
+
L190
+
L41
+
R28
+
L14
+
R99
+
L8
+
L72
+
L20
+
R41
+
R20
+
L79
+
R77
+
L59
+
R851
+
R49
+
L415
+
R15
+
L13
+
L458
+
R10
+
L39
+
L36
+
R8
+
L72
+
R29
+
R10
+
L41
+
R2
+
R60
+
R40
+
L93
+
R93
+
L68
+
L95
+
R16
+
R47
+
L84
+
R15
+
R69
+
R962
+
R19
+
R30
+
L6
+
R2
+
L24
+
R47
+
R70
+
L3
+
L60
+
L37
+
L30
+
L501
+
L87
+
L69
+
R87
+
R86
+
L7
+
R223
+
L2
+
R791
+
R9
+
R643
+
R99
+
L842
+
L580
+
R80
+
L49
+
R90
+
L695
+
R54
+
L116
+
L84
+
L990
+
L86
+
R972
+
R56
+
R87
+
R42
+
R37
+
L219
+
L999
+
L74
+
L26
+
L70
+
R70
+
L98
+
R548
+
L382
+
R21
+
R866
+
R86
+
R159
+
L10
+
L87
+
L20
+
R3
+
R19
+
R21
+
L26
+
L66
+
L391
+
L343
+
R15
+
L15
+
L75
+
L525
+
R13
+
R717
+
R70
+
L91
+
L218
+
R20
+
L776
+
L536
+
R24
+
L23
+
L974
+
R74
+
R18
+
R82
+
R16
+
R72
+
L7
+
R16
+
L97
+
L72
+
R72
+
L63
+
L784
+
L53
+
L63
+
L91
+
R92
+
L88
+
R15
+
L765
+
L29
+
R37
+
R83
+
R964
+
L21
+
R57
+
L66
+
L30
+
L895
+
R31
+
L92
+
L72
+
L89
+
L194
+
R716
+
L261
+
L639
+
R48
+
R76
+
L45
+
L79
+
R996
+
R4
+
L28
+
R803
+
L35
+
R74
+
L2
+
L37
+
L15
+
L60
+
R76
+
R69
+
L196
+
L849
+
L9
+
R9
+
R61
+
L20
+
L41
+
R7
+
L207
+
R24
+
L13
+
R89
+
L455
+
L64
+
L647
+
R66
+
R21
+
R79
+
L36
+
R36
+
L14
+
L70
+
R84
+
R73
+
L14
+
L13
+
L7
+
L661
+
L78
+
L37
+
L63
+
L499
+
L975
+
R74
+
R72
+
L24
+
L91
+
L85
+
R6
+
R353
+
R809
+
R60
+
L12
+
R68
+
L283
+
R27
+
L73
+
L27
+
R20
+
R80
+
L12
+
R17
+
L5
+
L56
+
R8
+
R73
+
L25
+
R34
+
L34
+
L458
+
L42
+
L64
+
L23
+
L13
+
L539
+
R539
+
L695
+
L72
+
L33
+
R927
+
L27
+
R9
+
L9
+
L68
+
R364
+
R22
+
R82
+
R65
+
R18
+
L83
+
L945
+
L71
+
L55
+
L29
+
R91
+
R57
+
L448
+
R59
+
R126
+
L27
+
R101
+
L59
+
R51
+
L51
+
L881
+
L19
+
R85
+
R3
+
L38
+
R42
+
L55
+
L33
+
R96
+
R62
+
R38
+
L304
+
L3
+
L93
+
R57
+
L50
+
L26
+
R82
+
R67
+
R70
+
L1
+
L58
+
L869
+
L952
+
L20
+
L68
+
R84
+
L16
+
R38
+
R36
+
L122
+
L18
+
L809
+
L36
+
L66
+
R53
+
R24
+
L29
+
R193
+
L25
+
R38
+
L777
+
L439
+
L61
+
L48
+
R76
+
R872
+
R2
+
L35
+
L46
+
R502
+
R77
+
R40
+
L40
+
R11
+
L40
+
R49
+
L20
+
L23
+
R323
+
R21
+
R56
+
L777
+
R58
+
L202
+
L50
+
R35
+
L830
+
R44
+
L10
+
R55
+
L85
+
R60
+
R96
+
R129
+
R56
+
R544
+
R949
+
R98
+
R40
+
R73
+
R12
+
L31
+
L41
+
L76
+
L60
+
R76
+
R91
+
L15
+
R56
+
L18
+
L80
+
R926
+
L99
+
R61
+
R532
+
L94
+
R204
+
R296
+
R41
+
R12
+
L75
+
R64
+
L42
+
L85
+
L15
+
L3
+
L97
+
L329
+
L71
+
R11
+
L3
+
L11
+
R3
+
R22
+
R81
+
R897
+
L15
+
L70
+
R19
+
R16
+
R450
+
L95
+
R54
+
L59
+
L44
+
L42
+
R22
+
R69
+
L760
+
L712
+
L7
+
R374
+
L16
+
L78
+
L6
+
L42
+
L29
+
R71
+
L8
+
R63
+
R45
+
R40
+
R50
+
L956
+
L41
+
L582
+
L3
+
R92
+
R90
+
R710
+
L578
+
R78
+
L39
+
R22
+
R36
+
L19
+
L34
+
R34
+
L580
+
L68
+
R41
+
L93
+
R521
+
L38
+
L83
+
R84
+
R37
+
L21
+
R68
+
L568
+
R22
+
R78
+
R675
+
R125
+
L39
+
L879
+
R49
+
L31
+
R71
+
R4
+
R575
+
R50
+
L96
+
L904
+
R7
+
R793
+
R6
+
L6
+
L15
+
R93
+
L54
+
L10
+
L45
+
R51
+
R48
+
L98
+
L70
+
R986
+
R22
+
R696
+
R96
+
R71
+
L8
+
L763
+
R30
+
L53
+
L30
+
L47
+
R21
+
L74
+
R248
+
L68
+
L17
+
R90
+
R49
+
R16
+
L65
+
L3
+
L49
+
R52
+
R84
+
L84
+
R93
+
R932
+
R75
+
R74
+
R38
+
L12
+
R55
+
L649
+
L72
+
R61
+
R4
+
L56
+
L43
+
L28
+
R328
+
L29
+
R29
+
L8
+
R52
+
R56
+
R47
+
L47
+
L39
+
R239
+
R42
+
R58
+
R222
+
R92
+
R286
+
R54
+
L854
+
L76
+
R76
+
R16
+
R16
+
L43
+
R11
+
L53
+
L75
+
R938
+
R19
+
L52
+
R23
+
L26
+
L366
+
L366
+
L35
+
R93
+
L455
+
R4
+
L6
+
L43
+
R29
+
L29
+
R44
+
L53
+
L31
+
R7
+
R43
+
R51
+
L262
+
R36
+
R256
+
L685
+
L828
+
R70
+
L48
+
R7
+
L744
+
R55
+
R25
+
L843
+
L11
+
L76
+
R385
+
R170
+
L30
+
L438
+
L24
+
L591
+
R41
+
R54
+
R20
+
R347
+
L47
+
R906
+
L68
+
L38
+
R36
+
L21
+
R85
+
R74
+
R46
+
R60
+
R520
+
R759
+
R99
+
L52
+
L67
+
R761
+
L30
+
R56
+
L94
+
L32
+
R60
+
R40
+
L9
+
R878
+
R35
+
R96
+
R723
+
R315
+
R62
+
L77
+
L43
+
R60
+
L68
+
R28
+
L591
+
L364
+
L14
+
R69
+
R65
+
R35
+
R17
+
L11
+
L96
+
L10
+
R3
+
R457
+
L94
+
L70
+
L996
+
R4
+
R96
+
L175
+
R10
+
R965
+
L19
+
L40
+
R759
+
R1
+
L18
+
R17
+
L221
+
L79
+
L178
+
L22
+
L50
+
R50
+
R73
+
L98
+
L75
+
R27
+
R73
+
L836
+
L64
+
L10
+
R810
+
L85
+
R687
+
R95
+
L47
+
L91
+
R86
+
R255
+
R32
+
R10
+
L62
+
R98
+
L78
+
L21
+
L4
+
L60
+
R85
+
R743
+
R73
+
R24
+
R40
+
L22
+
R34
+
L76
+
R46
+
L62
+
R40
+
R65
+
R2
+
L27
+
R20
+
R56
+
R11
+
L51
+
L30
+
R14
+
R54
+
R46
+
R691
+
L590
+
L1
+
R86
+
L248
+
R62
+
L45
+
L61
+
L373
+
R879
+
R44
+
L44
+
L94
+
L930
+
R915
+
R253
+
R46
+
R42
+
L4
+
R43
+
R249
+
R12
+
R39
+
L553
+
L65
+
L79
+
R983
+
R43
+
R97
+
R36
+
R67
+
R93
+
R7
+
R84
+
L16
+
R32
+
L34
+
L46
+
R80
+
R70
+
R33
+
R197
+
R646
+
L277
+
L99
+
R55
+
R49
+
R26
+
R99
+
R901
+
R203
+
L62
+
L41
+
R98
+
R187
+
R45
+
L8
+
R287
+
L21
+
L95
+
R7
+
R334
+
R88
+
L38
+
L84
+
R524
+
R63
+
L381
+
L432
+
L74
+
R87
+
L58
+
R20
+
L49
+
L79
+
R19
+
R630
+
L86
+
R16
+
R60
+
R97
+
L60
+
L897
+
L818
+
L82
+
R26
+
R55
+
L81
+
R3
+
R255
+
R76
+
L55
+
L471
+
L24
+
L784
+
R29
+
L64
+
L48
+
L15
+
R98
+
L41
+
L33
+
L26
+
R21
+
L21
+
L80
+
L95
+
R12
+
L637
+
R31
+
R69
+
L77
+
R77
+
L14
+
L86
+
R26
+
L89
+
R81
+
L18
+
R261
+
R85
+
L35
+
L11
+
R8
+
R68
+
R68
+
R982
+
L3
+
L23
+
L185
+
L972
+
L706
+
L37
+
L351
+
L49
+
R74
+
R81
+
R88
+
R60
+
R64
+
R27
+
L94
+
L1
+
L99
+
R41
+
L589
+
L952
+
R42
+
R58
+
R68
+
L68
+
L806
+
L69
+
L70
+
L38
+
R64
+
L87
+
L97
+
R49
+
R6
+
L92
+
R97
+
L12
+
R946
+
R9
+
R94
+
R33
+
R73
+
R237
+
L65
+
R36
+
L66
+
L59
+
L183
+
R13
+
R501
+
L36
+
R847
+
L968
+
L19
+
R89
+
R73
+
L62
+
R311
+
R51
+
L30
+
R50
+
L56
+
L64
+
L64
+
R15
+
L57
+
R42
+
L28
+
R28
+
L36
+
L8
+
R8
+
R15
+
L15
+
L181
+
R81
+
L94
+
L69
+
L93
+
L724
+
R36
+
R844
+
R13
+
R515
+
L4
+
R76
+
L17
+
L83
+
R26
+
R74
+
R7
+
L65
+
L415
+
R73
+
R53
+
L736
+
L17
+
L204
+
R17
+
R87
+
R501
+
L1
+
R85
+
L68
+
R164
+
R19
+
R17
+
R94
+
L134
+
R195
+
L72
+
L85
+
R85
+
L12
+
R31
+
L750
+
L375
+
L20
+
R48
+
L22
+
R22
+
R3
+
R291
+
R78
+
R79
+
R27
+
R85
+
L85
+
L26
+
R931
+
R4
+
L9
+
L714
+
R14
+
R11
+
R89
+
R83
+
L71
+
R743
+
L93
+
L54
+
L656
+
R94
+
L663
+
R82
+
L45
+
L20
+
R78
+
L659
+
L714
+
R89
+
R971
+
L65
+
L915
+
R715
+
R75
+
R25
+
R2
+
R33
+
L74
+
R439
+
R14
+
L1
+
L13
+
R27
+
L50
+
R88
+
R35
+
L426
+
L74
+
R50
+
L6
+
R56
+
L58
+
R21
+
L184
+
R43
+
R837
+
R40
+
R1
+
R76
+
L46
+
L30
+
R11
+
L76
+
L39
+
R32
+
R1
+
R59
+
R34
+
R81
+
R30
+
R67
+
R48
+
R79
+
L97
+
R14
+
R47
+
L91
+
L32
+
R98
+
L50
+
L697
+
L19
+
R26
+
R74
+
R17
+
R610
+
L702
+
L225
+
L839
+
L898
+
R42
+
R483
+
R89
+
R55
+
R68
+
L35
+
L865
+
R6
+
R9
+
L93
+
R78
+
L29
+
R52
+
R9
+
R868
+
R80
+
R20
+
R75
+
L25
+
L152
+
L1
+
L97
+
L27
+
L83
+
R46
+
L14
+
L122
+
R23
+
R842
+
L758
+
R31
+
R8
+
L21
+
R75
+
R885
+
R15
+
R38
+
L38
+
R19
+
L94
+
L25
+
R84
+
L15
+
L39
+
R970
+
R29
+
R13
+
R58
+
R15
+
R16
+
R69
+
R42
+
L42
+
L742
+
R47
+
R918
+
L95
+
R64
+
R57
+
R14
+
R37
+
R23
+
R68
+
R639
+
R78
+
L28
+
L80
+
R18
+
R610
+
R896
+
R95
+
L519
+
R43
+
L743
+
L34
+
L766
+
L24
+
L494
+
R918
+
R83
+
R219
+
R2
+
R28
+
R98
+
R691
+
L67
+
R294
+
L1
+
R54
+
R57
+
R42
+
R52
+
L55
+
L37
+
L660
+
L51
+
L17
+
L928
+
R75
+
R21
+
R23
+
L23
+
R528
+
L40
+
R46
+
L734
+
L903
+
L97
+
R59
+
R49
+
R73
+
L81
+
L46
+
L54
+
L229
+
L711
+
L37
+
R67
+
R96
+
L76
+
L40
+
L48
+
L22
+
L70
+
L30
+
L54
+
L46
+
R595
+
R5
+
R95
+
R84
+
L31
+
L48
+
L99
+
R17
+
R82
+
R89
+
L81
+
L15
+
L489
+
R8
+
L15
+
R3
+
R65
+
R689
+
L804
+
R30
+
L63
+
L75
+
R5
+
R253
+
R77
+
R38
+
R85
+
L1
+
R1
+
L53
+
L37
+
R90
+
L56
+
L46
+
L162
+
L657
+
L79
+
R17
+
R83
+
R60
+
R11
+
R63
+
L96
+
L38
+
R2
+
R598
+
R71
+
L71
+
L79
+
L835
+
R82
+
R85
+
L27
+
L52
+
L74
+
R963
+
L44
+
R76
+
R34
+
R14
+
R49
+
L27
+
L110
+
L55
+
L95
+
L47
+
R303
+
R63
+
R41
+
R35
+
L74
+
L26
+
L791
+
L201
+
R55
+
R68
+
L31
+
L66
+
R66
+
L17
+
R334
+
R7
+
R176
+
R75
+
R98
+
R80
+
R174
+
L84
+
L85
+
R95
+
L53
+
L1
+
L7
+
R32
+
R76
+
L767
+
L418
+
L886
+
L32
+
R3
+
R85
+
R31
+
R58
+
R63
+
L32
+
R8
+
L416
+
L78
+
L47
+
R84
+
L15
+
L541
+
L593
+
R54
+
R16
+
L16
+
R499
+
R290
+
L50
+
L73
+
R73
+
R35
+
R65
+
L73
+
R73
+
L82
+
R30
+
L88
+
R763
+
L83
+
L95
+
R55
+
R40
+
R60
+
L68
+
R322
+
L754
+
R92
+
L98
+
R84
+
L76
+
R11
+
L13
+
R94
+
R68
+
R4
+
L94
+
L8
+
L64
+
L8
+
L692
+
R42
+
R58
+
L7
+
R21
+
L106
+
R68
+
L76
+
L22
+
R17
+
R49
+
L96
+
R52
+
L57
+
R76
+
R81
+
L9
+
L91
+
L847
+
R647
+
L781
+
L74
+
L845
+
R66
+
R83
+
L87
+
R194
+
R19
+
R992
+
R75
+
R58
+
R37
+
L37
+
L72
+
R43
+
L19
+
L17
+
R11
+
L48
+
L898
+
L85
+
L29
+
L9
+
R306
+
R22
+
L27
+
L78
+
L67
+
L33
+
L42
+
L15
+
R35
+
L678
+
L612
+
L88
+
L49
+
L24
+
L55
+
L672
+
R62
+
R12
+
L74
+
L872
+
R637
+
R343
+
R21
+
R71
+
R932
+
R168
+
L86
+
R850
+
R86
+
R65
+
R39
+
L54
+
L62
+
L125
+
L57
+
R39
+
R65
+
R40
+
L83
+
L17
+
L284
+
R84
+
R75
+
R19
+
R6
+
L99
+
L92
+
R98
+
L7
+
L1
+
L99
+
R301
+
R899
+
L66
+
R66
+
R99
+
R12
+
R89
+
R6
+
R94
+
L62
+
R1
+
R293
+
L68
+
L768
+
R663
+
L899
+
R12
+
R28
+
R31
+
R69
+
L54
+
R54
+
L11
+
R81
+
L92
+
R80
+
L58
+
R72
+
R728
+
R44
+
R56
+
R45
+
R55
+
L58
+
L13
+
L29
+
R536
+
L66
+
R8
+
R92
+
R42
+
L95
+
R66
+
R34
+
L12
+
L22
+
R57
+
R4
+
R79
+
R10
+
R67
+
L92
+
R92
+
R50
+
R17
+
R98
+
L65
+
L432
+
R32
+
L65
+
R13
+
R154
+
R11
+
L64
+
L69
+
L80
+
L43
+
R48
+
R54
+
L298
+
L79
+
R72
+
L54
+
L141
+
R67
+
R74
+
L19
+
R16
+
L219
+
R27
+
R94
+
L38
+
L27
+
L534
+
R14
+
R86
+
L87
+
R25
+
R62
+
L83
+
R683
+
L34
+
R39
+
R283
+
R513
+
R99
+
R47
+
L48
+
R95
+
R70
+
L28
+
R28
+
L86
+
L78
+
R41
+
R94
+
R65
+
L82
+
L5
+
R26
+
L14
+
R21
+
L11
+
L36
+
L79
+
R97
+
L570
+
R42
+
R87
+
R24
+
R82
+
R7
+
L365
+
L24
+
L18
+
R18
+
R29
+
R971
+
L240
+
L96
+
L36
+
L28
+
L960
+
R95
+
L44
+
R9
+
L41
+
L59
+
L5
+
L21
+
L287
+
R13
+
R524
+
R97
+
R79
+
L55
+
R22
+
R33
+
R54
+
R87
+
R218
+
R54
+
L13
+
L11
+
L46
+
R60
+
L3
+
R73
+
R227
+
R80
+
R20
+
R49
+
R82
+
L31
+
L23
+
R423
+
R345
+
R61
+
L30
+
L35
+
L41
+
L26
+
L53
+
R2
+
L23
+
L33
+
L79
+
R312
+
L81
+
R817
+
L26
+
R98
+
L8
+
R39
+
R19
+
L47
+
R89
+
R24
+
L124
+
L4
+
L47
+
R17
+
R95
+
R233
+
R88
+
R491
+
L673
+
L66
+
R672
+
R53
+
R80
+
L39
+
R36
+
L36
+
L4
+
R4
+
R87
+
R13
+
R33
+
R52
+
L687
+
L98
+
R91
+
R646
+
L22
+
R278
+
L26
+
R67
+
L34
+
R96
+
R504
+
R24
+
L3
+
R938
+
R41
+
L94
+
L606
+
L13
+
R13
+
R4
+
L4
+
R35
+
R78
+
L37
+
L76
+
L98
+
L2
+
L940
+
R63
+
L56
+
R33
+
L86
+
L3
+
R89
+
L14
+
L718
+
R76
+
L96
+
L72
+
L25
+
L34
+
L30
+
L91
+
L96
+
L1
+
R705
+
L4
+
R80
+
R20
+
L33
+
L27
+
R60
+
L19
+
L81
+
L56
+
R15
+
R741
+
R548
+
R52
+
R15
+
R9
+
L25
+
L88
+
L359
+
R48
+
L81
+
R481
+
L55
+
R155
+
R22
+
L22
+
R565
+
R69
+
R81
+
R85
+
R3
+
R4
+
L10
+
L97
+
R71
+
L6
+
L65
+
L92
+
L68
+
R92
+
L32
+
L70
+
L46
+
L84
+
R32
+
R68
+
L61
+
L39
+
L58
+
L83
+
R43
+
R713
+
L15
+
R6
+
R18
+
R876
+
R48
+
R21
+
R47
+
R84
+
L39
+
R39
+
L67
+
L65
+
R65
+
L33
+
R5
+
R96
+
L95
+
R94
+
R71
+
L71
+
R6
+
R48
+
R46
+
L53
+
R53
+
L85
+
R985
+
L47
+
L7
+
R29
+
R64
+
L24
+
L207
+
R92
+
R92
+
L58
+
R66
+
R765
+
L54
+
R4
+
L15
+
L290
+
L10
+
R24
+
L98
+
L85
+
R59
+
L35
+
R35
+
R81
+
R273
+
R646
+
R76
+
R438
+
R510
+
R45
+
L2
+
L7
+
R240
+
L724
+
R56
+
R416
+
R531
+
L79
+
L61
+
L839
+
R16
+
L35
+
L42
+
R1
+
R78
+
R11
+
R71
+
R406
+
R4
+
R93
+
R397
+
L21
+
L79
+
R26
+
R74
+
R67
+
L67
+
L81
+
L519
+
L80
+
L50
+
R42
+
R58
+
R830
+
L476
+
L24
+
L48
+
L746
+
R94
+
L50
+
R161
+
L99
+
R59
+
L6
+
L65
+
L97
+
L10
+
R768
+
L761
+
L68
+
R141
+
R27
+
R79
+
L579
+
R61
+
L256
+
R70
+
R60
+
L35
+
L61
+
L139
+
R687
+
R89
+
R24
+
L32
+
L25
+
L11
+
L75
+
L63
+
L846
+
L848
+
R87
+
L83
+
L4
+
R28
+
L28
+
L66
+
R88
+
L76
+
R58
+
L99
+
R50
+
R45
+
R88
+
L69
+
L772
+
R653
+
L199
+
R70
+
L54
+
L35
+
R48
+
L530
+
L54
+
R970
+
L16
+
R749
+
L582
+
R52
+
R581
+
R36
+
L889
+
R22
+
R31
+
L495
+
R95
+
L91
+
R201
+
R90
+
L66
+
L34
+
L96
+
L4
+
L29
+
R27
+
R22
+
L74
+
R56
+
L67
+
L35
+
L271
+
L29
+
L93
+
L164
+
R892
+
L35
+
L651
+
L49
+
L88
+
L12
+
R38
+
L38
+
R75
+
L75
+
L23
+
L44
+
L10
+
L56
+
L67
+
R734
+
R66
+
R28
+
L92
+
L11
+
L510
+
R97
+
R48
+
R32
+
L92
+
L526
+
R85
+
R175
+
L34
+
L310
+
L490
+
R623
+
R17
+
L17
+
L73
+
L50
+
L624
+
R78
+
L71
+
L83
+
L58
+
R9
+
R55
+
L46
+
R44
+
R14
+
R74
+
L92
+
L33
+
L22
+
R93
+
R41
+
R758
+
L67
+
L70
+
L439
+
L415
+
L81
+
L57
+
R165
+
L94
+
L609
+
L41
+
R71
+
L218
+
L94
+
L45
+
L45
+
R33
+
R69
+
L36
+
L33
+
L31
+
L89
+
R15
+
R50
+
R224
+
L77
+
L87
+
L847
+
R10
+
R1
+
R25
+
R75
+
L190
+
L39
+
L25
+
R54
+
L28
+
R28
+
R18
+
R98
+
L16
+
L84
+
R21
+
R7
+
R56
+
L83
+
R83
+
R337
+
L239
+
R44
+
R64
+
L820
+
R225
+
R91
+
L72
+
R70
+
L84
+
L16
+
L472
+
R57
+
R78
+
R18
+
R13
+
R71
+
R20
+
R72
+
L40
+
R37
+
L403
+
L201
+
L50
+
L94
+
L35
+
R29
+
R20
+
R554
+
L23
+
L51
+
L19
+
R96
+
R94
+
R29
+
R74
+
L55
+
L719
+
L74
+
L26
+
R13
+
L13
+
R28
+
R54
+
R56
+
L38
+
R77
+
R23
+
R11
+
R89
+
R45
+
L45
+
R42
+
L1
+
L9
+
L69
+
R37
+
L7
+
L97
+
L996
+
L13
+
L57
+
L6
+
L24
+
R682
+
L82
+
R20
+
R80
+
L664
+
R64
+
R48
+
R85
+
R67
+
R19
+
R84
+
L28
+
L41
+
L67
+
L99
+
R32
+
R24
+
R97
+
L78
+
R57
+
R96
+
L2
+
L94
+
R53
+
R43
+
L12
+
R628
+
L280
+
L67
+
R92
+
L363
+
R6
+
L11
+
L423
+
L49
+
L17
+
R137
+
R96
+
L85
+
R59
+
R93
+
L895
+
R95
+
L56
+
R80
+
L24
+
L29
+
L42
+
L85
+
R594
+
L38
+
L89
+
R69
+
L80
+
L81
+
R81
+
L60
+
L686
+
L54
+
R22
+
L22
+
L34
+
L66
+
L78
+
R89
+
L211
+
R39
+
L39
+
R7
+
R10
+
L317
+
R70
+
R91
+
L61
+
R66
+
L66
+
R59
+
R862
+
L52
+
L18
+
R34
+
R15
+
L10
+
R45
+
R98
+
L10
+
R999
+
R78
+
L23
+
R45
+
R78
+
L585
+
R209
+
R676
+
L9
+
L3
+
L171
+
R83
+
L57
+
R957
+
L237
+
R37
+
L83
+
R83
+
L64
+
R87
+
R77
+
R9
+
R20
+
L380
+
R7
+
L83
+
R527
+
R71
+
R29
+
R83
+
R987
+
L275
+
L3
+
R36
+
R32
+
R73
+
R67
+
L36
+
L25
+
R61
+
R52
+
L41
+
R889
+
L40
+
L62
+
R83
+
R419
+
R47
+
L63
+
L57
+
R44
+
R397
+
R88
+
R44
+
R890
+
R10
+
R28
+
R72
+
L58
+
L53
+
L57
+
L21
+
R33
+
R56
+
R429
+
L63
+
R83
+
L749
+
L49
+
L851
+
R666
+
R53
+
R64
+
R78
+
L13
+
L348
+
R126
+
R74
+
R48
+
L31
+
R99
+
R43
+
L59
+
L91
+
R807
+
L16
+
L19
+
L33
+
L10
+
R81
+
L64
+
R49
+
R63
+
L997
+
R70
+
L29
+
R89
+
L663
+
R79
+
L642
+
R366
+
R61
+
L84
+
L17
+
L66
+
L710
+
R40
+
L7
+
R43
+
L394
+
R94
+
L7
+
R58
+
R49
+
R83
+
L83
+
L96
+
L4
+
R30
+
R70
+
L75
+
R75
+
L587
+
L514
+
L99
+
R22
+
L22
+
R90
+
L6
+
R31
+
L15
+
L34
+
L66
+
L45
+
L355
+
L17
+
L37
+
L93
+
L53
+
L70
+
L889
+
L92
+
R12
+
R31
+
L48
+
L46
+
L93
+
R95
+
R759
+
L78
+
R34
+
L25
+
L37
+
R77
+
L34
+
L43
+
L53
+
L91
+
L22
+
L324
+
L63
+
R35
+
L135
+
R171
+
R29
+
R849
+
L22
+
L27
+
L79
+
R79
+
R75
+
R2
+
R23
+
R36
+
R684
+
L52
+
R6
+
R426
+
L62
+
L85
+
L52
+
R28
+
L29
+
R16
+
R84
+
L20
+
R92
+
R36
+
R92
+
L60
+
L32
+
L8
+
L12
+
R52
+
L86
+
R904
+
L58
+
R69
+
R33
+
R499
+
L501
+
L727
+
R60
+
R74
+
L55
+
L52
+
R16
+
L67
+
L46
+
L3
+
R11
+
R10
+
L10
+
L11
+
L627
+
L15
+
L73
+
R379
+
L863
+
R11
+
L90
+
R2
+
R10
+
R29
+
R137
+
R284
+
R616
+
R59
+
R30
+
R816
+
R48
+
L430
+
L84
+
L97
+
R147
+
R11
+
L261
+
R61
+
R76
+
R24
+
L652
+
L24
+
L24
+
R656
+
L56
+
L22
+
L978
+
R797
+
R3
+
R620
+
R80
+
L25
+
L75
+
L94
+
R65
+
L75
+
R304
+
L26
+
R26
+
L26
+
R31
+
R72
+
L77
+
L835
+
R97
+
R38
+
L85
+
L12
+
R232
+
L35
+
L142
+
R3
+
L261
+
L27
+
R27
+
R71
+
L71
+
L71
+
R511
+
L44
+
L489
+
R89
+
L163
+
L169
+
R696
+
R40
+
R62
+
L95
+
R60
+
R73
+
R185
+
L51
+
R82
+
L20
+
R4
+
R54
+
L54
+
L93
+
R693
+
L19
+
R19
+
L472
+
R58
+
L686
+
L88
+
R35
+
R25
+
L72
+
L38
+
L8
+
R46
+
R63
+
L63
+
R150
+
L12
+
R62
+
R80
+
L80
+
R40
+
L1
+
L245
+
L94
+
L75
+
L58
+
L67
+
L29
+
R29
+
L97
+
L617
+
L58
+
L39
+
R29
+
L73
+
L167
+
L7
+
R91
+
R657
+
L47
+
L672
+
L392
+
R44
+
R19
+
R82
+
R594
+
R24
+
L62
+
L99
+
L29
+
R64
+
L45
+
R91
+
R88
+
R921
+
R70
+
L83
+
R74
+
L75
+
R7
+
R26
+
R81
+
L68
+
R761
+
L21
+
R828
+
R70
+
R19
+
L89
+
L73
+
L20
+
L51
+
L56
+
R138
+
R65
+
R467
+
R64
+
L55
+
R682
+
R31
+
L65
+
L27
+
L45
+
L55
+
L99
+
R520
+
L8
+
R78
+
R427
+
L718
+
R36
+
R76
+
R88
+
R53
+
R13
+
R34
+
R27
+
R30
+
R23
+
R63
+
L22
+
R49
+
L3
+
R595
+
L62
+
L10
+
L90
+
L90
+
R90
+
R63
+
R599
+
R38
+
R8
+
L12
+
L96
+
L52
+
L755
+
R91
+
L834
+
R50
+
R62
+
L62
+
L886
+
R94
+
L134
+
R674
+
L889
+
L12
+
L425
+
R50
+
L72
+
R90
+
L95
+
R563
+
L58
+
L61
+
R361
+
R25
+
R80
+
L89
+
L51
+
L65
+
L94
+
R69
+
R62
+
R3
+
L40
+
L870
+
R770
+
L69
+
R69
+
R404
+
L4
+
R86
+
R44
+
L90
+
R42
+
L82
+
R65
+
R18
+
R142
+
R96
+
R79
+
L53
+
R53
+
R64
+
R24
+
L18
+
L470
+
L99
+
L19
+
L972
+
R52
+
L62
+
L94
+
L46
+
L82
+
R22
+
L89
+
L83
+
L801
+
R9
+
R12
+
L126
+
R85
+
R58
+
L765
+
R91
+
R37
+
R72
+
L3
+
L1
+
R97
+
L81
+
L58
+
R485
+
R361
+
L93
+
L7
+
R12
+
R288
+
R24
+
L24
+
L11
+
L60
+
R71
+
L98
+
L15
+
L42
+
L44
+
L1
+
R53
+
R913
+
L66
+
R3
+
L3
+
L20
+
L4
+
R30
+
L44
+
L391
+
R29
+
L38
+
L62
+
L908
+
L26
+
R9
+
L84
+
R9
+
L71
+
R90
+
R81
+
R35
+
R28
+
L19
+
R67
+
L11
+
R46
+
R36
+
L382
+
R20
+
L20
+
L79
+
R615
+
R55
+
R9
+
R98
+
R66
+
L6
+
L38
+
L60
+
L60
+
R18
+
L84
+
L807
+
L58
+
L54
+
L31
+
R16
+
R90
+
L12
+
L78
+
R81
+
R119
+
R72
+
R28
+
R57
+
L657
+
L8
+
L98
+
L313
+
R56
+
R26
+
L75
+
L3
+
R15
+
R6
+
R95
+
R25
+
L26
+
R82
+
R57
+
R61
+
R70
+
L70
+
R46
+
R39
+
R98
+
L452
+
L616
+
L35
+
R20
+
L795
+
L5
+
R38
+
R62
+
L27
+
R99
+
R49
+
L48
+
R39
+
L36
+
R7
+
L57
+
R84
+
R90
+
L77
+
R89
+
R88
+
R51
+
L4
+
L47
+
L432
+
R32
+
R66
+
L66
+
R9
+
R91
+
L96
+
R96
+
L38
+
R38
+
R827
+
L527
+
R77
+
L930
+
R53
+
L75
+
L50
+
R88
+
L959
+
L94
+
L78
+
R68
+
L59
+
L41
+
L95
+
R195
+
L99
+
L20
+
L32
+
L53
+
R67
+
L63
+
L74
+
L26
+
L58
+
R31
+
R90
+
L163
+
R10
+
R64
+
R18
+
L43
+
R51
+
R67
+
R54
+
L175
+
R36
+
L131
+
L83
+
R832
+
L36
+
L84
+
R820
+
L99
+
R99
+
L39
+
L285
+
R624
+
R86
+
R14
+
R66
+
L37
+
L83
+
R41
+
L87
+
R97
+
R6
+
L3
+
L953
+
L247
+
L949
+
L95
+
L2
+
R43
+
L97
+
L66
+
R66
+
L3
+
L97
+
R92
+
R69
+
R39
+
L55
+
L45
+
R62
+
L62
+
R62
+
R24
+
R86
+
R69
+
R59
+
R5
+
R43
+
L60
+
R65
+
L50
+
L51
+
R48
+
L82
+
R83
+
R99
+
L36
+
L64
+
R20
+
R36
+
L40
+
R40
+
L19
+
L37
+
L13
+
L87
+
R66
+
R22
+
L30
+
L39
+
R81
+
R46
+
L46
+
R73
+
R94
+
L86
+
L81
+
R37
+
L86
+
R49
+
L17
+
R17
+
L31
+
L22
+
L33
+
L2
+
L47
+
R4
+
R35
+
L36
+
L49
+
L30
+
R49
+
R50
+
L33
+
R50
+
L11
+
R18
+
R44
+
R36
+
L29
+
R8
+
L46
+
R37
+
L4
+
R35
+
R44
+
R32
+
L37
+
L16
+
L42
+
L32
+
R1
+
R25
+
L31
+
L15
+
R36
+
R47
+
R40
+
R28
+
L29
+
R35
+
L6
+
L4
+
L4
+
R48
+
R23
+
L16
+
L32
+
L10
+
R35
+
R17
+
R41
+10
1/smol.txt
···
···
+
L68
+
L30
+
R48
+
L5
+
R60
+
L55
+
L1
+
L99
+
R14
+
L82
2/2

This is a binary file and will not be displayed.

+120
2/2.c
···
···
+
#include <math.h>
+
#include <stdio.h>
+
#include <stdlib.h>
+
#include <string.h>
+
+
+
int count_digit(unsigned long long num){
+
int len = 0;
+
while (num!=0) {
+
num /= 10;
+
len++;
+
+
}
+
return len;
+
}
+
+
int part_one_invalid(unsigned long long num) {
+
int answer = 0;
+
+
int len = count_digit(num);
+
if (len%2) {
+
answer = 0;
+
}
+
+
//it gonna be pair so no worry
+
unsigned long long halfer = pow(10, len/2);
+
+
if (num/halfer == num%halfer) {
+
answer = 1;
+
}
+
return answer;
+
+
}
+
+
+
int part_two_invalid(unsigned long long num) {
+
int answer = 0;
+
int len = count_digit(num);
+
int j;
+
+
for (int i =1; i<=len/2; i++) {
+
if (!((len%i)==0)) {
+
continue;
+
}
+
int chunk_num = len/i;
+
// use / and % to isolate chunks, with powers of 10 to the i
+
long long first = num % (long long)pow(10, i);
+
+
for (j = 1; j< chunk_num; j++) {
+
long long chunk = num % (long long)pow(10,i*(j+1))/ (long long)pow(10,i*j);
+
if (chunk != first) {
+
break;
+
+
}
+
}
+
if (j == chunk_num) {
+
answer=1;
+
}
+
+
+
}
+
+
+
+
return answer;
+
}
+
+
int main (int argc, char* argv[]) {
+
+
FILE* f = NULL;
+
char* line = NULL;
+
+
unsigned long long start = 0;
+
unsigned long long end = 0;
+
long long front_part = 0;
+
long long end_part = 0;
+
unsigned long long invalid_sum = 0;
+
ssize_t nlength;
+
size_t size = 0;
+
+
f = fopen(argv[1],"r");
+
+
while ((nlength = getdelim(&line, &size, ',', f) != -1)) {
+
start = atoll(strsep(&line, "-"));
+
end = atoll(strsep(&line, "-"));
+
+
printf("start: %llu ",start);
+
printf("end: %llu\n",end);
+
+
+
+
+
for (unsigned long long i = start; i<=end; i++) {
+
+
+
+
if (part_two_invalid(i)) {
+
invalid_sum += i;
+
printf("invalid number found: %llu\n",i);
+
+
}
+
+
+
+
+
+
}
+
+
+
+
}
+
+
+
printf("invalid sum: %llu", invalid_sum);
+
+
+
free(line);
+
free(f);
+
return 0;
+
}
+1
2/input.txt
···
···
+
11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124
+1
2/large_input.txt
···
···
+
3335355312-3335478020,62597156-62638027,94888325-95016472,4653-6357,54-79,1-19,314-423,472-650,217886-298699,58843645-58909745,2799-3721,150748-178674,9084373-9176707,1744-2691,17039821-17193560,2140045-2264792,743-1030,6666577818-6666739950,22946-32222,58933-81008,714665437-714803123,9972438-10023331,120068-142180,101-120,726684-913526,7575737649-7575766026,8200-11903,81-96,540949-687222,35704-54213,991404-1009392,335082-425865,196-268,3278941-3383621,915593-991111,32-47,431725-452205
+1
2/mini.txt
···
···
+
11-22,95-115,998-1012,2121212118-2121212124