day 1

kokirigla.de 60434029

verified
+1
.gitignore
···
+
/target
+16
Cargo.lock
···
+
# This file is automatically @generated by Cargo.
+
# It is not intended for manual editing.
+
version = 4
+
+
[[package]]
+
name = "anyhow"
+
version = "1.0.100"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
+
+
[[package]]
+
name = "aoc2025"
+
version = "0.1.0"
+
dependencies = [
+
"anyhow",
+
]
+7
Cargo.toml
···
+
[package]
+
name = "aoc2025"
+
version = "0.1.0"
+
edition = "2024"
+
+
[dependencies]
+
anyhow = "1"
+3
README.md
···
+
# AOC 2025
+
+
my BLAZING FAST and MEMORY SAFE aoc solutions. ๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€
+131
src/day1.rs
···
+
use anyhow::Context;
+
const INPUT: &str = include_str!("input/1/actual.txt");
+
+
pub fn main() -> anyhow::Result<()> {
+
let rotations = Rotation::parse_file(INPUT).context("parsing input")?;
+
+
let mut dial = Dial::new(50, true);
+
+
dial.apply_rotations(&rotations);
+
+
println!("{:?}", dial);
+
+
Ok(())
+
}
+
+
#[derive(Debug)]
+
struct Dial {
+
value: i32,
+
times_left_at_zero: u32,
+
/// for extra challenge thing
+
extra_mode: bool,
+
}
+
+
impl Dial {
+
const SIZE: i32 = 100;
+
+
pub fn new(initial_value: i32, extra: bool) -> Dial {
+
Dial {
+
value: initial_value,
+
times_left_at_zero: 0,
+
extra_mode: extra,
+
}
+
}
+
+
pub fn apply_rotations(&mut self, rotations: &Vec<Rotation>) {
+
rotations.iter().for_each(|rotation| {
+
if self.extra_mode {
+
self.times_left_at_zero += self.hits_zero_during(rotation);
+
self.apply_rotation(rotation);
+
} else {
+
self.apply_rotation(rotation);
+
if self.value == 0 {
+
self.times_left_at_zero += 1;
+
}
+
}
+
});
+
}
+
+
fn apply_rotation(&mut self, rotation: &Rotation) {
+
match rotation.direction {
+
Direction::Left => self.value -= rotation.amount,
+
Direction::Right => self.value += rotation.amount,
+
}
+
+
self.value = self.value.rem_euclid(Self::SIZE);
+
}
+
+
fn hits_zero_during(&self, rotation: &Rotation) -> u32 {
+
if rotation.amount <= 0 {
+
return 0;
+
}
+
+
// how many steps until next hit 0
+
// this gave me a headache. boy do i suck at maths.
+
// this is my punishment for sleeping through every maths class in school.
+
let turns_needed = match rotation.direction {
+
Direction::Right => {
+
if self.value == 0 {
+
Self::SIZE
+
} else {
+
Self::SIZE - self.value
+
}
+
}
+
Direction::Left => {
+
if self.value == 0 {
+
Self::SIZE
+
} else {
+
self.value
+
}
+
}
+
};
+
+
if rotation.amount < turns_needed {
+
0
+
} else {
+
1 + ((rotation.amount - turns_needed) / Self::SIZE) as u32
+
}
+
}
+
}
+
+
#[derive(Debug, PartialEq, Eq)]
+
enum Direction {
+
Left,
+
Right,
+
}
+
+
impl Direction {
+
pub fn parse(character: char) -> anyhow::Result<Direction> {
+
match character {
+
'L' => Ok(Self::Left),
+
'R' => Ok(Self::Right),
+
_ => Err(anyhow::anyhow!("unknown direction char '{}'", character)),
+
}
+
}
+
}
+
+
#[derive(Debug)]
+
struct Rotation {
+
direction: Direction,
+
amount: i32,
+
}
+
+
impl Rotation {
+
pub fn parse_file(text: &str) -> anyhow::Result<Vec<Rotation>> {
+
text.lines().map(Rotation::parse).collect()
+
}
+
+
pub fn parse(line: &str) -> anyhow::Result<Rotation> {
+
let mut chars = line.chars();
+
+
let direction = Direction::parse(chars.next().context("popping first char")?)
+
.context("parsing direction")?;
+
+
let amount = chars
+
.collect::<String>()
+
.parse::<i32>()
+
.context("parsing remaining number")?;
+
+
Ok(Self { direction, amount })
+
}
+
}
+4545
src/input/1/actual.txt
···
+
R27
+
R13
+
L8
+
R30
+
R22
+
L9
+
L32
+
R22
+
R20
+
R16
+
R4
+
R25
+
L34
+
L40
+
L31
+
R34
+
R44
+
R43
+
L23
+
L8
+
L44
+
L16
+
R31
+
L16
+
L48
+
L29
+
L38
+
L31
+
L41
+
L36
+
R36
+
L9
+
L8
+
L33
+
R30
+
R29
+
R17
+
L46
+
L31
+
L27
+
L46
+
R13
+
L50
+
L40
+
L23
+
R3
+
R11
+
L25
+
L50
+
R95
+
L44
+
L48
+
L87
+
R7
+
L87
+
R96
+
L19
+
R51
+
R33
+
L74
+
R29
+
L64
+
R81
+
L22
+
L28
+
L54
+
R4
+
R3
+
R27
+
R54
+
L11
+
L55
+
L35
+
R10
+
L58
+
L4
+
R52
+
R66
+
L66
+
L92
+
L42
+
L17
+
R51
+
R57
+
L44
+
R87
+
L54
+
L14
+
R56
+
L2
+
L86
+
R15
+
R85
+
L44
+
R86
+
L56
+
R62
+
L82
+
L47
+
R81
+
L15
+
L685
+
L18
+
L7
+
R20
+
L95
+
L33
+
R33
+
R59
+
L358
+
R73
+
L274
+
R690
+
R669
+
R40
+
R886
+
L21
+
L54
+
R90
+
R866
+
L16
+
L66
+
R86
+
R89
+
R41
+
R13
+
R79
+
R408
+
L16
+
R68
+
R99
+
R53
+
L795
+
L12
+
L40
+
L357
+
R33
+
L2
+
R69
+
L63
+
R43
+
L22
+
L58
+
R35
+
L35
+
R89
+
L91
+
L198
+
L64
+
R64
+
R89
+
L20
+
R22
+
L74
+
L49
+
R88
+
R6
+
L62
+
L88
+
R88
+
L15
+
R202
+
R52
+
R175
+
L60
+
R10
+
R36
+
R26
+
L28
+
R85
+
L52
+
L60
+
L71
+
R899
+
R20
+
L99
+
L30
+
L793
+
R69
+
R34
+
L82
+
L372
+
L45
+
L149
+
L52
+
L30
+
R782
+
L56
+
R4
+
L53
+
L36
+
L61
+
R51
+
R79
+
R69
+
L79
+
R75
+
L45
+
R74
+
L43
+
L975
+
R51
+
R36
+
R353
+
L69
+
L427
+
L19
+
L352
+
L12
+
L23
+
R6
+
L45
+
R545
+
R84
+
L24
+
R93
+
L45
+
R114
+
L22
+
R801
+
R846
+
R864
+
R189
+
L68
+
R396
+
L521
+
R93
+
R23
+
L823
+
R50
+
L50
+
R76
+
L40
+
L39
+
R203
+
L77
+
R177
+
L50
+
L867
+
L52
+
L531
+
R79
+
L79
+
R95
+
R9
+
L71
+
R67
+
L46
+
L54
+
R558
+
L694
+
R36
+
L35
+
L71
+
R6
+
R62
+
R38
+
L19
+
R29
+
R95
+
L9
+
L43
+
L853
+
L861
+
R79
+
L262
+
L42
+
R86
+
L21
+
L125
+
R75
+
L29
+
L95
+
R24
+
L429
+
L72
+
R41
+
L623
+
R954
+
R15
+
L30
+
R15
+
L68
+
L88
+
L60
+
L716
+
L11
+
L357
+
R85
+
R65
+
L50
+
R89
+
L89
+
L30
+
L70
+
L26
+
R44
+
L18
+
R22
+
R78
+
L69
+
R38
+
R31
+
R69
+
L7
+
R538
+
R726
+
L44
+
R18
+
L923
+
L377
+
R225
+
L25
+
R24
+
R69
+
R57
+
L45
+
R44
+
R13
+
L62
+
R10
+
R21
+
R11
+
L550
+
L90
+
R178
+
R920
+
R46
+
L46
+
L494
+
L6
+
L3
+
R31
+
R72
+
R109
+
R91
+
R585
+
R746
+
L31
+
L79
+
L39
+
L38
+
R120
+
R48
+
R61
+
R8
+
L93
+
L89
+
R47
+
L98
+
R52
+
R4
+
L114
+
L67
+
L308
+
L99
+
L274
+
L116
+
L22
+
R66
+
R51
+
L63
+
L71
+
R46
+
R130
+
L56
+
R95
+
L42
+
R392
+
R978
+
R33
+
R537
+
R53
+
R49
+
L66
+
R639
+
R25
+
R388
+
L9
+
R875
+
L56
+
L98
+
R20
+
R57
+
R59
+
R64
+
R79
+
L60
+
L55
+
R30
+
R84
+
R22
+
R396
+
L81
+
L26
+
L47
+
R35
+
R23
+
R13
+
L70
+
L76
+
R62
+
L29
+
R306
+
L22
+
L795
+
L20
+
L83
+
R64
+
L80
+
L436
+
R566
+
L915
+
L61
+
L24
+
R85
+
L405
+
L80
+
L18
+
R98
+
L353
+
L27
+
L96
+
R296
+
L66
+
R50
+
L50
+
L805
+
R581
+
L10
+
R71
+
L64
+
R121
+
L34
+
R27
+
L490
+
L427
+
L4
+
L98
+
L80
+
R82
+
L57
+
R48
+
R5
+
L432
+
R32
+
L17
+
R17
+
L32
+
R32
+
R22
+
R19
+
L41
+
R580
+
L68
+
R29
+
L41
+
L51
+
R79
+
R72
+
L82
+
L630
+
R67
+
R609
+
R30
+
R706
+
L78
+
R78
+
R6
+
L72
+
L97
+
L19
+
R77
+
R21
+
R84
+
R55
+
L50
+
L5
+
R1
+
R96
+
R141
+
L733
+
R884
+
L89
+
L18
+
L8
+
L68
+
R92
+
R2
+
R34
+
L260
+
R174
+
L37
+
R46
+
R13
+
R16
+
R14
+
R7
+
L65
+
R558
+
R934
+
L99
+
L88
+
L47
+
R991
+
L94
+
R368
+
L65
+
R31
+
R91
+
L48
+
R15
+
R62
+
R51
+
R566
+
L6
+
L462
+
R55
+
R84
+
L39
+
L53
+
L6
+
R448
+
R11
+
R765
+
L4
+
R32
+
R38
+
L49
+
R21
+
L23
+
L80
+
R787
+
L79
+
R92
+
R78
+
L27
+
L20
+
L31
+
R72
+
L37
+
R334
+
L42
+
R34
+
R39
+
R737
+
R65
+
L2
+
R324
+
L24
+
L15
+
L985
+
L53
+
L47
+
L95
+
L49
+
R167
+
L23
+
L220
+
L35
+
R27
+
L64
+
L41
+
R33
+
R38
+
R94
+
R59
+
R664
+
R43
+
R64
+
R38
+
L80
+
R80
+
L94
+
R44
+
L59
+
L84
+
L7
+
L15
+
L30
+
L13
+
R58
+
R53
+
R89
+
L458
+
L55
+
L429
+
R34
+
R38
+
R52
+
L30
+
R6
+
R68
+
L94
+
R33
+
R93
+
R9
+
L9
+
L80
+
R45
+
L65
+
R11
+
R89
+
L46
+
R25
+
L44
+
L11
+
L53
+
L66
+
R995
+
R279
+
L47
+
R60
+
L96
+
R24
+
L15
+
L3
+
L71
+
R3
+
R21
+
R25
+
R1
+
L8
+
R27
+
R939
+
R61
+
L234
+
R54
+
R66
+
L786
+
L39
+
R27
+
L524
+
R89
+
L61
+
R16
+
R97
+
R95
+
R19
+
L19
+
L49
+
L35
+
L12
+
L804
+
R81
+
L81
+
R140
+
R94
+
L57
+
R61
+
L64
+
L74
+
R82
+
L92
+
R10
+
L1
+
L41
+
L70
+
L213
+
L47
+
L31
+
R768
+
L20
+
L4
+
L541
+
R3
+
R594
+
R3
+
R45
+
R83
+
R32
+
L60
+
L61
+
L67
+
L72
+
L33
+
L495
+
L86
+
R426
+
R88
+
L12
+
L88
+
R70
+
L70
+
R28
+
L28
+
L21
+
R24
+
R85
+
R12
+
R879
+
R721
+
R2
+
R98
+
L904
+
L121
+
R25
+
L985
+
R38
+
R83
+
L36
+
L640
+
R354
+
L14
+
L2
+
R2
+
L232
+
L18
+
R450
+
L30
+
R96
+
R58
+
L91
+
R67
+
R26
+
R974
+
R45
+
L45
+
L278
+
R17
+
R61
+
L658
+
L42
+
L95
+
L52
+
L53
+
L59
+
L641
+
R89
+
L42
+
L49
+
L468
+
R81
+
R55
+
L50
+
L369
+
L47
+
L72
+
R64
+
R12
+
L94
+
R37
+
L47
+
R85
+
L85
+
R876
+
L26
+
R3
+
R8
+
L61
+
R15
+
L612
+
R40
+
L37
+
R894
+
R10
+
R790
+
R8
+
L40
+
L268
+
L515
+
R15
+
L383
+
R83
+
R317
+
L175
+
L21
+
L1
+
R777
+
R83
+
R36
+
L63
+
R161
+
L14
+
R40
+
R91
+
R11
+
R51
+
R64
+
L392
+
L46
+
L19
+
R2
+
L81
+
L57
+
R24
+
R94
+
L82
+
L30
+
R256
+
R389
+
R65
+
R20
+
L403
+
R3
+
R8
+
R92
+
R13
+
R51
+
L50
+
L14
+
R36
+
R64
+
R77
+
R484
+
L54
+
L97
+
L10
+
L53
+
L58
+
L89
+
L38
+
L62
+
R45
+
R91
+
L36
+
R36
+
R364
+
R540
+
L40
+
R17
+
L686
+
R5
+
L118
+
R79
+
L97
+
L55
+
R14
+
L89
+
R34
+
L5
+
L99
+
L15
+
L88
+
R3
+
R55
+
L177
+
L888
+
L490
+
L97
+
L42
+
R39
+
R77
+
L77
+
L14
+
L86
+
R9
+
L9
+
R77
+
L77
+
R639
+
R43
+
R396
+
R22
+
L84
+
R84
+
L5
+
R905
+
R50
+
R52
+
R98
+
L99
+
L407
+
R7
+
L27
+
R31
+
R89
+
R6
+
R173
+
R87
+
R40
+
L83
+
R75
+
L792
+
R96
+
L73
+
R577
+
R33
+
L91
+
R158
+
L64
+
R64
+
L746
+
R46
+
L311
+
R828
+
L96
+
R63
+
L484
+
R887
+
R13
+
L86
+
L75
+
R34
+
L39
+
L5
+
R71
+
R644
+
L12
+
R68
+
R366
+
L32
+
R87
+
L1
+
R18
+
L53
+
R15
+
L16
+
R8
+
R79
+
R20
+
L35
+
L31
+
R920
+
L445
+
R60
+
L71
+
L64
+
R75
+
R68
+
R732
+
L11
+
L8
+
L3
+
L34
+
L44
+
L43
+
R43
+
R10
+
R774
+
L36
+
R52
+
R61
+
L61
+
R36
+
L36
+
R4
+
L208
+
L96
+
L39
+
L561
+
L47
+
L53
+
L76
+
L29
+
R58
+
R81
+
R66
+
R26
+
L426
+
L4
+
R904
+
R40
+
L40
+
L70
+
R55
+
R63
+
R566
+
R2
+
L92
+
L97
+
L967
+
L38
+
R29
+
L54
+
L99
+
R19
+
L17
+
R6
+
L206
+
R830
+
R21
+
L72
+
R597
+
L78
+
L298
+
L22
+
R783
+
L32
+
R636
+
R971
+
L274
+
L74
+
L48
+
L27
+
R87
+
R48
+
L783
+
L65
+
R393
+
L93
+
L824
+
L45
+
R15
+
L630
+
L60
+
R8
+
R36
+
R43
+
L6
+
R80
+
R83
+
L86
+
L613
+
R21
+
R8
+
R98
+
L47
+
L81
+
L24
+
R57
+
R94
+
R495
+
L89
+
R67
+
R4
+
R96
+
L34
+
L66
+
R90
+
L90
+
L654
+
L36
+
R44
+
R156
+
L97
+
R68
+
L137
+
L94
+
R4
+
L624
+
L30
+
R274
+
L74
+
L19
+
R10
+
R9
+
L330
+
R379
+
R63
+
L77
+
L35
+
L69
+
L96
+
R26
+
R29
+
L53
+
L34
+
R97
+
L594
+
L769
+
R30
+
L67
+
L74
+
R7
+
R67
+
R92
+
R8
+
R537
+
L68
+
R731
+
R19
+
L719
+
L89
+
L29
+
L82
+
R85
+
R53
+
R46
+
R16
+
R20
+
L34
+
R30
+
R84
+
R56
+
L46
+
R81
+
L57
+
L10
+
R84
+
L8
+
R52
+
L752
+
R28
+
L28
+
L63
+
L40
+
R3
+
R3
+
R72
+
L10
+
L40
+
L381
+
L44
+
R55
+
R745
+
R73
+
L614
+
R630
+
L89
+
R79
+
R97
+
L84
+
R814
+
R26
+
L91
+
L77
+
L464
+
L6
+
R39
+
R52
+
L46
+
L75
+
L59
+
L5
+
L452
+
R16
+
L24
+
L40
+
R826
+
L26
+
L90
+
R34
+
R56
+
L99
+
L1
+
L81
+
L137
+
L382
+
R758
+
L10
+
R637
+
R13
+
R33
+
L22
+
R63
+
L72
+
R88
+
R72
+
L5
+
L87
+
R64
+
R95
+
L12
+
R85
+
R58
+
R22
+
L24
+
L79
+
R238
+
R85
+
L863
+
L318
+
R81
+
R25
+
R71
+
R4
+
R21
+
L13
+
L63
+
L52
+
R83
+
L5
+
R556
+
L27
+
L58
+
R725
+
L82
+
R710
+
L99
+
R4
+
L23
+
L84
+
R170
+
R503
+
L69
+
L31
+
R98
+
R25
+
R311
+
R52
+
L52
+
R54
+
R46
+
R8
+
L81
+
L27
+
L51
+
R33
+
R60
+
L42
+
R94
+
L294
+
L65
+
L81
+
L249
+
R32
+
R74
+
L69
+
R258
+
L29
+
L97
+
R44
+
L85
+
R215
+
L48
+
L91
+
L24
+
R49
+
L34
+
R73
+
R65
+
R98
+
L36
+
L39
+
L2
+
L59
+
R18
+
L67
+
L351
+
L506
+
L94
+
L821
+
R66
+
L638
+
R84
+
R75
+
L66
+
R16
+
R84
+
R27
+
R73
+
R77
+
L877
+
R654
+
R49
+
L853
+
L693
+
L57
+
L26
+
R26
+
R290
+
L29
+
L67
+
L75
+
R38
+
L57
+
L19
+
R19
+
L65
+
R65
+
L47
+
R48
+
R25
+
L39
+
R396
+
R24
+
L45
+
L62
+
R53
+
R47
+
R85
+
L31
+
L54
+
R414
+
L18
+
L92
+
R96
+
R74
+
R26
+
L6
+
R6
+
L37
+
L63
+
R475
+
R25
+
L7
+
L93
+
R79
+
R21
+
L72
+
R87
+
L15
+
L31
+
L805
+
L30
+
R66
+
L78
+
R51
+
L73
+
R737
+
R95
+
R68
+
R509
+
R865
+
R36
+
L12
+
R2
+
R40
+
L40
+
R639
+
R19
+
R42
+
L66
+
L191
+
L43
+
L73
+
R55
+
R18
+
R22
+
L22
+
R34
+
L34
+
R50
+
R50
+
R60
+
L760
+
L56
+
L45
+
R171
+
R30
+
L70
+
L30
+
L86
+
L14
+
L76
+
L421
+
L3
+
R66
+
L56
+
L404
+
L1
+
L5
+
R22
+
R395
+
R86
+
L49
+
R55
+
L95
+
L88
+
R74
+
R593
+
L93
+
L82
+
L68
+
R56
+
R665
+
R29
+
L34
+
R782
+
L48
+
R89
+
L89
+
R507
+
R93
+
R17
+
L92
+
R75
+
L58
+
L620
+
L64
+
L58
+
R923
+
L171
+
R31
+
R17
+
R74
+
R26
+
R50
+
R50
+
L65
+
R33
+
L668
+
L229
+
L97
+
R26
+
L37
+
R937
+
R61
+
L8
+
R991
+
R51
+
L33
+
L15
+
L757
+
L692
+
R90
+
L94
+
R6
+
R22
+
L88
+
L434
+
L76
+
R76
+
L57
+
L45
+
R98
+
L93
+
L3
+
L56
+
L48
+
L32
+
L564
+
R39
+
L39
+
R28
+
L428
+
L78
+
L22
+
R97
+
L74
+
R77
+
R76
+
R96
+
R28
+
L3
+
R29
+
L95
+
L87
+
R56
+
R35
+
R11
+
L46
+
R56
+
L42
+
R21
+
R65
+
L54
+
L23
+
R54
+
L79
+
L630
+
R32
+
L37
+
L89
+
L74
+
R41
+
L1
+
L61
+
R92
+
R29
+
R942
+
L42
+
L78
+
R93
+
R9
+
R331
+
L55
+
R18
+
R96
+
R86
+
L1
+
L6
+
L73
+
L20
+
R39
+
R980
+
L853
+
L66
+
R25
+
R83
+
R22
+
L38
+
R8
+
R894
+
L893
+
R802
+
L89
+
R86
+
L41
+
L32
+
R266
+
R95
+
R39
+
R12
+
L39
+
L85
+
R378
+
L9
+
L22
+
L56
+
R47
+
L12
+
R23
+
R73
+
L37
+
L23
+
L677
+
L36
+
R498
+
L23
+
L72
+
R533
+
R31
+
L70
+
R87
+
L88
+
L18
+
R15
+
R701
+
L58
+
R825
+
L25
+
L6
+
R6
+
R65
+
L81
+
R147
+
L42
+
R56
+
R98
+
L1
+
L833
+
R91
+
R47
+
R53
+
R5
+
R52
+
L57
+
R10
+
R51
+
L37
+
R72
+
L96
+
R93
+
L75
+
R282
+
R64
+
R36
+
R39
+
L39
+
R84
+
L69
+
L81
+
R66
+
L53
+
L47
+
L55
+
L38
+
R13
+
R13
+
R441
+
R33
+
L22
+
L936
+
L18
+
L39
+
L678
+
R86
+
R79
+
L29
+
L50
+
R873
+
L23
+
L79
+
L70
+
L43
+
L58
+
L89
+
R89
+
R20
+
R480
+
L50
+
R8
+
R29
+
R69
+
L74
+
R18
+
L8
+
L92
+
R26
+
R23
+
R451
+
R206
+
R94
+
L844
+
L56
+
R21
+
L80
+
L25
+
R784
+
L68
+
R52
+
R88
+
L25
+
R53
+
L170
+
L70
+
L44
+
L516
+
R45
+
L42
+
L3
+
L37
+
R97
+
R61
+
R79
+
R26
+
L49
+
R23
+
L23
+
L75
+
R47
+
R94
+
R57
+
R9
+
L36
+
R49
+
L94
+
L71
+
R43
+
L544
+
R80
+
R22
+
R988
+
L20
+
L75
+
R5
+
R401
+
R30
+
L11
+
R24
+
R57
+
R59
+
L71
+
R77
+
L89
+
L23
+
L10
+
L91
+
R85
+
L608
+
R12
+
R89
+
R42
+
R41
+
L70
+
L52
+
R252
+
R8
+
R49
+
R43
+
R59
+
L99
+
L17
+
L43
+
R908
+
L90
+
R51
+
R74
+
R56
+
L99
+
R14
+
L14
+
R425
+
R75
+
R25
+
R75
+
R96
+
R62
+
L58
+
L932
+
L78
+
R54
+
L55
+
L92
+
L97
+
L31
+
L51
+
R882
+
L56
+
R96
+
L40
+
R44
+
L19
+
R75
+
L93
+
L803
+
L750
+
R32
+
R97
+
R217
+
L59
+
L396
+
L545
+
L51
+
R51
+
L168
+
L88
+
L544
+
L20
+
R20
+
L1
+
L402
+
R59
+
L982
+
L74
+
L2
+
L98
+
L4
+
R63
+
L59
+
L430
+
L84
+
R84
+
L622
+
L48
+
R15
+
L327
+
L82
+
R94
+
R903
+
R404
+
L29
+
L78
+
R87
+
L58
+
L51
+
L78
+
R37
+
R734
+
L4
+
R33
+
R23
+
R82
+
L5
+
R56
+
L20
+
R437
+
R27
+
L907
+
L18
+
R25
+
L87
+
R44
+
L70
+
R13
+
L39
+
L61
+
R42
+
R63
+
R7
+
L212
+
R955
+
L922
+
R56
+
R24
+
L13
+
R63
+
R960
+
L23
+
L547
+
L74
+
R21
+
R54
+
L77
+
R42
+
R88
+
R3
+
R90
+
L62
+
L72
+
R34
+
L94
+
L58
+
L48
+
R86
+
R14
+
L562
+
R56
+
L94
+
L214
+
L59
+
R929
+
R44
+
L913
+
R862
+
L49
+
R19
+
L19
+
L67
+
R8
+
L31
+
L310
+
R28
+
L28
+
L45
+
L32
+
L76
+
L5
+
L42
+
L17
+
R49
+
L932
+
L14
+
L3
+
R17
+
R450
+
R289
+
R61
+
L827
+
L17
+
L56
+
R33
+
R67
+
L796
+
L4
+
L901
+
L41
+
L58
+
R21
+
R12
+
L25
+
R50
+
R42
+
L81
+
L19
+
R454
+
L54
+
L9
+
L91
+
L481
+
R10
+
R771
+
R58
+
L58
+
L32
+
L13
+
R36
+
L82
+
L87
+
L25
+
R40
+
L580
+
R43
+
R76
+
R24
+
L984
+
R655
+
R46
+
R83
+
R23
+
R77
+
R25
+
L10
+
R85
+
L28
+
R39
+
L60
+
L51
+
L32
+
R34
+
R91
+
L73
+
R43
+
L81
+
L82
+
L850
+
L50
+
L91
+
L65
+
R56
+
L76
+
L70
+
R46
+
L39
+
R80
+
L508
+
R3
+
R92
+
L88
+
R438
+
R22
+
L841
+
L40
+
L770
+
L2
+
L57
+
R87
+
L53
+
R3
+
R94
+
R25
+
R54
+
R982
+
L88
+
L96
+
R2
+
R16
+
R53
+
R890
+
R504
+
R871
+
L34
+
R933
+
L20
+
L13
+
R13
+
L84
+
L29
+
R44
+
L58
+
L86
+
R121
+
L21
+
L98
+
R72
+
R26
+
L6
+
L563
+
L86
+
L365
+
R76
+
R74
+
L64
+
L18
+
R52
+
L84
+
L516
+
L426
+
L80
+
L96
+
R45
+
R557
+
L22
+
R22
+
R877
+
R23
+
L489
+
R657
+
R741
+
L9
+
L2
+
L374
+
L24
+
R93
+
L15
+
R15
+
L76
+
R83
+
L233
+
L25
+
L14
+
R72
+
L51
+
L49
+
L12
+
L41
+
L7
+
L40
+
L88
+
R13
+
R75
+
L31
+
L42
+
L27
+
R35
+
R62
+
R80
+
R10
+
L87
+
L48
+
R62
+
R31
+
L45
+
L851
+
R15
+
R36
+
L975
+
R75
+
L38
+
L62
+
R79
+
L70
+
R68
+
L124
+
L55
+
L60
+
R62
+
R43
+
R38
+
L53
+
L99
+
R10
+
R18
+
L51
+
R94
+
L763
+
L724
+
R87
+
R80
+
R20
+
R82
+
L82
+
R68
+
L968
+
R51
+
L90
+
R39
+
L38
+
L562
+
L28
+
R19
+
R86
+
R23
+
R85
+
R15
+
L4
+
L77
+
L19
+
R27
+
L327
+
L50
+
R50
+
L16
+
R16
+
R7
+
L52
+
L25
+
R570
+
R44
+
L92
+
L302
+
L50
+
L44
+
L56
+
L39
+
R24
+
R15
+
L37
+
R12
+
L7
+
R91
+
L459
+
L60
+
L40
+
L83
+
L96
+
R94
+
L7
+
R92
+
R44
+
L86
+
R42
+
L54
+
R88
+
R38
+
L86
+
R20
+
R602
+
R72
+
R1
+
L96
+
L9
+
R545
+
L21
+
L78
+
L22
+
L53
+
R53
+
R5
+
L5
+
R26
+
R74
+
R763
+
R48
+
L11
+
R98
+
L85
+
R94
+
L35
+
L72
+
L52
+
R70
+
L63
+
R412
+
L467
+
R4
+
R26
+
R270
+
L672
+
R72
+
L61
+
L51
+
L44
+
R944
+
L78
+
R5
+
R785
+
L60
+
L40
+
R36
+
R35
+
L40
+
R55
+
L77
+
L863
+
R54
+
L94
+
R94
+
R443
+
L56
+
R12
+
R1
+
R38
+
L27
+
R70
+
L776
+
R65
+
L70
+
L71
+
R75
+
L254
+
R82
+
R635
+
R12
+
L79
+
R62
+
R180
+
L110
+
L19
+
R87
+
L54
+
L46
+
R984
+
R34
+
L18
+
L465
+
R48
+
L83
+
L72
+
L68
+
R40
+
R33
+
L141
+
L192
+
R84
+
R16
+
R59
+
R317
+
L76
+
L53
+
R12
+
R22
+
L67
+
R86
+
R83
+
L391
+
R908
+
L85
+
L15
+
R226
+
L26
+
L7
+
R7
+
L77
+
L20
+
L3
+
L97
+
R145
+
L248
+
R17
+
L59
+
L317
+
R23
+
L83
+
L81
+
L55
+
L45
+
R96
+
L96
+
R12
+
L98
+
R35
+
R51
+
R6
+
L52
+
R46
+
R592
+
R8
+
L39
+
R39
+
L49
+
L49
+
L90
+
L39
+
R92
+
R6
+
R29
+
L6
+
L72
+
R98
+
R77
+
L97
+
L848
+
L92
+
R8
+
L68
+
L96
+
L12
+
R8
+
R36
+
L36
+
R8
+
R6
+
R86
+
L919
+
R26
+
L95
+
L59
+
R47
+
L398
+
R56
+
R76
+
R22
+
R44
+
L23
+
L48
+
R59
+
R12
+
L72
+
L93
+
L52
+
L52
+
L31
+
L28
+
L72
+
R25
+
R38
+
L32
+
R73
+
L887
+
L711
+
L6
+
R44
+
R3
+
R13
+
R13
+
R60
+
R22
+
R70
+
R65
+
L26
+
R994
+
L58
+
L19
+
L81
+
R63
+
R237
+
L9
+
L91
+
R72
+
L982
+
L656
+
R17
+
R41
+
L92
+
L5
+
L72
+
R55
+
R3
+
L81
+
R97
+
R103
+
R106
+
L24
+
R718
+
R55
+
L55
+
L35
+
R94
+
R82
+
L42
+
R39
+
R8
+
R83
+
R71
+
R675
+
L75
+
L620
+
L79
+
L39
+
L62
+
L21
+
L529
+
L13
+
L40
+
R98
+
R71
+
L547
+
R62
+
R417
+
R3
+
R99
+
R88
+
R32
+
L20
+
R67
+
L54
+
R50
+
L21
+
R763
+
R27
+
R468
+
R14
+
L70
+
R856
+
L76
+
R76
+
R636
+
L91
+
L46
+
L99
+
L12
+
R212
+
R5
+
L905
+
R462
+
R463
+
L25
+
L40
+
R10
+
R251
+
R73
+
L34
+
L860
+
R41
+
R74
+
R182
+
L96
+
R71
+
L757
+
R85
+
L156
+
L715
+
R25
+
R70
+
R76
+
L41
+
L78
+
L10
+
R40
+
R63
+
L36
+
R62
+
L12
+
R12
+
L47
+
R47
+
R33
+
L7
+
R456
+
L82
+
L26
+
L674
+
R62
+
R46
+
L974
+
L234
+
L9
+
L91
+
R34
+
R974
+
R58
+
L46
+
L19
+
L68
+
L20
+
R93
+
R7
+
R32
+
R55
+
L40
+
L4
+
L9
+
L84
+
R24
+
L887
+
L57
+
L58
+
L5
+
R61
+
R64
+
L5
+
L83
+
L17
+
L662
+
R62
+
L80
+
R4
+
L24
+
R30
+
L51
+
R721
+
R67
+
R33
+
R80
+
R308
+
L88
+
R558
+
L17
+
L32
+
L97
+
R88
+
L152
+
L848
+
L67
+
R37
+
L70
+
R32
+
L32
+
R86
+
R643
+
R83
+
L12
+
L812
+
L582
+
R29
+
L625
+
R26
+
R20
+
L251
+
L5
+
R14
+
R26
+
R60
+
R90
+
R57
+
L96
+
L51
+
L56
+
L62
+
L82
+
R60
+
L61
+
L99
+
L30
+
R56
+
R39
+
L565
+
L40
+
R10
+
L70
+
R56
+
L56
+
L68
+
L47
+
R15
+
R499
+
R70
+
L75
+
L25
+
L353
+
L516
+
R39
+
R61
+
L41
+
R66
+
L19
+
L6
+
L44
+
R13
+
L14
+
R78
+
R89
+
L90
+
L25
+
R93
+
L11
+
R73
+
R38
+
R9
+
R23
+
R20
+
R62
+
R24
+
R24
+
L41
+
L56
+
L65
+
L309
+
L656
+
R65
+
L87
+
R842
+
L55
+
L31
+
L20
+
L49
+
R407
+
L807
+
R11
+
R87
+
R43
+
L93
+
R41
+
L89
+
R30
+
R70
+
R325
+
R95
+
L79
+
L41
+
L699
+
L656
+
L45
+
L266
+
L168
+
R94
+
L60
+
R61
+
L61
+
R40
+
R60
+
L16
+
L325
+
R41
+
L37
+
R58
+
L21
+
R66
+
R71
+
R24
+
L61
+
R90
+
R56
+
L20
+
R65
+
R65
+
R84
+
L40
+
R703
+
R45
+
R52
+
L95
+
L56
+
L935
+
L84
+
L247
+
L569
+
L26
+
R812
+
L45
+
R372
+
L327
+
R574
+
L98
+
L691
+
L109
+
L176
+
L626
+
L11
+
R37
+
L10
+
L26
+
L64
+
L7
+
R7
+
L72
+
L28
+
L88
+
L12
+
R23
+
L11
+
L566
+
L34
+
L15
+
L673
+
L92
+
R68
+
R726
+
R184
+
R91
+
R26
+
L528
+
L70
+
L94
+
L25
+
R616
+
L40
+
L966
+
R180
+
L48
+
R48
+
L945
+
R146
+
R99
+
L87
+
R55
+
R1
+
R1
+
R12
+
L61
+
L21
+
L16
+
R16
+
L99
+
R99
+
L70
+
L30
+
R36
+
L436
+
R94
+
R6
+
L323
+
R1
+
L186
+
R8
+
L78
+
L29
+
L93
+
L30
+
L63
+
L7
+
L98
+
R98
+
R14
+
R11
+
R75
+
R36
+
L963
+
R127
+
L60
+
L258
+
R89
+
L89
+
R918
+
R6
+
R94
+
R68
+
R53
+
L62
+
R5
+
R36
+
R899
+
R27
+
L37
+
R95
+
L884
+
L23
+
L70
+
L24
+
L36
+
L747
+
R32
+
L9
+
L56
+
L20
+
L54
+
R7
+
L47
+
L53
+
R68
+
L36
+
L77
+
R45
+
L79
+
L8
+
R74
+
L76
+
R96
+
L7
+
L19
+
R19
+
R782
+
R59
+
L94
+
R93
+
L40
+
R5
+
L5
+
L39
+
L61
+
R40
+
R260
+
L199
+
R390
+
L50
+
L41
+
L901
+
R33
+
L81
+
R49
+
R75
+
R51
+
R28
+
R46
+
R355
+
R45
+
R14
+
R52
+
R34
+
R56
+
L58
+
R2
+
L76
+
L28
+
L96
+
L982
+
L18
+
L13
+
L87
+
L12
+
R12
+
R660
+
R40
+
L591
+
R91
+
R32
+
R80
+
R55
+
L61
+
R232
+
L38
+
R79
+
R11
+
R10
+
L31
+
R85
+
L54
+
R44
+
R39
+
R59
+
L42
+
L28
+
L72
+
R43
+
L43
+
L77
+
R77
+
R29
+
R334
+
L63
+
L4
+
R4
+
L18
+
L441
+
L29
+
L12
+
R684
+
L54
+
L6
+
R97
+
R96
+
R592
+
L193
+
R55
+
R866
+
L37
+
R12
+
R540
+
R2
+
L85
+
L11
+
R18
+
R89
+
L81
+
L384
+
L94
+
L65
+
R87
+
R72
+
R92
+
L86
+
R36
+
R33
+
R25
+
L9
+
L70
+
L101
+
L36
+
R98
+
R88
+
R54
+
L951
+
L67
+
L6
+
L36
+
R29
+
R7
+
L51
+
L26
+
R6
+
R71
+
R34
+
L5
+
L18
+
R89
+
L34
+
R91
+
R999
+
R80
+
L336
+
R87
+
R13
+
R76
+
R644
+
L20
+
L75
+
L25
+
R142
+
R54
+
L596
+
R86
+
R14
+
L956
+
R90
+
R29
+
L63
+
R74
+
R26
+
R1
+
R99
+
R84
+
R78
+
L62
+
L902
+
R69
+
L67
+
L31
+
L569
+
L824
+
L76
+
L80
+
L91
+
L29
+
L22
+
R22
+
L82
+
R17
+
R65
+
R325
+
L22
+
R15
+
L18
+
L29
+
R29
+
R94
+
L35
+
L89
+
R69
+
L94
+
L864
+
R37
+
R782
+
R32
+
L904
+
L590
+
L81
+
R26
+
R417
+
L4
+
L2
+
R19
+
L96
+
R383
+
R67
+
L67
+
L62
+
R62
+
L6
+
R845
+
R12
+
R49
+
R37
+
L37
+
R7
+
R293
+
L32
+
R732
+
R58
+
R256
+
R85
+
L8
+
R25
+
R15
+
L31
+
L92
+
L840
+
L462
+
L6
+
R58
+
L58
+
R98
+
L98
+
R19
+
L26
+
L68
+
L80
+
L77
+
R62
+
L35
+
L13
+
R16
+
R5
+
R27
+
L72
+
L8
+
L70
+
R83
+
L15
+
R54
+
L2
+
R53
+
R47
+
R84
+
R816
+
L30
+
R64
+
L84
+
L50
+
R62
+
L82
+
R54
+
R36
+
R73
+
L78
+
R35
+
L639
+
L54
+
L70
+
R548
+
L17
+
R33
+
R881
+
R118
+
L33
+
L53
+
R86
+
L80
+
R43
+
L338
+
L313
+
L65
+
R82
+
R62
+
R347
+
R72
+
R681
+
R9
+
L493
+
L6
+
R99
+
L69
+
L52
+
L906
+
R27
+
L74
+
L96
+
R70
+
L102
+
R48
+
L485
+
R39
+
R19
+
L657
+
R738
+
L29
+
R332
+
R97
+
L209
+
R9
+
L64
+
R48
+
L84
+
R57
+
L14
+
R50
+
L693
+
L58
+
R75
+
R42
+
L21
+
R262
+
L64
+
L36
+
L98
+
R857
+
L37
+
R99
+
L34
+
R92
+
L79
+
L24
+
L67
+
L17
+
L61
+
R70
+
L1
+
R44
+
L9
+
L77
+
R85
+
L43
+
R735
+
L38
+
L51
+
R309
+
R284
+
R61
+
L89
+
R997
+
R73
+
L61
+
R80
+
L43
+
R82
+
R64
+
R89
+
R78
+
L70
+
L49
+
R649
+
L88
+
L70
+
R118
+
L9
+
L23
+
R84
+
R99
+
L99
+
L11
+
R899
+
R2
+
R6
+
R44
+
R48
+
L91
+
R48
+
R64
+
R63
+
R416
+
L10
+
R510
+
L67
+
R47
+
R10
+
L602
+
R12
+
R98
+
L198
+
L43
+
R43
+
R10
+
R30
+
R5
+
L83
+
R57
+
R81
+
L45
+
R70
+
R7
+
R785
+
L10
+
R39
+
L46
+
L14
+
R39
+
L151
+
R626
+
L99
+
R72
+
L77
+
R30
+
R737
+
L63
+
R16
+
R27
+
L20
+
R57
+
L80
+
R81
+
L48
+
R67
+
R662
+
R15
+
R35
+
L658
+
L54
+
L97
+
R63
+
L66
+
R54
+
R28
+
L82
+
L89
+
R17
+
R457
+
R815
+
L601
+
L40
+
R41
+
R850
+
R81
+
R68
+
L99
+
R58
+
R7
+
L65
+
L704
+
L90
+
R622
+
L84
+
R840
+
R16
+
R39
+
L39
+
R95
+
L795
+
R82
+
L382
+
R9
+
L47
+
R79
+
L7
+
R66
+
R622
+
R878
+
R51
+
R59
+
R78
+
R2
+
R110
+
R94
+
R89
+
L83
+
L56
+
R94
+
L338
+
R864
+
L52
+
R75
+
L87
+
R793
+
L37
+
L2
+
L50
+
L4
+
L99
+
R12
+
L81
+
R68
+
L99
+
L1
+
R53
+
L54
+
L348
+
R87
+
L68
+
L54
+
L98
+
L462
+
R276
+
L32
+
R69
+
L12
+
L96
+
R39
+
R85
+
R15
+
R30
+
L30
+
R723
+
R60
+
L83
+
R81
+
L94
+
L46
+
L69
+
L8
+
L64
+
R41
+
L492
+
L49
+
R58
+
L58
+
L11
+
R73
+
R38
+
R49
+
L306
+
R567
+
R60
+
L37
+
L91
+
R56
+
L364
+
R785
+
L45
+
L74
+
L39
+
L53
+
L808
+
R580
+
R66
+
R64
+
L10
+
L801
+
R77
+
R52
+
L28
+
L68
+
L32
+
R98
+
L37
+
L15
+
R8
+
R16
+
L70
+
L770
+
R898
+
R36
+
R93
+
L492
+
R22
+
R44
+
L31
+
L69
+
L25
+
L73
+
R57
+
R296
+
R13
+
L13
+
R78
+
R36
+
L79
+
R521
+
L704
+
L38
+
L75
+
L25
+
R597
+
L97
+
L715
+
R67
+
L19
+
L4
+
R71
+
L99
+
L124
+
L177
+
L70
+
R8
+
R63
+
L1
+
L909
+
L91
+
L18
+
L30
+
L94
+
L62
+
L96
+
R73
+
L73
+
R31
+
R39
+
L1
+
L707
+
R60
+
L9
+
L751
+
L580
+
R18
+
R46
+
L86
+
L60
+
R71
+
L592
+
L678
+
L16
+
R15
+
R71
+
L6
+
R35
+
R48
+
L48
+
R40
+
L712
+
L355
+
L99
+
R72
+
R22
+
L68
+
L90
+
R32
+
R52
+
R6
+
L12
+
R94
+
R31
+
L4
+
R61
+
R30
+
L472
+
R676
+
R96
+
L21
+
L79
+
L70
+
R25
+
R45
+
L21
+
R21
+
L92
+
R23
+
L31
+
L47
+
R47
+
L57
+
R68
+
L73
+
L74
+
R35
+
R8
+
R93
+
L759
+
L33
+
R71
+
R73
+
R4
+
L76
+
R20
+
L29
+
L71
+
R79
+
L55
+
R76
+
R89
+
R691
+
L33
+
L68
+
R613
+
L34
+
L52
+
L81
+
L6
+
L131
+
R86
+
L774
+
L96
+
L976
+
R172
+
R64
+
R94
+
R83
+
R59
+
L11
+
L96
+
L29
+
R24
+
L78
+
R90
+
R169
+
L79
+
R27
+
R97
+
R586
+
R12
+
L79
+
L95
+
L238
+
L587
+
L545
+
R95
+
L63
+
L97
+
L3
+
L65
+
R56
+
R34
+
R25
+
R933
+
R10
+
R159
+
R948
+
L48
+
R84
+
L358
+
R22
+
R22
+
L65
+
L89
+
R47
+
R6
+
R21
+
L42
+
R87
+
L12
+
R25
+
R38
+
L11
+
R44
+
L71
+
R43
+
L43
+
R18
+
R93
+
L56
+
R45
+
R66
+
R34
+
R8
+
L613
+
L46
+
L53
+
R38
+
L68
+
R91
+
L57
+
L81
+
R575
+
R2
+
L980
+
L39
+
R5
+
R18
+
R87
+
L87
+
L87
+
R887
+
L31
+
L93
+
R24
+
L960
+
L40
+
R76
+
L726
+
L272
+
L78
+
L6
+
R34
+
L6
+
R93
+
L437
+
L78
+
R9
+
L2
+
R15
+
L22
+
L246
+
L9
+
L78
+
R25
+
L92
+
L993
+
R479
+
R30
+
R8
+
R88
+
L295
+
L98
+
L19
+
L31
+
L80
+
L89
+
L35
+
R35
+
R91
+
R9
+
R228
+
R84
+
L12
+
R432
+
L57
+
L75
+
L49
+
R17
+
R57
+
L10
+
L15
+
R11
+
R54
+
R90
+
R845
+
L89
+
R19
+
L11
+
L54
+
R35
+
L76
+
L24
+
R121
+
R79
+
L14
+
L86
+
R57
+
L558
+
L40
+
R841
+
L90
+
R90
+
L115
+
R15
+
R39
+
L83
+
R82
+
R15
+
R56
+
L819
+
L1
+
L989
+
R3
+
L51
+
R38
+
R74
+
L64
+
R64
+
R36
+
L36
+
R28
+
L67
+
L203
+
L976
+
L46
+
R41
+
R36
+
L77
+
L93
+
R48
+
R32
+
L50
+
L37
+
L105
+
L21
+
R26
+
R339
+
L96
+
L43
+
R25
+
L294
+
R369
+
L542
+
L58
+
L854
+
R54
+
L70
+
L30
+
L8
+
R64
+
R44
+
L97
+
R796
+
R5
+
R10
+
R86
+
R3
+
R97
+
R7
+
L7
+
L53
+
R67
+
R51
+
L365
+
R67
+
R41
+
R392
+
R70
+
R25
+
L88
+
R93
+
L79
+
L24
+
R3
+
R36
+
L231
+
L5
+
R51
+
R280
+
R569
+
L58
+
L742
+
R699
+
R43
+
L71
+
R229
+
L11
+
R41
+
R70
+
R730
+
R70
+
L786
+
L11
+
R72
+
L464
+
R82
+
L945
+
L91
+
R243
+
R36
+
R121
+
L39
+
L18
+
L3
+
L99
+
L97
+
R99
+
R58
+
L58
+
R40
+
R94
+
R81
+
L33
+
L82
+
L37
+
R937
+
R61
+
L390
+
R83
+
R46
+
R92
+
L95
+
L436
+
L36
+
R875
+
L986
+
L81
+
R526
+
L59
+
R372
+
R59
+
R69
+
R32
+
R68
+
L17
+
L83
+
R49
+
L1
+
L28
+
R80
+
R54
+
L64
+
R63
+
R47
+
R6
+
R83
+
R44
+
R15
+
L48
+
R12
+
L22
+
R14
+
R841
+
L77
+
R432
+
L93
+
R93
+
L72
+
R52
+
R87
+
L56
+
R89
+
R11
+
R76
+
L87
+
L36
+
R836
+
R10
+
L310
+
R74
+
L11
+
R37
+
R1
+
R99
+
L444
+
R75
+
L746
+
R60
+
L618
+
L227
+
L59
+
L58
+
R69
+
L59
+
R324
+
R69
+
L6
+
R20
+
R38
+
L538
+
R97
+
L70
+
L60
+
R4
+
L71
+
R165
+
L8
+
L57
+
R42
+
R656
+
R46
+
R58
+
R59
+
R1
+
R50
+
R88
+
L120
+
R50
+
L15
+
L70
+
L346
+
L99
+
L68
+
R97
+
R33
+
R49
+
L11
+
R47
+
R7
+
L51
+
R513
+
R412
+
R47
+
R825
+
R2
+
R770
+
L45
+
R403
+
R67
+
R60
+
R43
+
L70
+
L30
+
L964
+
R35
+
R29
+
R38
+
R62
+
R26
+
R74
+
R58
+
L51
+
R911
+
L736
+
R37
+
L876
+
R84
+
R55
+
L38
+
L52
+
R446
+
R82
+
L20
+
R865
+
R73
+
L23
+
L20
+
R312
+
R93
+
L95
+
L5
+
L65
+
R82
+
R83
+
R59
+
R41
+
L53
+
L56
+
L91
+
R54
+
L2
+
R18
+
L19
+
R449
+
R34
+
L34
+
L31
+
R29
+
L417
+
R54
+
L36
+
R35
+
L83
+
L33
+
R82
+
L68
+
R85
+
R43
+
R80
+
R36
+
L56
+
R80
+
R91
+
R9
+
R93
+
L93
+
R982
+
R1
+
R34
+
L32
+
L45
+
L644
+
R4
+
L596
+
L4
+
L52
+
R852
+
L28
+
R3
+
L89
+
R7
+
L93
+
R15
+
R876
+
L50
+
L75
+
R95
+
L68
+
L52
+
R23
+
R79
+
L476
+
L86
+
L94
+
L186
+
L20
+
R97
+
R922
+
L89
+
R889
+
R128
+
L89
+
L23
+
L865
+
L60
+
L753
+
R62
+
R153
+
R111
+
R65
+
R12
+
R341
+
R18
+
R746
+
L37
+
L9
+
L95
+
L5
+
R514
+
R717
+
L76
+
L87
+
R32
+
R77
+
R4
+
R11
+
R19
+
L11
+
R608
+
R97
+
L19
+
L86
+
R71
+
L25
+
L46
+
R94
+
L68
+
L26
+
R20
+
R91
+
R94
+
L5
+
R196
+
L35
+
R39
+
L23
+
R41
+
L182
+
R534
+
R30
+
R840
+
L39
+
L17
+
L66
+
L18
+
R319
+
L19
+
R92
+
R27
+
R850
+
L69
+
R783
+
L83
+
R58
+
R64
+
L85
+
R5
+
R9
+
R522
+
R26
+
L299
+
L193
+
L7
+
L42
+
L12
+
L746
+
R82
+
L10
+
R54
+
R174
+
L84
+
R84
+
R95
+
L95
+
L40
+
L60
+
L77
+
L27
+
L96
+
R64
+
R57
+
L668
+
R47
+
R178
+
R322
+
L76
+
L24
+
L69
+
R69
+
L181
+
R81
+
R58
+
L87
+
R66
+
L258
+
L32
+
L47
+
R41
+
L841
+
L36
+
R36
+
R67
+
L67
+
R71
+
L71
+
L286
+
L849
+
R244
+
R42
+
R69
+
R74
+
L381
+
R57
+
R30
+
L304
+
L50
+
L46
+
R96
+
L64
+
L432
+
R75
+
R98
+
R27
+
L418
+
L127
+
R63
+
L22
+
L794
+
R87
+
L751
+
R901
+
R23
+
R36
+
R90
+
R12
+
R17
+
L17
+
L91
+
L154
+
L283
+
R50
+
L22
+
L756
+
R756
+
L81
+
R32
+
R74
+
L25
+
R149
+
L459
+
L768
+
R11
+
R84
+
L91
+
R74
+
L58
+
L42
+
L77
+
L23
+
R30
+
R62
+
L84
+
R64
+
R69
+
L5
+
L90
+
L846
+
R98
+
L52
+
L8
+
R27
+
R962
+
R73
+
R51
+
L261
+
R410
+
R4
+
R45
+
R591
+
R39
+
L85
+
L11
+
L8
+
L11
+
R96
+
L60
+
L451
+
R51
+
L61
+
R14
+
R64
+
L335
+
R379
+
L36
+
L17
+
L27
+
L81
+
R9
+
R131
+
R631
+
L72
+
R1
+
R79
+
L28
+
L51
+
R132
+
R33
+
L78
+
L649
+
L43
+
L74
+
R79
+
L6
+
R74
+
L68
+
L20
+
R520
+
L84
+
R34
+
L28
+
L11
+
R589
+
L23
+
L34
+
R82
+
R717
+
L594
+
R91
+
L34
+
L5
+
L2
+
R2
+
L35
+
L39
+
R74
+
R11
+
R73
+
L584
+
L10
+
L90
+
R364
+
L71
+
R9
+
R17
+
R10
+
L36
+
L693
+
R23
+
R77
+
R529
+
R171
+
R88
+
L246
+
R58
+
R468
+
L48
+
R98
+
L18
+
L63
+
L940
+
L97
+
L353
+
R549
+
L56
+
L40
+
L14
+
R14
+
L2
+
L23
+
L41
+
L99
+
R930
+
R74
+
R61
+
R476
+
R124
+
L60
+
L40
+
R974
+
L86
+
R12
+
R9
+
L52
+
L657
+
R63
+
L63
+
R56
+
R23
+
L79
+
L59
+
R17
+
R73
+
L31
+
L2
+
R2
+
L21
+
R93
+
R91
+
R168
+
R48
+
R71
+
L50
+
L78
+
R828
+
R67
+
R83
+
L142
+
L84
+
L174
+
R794
+
L60
+
L34
+
R595
+
L872
+
L75
+
R19
+
R7
+
R474
+
L45
+
L8
+
L25
+
L70
+
L95
+
L35
+
L55
+
L15
+
L31
+
L69
+
L813
+
R50
+
L66
+
R29
+
R11
+
L47
+
L64
+
L48
+
L952
+
L93
+
R43
+
L741
+
L21
+
L78
+
R4
+
L14
+
R821
+
L664
+
R24
+
L97
+
R53
+
L41
+
R45
+
L55
+
L9
+
L77
+
R70
+
R628
+
L98
+
R8
+
R46
+
L96
+
R49
+
L57
+
R64
+
R486
+
R12
+
L12
+
L86
+
R86
+
L27
+
L34
+
R47
+
L14
+
R28
+
L38
+
L530
+
L39
+
R37
+
L30
+
R7
+
R52
+
R55
+
R70
+
L26
+
L56
+
L858
+
R56
+
L148
+
R61
+
R25
+
L38
+
L21
+
R42
+
L21
+
L90
+
L11
+
L83
+
R95
+
R52
+
R60
+
L44
+
R121
+
R64
+
R36
+
L383
+
L79
+
R34
+
L72
+
L50
+
R19
+
L4
+
L65
+
R2
+
R198
+
R49
+
L95
+
R346
+
L4
+
R4
+
R60
+
L22
+
L13
+
L30
+
R705
+
L121
+
L12
+
R78
+
L18
+
R614
+
L255
+
R714
+
L13
+
R73
+
L59
+
L701
+
R43
+
R813
+
L32
+
R76
+
L73
+
L97
+
L30
+
R548
+
R70
+
L63
+
R47
+
L36
+
R3
+
L69
+
R501
+
R563
+
L39
+
R675
+
L17
+
R90
+
L73
+
L130
+
L2
+
L68
+
L60
+
R60
+
L258
+
R19
+
R86
+
L41
+
L20
+
R83
+
R31
+
L51
+
L149
+
R53
+
L1
+
R6
+
L58
+
L83
+
R83
+
R60
+
R40
+
R65
+
L65
+
R74
+
R86
+
R40
+
R466
+
L393
+
R42
+
L87
+
L28
+
R393
+
L77
+
R84
+
L28
+
R24
+
R4
+
R40
+
R16
+
R8
+
R36
+
R63
+
R7
+
R49
+
R46
+
R35
+
L61
+
R61
+
R921
+
L93
+
R61
+
L89
+
L73
+
R96
+
L23
+
L58
+
R37
+
L98
+
R41
+
R78
+
R52
+
R19
+
L71
+
L42
+
L67
+
L512
+
L45
+
L797
+
R21
+
R77
+
R415
+
L50
+
R40
+
R10
+
R99
+
L94
+
R81
+
L153
+
L83
+
R22
+
L16
+
L306
+
L67
+
L633
+
L51
+
R51
+
L19
+
R97
+
R22
+
R68
+
L3
+
R93
+
L74
+
L59
+
R75
+
R29
+
L29
+
L11
+
R11
+
L14
+
R14
+
L346
+
L54
+
R47
+
R653
+
L40
+
L29
+
R15
+
L39
+
R39
+
R154
+
L75
+
L25
+
R21
+
L22
+
R43
+
R23
+
R3
+
L68
+
R3
+
L103
+
R756
+
R75
+
R69
+
R41
+
R10
+
R8
+
R19
+
L78
+
R157
+
L57
+
L264
+
L50
+
R2
+
R82
+
R62
+
R68
+
L45
+
R82
+
L37
+
L698
+
R13
+
R10
+
R15
+
R960
+
L78
+
R78
+
R89
+
R19
+
L61
+
L28
+
L1
+
R13
+
L79
+
R43
+
L59
+
L82
+
L62
+
L40
+
R48
+
L7
+
R24
+
L28
+
R91
+
R70
+
R33
+
L85
+
R89
+
R50
+
R93
+
R83
+
L16
+
R56
+
R1
+
R46
+
L94
+
R11
+
R83
+
L65
+
L35
+
L25
+
R66
+
L41
+
L11
+
R9
+
L62
+
L98
+
L20
+
R82
+
L4
+
L96
+
R83
+
R44
+
R57
+
R16
+
L10
+
R10
+
L62
+
L38
+
R32
+
L93
+
L39
+
R44
+
L29
+
R98
+
L13
+
L70
+
R70
+
L42
+
R28
+
R47
+
R3
+
L2
+
L24
+
R21
+
L29
+
L12
+
R42
+
R37
+
R24
+
L33
+
R21
+
L2
+
R15
+
R39
+
L31
+
L23
+
R18
+
L43
+
R30
+
R42
+
L27
+
R21
+
L13
+
R32
+
L38
+
L28
+
L7
+
L31
+
R44
+
R42
+
L13
+
L26
+
L31
+
R4
+
L20
+
R31
+
L33
+
L44
+
L35
+
L4
+
L32
+
R8
+
R1
+
R19
+
R3
+
R6
+
L15
+
L3
+10
src/input/1/example.txt
···
+
L68
+
L30
+
R48
+
L5
+
R60
+
L55
+
L1
+
L99
+
R14
+
L82
+10
src/main.rs
···
+
use anyhow::Context;
+
+
mod day1;
+
+
fn main() -> anyhow::Result<()> {
+
println!("day 1...");
+
day1::main().context("running day 1")?;
+
+
Ok(())
+
}