summaryrefslogtreecommitdiff
path: root/2023
diff options
context:
space:
mode:
Diffstat (limited to '2023')
-rw-r--r--2023/Go/.gitignore22
-rw-r--r--2023/Go/README.md4
-rw-r--r--2023/Go/Taskfile.yml17
-rw-r--r--2023/Go/go.mod3
-rw-r--r--2023/Go/internal/day_01/day_01.go116
-rw-r--r--2023/Go/internal/day_01/day_01_test.go31
-rw-r--r--2023/Go/internal/day_02/part_01/part_01.go138
-rw-r--r--2023/Go/internal/day_02/part_01/part_01_test.go102
-rw-r--r--2023/Go/internal/day_02/part_02/part_02.go114
-rw-r--r--2023/Go/internal/day_02/part_02/part_02_test.go84
-rw-r--r--2023/Go/internal/day_03/part_01/part_01.go123
-rw-r--r--2023/Go/internal/day_03/part_01/part_01_test.go78
-rw-r--r--2023/Go/internal/day_04/part_01/part_01.go130
-rw-r--r--2023/Go/internal/day_04/part_01/part_01_test.go48
-rw-r--r--2023/Go/internal/day_04/part_02/part_02.go142
-rw-r--r--2023/Go/internal/day_04/part_02/part_02_test.go143
-rw-r--r--2023/Go/internal/day_06/part_01/part_01.go85
-rw-r--r--2023/Go/internal/day_06/part_01/part_01_test.go96
-rw-r--r--2023/Go/internal/day_06/part_02/part_02.go81
-rw-r--r--2023/Go/internal/day_06/part_02/part_02_test.go84
-rw-r--r--2023/Go/internal/day_07/part_01/part_01.go273
-rw-r--r--2023/Go/internal/day_07/part_01/part_01_test.go432
-rw-r--r--2023/Go/main.go85
-rw-r--r--2023/_input/day_01.txt1000
-rw-r--r--2023/_input/day_02.txt100
-rw-r--r--2023/_input/day_03.txt140
-rw-r--r--2023/_input/day_03_part_01_sample.txt10
-rw-r--r--2023/_input/day_04.txt189
-rw-r--r--2023/_input/day_04_part_01_sample.txt6
-rw-r--r--2023/_input/day_04_part_02_sample.txt6
-rw-r--r--2023/_input/day_05.txt197
-rw-r--r--2023/_input/day_06.txt2
-rw-r--r--2023/_input/day_06_part_01_sample.txt2
-rw-r--r--2023/_input/day_06_part_02_sample.txt2
-rw-r--r--2023/_input/day_07.txt1000
-rw-r--r--2023/_input/day_07_part_01_sample.txt5
-rw-r--r--2023/_input/day_08.txt704
-rw-r--r--2023/_input/day_09.txt201
-rw-r--r--2023/_input/day_10.txt141
-rw-r--r--2023/_input/day_11.txt141
-rw-r--r--2023/_input/day_12.txt1001
-rw-r--r--2023/_input/day_13.txt1312
-rw-r--r--2023/_input/day_14.txt101
-rw-r--r--2023/_input/day_15.txt2
-rw-r--r--2023/_input/day_16.txt110
-rw-r--r--2023/_input/day_17.txt141
-rw-r--r--2023/_input/day_18.txt604
-rw-r--r--2023/_input/day_19.txt732
-rw-r--r--2023/_input/day_20.txt59
-rw-r--r--2023/_input/day_21.txt132
-rw-r--r--2023/_input/day_22.txt1394
-rw-r--r--2023/_input/day_23.txt142
-rw-r--r--2023/_input/day_24.txt301
-rw-r--r--2023/_input/day_25.txt1173
54 files changed, 13481 insertions, 0 deletions
diff --git a/2023/Go/.gitignore b/2023/Go/.gitignore
new file mode 100644
index 0000000..f40e964
--- /dev/null
+++ b/2023/Go/.gitignore
@@ -0,0 +1,22 @@
+# Binaries for programs and plugins
+*.exe
+*.exe~
+*.dll
+*.so
+*.dylib
+
+# Test binary, built with `go test -c`
+*.test
+
+# Output of the go coverage tool, specifically when used with LiteIDE
+*.out
+
+# Dependency directories (remove the comment below to include it)
+# vendor/
+
+# Go workspace file
+go.work
+go.work.sum
+
+# env file
+.env
diff --git a/2023/Go/README.md b/2023/Go/README.md
new file mode 100644
index 0000000..13e51cf
--- /dev/null
+++ b/2023/Go/README.md
@@ -0,0 +1,4 @@
+# Advent of Code 2023
+[![Test](https://github.com/DJOLEARY/AoC_2023/actions/workflows/go.yml/badge.svg?event=push)](https://github.com/DJOLEARY/AoC_2023/actions/workflows/go.yml)
+
+Done with the aim of learning golang
diff --git a/2023/Go/Taskfile.yml b/2023/Go/Taskfile.yml
new file mode 100644
index 0000000..a89c4c3
--- /dev/null
+++ b/2023/Go/Taskfile.yml
@@ -0,0 +1,17 @@
+# https://taskfile.dev
+
+version: '3'
+
+tasks:
+
+ default:
+ desc: "Prints this message"
+ cmds:
+ - cmd: task --list-all
+
+ test:coverage:
+ desc: Runs tests and produce coverage report
+ cmds:
+ - mkdir --parents out
+ - go test -coverprofile=out/coverage.out ./...
+ - go tool cover -html=out/coverage.out
diff --git a/2023/Go/go.mod b/2023/Go/go.mod
new file mode 100644
index 0000000..33ff07f
--- /dev/null
+++ b/2023/Go/go.mod
@@ -0,0 +1,3 @@
+module github.com/DJOLEARY/Advent_of_Code
+
+go 1.22.3
diff --git a/2023/Go/internal/day_01/day_01.go b/2023/Go/internal/day_01/day_01.go
new file mode 100644
index 0000000..c646a4d
--- /dev/null
+++ b/2023/Go/internal/day_01/day_01.go
@@ -0,0 +1,116 @@
+package day_01
+
+import (
+ "errors"
+ "os"
+ "strconv"
+ "strings"
+)
+
+func Solve() {
+ filename := "../_input/day_01.txt"
+ content := readFile(filename)
+
+ numbers := []int{}
+
+ lines := strings.Split(content, "\n")
+ for _, line := range lines {
+ first_num, last_num, err := findNumbers(line)
+
+ if err != nil {
+ continue
+ }
+
+ num_str := first_num + last_num
+ num := strToInt(num_str)
+ numbers = append(numbers, num)
+ }
+
+ acc := accumulate(numbers)
+
+ println(acc)
+}
+
+func readFile(filename string) string {
+ content, err := os.ReadFile(filename)
+
+ if err != nil {
+ panic(err)
+ }
+
+ return string(content)
+}
+
+var num_map = map[string]string{
+ "zero": "0",
+ "0": "0",
+ "one": "1",
+ "1": "1",
+ "two": "2",
+ "2": "2",
+ "three": "3",
+ "3": "3",
+ "four": "4",
+ "4": "4",
+ "five": "5",
+ "5": "5",
+ "six": "6",
+ "6": "6",
+ "seven": "7",
+ "7": "7",
+ "eight": "8",
+ "8": "8",
+ "nine": "9",
+ "9": "9",
+}
+
+func findNumbers(line string) (string, string, error) {
+ if line == "" || line == "\n" {
+ return "", "", errors.New("Empty line")
+ }
+
+ found_numbers := []string{}
+ window_size := 5
+ for i := range line {
+ window_end := i + window_size
+ if window_end > len(line) {
+ window_end = len(line)
+ }
+ sub_str := line[i:window_end]
+
+ for key, value := range num_map {
+ if strings.HasPrefix(sub_str, key) {
+ found_numbers = append(found_numbers, value)
+ }
+ }
+ }
+
+ if len(found_numbers) == 0 {
+ return "", "", errors.New("No numbers found")
+ }
+
+ first := found_numbers[0]
+ last := found_numbers[len(found_numbers)-1]
+
+ return first, last, nil
+}
+
+func accumulate(numbers []int) int {
+ acc := 0
+
+ for _, num := range numbers {
+ acc += num
+ }
+
+ return acc
+}
+
+func strToInt(str string) int {
+ num, err := strconv.ParseInt(str, 0, 0)
+
+ if err != nil {
+ panic(err)
+ }
+
+ return int(num)
+}
diff --git a/2023/Go/internal/day_01/day_01_test.go b/2023/Go/internal/day_01/day_01_test.go
new file mode 100644
index 0000000..8063619
--- /dev/null
+++ b/2023/Go/internal/day_01/day_01_test.go
@@ -0,0 +1,31 @@
+package day_01
+
+import (
+ "testing"
+)
+
+type input string
+type answer string
+
+func TestFindNumbers(t *testing.T) {
+ data := map[input]answer{
+ "1abc2": "12",
+ "pqr3stu8vwx": "38",
+ "a1b2c3d4e5f": "15",
+ "treb7uchet": "77",
+ }
+
+ for input, expected := range data {
+ actual_first, actual_last, err := findNumbers(string(input))
+
+ if err != nil {
+ t.Error("find_numbers returned an error")
+ }
+
+ actual := actual_first + actual_last
+
+ if actual != string(expected) {
+ t.Errorf("Expected %s, got %s", expected, actual)
+ }
+ }
+}
diff --git a/2023/Go/internal/day_02/part_01/part_01.go b/2023/Go/internal/day_02/part_01/part_01.go
new file mode 100644
index 0000000..9efe20f
--- /dev/null
+++ b/2023/Go/internal/day_02/part_01/part_01.go
@@ -0,0 +1,138 @@
+package part_01
+
+import (
+ "os"
+ "regexp"
+ "strconv"
+ "strings"
+)
+
+type cubes struct {
+ red int
+ blue int
+ green int
+}
+
+func Solve() {
+ contents, err := os.ReadFile("../_input/day_02.txt")
+ if err != nil {
+ panic(err)
+ }
+
+ lines := strings.Split(string(contents), "\n")
+ possibleGameIds := processLines(lines)
+
+ println(accumulate(possibleGameIds))
+}
+
+func processLines(lines []string) []int {
+ var possibleGames []int
+
+ maxCubes := cubes{red: 12, blue: 14, green: 13}
+
+ for _, line := range lines {
+ if line == "" || line == "\n" {
+ continue
+ }
+
+ shownCubes := convertLineToCubes(line)
+
+ isPossible := isPossibleGame(shownCubes, maxCubes)
+ if isPossible {
+ gameId := getGameId(line)
+ possibleGames = append(possibleGames, gameId)
+ }
+ }
+
+ return possibleGames
+}
+
+func convertLineToCubes(line string) []cubes {
+ var shownCubes []cubes
+
+ redRegex := regexp.MustCompile(`(\d+) red`)
+ blueRegex := regexp.MustCompile(`(\d+) blue`)
+ greenRegex := regexp.MustCompile(`(\d+) green`)
+
+ for _, round := range strings.Split(line, ";") {
+ var cubes cubes
+
+ redMatches := redRegex.FindStringSubmatch(round)
+ if redMatches != nil {
+ red, err := strconv.Atoi(redMatches[1])
+ if err != nil {
+ panic("Could not convert red to int: " + redMatches[1])
+ } else {
+ cubes.red = red
+ }
+ }
+
+ blueMatches := blueRegex.FindStringSubmatch(round)
+ if blueMatches != nil {
+ blue, err := strconv.Atoi(blueMatches[1])
+ if err != nil {
+ panic("Could not convert green to int: " + blueMatches[1])
+ } else {
+ cubes.blue = blue
+ }
+ }
+
+ greenMatches := greenRegex.FindStringSubmatch(round)
+ if greenMatches != nil {
+ green, err := strconv.Atoi(greenMatches[1])
+ if err != nil {
+ panic("Could not convert green to int: " + greenMatches[1])
+ } else {
+ cubes.green = green
+ }
+ }
+
+ shownCubes = append(shownCubes, cubes)
+ }
+
+ return shownCubes
+}
+
+func isPossibleGame(shownCubes []cubes, maxCubes cubes) bool {
+ for _, cubes := range shownCubes {
+ if cubes.red > maxCubes.red {
+ return false
+ }
+
+ if cubes.blue > maxCubes.blue {
+ return false
+ }
+
+ if cubes.green > maxCubes.green {
+ return false
+ }
+ }
+
+ return true
+}
+
+func getGameId(line string) int {
+ regex := regexp.MustCompile(`^Game (\d+):`)
+ matches := regex.FindStringSubmatch(line)
+ if matches == nil || len(matches) < 2 {
+ println(matches)
+ panic("No game id found in line: '" + line + "'")
+ }
+
+ gameId, err := strconv.Atoi(matches[1])
+ if err != nil {
+ panic("Could not convert game id to int: " + matches[1])
+ }
+
+ return gameId
+}
+
+func accumulate(gameIds []int) int {
+ var acc int
+
+ for _, gameId := range gameIds {
+ acc += gameId
+ }
+
+ return acc
+}
diff --git a/2023/Go/internal/day_02/part_01/part_01_test.go b/2023/Go/internal/day_02/part_01/part_01_test.go
new file mode 100644
index 0000000..33e5fbf
--- /dev/null
+++ b/2023/Go/internal/day_02/part_01/part_01_test.go
@@ -0,0 +1,102 @@
+package part_01
+
+import (
+ "testing"
+)
+
+type data struct {
+ gameId int
+ isPossible bool
+ shownCubes []cubes
+ line string
+}
+
+var testInput = []data{
+ {
+ gameId: 1,
+ isPossible: true,
+ shownCubes: []cubes{
+ {red: 4, blue: 3},
+ {red: 1, blue: 6, green: 2},
+ {green: 2},
+ },
+ line: "Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green",
+ },
+ {
+ gameId: 2,
+ isPossible: true,
+ shownCubes: []cubes{
+ {blue: 1, green: 2},
+ {red: 1, blue: 4, green: 3},
+ {blue: 1, green: 1},
+ },
+ line: "Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue",
+ },
+ {
+ gameId: 3,
+ isPossible: false,
+ shownCubes: []cubes{
+ {red: 20, blue: 6, green: 8},
+ {red: 4, blue: 5, green: 13},
+ {red: 1, green: 5},
+ },
+ line: "Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red",
+ },
+ {
+ gameId: 4,
+ isPossible: false,
+ shownCubes: []cubes{
+ {red: 3, blue: 6, green: 1},
+ {red: 6, green: 3},
+ {red: 14, blue: 15, green: 3},
+ },
+ line: "Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red",
+ },
+ {
+ gameId: 5,
+ isPossible: true,
+ shownCubes: []cubes{
+ {red: 6, blue: 1, green: 3},
+ {red: 1, blue: 2, green: 2},
+ },
+ line: "Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green",
+ },
+}
+
+func TestConvertLineToCubes(t *testing.T) {
+ for _, data := range testInput {
+ actualCubes := convertLineToCubes(data.line)
+
+ if len(data.shownCubes) != len(actualCubes) {
+ t.Errorf("Expected length of shownCubes to be %d, got %d", len(data.shownCubes), len(actualCubes))
+ }
+
+ for i, cubes := range data.shownCubes {
+ if cubes != actualCubes[i] {
+ t.Errorf("Expected shownCubes to be %v, got %v", cubes, actualCubes[i])
+ }
+ }
+ }
+}
+
+func TestIsPossibleGame(t *testing.T) {
+ maxCubes := cubes{red: 12, blue: 13, green: 14}
+
+ for _, data := range testInput {
+ actualIsPossible := isPossibleGame(data.shownCubes, maxCubes)
+
+ if data.isPossible != actualIsPossible {
+ t.Errorf("Expected isPossibleGame to be %t, got %t for game id %d", data.isPossible, actualIsPossible, data.gameId)
+ }
+ }
+}
+
+func TestGetGameId(t *testing.T) {
+ for _, data := range testInput {
+ actualGameId := getGameId(data.line)
+
+ if data.gameId != actualGameId {
+ t.Errorf("Expected gameId to be %d, got %d", data.gameId, actualGameId)
+ }
+ }
+}
diff --git a/2023/Go/internal/day_02/part_02/part_02.go b/2023/Go/internal/day_02/part_02/part_02.go
new file mode 100644
index 0000000..ffb9691
--- /dev/null
+++ b/2023/Go/internal/day_02/part_02/part_02.go
@@ -0,0 +1,114 @@
+package part_02
+
+import (
+ "os"
+ "regexp"
+ "strconv"
+ "strings"
+)
+
+type cubes struct {
+ red int
+ blue int
+ green int
+}
+
+func Solve() {
+ contents, err := os.ReadFile("../_input/day_02.txt")
+ if err != nil {
+ panic(err)
+ }
+
+ lines := strings.Split(string(contents), "\n")
+ answer := processLines(lines)
+
+ println(answer)
+}
+
+func processLines(lines []string) int {
+ var answer int
+
+ for _, line := range lines {
+ if line == "" || line == "\n" {
+ continue
+ }
+
+ shownCubes := convertLineToCubes(line)
+
+ maxCubes := getMaximumCubes(shownCubes)
+ power := getPower(maxCubes)
+ answer += power
+ }
+
+ return answer
+}
+
+func convertLineToCubes(line string) []cubes {
+ var shownCubes []cubes
+
+ redRegex := regexp.MustCompile(`(\d+) red`)
+ blueRegex := regexp.MustCompile(`(\d+) blue`)
+ greenRegex := regexp.MustCompile(`(\d+) green`)
+
+ for _, round := range strings.Split(line, ";") {
+ var cubes cubes
+
+ redMatches := redRegex.FindStringSubmatch(round)
+ if redMatches != nil {
+ red, err := strconv.Atoi(redMatches[1])
+ if err != nil {
+ panic("Could not convert red to int: " + redMatches[1])
+ } else {
+ cubes.red = red
+ }
+ }
+
+ blueMatches := blueRegex.FindStringSubmatch(round)
+ if blueMatches != nil {
+ blue, err := strconv.Atoi(blueMatches[1])
+ if err != nil {
+ panic("Could not convert green to int: " + blueMatches[1])
+ } else {
+ cubes.blue = blue
+ }
+ }
+
+ greenMatches := greenRegex.FindStringSubmatch(round)
+ if greenMatches != nil {
+ green, err := strconv.Atoi(greenMatches[1])
+ if err != nil {
+ panic("Could not convert green to int: " + greenMatches[1])
+ } else {
+ cubes.green = green
+ }
+ }
+
+ shownCubes = append(shownCubes, cubes)
+ }
+
+ return shownCubes
+}
+
+func getMaximumCubes(shownCubes []cubes) cubes {
+ var maxCubes cubes
+
+ for _, cubes := range shownCubes {
+ if cubes.red > maxCubes.red {
+ maxCubes.red = cubes.red
+ }
+
+ if cubes.blue > maxCubes.blue {
+ maxCubes.blue = cubes.blue
+ }
+
+ if cubes.green > maxCubes.green {
+ maxCubes.green = cubes.green
+ }
+ }
+
+ return maxCubes
+}
+
+func getPower(maxCubes cubes) int {
+ return maxCubes.red * maxCubes.blue * maxCubes.green
+}
diff --git a/2023/Go/internal/day_02/part_02/part_02_test.go b/2023/Go/internal/day_02/part_02/part_02_test.go
new file mode 100644
index 0000000..6952899
--- /dev/null
+++ b/2023/Go/internal/day_02/part_02/part_02_test.go
@@ -0,0 +1,84 @@
+package part_02
+
+import (
+ "testing"
+)
+
+type data struct {
+ shownCubes []cubes
+ maxCubes cubes
+ line string
+}
+
+var testInput = []data{
+ {
+ shownCubes: []cubes{
+ {red: 4, blue: 3},
+ {red: 1, blue: 6, green: 2},
+ {green: 2},
+ },
+ maxCubes: cubes{red: 4, blue: 6, green: 2},
+ line: "Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green",
+ },
+ {
+ shownCubes: []cubes{
+ {blue: 1, green: 2},
+ {red: 1, blue: 4, green: 3},
+ {blue: 1, green: 1},
+ },
+ maxCubes: cubes{red: 1, blue: 4, green: 3},
+ line: "Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue",
+ },
+ {
+ shownCubes: []cubes{
+ {red: 20, blue: 6, green: 8},
+ {red: 4, blue: 5, green: 13},
+ {red: 1, green: 5},
+ },
+ maxCubes: cubes{red: 20, blue: 6, green: 13},
+ line: "Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red",
+ },
+ {
+ shownCubes: []cubes{
+ {red: 3, blue: 6, green: 1},
+ {red: 6, green: 3},
+ {red: 14, blue: 15, green: 3},
+ },
+ maxCubes: cubes{red: 14, blue: 15, green: 3},
+ line: "Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red",
+ },
+ {
+ shownCubes: []cubes{
+ {red: 6, blue: 1, green: 3},
+ {red: 1, blue: 2, green: 2},
+ },
+ maxCubes: cubes{red: 6, blue: 2, green: 3},
+ line: "Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green",
+ },
+}
+
+func TestConvertLineToCubes(t *testing.T) {
+ for _, data := range testInput {
+ actualCubes := convertLineToCubes(data.line)
+
+ if len(data.shownCubes) != len(actualCubes) {
+ t.Errorf("Expected length of shownCubes to be %d, got %d", len(data.shownCubes), len(actualCubes))
+ }
+
+ for i, cubes := range data.shownCubes {
+ if cubes != actualCubes[i] {
+ t.Errorf("Expected shownCubes to be %v, got %v", cubes, actualCubes[i])
+ }
+ }
+ }
+}
+
+func TestGetMaximumCubes(t *testing.T) {
+ for _, data := range testInput {
+ actualMaxCubes := getMaximumCubes(data.shownCubes)
+
+ if actualMaxCubes != data.maxCubes {
+ t.Errorf("Expected maxCubes to be %v, got %v", data.maxCubes, actualMaxCubes)
+ }
+ }
+}
diff --git a/2023/Go/internal/day_03/part_01/part_01.go b/2023/Go/internal/day_03/part_01/part_01.go
new file mode 100644
index 0000000..49837b3
--- /dev/null
+++ b/2023/Go/internal/day_03/part_01/part_01.go
@@ -0,0 +1,123 @@
+package part_01
+
+/**
+ * TRIED:
+ * 530923
+ */
+
+import (
+ "os"
+ "strconv"
+ "strings"
+)
+
+const USE_SAMPLE = true
+
+func Solve() {
+ var content []byte
+ if USE_SAMPLE {
+ content, _ = os.ReadFile("../_input/day_03_part_01_sample.txt")
+ } else {
+ content, _ = os.ReadFile("../_input/day_03.txt")
+ }
+ lines := strings.Split(string(content), "\n")
+
+ validNumbers := walkLines(lines)
+
+ answer := 0
+ for _, number := range validNumbers {
+ answer += number
+ }
+
+ println(answer)
+}
+
+func walkLines(lines []string) []int {
+ var validNumbers []int
+
+ for y := 0; y < len(lines); y++ {
+ line := lines[y]
+
+ if line == "" || line == "\n" {
+ continue
+ }
+
+ // Counts as a symbol...
+ filteredLine := strings.ReplaceAll(line, "\r", "")
+
+ previousWasNumber := false
+ number := ""
+ for x := 0; x < len(filteredLine); x++ {
+ char := filteredLine[x]
+
+ _, err := strconv.Atoi(string(char))
+ isNumeric := err == nil
+
+ if isNumeric {
+ previousWasNumber = true
+ number += string(char)
+ continue
+ }
+
+ if !previousWasNumber {
+ continue
+ }
+
+ isValid := checkValidity(lines, x, y, len(number))
+ if isValid {
+ num, _ := strconv.Atoi(number)
+ validNumbers = append(validNumbers, num)
+ }
+
+ println(number)
+
+ previousWasNumber = false
+ number = ""
+ }
+ }
+
+ return validNumbers
+}
+
+// N = number
+// k = numOfDigits + 1
+// (x-k,y-1) (x-1,y-1) ( x ,y-1)
+// (x-k, y ) N ( x , y )
+// (x-k,y+1) (x-1,y+1) ( x ,y+1)
+func checkValidity(lines []string, x int, y int, numOfDigits int) bool {
+
+ for i := max(y-1, 0); i <= y+1; i++ {
+
+ var debugLine string
+
+ for j := max(x-(numOfDigits+1), 0); j <= x; j++ {
+
+ if lineExists := len(lines) > i; !lineExists {
+ continue
+ }
+
+ if charExists := len(lines[i]) > j; !charExists {
+ continue
+ }
+
+ char := rune(lines[i][j])
+ debugLine += string(char)
+
+ if char == '.' {
+ continue
+ }
+
+ _, err := strconv.Atoi(string(char))
+ isNumeric := err == nil
+ if isNumeric {
+ continue
+ }
+
+ debugLine = "" //nolint:ineffassign // Only used for debugging and needs to be reset
+
+ return true
+ }
+ }
+
+ return false
+}
diff --git a/2023/Go/internal/day_03/part_01/part_01_test.go b/2023/Go/internal/day_03/part_01/part_01_test.go
new file mode 100644
index 0000000..a077fbd
--- /dev/null
+++ b/2023/Go/internal/day_03/part_01/part_01_test.go
@@ -0,0 +1,78 @@
+package part_01
+
+import (
+ "os"
+ "strings"
+ "testing"
+)
+
+func TestWalkLines(t *testing.T) {
+ lines := getSampleLines()
+ expected := 4361
+
+ validNumbers := walkLines(lines)
+
+ actual := 0
+ for _, number := range validNumbers {
+ actual += number
+ }
+
+ if actual != expected {
+ t.Errorf("Expected answer to be %d, got %d", expected, actual)
+ }
+}
+
+func TestCheckValidity(t *testing.T) {
+ lines := getSampleLines()
+
+ tests := []struct {
+ x int
+ y int
+ length int
+ expected bool
+ }{
+ {3, 0, 3, true}, // 467
+ {8, 0, 3, false}, // 114
+ {9, 0, 1, false}, // 3 - Added to check for '\r' counting as a symbol
+ {4, 2, 2, true}, // 35
+ {9, 2, 3, true}, // 633
+ {9, 3, 1, false}, // 3 - Added to check if number continues to next line
+ {3, 4, 3, true}, // 617
+ {9, 5, 2, false}, // 58
+ {5, 6, 3, true}, // 592
+ {9, 7, 3, true}, // 775
+ {4, 9, 3, true}, // 664
+ {8, 9, 3, true}, // 598
+ }
+
+ for _, test := range tests {
+ actual := checkValidity(lines, test.x, test.y, test.length)
+
+ if actual != test.expected {
+ t.Errorf("Expected %d, %d, %d to be %t, got %t", test.x, test.y, test.length, test.expected, actual)
+ }
+ }
+}
+
+func getSampleLines() []string {
+ contents, err := os.ReadFile("../../../../_input/day_03_part_01_sample.txt")
+ if err != nil {
+ panic(err)
+ }
+
+ lines := strings.Split(string(contents), "\n")
+
+ var filteredLines []string
+ for _, line := range lines {
+ if line == "" || line == "\n" {
+ continue
+ }
+
+ // Counts as a symbol...
+ filteredLine := strings.ReplaceAll(line, "\r", "")
+
+ filteredLines = append(filteredLines, filteredLine)
+ }
+
+ return filteredLines
+}
diff --git a/2023/Go/internal/day_04/part_01/part_01.go b/2023/Go/internal/day_04/part_01/part_01.go
new file mode 100644
index 0000000..1a215b1
--- /dev/null
+++ b/2023/Go/internal/day_04/part_01/part_01.go
@@ -0,0 +1,130 @@
+package part_01
+
+import (
+ "os"
+ "slices"
+ "strconv"
+ "strings"
+)
+
+const USE_SAMPLE = false
+
+type UnparsedCard struct {
+ id string
+ winningNumbers []string
+ haveNumbers []string
+}
+
+type Card struct {
+ id int
+ winningNumbers []int
+ haveNumbers []int
+}
+
+func (c UnparsedCard) parse() Card {
+ var card Card
+
+ id, err := strconv.Atoi(c.id)
+ if err != nil {
+ panic(err)
+ }
+ card.id = id
+
+ for _, number := range c.winningNumbers {
+ num, err := strconv.Atoi(number)
+ if err != nil {
+ panic(err)
+ }
+ card.winningNumbers = append(card.winningNumbers, num)
+ }
+
+ for _, number := range c.haveNumbers {
+ num, err := strconv.Atoi(number)
+ if err != nil {
+ panic(err)
+ }
+ card.haveNumbers = append(card.haveNumbers, num)
+ }
+
+ return card
+}
+
+func Solve() {
+ var contents []byte
+ if USE_SAMPLE {
+ contents, _ = os.ReadFile("../_input/day_04_part_01_sample.txt")
+ } else {
+ contents, _ = os.ReadFile("../_input/day_04.txt")
+ }
+
+ lines := strings.Split(string(contents), "\n")
+
+ answer := 0
+ for _, line := range lines {
+ if line == "" || line == "\n" {
+ continue
+ }
+
+ card := parseCardLine(line)
+ score := tallyScore(card)
+
+ answer += score
+ }
+
+ println(answer)
+}
+
+// "Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53"
+func parseCardLine(line string) Card {
+ var unparsedCard UnparsedCard
+
+ filteredLine := strings.ReplaceAll(line, "\r", "")
+
+ // "Card 1"
+ card_parts := strings.Split(filteredLine, ":")[0]
+ id_parts := strings.Split(card_parts, " ")
+ id := id_parts[len(id_parts)-1]
+ unparsedCard.id = strings.ReplaceAll(id, " ", "")
+
+ // "41 48 83 86 17 | 83 86 6 31 17 9 48 53"
+ numbers := strings.Split(filteredLine, ":")[1]
+
+ // " 41 48 83 86 17"
+ winningNumberString := strings.Split(numbers, "|")[0]
+ // ["", "41", "48", "83", "86", "17"]
+ winningNumbers := strings.Split(winningNumberString, " ")
+ for _, num := range winningNumbers {
+ if num == "" || num == " " {
+ continue
+ }
+ unparsedCard.winningNumbers = append(unparsedCard.winningNumbers, num)
+ }
+
+ // " 83 86 6 31 17 9 48 53"
+ haveNumberString := strings.Split(numbers, "|")[1]
+ // ["", "83", "86", "", "6", "31", "17", "", "9", "48", "53"]
+ haveNumbers := strings.Split(haveNumberString, " ")
+ for _, num := range haveNumbers {
+ if num == "" || num == " " {
+ continue
+ }
+ unparsedCard.haveNumbers = append(unparsedCard.haveNumbers, num)
+ }
+
+ return unparsedCard.parse()
+}
+
+func tallyScore(card Card) int {
+ score := 0
+ for _, winningNumber := range card.winningNumbers {
+ if slices.Contains(card.haveNumbers, winningNumber) {
+ if score == 0 {
+ score = 1
+ } else {
+ score *= 2
+ }
+ }
+ }
+
+ return score
+}
diff --git a/2023/Go/internal/day_04/part_01/part_01_test.go b/2023/Go/internal/day_04/part_01/part_01_test.go
new file mode 100644
index 0000000..f6f1a83
--- /dev/null
+++ b/2023/Go/internal/day_04/part_01/part_01_test.go
@@ -0,0 +1,48 @@
+package part_01
+
+import (
+ "testing"
+)
+
+func TestParseCardLine(t *testing.T) {
+ input := "Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53"
+ expected := Card{1, []int{41, 48, 83, 86, 17}, []int{83, 86, 6, 31, 17, 9, 48, 53}}
+
+ actual := parseCardLine(input)
+
+ if actual.id != expected.id {
+ t.Errorf("ERROR: ID %d does not match expected %d", actual.id, expected.id)
+ }
+
+ if len(actual.winningNumbers) != len(expected.winningNumbers) {
+ t.Errorf("ERROR: len(WinningNumbers) %d does not match expected %d", len(actual.winningNumbers), len(expected.winningNumbers))
+ }
+
+ if len(actual.haveNumbers) != len(expected.haveNumbers) {
+ t.Errorf("ERROR: len(HaveNumbers) %d does not match expected %d", len(actual.haveNumbers), len(expected.haveNumbers))
+ }
+
+ for i, num := range actual.winningNumbers {
+ if num != expected.winningNumbers[i] {
+ t.Errorf("ERROR: WinningNumber %d does not match expected %d", num, expected.winningNumbers[i])
+ }
+ }
+
+ for i, num := range actual.haveNumbers {
+ if num != expected.haveNumbers[i] {
+ t.Errorf("ERROR: HaveNumber %d does not match expected %d", num, expected.haveNumbers[i])
+ }
+ }
+
+}
+
+func TestTallyScore(t *testing.T) {
+ card := Card{1, []int{41, 48, 83, 86, 17}, []int{83, 86, 6, 31, 17, 9, 48, 53}}
+ expected := 8
+
+ actual := tallyScore(card)
+
+ if actual != expected {
+ t.Errorf("ERROR: Score %d does not match expected %d", actual, expected)
+ }
+}
diff --git a/2023/Go/internal/day_04/part_02/part_02.go b/2023/Go/internal/day_04/part_02/part_02.go
new file mode 100644
index 0000000..a9e3152
--- /dev/null
+++ b/2023/Go/internal/day_04/part_02/part_02.go
@@ -0,0 +1,142 @@
+package part_02
+
+import (
+ "os"
+ "slices"
+ "strconv"
+ "strings"
+)
+
+const USE_SAMPLE = false
+
+type UnparsedCard struct {
+ id string
+ winningNumbers []string
+ haveNumbers []string
+}
+
+type Card struct {
+ id int
+ winningNumbers []int
+ haveNumbers []int
+}
+
+func (c UnparsedCard) parse() Card {
+ var card Card
+
+ id, err := strconv.Atoi(c.id)
+ if err != nil {
+ panic(err)
+ }
+ card.id = id
+
+ for _, number := range c.winningNumbers {
+ num, err := strconv.Atoi(number)
+ if err != nil {
+ panic(err)
+ }
+ card.winningNumbers = append(card.winningNumbers, num)
+ }
+
+ for _, number := range c.haveNumbers {
+ num, err := strconv.Atoi(number)
+ if err != nil {
+ panic(err)
+ }
+ card.haveNumbers = append(card.haveNumbers, num)
+ }
+
+ return card
+}
+
+func Solve() {
+ var contents []byte
+ if USE_SAMPLE {
+ contents, _ = os.ReadFile("../_input/day_04_part_02_sample.txt")
+ } else {
+ contents, _ = os.ReadFile("../_input/day_04.txt")
+ }
+
+ lines := strings.Split(string(contents), "\n")
+
+ dict := map[int]Card{}
+ var cards []Card
+ for _, line := range lines {
+ if line == "" || line == "\n" {
+ continue
+ }
+
+ card := parseCardLine(line)
+
+ dict[card.id] = card
+ cards = append(cards, card)
+ }
+
+ answer := processCards(dict, cards)
+
+ println(answer)
+}
+
+// "Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53"
+func parseCardLine(line string) Card {
+ var unparsedCard UnparsedCard
+
+ filteredLine := strings.ReplaceAll(line, "\r", "")
+
+ // "Card 1"
+ card_parts := strings.Split(filteredLine, ":")[0]
+ id_parts := strings.Split(card_parts, " ")
+ id := id_parts[len(id_parts)-1]
+ unparsedCard.id = strings.ReplaceAll(id, " ", "")
+
+ // "41 48 83 86 17 | 83 86 6 31 17 9 48 53"
+ numbers := strings.Split(filteredLine, ":")[1]
+
+ // " 41 48 83 86 17"
+ winningNumberString := strings.Split(numbers, "|")[0]
+ // ["", "41", "48", "83", "86", "17"]
+ winningNumbers := strings.Split(winningNumberString, " ")
+ for _, num := range winningNumbers {
+ if num == "" || num == " " {
+ continue
+ }
+ unparsedCard.winningNumbers = append(unparsedCard.winningNumbers, num)
+ }
+
+ // " 83 86 6 31 17 9 48 53"
+ haveNumberString := strings.Split(numbers, "|")[1]
+ // ["", "83", "86", "", "6", "31", "17", "", "9", "48", "53"]
+ haveNumbers := strings.Split(haveNumberString, " ")
+ for _, num := range haveNumbers {
+ if num == "" || num == " " {
+ continue
+ }
+ unparsedCard.haveNumbers = append(unparsedCard.haveNumbers, num)
+ }
+
+ return unparsedCard.parse()
+}
+
+func processCards(dict map[int]Card, cards []Card) int {
+ for i := 0; i < len(cards); i++ {
+ card := cards[i]
+ matchCount := calculateNumberOfMatches(card)
+ for j := card.id + 1; j < (card.id + 1 + matchCount); j++ {
+ copyCard := dict[j]
+ cards = append(cards, copyCard)
+ }
+ }
+
+ return len(cards)
+}
+
+func calculateNumberOfMatches(card Card) int {
+ matchCount := 0
+ for _, winningNumber := range card.winningNumbers {
+ if slices.Contains(card.haveNumbers, winningNumber) {
+ matchCount++
+ }
+ }
+
+ return matchCount
+}
diff --git a/2023/Go/internal/day_04/part_02/part_02_test.go b/2023/Go/internal/day_04/part_02/part_02_test.go
new file mode 100644
index 0000000..3c66a2e
--- /dev/null
+++ b/2023/Go/internal/day_04/part_02/part_02_test.go
@@ -0,0 +1,143 @@
+package part_02
+
+import (
+ "testing"
+)
+
+func TestParseCardLine(t *testing.T) {
+ input := "Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53"
+ expected := Card{1, []int{41, 48, 83, 86, 17}, []int{83, 86, 6, 31, 17, 9, 48, 53}}
+
+ actual := parseCardLine(input)
+
+ if actual.id != expected.id {
+ t.Errorf("ERROR: ID %d does not match expected %d", actual.id, expected.id)
+ }
+
+ if len(actual.winningNumbers) != len(expected.winningNumbers) {
+ t.Errorf("ERROR: len(WinningNumbers) %d does not match expected %d", len(actual.winningNumbers), len(expected.winningNumbers))
+ }
+
+ if len(actual.haveNumbers) != len(expected.haveNumbers) {
+ t.Errorf("ERROR: len(HaveNumbers) %d does not match expected %d", len(actual.haveNumbers), len(expected.haveNumbers))
+ }
+
+ for i, num := range actual.winningNumbers {
+ if num != expected.winningNumbers[i] {
+ t.Errorf("ERROR: WinningNumber %d does not match expected %d", num, expected.winningNumbers[i])
+ }
+ }
+
+ for i, num := range actual.haveNumbers {
+ if num != expected.haveNumbers[i] {
+ t.Errorf("ERROR: HaveNumber %d does not match expected %d", num, expected.haveNumbers[i])
+ }
+ }
+
+}
+
+func TestProcessCards(t *testing.T) {
+ cards := []Card{
+ // Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
+ {
+ 1,
+ []int{41, 48, 83, 86, 17},
+ []int{83, 86, 6, 31, 17, 9, 48, 53},
+ },
+ // Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
+ {
+ 2,
+ []int{13, 32, 20, 16, 61},
+ []int{61, 30, 68, 82, 17, 32, 24, 19},
+ },
+ // Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
+ {
+ 3,
+ []int{1, 21, 53, 59, 44},
+ []int{69, 82, 63, 72, 16, 21, 14, 1},
+ },
+ // Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
+ {
+ 4,
+ []int{41, 92, 73, 84, 69},
+ []int{59, 84, 76, 51, 58, 5, 54, 83},
+ },
+ // Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
+ {
+ 5,
+ []int{87, 83, 26, 28, 32},
+ []int{88, 30, 70, 12, 93, 22, 82, 36},
+ },
+ // Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
+ {
+ 6,
+ []int{31, 18, 13, 56, 72},
+ []int{74, 77, 10, 23, 35, 67, 36, 11},
+ },
+ }
+ dict := map[int]Card{}
+ for _, card := range cards {
+ dict[card.id] = card
+ }
+ expected := 30
+
+ actual := processCards(dict, cards)
+
+ if actual != expected {
+ t.Errorf("ERROR: Total number of cards %d does not match expected %d", actual, expected)
+ }
+}
+
+func TestCalculateNumberOfMatches(t *testing.T) {
+ cards := []Card{
+ // Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
+ {
+ 1,
+ []int{41, 48, 83, 86, 17},
+ []int{83, 86, 6, 31, 17, 9, 48, 53},
+ },
+ // Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
+ {
+ 2,
+ []int{13, 32, 20, 16, 61},
+ []int{61, 30, 68, 82, 17, 32, 24, 19},
+ },
+ // Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
+ {
+ 3,
+ []int{1, 21, 53, 59, 44},
+ []int{69, 82, 63, 72, 16, 21, 14, 1},
+ },
+ // Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
+ {
+ 4,
+ []int{41, 92, 73, 84, 69},
+ []int{59, 84, 76, 51, 58, 5, 54, 83},
+ },
+ // Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
+ {
+ 5,
+ []int{87, 83, 26, 28, 32},
+ []int{88, 30, 70, 12, 93, 22, 82, 36},
+ },
+ // Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
+ {
+ 6,
+ []int{31, 18, 13, 56, 72},
+ []int{74, 77, 10, 23, 35, 67, 36, 11},
+ },
+ }
+ expected := 9
+
+ total := 0
+ for _, card := range cards {
+ matches := calculateNumberOfMatches(card)
+ total += matches
+
+ cards = append(cards, card)
+ }
+
+ if total != expected {
+ t.Errorf("ERROR: Score %d does not match expected %d", total, expected)
+ }
+}
diff --git a/2023/Go/internal/day_06/part_01/part_01.go b/2023/Go/internal/day_06/part_01/part_01.go
new file mode 100644
index 0000000..5735924
--- /dev/null
+++ b/2023/Go/internal/day_06/part_01/part_01.go
@@ -0,0 +1,85 @@
+package part_01
+
+import (
+ "os"
+ "strconv"
+ "strings"
+)
+
+const USE_SAMPLE = false
+
+/**
+ * Tried:
+ * - 72128 (too low)
+ * - 3317888 (correct!)
+ */
+func Solve() {
+ var filePath string
+ if USE_SAMPLE {
+ filePath = "../_input/day_06_part_01_sample.txt"
+ } else {
+ filePath = "../_input/day_06.txt"
+ }
+ contents, _ := os.ReadFile(filePath)
+
+ lines := strings.Split(string(contents), "\r\n")
+
+ timeLine := lines[0]
+ times := parseTimeLine(timeLine)
+
+ distLine := lines[1]
+ distances := parseDistanceLine(distLine)
+
+ answer := calculateAnswer(times, distances)
+
+ println(answer)
+}
+
+func parseTimeLine(timeLine string) []int {
+ prefix := "Time:"
+ return parseLine(prefix, timeLine)
+}
+
+func parseDistanceLine(distLine string) []int {
+ prefix := "Distance:"
+ return parseLine(prefix, distLine)
+}
+
+func parseLine(prefix string, line string) []int {
+ withoutTitle := strings.TrimPrefix(line, prefix)
+
+ numbers := []int{}
+ for _, number := range strings.Split(withoutTitle, " ") {
+ if number == "" {
+ continue
+ }
+ numberInt, _ := strconv.Atoi(number)
+ numbers = append(numbers, numberInt)
+ }
+ return numbers
+}
+
+func calculateAnswer(times []int, distances []int) int {
+ answer := 1
+ for i, maxTime := range times {
+ recordDistance := distances[i]
+
+ var greaterThanRecord []int
+ for buttonPressedFor := 0; buttonPressedFor <= maxTime; buttonPressedFor++ {
+ distance := calculateDistance(buttonPressedFor, maxTime)
+ if distance > recordDistance {
+ greaterThanRecord = append(greaterThanRecord, distance)
+ }
+ }
+
+ if len(greaterThanRecord) > 0 {
+ answer *= len(greaterThanRecord)
+ }
+ }
+
+ return answer
+}
+
+func calculateDistance(buttonPressedFor int, maxTime int) int {
+ return buttonPressedFor * (maxTime - buttonPressedFor)
+}
diff --git a/2023/Go/internal/day_06/part_01/part_01_test.go b/2023/Go/internal/day_06/part_01/part_01_test.go
new file mode 100644
index 0000000..7af828c
--- /dev/null
+++ b/2023/Go/internal/day_06/part_01/part_01_test.go
@@ -0,0 +1,96 @@
+package part_01
+
+import "testing"
+
+func TestParseTimeLine(t *testing.T) {
+ tests := map[string]struct {
+ input string
+ expected []int
+ }{
+ "empty": {"", []int{}},
+ "sample": {"Time: 7 15 30", []int{7, 15, 30}},
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := parseTimeLine(test.input)
+ if len(actual) != len(test.expected) {
+ t.Errorf("Expected %d, got %d", len(test.expected), len(actual))
+ }
+ for i := 0; i < len(actual); i++ {
+ if actual[i] != test.expected[i] {
+ t.Errorf("Expected %d, got %d", test.expected[i], actual[i])
+ }
+ }
+ })
+ }
+}
+
+func TestParseDistLine(t *testing.T) {
+ tests := map[string]struct {
+ input string
+ expected []int
+ }{
+ "empty": {"", []int{}},
+ "sample": {"Distance: 9 40 200", []int{9, 40, 200}},
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := parseDistanceLine(test.input)
+ if len(actual) != len(test.expected) {
+ t.Errorf("Expected %d, got %d", len(test.expected), len(actual))
+ }
+ for i := 0; i < len(actual); i++ {
+ if actual[i] != test.expected[i] {
+ t.Errorf("Expected %d, got %d", test.expected[i], actual[i])
+ }
+ }
+ })
+ }
+}
+
+func TestCalculateAnswer(t *testing.T) {
+ tests := map[string]struct {
+ times []int
+ distances []int
+ expected int
+ }{
+ "sample": {[]int{7, 15, 30}, []int{9, 40, 200}, 288},
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := calculateAnswer(test.times, test.distances)
+ if actual != test.expected {
+ t.Errorf("Expected %d, got %d", test.expected, actual)
+ }
+ })
+ }
+}
+
+func TestCalculateDistance(t *testing.T) {
+ tests := map[string]struct {
+ maxTime int
+ buttonPressedFor int
+ expected int
+ }{
+ "7_7": {7, 7, 0},
+ "7_6": {7, 6, 6},
+ "7_5": {7, 5, 10},
+ "7_4": {7, 4, 12},
+ "7_3": {7, 3, 12},
+ "7_2": {7, 2, 10},
+ "7_1": {7, 1, 6},
+ "7_0": {7, 0, 0},
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := calculateDistance(test.buttonPressedFor, test.maxTime)
+ if actual != test.expected {
+ t.Errorf("Expected %d, got %d", test.expected, actual)
+ }
+ })
+ }
+}
diff --git a/2023/Go/internal/day_06/part_02/part_02.go b/2023/Go/internal/day_06/part_02/part_02.go
new file mode 100644
index 0000000..316b169
--- /dev/null
+++ b/2023/Go/internal/day_06/part_02/part_02.go
@@ -0,0 +1,81 @@
+package part_02
+
+import (
+ "os"
+ "strconv"
+ "strings"
+)
+
+const USE_SAMPLE = false
+
+/**
+ * Tried:
+ * - 24655068 (correct!)
+ */
+func Solve() {
+ var filePath string
+ if USE_SAMPLE {
+ filePath = "../_input/day_06_part_02_sample.txt"
+ } else {
+ filePath = "../_input/day_06.txt"
+ }
+ contents, _ := os.ReadFile(filePath)
+
+ lines := strings.Split(string(contents), "\r\n")
+
+ timeLine := lines[0]
+ time := parseTimeLine(timeLine)
+
+ distLine := lines[1]
+ distance := parseDistanceLine(distLine)
+
+ answer := calculateAnswer(time, distance)
+
+ println(answer)
+}
+
+func parseTimeLine(timeLine string) int {
+ prefix := "Time:"
+ return parseLine(prefix, timeLine)
+}
+
+func parseDistanceLine(distLine string) int {
+ prefix := "Distance:"
+ return parseLine(prefix, distLine)
+}
+
+func parseLine(prefix string, line string) int {
+ withoutTitle := strings.TrimPrefix(line, prefix)
+
+ numbers := []string{}
+ for _, number := range strings.Split(withoutTitle, " ") {
+ if number == "" {
+ continue
+ }
+ numbers = append(numbers, number)
+ }
+
+ number := strings.Join(numbers, "")
+ numberInt, err := strconv.Atoi(number)
+ if err != nil {
+ panic(err)
+ }
+
+ return numberInt
+}
+
+func calculateAnswer(maxTime int, recordDistance int) int {
+ var greaterThanRecord []int
+ for buttonPressedFor := 0; buttonPressedFor <= maxTime; buttonPressedFor++ {
+ distance := calculateDistance(buttonPressedFor, maxTime)
+ if distance > recordDistance {
+ greaterThanRecord = append(greaterThanRecord, distance)
+ }
+ }
+
+ return len(greaterThanRecord)
+}
+
+func calculateDistance(buttonPressedFor int, maxTime int) int {
+ return buttonPressedFor * (maxTime - buttonPressedFor)
+}
diff --git a/2023/Go/internal/day_06/part_02/part_02_test.go b/2023/Go/internal/day_06/part_02/part_02_test.go
new file mode 100644
index 0000000..67924dc
--- /dev/null
+++ b/2023/Go/internal/day_06/part_02/part_02_test.go
@@ -0,0 +1,84 @@
+package part_02
+
+import "testing"
+
+func TestParseTimeLine(t *testing.T) {
+ tests := map[string]struct {
+ input string
+ expected int
+ }{
+ "sample": {"Time: 7 15 30", 71530},
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := parseTimeLine(test.input)
+ if actual != test.expected {
+ t.Errorf("Expected %d, got %d", test.expected, actual)
+ }
+ })
+ }
+}
+
+func TestParseDistLine(t *testing.T) {
+ tests := map[string]struct {
+ input string
+ expected int
+ }{
+ "sample": {"Distance: 9 40 200", 940200},
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := parseDistanceLine(test.input)
+ if actual != test.expected {
+ t.Errorf("Expected %d, got %d", test.expected, actual)
+ }
+ })
+ }
+}
+
+func TestCalculateAnswer(t *testing.T) {
+ tests := map[string]struct {
+ maxTime int
+ recordDistance int
+ expected int
+ }{
+ "sample": {71530, 940200, 71503},
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := calculateAnswer(test.maxTime, test.recordDistance)
+ if actual != test.expected {
+ t.Errorf("Expected %d, got %d", test.expected, actual)
+ }
+ })
+ }
+}
+
+func TestCalculateDistance(t *testing.T) {
+ tests := map[string]struct {
+ maxTime int
+ buttonPressedFor int
+ expected int
+ }{
+ "7_7": {7, 7, 0},
+ "7_6": {7, 6, 6},
+ "7_5": {7, 5, 10},
+ "7_4": {7, 4, 12},
+ "7_3": {7, 3, 12},
+ "7_2": {7, 2, 10},
+ "7_1": {7, 1, 6},
+ "7_0": {7, 0, 0},
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := calculateDistance(test.buttonPressedFor, test.maxTime)
+ if actual != test.expected {
+ t.Errorf("Expected %d, got %d", test.expected, actual)
+ }
+ })
+ }
+}
diff --git a/2023/Go/internal/day_07/part_01/part_01.go b/2023/Go/internal/day_07/part_01/part_01.go
new file mode 100644
index 0000000..a485dfd
--- /dev/null
+++ b/2023/Go/internal/day_07/part_01/part_01.go
@@ -0,0 +1,273 @@
+package part_01
+
+import (
+ "os"
+ "strconv"
+ "strings"
+)
+
+const USE_SAMPLE = false
+
+type handType int
+
+const (
+ HIGH_CARD handType = iota
+ PAIR
+ TWO_PAIR
+ THREE_OF_A_KIND
+ FULL_HOUSE
+ FOUR_OF_A_KIND
+ FIVE_OF_A_KIND
+)
+
+func (h handType) String() string {
+ return [...]string{"HIGH_CARD", "PAIR", "TWO_PAIR", "THREE_OF_A_KIND", "FULL_HOUSE", "FOUR_OF_A_KIND", "FIVE_OF_A_KIND"}[h]
+}
+
+type cardType int
+
+const (
+ TWO cardType = iota
+ THREE
+ FOUR
+ FIVE
+ SIX
+ SEVEN
+ EIGHT
+ NINE
+ TEN
+ JACK
+ QUEEN
+ KING
+ ACE
+)
+
+func (c cardType) String() string {
+ return [...]string{"TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "TEN", "JACK", "QUEEN", "KING", "ACE"}[c]
+}
+
+type hand struct {
+ strength handType
+ cards []cardType
+ bet int
+}
+
+/**
+ * Tried:
+ * - 252489894 (too high)
+ * - 229176554 (too low)
+ * - 200253108 (too low)
+ */
+func Solve() {
+ var filePath string
+ if USE_SAMPLE {
+ filePath = "../_input/day_07_part_01_sample.txt"
+ } else {
+ filePath = "../_input/day_07.txt"
+ }
+ contents, err := os.ReadFile(filePath)
+ if err != nil {
+ panic(err)
+ }
+
+ lines := strings.Split(string(contents), "\r\n")
+ var hands []hand
+ for _, line := range lines {
+ if line == "" {
+ continue
+ }
+
+ hands = append(hands, parseLine(line))
+ }
+
+ mappedByStrength := mapByStrength(hands)
+
+ sortedByHighest := make(map[handType][]hand)
+ for _, strength := range []handType{HIGH_CARD, PAIR, TWO_PAIR, THREE_OF_A_KIND, FULL_HOUSE, FOUR_OF_A_KIND, FIVE_OF_A_KIND} {
+ if _, ok := mappedByStrength[strength]; !ok {
+ continue
+ }
+
+ toBeSorted := mappedByStrength[strength]
+ sortedByHighest[strength] = sortByHighest(toBeSorted)
+ }
+
+ flattened := flatten(sortedByHighest)
+
+ answer := calculateWinnings(flattened)
+
+ println("Answer: ", answer)
+}
+
+func parseLine(line string) hand {
+ parts := strings.Split(line, " ")
+
+ unparsedCards := strings.Split(parts[0], "")
+ cards := parseCards(unparsedCards)
+ strength := calculateStrength(cards)
+
+ bet, err := strconv.Atoi(parts[1])
+ if err != nil {
+ panic(err)
+ }
+
+ return hand{
+ strength,
+ cards,
+ bet,
+ }
+}
+
+func parseCards(unparsedCards []string) []cardType {
+ var cards []cardType
+ for _, card := range unparsedCards {
+ switch card {
+ case "2":
+ cards = append(cards, TWO)
+ case "3":
+ cards = append(cards, THREE)
+ case "4":
+ cards = append(cards, FOUR)
+ case "5":
+ cards = append(cards, FIVE)
+ case "6":
+ cards = append(cards, SIX)
+ case "7":
+ cards = append(cards, SEVEN)
+ case "8":
+ cards = append(cards, EIGHT)
+ case "9":
+ cards = append(cards, NINE)
+ case "T":
+ cards = append(cards, TEN)
+ case "J":
+ cards = append(cards, JACK)
+ case "Q":
+ cards = append(cards, QUEEN)
+ case "K":
+ cards = append(cards, KING)
+ case "A":
+ cards = append(cards, ACE)
+ }
+ }
+ return cards
+}
+
+func calculateStrength(cards []cardType) handType {
+ strength := map[cardType]int{}
+ for _, card := range cards {
+ if _, ok := strength[card]; !ok {
+ strength[card] = 0
+ }
+ strength[card]++
+ }
+
+ var pairs int
+ var hasThreeOfAKind bool
+ for _, count := range strength {
+ if count == 5 {
+ return FIVE_OF_A_KIND
+ }
+
+ if count == 4 {
+ return FOUR_OF_A_KIND
+ }
+
+ if count == 3 {
+ hasThreeOfAKind = true
+ }
+
+ if count == 2 {
+ pairs++
+ }
+ }
+
+ if hasThreeOfAKind && pairs == 1 {
+ return FULL_HOUSE
+ }
+
+ if hasThreeOfAKind {
+ return THREE_OF_A_KIND
+ }
+
+ if pairs == 2 {
+ return TWO_PAIR
+ }
+
+ if pairs == 1 {
+ return PAIR
+ }
+
+ return HIGH_CARD
+}
+
+func mapByStrength(hands []hand) map[handType][]hand {
+
+ handsByStrength := make(map[handType][]hand)
+ for _, hand := range hands {
+ handsByStrength[hand.strength] = append(handsByStrength[hand.strength], hand)
+ }
+
+ return handsByStrength
+}
+
+// low to high
+func sortByHighest(hands []hand) []hand {
+ var partition = func(arr []hand, low, high int) ([]hand, int) {
+ pivot := arr[high]
+ index := low
+
+ for i := low; i < high; i++ {
+ // Always 5 cards
+ for j := 0; j < 5; j++ {
+ if arr[i].cards[j] < pivot.cards[j] {
+ arr[i], arr[index] = arr[index], arr[i]
+ index++
+ break
+ }
+
+ if arr[i].cards[j] != pivot.cards[j] {
+ break
+ }
+ }
+ }
+
+ arr[high], arr[index] = arr[index], arr[high]
+
+ return arr, index
+ }
+
+ var quickSort func(arr []hand, low, high int) []hand
+ quickSort = func(arr []hand, low, high int) []hand {
+ if low < high {
+ arr, pivot := partition(arr, low, high)
+
+ quickSort(arr, low, pivot-1)
+ quickSort(arr, pivot+1, high)
+ }
+
+ return arr
+ }
+
+ hands = quickSort(hands, 0, len(hands)-1)
+
+ return hands
+}
+
+func flatten(hands map[handType][]hand) []hand {
+ var flat []hand
+ for _, handType := range []handType{HIGH_CARD, PAIR, TWO_PAIR, THREE_OF_A_KIND, FULL_HOUSE, FOUR_OF_A_KIND, FIVE_OF_A_KIND} {
+ flat = append(flat, hands[handType]...)
+ }
+ return flat
+}
+
+func calculateWinnings(hands []hand) int {
+ var winnings int
+ for i, hand := range hands {
+ earned := hand.bet * (i + 1)
+ winnings += earned
+ println("hand ", i, ": { strength: ", hand.strength.String(), ", cards: [", hand.cards[0], hand.cards[1], hand.cards[2], hand.cards[3], hand.cards[4], "], earned: ", earned, " }")
+ }
+ return winnings
+}
diff --git a/2023/Go/internal/day_07/part_01/part_01_test.go b/2023/Go/internal/day_07/part_01/part_01_test.go
new file mode 100644
index 0000000..6ceabe8
--- /dev/null
+++ b/2023/Go/internal/day_07/part_01/part_01_test.go
@@ -0,0 +1,432 @@
+package part_01
+
+import "testing"
+
+func TestParseLine(t *testing.T) {
+ tests := map[string]struct {
+ input string
+ expected hand
+ }{
+ "sample_1": {
+ input: "32T3K 765",
+ expected: hand{
+ strength: PAIR,
+ cards: []cardType{THREE, TWO, TEN, THREE, KING},
+ bet: 765,
+ },
+ },
+ "sample_2": {
+ input: "T55J5 684",
+ expected: hand{
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{TEN, FIVE, FIVE, JACK, FIVE},
+ bet: 684,
+ },
+ },
+ "sample_3": {
+ input: "KK677 28",
+ expected: hand{
+ strength: TWO_PAIR,
+ cards: []cardType{KING, KING, SIX, SEVEN, SEVEN},
+ bet: 28,
+ },
+ },
+ "sample_4": {
+ input: "KTJJT 220",
+ expected: hand{
+ strength: TWO_PAIR,
+ cards: []cardType{KING, TEN, JACK, JACK, TEN},
+ bet: 220,
+ },
+ },
+ "sample_5": {
+ input: "QQQJA 483",
+ expected: hand{
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{QUEEN, QUEEN, QUEEN, JACK, ACE},
+ bet: 483,
+ },
+ },
+ "full_house": {
+ input: "QQQAA 999",
+ expected: hand{
+ strength: FULL_HOUSE,
+ cards: []cardType{QUEEN, QUEEN, QUEEN, ACE, ACE},
+ bet: 999,
+ },
+ },
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := parseLine(test.input)
+
+ if actual.strength != test.expected.strength {
+ t.Errorf("Strength: expected %v, got %v", test.expected.strength, actual.strength)
+ }
+
+ if len(actual.cards) != len(test.expected.cards) {
+ t.Errorf("Cards: expected %v, got %v", test.expected.cards, actual.cards)
+ }
+
+ for i, card := range actual.cards {
+ if card != test.expected.cards[i] {
+ t.Errorf("Card Order: expected %v, got %v", test.expected.cards, actual.cards)
+ }
+ }
+
+ if actual.bet != test.expected.bet {
+ t.Errorf("Bet: expected %v, got %v", test.expected.bet, actual.bet)
+ }
+ })
+ }
+}
+
+func TestMapByStrength(t *testing.T) {
+ tests := map[string]struct {
+ input []hand
+ expected map[handType][]hand
+ }{
+ "sample": {
+ input: []hand{
+ {
+ strength: PAIR,
+ cards: []cardType{THREE, TWO, TEN, THREE, KING},
+ bet: 765,
+ },
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{TEN, FIVE, FIVE, JACK, FIVE},
+ bet: 684,
+ },
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, KING, SIX, SEVEN, SEVEN},
+ bet: 28,
+ },
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, TEN, JACK, JACK, TEN},
+ bet: 220,
+ },
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{QUEEN, QUEEN, QUEEN, JACK, ACE},
+ bet: 483,
+ },
+ },
+ expected: map[handType][]hand{
+ PAIR: {
+ {
+ strength: PAIR,
+ cards: []cardType{THREE, TWO, TEN, THREE, KING},
+ bet: 765,
+ },
+ },
+ TWO_PAIR: {
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, KING, SIX, SEVEN, SEVEN},
+ bet: 28,
+ },
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, TEN, JACK, JACK, TEN},
+ bet: 220,
+ },
+ },
+ THREE_OF_A_KIND: {
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{TEN, FIVE, FIVE, JACK, FIVE},
+ bet: 684,
+ },
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{QUEEN, QUEEN, QUEEN, JACK, ACE},
+ bet: 483,
+ },
+ },
+ },
+ },
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := mapByStrength(test.input)
+
+ for strength, hands := range actual {
+ expected := test.expected[strength]
+
+ if len(hands) != len(expected) {
+ t.Errorf("Length: expected %v, got %v", len(expected), len(hands))
+ }
+
+ for i, hand := range hands {
+ if hand.strength != expected[i].strength {
+ t.Errorf("Strength: expected %v, got %v", expected[i].strength, hand.strength)
+ }
+
+ if len(hand.cards) != len(expected[i].cards) {
+ t.Errorf("Cards: expected %v, got %v", expected[i].cards, hand.cards)
+ }
+
+ for j, card := range hand.cards {
+ if card != expected[i].cards[j] {
+ t.Errorf("Card Order: expected %v, got %v", expected[i].cards, hand.cards)
+ }
+ }
+
+ if hand.bet != expected[i].bet {
+ t.Errorf("Bet: expected %v, got %v", expected[i].bet, hand.bet)
+ }
+ }
+ }
+ })
+ }
+}
+
+func TestSortByHighest(t *testing.T) {
+ tests := map[string]struct {
+ input []hand
+ expected []hand
+ }{
+ "sample": {
+ input: []hand{
+ {
+ strength: PAIR,
+ cards: []cardType{THREE, TWO, TEN, THREE, KING},
+ bet: 765,
+ },
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{TEN, FIVE, FIVE, JACK, FIVE},
+ bet: 684,
+ },
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, KING, SIX, SEVEN, SEVEN},
+ bet: 28,
+ },
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, TEN, JACK, JACK, TEN},
+ bet: 220,
+ },
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{QUEEN, QUEEN, QUEEN, JACK, ACE},
+ bet: 483,
+ },
+ },
+ expected: []hand{
+ {
+ strength: PAIR,
+ cards: []cardType{THREE, TWO, TEN, THREE, KING},
+ bet: 765,
+ },
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{TEN, FIVE, FIVE, JACK, FIVE},
+ bet: 684,
+ },
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{QUEEN, QUEEN, QUEEN, JACK, ACE},
+ bet: 483,
+ },
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, TEN, JACK, JACK, TEN},
+ bet: 220,
+ },
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, KING, SIX, SEVEN, SEVEN},
+ bet: 28,
+ },
+ },
+ },
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := sortByHighest(test.input)
+
+ if len(actual) != len(test.expected) {
+ t.Errorf("Length: expected %v, got %v", len(test.expected), len(actual))
+ }
+
+ for i, hand := range actual {
+ if hand.strength != test.expected[i].strength {
+ t.Errorf("Strength: expected %v, got %v", test.expected[i].strength, hand.strength)
+ }
+
+ if len(hand.cards) != len(test.expected[i].cards) {
+ t.Errorf("Cards: expected %v, got %v", test.expected[i].cards, hand.cards)
+ }
+
+ for j, card := range hand.cards {
+ if card != test.expected[i].cards[j] {
+ t.Errorf("Card Order: expected %v, got %v", test.expected[i].cards, hand.cards)
+ }
+ }
+
+ if hand.bet != test.expected[i].bet {
+ t.Errorf("Bet: expected %v, got %v", test.expected[i].bet, hand.bet)
+ }
+ }
+ })
+ }
+}
+
+func TestFlatten(t *testing.T) {
+ tests := map[string]struct {
+ input map[handType][]hand
+ expected []hand
+ }{
+ "sample": {
+ // Order jumbled to ensure sorting works
+ input: map[handType][]hand{
+ TWO_PAIR: {
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, TEN, JACK, JACK, TEN},
+ bet: 220,
+ },
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, KING, SIX, SEVEN, SEVEN},
+ bet: 28,
+ },
+ },
+ PAIR: {
+ {
+ strength: PAIR,
+ cards: []cardType{THREE, TWO, TEN, THREE, KING},
+ bet: 765,
+ },
+ },
+ THREE_OF_A_KIND: {
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{TEN, FIVE, FIVE, JACK, FIVE},
+ bet: 684,
+ },
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{QUEEN, QUEEN, QUEEN, JACK, ACE},
+ bet: 483,
+ },
+ },
+ },
+ expected: []hand{
+ {
+ strength: PAIR,
+ cards: []cardType{THREE, TWO, TEN, THREE, KING},
+ bet: 765,
+ },
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, TEN, JACK, JACK, TEN},
+ bet: 220,
+ },
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, KING, SIX, SEVEN, SEVEN},
+ bet: 28,
+ },
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{TEN, FIVE, FIVE, JACK, FIVE},
+ bet: 684,
+ },
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{QUEEN, QUEEN, QUEEN, JACK, ACE},
+ bet: 483,
+ },
+ },
+ },
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := flatten(test.input)
+
+ if len(actual) != len(test.expected) {
+ t.Errorf("Length: expected %v, got %v", len(test.expected), len(actual))
+ }
+
+ for i, hand := range actual {
+ expected := test.expected[i]
+
+ if hand.strength != expected.strength {
+ t.Errorf("Strength: expected %v, got %v", expected.strength, hand.strength)
+ }
+
+ if len(hand.cards) != len(expected.cards) {
+ t.Errorf("Cards: expected %v, got %v", expected.cards, hand.cards)
+ }
+
+ for i, card := range hand.cards {
+ if card != expected.cards[i] {
+ t.Errorf("Card Order: expected %v, got %v", expected.cards, hand.cards)
+ }
+ }
+
+ if hand.bet != expected.bet {
+ t.Errorf("Bet: expected %v, got %v", expected.bet, hand.bet)
+ }
+ }
+ })
+ }
+}
+
+func TestCalculateWinnings(t *testing.T) {
+ tests := map[string]struct {
+ input []hand
+ expected int
+ }{
+ "sample": {
+ input: []hand{
+ {
+ strength: PAIR,
+ cards: []cardType{THREE, TWO, TEN, THREE, KING},
+ bet: 765,
+ },
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, TEN, JACK, JACK, TEN},
+ bet: 220,
+ },
+ {
+ strength: TWO_PAIR,
+ cards: []cardType{KING, KING, SIX, SEVEN, SEVEN},
+ bet: 28,
+ },
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{TEN, FIVE, FIVE, JACK, FIVE},
+ bet: 684,
+ },
+ {
+ strength: THREE_OF_A_KIND,
+ cards: []cardType{QUEEN, QUEEN, QUEEN, JACK, ACE},
+ bet: 483,
+ },
+ },
+ expected: 6440,
+ },
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ actual := calculateWinnings(test.input)
+
+ if actual != test.expected {
+ t.Errorf("Winnings: expected %v, got %v", test.expected, actual)
+ }
+ })
+ }
+}
diff --git a/2023/Go/main.go b/2023/Go/main.go
new file mode 100644
index 0000000..3357d3e
--- /dev/null
+++ b/2023/Go/main.go
@@ -0,0 +1,85 @@
+package main
+
+import (
+ "flag"
+ "os"
+
+ "github.com/DJOLEARY/Advent_of_Code/internal/day_01"
+ day_02_part_01 "github.com/DJOLEARY/Advent_of_Code/internal/day_02/part_01"
+ day_02_part_02 "github.com/DJOLEARY/Advent_of_Code/internal/day_02/part_02"
+ day_03_part_01 "github.com/DJOLEARY/Advent_of_Code/internal/day_03/part_01"
+ day_04_part_01 "github.com/DJOLEARY/Advent_of_Code/internal/day_04/part_01"
+ day_04_part_02 "github.com/DJOLEARY/Advent_of_Code/internal/day_04/part_02"
+ day_06_part_01 "github.com/DJOLEARY/Advent_of_Code/internal/day_06/part_01"
+ day_06_part_02 "github.com/DJOLEARY/Advent_of_Code/internal/day_06/part_02"
+ day_07_part_01 "github.com/DJOLEARY/Advent_of_Code/internal/day_07/part_01"
+)
+
+func main() {
+ day := flag.Int("day", 1, "Day to run")
+ part := flag.Int("part", 2, "Part to run, must be 1 or 2")
+
+ flag.Parse()
+
+ if *part < 1 || *part > 2 {
+ println("Invalid part number, must be 1 or 2")
+ os.Exit(1)
+ }
+
+ switch *day {
+ case 1:
+ switch *part {
+ case 1:
+ println("Day 1 part 1 not implemented")
+ os.Exit(1)
+ case 2:
+ day_01.Solve()
+ }
+
+ case 2:
+ switch *part {
+ case 1:
+ day_02_part_01.Solve()
+ case 2:
+ day_02_part_02.Solve()
+ }
+
+ case 3:
+ switch *part {
+ case 1:
+ day_03_part_01.Solve()
+ case 2:
+ println("Day 3 part 2 not implemented")
+ os.Exit(1)
+ }
+
+ case 4:
+ switch *part {
+ case 1:
+ day_04_part_01.Solve()
+ case 2:
+ day_04_part_02.Solve()
+ }
+
+ case 6:
+ switch *part {
+ case 1:
+ day_06_part_01.Solve()
+ case 2:
+ day_06_part_02.Solve()
+ }
+
+ case 7:
+ switch *part {
+ case 1:
+ day_07_part_01.Solve()
+ case 2:
+ println("Day 7 part 2 not implemented")
+ os.Exit(1)
+ }
+
+ default:
+ println("Day not implemented")
+ os.Exit(1)
+ }
+}
diff --git a/2023/_input/day_01.txt b/2023/_input/day_01.txt
new file mode 100644
index 0000000..e394817
--- /dev/null
+++ b/2023/_input/day_01.txt
@@ -0,0 +1,1000 @@
+nine92jnhgqzctpgbcbpz
+sevensddvc73three
+9986fmfqhdmq8
+7onexmxbzllfqb
+six777
+1zbngsixxrfrpr
+threeeight9seven
+nhds975three6
+ninepgp9
+22fourninetzfourfsnxjglthreeeight
+mhcvqmsg7bdj
+seven67
+fourone5
+twofour7
+5sixonesix3pzhd
+3htvgrzpznhjts52one
+52cmzhfrxdfmtgvtfqx7three4szcfchxj
+sixtwonine7
+three7938
+67four4
+7zr9
+4qseventwoqqf9bbqg4
+sevenone1srmghlzg
+ctwonenxmhspdmnineone7
+8mgzsgmphgceight
+ktznbbmkbhln4six
+cbtpgzc4
+rxzgrqeightseven18five4txv
+jgb95ninetwonine
+45mxfg9twodsnnjsfnk1five
+29lhfhfkdqfntwo
+tssixsixdxjzjjhq35hone
+cjfjpcrpcn7rlrlrxslmhpt56189
+5llmdmqgt149sevenoneq6
+l9649twothree
+8two34fjxt42
+seven3threelxd66
+46248mmfblpgql9fournine
+3cmvxcskh4
+491mzklmbt7bgcrbmspprjgsgv
+95eight5five
+14qqndrttdrlgqrhmtbninezgjsftb
+nine37eight1fcqns
+4onethreekzpkpkpmxlpnsvqtlmtrsgznxkckrpsqskbz6
+9vvcsgxq
+nlvfrjghsnbnine19
+pdxlsxthvmone25eight
+613twoseven9
+123fdx
+dnqgrzzmxxdjzknc3
+twodm2
+thprcxhggclfnlsixzhl863ninevzzvfvhz
+1fourkbfhhzclz1
+5qvtpll6eight1
+sevenfourninedmrccgnbd8ncbjjm
+3threezv6nine
+kq279fiveoneone8four
+nlqlzbbnrn2
+8jqhncbfsxvrrqxfkv
+r5onefive
+znlzncgngjlpxhmmmxprseventhree7
+jkpbfpvssixxpfjcs528
+four4fsts53fdgckkz
+kjrkflhmlk11psixdhpxbstklx
+4788vhrlqltv
+1zntp2
+9htgdlbktwo7pthree
+37dqpbmqxssvznrzp2nvzcvlnsdoneightq
+zkcjnc6zgsrcmvthcjsfgvbtxh
+8seven8nine
+vnx3
+7dkxxq6298
+one42
+qpjtvfhsnmonethreeqpc5
+2eightlsbsrkkcp9dmmg
+818twoseven81dtjrkgvfive
+4nine32kjgpljzskthree9
+ninedkxkktxmr1ptrlpkbqqhcjvfszseven
+2573
+bskfrcfvc5
+3onevjgpjbqfgone7
+xp55eightsixfive42two
+eight64
+13two8zgdmtgngdlsqzlfzskst
+zmjdhkfdnine18rkp93
+2onefivesevenrkvqqp3
+47xvdflvxvgvqnqdxj
+lvrnrbmthree6
+74j
+xkrpgrvrn6745ninefive
+839vhbgvnbcmccbvhsm
+6128bbzq5vdbqllshr
+37two
+one3lttgqqdmtpmbzbxqlrshvdpcdgcjhtwotwo9
+fourpjhbseven89kmpzmdqceight
+twoninegzgseven5nine
+pfflhh6gvlrkrdscthree
+8fivesix8jntbb
+bzxt439
+8tpcq57
+6onethree
+nineqm9eightsevenfxqqcnk4
+9hcxcjfmbb12one6cfvnbc
+37threesevenzljkqzshqkcp
+trnrncrssxrqmlhbglrspbzvdtlonegtv4one4nineeightwodxs
+21fivedqnjnrjtlk2fkkzf9sklbpx3
+hqptwone85eight7lgq
+4seven7
+6seven5three6rmcphxdnh283
+8sevenmxkhgsq9bfeightfivemfour
+7two1six9smnvbjhfivesevenseven
+5hrxbglgkn46grstkdbmzrxp95tt
+cfdqbjtwoll3fxvseven6kzfzrblxp
+qnhqbczqp7fxc2two
+sixsix4sjjdjlxnjgcmqsrzvzljvqhlrrtvtrcqxdzdqt
+seven36fourstbzj
+zj4fiveninefourtwo2
+5rqpmvlp
+3fivextckgmvrsv
+threenlqhqshmk31eightsone4hbxfnvf
+975five7dzjcnsrvv6fourpjhghvhlxx
+nine82plfjneightsevenonefive
+five21
+bntwofourrxt2tdrscfzdg
+87fivetwo
+2threebnpvtrqqnz5prmsppgzdfhnq
+6qgpnnine
+2vkvg
+5zzqxp
+sixxlkrhpfptqnhtkq1sevenqbnnnjfsixnine
+4eighttwo6lsxpczhcmxs
+kvnzcjsbsix1hnineseven
+gztwoneseven3tnxb2sixeight457
+four76two9eightfour
+nine1nine
+14lrrxcds
+twonqp5gpnbkbeight3
+fourthreebnjghhlhkhconegcssjrjpbkcghxtxssix4
+one57
+zkjkzq6sjztlrqrjr9
+seveneightsqjzqgnj69eight1
+44tvjvzflfc5seven
+26threemjdghknrmv
+nfvg2rzcrpntndp2xsglskninesix
+nqdpzsevenpfxhvzthgn3
+2onejxpzf4zzktsmszgmpcfsstm6
+xx89
+76qseven
+jsevenztsdb9hhmcdbftq
+16one7nine
+seventwoqdkcbhdpmmtworljxhvvbh1
+jzbvvsmd1
+1ninesixpvcdkllhzbnrhqmztzeight
+47pmnvsxgvgbthreenine
+two88nine4sptjdbpl8
+eightfxpg9eightgmzmtmcdninerbbcpfv
+fourpfkzxjtqffour4fourone
+nine5fourzldszlp5eightdhpmxfjqp
+onetwo1l
+zjxcvkgdvm83
+lrbsdhcthreembbcxsix6
+eighthjtndgmqsixeight9xcbkfkcbgcscfnxrdxglb
+vfive9fourcmtpfour
+sevenonefour5
+rgf7kgdskzdlnmvdccpgphfzzz9six3
+five7ninernknr
+cbn5fxdlthree41pzzkfive5
+two7eight2p
+ninenine11qct7five5
+zsrqtvkrlc2gmgzshqmrkgd63sevennine
+five6six
+threeshpvfrcjc3mddjbmfxqrtpdxninemscsixrvvzp
+mrrmmvgk63threethreeseven9
+pjsdfkzmjnine8xqsrm
+ninefourfive1
+96twonineqkdvnlmppxnnfbxltq2bvsgvckczk8
+dsjbhdnseven1grgfhnv2fourzhbzsrtb
+4zfzmsmd6sbkx1threedbx
+8qqfdnfive77ckhjpfx
+zq5pdkmp1d
+one285seven
+2hg99slp8
+5b629cmr5
+8mdsmlqdl7
+11
+leightfivemqqcgdkmgf5bnh
+six44jsjglrb9bkhjthreecrvnvkzp
+4c83five
+vkplqrvclg39nbxrdxlf
+zk8bmtnlfb6one53five
+32sevenonefourshgllvpcx7ndb
+eight937
+four5rntqrhknd
+75k
+five1pqtthree7eightwogbz
+lplnltrj3
+eightfbqknfvpnq797z
+six347sevenddrtmtbfzc85fqmtg
+7twoqjzfm56rxtwo
+vcnxgdvnlpcsxnf5onesjjsh
+tkxzgtsrseven5eightkzzchsttcclsrj3l
+eightgnb6brlhgvjqqtone41
+seven6two2seven
+rptsrgfgxbfivekmczndhk7
+1fourdjmngvm6
+92two68cnpqnksixthree
+nine9lzjhvqfmlbtvhpldthree6seven
+hfggfbbone5hhsdplqlbtrd
+419
+oneszzlpcdthree3psbjhtxg
+72sixqblfhxttgkt
+t3vd96eighttwofive
+6onenszxmlqmddsevencmqskr
+cnlkqsjthree7sevenrfrsxqm
+47eight5seven4
+five273gvq
+8bszrghjsgplgq2vdjltggpv5ngbjtsxr5zmqht
+hmtc5onelbxllblcbd
+seven436cjsxvxkzjpxfzfvj9
+8qcrkfqnfck957qklqkh3fourfour
+bhtnrfckfone9six8
+fgz3seven
+2ninesevenpdcpcjnine2two9
+vgfvvjhb6jqjnine
+rfsndn62
+vldqdctnonenine3threeghxbvmdmlgcjpfrdjnine3
+two677eight
+6ksn
+762two
+ldppf75nine68xnf79
+eighttwoh5three
+nine1threeseven
+seven2kxqxgksevenhhsksnkhqcrlrltsixcnszhmn
+lhbjnineseven16eightrmjgxdzfour
+onetwo77jtgtnqnc8one
+four7ninejxkqnhqjfdzrjdhggrvfourlh
+qq2brmqcccqr
+nlsdfour5eightsktbmxlxc7
+8fpjfstnbnineqgkbxtl5dqdnjqnlz2lcljvfbcl
+g6r
+6five6sixvjctzjkksbrnkpp3
+1four8sixthree32nbbpjnhmzp
+2md
+twokxhkggninengbfjmdfc76
+fivetwosix446sevenfkgzd
+57vflrqxnbcqfour3hcjhsrrrxkpjxgvfive
+svbppr8six66
+twokthreevxdfvtmpjddnl8
+sixnine1eight44seven9
+scsmpjjxlzjf876
+74qhtxntdkz19pchjtlxclm3
+seven8ninenjtvkgj45one
+bkseightfourone4threeonesnb
+8two8xnglszthreeone
+lt771782
+one5cfdcnz
+zgsqfmxdkbnhsbgzchmfdrpmkvtzone1
+jmcdgvjnmdhskfiveninevbczbs3
+kzeightwokpnjskjhseveneightkpjb72ninecftgvk
+7eightwogbb
+54kvfvmfcbxbd
+3threeninegrlkrnkpd
+phbqqhtdtclfzph58sevenmxmd
+8twoonehcnszgqfvxxrqrjctc
+two9nltzxg9nine
+9vlhb4six17zvgkmh
+5threetfdvtthreebgthree
+49ttszscztpm
+8seven6
+three5eighteightlvqll99
+nxkt5zpctfhdjpvtwofbjdsrnnrvjbjtzgmkmrxpjmntc
+11sixfivethree3ninelv
+9gszhbpgfjrzvrzgjfsixd3
+jzxv89two8bjkmqmngkgtwotnmdqeightwonrc
+qxeightwo5hzpdpzzcmmzskjzfmgpftlxkmzgp
+hvfmrxrlslhzkv5
+6pjzbfbmone1
+768gseven9sixseven5
+qmkfslbrcnhtc5two5btgrhbnlx
+sevenonefourkgtd79rzfh4eight
+9fourvmvbxlvlm8threefour
+9sdg8
+8bvrkzfxndjffltghv3blgpzjjckjbqqsqeightqj
+qc3jnmtsmpzzjbczbfive
+sevenfour949qgkqsjtwo8qqpsvzn
+dzlnmhd2rflthreedflj4
+sixseven1
+one6sevenhtpfgpfxfb4vjzhseven2
+twofivefxdc4
+3fourrvffbkkcmxggsevensix3
+djkghxsptqvmztwotwofour13
+4b
+rvgvhpdtwo17xzbxnfjrmfjqxf
+sevenlzsrq6oneightm
+qkxt88twohqzntfcsfournine53
+bmcxgsdjtl2
+74htmkdfg583srrlxbhrjv74
+sixseven6tjtsthqsr
+sqpkddjfvfn2vpncllssfqlzjkcfivetwofour1oneightltn
+6smrndvvbhkzpffzfggvzfznzvmkmglvptfour
+45fttcdmvpl
+862
+xmtmbzrtnptwofour3vknngpgt5
+8fivetwosevenk
+twoseven9mgzxbcgxvm4f5three
+1eight1
+dlone5dvrfrcdmjh
+9cvks8eightscbdmkcs
+qcgxzddpjljmlzgmt5nzxhnsthreeonefivefour
+grvm8kktsfczpkr16stfourone
+9onexmznhhtrjrrffmtwo
+seven4threesix3rghsgxlxv7
+7twothree
+1eight66sevenzbpfpx5nineeight
+tdhnbdm5lklnqprmhfnsfndlmqz
+gzznvrjbkj7lfdjjsqrmkvtfrdxr
+sevenhf2
+eightthreembmlrcnseveneight4vgbgpsvnklbc
+mxf7ddcninesixsix
+rkskdbpjj25djggzzznineqsfftrptseven
+zhklmmknrlvqhvjl1
+two37twosccseven
+2pmdscmvfdb
+2423six
+eight3484oneninevqzdone
+91sixeight
+2five4mcvktqxg
+mkqzbxmqpfouronedtrtvtlh561
+ninetwoqcjdhgfrsllsbnh5lcsixdj
+3thmpnfivefivehvjmdrgpzcdtwo
+sixone3
+qxrpbbq8szvbxzsctwo8b
+9zl4nine
+nfdnss4nineninesdtxhhbttnjv
+7onevxltxxpktcfgb8two
+jjgfive4fiveone8seven
+ndnmqfour87jgxzhxsshrpkccvbkhfjbvdznpkjhsfgpgtwonebjc
+54qdhsixthreeeight4
+five2mrlthreefour5dstcdl9
+2sevenvrxkfkhvrqcgj
+six9one3ninetwo9
+47twoeightonesevenfourseven
+4lxjndxb
+twoninejlhjnmv77sixthreehfmxnrmsbb8
+5phctbfzjttxbmtqxhbhdjzlsbtdqhjcsqhp4onedpmvsqqxhh
+2zxfhnlgfg46twompfpdxq5rkprm
+chfgl5hvrhn3ninetwo1four
+6fiveeighttbcdxzplsthlqrrqpfnljlkh1
+7nnf6seven3gxptj3hpmddeightwofgz
+nine3one7zmjfdxq
+onedlpzjnxnine6nrdm
+8four24sixdtgvs
+8sevenmkclfxbgvzjclfvsppcnnrone
+four9nbhfqvrgzcxcvmrtnp55sevenmzvllfsz3
+qjfdqhhqfm552dqsgpjxzbdpqbcqlgsd
+5kgfvcpm7
+threegvqdkvht1two
+h2vmd
+4nzxftfld
+sevenfive8vjxxgbcktb
+qnnine2seveneightsqcsnx6zpxtkzxx
+hsbjjhb1
+9one2vfpnhjs9ninekqjp3
+eight8ninethree
+34q78ninesixnine
+nine8threefoursixfiveninemvrgmnfive
+2eighttfzsvsfcthreezlspnkjp94vjtgnlvrr
+68pbjk2
+ctxpk65cgvdjvdhh8
+mchjm476rlppfourtwomht5
+dltwofourseven5
+2vmfdspgkt7
+28sixninefive4vmddg5
+2rtcc
+cr4
+5nmhbslxxtmsevenxn
+sevenbzmbtnzpgj8eight
+5qn
+4phjbkmsjvskt42four
+six1four37twoeightnjgrsr9
+eightone4zcszcktgqqlvfspzbbgzz8
+noneightphfdl78ckfkdmlnlktcrp19
+3qfive9
+416ninesevenm8three9
+36thprseven
+ninem1
+sevenbxh6fourtwosix
+7threethree
+kgsnqrpfourqllxjlhmphxzs5threetwokqlqtwoneqv
+dlldzdvl4four7onepmpprcstx59one
+threefhdhmgbs6
+ldsxvtqd2dkkn77
+six224eightone
+xk7fourj6
+sixjhpf59
+1threesvrfvccqpnqzvhkq1
+44five
+one61
+twoqxqlkkrfj7six51sixjfgjbfx
+4bdldfqtb6
+xrftwohszhtkhq9
+threennsixfhtgpvdnnx6kxxcpx3twoone
+grhbqhtl5threesevenkscph
+sevenbrmttfxrlm9kdvmvjgbpz7
+26one4one29two
+fone76nine
+four62
+6eightftkdjhnqdsdpone8five4two
+mpqltxpzqfone1ninekthxjqjf
+vhzvxhtlgvvpfjsj16
+pcqq88lkdjjllthreethree
+zpbzdmfnceight412cxzfxpd
+two78jdxcjxrshsxpxsseven
+1877
+4fivesix
+seven379threegzbz
+eight78jcnzbzzbdrldkf
+dtlleightpqdkdmtrm25rngsjrrpnhmsnnlcc
+fourthreefourfplmfqkqxztllvninenineseven2
+8threefkdfmltrbq
+sevensixmntmdgcbnfsevensixtwothree8
+25twoeightjrp
+sevenseven3onekrbjcdmfbsf
+sz9224xmsrxgj
+jp628
+ncbj7nine6sixfour54six
+zlnpvd24vkstwodphpl22pkvdjxmdc
+9c5two
+fivetwo6531knrdgeightnine
+q7onetwo
+7lbztvgzdsh6sixseven
+sfbbr8ltlpldgft1blxctbzmxfourmbp65
+dkmjpbbbc3nxgdpqfx
+sixfour62zlljntpbnine
+3fourmcb
+8ndvk8vdfqjj1m
+c8vthreesix3twoq
+eight2rseven
+1cmxmkththreeone3eight96qrxttfdzlg
+2blxxsh19cklgghmnjph
+qgxhcrkmthreezdbfpgfgsrdbheightfour7ninetwo
+4sevenninesixf4fivekkkbnjq
+sevenbzxghxrrbjpspmdhzqg7five
+one1sevenkltpqgjseventhree
+6fourtwopfzpng
+8msfjncfjnqpds4rqbdxnine
+kcpvnzv1cbtnpvone
+fivenineeightmthree8
+zqkjeightkzgzbone51
+vxlglkpglqhkjjxlb4
+tzjqjzghthree6
+one1qbhdshmqdkfcn
+pdrqnrxdz5jqjsnhmt4five3seven
+46rvhnvdbmjrzzffivefivesqkg
+oneprjnclrh9
+twoseven78j
+rrllqrpdhcznns9seven
+pjrqzbd7
+978seven8kmlznczcrbplnjvtwobgbrtq
+sjdxrt12qzvnpxqgrfourkfrhlzmsqplxpcqq
+1jfmntl1twolvtwonef
+hd53eightsixgtqdkbjfrvqv9lxgg
+1rtbzrnndthree7fivethljmpzmscgjgpzpkffmrfx
+6rlllxpnp1vgrdxvfqzeight298
+99threebrlkkzsffjlltqtwoeight1two
+7sevenjrjpkphkfhfour
+four5977qzktpnsixncfxzdghj3
+lkptwo856
+7cktjpjbfnplm7pdxrnfknfmfiveglsjr
+1eight5eightmjhqfn
+zskkbkn37k7one
+6fivesevencpmlpngjfvfivesnhst3
+five8cqdzm9
+pfdhzfive9
+5seven6ncmtzrhdthrftmbnkzmfour
+89tkhtdlkg8rjjpfj
+9pghbhntzntninefour
+eight3ninesjc8
+79one1
+45lone2
+fblrgtgdvfour5
+8nine139tsgbqmoneonefgqtbv
+9eightvdpstdhtqfdzhmpspf
+zgjfpjxdqbzvxj9fiveseven6vfntgjkgr5
+threedscrseven911dvgcftsdklfthree
+threetbtlnb3mzlmlgspdmqxt8hsqsckxfkcsix
+3dtctvmnh
+foursix6
+8eight5jtfj
+1lcvtwofive1qxdqmslfbndd
+fourthreersevenseven581
+rgpthree747hgzoneightzs
+fxqdbvtjngr3rpxrzfdgrm
+tsmcsl2one9ninesslscfivenine
+1kg5three94
+8pqdqqddhn81hjjdjfsk
+groneight1one572seven5three
+krgdh94
+3zxgsbgn4
+7vsckhgjvxd3fourgjg
+6lhpsnmtz8lxcgqzjxvjxpbbsmn6rddljdthreecd
+386fivensrl
+one5four487eightfbsblbkthree
+bhkvlqhsqjpseven88five19
+92two6cpz6
+7nvkv8719rznhq55
+12cmfkmvknqqsnjsqv
+fivehgdqqgrcx2xflqmmjnq
+vmpfivexpfjscsrjh6fivetsqngtzllteight
+nine1bkbrsjrxkgtm33
+7one2
+31jdx5seven45
+one721
+3three3xmsxzrfl
+6bjz7shj45two
+zseven6nnftpnxldgtwo1two1
+266hkvrtbflcthreetlbrgdnhkrseven83
+88vmsrsvxvpcvjmfrpssqvcjqdcmxone
+773sbl4
+86ninelxr
+jjbgmdmrfive651fourone
+seven5trjbkhsdxksevenfive1five5
+1seven2drllvgljjt4
+onefkltbmnnpfnqsjtmmkb1
+threeeightthreeonerqzx7
+hrqfpsdxf4
+82five3rptwothree
+57fourthree25jlxqrbdfour
+3mq13zjzzgztqv
+31mdzczk44
+hfdmvpxr925s
+fourfourseventwotwo4twofourddc
+1six5foursixcqtnvmh
+two5sevenlmz9
+1ninexrhcxblntnh881four
+35dlmjrzrzqjgf9
+4six1vx
+fiveseveneightsixtwoone4
+3bxvkznxsqmfxbqsix
+mxkj2six
+sevendggctftjtwoonerjcvonesxn4
+3xslllfzsgk2
+1nine3seven
+1bbeightfour8gsvtv7xzqqgsqt
+sevensixfourhgmxsxndvk3
+6hdkhb5fxzsgfivethree
+nine797msnmphf3two
+snlbgb7
+753five3st15
+3foursevenkjqldcdvreightseven8hcrqmtdkkx
+qdrzr5ggslzvfnfk56eightrdvzmlktj
+nhlkccvhtwokprngjkonelhprvsp62
+zqmdvsxpxccgchmd1hprbqkrbn299
+oneninefive1
+7twofive4sdzj73
+stwofive53
+threejsttgvxrhqmsctksn8oneqfour
+sixfqvfztln51pqlnvvlx6jkcvkmdkjxnbzfdmt
+zzcrjdhbglfrgzxjkb3eightonetvlrnine
+cfdz4frpcbfvsevenpvpfoursppzj
+9four8nineseven5fivemgsqxj
+9onemsdkpvhdbprzbx54two
+bhdsevenrbnfxk6vzldmgzrqdeight
+2pgbh
+2qcq4eight516
+45phskdfcld9gmxbkzdsix6
+sevenmxtwo1sblmbnhxrtzck
+2pfsdqtfkplkqbphrhdoneone4five
+957zktcl2
+41six
+five27zdfqxkkvshsfbjm1txdsf4
+sxsmmzcf3lfrmpsix61threehbdqnvsix
+qppcjbnfj4twofour28fdj4
+one9kxxtd8r
+fcdeightwosixvhktbjjht7five47pxdtnq
+gdkfivezptfjxxqfnxqchjg3jdgvone77
+2twocbzt69rm
+7kx4twonine5
+tlnkgxzcdf57nine
+4tjcdv1
+5kshzgbs1one7fivenine
+gxldrzgctwo2
+8twoninefqmq3dsqxv
+9ninefour27threeseven2seven
+15fctsthreesgdnndsssix1npln9
+2sixnsqkzt16eightnineqg
+zgrskbjbfsixfour9eight58kpdzxm9
+fourthree8fivejgqvdnc
+onebgjjllzp5gvcxjsxmone8ninefivejgghfpvxxf
+4lxgbrqvsb
+86bvrnqqrdmrxdbhtwo9zqnjkvnqkleight
+oneqt88
+onethree1
+twosevenfour1six67four
+29mnfpjthxdvnh
+nlhnine44oneeight4six
+1smpfmdsstqcn58fgb
+tkpd53
+92twoninexkhcvl1
+fkccpninetnvqvdvlkphknh9
+zplfcxsqhbd7rxmvjdtrngzsdrxtwo89
+2gxxckzmgthree
+fpnfttfvmnfone8
+171five
+4bmtr8
+153fournineeightwodq
+zkkddvk7three4sevenv5geight
+512fivefqcmkm1threesixcxdd
+6moneeightfpjone29ppcvf
+37sixgrmmzlslbxnxmrdtczthreexcmtppqlgskrxzssjcln
+dponeight7
+vxfphnfourqzcfxkbsv7rzpmfzrbkm4
+1nsf648
+214twomgvvkktbfrzone
+threeqdzhfxkr1nmxxlzrpvtwo7
+8threefive
+snrcxfcv4
+964rngbmt
+one5kz4
+116nqmtvbcbninefourninetwonenkb
+3cvvzsr
+49ngfjtwo1threebcpg
+pxxjsfmmpsthreeonesixfour2five2
+nvttlcr9sevenxszkjmjzfzqtzznptzqbvtsix8seven
+12sixjpmvfptmjseven9sixzmmkqnrlv
+hskbdlf3
+pbxthreembsnnthree7sixxfnqdcvrzj
+66866eighttwofivesix
+mvgjhxzbtxhpsthree9xx896
+nstdhjsp1threethree85five8
+zceightwojbhlkl4
+2bbdmjvqbmmfourqtkfgnvdq
+lnvrtfplvfseven65
+ccbslkf5fiveonenine
+nine7xfive
+92threefour
+5jssd4pbft4eight6
+stvcgplkppgrdrkjtxstch3svxzmkjf7
+hmfvpctmmg6
+192oneightggr
+18dxpqfcz
+xccgpvhhseven5qflqfourkhsxqdhrbscdmbj
+4jdceightseven46
+ninedjtjsix7
+eighttqcmmkgvhc67
+kt82
+dfnjmgjsmggrvljm8two4
+2gfsveight
+nrtwosixninefour55
+3threesix3six89
+twoseven5hzqsgdvmphnlppt1kjxcvpfsoneone
+4fivethreeone18five6
+l8pone5jtfgxffgfrone7
+5zmjgtp2pfshdlonetdflhrz7
+5twonepp
+eight46pmncqjdnkbz
+7ngmcqsevengzeightvthllqpxbfjgkc5
+lvscttxkct7eightsdkxgffxfhhpdppbgtzbf9fiveone
+352threedzpjvtq7onetwonefg
+31eight
+6zbhrsnzsixxmjvsnfsixnine
+tbgdjscgtkn8pdtld
+643nbsntbjmbninezfbnkggfivefour
+vxnsvnine5seventhree2mksgsjbpkqdgbs
+2xchcfiveeightrnldvblbfqnmvmn
+5kbpnbtpnzbeight9
+three2eightseven
+sszgqcvtmlcmd95six1jmsnfmfmlktdvtskrp
+xlmthreemdrvgzfnseven3
+ntwoncnpdjg8
+sevenfivethree968
+four6twooneonejmxgtzz6three
+893jfmmnk6lmhqmtxgkmtxq8
+pvconeight3dmprrnmj2cpqmgmvkqtqcn71
+five688seven
+67six
+54xcthreenlhthreeone7
+6bkt4hlhg7
+kvxpgcnqkhkhxthreerxkxt9cgcnvcvkxdddsdfjrqmn
+4sixseventstk3
+qmoneightnine583crcfeight4eight
+7sevendxpckzsm885
+seven7threesllgfvccbglbscdg
+ninefbnnpvxcmjpjrts3eightzsqmxxkkgg6
+nxhmxngoneqqqxlbqfcr5pkpthcdxtx
+threeseven5twocdzkpp
+35sixgtqzsnjh6three
+sixrbrdblgj2prpsgnl9686
+2seven2
+cdh3
+sixtsfive8pdfivetwonegg
+ccsbzxsevenoneeight76
+jbfkngpjlvbtwofiveone1pdphmps
+beightdcrtnchtnine6fourthree
+sixsxzonenvvkljfthreezhp37
+seventwovd17
+hmfs69one2xeightfive
+3sbhjfkjtnlrzqrcrbkbcxzcmsm69nine
+njdkcdprjgpn9fs
+bg56ts
+one542onetwo
+ninernsbhqzqc6one4sixgsdcfsix
+2onethree24onetwo
+8sixmclpsdvvgs6eight7lnzhsgzjxdsn
+one5onefour
+c1fournine
+nbqbgxdtwo8fourxrgszvbxqtwo2
+9nineffsevennine3seven3fnvsxmvrk
+tsp5
+oneseven9threesixgjnkv
+fourtwo4two3hfnpzhvcx5
+15eightsthhfgsjtqcbxvxqj
+jdvssqjd9scqnlsfive2two
+three9sevenzdgpjqkzh7four
+8th632onezhfcv8
+7sixlcxnhdmphbbbpsxrb1oneprx
+four4eightnine
+gxbsix7pqkseven
+4teightx3five6eight
+sevenzrzm72mrgcxld
+7foureightthreesixqcddc7smksqzxhqs
+hpcpqbhsfivesixninembvbpqphhmrtthree9
+ninexzgctccxbgjxvtngxfvkthree8
+fdmvqcktrjh8fiveglzhchx55khhntcbndddtjccsx
+8fivenine
+mxsbjjcbpceight18
+vjvddlttpsgbvf99
+5five3
+jrbxmzk46threemmsnhflsqfsfkf2
+gzbpgvmrqninethreedhldl1slvnrhr
+nineptdnkjgtsx9
+3bmjnr3eight3
+8ztrxrxrkc2bseven3five2
+six8one5eightrhmmxmhfour
+9fourkdcff9xtnhcrjconevvhplone
+five94vkxzcqone8zxn
+7threeseventwoqzcnrslbp
+gtcbsmt52
+8nvdtsc8pxqttwoone2
+prlgthreesix1sspdmqsg
+vmppqvn1nfpmmzrfzfbfcvzpjjeight
+27sixhpg1fivefxfjxtpggzlqdgnv
+7sfjbc5qtqgjvf
+7twotwovpnine
+cmjkmgszxcc37hfjnpqpbjqseven4
+stt6ninermjlgqnjhghsevenqgg2
+4onejfppfcnkrceight
+five6kmzzltwo
+524clmmrmntxrninetwoztseven
+4ll
+fnppsrt9
+seven1sddcbgrcl
+72ninejksevenseven6fournine
+threesixpjnheight5rsfkhqchmvqrjck
+eight45mnhmkqfourhmxcpvjgnpg
+3pxrhxkcdonemrcvhv
+one97dszxfbmx2
+7pdsrzllzfour1twothreeglkpnckq96
+seventwo18czcxpjmtms4six1
+bfeight3zjdp1
+ndrvltwotbcvzffzml9
+nhfq4two
+8mck8oneonesevenone
+zdvkq54
+mxfvps1fiveonejvjsnsix4
+skqrqdrphp89rnflzcpnrd
+eight382km5
+fourfive87785
+fournbg5sixnine
+8fivebzknsixdqtcgbxmfhonerqzlnqs
+24six3nbjrjfhnbz8seven
+sr9ninetwoztcmhhdone
+nine6nineblrlmsevencrchhjvlrsevenfive
+1frvmqxkfphpqmvbftffxx5seventqsvninefour
+8fivesixeightnqqdxgjprjqvb6
+xkqtnxx5mmdqdcps
+96dpbz25sixffzxftthree
+88sixvxdhqllvsf146three
+51eightnczdonebgfrqjp
+eightthreekgdgjlgtkfour242pjjsllpq
+ninekxtfournzgqf3djxzgxsixjv4
+84msnmkzxtszrkoneeightsix1gzp
+two49sixtwo7cldmnrqrtwo
+88seveneightgtqmdtjss
+threebzqjcthree1ngmsnine6one
+rtvzqfour5oneightkm
+tfjgntbmhpdvkb6
+fiveeightsix3one
+tjgkznfourzmbzcsfjvlqhchq1ggtqtftwo1
+3nmzhvrmpfive
+2threeonedhpldxrclssrmvhgczkztwothreeeight
+lldsseven25
+grv2ninezhpsfoureight7
+five3tdkmkshsqfour
+two6tfxtmzxffive7flkpkxvssltftxqhvqr
+2mnlpmb4fourpjrvpddtl5fourseven
+xjrvkqjmsdcpnbzf25fbbbxone
+lrvdxjv2eightvhgzp4ngctthreejrclhcvjvqjzqg
+1mhxb61onekpzfjzm2nine
+bkjoneight88fiveeightthree
+eightsix1tmg4fiveshvjxxpvqhnhc4
+9rhbrqnghqzlsfmgfxdvfive98
+9six2threerc9sixfive
+19two33kdqdtqspcqhbcbf
+qdvzs7t
+3fbzdmtpqktbqhgkone4
+nine4threelzxvqztwo9threerpfbhrqm
+858
+1csgrrbrmdseven97vqzlngxksvltzvtlv
+dql7gfvx37six
+onekkpxclxgff7vdz
+71three7eightqtxvjjdsjp
+znnzvrttr8927
+1rmpcjj
+tbeightgkjhr684
+2vzkdvtrrvninetwo4ctv3hmdqjbone
+5v998six2vqkb
+2four7four
+7vxlfive3dccj
+91five6ckcshgrxkrgztmv
+886v22
+3vqjkkhdbjccffourone
+lb4nine8seven6five
+658twokxmjfbrj
+2onevtdmdnvkqpctx15seven4
+vcbheighttwopmkzsftone7bsfds7
+zcgfive2one8lfbmqg9
+ninesevensevenrqbtzzh96
+1threehsqptqjhkkndxpd44gzbdlmcxq
+sevenvxdprjvkh92xzonecmkljhbcnzzfkgjpz
+five8eight8zrrkrvbjzcqbtwoeightwogvd
+2mdnmbdvzxfldn1eight
+tmbmzsbljreight515
+rqbtxhtwoeight71seventhree
+gszsxrb7qvmkb7478
+ceightwo9cj5seven
+89eight9two
+5sixjpcxjrrnjdthree
+two1r38onesix
+6eight9l6sevenzjcht
+fivecqkzbllhshphlseven4ftfivevl3
+69kbqvdronehhczgmvh23
+sfour1lgv
+4kvpgtmsix
+4vtdk3
+7vfsvrlnlpqmvmhfnp85sevenqlztpt
+74cfpxpxrzfour3fivenine
+sixsixone8eightxl
+gjneightwofive3
+6twoned
+jct8343
+kcbqqpv4gqqhvmtcpvhpcngonetwo
+sixtwooneonefivef9lkgfr4
+twotwosixtwo3mltrqnj1
+3onezgftz
+14ngxgtbfivefour97eight
+2bhgf268fivefiveone
+znoneight82lbghbsdktoneoneeight
+53dqlrxmb842
+1mj1ninefivesszgqp4qk
+7eight2qslhpns
+gpqcpfgfpbnjpdf2
+threettgjpbspfive948zksmone
+tlgkjbrkzn577fourvzrrndxdst174
+szsix9hqhtwo
+4fivethreermvhkpnrs1zqpsh4eight
+one1gtnpmsevenone
+one65tvrldjxngeightxndfptwo
+58xlbvgg7
+bhoneightsevenseventwo9threecmlkhdj5nine
+fourfour4
+68mvkpvpfmkg4qshqmccprone4
+5foursixmf8fourfour
+lfflvxbfivepmlfvfxeightninefouronebn5
+eightjvmbbmpfxs9pxgk98twofive8
+msnrmphszone2vpjscthree
+fivesevenonetwovbkddshc9
+279two1onefrh3five
+sevengxfive3six3
+16pmtwo7six
+qdkrjhjcjl17sbfn
+321one88onejvjtfour
+4csnrskq
+sevenone39five
+23vnmrdxh7threefour
+77srhjdccjnineseven4gll
+vrltwonevxqdrgmpm519fiveseven3
+8zkqjrtrfbgthree
+6dmrhjgxeightseven
+seven6sevenhh
+nine64slonetwotsxqbptkrseven6
+3sfpsix
+sevencmmnnzltcpvptnineqmklpttgvcntqzrpxct11
+3vbxntfnsfivebjkpdfourseven9
+9fivefourhghdlxvgonelcrfcqgpq49rcchgq
+vjfsgrqhmxjp62
+gqdbm4
+4ninebvvmfdsix
+two72fivethreethree7
+194fivefkdk1
+gznjfrsevencvbgqptndceight15lghxgvslpsix
+two1nljqmcptdxjdkvb7
+9seven21sixnine
+vsxgdsgxsdlq23fourvhfbbtjsfhfive9hkbbqzeightwotps
+3eight417bkbmvgeight
+mq25
+8fhvm9twothreeeightsixfiveblqr
+ddhnrb9sixh1
+nineninedrnchvbcf3cpl7
+434
+rttj6
+dcvgdcdtwo19four
+8sixsxshbhmnz7three33six
+xrvj7eight421sb
+7six8npgxsix4four
+2three9
+lfqgpkbmc69eight
+6211gkfbvllqtwofourfive
+onexfcmsnine53
+xml4vkfgtbqbckknbjhxcgdgqdtv
+3bzknzmshp4
+five342vdtmgseven61
+2kfcmblfxb2four
+sixeight5threethreenndhpvhrshgfsfourpkbghd
+rmz4seven3psixninesevenone
+5289
+vrxdlcf937
+2zpclqftm8
+fivefivefourfour56two
+seven7eight1vtwo3cjhone
+8threethree7six75
+ldkjshplmb8threefiven65slmqlrzgb
+2nblpgthqfeightp
+mone93
+fourfive43four
+1gghztjzh
+seventwo18fourfkhjmzpeight
+gbonecfgmrrsrcfiveblxhkcfzcbbfpnn76
+92ninefourseven
+2kl
+9sevensixsixpsqzzndbdf8twosevengjddm
+three25frjhjfour23mhvzgcxgddfive
+blhbrztvhlhglcrsbfour7five3fdxhdxpvz
+qvgkfmtxhd9
+seven4mqt
+6fzcfcngzfivesix43
+mjtwoneghtth569sckx53
+seven75gkvvrp
+five1onethreeeight4522
+vjkeightwofive1vspseven
+14ljczbshdpeightseven
+3mpk7fourgrqsqnrj1
+rnlvpksckvbmzfqhvpxxmm6djmtwofourmjfnvh6
+1six7tghttbfsevenv6four
+1nineeight5
+twogxd2three
+tvrnxjhg8413
+7zpth44mfpcdcsixcppfxsthreeqnzgpp
+67seveneightnine
+bdkddcsrv3nine7
+xlftwonetwo4rkt
+khqtwo2tglvmvmfdhthree12three
+twosevennsflmtwo938bsf
+8zrgsnr
+sixhdnslspbrcsdvxnnk7kjlzxrrlk7bbrjxbxlq
+sixseven4572
+rnvkjlz51drqdddlg7clhndmlxnf
+kvflkmsseven4xhgpdbfour55
+74sixdcqzj
+seventhree35fivetone
+72sixonefiveeight6six
+ghrzthqfhsp6five
+5seven76thprmblnxqbgdcds
+925
+one11
+ninetwonine7ninetwonend
+vntwonefive2
+h2eightninetnjhvfive
+2eightvkrkdjbkxbpsznzd
+4psixfseven723
+vctwonepthree49
+xmqvn1jpbjx1sixxznflzk66
+trkkpm881zqkdfvcnhsevenzhnseven
+fourtwo5clj2
+2xzrclndckseven24f4
+eight62
+twoshpjzqcf7
+twohbkkrzvpxeighttczsls4six5nineeight
+twoeight122gfhfpzhktffour
+3htbjtzg8tsztldj
+sixtkbcccqqvmzfprjngxnbrxfk9t
+267seven
+qfqbpzjfour1djfd5zxncnfnfqqpc
+qqb5threevtpktwosjjpzxnntwo
+fiveseven5rtcnine
+xrrcbzrtjgsqkjlnhxt5fivetwoeight
+sixgddsix7
+zdsnznxmrbljz7lvdvx74
+qbfvpnxsix3four1lfone
+9one9pjtnncsqzhcszp5
diff --git a/2023/_input/day_02.txt b/2023/_input/day_02.txt
new file mode 100644
index 0000000..876d2a0
--- /dev/null
+++ b/2023/_input/day_02.txt
@@ -0,0 +1,100 @@
+Game 1: 12 blue; 2 green, 13 blue, 19 red; 13 red, 3 green, 14 blue
+Game 2: 12 blue, 1 red, 1 green; 1 red, 12 blue, 3 green; 5 green, 1 red, 9 blue; 1 red, 7 blue, 4 green
+Game 3: 1 red; 12 blue, 15 red; 1 green, 10 red, 2 blue; 1 green, 3 red, 9 blue
+Game 4: 6 blue, 5 green; 2 blue, 6 green, 6 red; 11 blue, 5 red; 6 green, 11 red, 7 blue; 4 green, 10 red; 1 green, 7 red, 13 blue
+Game 5: 10 green, 1 red, 2 blue; 3 red, 4 green, 4 blue; 5 green, 5 red
+Game 6: 1 green, 6 blue, 14 red; 9 blue, 5 red; 14 red, 12 blue
+Game 7: 1 green, 9 red, 8 blue; 9 blue, 1 green, 6 red; 1 green, 15 blue, 19 red
+Game 8: 9 red, 7 green, 2 blue; 6 red, 17 green; 18 red, 16 green, 2 blue; 10 red, 14 green
+Game 9: 1 blue, 11 red, 9 green; 8 red, 1 blue, 9 green; 4 blue, 16 red, 9 green; 8 green, 3 blue, 6 red; 8 green, 11 red, 3 blue; 11 red, 2 blue
+Game 10: 8 green, 14 blue; 1 red, 6 blue, 9 green; 6 blue, 4 green, 1 red; 16 green, 9 blue
+Game 11: 6 green, 11 blue, 1 red; 10 green, 1 red; 7 blue, 2 green, 1 red
+Game 12: 3 green, 5 blue, 2 red; 14 blue, 16 green, 4 red; 8 green, 14 blue, 4 red
+Game 13: 5 red, 12 blue, 2 green; 2 green, 1 red, 9 blue; 1 red, 2 blue, 3 green; 3 green, 3 red, 7 blue; 2 red, 13 blue; 1 red, 10 blue, 2 green
+Game 14: 5 blue, 1 red, 2 green; 8 blue, 1 green, 1 red; 1 blue, 2 green
+Game 15: 14 blue, 9 green, 1 red; 2 red, 15 blue, 12 green; 1 blue, 2 green, 1 red; 1 red, 16 green, 15 blue; 1 red, 12 green, 8 blue; 1 red, 17 blue
+Game 16: 7 red, 1 green, 18 blue; 7 blue, 5 green, 17 red; 14 blue, 8 red, 6 green
+Game 17: 4 green, 5 blue; 5 green, 1 red, 7 blue; 3 green, 6 blue, 4 red; 2 green, 5 blue; 9 green, 6 red, 6 blue
+Game 18: 8 red, 6 blue; 4 blue, 19 red; 4 blue, 9 red; 9 blue, 10 red; 2 green, 9 blue, 13 red; 3 blue, 7 red
+Game 19: 8 green, 2 red, 17 blue; 11 blue, 4 red, 5 green; 8 blue, 8 green, 10 red; 9 green, 4 blue, 2 red; 4 green, 10 red, 6 blue
+Game 20: 9 green, 3 blue, 1 red; 5 blue, 16 green, 3 red; 3 green, 3 red; 2 blue, 1 red, 5 green
+Game 21: 7 green, 1 red, 10 blue; 7 green, 5 blue, 7 red; 7 green, 9 blue
+Game 22: 5 red, 2 blue, 9 green; 6 red, 11 green; 6 green, 6 red
+Game 23: 14 red, 2 blue, 9 green; 9 green, 1 blue, 4 red; 9 red, 1 green, 1 blue; 6 green; 3 blue, 1 green, 9 red; 1 blue, 2 red
+Game 24: 3 red, 7 green, 6 blue; 1 green, 5 blue; 6 blue, 1 red, 2 green; 5 red, 1 blue, 4 green; 6 red, 2 blue, 11 green; 2 green, 2 red, 1 blue
+Game 25: 5 green, 1 red, 3 blue; 3 blue, 6 green, 3 red; 3 red, 4 green, 1 blue; 6 green, 1 blue, 9 red; 2 blue, 2 red, 1 green
+Game 26: 3 green, 4 red, 12 blue; 2 red, 1 green, 15 blue; 7 red, 16 green, 4 blue; 11 blue, 11 green, 3 red; 8 green, 15 blue, 10 red
+Game 27: 9 red; 10 red, 2 blue; 3 red; 8 red, 1 green, 2 blue; 1 red, 2 blue; 1 blue, 4 red
+Game 28: 5 blue, 8 red, 5 green; 10 blue, 4 red, 5 green; 8 red, 14 blue, 10 green; 10 blue, 4 red, 1 green; 5 red, 17 green, 4 blue
+Game 29: 16 green, 11 red, 5 blue; 11 red, 14 blue, 13 green; 13 blue, 8 green; 3 red, 18 green, 15 blue
+Game 30: 2 red, 4 blue, 8 green; 6 green, 2 red, 2 blue; 6 green, 6 blue, 2 red
+Game 31: 2 red, 1 blue, 16 green; 10 green, 1 blue, 7 red; 1 blue, 14 green, 7 red; 2 blue, 1 green, 1 red; 6 red, 13 green; 2 blue, 6 red, 10 green
+Game 32: 4 green, 4 blue; 1 green, 5 red; 6 green, 1 red; 3 green, 5 red, 2 blue; 4 red, 1 blue, 4 green; 6 green, 2 blue, 6 red
+Game 33: 5 blue, 2 red, 1 green; 5 blue; 1 blue, 1 green, 10 red; 8 red, 3 blue, 1 green
+Game 34: 15 blue, 7 green; 12 green, 17 blue; 10 blue, 11 green; 1 red, 5 blue, 9 green; 2 red, 10 blue, 11 green
+Game 35: 2 red, 6 blue; 2 red, 5 blue, 4 green; 2 red, 8 green, 10 blue
+Game 36: 4 red, 9 green, 3 blue; 4 red, 6 green; 6 red; 11 red, 4 green
+Game 37: 3 blue, 12 green, 14 red; 3 red, 5 green, 7 blue; 2 blue, 2 green, 16 red
+Game 38: 17 blue, 16 red, 8 green; 4 green, 17 blue, 4 red; 8 red, 7 blue, 6 green; 2 blue, 9 green, 17 red; 10 blue, 8 green, 11 red
+Game 39: 10 blue, 1 red, 4 green; 4 green, 4 red, 6 blue; 11 blue
+Game 40: 5 green, 17 blue; 11 blue, 4 green, 7 red; 2 green, 6 red, 13 blue; 7 blue, 12 green, 16 red; 15 red, 3 green, 8 blue; 12 green, 3 blue, 12 red
+Game 41: 13 blue, 3 red, 1 green; 2 green, 10 red; 1 blue, 5 red, 3 green; 5 green, 16 blue; 9 blue, 2 green; 14 blue, 4 green, 5 red
+Game 42: 2 blue, 15 green, 3 red; 3 red, 17 green; 6 red, 1 blue, 8 green
+Game 43: 8 green, 9 red, 3 blue; 1 blue, 13 red; 5 red, 1 blue, 6 green; 2 red, 2 blue; 17 red, 2 blue, 6 green
+Game 44: 10 red, 3 blue; 10 blue, 5 green; 4 red, 4 blue, 1 green; 16 blue, 6 red, 7 green; 3 green, 12 blue
+Game 45: 12 blue, 2 red; 2 blue, 3 red, 2 green; 8 blue, 3 green; 4 green, 8 blue, 5 red; 3 red, 2 blue, 1 green; 1 red, 2 blue, 7 green
+Game 46: 1 blue, 11 red, 6 green; 2 blue, 11 red, 6 green; 8 red, 5 green
+Game 47: 2 blue, 9 red; 1 green, 5 blue; 10 red, 2 blue, 2 green; 10 red, 3 green, 3 blue; 3 red, 6 blue, 2 green; 1 red, 1 green, 5 blue
+Game 48: 1 red, 7 green; 1 blue, 10 green, 5 red; 4 red, 8 green; 10 red, 10 green; 2 red, 16 green; 11 red, 14 green, 1 blue
+Game 49: 1 red, 1 blue, 5 green; 6 green, 5 red; 3 blue, 4 red, 3 green; 3 red, 5 green, 2 blue; 3 blue, 3 red
+Game 50: 17 red, 1 green, 7 blue; 4 blue, 1 red, 5 green; 10 red, 13 blue; 17 red
+Game 51: 2 red, 1 green; 1 green, 10 blue, 2 red; 5 red, 1 green, 7 blue; 7 blue, 1 red; 9 blue, 5 red, 2 green
+Game 52: 8 green, 1 blue; 14 green, 1 red; 10 green, 1 red
+Game 53: 17 green, 6 blue; 17 blue, 9 green; 1 red, 12 blue
+Game 54: 4 blue, 7 red, 9 green; 7 red, 2 green; 14 green, 10 red, 3 blue; 9 green, 6 blue, 5 red; 2 blue, 3 green, 11 red
+Game 55: 11 green, 4 red; 14 green; 3 red, 3 green; 3 green, 4 red, 1 blue; 15 green, 6 red, 2 blue; 4 red, 3 blue, 15 green
+Game 56: 8 blue, 5 red, 9 green; 11 green, 5 blue, 6 red; 1 green, 1 blue, 7 red; 7 green, 4 red, 1 blue; 9 blue, 5 red, 1 green; 5 red, 2 blue
+Game 57: 11 green, 19 blue, 5 red; 15 green, 5 red, 18 blue; 16 green, 5 red, 10 blue; 19 blue, 3 red; 9 green, 8 blue
+Game 58: 4 blue, 12 green; 11 green, 4 blue; 6 blue, 6 green; 1 red, 2 green; 11 green, 3 blue; 13 blue, 6 green
+Game 59: 10 blue, 1 red; 1 green, 4 blue; 4 blue
+Game 60: 7 red, 2 green, 6 blue; 1 green, 13 red, 12 blue; 9 blue, 9 green, 8 red
+Game 61: 7 green, 3 red, 2 blue; 1 red, 1 blue; 5 green, 3 blue; 4 blue, 1 red, 4 green
+Game 62: 1 green, 8 blue, 6 red; 7 blue, 3 red, 12 green; 2 blue, 7 red, 6 green
+Game 63: 3 red, 2 green; 3 green, 4 blue, 9 red; 3 blue, 3 green, 16 red; 4 red, 1 blue
+Game 64: 10 red, 2 green, 15 blue; 4 red, 14 green; 6 red, 14 green, 2 blue
+Game 65: 11 red, 14 green, 5 blue; 7 blue, 14 green, 15 red; 1 blue, 14 green; 4 green, 4 blue, 7 red
+Game 66: 6 blue, 9 green, 6 red; 6 blue, 2 red, 4 green; 3 blue; 8 blue, 5 green, 8 red; 17 blue, 11 green; 12 green, 11 blue, 4 red
+Game 67: 8 red, 4 blue, 6 green; 4 blue, 8 red, 2 green; 1 green, 6 red, 2 blue; 10 red, 1 green, 2 blue; 1 blue, 5 red; 2 red, 1 green, 2 blue
+Game 68: 10 green, 9 red, 13 blue; 2 blue, 2 green, 4 red; 11 red, 13 blue; 4 green, 2 red, 8 blue
+Game 69: 16 red; 12 red, 1 green, 4 blue; 1 green, 14 red, 9 blue; 12 blue, 2 green, 13 red; 14 red, 2 green, 10 blue; 11 blue
+Game 70: 1 red, 19 green; 4 blue, 6 green; 12 green, 2 red
+Game 71: 9 green, 2 blue, 3 red; 5 red; 1 red, 1 blue, 5 green
+Game 72: 1 green, 19 red; 12 red, 1 green, 1 blue; 16 red, 6 blue; 14 red, 7 blue; 11 blue, 1 green, 13 red; 16 blue, 4 red
+Game 73: 1 green, 1 red, 2 blue; 8 green, 2 red, 4 blue; 7 blue, 7 green, 7 red
+Game 74: 1 blue, 1 green; 1 red; 1 red, 5 blue, 4 green; 2 blue, 1 red; 1 blue
+Game 75: 8 green, 1 red; 3 blue, 1 red, 5 green; 12 green
+Game 76: 8 green, 6 red, 2 blue; 7 red, 1 blue; 2 blue, 9 green, 1 red; 8 red, 13 green; 12 green, 2 red; 7 green, 5 red
+Game 77: 3 blue, 1 green, 10 red; 13 red; 1 blue, 13 red, 1 green
+Game 78: 2 red, 3 green, 14 blue; 3 red, 16 blue, 6 green; 3 blue, 3 red, 9 green; 4 blue, 11 green; 6 green, 2 blue; 2 red, 10 green, 11 blue
+Game 79: 5 green, 10 blue, 2 red; 16 green, 15 blue, 1 red; 1 red, 11 green; 1 red, 11 blue, 16 green; 7 blue, 18 green
+Game 80: 9 blue, 10 green; 13 green, 9 blue; 1 red, 5 green, 5 blue; 13 green, 5 blue, 1 red
+Game 81: 9 green, 15 red, 11 blue; 11 blue, 9 red, 5 green; 2 green, 11 blue, 19 red; 14 green, 15 red, 5 blue
+Game 82: 4 green, 6 red, 13 blue; 5 blue, 5 red, 4 green; 2 green, 7 blue
+Game 83: 12 blue, 8 red; 6 red, 1 blue, 1 green; 7 red, 1 green, 1 blue; 6 red, 1 green, 9 blue; 10 blue, 3 red; 1 red, 5 blue
+Game 84: 9 blue, 13 red; 8 blue, 1 green; 9 blue, 1 green; 3 blue, 5 red, 1 green
+Game 85: 14 green, 5 blue, 8 red; 1 blue, 5 green, 1 red; 10 red, 7 blue, 17 green; 3 blue, 6 green; 6 red, 5 blue, 4 green; 5 blue, 4 green, 6 red
+Game 86: 14 red; 20 red, 3 blue; 1 green, 12 blue, 15 red; 16 red, 13 blue; 13 red, 12 blue; 2 blue, 20 red
+Game 87: 2 blue, 2 red, 10 green; 8 green, 9 red, 1 blue; 11 red, 1 green, 4 blue; 13 red, 1 blue; 11 green, 16 red, 3 blue
+Game 88: 5 green, 4 red, 1 blue; 3 blue, 8 red, 10 green; 11 green, 7 red, 4 blue; 11 green, 5 blue, 4 red; 9 red, 9 green; 4 blue, 6 green, 9 red
+Game 89: 2 blue, 2 red, 5 green; 2 red, 2 blue, 3 green; 2 red, 1 blue, 7 green; 6 green, 1 red, 2 blue
+Game 90: 4 green, 1 blue, 5 red; 2 blue, 2 red, 10 green; 2 green, 8 red, 1 blue; 10 green, 5 red; 2 red, 3 green, 2 blue
+Game 91: 16 blue, 5 red, 15 green; 4 green, 7 red, 3 blue; 4 red, 8 green, 12 blue; 4 green, 8 red, 17 blue
+Game 92: 13 red, 2 blue, 12 green; 19 green, 7 red; 17 green, 2 blue, 3 red; 6 blue, 11 red, 10 green; 6 red, 15 green, 3 blue; 6 blue, 20 green, 11 red
+Game 93: 2 blue, 3 green; 1 blue, 4 red; 1 red
+Game 94: 3 red, 5 green, 6 blue; 7 blue, 5 green, 6 red; 9 blue, 1 green, 2 red; 4 blue, 1 green, 4 red
+Game 95: 8 green, 9 red, 2 blue; 7 green, 7 red; 2 green, 4 blue, 6 red; 6 blue, 2 red, 2 green
+Game 96: 11 blue, 4 red; 1 green, 3 red, 14 blue; 2 green, 3 red, 8 blue; 7 red, 1 green, 3 blue; 8 blue, 6 red, 2 green; 9 blue, 3 red, 3 green
+Game 97: 5 green, 13 red, 7 blue; 2 blue, 12 red, 6 green; 10 blue, 11 red, 3 green; 4 green, 11 blue, 15 red; 8 green, 16 blue, 1 red; 15 blue, 4 red, 5 green
+Game 98: 3 blue, 1 red; 4 blue; 2 green, 1 blue; 2 green, 1 red, 5 blue
+Game 99: 4 green, 3 blue, 9 red; 6 blue, 5 red, 3 green; 2 green, 4 blue, 7 red; 8 red, 4 blue; 2 green, 15 red; 4 red, 5 blue, 3 green
+Game 100: 8 red, 4 blue, 4 green; 10 blue, 3 red, 4 green; 10 green, 4 red; 18 red, 9 blue, 2 green; 12 red, 4 green, 2 blue
diff --git a/2023/_input/day_03.txt b/2023/_input/day_03.txt
new file mode 100644
index 0000000..eb744d3
--- /dev/null
+++ b/2023/_input/day_03.txt
@@ -0,0 +1,140 @@
+416.........................559...............417...............785.......900.......284...........503...796....992..........................
+.........702*....772............378..569.........&.49..606...14*..............$.453*.........307....*......$.....-.................995......
+.....................458...856......+.........+....&..............680.......104.............%....516.................................*......
+...........822..174..*.....&...........711.746.......&............$....../.............656....#...........265=......634.*.............430...
+..827.137..*...*....39................*..............856..............767........522......$..773....619..............*...287....501.........
+..........726...511.............*.....320........476...............................*................%...899....72..731...........%....$.....
+.....861..............232....223.933...............*.@........424*618.858.......................................$.......338.205........535..
+.......#.............-....................676...713...427.................-.......615.........126...................=..*.......*...&........
+....40..........996..............520.974.*..........#......*.566........907......................&...214...996*911.115.363..960..897........
+....+.............*....................$..172.....559...763.....*............554......*.............*.......................................
+.......527...#.....90.+....66.................................890..............=...802.93.131..791...209......&........928......303....$....
+950.....*....773......105..............725........................................................%............886.......*........$.384.....
+........383......741..............@..=....#.....179.18..%974..........624.......64.266.................701...........%..671.721.........942.
+..................*.............914..548..........+.*.................*...........*...................*.........834.394.....*...............
+.......502*80..960........................25........464.........831.846........25.........329..985...458.+.....&................377..659....
+..........................................*.....292...............*............/..................@......350........938............*....$...
+...738..............428......+.......311...742.........236*631....816.&......+....86.........81.......................*.973*341.266.........
+......*.....673......*......614.........*.......689.48.................450...816.....754...........258..@585.......154..............@.......
+...231.....#.........681...........855...775..........*.....=..257...................................*.............................469..=682
+........#...................807...&.............418.19.....259....*459..906...185.356.......778.......230....................556............
+.......924.........459......*..............804.=.........................*...*...........&....*................=........836..+......618.....
+.....=............#.......900........+...........702..383........%..*...250..503.......637.808.......97/....@...370.......&........#.....710
+..988........685............../663.273...........*...@..........16.251...........$..............*..........964.......658.....537........*...
+...............*......171*......................714.....543............737.....372.............941.............113..*....=.......853....733.
+............470..161......508.....56...170.............$...................389.....544.....208.....98.........%.....617...884......-..@.....
+.766.591............../.........-......*.......210.........618......*874....-.........#...*....129.=..194......../...................992....
+....../....170@..140+..753....918....467.854....*................989..........979...............*.............-.907...276...931*618.........
+..700............................................801....929..859.....#..........*.............594.493......981..........*...................
+....+............173..............................................251........629..........970........*................136.........388...*...
+......721.......$......911....766..................541.234....=...........47......614....@.....*217..885.680.742....................#..84...
+.377*....*81.............*.......&...937...........+...*....155..@......*............*......648............&...*.....&401......493..........
+.....1.................533............*..399...........861......951..709.331..126.....876.....................289.........@.....*.......*...
+..........107....452-......594.888.431....*..+660...........79................................$......275*876.......978.....594..400...39....
+.........+................*....*.........925..........$.......*........599.......228..........60....................+....#..................
+...283...................177...708...........642....661........294........*............................288*793.867.....482.479.769....73....
+...........617..855*...&.............605................783.91.........847................&...../...............*..#..........*.......+.....
+.672..303+...*........967...............*453.....884@......*...208.949........*..........986.....249.....352..818.596.56....................
+...*..........88...............569.....................975.....*.....*..638....619.......................+.............*.......*.......462..
+....500.....=...................*.................*205..*..-...228.508....&........................395..............845.....683.365....*....
+........197.672.841..............214.=...847...912.....24.349...................%....584.257............152.................................
+.626....-..........*..447............714....&.....................463....287...360........*............*...............*.................717
+..........53......334...*........................*167......................*.......................554..246...........295.396......./.......
+.......24..............92...........897.......220...........................930..703...414.....711..*.........723.........*....117...146....
+.......&...........548.....324.21......................622.........820.404...............*....../..139......&......*.......578...*..........
+.....*......204......*..........*.............226...........663.......*......555.992.....502...........631..49.#....366........677..........
+..958.350.....*......44...694...449..-39........*...........-...786.........*......*............................140.........................
+...............477.........*...................815..............*..........815.................521....................&...273........103....
+.........828............781....464..................276......646....665-............924..........*.......955........759.........934...#.....
+........*..........*..........*..........15.193.......*.....................&.................808....347*......963........*....+............
+.........810.....360........638...434.....*....*751....812.....573...........85.........+.........95.......892...*...153...220..........187.
+....714*....................................................80*....162=.................214...........842...&...39..........................
+........265.........................51.......285$.......................586.......=.................................*.....*..............948
+..989..........22.=......374.......%....................142.......736..@.....507.636.797.....273.........872.....567.978..334.....382...*...
+..........@.......68..=......................116.130.......%.250../......-...=........*.........*486.415..........................*....813..
+.......505............61..140..........435..........*691......*........852..........571....408..............12......80.......228...109......
+.........................*.........207...*..24................402.=...........................@....................../...162................
+....285.................672.552........492....$./..................3..620.391...............................179............*................
+...*..........159...428.......*.................390.111.........$.....*...*..................348.355.481.......&.210..99...41...............
+...52......12..@..........808.810.897...................663..280....57..............476.............*............*.....*........208=........
+..........*...............*.........@.286..................*...........................*..........................905.296..............148..
+.......298......119.....172.................622$..637................#......342.......679.111......-968..104*478............#.......*.......
+.../.............*........../......................*..............658..........*718..........*136.....................503.899....889.498....
+....691........341.262..36.549...........386........437.............................662...........848............#......*...................
+.......................*..........936...*...............................-...........*......516....%......358....707..535...........841......
+......$..............639............*..798.../..67%............137...716.......313.247......................-............@.....371..........
+....433.677..605.267................1.......930........478........*........565*................................869.......372..@....228......
+...........@..*..$...794.........................74.......#./......833.348.......................................+................*.........
+......865...............*.........................*..........839.....................=......................................916..84.@.......
+.................-....451........541@......468..684....18............759.............499................124.....426*.........*......882.....
+...68*...........614........509...............*.........&...956*308.%........&....36...........480+....../..........917....32....#..........
+......363..377.............*..........441.....418..........................279.....*.................139..........................944.......
+........................412............*..........%....920*585....526*............931.346&.807..840.....*.626-...#....................923...
+.....283.....924...+..................628.......33....................908..766..............*........336..........446...........191.........
+...............*.249........@264..35...................502.791.#...........*......=............126....................957....71....*.768....
+.........144&.36.....216.........*...........................&.730..........201..581.704.........$......715.............=......*.......%....
+...349..............*....598...949.........189....981.....#.............524...................*............=................440...847.......
+.................967....#..........999*6..%.........-......604............&.189.626...#774.159.647....................168.........../...329.
+..............................................481.....*........................*.................................747..%.................#...
+..........245...878.......495....57....841.........351.517..........-297........................343.599/........&.......360..........-......
+430........&..............&.....*...&.....*885...........................9....392.......93..336*...........................*321.....86......
+....469......#.................999..796..................899.........250*........$.......*........247............................+.......328
+......*...696...615..300..603..............................*....232...................402...501......*.......77.271.....@.........146.......
+......170......%....$.........*..991..........782.49.......128.............................*........161........*.....648......123...........
+..........646................901..*.............*......134...........517..2..287........513...............................644...*...........
+...................999*620.........541.379.....488..18*.......................*...............208....931.338..%143...........*...19.........
+...+.......938...........................*...%.............&........626......268.418......841*..........*...............820.395..........913
+.723...834*..........+............162.667.....84............803.804...*............*................399........172..530*....................
+.....................596............*............................./.287............852....623....@.*..............@........168...965..*17...
+.....=488...................758....607.....&......53%......................105.683......-...*.860..244.....&....$....232....................
+.............................*..........333....................197........+....*......334.954.............686...464...............544.......
+.139=..............754...993.677..../.......933..........391....*....357*.....952......................@..........................*.........
+..........831............../.........94.600................+.121.........183........18..686.....665*..823...........575...........68........
+141...800....*....692...........254@.....*...819-.....................................*..@...................17.......*...815...........686.
+........%.602........%.................186..........562.93....774.....................11....948....912.........*328..243.*..................
+.......................................................*..........607....280..................&....+.....................548.&897.100@...955
+......504.....605...........889@.............975..664....$.....#............*....141.................378%.........812.......................
+.....=...........*.....730...............%...............899..480.....*....375.....-.444.........47*.........@63...........828.....468..462.
+.......607.../...23....=......=........383.............................522............*.............433..360..................*372...*......
+........*...975.............428...................592*......@258...114......%......431...................*......+........658.......560.163..
+........16........................329.......315.......973............*...333....@.......$....782..18...58....533........*...............*...
+..327.............563...889.......*...........*..595...............913........671..354..937...%..*...&...........&.787...975.......676...247
+.....+..&...401..*..............713........=.757...#.873*47...#465..................................440..588/..859.%..................*.....
+.665....133...%..196....907..............348..................................162........305...................................163.-........
+....*....................*...........170.........222.804....784..............*...................................................=.742......
+..239..338.....27-.437..543.........*....609......*..*......-...............582..-...........343*560....852.../....636..263.................
+..........*900.......*............17...........948.....597.....=....922...........682./255................@..35.......*.......211-..#.......
+.......*...........686........984..........78......896*......13........+....................985...&....................278.........876.835..
+....630.82....$851.....905.......*..281...*...............................352..........*746........215.877....845..........471.852.....*....
+.........................*.....757.*......625...........924......878..........912...............-.........*../.....538%......+.........871..
+..954*712..977.....-..762..........236.........527*674.*.........*........811*.....228....&.....5........739...483..........................
+..........*.......470..................................707....363.................*......525.......303..........*........463....537.........
+...460...947...............130.....757./96........*.................=...529....+..466........527................65..%648....=.....*.........
+.....*......................$....../..............968..............479.&....630............................598.................952..........
+.......&..........793...................................514...............-...................311..........=....83......#.............124...
+.975....399.......*...-.......*814...663..................*....*...........381../...............*.............@.........284............*....
+...*............367....198..........@.....992.....716*529....96.................729.329.688...%.322.-......67.79......-.......335....997....
+488............................632........*...../......................387.............*....225......491.............391..750...%...........
+.......861.527......778.165.......*........187..916.......845....-....*.......873.................................@.........................
+..545.....*.....$.....*..*......627............................736.376..845...*....594........+.......171.........292...........*750..-.....
+.................407.403............+...342.................+..........*.......897..........400.......$......................910.......350..
+...........................40..284.66...*......494..........255.......653..............866.................942=..................*52........
+....&........827.......296...*........$.401......*..............892*...................$.............1.164.......343..........485...........
+.930............*.........*..944...308...........763....../.........62.....113....=...........421........*..........................580+....
+........50*.....934......705............................999..................*....541...............847-.950..............*131..............
+...........209....................................&404...............276..242.............723.652................873...313..............24..
+......*........606....550#.....2./........@..................899.......*.....................*..........235..112...........704.....337......
+.......837....*...............*...83...993.....*416.........-....580%..535......../.....-204...............#..*.....93+....*...723./........
+..............168.....753..593..............504......./........................488..............=.............458.......872...*.............
+...#85...................&......911/...................880........315..872..........=....494..349....466..428..................40...........
+........939........648......................*................227...*......*.......924...*...........*.....*.................................
+918*......&.@........*...902..269..834....87.826.........../...*...919.118...817......109..........933..643...........&..............-......
+....949......883...111..%......*...%..................710.464.943.........../...................................842....305.....469..289.....
+..........................%...974......*407..168.647...*..............617.......498/.....848...........@99........*...........+.............
+..........176...........120.........469........&...#....997......464.......274.............*......./............477.417../.......738........
+.........*.......964.........291..........................................-.............2..29...272..465...............-..819........718*265
+....298...747.......#.......*.....+745...........460...741*762.275...491.......+.735*34.*............-....*841......+............*..........
+...*........................593..............298...#............%....$......225.........943........................23.....702.601.616.......
+..889................695........654..750.....*.............637........./...............................780....*726....233...*...............
+..................../.................*.....453.....642....*.........828......@...94...........152/...*....790.......*.....445......../.....
+...........................51.......681........................271..........719.......................964......399..426...............456...
diff --git a/2023/_input/day_03_part_01_sample.txt b/2023/_input/day_03_part_01_sample.txt
new file mode 100644
index 0000000..d47d149
--- /dev/null
+++ b/2023/_input/day_03_part_01_sample.txt
@@ -0,0 +1,10 @@
+467..114.3
+...*......
+..35..633.
+......#..3
+617*......
+.....+.58.
+..592.....
+......755.
+...$.*....
+.664.598..
diff --git a/2023/_input/day_04.txt b/2023/_input/day_04.txt
new file mode 100644
index 0000000..96c227d
--- /dev/null
+++ b/2023/_input/day_04.txt
@@ -0,0 +1,189 @@
+Card 1: 44 22 11 15 37 50 3 90 60 34 | 35 60 76 3 21 84 45 52 15 72 13 31 90 6 37 44 34 53 68 22 50 38 67 11 55
+Card 2: 42 14 40 24 51 49 47 73 34 74 | 40 22 48 65 34 81 24 97 14 49 1 98 66 42 71 74 28 11 47 3 45 63 73 51 87
+Card 3: 16 48 80 51 41 87 46 77 23 8 | 10 77 41 46 8 36 85 16 87 27 97 13 15 35 45 80 63 37 29 60 48 51 82 61 23
+Card 4: 82 88 65 64 33 89 23 49 11 92 | 11 33 91 15 81 44 29 27 63 23 1 13 74 89 88 8 37 22 51 92 65 7 49 82 64
+Card 5: 36 61 30 42 64 45 80 26 84 60 | 50 46 76 4 12 32 38 23 36 45 44 61 53 94 37 33 11 82 84 87 26 19 93 15 98
+Card 6: 75 63 86 49 17 26 59 70 18 57 | 87 3 2 47 65 21 24 74 28 17 34 33 16 29 63 14 60 95 83 15 41 70 56 49 23
+Card 7: 57 36 32 45 2 5 79 98 73 39 | 97 10 57 45 4 39 32 93 86 79 70 58 76 2 83 1 49 29 36 98 44 94 73 81 5
+Card 8: 85 17 70 99 44 11 42 39 83 57 | 71 94 85 1 44 66 83 42 70 73 39 33 88 56 11 31 87 7 99 8 49 43 57 91 17
+Card 9: 32 21 51 36 59 24 47 11 61 96 | 31 76 57 64 14 91 73 78 5 95 63 69 84 51 58 94 72 28 19 66 21 67 3 97 61
+Card 10: 83 96 30 51 6 24 7 65 39 97 | 67 85 39 71 93 37 35 77 56 25 82 3 89 47 8 88 66 79 7 87 84 52 11 70 1
+Card 11: 83 1 30 54 34 78 82 68 10 55 | 66 76 54 83 78 68 21 82 60 34 84 23 20 64 86 1 96 36 98 15 74 63 40 97 59
+Card 12: 74 1 6 81 56 43 65 38 3 4 | 6 24 34 46 64 81 73 52 72 62 54 44 77 98 40 7 17 63 79 91 29 71 82 9 56
+Card 13: 41 28 47 58 2 5 75 78 72 94 | 92 95 96 46 90 50 1 11 62 37 14 15 41 13 43 21 97 76 60 72 99 9 63 45 64
+Card 14: 75 48 10 62 12 44 92 20 68 19 | 58 8 30 25 77 73 23 68 31 53 74 39 97 88 7 52 4 10 86 35 3 94 81 20 63
+Card 15: 40 99 7 94 75 66 24 71 17 33 | 62 87 68 82 79 54 95 69 26 7 20 18 64 84 63 52 53 35 50 86 34 9 14 27 73
+Card 16: 5 29 30 84 1 38 35 32 8 81 | 67 65 29 96 5 11 82 71 95 93 38 76 34 77 6 37 21 17 2 52 94 58 99 3 84
+Card 17: 59 77 36 26 93 27 40 65 61 32 | 63 91 45 80 64 12 97 65 7 87 47 3 18 36 77 92 23 9 31 20 99 51 13 75 81
+Card 18: 6 56 47 29 45 63 41 33 5 4 | 95 92 45 10 81 38 27 20 65 91 57 80 72 30 18 88 15 17 55 50 11 59 40 36 86
+Card 19: 55 47 86 94 12 6 91 22 53 69 | 20 97 28 80 40 10 48 51 38 42 66 36 4 82 46 76 32 31 27 54 50 57 70 99 59
+Card 20: 98 62 51 84 26 19 35 89 32 14 | 57 94 93 87 96 42 18 53 73 88 27 61 43 59 80 50 97 64 37 6 72 13 52 40 92
+Card 21: 7 14 52 40 96 87 38 73 42 95 | 87 5 73 95 42 86 11 93 61 96 52 80 75 40 85 7 53 3 50 64 14 44 38 39 12
+Card 22: 25 18 51 7 49 95 30 26 96 2 | 92 87 2 11 95 18 26 69 49 48 14 30 94 51 24 62 96 31 98 7 60 16 10 25 93
+Card 23: 90 26 77 33 22 63 17 49 9 25 | 49 37 27 17 84 35 90 9 63 70 69 15 22 91 14 28 86 52 26 11 77 42 25 67 33
+Card 24: 9 35 28 79 83 60 74 12 75 30 | 97 60 72 61 74 94 91 84 22 79 8 57 66 20 28 35 30 75 9 71 76 83 12 77 2
+Card 25: 86 67 66 31 5 79 28 21 16 71 | 47 16 7 93 15 73 27 92 60 62 88 63 94 51 12 24 21 82 84 97 86 75 8 72 45
+Card 26: 65 48 46 57 31 96 42 98 14 89 | 84 98 58 31 76 85 96 94 52 41 40 67 34 74 83 54 42 14 10 65 48 57 79 46 89
+Card 27: 34 83 70 7 13 72 12 74 63 67 | 34 71 12 31 11 36 61 94 23 80 49 24 13 7 52 37 41 83 65 90 70 38 98 5 74
+Card 28: 11 33 66 25 89 28 17 98 37 5 | 78 13 28 25 54 51 66 5 43 6 37 97 89 26 98 11 33 64 40 17 61 74 31 60 39
+Card 29: 2 27 73 62 83 85 20 46 29 8 | 85 46 18 11 95 72 2 84 13 20 29 76 73 60 1 4 93 61 30 62 83 27 68 8 16
+Card 30: 27 77 35 2 13 49 33 47 96 75 | 96 13 35 31 75 79 8 77 28 45 61 74 27 34 92 38 33 48 49 76 2 47 5 10 54
+Card 31: 24 42 38 83 20 40 78 51 73 13 | 83 38 79 42 13 51 69 88 75 94 41 22 14 97 8 24 20 76 78 31 40 6 28 73 87
+Card 32: 78 68 70 87 52 71 30 93 96 77 | 60 24 31 14 52 4 78 71 83 45 27 93 82 85 77 30 38 2 96 94 70 87 68 61 25
+Card 33: 91 33 16 29 31 87 61 63 58 14 | 35 2 55 19 79 87 28 63 13 60 3 14 54 58 29 91 53 61 11 22 33 25 52 16 31
+Card 34: 31 76 55 66 39 70 78 89 4 83 | 78 62 46 32 31 61 51 1 83 22 89 96 72 80 66 69 50 20 11 40 24 76 90 42 71
+Card 35: 35 32 93 88 9 21 58 24 85 69 | 77 21 51 7 82 87 58 39 65 11 56 89 16 83 22 68 14 70 74 45 35 71 34 97 61
+Card 36: 22 57 6 69 88 46 71 58 96 26 | 6 14 86 50 12 76 55 35 8 17 46 5 80 52 83 57 84 3 60 93 34 67 43 97 11
+Card 37: 7 95 47 52 62 18 20 68 93 26 | 3 25 57 32 95 33 87 6 38 13 77 22 15 88 28 89 96 17 59 34 4 58 44 69 23
+Card 38: 52 36 66 89 79 6 2 86 51 37 | 70 28 40 39 61 48 33 58 88 90 75 27 50 98 4 34 10 57 5 13 80 62 76 9 67
+Card 39: 67 43 21 57 36 89 95 94 7 68 | 15 82 29 85 14 23 73 24 32 76 94 90 36 83 51 6 5 41 68 55 72 58 21 75 53
+Card 40: 29 83 62 57 2 44 99 17 81 59 | 28 66 53 11 79 57 13 50 52 71 12 42 32 54 74 56 8 59 67 70 18 65 61 48 85
+Card 41: 43 61 32 38 66 2 28 84 74 41 | 22 80 19 57 33 75 60 89 78 39 13 58 27 16 34 21 23 68 66 49 25 55 44 8 28
+Card 42: 95 17 92 58 87 97 82 98 44 43 | 48 76 45 68 12 52 93 25 26 35 11 92 82 3 67 85 23 17 61 34 2 59 88 60 74
+Card 43: 95 82 60 66 62 11 30 16 68 4 | 43 84 4 31 23 77 66 89 40 96 2 65 51 75 21 35 41 8 10 9 69 54 50 98 37
+Card 44: 53 20 33 50 67 80 4 37 61 26 | 38 92 72 12 30 56 7 44 69 70 57 17 93 31 39 62 32 97 3 5 61 1 68 10 49
+Card 45: 17 36 61 18 49 99 48 13 90 46 | 98 47 19 29 76 71 96 33 59 55 43 38 73 7 66 58 28 23 60 8 39 65 95 86 81
+Card 46: 4 94 23 22 25 35 40 55 50 51 | 65 62 27 32 48 3 83 53 87 54 8 79 95 49 68 97 56 15 11 30 5 14 46 80 77
+Card 47: 75 90 15 60 14 87 96 67 80 26 | 21 3 91 79 17 81 46 94 69 37 12 52 64 58 78 28 88 9 93 85 44 34 68 29 83
+Card 48: 76 96 28 52 81 54 55 51 10 45 | 48 67 54 93 38 28 70 87 31 82 26 5 60 85 10 15 91 34 84 72 12 62 17 51 97
+Card 49: 50 78 76 51 63 60 2 98 72 99 | 13 97 93 77 40 87 66 48 26 21 62 94 23 61 12 67 54 47 56 70 79 30 11 81 74
+Card 50: 6 60 84 70 96 59 85 91 78 88 | 61 3 40 12 35 76 94 48 54 71 51 22 87 11 97 1 57 5 49 53 98 83 82 74 46
+Card 51: 96 4 60 57 67 47 86 97 52 23 | 9 90 69 54 67 52 57 60 42 7 59 33 88 97 98 26 92 13 80 17 77 82 23 4 86
+Card 52: 50 62 38 21 94 19 88 85 83 80 | 77 17 31 23 90 83 85 81 5 32 6 82 46 38 52 50 19 35 59 80 96 98 37 61 62
+Card 53: 19 29 28 50 43 44 91 30 41 24 | 30 50 68 94 91 16 18 41 42 21 32 10 69 84 61 20 13 66 31 88 28 35 40 45 33
+Card 54: 70 66 59 79 69 52 9 72 26 3 | 88 81 36 64 5 91 7 97 20 6 44 85 54 77 60 45 11 1 73 61 19 99 40 12 90
+Card 55: 41 85 95 15 52 42 57 25 88 32 | 6 94 68 90 98 87 96 50 89 95 37 84 16 55 44 52 31 14 74 81 69 40 73 20 70
+Card 56: 44 96 94 25 41 73 5 3 81 18 | 16 36 34 85 70 42 69 28 35 5 84 23 43 67 68 32 1 29 8 48 27 63 95 41 56
+Card 57: 96 13 47 23 35 79 58 80 94 1 | 67 39 94 4 22 17 64 70 53 82 83 97 98 32 37 78 6 74 13 48 30 77 81 1 56
+Card 58: 26 82 95 34 9 48 62 81 27 32 | 31 4 20 46 28 14 35 45 68 92 67 57 72 84 79 33 58 65 64 82 76 29 93 89 96
+Card 59: 8 52 53 88 76 92 44 59 14 5 | 21 47 42 89 3 56 48 66 30 68 81 75 26 54 50 97 40 60 15 49 57 4 13 84 32
+Card 60: 71 80 66 49 16 39 76 68 74 82 | 23 72 41 78 1 96 50 73 79 13 65 59 32 29 38 63 11 92 64 54 30 22 52 95 25
+Card 61: 28 1 74 52 25 9 49 5 19 42 | 27 74 94 42 13 40 62 19 25 1 24 21 59 52 22 50 30 8 28 49 53 5 39 23 9
+Card 62: 87 62 88 31 17 95 91 42 37 28 | 78 47 11 29 50 20 28 17 58 76 18 91 25 39 22 60 65 51 16 67 27 57 35 74 5
+Card 63: 21 64 77 76 14 59 8 32 19 79 | 32 77 27 8 59 10 31 76 89 79 28 47 21 5 61 40 43 14 24 97 19 64 22 98 87
+Card 64: 50 35 23 27 79 15 90 37 88 99 | 54 89 97 22 59 66 90 79 93 65 23 32 17 36 15 85 50 28 37 27 48 55 99 62 88
+Card 65: 55 18 38 58 26 41 36 78 22 14 | 51 33 49 26 14 22 55 18 36 79 43 67 68 25 94 85 20 6 61 2 65 32 66 50 48
+Card 66: 97 52 63 58 79 51 55 90 28 87 | 59 48 7 25 47 85 79 87 37 77 56 43 41 24 55 70 99 17 28 58 49 51 52 66 60
+Card 67: 53 29 43 54 87 33 14 47 6 50 | 53 47 91 58 84 46 99 60 6 34 33 98 63 66 87 65 50 93 14 54 77 9 95 29 8
+Card 68: 65 64 10 35 78 62 98 82 9 11 | 81 78 62 59 65 64 41 35 32 10 58 97 12 60 57 21 82 11 99 9 84 98 8 44 26
+Card 69: 97 99 95 42 64 80 9 46 30 29 | 42 4 46 89 99 54 97 82 3 90 9 80 38 51 70 21 34 19 30 57 29 95 73 12 64
+Card 70: 83 18 66 53 81 21 60 74 12 79 | 39 90 32 83 2 59 74 29 87 66 60 14 8 51 78 67 72 42 64 30 70 82 81 80 73
+Card 71: 49 94 16 23 44 83 95 74 29 78 | 52 19 94 10 49 95 83 40 23 15 44 85 90 43 1 74 78 53 27 5 48 64 30 55 63
+Card 72: 41 28 95 19 80 15 38 53 27 46 | 3 60 71 33 56 80 68 29 74 10 26 27 20 47 6 70 28 53 65 37 62 8 91 69 99
+Card 73: 3 62 63 4 6 8 33 87 44 32 | 3 40 87 46 6 2 86 99 51 61 65 39 62 44 90 55 53 36 56 33 16 27 59 1 32
+Card 74: 19 44 31 74 18 58 42 28 60 14 | 8 30 34 95 6 64 70 99 43 88 5 26 16 79 52 24 73 65 38 17 78 82 57 48 90
+Card 75: 41 97 5 43 40 56 91 83 23 69 | 36 37 30 95 53 67 69 91 96 2 65 63 78 84 99 13 42 26 12 60 29 94 6 5 80
+Card 76: 57 3 77 91 60 49 29 9 83 5 | 79 85 54 50 31 25 90 80 68 73 45 92 61 2 24 63 52 6 11 8 66 84 87 7 88
+Card 77: 76 95 63 87 86 6 46 73 55 44 | 59 55 63 18 2 22 72 79 14 86 96 76 37 5 90 24 11 44 97 56 42 20 7 70 61
+Card 78: 78 29 52 51 56 13 39 33 97 83 | 25 87 77 2 7 30 76 90 22 93 92 14 37 65 88 67 42 98 62 23 32 50 81 31 47
+Card 79: 5 93 63 7 78 64 98 54 44 65 | 26 82 37 50 9 46 22 51 25 88 59 21 77 94 67 6 41 45 98 92 65 61 70 34 12
+Card 80: 46 80 27 3 30 89 29 10 85 81 | 8 60 63 84 4 2 47 50 70 32 26 36 13 57 72 90 6 83 94 9 22 88 58 34 33
+Card 81: 15 40 62 36 71 82 8 96 92 53 | 35 52 21 6 29 77 58 85 48 59 90 19 64 98 25 78 1 34 31 63 32 61 5 70 33
+Card 82: 39 28 83 51 73 60 8 94 89 93 | 26 48 85 54 75 77 22 23 65 5 20 1 3 40 62 45 11 55 58 84 76 74 13 86 2
+Card 83: 6 72 1 41 73 33 97 29 96 28 | 15 92 75 12 17 27 95 88 58 82 69 33 7 81 76 62 6 55 93 79 98 51 99 8 13
+Card 84: 86 32 71 28 75 79 73 62 4 58 | 73 71 40 28 91 76 36 51 47 32 24 54 83 65 74 4 86 7 75 26 58 2 37 69 45
+Card 85: 22 81 1 13 98 74 82 7 89 14 | 13 1 71 46 54 63 65 76 3 83 21 57 90 80 30 37 4 78 81 64 32 87 73 89 88
+Card 86: 22 14 97 63 31 52 71 28 18 60 | 50 14 73 18 24 51 5 29 70 28 63 40 9 62 59 37 92 90 95 83 4 22 93 77 13
+Card 87: 65 43 25 31 68 19 8 26 69 12 | 20 84 46 5 41 4 63 52 74 96 76 70 35 55 62 77 88 54 17 93 85 26 72 83 29
+Card 88: 87 35 32 94 63 95 76 56 89 48 | 90 7 48 65 54 35 50 45 94 26 40 2 95 88 22 73 13 33 87 92 61 76 72 81 86
+Card 89: 55 64 85 51 56 52 17 49 27 5 | 19 17 52 31 56 46 82 79 55 23 9 95 54 94 41 90 64 49 62 5 51 75 27 85 7
+Card 90: 21 96 79 30 97 23 61 66 95 50 | 6 1 50 2 87 97 18 76 65 94 75 61 51 59 28 8 21 93 95 54 55 66 57 26 62
+Card 91: 36 4 17 66 2 75 55 53 12 62 | 36 31 73 56 47 60 34 38 76 95 23 41 29 66 9 63 70 64 27 5 69 28 15 11 7
+Card 92: 95 6 85 38 77 58 29 4 87 96 | 5 4 87 77 84 64 23 15 95 52 24 75 12 38 6 96 31 57 85 74 80 89 25 36 97
+Card 93: 21 47 40 11 25 3 45 27 2 17 | 83 40 57 76 91 11 31 3 69 27 8 54 2 43 66 34 72 20 85 22 9 71 50 21 32
+Card 94: 48 68 49 4 7 33 6 73 1 95 | 19 46 47 96 38 63 52 18 68 61 45 86 76 85 42 80 92 17 36 10 3 72 37 59 64
+Card 95: 69 42 39 84 31 9 85 6 45 2 | 19 74 33 71 55 22 5 60 2 66 40 26 70 4 12 64 43 30 16 98 17 50 85 27 62
+Card 96: 73 42 99 21 12 29 77 94 1 26 | 46 5 63 64 83 75 74 86 69 89 79 57 60 48 37 13 96 43 72 4 23 98 59 80 92
+Card 97: 16 29 15 98 34 20 91 35 21 44 | 39 38 8 94 59 24 97 84 49 7 63 55 33 73 99 57 70 17 90 22 78 36 54 42 27
+Card 98: 32 83 45 81 73 25 58 84 74 86 | 72 1 39 93 36 47 16 20 2 15 34 30 3 7 66 50 89 26 99 13 87 68 28 41 8
+Card 99: 89 83 59 69 4 22 47 37 20 60 | 13 10 61 25 81 99 87 23 82 5 91 73 18 26 21 6 62 58 67 52 56 98 8 90 85
+Card 100: 32 79 87 19 25 91 62 82 76 5 | 26 66 13 28 18 97 3 65 49 30 21 2 42 9 33 14 68 98 72 96 59 99 77 7 34
+Card 101: 86 22 33 76 83 67 87 75 18 51 | 33 76 66 77 35 34 79 3 95 16 27 28 48 45 51 75 10 12 31 83 42 18 67 96 87
+Card 102: 8 58 41 62 81 47 52 71 59 98 | 21 91 68 71 58 14 90 93 79 38 98 41 13 72 66 11 26 3 62 84 83 65 17 47 36
+Card 103: 34 76 6 85 21 48 41 60 59 70 | 75 55 49 9 73 47 77 6 64 76 30 59 85 24 11 43 34 48 33 63 72 21 83 60 32
+Card 104: 57 85 27 66 58 37 80 70 78 74 | 57 70 54 30 22 46 78 80 3 74 50 35 92 58 5 95 7 59 83 90 66 60 1 98 12
+Card 105: 33 97 95 36 80 81 66 46 98 91 | 45 1 80 43 14 8 21 95 64 23 49 74 54 36 25 91 93 81 55 73 66 57 29 17 46
+Card 106: 51 19 86 18 63 41 44 9 7 21 | 12 18 20 94 59 51 42 9 1 55 22 3 48 91 21 56 74 61 93 34 44 17 37 97 13
+Card 107: 5 8 59 60 89 35 55 73 83 1 | 64 18 11 91 60 43 21 45 20 66 25 35 58 70 27 37 86 13 82 5 17 98 24 40 4
+Card 108: 26 76 43 52 20 87 1 58 88 34 | 85 69 29 16 48 31 13 65 91 52 37 55 64 7 88 74 96 40 61 33 45 73 84 23 14
+Card 109: 10 41 47 8 27 97 18 17 87 16 | 88 87 12 73 94 27 49 98 20 25 45 67 83 35 19 16 18 6 59 62 9 8 22 53 47
+Card 110: 42 70 11 15 56 19 99 4 93 88 | 25 79 92 67 58 66 52 77 7 19 75 72 61 1 4 68 42 27 53 44 22 56 83 70 88
+Card 111: 81 34 29 58 73 52 55 49 67 14 | 39 92 9 10 44 95 57 86 56 97 74 43 60 72 49 75 11 37 98 4 61 35 6 85 41
+Card 112: 23 51 12 85 16 60 98 67 79 5 | 13 59 49 96 15 30 33 75 61 81 86 55 60 83 93 14 82 19 71 68 39 69 32 2 31
+Card 113: 5 57 82 45 37 64 10 67 71 23 | 43 63 80 95 89 93 61 51 77 46 33 4 20 73 18 19 32 59 27 31 74 94 53 42 96
+Card 114: 35 61 73 13 29 27 33 98 10 43 | 9 11 25 87 45 63 24 17 1 96 14 86 39 7 99 67 48 26 51 40 76 59 47 52 31
+Card 115: 95 3 80 93 63 54 70 37 83 74 | 38 86 66 62 73 28 41 48 8 1 19 53 59 40 47 69 39 6 61 35 25 65 76 16 57
+Card 116: 14 17 25 45 9 38 78 48 58 51 | 95 33 43 77 10 64 72 21 60 98 26 70 96 68 44 85 97 75 28 16 22 80 7 46 34
+Card 117: 73 50 33 92 91 11 13 64 66 16 | 44 73 91 26 15 49 80 34 92 65 21 16 64 66 84 33 77 13 30 11 59 2 19 51 50
+Card 118: 97 77 94 41 44 9 22 2 53 48 | 9 76 46 88 78 41 22 94 92 4 58 59 53 15 77 48 20 42 97 2 44 75 69 32 36
+Card 119: 70 74 16 31 68 88 67 59 69 29 | 45 68 7 22 43 98 19 67 63 74 2 31 47 64 44 82 50 16 73 93 59 34 29 71 35
+Card 120: 3 36 60 7 45 18 19 34 55 72 | 9 34 72 40 19 32 16 61 2 63 33 92 93 81 88 7 60 84 18 36 44 45 5 3 55
+Card 121: 66 74 61 20 70 40 23 96 54 50 | 33 78 66 59 10 72 74 6 40 61 14 44 95 12 97 19 39 16 38 63 1 8 34 96 2
+Card 122: 82 8 40 84 5 42 46 60 21 57 | 14 95 68 94 93 19 41 6 39 25 47 37 12 66 81 50 38 15 71 96 99 13 97 87 53
+Card 123: 94 7 83 14 3 57 91 23 41 40 | 2 27 14 7 17 55 89 25 87 72 83 47 21 57 9 99 59 91 98 93 94 41 40 82 3
+Card 124: 65 67 23 63 35 97 78 51 18 58 | 52 45 39 35 80 67 21 40 29 64 18 3 38 78 51 23 28 63 8 32 93 97 58 65 61
+Card 125: 60 56 25 53 90 11 54 47 98 57 | 45 85 91 40 20 63 48 56 42 75 14 9 90 6 39 54 13 67 25 73 96 89 60 98 10
+Card 126: 88 35 60 29 39 27 43 71 50 97 | 69 27 82 48 98 28 14 90 65 81 97 57 45 21 75 94 96 17 54 31 5 22 2 24 26
+Card 127: 95 51 20 99 64 57 65 58 40 22 | 51 21 56 72 10 54 73 94 28 14 26 37 65 97 29 20 68 53 5 57 48 2 42 13 23
+Card 128: 65 74 76 90 4 36 44 92 68 63 | 19 85 6 44 9 92 37 36 64 76 96 43 79 98 86 39 49 93 71 26 63 99 56 70 16
+Card 129: 83 81 21 25 11 10 40 47 6 48 | 91 64 19 28 17 59 62 4 18 54 56 68 43 39 41 74 96 60 97 23 7 15 38 42 2
+Card 130: 73 5 17 4 26 85 6 2 75 88 | 55 99 4 73 59 83 2 33 69 93 5 70 51 35 23 91 53 68 45 95 88 15 98 37 96
+Card 131: 26 19 22 90 43 46 92 68 98 62 | 71 81 64 73 54 14 21 33 72 26 89 36 58 29 17 57 63 91 24 86 38 66 10 87 4
+Card 132: 66 61 98 42 92 11 89 4 12 56 | 7 1 49 57 64 28 94 88 45 5 87 69 62 52 35 40 97 53 21 71 19 83 9 60 77
+Card 133: 77 92 46 32 49 88 29 35 37 61 | 1 69 31 74 71 61 40 64 20 77 5 53 70 94 18 2 17 72 82 99 80 67 16 8 41
+Card 134: 74 23 3 71 41 13 79 68 64 97 | 78 66 54 75 26 14 36 18 87 3 82 59 4 83 29 6 34 76 32 53 11 57 27 39 42
+Card 135: 79 92 41 97 24 76 12 73 70 89 | 53 55 81 9 86 20 98 27 22 18 59 82 26 10 74 31 58 62 75 44 93 68 23 14 83
+Card 136: 27 20 15 61 60 79 52 69 18 38 | 23 10 73 55 87 14 17 12 47 80 49 83 35 22 97 84 11 44 78 85 90 45 41 58 2
+Card 137: 58 73 71 95 64 91 88 78 31 15 | 67 90 69 86 64 79 38 56 35 73 14 43 91 75 61 96 87 77 53 48 89 88 20 55 82
+Card 138: 48 46 63 72 26 91 53 86 27 17 | 52 49 34 13 99 69 1 92 95 80 8 6 74 56 75 37 29 61 93 18 66 97 2 32 60
+Card 139: 66 78 41 91 24 96 61 90 21 31 | 74 3 51 31 14 46 15 61 96 54 91 53 27 49 90 92 21 41 97 86 24 78 40 10 66
+Card 140: 21 70 50 26 82 4 46 51 22 45 | 99 79 98 58 14 71 88 59 51 45 6 44 18 90 41 24 27 4 12 78 21 26 95 49 20
+Card 141: 68 92 49 78 1 31 87 40 67 94 | 29 78 26 96 40 67 94 20 1 27 12 31 87 68 92 35 18 22 81 86 60 49 5 32 99
+Card 142: 64 6 96 90 88 27 77 41 72 13 | 41 14 82 46 28 86 84 63 76 75 32 90 13 6 30 77 44 88 27 78 60 79 64 96 70
+Card 143: 11 41 77 59 60 80 93 10 94 96 | 80 47 59 40 57 22 98 44 91 38 41 53 62 1 35 27 66 78 21 68 42 34 14 81 60
+Card 144: 30 83 21 64 54 33 95 44 61 74 | 34 9 8 14 47 62 82 28 84 68 2 50 66 59 26 64 41 57 70 23 46 88 79 44 95
+Card 145: 50 43 99 92 15 9 12 82 88 57 | 43 82 38 98 94 60 11 25 3 52 2 4 49 89 57 88 18 97 68 27 15 70 9 80 99
+Card 146: 93 98 19 66 94 17 92 15 69 3 | 62 57 65 69 92 60 44 54 79 42 45 36 19 37 33 81 83 98 94 90 77 3 85 56 87
+Card 147: 92 6 22 88 54 76 25 21 3 33 | 39 68 15 63 29 62 97 27 59 14 76 44 56 41 26 90 43 57 73 24 7 52 31 8 53
+Card 148: 95 69 83 87 55 43 25 73 39 76 | 39 94 99 77 32 58 53 68 1 72 50 26 38 41 5 37 52 35 67 83 2 69 19 73 93
+Card 149: 9 4 2 76 45 6 83 68 66 99 | 38 73 32 31 35 43 12 16 80 98 55 17 82 20 91 19 56 36 33 5 63 65 77 28 40
+Card 150: 89 58 46 72 43 40 73 50 85 91 | 96 28 57 24 20 79 42 21 6 47 48 2 41 23 38 54 45 69 26 56 65 99 74 78 4
+Card 151: 79 62 74 63 69 93 61 73 76 20 | 99 4 85 43 78 8 83 9 70 77 21 79 2 92 91 35 60 42 38 84 72 66 18 36 56
+Card 152: 58 16 29 44 57 30 3 43 62 86 | 93 22 87 38 20 64 26 21 51 63 14 15 61 89 40 96 83 74 10 66 31 69 92 19 18
+Card 153: 28 60 76 64 15 55 13 22 56 51 | 17 19 88 15 83 72 49 50 96 6 89 1 78 18 94 29 30 22 79 60 64 13 80 85 38
+Card 154: 60 25 91 36 96 75 39 55 30 68 | 97 95 10 68 48 67 55 72 26 77 23 63 35 13 52 64 30 61 15 99 14 46 41 60 39
+Card 155: 31 39 17 30 37 74 55 18 93 26 | 95 51 73 15 39 71 99 32 63 10 76 68 14 85 77 31 53 13 46 36 22 43 66 93 19
+Card 156: 69 54 99 23 74 95 3 51 6 79 | 6 3 13 10 23 99 92 30 16 69 91 33 51 2 54 95 79 60 49 62 26 74 15 50 70
+Card 157: 46 41 69 38 94 4 76 10 59 34 | 41 11 13 2 60 85 6 40 18 38 70 7 5 50 10 14 59 47 69 17 30 84 58 39 45
+Card 158: 81 63 68 7 56 88 31 29 30 45 | 19 84 8 7 56 63 70 30 33 24 97 34 48 68 38 49 29 50 18 45 81 95 39 96 1
+Card 159: 64 88 6 52 80 55 85 37 68 12 | 78 91 73 35 26 20 94 72 65 54 76 27 42 53 75 12 61 57 40 47 55 29 90 28 60
+Card 160: 66 97 98 82 28 80 84 45 87 32 | 1 57 59 76 83 49 89 45 16 26 34 47 55 6 54 92 32 96 72 28 97 87 67 56 29
+Card 161: 76 53 82 26 47 84 68 9 90 65 | 4 99 68 55 92 35 62 90 76 75 72 54 80 93 95 69 21 11 8 19 98 83 27 52 61
+Card 162: 35 43 90 21 87 48 44 72 45 96 | 26 58 19 17 12 11 88 53 7 39 28 2 51 1 24 83 4 71 90 57 80 87 81 82 41
+Card 163: 60 9 42 11 81 76 33 39 63 64 | 18 72 17 61 27 81 89 79 26 4 30 33 91 64 52 31 63 51 40 70 6 45 32 46 5
+Card 164: 48 77 13 10 23 93 42 72 16 89 | 8 90 89 17 73 52 60 54 4 12 95 62 67 69 55 66 56 65 59 21 22 43 26 97 31
+Card 165: 81 16 32 54 95 35 41 12 37 57 | 26 27 2 23 56 69 7 55 88 50 84 11 47 25 3 43 8 72 31 44 64 82 75 22 57
+Card 166: 10 89 46 37 68 42 55 6 92 35 | 8 43 75 73 94 89 63 20 51 54 87 98 74 78 47 31 34 18 32 60 38 50 69 3 41
+Card 167: 81 7 4 48 36 26 11 51 16 86 | 19 60 92 52 95 58 99 61 98 57 30 82 13 89 6 40 32 8 24 79 39 84 68 43 72
+Card 168: 52 34 59 72 63 57 36 3 30 11 | 57 1 30 93 96 52 26 11 14 49 48 36 72 59 92 3 63 91 46 60 34 94 22 19 9
+Card 169: 9 27 82 11 50 43 68 74 83 77 | 77 94 45 48 56 82 63 49 41 31 96 32 50 13 9 83 43 99 27 74 55 68 87 11 54
+Card 170: 67 66 11 9 63 75 25 19 13 60 | 87 93 29 85 60 27 33 75 61 99 19 66 74 53 24 82 11 25 7 47 77 67 9 63 13
+Card 171: 86 42 30 87 31 74 40 71 10 20 | 27 18 24 42 86 10 71 97 37 12 57 30 76 3 94 65 7 96 4 67 69 58 9 62 48
+Card 172: 46 19 33 70 75 88 3 56 8 21 | 13 88 56 70 8 12 41 87 19 49 42 62 78 26 34 11 35 52 85 6 3 7 58 37 46
+Card 173: 80 70 56 30 85 13 94 90 40 36 | 40 85 58 74 70 57 80 25 30 94 36 73 50 92 5 78 29 3 32 13 35 90 56 71 41
+Card 174: 77 50 5 80 69 65 27 17 86 3 | 32 37 25 67 56 86 50 19 41 45 64 1 38 70 63 66 47 78 92 23 54 65 95 8 87
+Card 175: 95 2 77 74 71 94 60 96 34 61 | 5 60 34 76 35 19 47 52 82 29 75 62 70 14 12 24 55 49 30 15 71 86 91 90 27
+Card 176: 8 99 42 72 81 60 55 51 40 6 | 81 8 6 26 62 22 3 73 68 85 48 42 93 15 20 99 87 97 72 67 60 36 46 55 78
+Card 177: 18 29 85 81 21 73 34 38 6 50 | 38 49 44 62 89 45 24 86 83 98 35 13 85 67 73 91 39 64 1 96 8 54 50 34 25
+Card 178: 69 57 27 80 68 95 19 30 71 63 | 68 19 80 34 56 30 3 27 94 85 99 69 78 14 62 10 63 44 59 8 51 95 9 57 71
+Card 179: 98 68 77 57 28 14 49 20 23 32 | 14 23 48 32 69 77 28 72 21 24 89 80 53 57 68 99 52 79 27 31 20 62 29 87 7
+Card 180: 84 48 77 15 73 99 80 56 81 25 | 58 27 3 55 28 37 65 70 57 44 89 15 81 90 42 48 54 39 26 25 6 88 93 12 95
+Card 181: 90 18 43 93 74 58 64 26 19 60 | 62 39 74 26 22 75 58 18 72 71 36 30 23 10 43 91 68 19 67 56 60 96 31 79 99
+Card 182: 42 64 24 74 23 67 35 57 9 92 | 56 62 33 65 57 9 43 10 20 32 61 39 99 97 24 21 75 52 86 68 55 74 84 88 47
+Card 183: 3 81 51 41 70 94 28 69 1 98 | 91 67 31 3 48 42 69 47 20 19 78 55 7 70 6 13 56 96 32 92 68 75 60 73 1
+Card 184: 68 41 58 60 79 44 36 35 93 88 | 14 97 20 65 12 82 17 63 48 10 37 72 11 98 58 81 56 87 99 83 59 61 80 8 52
+Card 185: 6 48 27 60 13 5 36 25 78 95 | 53 22 98 75 60 24 27 55 69 34 41 82 1 17 19 35 78 91 81 37 32 21 5 15 3
+Card 186: 22 31 70 64 72 11 48 63 94 95 | 43 10 45 61 99 86 51 37 81 34 24 60 31 67 30 74 55 42 52 19 73 82 96 32 83
+Card 187: 24 19 70 82 52 64 8 86 23 54 | 92 14 11 7 13 67 26 86 72 62 50 94 40 52 48 33 49 96 68 29 30 1 73 88 41
+Card 188: 32 86 69 20 23 64 67 78 46 61 | 81 94 62 47 72 48 16 83 93 64 8 21 37 41 51 13 50 58 92 11 1 98 74 39 76
+Card 189: 70 29 33 24 9 10 48 42 60 65 | 26 92 27 76 90 1 37 78 35 66 20 43 45 99 7 87 32 83 67 52 58 15 94 63 89
diff --git a/2023/_input/day_04_part_01_sample.txt b/2023/_input/day_04_part_01_sample.txt
new file mode 100644
index 0000000..9bdb874
--- /dev/null
+++ b/2023/_input/day_04_part_01_sample.txt
@@ -0,0 +1,6 @@
+Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
+Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
+Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
+Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
+Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
+Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
diff --git a/2023/_input/day_04_part_02_sample.txt b/2023/_input/day_04_part_02_sample.txt
new file mode 100644
index 0000000..9bdb874
--- /dev/null
+++ b/2023/_input/day_04_part_02_sample.txt
@@ -0,0 +1,6 @@
+Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
+Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
+Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
+Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
+Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
+Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
diff --git a/2023/_input/day_05.txt b/2023/_input/day_05.txt
new file mode 100644
index 0000000..6808607
--- /dev/null
+++ b/2023/_input/day_05.txt
@@ -0,0 +1,197 @@
+seeds: 1972667147 405592018 1450194064 27782252 348350443 61862174 3911195009 181169206 626861593 138786487 2886966111 275299008 825403564 478003391 514585599 6102091 2526020300 15491453 3211013652 546191739
+
+seed-to-soil map:
+325190047 421798005 78544109
+4034765382 1473940091 137996533
+403734156 658668780 288666603
+2574766003 2624114227 17352982
+1931650757 2203381572 98211987
+4263596455 2843660329 31370841
+1614547845 2641467209 55121215
+3441604278 2032673361 170708211
+692400759 563703672 94965108
+2992851755 3824700930 114550818
+3957953582 2540115966 24844899
+0 500342114 59804107
+4172761915 2577017231 47096996
+2029862744 3548344768 52256082
+2620304610 2875031170 99567251
+3982798481 3939251748 51966901
+2325101894 1616388089 203150170
+3612312489 1611936624 4451465
+787365867 0 77461445
+1341614907 4162572181 132395115
+2542801978 3468402968 31964025
+223387052 947335383 59156225
+2297805420 1819538259 27296474
+2082118826 3991218649 171353532
+3374211778 3040047171 67392500
+2592118985 1341614907 28185625
+2253472358 2495782904 44333062
+4219858911 3780963386 43737544
+59804107 560146221 3557451
+3107402573 3600600850 64973479
+1669669060 3115086052 235712356
+2719871861 1369800532 104139559
+3172376052 2301593559 194189345
+2980795389 2564960865 12056366
+1905381416 3350798408 26269341
+63361558 261772511 160025494
+2824011420 3377067749 91335219
+3366565397 3107439671 7646381
+282543277 77461445 42646770
+3713793353 2696588424 147071905
+2528252064 1877585624 14549914
+3927202691 1846834733 30750891
+3665815578 3500366993 47977775
+1474010022 1892135538 140537823
+3616763954 3665574329 49051624
+2915346639 2974598421 65448750
+864827312 120108215 141664296
+3860865258 3714625953 66337433
+
+soil-to-fertilizer map:
+3835605444 4098164436 1662218
+682286299 0 63480553
+396476124 2072802434 285810175
+1644893571 655614677 162631098
+3625179075 4099826654 40627721
+1431211762 1859120625 213681809
+2853687843 4140454375 103601386
+1390165578 2358612609 41046184
+2405285827 3959200676 138963760
+900243562 1478767251 170015757
+3727732722 3084190064 107872722
+893948759 1084467374 6294803
+210337617 818245775 186138507
+1807524669 63480553 592134124
+825849944 1090762177 68098815
+3837267662 3192062786 457699634
+0 1648783008 210337617
+3665806796 2405285827 61925926
+1070259319 1158860992 319906259
+745766852 1004384282 80083092
+2957289229 4244055761 50911535
+2544249587 3649762420 309438256
+3008200764 2467211753 616978311
+
+fertilizer-to-water map:
+1169336944 3024036226 46676171
+1263157944 1445876546 148868263
+2080390054 2683279801 65621604
+949040795 1266013203 61140343
+2146011658 2793621589 110265098
+525510412 2618124082 65155719
+2977122301 3122211455 179751286
+3885825304 713560214 409141992
+1081017627 4124851079 88319317
+590666131 2039951828 38597255
+3596454634 1981772613 58179215
+2256276756 2078549083 315165891
+1639631621 1122702206 143310997
+2858399301 1327153546 118723000
+3654633849 3301962741 72039868
+749412925 3549292249 161128796
+1412026207 541983534 151190298
+1054901322 4268850991 26116305
+1829368778 3374002609 175289640
+1216013115 2570979253 47144829
+2806900243 3070712397 51499058
+1563216505 3760425124 76415116
+1782942618 3710421045 29953038
+629263386 2903886687 120149539
+2060339013 3740374083 20051041
+3156873587 3836840240 52553243
+2693038006 4010988842 113862237
+3726673717 2411827666 159151587
+2004658418 4213170396 55680595
+1812895656 525510412 16473122
+1010181138 2748901405 44720184
+910541721 693173832 20386382
+930928103 2393714974 18112692
+3209426830 1594744809 387027804
+2571442647 3889393483 121595359
+
+water-to-light map:
+555269773 2142838063 230952411
+2879443939 2889030006 80512763
+192641991 2686257040 106620606
+786222184 967781117 56662479
+3467110983 4162792381 132174915
+1955778230 0 505352386
+2461130616 1138855522 99691153
+1436321461 1403321335 440861327
+2625559119 1024443596 104825859
+1255310011 2792877646 96152360
+1877182788 697994377 78595442
+3732975066 3467110983 374194949
+842884663 2373790474 56459390
+299262597 2430249864 256007176
+3599285898 3841305932 133689168
+4107170015 3974995100 187797281
+0 505352386 192641991
+1090535351 1238546675 164774660
+2959956702 1129269455 9586067
+1351462371 1844182662 84859090
+2730384978 1929041752 149058961
+899344053 776589819 191191298
+2560821769 2078100713 64737350
+
+light-to-temperature map:
+4103141199 3912772142 105835099
+1994281004 833968687 112844016
+4208976298 1124841590 85990998
+3756966983 4018607241 111390720
+3868357703 1907239336 234783496
+2368591640 1210832588 293667703
+882426579 2320467318 1111854425
+3064998388 717457244 33489309
+3578938096 946812703 178028887
+2107125020 750946553 83022134
+3157760738 3432321743 421177358
+717457244 4129997961 164969335
+2190147154 2142022832 178444486
+3098487697 3853499101 59273041
+2662259343 1504500291 402739045
+
+temperature-to-humidity map:
+0 1820412620 129662806
+613828383 2855382935 55943394
+4004726464 3519717349 290240832
+769767991 99996214 1720416406
+3126066249 3043992795 475724554
+2490184397 2434241003 421141932
+129662806 1950075426 484165577
+689805485 0 79962506
+669771777 79962506 20033708
+3601790803 3809958181 402935661
+3043992795 4212893842 82073454
+
+humidity-to-location map:
+1305211417 3371927062 89487200
+947159122 0 358052295
+324330151 2021970861 8067408
+332397559 654359706 174171341
+506568900 3311893445 60033617
+11065691 828531047 45586147
+3556729147 369117986 26689998
+3583419145 395807984 258551722
+2356886904 984938593 400606547
+1394698617 874117194 110821399
+566602517 3946624826 164852367
+2998901322 2301963630 256425441
+0 358052295 11065691
+3331964991 3087129289 34908052
+1505520016 2106676497 195287133
+56651838 2819450976 267678313
+3366873043 3293025783 18867662
+3385740705 3122037341 170988442
+2281795782 2799796942 19654034
+2301449816 1966533773 55437088
+3992934054 3677118500 118543139
+3255326763 2030038269 76638228
+3849868384 3803559156 143065670
+2757493451 2558389071 241407871
+3841970867 3795661639 7897517
+1700807149 1385545140 580988633
+731454884 3461414262 215704238
diff --git a/2023/_input/day_06.txt b/2023/_input/day_06.txt
new file mode 100644
index 0000000..c78a7c2
--- /dev/null
+++ b/2023/_input/day_06.txt
@@ -0,0 +1,2 @@
+Time: 42 89 91 89
+Distance: 308 1170 1291 1467
diff --git a/2023/_input/day_06_part_01_sample.txt b/2023/_input/day_06_part_01_sample.txt
new file mode 100644
index 0000000..28f5ae9
--- /dev/null
+++ b/2023/_input/day_06_part_01_sample.txt
@@ -0,0 +1,2 @@
+Time: 7 15 30
+Distance: 9 40 200
diff --git a/2023/_input/day_06_part_02_sample.txt b/2023/_input/day_06_part_02_sample.txt
new file mode 100644
index 0000000..28f5ae9
--- /dev/null
+++ b/2023/_input/day_06_part_02_sample.txt
@@ -0,0 +1,2 @@
+Time: 7 15 30
+Distance: 9 40 200
diff --git a/2023/_input/day_07.txt b/2023/_input/day_07.txt
new file mode 100644
index 0000000..f1d181e
--- /dev/null
+++ b/2023/_input/day_07.txt
@@ -0,0 +1,1000 @@
+6JA22 162
+TQJQ8 732
+7T77A 882
+6K66K 850
+QQAQQ 11
+7QQ7Q 321
+28966 921
+34433 801
+8QQ8Q 914
+K63K5 636
+47777 533
+K62Q9 773
+25J52 717
+A6AAA 631
+23222 720
+267Q4 9
+K8QK5 15
+QQA22 400
+563T8 50
+2J5J2 756
+77T83 647
+T9596 27
+53AJA 371
+6J666 916
+833TK 380
+5TK4J 506
+TK3KK 794
+JTJ55 54
+TTT4T 422
+9J3KK 491
+488K4 30
+87878 654
+QQKKK 894
+A4A3J 360
+55559 232
+33388 148
+JK599 632
+KK663 300
+JJ448 514
+AKATA 188
+6J537 885
+98888 65
+9TT3J 361
+668A9 227
+Q3285 257
+JT54J 208
+K8QA7 373
+77K39 681
+33T4J 281
+KA832 578
+6QQQ5 214
+52222 154
+6A4Q4 78
+39339 282
+2A82A 25
+5A66J 261
+5594J 4
+TTTT6 752
+9A3K5 760
+KA5AA 26
+K7464 447
+33676 605
+K7J7A 946
+5T5KQ 805
+654Q8 888
+35358 315
+A4A57 552
+669AA 485
+7A77Q 105
+Q3333 372
+57A9Q 665
+97655 367
+24222 698
+Q6KT7 820
+99KKK 83
+T33JK 389
+9KKQ2 602
+TT9JQ 278
+JT5KJ 638
+88JJ7 588
+4664J 205
+36T95 193
+7272K 329
+JTTTK 328
+7K79T 653
+84948 192
+4444K 258
+578QA 337
+9J999 980
+JT4A2 950
+QJT22 598
+TTTTJ 384
+QAKJK 310
+58955 547
+Q2497 264
+55444 746
+793K4 256
+QKQ5Q 802
+ATTTT 878
+Q92K5 469
+88388 969
+T99TQ 456
+44384 560
+3773J 545
+82293 224
+8558J 879
+TT98T 342
+AJKJ4 490
+T9996 238
+TKQQQ 810
+J5Q55 229
+Q564Q 932
+4K6KJ 349
+3J939 909
+28K2K 563
+8787K 262
+JTK34 365
+A3832 165
+2T3A8 562
+229Q5 761
+9TTK9 58
+KK55T 536
+K6JJJ 216
+44466 940
+67777 897
+QQ9Q9 963
+48AJT 507
+4TT4T 160
+82936 584
+99TTJ 597
+698QA 573
+398K5 618
+56J54 438
+45584 124
+83657 892
+J2782 574
+68862 270
+5Q5A7 132
+TKK8K 288
+6AT55 689
+22J62 61
+QJQ55 884
+2J445 713
+TJ952 913
+3QAJ4 347
+J73JK 122
+555TT 64
+AQ829 830
+5384A 924
+44446 146
+Q7JTT 248
+73K3K 22
+22572 335
+55JJJ 225
+K56KK 587
+9Q8TT 745
+833QQ 420
+63828 489
+J6368 199
+45464 31
+72724 550
+66Q6Q 543
+66334 191
+55Q54 965
+KK7A7 73
+TJQ8A 806
+33Q23 283
+928J3 804
+4J4Q4 470
+4KKKK 865
+Q6K9K 266
+7QJ2Q 237
+7AT65 723
+9TAJ2 327
+73344 207
+44TKK 179
+86T68 203
+TTT28 519
+4J684 391
+97779 169
+9229K 593
+KKK77 280
+J2224 926
+A5J5A 472
+Q673J 697
+K88KK 823
+7K63J 198
+4A65T 115
+J2424 302
+55A55 424
+TTTQ6 142
+48888 97
+KK66T 672
+7J7T7 809
+4A444 153
+3A33A 494
+A7K25 790
+88A9A 880
+KQ549 473
+6J2Q7 803
+QQK2J 345
+9KKJT 152
+T4KJT 917
+23593 608
+33383 798
+44Q22 841
+AQQQT 709
+7747Q 1
+4333A 959
+4666Q 163
+AA5A5 920
+7A77A 576
+55J4K 357
+6KKQT 354
+A6866 837
+JK6KT 341
+QQQQ8 778
+966Q9 710
+59995 101
+7KKJ2 79
+4J58Q 680
+K55KK 967
+A3AAT 352
+Q435J 20
+453JJ 683
+9T4QK 669
+595J9 307
+KK35K 673
+98563 113
+QJ943 181
+88498 340
+AKAAA 931
+Q58Q5 183
+QJAKT 145
+3K8TA 952
+JKA2J 173
+JA734 443
+68226 291
+QT7J5 777
+AAT8Q 377
+T9T3T 991
+44T75 642
+79772 96
+2Q5QQ 881
+8TTTT 398
+22K2J 45
+46TQQ 497
+QQ522 7
+6JA99 35
+TK65T 559
+65885 532
+76868 156
+74J4J 274
+Q85JQ 378
+596K7 566
+AJ522 286
+5K455 362
+483JJ 170
+8JQ78 866
+QQ3Q3 392
+52292 250
+77977 678
+55AA3 604
+33663 571
+9KKKT 759
+K8243 923
+363J7 603
+3333K 332
+94333 660
+555T5 98
+5772A 206
+TTTQT 103
+Q3KJ2 29
+99669 674
+6625J 338
+Q4444 904
+7K6Q8 40
+A73JA 646
+77545 231
+QTJ87 956
+Q944Q 872
+K8892 393
+5AQ6T 503
+7K7K7 322
+74297 851
+4QKJ6 508
+Q665Q 114
+8Q93T 825
+AAA8T 799
+6598K 910
+78A27 766
+JAAJA 993
+88788 763
+Q7925 117
+A22A2 74
+98T95 716
+2QQQ3 75
+A3479 107
+KAKAK 13
+8863K 271
+J668A 919
+342TA 62
+6295A 226
+T398T 558
+54696 699
+J444T 614
+34442 41
+86488 815
+88T8T 755
+78Q76 548
+A6666 725
+422TK 768
+JJTTK 998
+99393 730
+967JQ 771
+J9A94 500
+KKQQ3 213
+6TJ6K 899
+K88KJ 346
+52J22 835
+J8827 651
+5A588 67
+333A3 737
+J2J22 331
+4Q3J6 953
+7K443 601
+A2868 355
+TQ2K3 492
+765Q2 521
+AJ7AA 121
+5J5J5 172
+48A44 627
+57TAA 891
+58555 912
+46436 195
+K9AT3 859
+78338 84
+54J75 186
+TTTTK 740
+75777 461
+25K5T 401
+94994 272
+5679Q 129
+64666 375
+327A9 243
+7Q7QT 656
+JAAAK 691
+4AA4A 877
+T5TTK 682
+599QJ 395
+3835K 502
+46667 906
+44443 408
+5J558 430
+5QJ44 670
+3K693 585
+33393 277
+QQ992 849
+4T4KT 368
+99996 323
+2QTT9 542
+K253A 971
+7799J 482
+59QQ7 939
+53633 405
+4Q2Q2 677
+9KQKK 975
+78877 428
+9KAJ6 987
+JJ8JJ 951
+46A6A 979
+8K58J 915
+433J4 304
+33QTQ 657
+8KKKK 167
+J5J35 439
+979J9 827
+JK47Q 968
+AAAJA 936
+9747K 46
+4449J 100
+T7AJ6 204
+5556Q 517
+666T6 870
+38QJA 57
+277T7 764
+4J834 964
+22626 128
+2334T 664
+449Q4 454
+6T6T6 590
+TATAT 233
+37555 609
+ATK69 249
+K33JK 784
+J8JJ8 19
+8T888 202
+555AA 111
+T3339 86
+5Q963 816
+7AK2K 650
+J9J27 509
+JJQQQ 436
+59958 705
+KKJAK 833
+33K63 623
+47764 690
+58855 501
+4754K 177
+T5K5J 451
+554Q4 762
+99J29 595
+6668J 621
+7KK7J 795
+46J56 465
+28228 985
+33J3J 343
+J28J6 76
+292T2 774
+K99K9 459
+2KTT5 147
+AJQ3K 836
+87JT7 744
+97KJ6 524
+82T2J 425
+KJJ43 200
+55KJ5 130
+Q7985 718
+777T7 846
+QT46J 864
+TAJ6A 520
+A666A 493
+75555 477
+37878 930
+TA882 306
+Q93Q9 793
+9JT99 954
+993T9 643
+28AK8 235
+KJ69T 228
+96869 102
+24884 403
+769AJ 867
+6J434 47
+6TTQ9 990
+8T7TT 748
+795AJ 753
+84JKA 629
+8J428 855
+JJ2J9 997
+TJ524 818
+26662 686
+567AA 219
+97997 275
+QQQ66 853
+JQ77Q 692
+66TTT 984
+95353 16
+8QQ7J 955
+22272 814
+8A868 616
+6Q2QQ 983
+KQKQQ 770
+JJ66J 69
+7KQJQ 505
+J9J97 23
+85ATA 986
+A64KA 89
+96669 684
+9Q538 414
+6AT62 427
+JJ956 415
+T24QQ 409
+3277A 28
+JA5TK 125
+2586Q 157
+K93QA 311
+AA3TJ 960
+34434 640
+8J448 977
+55333 267
+T3TT3 667
+55856 610
+J375Q 873
+344JQ 18
+38J2K 36
+QJ225 523
+656A6 313
+33J33 875
+2JQ4A 480
+AA4TA 3
+TT3KJ 668
+59996 933
+A5AQK 104
+AQ382 10
+56A64 487
+QQJA5 854
+666K6 402
+474AA 546
+QAQAQ 452
+ATQ32 171
+7A777 861
+Q4A9K 324
+39Q26 247
+29229 309
+2QQ2Q 450
+47424 394
+2A2JA 55
+7TAA9 687
+9JTK4 661
+KKK66 786
+99989 839
+59JK6 675
+3QTTT 455
+48TT6 780
+542K6 397
+79A56 471
+QQQQ3 903
+J2296 817
+AQ52K 194
+65A9K 842
+9998J 246
+2835K 662
+74444 437
+2754Q 685
+98J67 907
+8T8TT 134
+343Q7 406
+999T9 511
+59JQQ 240
+27KTT 973
+AAKA9 577
+3A223 840
+QK787 655
+K5977 754
+JATQ7 468
+6TT6A 464
+99JJ9 564
+2K242 320
+66766 223
+Q858Q 442
+55T22 658
+77QQ7 379
+44JJ5 648
+TK498 48
+9J4J2 580
+95945 957
+A64J8 385
+86666 242
+8AA88 150
+67877 77
+AA999 144
+J32J5 498
+777TT 938
+KJKKK 929
+72689 353
+684TA 970
+JK8JK 92
+56656 483
+TTTT3 363
+8T88K 868
+AKAAK 382
+42A7A 80
+44349 474
+37A7A 180
+2QAA2 976
+Q68K6 704
+3373J 141
+77666 279
+9TTTK 49
+36QT5 724
+5T6JT 751
+T257A 556
+TA44J 59
+AAATA 293
+KKJ2K 410
+7J64Q 871
+2AQQ4 269
+8777K 708
+7K42T 594
+22J22 775
+899K8 918
+53355 639
+44429 326
+7K777 944
+573J7 221
+T7A2Q 149
+92242 579
+5K7K6 63
+386QK 722
+JKQQQ 516
+KA6A7 8
+A9T28 633
+T4Q67 220
+KK233 962
+AJ73J 831
+KJ344 876
+22277 635
+99833 215
+46JT7 42
+QQQT3 88
+88445 947
+J7T55 935
+29J22 44
+5777J 178
+999TT 230
+J82TT 488
+K3K9T 336
+4T474 285
+J5T54 53
+KK7JK 433
+K3374 908
+55QTQ 95
+665J5 453
+35TQA 6
+J2QQJ 630
+6JK36 386
+743J5 292
+3Q9QQ 495
+4JJ44 344
+88285 534
+766J4 553
+QJ846 700
+AAAA8 263
+5655A 351
+K67T8 197
+3TA9A 460
+8T9T8 481
+TAJA9 526
+8822J 742
+4Q44K 625
+K6663 110
+AAA7A 32
+432KK 726
+KK288 540
+67677 527
+33882 693
+QQQ35 316
+J4Q4J 863
+6639J 898
+248QK 847
+AA99J 758
+T7QTT 383
+AA442 572
+JJJJJ 900
+3353T 297
+Q68A3 479
+222KK 339
+7J878 586
+9292J 38
+79QQQ 883
+87J73 276
+7488K 175
+5J59A 421
+67222 314
+9K9KJ 449
+JK447 528
+KKKAK 303
+A84A4 222
+K6KJA 273
+8T5QA 848
+33352 591
+AT833 617
+2AAAA 305
+3Q74K 555
+24K44 739
+3J342 925
+QJK65 356
+72333 807
+J2AAA 750
+K7779 554
+33J45 886
+79J96 895
+9T6Q3 413
+K3A4J 94
+4T525 974
+63333 418
+55KK5 829
+J4896 531
+J8T8J 118
+35435 741
+722Q3 513
+A3QAQ 72
+3J8A6 958
+T9QQ2 376
+QA7AQ 287
+9A555 348
+T559T 695
+4T774 999
+22253 68
+38838 772
+462QJ 112
+969K9 981
+Q55Q5 992
+J5555 14
+Q565Q 995
+755J5 510
+KJKK9 189
+J6T42 529
+2748K 241
+769T4 120
+7K5TJ 845
+Q2272 515
+KTKKK 60
+49J24 71
+TT2J2 844
+858J8 781
+42643 364
+TJ44J 448
+QQQQ9 504
+QQJQ6 37
+J7974 796
+T549Q 434
+398J7 137
+K6K55 161
+TKTQQ 476
+A9898 703
+6J9K3 808
+KK29J 201
+QQ9J9 736
+KKJKJ 712
+66KJK 486
+73777 82
+824T6 496
+78847 404
+JQQ22 441
+QQQQ4 694
+555Q8 776
+J7J7T 407
+43Q6K 91
+6T6K6 196
+J66J6 308
+54844 334
+K9T44 457
+K444K 135
+38343 860
+34323 735
+KKK5J 734
+4339J 541
+JJQJ4 707
+28222 972
+KJA53 676
+KKKK6 158
+8Q558 783
+T2TT2 34
+74J67 209
+5KKKK 945
+9TTTT 412
+66363 70
+9399J 858
+7J3TQ 589
+7K468 116
+3TA6Q 133
+42Q6T 396
+65886 557
+449J9 728
+8KT2J 446
+J8888 822
+2T266 927
+8955K 138
+QQQ5Q 943
+92272 318
+AA77J 1000
+8TT66 569
+T8AJ3 606
+AT98K 628
+34Q92 641
+75QK5 499
+8TJ93 155
+KK7K5 176
+JA859 21
+9K523 727
+K44JK 582
+2Q8AQ 942
+J5565 611
+888K8 265
+98982 747
+K6866 982
+883J3 538
+6K6J6 767
+7423J 2
+QTQQT 252
+4T4JT 812
+5TT28 599
+69766 440
+QJ777 136
+Q48J3 260
+QQQJQ 253
+7T994 989
+A4Q4T 93
+88K78 645
+JA2QJ 797
+55TJ3 151
+JKQ96 696
+99299 312
+7777J 126
+7437J 769
+2Q382 620
+2T5KK 298
+Q4JJ5 333
+8JJ88 874
+QK33T 52
+KTKTT 634
+A7298 811
+7J766 652
+JAA5A 966
+85385 702
+5JK35 369
+223J2 432
+AAA33 56
+3AA35 824
+29222 423
+6AA6A 212
+29228 551
+A22TT 996
+J423Q 289
+99J94 843
+A364K 592
+A4AAA 787
+96TA2 706
+Q3Q4Q 994
+9334A 887
+45555 857
+AJ6AA 893
+4J444 174
+9JQ9J 731
+9J964 143
+K44KK 429
+29JA8 159
+53523 359
+59Q23 522
+A3663 24
+53AAA 12
+T7982 5
+8Q888 140
+A36J9 928
+83668 961
+28J2J 435
+25Q42 659
+ATK7Q 185
+26855 462
+J4624 567
+97994 644
+57989 109
+KK883 417
+JT676 721
+T2222 51
+34TTA 679
+JTTJT 370
+67267 463
+A444Q 325
+J77TT 813
+24555 245
+9TKJ8 612
+48464 792
+35K33 366
+2A333 626
+64A57 583
+K3QJ6 43
+24K86 244
+28744 164
+589Q4 688
+A8888 896
+6J626 666
+65666 182
+J3QJ5 387
+QJK99 467
+59455 889
+3K555 330
+35K35 832
+A3KAA 106
+Q6JQ6 81
+KK2K2 838
+79999 828
+24A64 561
+47JK9 785
+77772 284
+9T7T6 765
+573Q5 934
+4Q479 431
+JJKAT 184
+799JA 596
+5QK5Q 411
+TJ522 911
+9A95A 87
+5Q82Q 988
+KTJJJ 294
+566J3 729
+7JA65 218
+99J59 901
+49K5T 301
+5QQQ5 478
+55552 39
+99AAA 210
+5665Q 649
+2J822 530
+QTTTQ 622
+998J8 374
+44222 600
+77J7J 259
+63888 782
+93763 458
+222TT 123
+22T44 821
+37KQQ 714
+J688A 127
+244QQ 581
+33K3K 852
+TJTJQ 738
+TT2TQ 399
+QTQ54 549
+7T543 131
+999A9 800
+T435T 788
+T3JQK 637
+T725Q 358
+59955 862
+2J227 905
+2T2TQ 99
+9K7T5 119
+987J7 296
+77J55 779
+KAJK8 711
+8TJA7 168
+666Q2 535
+9J2T8 255
+8J6J5 187
+9JK44 743
+55888 749
+8KQJ4 733
+T3399 570
+TJT97 236
+82597 890
+TAAA7 715
+AA797 268
+27AA8 17
+TTJAJ 317
+984JA 624
+56JA5 701
+68668 819
+75575 419
+66626 613
+4Q962 671
+9Q898 484
+95994 757
+T3T33 615
+3Q397 619
+89747 381
+6429A 922
+J6996 254
+Q3Q43 568
+48864 416
+678QA 388
+TT5TT 239
+69K6K 85
+7667A 512
+QJ9QQ 949
+AJA5J 789
+8JAJA 663
+88AAK 575
+3Q77J 295
+6T4Q6 856
+3856Q 539
+47747 466
+Q5T75 444
+39A69 90
+59956 299
+J3JQ2 869
+T65JK 941
+74488 166
+QAKTK 139
+88668 251
+KTTKK 190
+88989 290
+KKKK9 475
+Q7JQ6 607
+8K6T4 33
+37968 834
+48884 426
+T929T 902
+2KT54 217
+86439 66
+344J4 518
+46664 350
+J5392 537
+74TT4 445
+2J247 319
+K66AT 565
+39327 390
+Q6656 525
+75757 544
+88688 108
+486A6 978
+72KQ3 826
+277QQ 234
+KK399 948
+QJ828 791
+97697 211
+KKK6J 719
+AA5TT 937
diff --git a/2023/_input/day_07_part_01_sample.txt b/2023/_input/day_07_part_01_sample.txt
new file mode 100644
index 0000000..e3500c3
--- /dev/null
+++ b/2023/_input/day_07_part_01_sample.txt
@@ -0,0 +1,5 @@
+32T3K 765
+T55J5 684
+KK677 28
+KTJJT 220
+QQQJA 483
diff --git a/2023/_input/day_08.txt b/2023/_input/day_08.txt
new file mode 100644
index 0000000..050a8f4
--- /dev/null
+++ b/2023/_input/day_08.txt
@@ -0,0 +1,704 @@
+LRRRLRRRLRRLRLRRLRLRRLRRLRLLRRRLRLRLRRRLRRRLRLRLRLLRRLLRRLRRRLLRLRRRLRLRLRRRLLRLRRLRRRLRLRRRLLRLRRLRRRLRRLRRLRLRRLRRRLRLRRRLRRLLRRLRRLRLRRRLRRLRRRLRRRLRLRRLRLRRRLRLRRLRRLRRRLRRRLRRRLLRRLRRRLRLRLRLRRRLRLRLRRLRRRLRRRLRRLRRLLRLRRLLRLRRLRRLLRLLRRRLLRRLLRRLRRLRLRLRRRLLRRLRRRR
+
+DBQ = (RTP, NBX)
+NFX = (PXX, PLG)
+VBK = (BRV, DKG)
+BRS = (HLR, VBX)
+DDK = (SPR, TCR)
+FTS = (LJB, MDJ)
+BLH = (DFM, GGG)
+PCC = (GQR, RHD)
+QKN = (VVR, GBL)
+KHN = (FNB, LLT)
+HTD = (NPJ, BTL)
+FPL = (BRX, XQD)
+RCJ = (QKN, XPD)
+XRN = (RMQ, LQB)
+HGM = (VPV, SVR)
+RFG = (TLM, KPH)
+SSG = (QGC, KJV)
+LPA = (QQN, GNF)
+SVN = (VLM, BDX)
+VPF = (TTR, RNQ)
+VNK = (DSX, MCZ)
+KMS = (XNN, MTB)
+RLS = (NHX, CRT)
+VRS = (VBX, HLR)
+TVK = (MKG, NKB)
+CKH = (DFF, XPV)
+KBS = (LJC, PRS)
+JMT = (FPT, DLX)
+LRV = (QCD, RLF)
+TMM = (VPF, GKD)
+HKH = (PRS, LJC)
+GSM = (SVH, KRP)
+SLG = (PTL, SNJ)
+GVS = (DSN, CKH)
+QGC = (HKS, DFP)
+RFT = (VVQ, GMF)
+FDF = (JKV, JKV)
+MRL = (PKS, TKS)
+HBN = (BDX, VLM)
+CFB = (PPV, QVS)
+TFJ = (KGN, JND)
+HLB = (PFV, JXR)
+RFJ = (SKL, QCN)
+PQH = (KGN, JND)
+HGR = (FKL, XHR)
+CTB = (HNQ, HNQ)
+XMN = (CJV, LKQ)
+JVX = (FSS, CRC)
+SFH = (MXD, RHN)
+BRK = (QPL, DJB)
+HBX = (DSN, CKH)
+RFL = (VXB, FNF)
+GXP = (LHR, SMV)
+CHK = (NLQ, VCR)
+QPG = (HHL, KHB)
+VBC = (NFV, FST)
+QJF = (JXL, JJC)
+XKQ = (PCS, BSH)
+SKS = (SNN, QSN)
+GJJ = (VVG, XPR)
+DJP = (SJM, DNR)
+DQF = (MHG, BKZ)
+MSB = (BRX, XQD)
+PQR = (TLL, RVS)
+XGB = (RMT, HGF)
+HBD = (PFD, FDN)
+NSN = (RFJ, NJT)
+SNJ = (MVG, DBQ)
+NMV = (SKG, TDJ)
+PTN = (TNR, SSG)
+SBG = (CVH, LMJ)
+RDT = (SVQ, JTT)
+MRC = (BKF, QMJ)
+JKV = (CTB, CTB)
+CTX = (QHL, BDV)
+SQM = (DNR, SJM)
+MVG = (RTP, NBX)
+KKJ = (TQP, PST)
+QKX = (BRD, SFT)
+VFV = (NTL, VMQ)
+LXK = (SSL, MFR)
+HDH = (VPS, MJH)
+RTP = (CGJ, XJC)
+BXQ = (FLN, FLN)
+GKD = (TTR, RNQ)
+GPP = (SNN, QSN)
+GDQ = (JLS, TND)
+LTF = (GXP, TVB)
+GVB = (LSV, FRL)
+JCF = (HGR, GMX)
+VCR = (JTR, MCM)
+XJC = (DGP, XML)
+XKA = (SFC, CHQ)
+LJL = (VPX, PMS)
+CPH = (PCQ, QKX)
+VPV = (TFP, NJN)
+TDJ = (PRV, DBK)
+JGQ = (TPX, NMV)
+LJS = (GDQ, QPV)
+VHN = (CBJ, PFQ)
+JHT = (XHM, NRK)
+ZZZ = (HJS, LRV)
+KJV = (HKS, DFP)
+HNT = (XXT, KJT)
+RHD = (KQH, TMD)
+JKG = (HXJ, MGF)
+SPL = (TTB, STB)
+MBD = (CQK, NHH)
+TPX = (TDJ, SKG)
+HRC = (LBB, JLR)
+QHN = (JHT, THC)
+SPM = (DDG, MBK)
+MFG = (JBD, GSM)
+MHR = (PTN, HVB)
+RLF = (GMG, TDQ)
+XBQ = (KKN, QTN)
+GLB = (DHS, SXC)
+PRV = (PGC, NSK)
+SJD = (BXQ, GHF)
+THC = (XHM, NRK)
+GBL = (GGR, HTK)
+MDK = (JXX, DBD)
+NJT = (QCN, SKL)
+LLG = (KBL, LXK)
+RVS = (DDB, QRV)
+LHR = (LPL, TGJ)
+TBD = (NNB, CQH)
+DSN = (DFF, XPV)
+QQN = (HRV, PTT)
+XPP = (GSJ, RDT)
+CBJ = (JQL, RBX)
+RBX = (CNV, NKQ)
+DDG = (NBS, KTV)
+XNN = (TMC, GCG)
+DSX = (CGR, SGM)
+DFB = (RCJ, KJK)
+XTG = (RFG, XSD)
+PKQ = (DBD, JXX)
+XPD = (GBL, VVR)
+FFC = (JLR, LBB)
+GMG = (KFH, PTP)
+QHJ = (SHM, FKM)
+MXD = (XGB, LTX)
+SGM = (FTS, GXX)
+LTX = (RMT, HGF)
+RNQ = (SPL, DKH)
+NHF = (VXC, HRS)
+KFR = (JXR, PFV)
+NRP = (XNN, MTB)
+VDR = (LDL, JCP)
+FSS = (KXJ, GKL)
+QVS = (MKN, BLH)
+SNN = (SBM, PNH)
+VXB = (LLG, BHP)
+BPK = (QVS, PPV)
+SMV = (TGJ, LPL)
+CXF = (XKV, PVR)
+PGC = (NBJ, KCK)
+VLG = (DDG, MBK)
+FKL = (HFC, XPP)
+KFC = (XNM, CNR)
+FCC = (BRK, GLT)
+HQC = (JKV, JHQ)
+QQV = (CPG, HQD)
+VVG = (XGJ, XGJ)
+SVK = (HVH, HNJ)
+XQT = (LQX, HNT)
+JDB = (PXM, THR)
+JHR = (XRF, DHN)
+HRS = (TFJ, PQH)
+SVQ = (XHX, QNG)
+KGN = (FCV, SBH)
+GJX = (MFG, LMS)
+NBJ = (GVB, RMS)
+VQJ = (JPB, PDF)
+TKX = (JMT, LGM)
+FLL = (GTX, HKP)
+MFT = (FKM, SHM)
+JCP = (SSP, VMD)
+LPC = (KCD, JDB)
+XHR = (XPP, HFC)
+FKM = (DLL, XBQ)
+MGF = (NFX, MQS)
+JXJ = (MMP, CBT)
+DFP = (TGM, RHV)
+SSM = (NTC, TMT)
+DLX = (PXF, SBG)
+NNB = (TNT, MMF)
+QNG = (RHP, QBT)
+FLR = (CJK, QRL)
+RCP = (KKG, NTD)
+GJV = (SLG, DGN)
+FDN = (TBR, QDT)
+JTG = (RFT, PRC)
+LGM = (DLX, FPT)
+QDT = (CXV, SGD)
+HKP = (BLB, PCL)
+GXB = (MNH, GXT)
+QDS = (LTF, FDX)
+LMJ = (GJV, HVV)
+TDQ = (PTP, KFH)
+SGD = (HTT, PNR)
+XPV = (BPM, CPH)
+PTP = (MKL, KSP)
+DKG = (DKK, KNQ)
+QCN = (XTD, GQM)
+LSV = (GDK, VVD)
+MLG = (RLS, RKG)
+GMX = (FKL, XHR)
+QSN = (PNH, SBM)
+CHQ = (KSB, CXF)
+RHN = (LTX, XGB)
+LVX = (JSF, MLT)
+XHM = (FLR, QVK)
+NCJ = (CPG, HQD)
+MQV = (HBD, LDK)
+VVD = (QBV, FKF)
+QCD = (GMG, TDQ)
+GTH = (DLJ, DQF)
+KFH = (KSP, MKL)
+NFC = (PKQ, MDK)
+NCD = (FNB, LLT)
+MKG = (HNS, DDK)
+BTV = (KBS, HKH)
+QGL = (QTF, CVS)
+DDB = (DVF, HXV)
+PXF = (CVH, LMJ)
+NFV = (XMN, BQR)
+DGN = (SNJ, PTL)
+HHL = (PHC, QQJ)
+XPR = (XGJ, LVQ)
+PCQ = (BRD, SFT)
+MMT = (RDS, SRS)
+DMR = (GJM, BQS)
+QPL = (XNQ, CMN)
+PDF = (JBH, CTX)
+CVR = (STX, MBQ)
+LPL = (SFL, PHQ)
+FXX = (PNX, PQL)
+KLS = (NHG, CHF)
+NHX = (TMN, JLJ)
+NND = (QHN, XBR)
+JTT = (QNG, XHX)
+LML = (FDX, LTF)
+PCS = (LKV, LXX)
+SRV = (KCD, JDB)
+NSK = (NBJ, KCK)
+MRF = (NKP, JKG)
+VPX = (NSN, SMB)
+GFT = (FPL, MSB)
+DFM = (XKQ, PPQ)
+PPQ = (PCS, BSH)
+JJC = (JHR, RQG)
+JBH = (BDV, QHL)
+KNQ = (KNP, MRL)
+TBS = (NTD, KKG)
+JXL = (RQG, JHR)
+GKL = (MJC, QBM)
+BQR = (LKQ, CJV)
+DGP = (VNT, JRB)
+DKR = (VBJ, GVF)
+JXN = (BXD, XLT)
+TVG = (HGR, GMX)
+XSD = (TLM, KPH)
+RMT = (GXB, DPT)
+FRL = (VVD, GDK)
+PNX = (NCD, KHN)
+VGK = (CNR, XNM)
+MQB = (KSF, LJS)
+KDC = (MSB, FPL)
+GCD = (CXS, PCC)
+XML = (VNT, JRB)
+TBL = (GCV, HDH)
+BRV = (DKK, KNQ)
+JKS = (XXB, ZZZ)
+TMC = (MDQ, QJF)
+TNT = (NQJ, SSM)
+FLF = (XSD, RFG)
+JRB = (FDF, HQC)
+PTL = (DBQ, MVG)
+BGQ = (KFR, HLB)
+XTD = (VRS, BRS)
+QXX = (SJD, CSH)
+FRX = (BQS, GJM)
+PQL = (NCD, KHN)
+LKV = (PNK, DKR)
+HQS = (VVG, XPR)
+VPQ = (NTL, VMQ)
+THR = (CBV, CVR)
+FST = (BQR, XMN)
+DMD = (CVS, QTF)
+HXV = (RCP, TBS)
+STM = (RFX, BFR)
+JTR = (JTL, JXN)
+FLG = (PFQ, CBJ)
+CKM = (KFB, HTP)
+NCT = (KJK, RCJ)
+DKH = (STB, TTB)
+QGA = (CGR, SGM)
+XNQ = (HJM, MLG)
+RGF = (LFN, FGC)
+QBV = (VPJ, RMN)
+QKJ = (KFC, VGK)
+CSB = (FDL, FDL)
+HFK = (DHS, SXC)
+SVP = (NPJ, BTL)
+GGR = (XTG, FLF)
+XKV = (NDH, JXJ)
+BMR = (FRX, DMR)
+VVQ = (BFN, TVK)
+HJM = (RKG, RLS)
+RLK = (PDF, JPB)
+DCX = (HNQ, BRZ)
+TBG = (RTL, SML)
+RMS = (FRL, LSV)
+FCV = (STM, HTC)
+SPR = (TBL, JGG)
+BHP = (LXK, KBL)
+NPJ = (XLV, PQR)
+NKF = (TBD, DKP)
+PDK = (JTK, JTK)
+PFQ = (RBX, JQL)
+LBB = (SVP, HTD)
+GTX = (BLB, PCL)
+SBH = (HTC, STM)
+BFR = (RJN, BTN)
+TCR = (TBL, JGG)
+MQS = (PXX, PLG)
+FRG = (XXB, XXB)
+STX = (XQL, HGM)
+HNJ = (HBN, SVN)
+SSL = (RDL, NST)
+HJS = (QCD, RLF)
+KBL = (SSL, MFR)
+CXS = (RHD, GQR)
+DFD = (NFP, FCC)
+VBJ = (HFK, GLB)
+DKP = (NNB, CQH)
+QSK = (TKX, CQT)
+BNV = (JTK, GTH)
+NBH = (LVX, GQB)
+QBM = (VNC, VPK)
+DBD = (HHR, RVQ)
+DFF = (BPM, CPH)
+LQX = (KJT, XXT)
+FGC = (QKQ, QSK)
+PXM = (CBV, CVR)
+JHQ = (CTB, DCX)
+NJN = (BGQ, FBP)
+TLL = (DDB, QRV)
+XSN = (THS, KJQ)
+KXJ = (QBM, MJC)
+GSC = (TQG, QXX)
+QJP = (PQL, PNX)
+PHH = (MXD, RHN)
+SSC = (NQX, FCH)
+XDF = (NLQ, VCR)
+BRD = (MQV, FRQ)
+AAA = (LRV, HJS)
+PTT = (FFC, HRC)
+VKF = (BFG, TGQ)
+HHA = (FLG, VHN)
+CNR = (TQX, VDV)
+TGM = (FLL, TNV)
+GLT = (DJB, QPL)
+MBK = (NBS, KTV)
+JPB = (JBH, CTX)
+RHP = (SQM, DJP)
+CHF = (CLQ, JGQ)
+FTL = (PRC, RFT)
+SKL = (XTD, GQM)
+RBN = (SPM, VLG)
+HGF = (GXB, DPT)
+BQS = (NSP, BTV)
+XHX = (RHP, QBT)
+CGR = (GXX, FTS)
+BLB = (QJP, FXX)
+CRT = (JLJ, TMN)
+PLG = (SLC, PDD)
+HRV = (FFC, HRC)
+MCM = (JXN, JTL)
+JGH = (MFG, LMS)
+NSP = (KBS, HKH)
+MFR = (NST, RDL)
+GMF = (TVK, BFN)
+SML = (LJL, XFP)
+MPL = (RDS, SRS)
+QHP = (SPM, VLG)
+FCH = (GDC, XRN)
+NRQ = (FTL, JTG)
+HMB = (CRC, FSS)
+KPH = (BNH, SLK)
+SRS = (MQB, GCN)
+RQM = (TGQ, BFG)
+FLN = (CSB, CSB)
+BSH = (LKV, LXX)
+CRC = (KXJ, GKL)
+CJV = (XDF, CHK)
+CGJ = (DGP, XML)
+SFL = (GJJ, HQS)
+PMR = (VPF, GKD)
+QTN = (MMT, MPL)
+KJQ = (RLK, VQJ)
+PBJ = (LFN, FGC)
+BTL = (PQR, XLV)
+SBX = (KFC, VGK)
+QQJ = (PDK, BNV)
+BRZ = (GNF, QQN)
+JTL = (XLT, BXD)
+SKG = (PRV, DBK)
+RQG = (DHN, XRF)
+DRC = (SFC, CHQ)
+TJQ = (NQX, FCH)
+PKS = (TMM, PMR)
+TRP = (GVD, FBL)
+LKQ = (XDF, CHK)
+RTL = (XFP, LJL)
+PPV = (MKN, BLH)
+MTB = (GCG, TMC)
+FPT = (PXF, SBG)
+LDK = (FDN, PFD)
+TND = (PPX, SVK)
+VPK = (NHF, JDX)
+HTP = (NKF, RPV)
+PMS = (SMB, NSN)
+GGG = (XKQ, PPQ)
+DLL = (KKN, QTN)
+JXX = (HHR, RVQ)
+KSF = (QPV, GDQ)
+XQD = (FGK, BNJ)
+RJF = (CSB, KTM)
+GCN = (KSF, LJS)
+JKP = (LML, QDS)
+XFP = (VPX, PMS)
+DPT = (GXT, MNH)
+DKK = (KNP, MRL)
+NKB = (DDK, HNS)
+CJK = (GSC, GBQ)
+NLM = (LDL, JCP)
+VMD = (DFD, XFM)
+NBX = (XJC, CGJ)
+PRS = (NLM, VDR)
+RMQ = (FRG, FRG)
+XNM = (TQX, VDV)
+LJC = (VDR, NLM)
+PHQ = (GJJ, HQS)
+KXN = (KHB, HHL)
+BXD = (CKM, XVL)
+KFB = (NKF, RPV)
+NFS = (PRL, RFL)
+RJN = (SFV, RRG)
+GQM = (VRS, BRS)
+KQH = (VBC, BSJ)
+DNR = (BMR, LJQ)
+HHR = (LPC, SRV)
+DLJ = (MHG, MHG)
+SMB = (RFJ, NJT)
+RHV = (FLL, TNV)
+NTD = (HBX, GVS)
+VNT = (FDF, HQC)
+PRC = (GMF, VVQ)
+FBP = (HLB, KFR)
+KTM = (FDL, LRZ)
+TQP = (QGL, DMD)
+SBM = (QPG, KXN)
+QVK = (CJK, QRL)
+XRF = (RGF, PBJ)
+NDH = (CBT, MMP)
+GVL = (RTL, SML)
+LRZ = (VHN, FLG)
+CQH = (MMF, TNT)
+SLK = (TJQ, SSC)
+QBT = (SQM, DJP)
+FNF = (LLG, BHP)
+STB = (KMS, NRP)
+HVV = (SLG, DGN)
+RFX = (BTN, RJN)
+MKL = (GVM, LVP)
+VDV = (BPK, CFB)
+CBT = (GJX, JGH)
+PPX = (HVH, HNJ)
+NQJ = (TMT, NTC)
+MJH = (MHP, XQT)
+LTA = (KLS, BFV)
+CSH = (BXQ, GHF)
+HTK = (XTG, FLF)
+VNC = (JDX, NHF)
+BFG = (MRC, NKK)
+KKG = (GVS, HBX)
+PNK = (GVF, VBJ)
+XXB = (LRV, HJS)
+DVF = (TBS, RCP)
+PNR = (NCJ, QQV)
+QKQ = (CQT, TKX)
+TTR = (SPL, DKH)
+BTN = (RRG, SFV)
+VLM = (PHH, SFH)
+TQG = (SJD, CSH)
+MHP = (LQX, HNT)
+NQX = (GDC, XRN)
+TQX = (BPK, CFB)
+TVB = (LHR, SMV)
+MBQ = (XQL, HGM)
+HXJ = (MQS, NFX)
+DHN = (PBJ, RGF)
+BFN = (MKG, NKB)
+PVR = (JXJ, NDH)
+QRL = (GBQ, GSC)
+GJM = (NSP, BTV)
+KQV = (NHH, CQK)
+KNP = (TKS, PKS)
+PDD = (FND, JKP)
+GXT = (VKF, RQM)
+XDC = (FTL, JTG)
+MMF = (SSM, NQJ)
+BFV = (CHF, NHG)
+DHS = (PHX, PHX)
+VXC = (PQH, TFJ)
+XLV = (TLL, RVS)
+PXX = (SLC, PDD)
+GVD = (DRC, DRC)
+THS = (VQJ, RLK)
+DBK = (PGC, NSK)
+KHB = (PHC, QQJ)
+TKS = (PMR, TMM)
+SVR = (NJN, TFP)
+HNQ = (QQN, GNF)
+MKN = (GGG, DFM)
+KRP = (NFM, NFC)
+SHM = (XBQ, DLL)
+NTL = (NCT, DFB)
+NRK = (QVK, FLR)
+HXL = (DSX, DSX)
+KSB = (XKV, PVR)
+NKK = (BKF, QMJ)
+MHG = (KLS, BFV)
+PNP = (XBR, QHN)
+CLQ = (TPX, NMV)
+RSG = (XDC, NRQ)
+BPM = (PCQ, QKX)
+PHC = (PDK, BNV)
+TNR = (KJV, QGC)
+XQL = (VPV, SVR)
+MHV = (QTS, RSG)
+XBR = (THC, JHT)
+BDX = (PHH, SFH)
+TBR = (CXV, SGD)
+RVQ = (SRV, LPC)
+NFM = (PKQ, MDK)
+FBL = (DRC, QSZ)
+TLM = (BNH, SLK)
+NHH = (SKS, GPP)
+FKF = (RMN, VPJ)
+XVL = (HTP, KFB)
+NHG = (CLQ, JGQ)
+FGK = (NBH, KBX)
+VMQ = (DFB, NCT)
+LXX = (DKR, PNK)
+SMJ = (QGB, NFS)
+LVP = (KDC, GFT)
+QGB = (PRL, RFL)
+BRX = (BNJ, FGK)
+BDV = (MRF, RXX)
+SJM = (BMR, LJQ)
+GBQ = (TQG, QXX)
+JXR = (XJT, CVX)
+TMN = (XSN, PQM)
+CQT = (LGM, JMT)
+CPG = (QHP, RBN)
+BKZ = (BFV, KLS)
+VVR = (HTK, GGR)
+XFM = (NFP, FCC)
+CVH = (GJV, HVV)
+VPS = (XQT, MHP)
+MDJ = (QHJ, MFT)
+SNF = (QTS, RSG)
+NKQ = (HMB, JVX)
+PRL = (FNF, VXB)
+CMN = (MLG, HJM)
+JQL = (NKQ, CNV)
+QSZ = (CHQ, SFC)
+HLR = (MHV, SNF)
+RDL = (TBG, GVL)
+GVM = (KDC, GFT)
+KTV = (CKK, VBK)
+SLC = (JKP, FND)
+QHL = (MRF, RXX)
+KKN = (MPL, MMT)
+TNV = (HKP, GTX)
+QMJ = (TVG, JCF)
+BSJ = (NFV, FST)
+BNJ = (NBH, KBX)
+XXQ = (GCD, CMQ)
+TGQ = (NKK, MRC)
+SVH = (NFC, NFM)
+LQB = (FRG, JKS)
+GNF = (HRV, PTT)
+PFV = (CVX, XJT)
+JTK = (DLJ, DLJ)
+KSP = (LVP, GVM)
+PFD = (TBR, QDT)
+MLT = (KSQ, KKJ)
+GVF = (HFK, GLB)
+JLS = (PPX, SVK)
+TBK = (CMQ, GCD)
+LJB = (QHJ, MFT)
+KSQ = (PST, TQP)
+SXC = (PHX, TRP)
+TTB = (NRP, KMS)
+VBX = (MHV, SNF)
+CXV = (PNR, HTT)
+XCT = (NFS, QGB)
+JBD = (KRP, SVH)
+JDX = (HRS, VXC)
+BNH = (TJQ, SSC)
+HQD = (RBN, QHP)
+RXX = (NKP, JKG)
+NTC = (NND, PNP)
+QTF = (TVQ, MHR)
+JND = (FCV, SBH)
+RDS = (MQB, GCN)
+FDL = (FLG, VHN)
+TGJ = (SFL, PHQ)
+KBX = (GQB, LVX)
+GQR = (TMD, KQH)
+LMS = (JBD, GSM)
+VPJ = (SMJ, XCT)
+LVQ = (HXL, VNK)
+GDK = (QBV, FKF)
+KCD = (PXM, THR)
+JGG = (GCV, HDH)
+NFP = (BRK, GLT)
+SFV = (TBK, XXQ)
+KJK = (QKN, XPD)
+CVX = (SBX, QKJ)
+GCG = (QJF, MDQ)
+FNB = (VFV, VPQ)
+CBV = (STX, MBQ)
+PNH = (QPG, KXN)
+HFC = (GSJ, RDT)
+GHF = (FLN, RJF)
+CKK = (BRV, DKG)
+LFN = (QKQ, QSK)
+MNH = (VKF, RQM)
+MMP = (GJX, JGH)
+HVB = (SSG, TNR)
+TMD = (BSJ, VBC)
+QTS = (NRQ, XDC)
+TVQ = (PTN, HVB)
+HTT = (QQV, NCJ)
+PQM = (KJQ, THS)
+XJT = (QKJ, SBX)
+PST = (QGL, DMD)
+XXT = (MBD, KQV)
+PCL = (QJP, FXX)
+MJC = (VPK, VNC)
+QPV = (JLS, TND)
+JLJ = (PQM, XSN)
+BKF = (TVG, JCF)
+SFT = (FRQ, MQV)
+XGJ = (HXL, HXL)
+JSF = (KKJ, KSQ)
+RMN = (XCT, SMJ)
+RPV = (TBD, DKP)
+XLT = (CKM, XVL)
+DJB = (CMN, XNQ)
+KCK = (GVB, RMS)
+LLT = (VFV, VPQ)
+CVS = (MHR, TVQ)
+NBS = (VBK, CKK)
+LJQ = (DMR, FRX)
+HKS = (TGM, RHV)
+HTC = (BFR, RFX)
+LDL = (VMD, SSP)
+QRV = (HXV, DVF)
+NST = (TBG, GVL)
+GQB = (JSF, MLT)
+KJT = (MBD, KQV)
+GSJ = (SVQ, JTT)
+FDX = (TVB, GXP)
+SSP = (XFM, DFD)
+FRQ = (LDK, HBD)
+JLR = (HTD, SVP)
+HNS = (SPR, TCR)
+MCZ = (SGM, CGR)
+GCV = (VPS, MJH)
+MDQ = (JJC, JXL)
+RKG = (NHX, CRT)
+TMT = (NND, PNP)
+SFC = (KSB, CXF)
+CQK = (SKS, GPP)
+FND = (LML, QDS)
+HVH = (HBN, SVN)
+CNV = (HMB, JVX)
+CMQ = (CXS, PCC)
+NLQ = (JTR, MCM)
+GDC = (RMQ, RMQ)
+PHX = (GVD, GVD)
+NKP = (HXJ, MGF)
+RRG = (XXQ, TBK)
+TFP = (BGQ, FBP)
+GXX = (LJB, MDJ)
diff --git a/2023/_input/day_09.txt b/2023/_input/day_09.txt
new file mode 100644
index 0000000..9d29f6c
--- /dev/null
+++ b/2023/_input/day_09.txt
@@ -0,0 +1,201 @@
+11 22 50 101 188 336 587 1005 1681 2738 4336 6677 10010 14636 20913 29261 40167 54190 71966 94213 121736
+21 36 67 138 289 580 1107 2039 3695 6718 12488 24067 48215 99418 207551 431985 887001 1786840 3524357 6806068 12879661
+-3 -8 -18 -23 7 125 405 935 1805 3090 4828 6993 9463 11983 14123 15231 14381 10316 1386 -14519 -40041
+14 37 80 152 269 464 799 1391 2476 4556 8724 17371 35687 74731 157454 330081 683010 1388455 2767484 5408630 10376697
+9 26 47 70 93 114 131 142 145 138 119 86 37 -30 -117 -226 -359 -518 -705 -922 -1171
+18 21 23 33 62 128 270 570 1176 2313 4282 7511 12879 22831 44291 95151 217421 502706 1141416 2520254 5421671
+12 32 67 118 199 349 658 1318 2720 5638 11578 23448 46872 92806 182734 358789 702872 1371504 2657081 5091822 9618497
+9 6 3 0 -3 -6 -9 -12 -15 -18 -21 -24 -27 -30 -33 -36 -39 -42 -45 -48 -51
+23 35 49 65 83 103 125 149 175 203 233 265 299 335 373 413 455 499 545 593 643
+-4 6 25 57 125 281 621 1324 2746 5615 11391 22876 45183 87200 163715 298401 527896 907252 1517069 2472675 3935761
+26 41 68 126 243 468 895 1702 3225 6116 11675 22499 43656 84669 162684 307297 567628 1022355 1793558 3065372 5108609
+24 40 63 89 111 126 151 252 590 1488 3523 7647 15341 28806 51195 86890 141828 223880 343287 513157 750027
+19 42 87 159 271 453 768 1359 2570 5218 11158 24402 53256 114263 239229 487314 965149 1859258 3486793 6372809 11365101
+25 55 103 172 265 385 535 718 937 1195 1495 1840 2233 2677 3175 3730 4345 5023 5767 6580 7465
+-8 -14 -10 21 113 332 793 1673 3206 5635 9083 13296 17233 18603 13822 -270 -19860 -16600 102292 575559 1942033
+16 20 19 17 18 17 -16 -150 -479 -1029 -1496 -662 4765 22298 67451 170137 385142 808774 1604633 3042543 5556076
+-4 5 32 101 250 537 1053 1942 3428 5849 9698 15671 24722 38125 57543 85104 123484 175997 246692 340457 463130
+14 25 36 47 58 69 80 91 102 113 124 135 146 157 168 179 190 201 212 223 234
+3 17 42 95 204 412 791 1466 2658 4777 8639 15961 30439 60006 121440 249622 515976 1065048 2187011 4461602 9044549
+13 30 60 104 167 261 425 791 1736 4168 9999 22860 49112 99203 189414 344027 597935 999698 1615030 2530680 3858645
+8 3 8 38 122 314 703 1427 2704 4908 8748 15663 28639 53800 103334 200578 388367 742032 1388911 2537895 4528387
+19 39 67 103 152 245 485 1124 2687 6185 13510 28201 56948 112525 219425 424528 817145 1566841 2995983 5722097 10942918
+14 25 40 72 139 269 508 924 1602 2638 4171 6548 10805 19774 40299 87270 190470 405583 831138 1633672 3083991
+13 17 15 7 1 14 82 300 925 2601 6818 16814 39295 87635 187749 388877 783611 1545633 3001626 5769078 11020853
+6 14 31 68 152 332 677 1269 2199 3579 5602 8736 14254 25515 50769 108831 239856 524796 1119141 2309532 4606184
+-6 -8 -10 -12 -14 -16 -18 -20 -22 -24 -26 -28 -30 -32 -34 -36 -38 -40 -42 -44 -46
+1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19
+10 25 56 118 242 499 1052 2264 4900 10462 21687 43217 82423 150366 263003 443209 725410 1167383 1879426 3091880 5301500
+-6 -10 -14 -18 -22 -26 -30 -34 -38 -42 -46 -50 -54 -58 -62 -66 -70 -74 -78 -82 -86
+12 30 68 135 240 392 600 873 1220 1650 2172 2795 3528 4380 5360 6477 7740 9158 10740 12495 14432
+5 17 46 119 280 603 1219 2361 4441 8203 15071 27981 53341 105448 215932 452964 958713 2020081 4199340 8572007 17156162
+-3 9 41 101 201 368 671 1279 2584 5466 11866 25995 56767 122411 258659 532311 1062091 2048055 3808587 6818945 11735473
+-9 -12 -11 9 84 276 686 1496 3068 6127 12037 23146 43161 77603 134751 228397 385658 666731 1209878 2325572 4680619
+12 5 0 6 35 111 296 744 1812 4290 9860 21957 47283 98318 197280 382109 715188 1295667 2276424 3886880 6463083
+19 30 47 79 134 219 340 502 709 964 1269 1625 2032 2489 2994 3544 4135 4762 5419 6099 6794
+19 30 39 42 35 14 -25 -86 -173 -290 -441 -630 -861 -1138 -1465 -1846 -2285 -2786 -3353 -3990 -4701
+29 56 111 214 403 750 1389 2560 4678 8446 15055 26589 46956 84122 155309 298349 594811 1214084 2492511 5068032 10098537
+14 24 44 83 150 254 404 609 878 1220 1644 2159 2774 3498 4340 5309 6414 7664 9068 10635 12374
+0 12 38 78 132 200 282 378 488 612 750 902 1068 1248 1442 1650 1872 2108 2358 2622 2900
+1 -2 1 20 85 273 742 1762 3743 7287 13333 23515 40903 71332 125526 222171 391957 682364 1162577 1927342 3097777
+29 52 86 134 205 319 525 953 1928 4181 9199 19763 40730 80122 150592 271344 470591 788642 1281716 2026588 3126179
+6 1 5 27 76 161 291 475 722 1041 1441 1931 2520 3217 4031 4971 6046 7265 8637 10171 11876
+12 18 28 60 153 382 879 1873 3777 7365 14092 26610 49518 90349 160737 277617 464186 750188 1170876 1763744 2561807
+18 38 83 164 295 500 825 1364 2318 4127 7753 15248 30822 62765 126856 252459 493574 948924 1797907 3362904 6212525
+3 12 39 96 203 394 744 1437 2910 6140 13210 28435 60622 127613 265379 546130 1114273 2257756 4549501 9126710 18237713
+16 26 34 55 131 354 908 2145 4710 9724 19034 35580 64081 112620 196475 346901 629732 1181822 2277550 4442729 8638775
+6 20 42 72 110 156 210 272 342 420 506 600 702 812 930 1056 1190 1332 1482 1640 1806
+10 20 26 25 23 48 162 477 1189 2653 5531 11054 21448 40583 74913 134784 236196 403114 670432 1087703 1723757
+25 42 61 88 144 284 635 1454 3202 6625 12828 23323 40027 65181 101156 150107 213431 290980 379975 473562 558946
+24 42 61 88 153 323 724 1581 3300 6641 13067 25401 48981 93572 176374 326556 591848 1047836 1810729 3054502 5033465
+4 -3 -14 -35 -62 -52 122 739 2331 5841 12909 26479 52204 101750 200422 404261 837242 1769925 3781256 8082585 17149378
+-3 -2 7 37 105 231 439 754 1195 1792 2713 4692 10139 25658 67311 171008 412097 940862 2044571 4252387 8507381
+13 37 69 109 170 299 622 1434 3369 7714 16983 35950 73462 145522 280356 526465 965021 1728403 3027193 5188571 8709770
+12 18 42 109 272 627 1327 2598 4775 8401 14467 24916 43589 77856 141250 257507 466510 832740 1456952 2491919 4163222
+21 34 53 87 150 265 477 875 1630 3080 5943 11836 24461 52162 113223 246648 534099 1144954 2429521 5111477 10680048
+12 13 14 11 14 65 260 775 1896 4053 7858 14147 24026 38921 60632 91391 133924 191517 268086 368251 497414
+20 24 30 56 126 280 611 1340 2945 6375 13404 27216 53374 101453 187916 341565 614782 1108250 2026798 3804732 7379586
+17 26 47 104 230 466 864 1495 2473 4029 6712 11885 22900 47846 105887 241485 555089 1266432 2839213 6216114 13244090
+11 14 16 26 54 108 199 365 743 1750 4476 11446 27990 64605 140957 292630 582475 1119546 2090232 3808390 6794110
+-6 1 30 94 216 455 962 2083 4538 9727 20246 40738 79256 149377 273378 486867 845354 1433349 2376686 3858894 6142568
+-2 -8 -13 1 78 314 897 2161 4654 9220 17095 30017 50350 81222 126677 191841 283102 408304 576955 800449 1092302
+11 27 54 94 158 284 582 1332 3171 7414 16561 35052 70364 134643 247321 439752 764107 1311085 2245200 3873674 6777042
+6 4 17 54 134 300 634 1269 2403 4342 7649 13589 25311 50743 109257 246239 563539 1280662 2853602 6198756 13103411
+7 26 51 92 173 332 621 1106 1867 2998 4607 6816 9761 13592 18473 24582 32111 41266 52267 65348 80757
+7 10 22 59 164 436 1073 2427 5064 9815 17807 30500 49865 79073 124498 200560 340061 614336 1169916 2291673 4506810
+15 32 50 77 132 252 500 983 1914 3793 7840 16898 37180 81584 176133 373039 778241 1610661 3330093 6910771 14417574
+14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6
+-2 -10 -23 -27 17 189 639 1644 3713 7762 15380 29203 53406 94313 161112 266646 428232 668438 1015723 1504817 2176687
+6 15 45 110 241 513 1098 2356 4976 10179 19995 37626 67907 117877 197472 320352 504874 775223 1162713 1707270 2459109
+3 11 29 61 121 246 524 1144 2490 5336 11267 23587 49262 103059 216332 455562 961106 2027142 4264082 8922954 18531832
+-4 6 40 122 287 595 1163 2233 4316 8490 17003 34479 70315 143397 291206 586947 1170844 2305779 4474156 8544619 16058939
+14 22 36 82 198 431 834 1463 2374 3620 5248 7296 9790 12741 16142 19965 24158 28642 33308 38014 42582
+15 34 77 168 348 680 1251 2178 3643 6021 10250 18772 37745 81975 185499 423606 957398 2121479 4591530 9694803 19967229
+15 32 73 153 300 580 1131 2200 4186 7719 13864 24663 44477 83071 162312 330185 689561 1456762 3080211 6478977 13515986
+8 23 43 64 87 126 230 542 1426 3703 9058 20729 44688 91697 180910 346222 647728 1193456 2183213 4001351 7416521
+0 4 15 49 143 368 842 1748 3370 6168 10921 18975 32641 55796 94748 159434 265028 434044 699027 1105933 1718307
+-6 -13 -22 -28 -8 92 373 1013 2336 4966 10141 20303 40137 78302 150159 281801 515522 916345 1578080 2625186 4202882
+20 41 82 165 328 638 1223 2336 4464 8495 15956 29335 52500 91228 153857 252074 401852 624549 948182 1408889 2052592
+-3 1 13 32 56 82 109 149 263 663 1957 5662 15170 37424 85645 183547 371585 715901 1320765 2345452 4026652
+18 39 83 162 292 491 787 1249 2053 3594 6654 12635 23865 43984 78416 134932 224308 361081 564405 859008 1276250
+13 32 71 153 314 598 1062 1802 3021 5184 9343 17767 35078 70174 139314 270848 512197 939824 1673087 2893029 4867338
+21 32 57 122 264 538 1046 2002 3849 7446 14345 27180 50192 89916 156058 262592 429109 682452 1058673 1605350 2384304
+7 20 52 124 278 602 1267 2576 5025 9376 16742 28684 47320 75446 116669 175552 257771 370284 521512 721532 982282
+21 42 76 132 228 401 725 1347 2575 5088 10399 21828 46515 99562 212449 449720 940981 1940010 3929898 7803416 15162194
+20 46 86 139 202 275 368 515 822 1619 3865 10107 26592 67709 165037 385320 865408 1878792 3959720 8129911 16303870
+16 27 38 49 60 71 82 93 104 115 126 137 148 159 170 181 192 203 214 225 236
+11 3 -13 -36 -61 -66 23 409 1590 4712 12293 29636 67446 146443 305139 612443 1187397 2229153 4061303 7195900 12423989
+12 27 53 112 240 488 927 1659 2841 4749 7953 13767 25336 50140 105559 230882 512545 1135843 2488238 5360444 11327295
+14 16 20 39 110 308 760 1659 3278 5984 10252 16679 25998 39092 57008 80971 112398 152912 204356 268807 348590
+5 28 64 123 221 379 626 1012 1643 2757 4868 9014 17155 32778 61778 113697 203417 353418 596728 980709 1571841
+22 50 93 151 224 312 415 533 666 814 977 1155 1348 1556 1779 2017 2270 2538 2821 3119 3432
+15 21 27 33 39 45 51 57 63 69 75 81 87 93 99 105 111 117 123 129 135
+5 6 21 72 200 470 976 1846 3247 5390 8535 12996 19146 27422 38330 52450 70441 93046 121097 155520 197340
+-3 7 37 100 210 382 632 977 1435 2025 2767 3682 4792 6120 7690 9527 11657 14107 16905 20080 23662
+13 38 74 123 190 285 428 660 1080 1973 4187 10083 25651 64792 157351 363294 796503 1663072 3320784 6368699 11778556
+26 43 74 146 312 660 1320 2469 4334 7193 11374 17252 25244 35802 49404 66543 87714 113399 144050 180070 221792
+12 22 40 71 128 236 436 792 1412 2515 4618 8986 18586 39920 86324 183759 381205 770538 1527573 3001727 5916185
+26 47 82 142 258 497 977 1877 3438 5951 9728 15052 22102 30849 40919 51419 60722 66207 63950 48362 11770
+15 38 75 143 269 502 939 1765 3307 6102 10979 19155 32345 52886 83875 129321 194311 285190 409755 577463 799653
+11 32 68 125 211 337 514 747 1027 1326 1624 2067 3507 8955 26942 78497 210491 519548 1192684 2573409 5265331
+24 37 48 71 144 348 834 1856 3815 7348 13572 24760 46057 89453 182286 384291 819970 1737271 3609800 7308773 14383550
+14 23 39 78 177 399 844 1675 3168 5795 10349 18120 31131 52443 86538 139789 221026 342207 519203 772706 1129269
+23 44 89 176 338 646 1255 2498 5067 10332 20858 41185 78936 146312 262020 453659 760559 1237028 1955911 3012302 4527174
+3 15 38 75 127 194 286 453 846 1825 4138 9209 19602 39808 77728 147795 277949 525235 1009526 1983071 3967025
+15 30 69 145 282 530 989 1854 3502 6651 12630 23808 44239 80589 143420 248915 421137 694924 1119531 1763139 2718360
+11 27 42 64 120 271 629 1380 2826 5468 10161 18381 32653 57198 98866 168431 282333 464961 751580 1192014 1855206
+29 43 70 129 248 475 897 1667 3039 5411 9376 15781 25794 40979 63379 95607 140945 203451 288074 400777 548668
+1 8 15 30 78 214 550 1305 2887 6016 11897 22452 40620 70734 118984 193975 307389 474760 716371 1058282 1533498
+17 41 75 133 254 512 1026 1970 3583 6179 10157 16011 24340 35858 51404 71952 98621 132685 175583 228929 294522
+5 7 15 34 82 210 528 1237 2667 5321 9925 17484 29344 47260 73470 110775 162625 233211 327563 451654 612510
+9 16 38 85 173 327 584 996 1633 2586 3970 5927 8629 12281 17124 23438 31545 41812 54654 70537 89981
+1 -3 -7 -11 -15 -19 -23 -27 -31 -35 -39 -43 -47 -51 -55 -59 -63 -67 -71 -75 -79
+-6 -6 -4 -2 1 9 19 -2 -157 -686 -2078 -5248 -11782 -24199 -46065 -81592 -134032 -201694 -269728 -294886 -179233
+5 -4 -19 -31 -22 49 290 976 2741 6904 15972 34367 69464 133185 244846 437063 769021 1356724 2440635 4532113 8719286
+-9 -15 -22 -30 -39 -49 -60 -72 -85 -99 -114 -130 -147 -165 -184 -204 -225 -247 -270 -294 -319
+0 1 6 29 100 285 721 1673 3624 7419 14520 27531 51400 96251 183925 362553 737926 1539316 3255458 6913378 14648222
+13 10 3 -8 -23 -42 -65 -92 -123 -158 -197 -240 -287 -338 -393 -452 -515 -582 -653 -728 -807
+0 -2 -4 -6 -8 -10 -12 -14 -16 -18 -20 -22 -24 -26 -28 -30 -32 -34 -36 -38 -40
+-1 4 27 78 167 304 499 762 1103 1532 2059 2694 3447 4328 5347 6514 7839 9332 11003 12862 14919
+10 15 18 10 -22 -95 -230 -452 -790 -1277 -1950 -2850 -4022 -5515 -7382 -9680 -12470 -15817 -19790 -24462 -29910
+18 21 33 70 152 313 627 1261 2572 5273 10721 21464 42397 83370 165177 333175 687614 1449557 3100549 6670918 14319238
+8 7 14 40 90 165 266 398 572 816 1245 2329 5694 16230 47262 132668 354216 900957 2193364 5132858 11584554
+13 20 32 47 71 141 365 985 2469 5638 11834 23135 42623 74711 125535 203417 319405 487896 727348 1061087 1518215
+30 46 75 130 225 370 573 870 1409 2614 5458 11897 25586 53148 106542 207529 395928 744358 1383557 2544244 4623943
+15 27 57 124 274 607 1320 2775 5618 11006 21046 39620 73887 136979 252876 465407 855217 1572073 2896147 5352524 9920440
+7 9 29 77 161 283 426 538 541 430 583 2482 10151 32754 88968 213957 470027 962343 1861441 3434675 6089205
+10 31 65 131 265 526 999 1797 3072 5055 8157 13177 21679 36618 63315 110903 194390 337511 576569 965495 1582389
+13 16 34 83 180 349 638 1147 2067 3730 6670 11695 19970 33111 53290 83351 126937 188628 274090 390235 545392
+2 2 2 15 80 277 753 1775 3836 7847 15459 29588 55294 101364 183419 330383 598182 1098304 2055404 3918961 7571084
+16 39 76 127 192 271 364 471 592 727 876 1039 1216 1407 1612 1831 2064 2311 2572 2847 3136
+10 15 39 91 175 286 406 500 512 361 -63 -903 -2339 -4592 -7928 -12662 -19162 -27853 -39221 -53817 -72261
+15 31 58 112 233 506 1095 2293 4607 8933 16950 32011 61094 118897 236109 475677 964419 1954471 3943402 7909886 15774667
+-10 -9 8 64 190 420 795 1380 2306 3879 6858 13112 27064 58706 129697 285481 619194 1318885 2761550 5702764 11664186
+10 7 12 49 158 396 843 1621 2932 5113 8690 14389 23032 35214 50629 66897 77750 70475 22600 -102039 -357478
+21 42 75 134 253 506 1037 2109 4193 8130 15411 28632 52193 93322 163517 280511 470877 773402 1243371 1957914 3022581
+15 16 29 72 179 422 938 1960 3855 7176 12739 21740 35931 57878 91328 141716 216847 327792 490041 724960 1061603
+24 39 53 72 124 281 704 1728 4012 8788 18254 36177 68823 126453 225892 395218 682628 1173313 2021135 3506626 6140098
+7 31 70 122 186 265 371 536 833 1411 2548 4726 8732 15789 27721 47156 77771 124583 194290 295666 440014
+11 25 50 95 179 351 724 1535 3267 6917 14578 30634 64052 132494 269255 534337 1031255 1931381 3507686 6179533 10569573
+13 18 32 78 186 385 700 1171 1915 3264 6044 12124 25472 54119 113664 233265 465465 901710 1696040 3100186 5514198
+-6 0 25 93 252 578 1188 2274 4170 7462 13142 22796 38838 64954 107417 179222 311993 587272 1213186 2702991 6275339
+10 17 42 106 260 607 1338 2790 5545 10621 19880 36930 69098 131634 256413 509429 1024928 2069981 4162858 8283326 16235004
+22 41 66 111 203 382 715 1351 2658 5497 11702 24849 51411 102410 195691 358957 633718 1080321 1784242 2863835 4479747
+0 5 14 33 72 148 300 620 1304 2727 5546 10835 20256 36270 62392 103494 166160 259097 393606 584117 848792
+24 37 64 128 259 506 966 1834 3478 6543 12088 21760 38009 64348 105662 168570 261844 396889 588288 854416 1218127
+14 32 67 127 221 375 675 1356 2971 6708 14994 32661 69188 142923 288788 571846 1110340 2113488 3941533 7198411 12871031
+13 11 -1 -26 -53 -40 122 680 2156 5620 13245 29427 62996 131484 269244 542818 1080071 2125557 4145563 8025784 15437929
+8 13 21 35 65 145 367 957 2433 5900 13561 29580 61566 123222 239213 454176 849182 1571063 2883077 5249689 9474135
+4 14 23 31 41 57 82 116 154 184 185 125 -41 -373 -948 -1862 -3232 -5198 -7925 -11605 -16459
+29 44 75 141 260 450 735 1157 1807 2912 5050 9604 19591 40983 84544 168055 318771 576690 1002417 1702999 2913276
+8 14 37 105 265 597 1241 2451 4713 9004 17324 33696 65888 128149 245246 458014 830454 1458098 2476863 4070891 6476867
+20 39 80 170 348 672 1241 2251 4119 7733 14941 29513 59044 118686 238351 476442 945926 1863952 3646472 7088027 13699400
+16 36 69 114 171 255 430 875 2004 4681 10598 22918 47325 93668 178435 328345 585400 1013794 1709131 2810458 4515671
+8 22 39 68 142 343 850 2030 4599 9887 20258 39779 75325 138500 249171 442346 782208 1391597 2514461 4647009 8807890
+9 21 40 66 99 139 186 240 301 369 444 526 615 711 814 924 1041 1165 1296 1434 1579
+12 11 16 43 129 357 909 2164 4856 10302 20700 39476 71617 123850 204397 321831 482252 683565 905040 1089529 1114665
+26 52 91 147 230 373 674 1382 3056 6836 14883 31102 62426 121329 231036 436371 825686 1573308 3018011 5801885 11106502
+25 42 63 87 119 181 330 683 1449 2968 5757 10563 18423 30731 49312 76503 115241 169158 242683 341151 470919
+-1 11 39 91 172 280 405 547 798 1587 4286 12545 35006 90518 217787 492817 1059981 2186811 4359661 8448767 15988948
+0 2 20 72 183 385 717 1225 1962 2988 4370 6182 8505 11427 15043 19455 24772 31110 38592 47348 57515
+10 14 31 66 121 195 284 381 476 556 605 604 531 361 66 -385 -1026 -1894 -3029 -4474 -6275
+5 6 5 2 -3 -10 -19 -30 -43 -58 -75 -94 -115 -138 -163 -190 -219 -250 -283 -318 -355
+6 3 0 -3 -6 -9 -12 -15 -18 -21 -24 -27 -30 -33 -36 -39 -42 -45 -48 -51 -54
+9 22 43 79 148 279 512 898 1499 2388 3649 5377 7678 10669 14478 19244 25117 32258 40839 51043 63064
+14 26 58 137 320 723 1574 3299 6654 12922 24213 43964 77893 136038 237353 420103 764857 1443773 2822859 5667790 11546877
+13 33 62 96 134 191 331 740 1864 4640 10849 23619 48103 92352 168396 293537 491847 795851 1248360 1904402 2833180
+12 30 69 152 310 574 970 1538 2413 4038 7647 16285 36846 83927 186723 400716 826510 1638778 3128829 5764650 10272266
+27 55 103 188 344 644 1241 2432 4749 9081 16831 30112 51986 86750 140273 220388 337343 504315 737991 1059220 1493740
+5 14 49 131 291 579 1081 1949 3454 6077 10658 18628 32354 55632 94368 157492 258155 415264 655415 1015289 1544581
+16 25 35 65 145 325 694 1415 2801 5486 10783 21367 42473 83857 162854 309090 572122 1035450 1846272 3285211 5935131
+-3 -5 -7 -9 -11 -13 -15 -17 -19 -21 -23 -25 -27 -29 -31 -33 -35 -37 -39 -41 -43
+14 35 81 177 367 726 1371 2465 4218 6921 11125 18228 32007 62108 131326 289946 643046 1401647 2978197 6165267 12470799
+8 15 33 71 152 325 681 1375 2669 5037 9424 17853 34772 69892 143869 299127 619536 1264752 2528131 4931762 9378966
+25 45 85 167 329 638 1205 2203 3905 6792 11838 21167 39403 76205 150702 298825 584881 1119135 2083667 3769359 6627549
+-2 0 9 35 94 212 429 803 1414 2368 3801 5883 8822 12868 18317 25515 34862 46816 61897 80691 103854
+19 40 70 123 236 482 1000 2066 4237 8616 17319 34283 66661 127274 239084 443728 818448 1510615 2809386 5296041 10160917
+7 16 38 90 216 514 1187 2625 5520 11014 20893 37896 66360 113757 194327 337154 602913 1116448 2126716 4111930 7956532
+4 14 34 70 132 250 516 1167 2724 6202 13406 27328 52660 96438 168832 284097 461700 727638 1115962 1670522 2446948
+14 36 76 136 225 371 637 1157 2232 4566 9794 21585 47831 104806 224753 469193 951410 1873108 3582208 6661186 12058253
+-6 -10 -3 38 158 451 1098 2418 4949 9599 17939 32768 59225 107100 195878 365869 702114 1383254 2775705 5604310 11243202
+22 39 72 134 236 381 561 762 989 1348 2284 5207 14004 38445 101446 253929 604340 1376121 3018100 6414308 13278664
+4 6 5 2 -4 -8 15 123 405 939 1670 2149 1051 -4637 -20898 -58612 -136342 -284236 -549349 -1002740 -1748754
+-4 -5 -3 8 34 75 120 140 66 -281 -1381 -4475 -12559 -32307 -77351 -173027 -361540 -703685 -1267491 -2083506 -3028168
+9 4 12 44 118 267 553 1097 2146 4229 8522 17669 37517 80544 172215 362114 742487 1477802 2850088 5326146 9654208
+17 23 26 37 79 184 390 738 1269 2021 3026 4307 5875 7726 9838 12168 14649 17187 19658 21905 23735
+12 26 49 79 117 169 256 451 984 2506 6696 17551 43942 104382 235498 506568 1043976 2072142 3982463 7450843 13640335
+15 34 56 82 124 208 374 688 1297 2573 5404 11698 25170 52483 104814 199918 364771 638892 1078480 1761562 2794440
+9 13 29 72 163 329 603 1024 1637 2493 3649 5168 7119 9577 12623 16344 20833 26189 32517 39928 48539
+11 12 12 27 98 315 848 1986 4187 8141 14850 25749 42971 70098 114360 192690 347176 681931 1446476 3216825 7277259
+29 57 100 164 258 407 683 1269 2597 5657 12677 28540 63547 138465 293220 601110 1191052 2281288 4229680 7609776 13332357
+3 15 55 149 343 708 1356 2489 4511 8241 15273 28537 53123 97438 174774 305373 519083 858707 1384155 2177517 3349183
+3 3 7 13 9 -25 -108 -242 -389 -441 -183 751 2929 7179 14654 26904 45955 74395 115467 173169 252361
+15 26 56 127 281 584 1129 2046 3528 5878 9573 15327 24116 37104 55380 79382 107845 136066 153230 138487 55411
+13 22 49 101 191 360 717 1502 3192 6700 13762 27667 54560 105638 200664 373344 679247 1207098 2094439 3548833 5875981
+11 20 43 83 153 297 621 1327 2748 5395 10057 18063 31950 57011 104535 197976 383721 748402 1444527 2725143 4985639
+7 8 7 4 -1 -8 -17 -28 -41 -56 -73 -92 -113 -136 -161 -188 -217 -248 -281 -316 -353
+13 15 17 28 66 150 299 564 1148 2722 7142 18944 48283 116441 265722 576554 1196015 2383889 4584847 8538556 15443576
+1 17 45 101 221 470 955 1843 3398 6089 10899 20116 39189 80859 174090 383047 846864 1861718 4047185 8676465 18316948
+-3 0 10 26 60 152 385 900 1911 3720 6732 11470 18590 28896 43355 63112 89505 124080 168606 225090 295792
+-5 -11 -21 -35 -53 -75 -101 -131 -165 -203 -245 -291 -341 -395 -453 -515 -581 -651 -725 -803 -885
+
diff --git a/2023/_input/day_10.txt b/2023/_input/day_10.txt
new file mode 100644
index 0000000..9037f75
--- /dev/null
+++ b/2023/_input/day_10.txt
@@ -0,0 +1,141 @@
+F-|-J7F7F7F-7F7F--7-L|-L7777.FFL-|.|.FF-FF7FFFFF7--F-J7.|-FF77|-F|777-F7.F7FF|-J7|-7.FFJ77FL.7-|-|7.|.77|-F-|-F|-FL.F77.FF-77|7.7--7--7FJ--7
+|7LJ7.F-JLJ7L7--7F77.|LLJ|LF7|.LLJ-|7L|FJLF77L-FJ7FJ.LFF|7L-LLF-LJF777||7L-F7LLLLJ7|L7||F-J|-|.J.F7FF7F7|J|F|-FJLF.FLL|7J|FF-7-FJ7J|J.F7L|LJ
+L|J.7.L-J7FJ--..F-J|-7-|.J|LL-J.F|J|-77L|.LL7J||FJ7|.F--J7-J|7.LJJJJFFJL7JF||7.||-LJ-F7-|FFJ-|77.|L7||||7F-LJF|L7J7FF|JL7L7JJL-|---|7-JJ-FJ7
+LJ.L-|--JF7J|LF7|L-7.|FFJJ-.|JL7JF7F7F7777F-JFFJJLLJFL-J-|.FLJ-7|FF7FL7FJF7||F7FF-J7F||F7-7L7L|7.L7||LJ|.LJ|FFJFF7F7FLLJLJ||LL-J7.L|7LJJFJF-
+.L7J7L7JJF|-||||7LJ|LFL7J-LL|7-|-.F|LJ|F7F7JF|7J7.FFJ|-JF-7F7.F77FJ|F7||FJ||LJL-7.FFFJ|||F|7|-JFF7|||F7|7--J||.JJFFF7J7.JJL-.L7L---LF7|J|-|J
+.||||-7FF---J--LJ-F|F|JL|.|.|.F||.-L-7LJLJL7-JJJ--F7FF7-|LFJL-JL7L7||||||FJL-7F-JFJJL7LJL7F--7JFJLJLJ|LJJ-FF|--J.J-L-7F7J.L7|.J.F||FJ--.|.L-
+.-7-J.L7J7.F|JLLJFL--L7FLFL---FJ-7L||L7F---JJ-J.||||FJ|F-7|F---7L-J||||LJL--7|L--7LFFL7F-J|F-J.L--7F-JF77.F.|FF-LJL|LL7|.FL|LJ--7-7J|..----J
+|JJJLF.L.--|-FJ7..LLF-7FL7|LJF7J-F-7F7|L--7J.F.FFFJ||FJL7|LJF--JF-7LJ||F----J|F--JF7F-J|JFJ|||-F7FJ|7L||7-J-F-|7|J|LF-JLF-7|-7J.F-J-|F|J.L|.
+|J||7L-J.|FLF-FJJ-7LJF|J.J|-.7|F-L7LJLJF--JF-7-||L7|||F7||F7L7F-JJL-7LJL-7FF7||F--J|L-7|FJFJFF-J||FJ7L|L7.L7L7.F|.L-F-|7L-JJ.F7--7L-|-|-7.|F
+|--7LJ.|FF7F--JJJ.F.FLJL|-|JFF-|J7L---7L-7||FJJLLFJLJLJLJLJ|-LJF7.F-JF---JFJLJLJF7FJF7||L7|F7L-7||L7F7L7|7FJ77-F7-|J|FF-JJ|7FF--J|.L7FL7J.|J
+FJFJ|.|L--L-LFJJ.L7-JF|LL.L.7JLJ.FFF7FJF-JFJL7JFLL-7F7F7F-7L7F-JL-JF7L7F7-L7F---JLJFJ|||FJLJL7FJLJFJ|L-JL7J7.|-F|F7|LFJ||J|FF7.F7J77JFF|F-J|
+|.JJ|FFJ.FL7L7J|FL-.FJJ|F--7-.J..LFJ|L7L7FJF-J.7JF-J|LJ|L7L-JL---7FJL7LJ|F7|L-7F7F7L7||LJF---JL7F-J|L7F7FJJFF|-JL7L|J|F-JF--L|F7|LF|7J||7.F7
+L|-F-FJ7-7.L7L7F7-LJ7..-JJ-F7JFF|.|FJL|FJL7||F77.L--JF-JFJ7F7.F--J|F7L-7LJLJF-J|LJ|FJ||F-J.F7F7|L-7F-J|LJF77.||--L-L.LJJL|FL|L777.LJJ-JJ7-||
+.LFJLJJ7FL7J|FJ-L77|JF-L7F7.F7FF7FJL7FJL7FJL7|L-7F7F7L7FJF7|L7L---J||F-JF---JF-JF7||FJ|L--7|||||F-JL-7L--JL7-L7.LF.L|.|.FLL7J-LL-7LJLFJLF.L|
+FJJ7F---7J||JLLLJ|FJ7.LJ77FFF-7||L7FJL-7||F7||F-J||||FJL-J||FJF----J|L-7|F7F7L--J||||FJF--J|LJLJL7F7FJF----JJ||7.F77F.F-L.|7J7LJ.|.|LL|LLJ||
+77.FLJ|.F.FL7JJ|FLL7F|FL|JL-L7LJL-J|F7FJLJ||LJL7FJ||LJF---J||.L7F7F7L7FJ||LJL--7F||||L7L7F7L-7F-7|||L7L----7F7-F7||FJ.7.J-7|L7.|F7F-..|LLLLL
+|7--JLL---|J.L---7|F-JF-7F7..L----7|||L-7FJL---JL7|L-7|F7JL||F7LJLJL7|L7||F----JFJLJ|FJFJ|L-7||F||||FJF----J||F7FJL7JF77|F-J-.--J.|-J7JF-FJJ
+.JLL|LL-JF|F77...|J-|7L-JFL7.F---7|LJ|F7|L-7F7F7FJL7FJ||L7FJLJ|F7F7FJL-JLJL7F7F7L--7|L7|FJF7LJL7LJ||L7|.F7F7|||LJF-J.|L7JJ.J-F-|F|J77L-JF|.|
+F|-JL7.FF77|F7-LL.LL|F-JLF--FL7F7LJF-J|||F-J||||L7FJL7||FJ|F--J||||L--7F7F7LJ|||F--JL-J||FJL-7FJF-J|7|L-J||LJ|L-7L---JFJ.|-L7--LJLFF||..|LJJ
+FJ7FJ|F--77|.L7J.-7LJLF.LF77LFJ|L-7L7FJ||L-7||||J||F-J||L7|L7F7|||L7F-J|LJ|F-J||L-----7LJL-7FJ|FJF7L7|F--J|F-JF-JF7F7FJ7-F7J|.F|JL-L7FL-J-||
+LJFJLL7L||L77L7..F|7-F--7||F7L-JF7|FJL7LJF-J||||FJ|L-7||FJL7||||LJFJL--JF7||F7|L7JF7F-JF---JL-JL-JL7|||F7FJL7|L7FJLJLJF-7||LF-777..F|F|7|J|J
+.FJ7-FJ.7-|F-JLF-FF7.L-7|||||-F-JLJL--JF7|F7||||L7L7FJLJL7FJLJ|L-7|F7F-7|LJ||LJFJFJLJF7||F7F7F7FF7FJLJ||LJF-JF7||F7F-7|FJ|L7L7|LJ7F7FLLJJ-|.
+F.||-J|.|LFL7.FF-J||F7F|LJLJL7L--7F7F-7|LJ|||LJL7|FJL7F--JL7F7|F-JLJ|L7|L-7LJF7L7L---J|L-JLJ||L7||L-7FJ|F-JF7|||LJLJFJ||FJFJFJL7.F--7FFJ|LL7
+L7|-7FL-77.FL-F-7FJLJL-JF7F-7L7F7LJLJFJ|F-J||F--J|L7FJL7-F7||LJL--7FJFJL--JF-JL-J|F---JF7F--J|FJ|L7FJL-JL-7|||LJF--7L7||L7L7|F7|JL|F|7|77||F
+FLJFLLLFFJ7|7L||FJF-----JLJ.|FJ||F7F7L7LJF7LJ|F--JFJL7FJFJ||L7-F7FJL7L-7F-7L7F---7L----J|L7F7|L7L7|L7F7F--J|||F-JF7L-J||7L7|||LJJF|-JF|-JFJ-
+F|7|7J.||77LJ--LL-J-F7F--7F-J|FJLJ|||7L7FJ|F-JL--7|F7||||FJL7L7||L-7L--JL7L7||F--JF7F---JFJ||L7|FJL-J|LJF7J|LJ|F-JL--7||F7|LJL--7J.|LJ.FF-JJ
+FJFJ|7-.F77J-7FLF7LFJ|L-7|L-7|L--7LJ|F7||L|L-7F-7|||LJL7||F7L7||L77L---7FJJ|LJL-7F||L---7L-J|FJ|L---7L77|L7L-7LJF----J|||||F----JJ-J.|-L--F7
+||-7|7-LLJ7.-JFFJL7L7|F7||F-JL7F7L-7||LJL7L--J|FJ||L-7FJ||||7|||FJF7F7FLJF7|F---JFJ|F7F7|F--J|FJF--7L7L-JFJF7|F-JJF--7|LJ|||F7F77|JFF.|J-LL7
+7J7F|LFLJJJ.FF-JF7L7||||||L-7FJ|L7FJ||F--JF7F7||FJL7FJL-JLJL7|LJL7|LJ|F7FJLJL---7|FJ|LJ|||.F7|L7|F-JFJF--JFJLJ|FF7|F7|L-7LJLJLJ|F77|.7--7-|J
+|.-LJF|FJ||L-|F-JL7|||||||F7|L-JFJL7|||F-7|||LJ||F-JL-7F----JL-7FJL-7||LJF-7F7F7||L7L-7LJL7|||FJ|L-7L7L7F7|F--JFJ|||LJF7|F7F--7LJL7JF-7-|J||
+-7JF7-JJ.F77LLJF--JLJ||||||LJF-7L--J||||FJ||L-7|||F7|FJ|F7F7LF-JL7JFJ||F-JJ||LJLJ|FJF7L7F-J|LJL7|F7|FJFJ||||JF-JFJ|L-7||LJ||F7L---JL-||-77.-
+||.L.-7||F-JJ|.L----7|||||L-7|JL---7||||L7|L-7|||LJL7L7||||L7L-7FJFJFJLJF7FJL---7||FJ|FJL-7L-7FJLJ||L7|FJLJL7|F-JL|F-J|L7F|LJL-7F--7-||.|J77
+F77.L-|-LL.|-FF-----JLJLJ|F7LJF7F7J||||L7||F-J||L--7L-JLJ||FJF-JL-JFJF7FJLJF----J||L7|L7F-JF7|L-7L||FJLJF---J||LF-JL-7L7|FJF7F-J|F-J7L7FJ.LF
+L-F.L7|JL|7FF7L--7F7F-7F7LJL--JLJ|FJLJL7|LJL7FJL-7LL-7F--J|L7L----7L7||L--7L-7F7FJL7||FJL-7|||F-JFJ|L-7FJF7F7|L-JF---JFJLJFJ|L--JL7-7.-|.F|J
+FLL7L-|7F--FJL--7LJLJ7LJL7F7F---7|L---7|L-7FJ|F--JF77||-F7|FJF7-F7L7|||F7||F-J||L7FJ||L7F-J||||F7L7|F7||FJLJLJF--JF7F7|F7FJ.L7F-7FJF|7|F.F7J
+F7FL7L|--7FL---7L7F-7F---J|LJF--JL7F-7|L7FJ|FJ|F7FJL7|L7|||L7|L7|L7|LJ|||FJ|F7||FJL7||FJ|F7|||||L7|LJ||||F---7L7F-J|||||LJF7|||FLJF7F77J.LJ7
+L-|-L7JL7FJ7LJFL7LJFJL----JF7L7F-7LJ-|L7||FJ|FJ|||F-JL7||LJ|||-||FJ|F-J|||-LJ||||F-J|||-||||||||.|L7FJ||||F7|L7LJF-J|LJL7FJL7|L7F7|LJ||.F-LF
+JL|.L7FL7JF||LF7L-7|F7JF---JL-J|FJF-7|FJLJL-J|FJLJL7F7||L-7FJL7LJL7||F7||L-7FJ|LJL7FJLJFJ|||LJLJFJFJL7|LJLJL7FL--JF7|F-7LJF7||FJ|||F-JJFFJL|
+|L7F7J--F7LLF-JL--JLJ|FJF------JL7|FJLJF7LF--JL--7|||LJ|F7||F-JF--J|||LJ|F7|L7|F--JL--7L-J|L-7F-JFJJFLJF----JF7F--JLJL7L7FJLJ|L-JLJ|JF|7|-FJ
+L-.|..JFJJ|LL-------7|L-JF7F--7F-J|L---J|FJF-7F7FJFJL-7|||||L7FJF-7||L7FJ|LJ7LJL7F7F--JF--JF7||F7L-7F--JF----JLJF7F---J.LJF-7L--7F7L-7JFL-JJ
+FL-JF7FJJ.|7F7F----7|||F7||L7FJL--JF-7F7||FJ.||LJFJF7FJ|||||FJL7||LJL7|L7L---7F-J||L--7L--7|||LJL7FJ|F-7|F-----7||L-7F7F77|FJF77|||F7L--7F-.
+FLJ77|J7JF--J|L---7LJL-JLJL7||F-7F-JLLJLJLJ-FJL-7|FJ|L7|||||L7FJL--7FJ|FJF7F-J|F7||F-7L7F-J||L-7FJ|7LJ|LJL7F7F7LJ|F7LJLJL-JL-JL7||LJ|F--J7.L
+JJ.L7JFFFL--7L----JF7F7F7F7LJ|L7|L---------7L7F-JLJJL7||||||FJ|F7F-JL7||FJ|L7FJ|||||FJFJ|F7||F7|L7|F----7FJ|LJ|F7LJ|F-7F-------JLJJFLJ|J|L-.
+||F-|.JLF---JF----7|LJLJLJ|F7L-JL----7F7F-7|FJL-----7|||||||L7||LJF7FJ||L7L-JL7||||||FJFLJ||||||FJ|L---7|L-JF7LJL-7LJL|L--7LF7.F7.L|F|JL|7JF
+LL|7|7..L-7F7|F---JL7F----J||F7F-7F-7|||L7LJL7F7F---JLJLJ||L7|||F-JLJFJ|FJF---J|||||||F---J|LJLJL-J|F--JL---J|F-7FJF-7L7F7L-JL7||7JLJJ.FJL7J
+|.-L7-77LLLJLJL7F---JL7F-7FJLJLJ-LJFJLJL-J.F-J||L----7LF7LJJLJLJL--7FJ7||L|F7F7|LJ||||L-7F7|F---7F-7L-------7LJ-LJ-|FJJ|||F7F7LJ||.FJ.-JJ|.F
+|-J-FJFJ77LF---J|F--7.LJ.LJF7F7F7F-JF7F---7L--J|F---7L-JL-7-F7F----J|F-JL7LJLJLJF-J|LJ|FJ||||F-7|L7L7F7F----JF7F---JL-7LJLJLJL--J7F-F-7LL7-J
+|-L-JF7F77JL-7F7|L-7|F7|F7FJLJLJ|L--JLJF--JF--7|L-77|F7F-7|FJLJF-7F7|L7F7L-----7L--J-F7L-JLJLJFJL7L7|||L---7|||L7F7F--J7F7F7JF7F---7-JJ.FJLJ
+L-7|LJ-7L-F--J|||F-J|||FJLJF---7|F--7F7|F-7L7FJL-7L7|||L7||L7F7L7|||L7LJL7F-7F7L-7F--JL-7F7F7FJF7L-JLJ|F--7|FJ|FJ||L-7F7|LJL7|LJF7FJJF|.F7FJ
+FLF7-L.-..L---JLJL-7|||L-7FJFF-JLJF7LJLJ|FJFJL--7L7||||FJLJ-LJL7|||L-JF7FJ||LJ|F-JL7F--7||LJLJFJL----7|L-7LJ|FJL7|L--J|LJF-7LJF-JLJJ-777.FF7
+LJJL7.-JF7F-7F7FF7FJLJL-7LJF7L-7F-JL--7FJL-JF---J7|||||L-7F7F--J|||-F-J|L7L--7|L7-LLJF7||L---7|F7F---JL-7L--JL--JL7FF7|F-J-|F7L---7.||JF-JJL
+.LL-JLJ.|FL7|||FJLJF-7F7L--JL--J|F---7LJF7F7L----7||LJL--J|LJF--JLJFJF7L-JF7FJL7L7F--JLJL----JLJ|L-----7L-7F7F7F-7L-JLJL--7LJL---7|J-F-JJ7.L
+77.||L-|7J||LJ|L7F7L7LJL7F-7F7F7|L-77L--JLJL7F---J|L7F7F7JL-7L7F---JFJ|F-7|||F-JFJ|F--7F-----7F7|F-----JF7||LJLJ.|F7F7F---JF7F7||LJJ-|.LF-7.
+.7-LL7F|||FJF7L-J|L7|F--J|FJ|LJLJF-JF-----7|LJF--7L-J|||L-7||FJ|F7F7|FJ|.||||L-7L7||F-J|F----J|LJL-----7||LJF7F-7LJLJLJ|F--JLJL--7J|FJLFJ-J7
+F.FLJ||LL7L-JL---J|LJL---JL7|F---JF7L7F---JF77|F-JF7F|||F-JFJL7|||||||FJFJ||L7FJFJLJL7FJL7F7F7|F------7LJL-7|||FJLF7F7F7|F-------J-F77-JJF-|
+--7-F-77L|L|FLF----------7-LJL7F--JL-JL----JL7|L--J|FJLJ|F7L--J||LJ||||JL7|L7|L7L-7F-JL7LLJ||||L7F-7F7L-7F7LJLJL--JLJLJLJL7F7F-7F7F||F7FJ.-J
+F7J7F-7-FL.|L.L7F7F7F--7FJF7F7LJF-7F7F7F---7FJ|F---JL7F-J|||F-7LJF-J|LJFL||.||FJF7||F7FJF--J|||FJL7LJ|F7LJL--7F7F-7F------J|||FJ||FJLJ|7JF-J
+F|-7|-L.|JF7|F-J|||LJF-JL-JLJ|F7L7LJ|||L--7LJFJL7F7FFJL--JL-JFJF-JF7L7-|LLJ-||L7|LJLJ|L7|F-7|LJL7FJF-J|L-7-F7LJLJJ|L-------JLJL7|||F--J|F|7|
+L77JF7.7777LFL-7|LJ-FJF--7F-7LJL7L-7LJ|F-7L--JF7LJL-JF7F7F---J|L--JL7|JL.|LJ||J|L--7FJFJLJ7||F-7||-L--JF7L-JL-7F-7|F7F7F7F-----J||||F7.L-LJJ
+LL|7-|-|LF-7-.FJL7F-JFJF7LJLL--7|F-JF7LJ7L--7FJL7F---JLJLJJF7F7F77|L||-|FL--LJFJF7FJL-J7LF7LJL7LJ|F----JL-----J|FJLJLJLJ|L------JLJLJ|-F|||J
+FJJ|-LL|-L7|FFL--J|F7|FJL-----7||L--JL7LF-7L|L-7|L---------JLJ|||F7.LJJ.F|-||JL7|||F7FF--JL7F7L-7|L--7F-----7F-JL-7F7F-7|F7F-7F-7F7F-J7--7|7
+L-777...FFS|7F7JF7LJLJL------7LJL-----JFJFJFJF-J|F7F7F-7F7F7F7LJLJ|.JJFL-JFJ77||||LJL7L---7LJ|F7LJJF7LJF----J|F---J|LJFJLJLJJLJLLJ|L7J.J.--J
+.LF7J..FFL7L7||FJL7-F----77F7L---------JFJFJFJFFJ|LJLJ-||LJ||L7F-7|-J.77FFFJJFFJ|L-7FJFF-7L-7LJL---JL-7|F7F--JL----JF7L7-F7JF----7L-J77JF7.F
+J.|L7-|7|||FJ||L-7|FJF--7|FJL-----7F7F7FJ7L-JF7L7L7F7F7|L-7||FJL7LJ-|J|FFJ|L7LL-JJJLJ|FL7L-7|F-7F----7|LJLJF7F------JL-JFJL-JF---JJF7F7J||-|
+|F7.J.|LLFJL-J|F7|LJFJF-JLJF-7F7F7LJ||LJFF7F-JL7L7LJLJ||F-JLJL-7L-7J|LJ-L-J7|.LLJ..|L-F-JF7LJ|FJ|F7.FJL----J|L-7F-7F----JF---JJF-7FJLJL777.J
+FLL7F|7-FL--7FJ||L-7|FJF7F-J-LJLJL-7||F--JLJF-7L7L7F--JLJF7.||FJF-J-7.L7L--J.|J.F-FL.L|F-JL7FJL-J|L-JF-7F--7|F7LJFJ|F----JF77F7|FJL7F--J7L7J
+7J|.F-|.FF--JL-JL--J||FJLJF7F7F7F7FJLJ|F7F-7L7|FJFJL----7|L7.FL7L7.|L..JJ777L7.LF7-L7-LJF7-LJF7FFJF--J7LJF-J||L7FJFJL----7|L-J||L7FJL----7|.
+|F7.L7L-FJF7F-7F7F--JLJF--JLJLJLJ|L---J||L7L-JLJ-L7F----J|FJ7.FJFJF|-77|F7L-7|-|||LF|FLFJL---JL7L-JF7F7F7L7FLJLLJ.|F-----J|F--J|FJL7F7F--JJ7
+|LJF.|L-L-JLJ7LJLJF7F-7L7F------7||F---JL-JF--7|F7LJF7F7L|L7-.L-JLFL7|J-LJ7.F7-FJ|7F7F-JF---7F7L---JLJ||L-JF7F7F7FJL---7F7||F--JL-7||LJJ|7LJ
+|LL7.J||.FF-----77||L7|FJ|F-----JL-JF----77L-7L7||-FJLJL7|FJFF7|-L7-|JL-7LF7J.L|FJFJ|L-7|F--J|L7F7F--7|L---JLJLJLJF----J|||LJF-7F7LJL7LF|7.|
+-77LF-F77LL----7L-JL-J|L7|L7F--7F7F-JF---JF-7L7||L7|F---J||-F7-|.7L-.77L|-J|F-J|L-JFJF7LJL---J7LJLJF7|L---------7FJF--7||||F-JJLJL-7FJ--FJ-L
+|JL-7FL-|LF----JF----7|-||FJ|F-J|||F7|F77FJFJFJ||FJ||F7F-JL-J|JL-|7-|-L.|LFLJ.F|F-7L-J|-F7F7F7F7F7FJLJF7F7F7F--7LJFJF7L7|LJL----7F7||JJ-L--J
+-7|LL7J.LFL-7F7FJF---JL7LJL-JL--JLJ|LJ|L7L7L7L7||L-JLJLJF7F-7|L7JLJ.LLJ-LJ.-7F-LJLL7F7L7|LJLJLJLJLJF--JLJLJ||F-JF-JFJL7LJF7F7F--J||LJJ....L-
+L77.||FJ-J.LLJLJ.L----7L----7F7.F7FJF-JFJ7|FJFJLJF------JLJL||FJJFFJ.||J|FL-F-7-L--LJL7LJF-------7FJF7F7FF-J||F7|F-J.FJF7|LJLJLF7|L7J7F-.F7|
+LL--JF-7|JFLF------7F7L----7LJL-J|L-JF7L--JL-JF-7L-7F7F7F--7LJJ--L-7F7-7F|JF|.FF7--JF-JF7|F----7FJ|FJLJL7L--JLJLJL--7L-J|L--7F7|LJFJJL7|.|L7
+L|.|L|L|J-J7L-7F7F7LJL----7L----7L---JL---7F7FJFJF7LJLJLJF7L7JJ-LJ7L7.L|7||F-L7.L7JFL-7|LJL7F-7LJFJL7F-7L-7F7F7F7F--JF-7L7F7LJ||F7L-7.F7.LJ.
+.|F77L-J77|LF-J|LJL7F7F-7FJF7F-7L----7F--7|||L7L7|L7F-7F-JL-J.|-JJFJLFJF7J-|FJ77L|FF7FJ|F7J|L7L7FJF-J|FJF7LJ|||||L--7|FJFLJ|F7|||L-7|-7|7.|.
+LFLLLJJFF-LJL7FJF77LJLJF||FJLJFJF---7LJF-JLJL-J-LJJ|L7LJF---7F7|.-JJF|-||7-LL|LL-F-JLJFJ||FJFJFLJFL7FJL-JL7|LJ||L7F7LJL77F-J|LJ|L-7LJ.LL|-|7
+.|L||-F|J|J-LLJF||F-----J|L--7L7L--7L-7L7JF7LF7F7F7L-JLFJF-7||L7-|J7FF7|L777.|7||L-7F-JFJ|L-J-F--7|LJ7F---JF-7||JLJ|F-7L7L-7L--JF-JF|F7.F..F
+|LFLJF-777JLLF-7||L---7F7L---JFJF-7L-7L7L7||FJ||LJL7F--JFJ-LJL7L-7|FF||L7|F--7J-FF-JL7|L7|F7F7L-7L7F-7L----JFJLJF7LLJ-L-JF7L7F7FJ-LL-7..|-FF
+|-J.F|FJF7|.LL7|||F7F7LJL--7F7L7L7|F7L7L-J|||FJ|F-7LJF-7L-7F7FJF-J7-FJ|FJ||F-JJ.FL-7FJF7|LJLJL-7L7|L7L7F---7L---JL-------JL7|||L-77L-..-J-FL
+-.L7FJL-JL7-|FJLJLJLJ|FF7F7LJL7L-JLJL-J.F7|LJL7|L7L--JL|F7LJLJFJF7F7L7||FJ||7FL7.LLLJFJLJF--7F7L-JL7L7LJF7-L7F---7F7F---7F-JLJ|F7|7F|F7JJ.J|
+L7-FL7F7F7L7FJF-7F--7|FJLJL7F7L---------JLJF-7LJFJF7-F7LJL----J||||L7||||FJ|F7J|||FF7L---JF7LJL-7F7L-JF-JL7FJL-7FLJ|L--7|L7F77LJLJF-7-J-F-.L
+FF-LFJ|LJL7LJFJFJ|F-JLJF--7LJL---------7F7FJL|F7L-JL-JL-----7F7FJ|L7||||LJFJ|L-7J-FJL---7FJL7F-7|||F--JF7FJL7F7|F7|L-7FJL-J|L7F7|FJFJJL77J.J
+||LFL-J.F-JF7L7L7|L7F7FJF-JF7F7F-----7J|||L7FJ||F-7F7F7F----J||L7|L||||L7FJ7|F7|F7L----7|L7FJL7LJ|LJF--JLJF7LJ|LJL--7|L7|F-JFJ|L7|FJJ--|F-|.
+.LFJ-|LFJF7|L7|-LJFJ|||FJF7|||||F---7L7LJ|FJL7|||J||LJLJLF7F7||FJL-J|||FJL7FJ|LJ||7LF7J|L-JL-7L--JF7L----7|L-7L-7F7FJL7L7|F-JFJFJ||F77F|L7L7
+7.-JLL|L-J|L7||F--JFJLJL-JLJLJLJL--7|FJF7LJFFJ||L7|L-7F--JLJLJ||F-7FJ||L-7|L7L7FJL7FJL7L---7FJFF7.|L-7F-7LJF-JF7LJ||F7L7LJL--JFJ.|LJL---77-J
+LJJF7-|FL.|FJ||L---JJF7FF7F-7F-7F--JLJFJL--7|FJ|FJ|F7|L7F7F7F7|LJFJL7||F7|L-JFJ|F7|L-7L-7F7||F-JL7L-7LJFJF7L7F|L-7|LJL7|F7F---J-FJF-7F7FJJ.|
+.LLJJ.L7F-LJ7LJF7F---JL7||L7|L7|L-----JF7F-JLJ-LJ7LJLJFJ|||LJLJF7L-7||LJ|L7F-JF||LJF-JF7LJLJ|L7F7L-7L-7L-JL7L-JF-JL-7FJLJ|L---7FJFJLLJ||J.F7
+F.FJ.J---J||7F-J|L----7||L-JL-JL--7F7F-J|L------7F7F7-L-J|L-7F-JL--JLJF7|FJL-7FJL7-L--JL---7L7LJL-7|F7L--7FJF--JJF-7LJF-7L----JL7L-7L|LJLLLF
+|-7.LJ.|.LL|FL-7|F7F--JLJF7F7F-7F7LJLJF7L----7F7||LJ|F7F-JF-JL------7FJLJL-7FJL7FJF7F7F7JF7L7L7F--JLJL---JL-JF7F7L7L7J|FJ.F7F---JF7L77LJ|.F|
+||F-77-777FJJF-JLJLJF7F-7|||LJFJ||F7F7||F7F77||LJ|F-J||L-7L-7F--7-F7|L7F7F7||7|||F|LJLJ|FJ|||FJL----------7F7|LJL-JFJFJL7FJ||F-7FJL-J7J7L7LJ
+LFL7||.|-F7JJL------J||FJ|LJLFJFJLJLJLJLJLJL7LJF7||7FJ|F7|F-J|F7L-J|L7LJ||||L7FJL7|F7F-JL7|FJ|7F7F--------J|||F----J|L7FJL7||L7|L--7.J.|FJ.|
+F-7J-J-FJFJFF7F7F77F7LJL-JF-7L-JF----------7L7FJLJL7L7||LJL7FLJL--7L7|F-J|||FJ|F-JLJ|L-77||L7|FJ|L--------7|LJL---7F7FJL77|||FJL---J7JFLJF7-
+LLJJJ|..FF--JLJLJL-JL-----JFJF7-L---------7|FJL---7L-J|L--7L-7LF7LL7||L-7|||L7||F7F-JF-JFJL-J||FJLF7F7F---J|F-----J|LJF-JFJLJL-7F7JF7F7.L7J|
+F|F|F--7-L--7F-7F---7F7F--7L-JL7F----7F7F-J||F-7F7|F-7L-7.L-7|FJL--J||F-J||L7LJLJ|L-7L-7L7F-7|||F7||||L7F77|L-7F7F7|F-JF-JF-7F7LJ|FJ|||77|.|
+-7|FL|7L|L7FJL7||F--J|LJF7L---7|L---7||LJF7LJL7LJ||L7L--JF7FJ|L-7F-7LJL--JL7L-7F-JF7L7FJ-LJFJ||LJ||||L7LJL-JF7LJLJLJL--JF-J.||L--J|FJ||LF|-|
+LFLJJF--FJFL7FJLJL---JF-JL----J|F7F-JLJF7|L--7|F-J|FJF7F7||L7|F7LJJL--7F-7FJF-J|F-J|FJ|7FF7L7LJF-J||L7L---7FJ|F--7F--7F7L--7LJF---JL-JL7-|F|
+|L|77J7.|LF7LJF7F----7L--7F7F-7|||L7F-7|||F--J|L7FJL7|||LJ|.||||F7F--7|L7LJ7L-7LJF-JL7L7FJL7L7FJ-FJ|FJF--7LJFJL-7|L-7||L7F7L--JF7F7F7F-JJJL7
+|FJL-.|7-FJL7L||L---7L7F7||LJFJLJL-J|FJ||||F-7L7|L7FJ||L7FJFJLJLJ|L7FJ|FJ.F---JF-JF7|L7|L-7|.||F7|FJL-JF7L-7L---JL--JLJFJ|L7F--JLJ||LJ.L7JF-
+F|FJJ-L7FL-7L-JL---7L7LJ|LJF7L7F----JL-JLJ||FJFJL7|L7||FJ|LL-7F--JFJL-J|F7L---7|F7||F7||F-JL7|||||L-7F7|L--JF--7F7F7F7-L7L7|L----7||JJ-|--|J
+LL--J.|J-|-L7F--7F7L-JF7L7FJL-J|FF7F7F7F--J|L7L-7LJFJ|||FJF7FJL7F7L-7F-J|L7F77||||||||||L7F7||LJ||F-J||L--7.|F-J|||||L-7|FJL-----JLJ..FJ.|.F
+F7|LLL|7FL7J||F-J|L-7FJL7LJF7F7|FJLJLJLJJF7|FJF-JF-JF||||F||L7FJ||F7|L-7|FJ||FJLJLJ|||||FLJ||L7FJ|L7FJL---JFJL--JLJLJF7||L-7F77FF7J.7F||.FFJ
+L--F-7LL-.|JLJ|F-JF-J|F7L-7|LJ||L-----7F7|||L7L-7|F-7||||FJL-J|FJ||LJF-J|L7||L-7F--J|||L7F7|L7|L-JFJL------JF7F------JLJ|F7LJL--JL777-J-F-F.
+||.|L-.LL-|-F-J|F-JF7||L--J|F-J|F-----J||||L7|F7||L7||||||F---JL7|L7FJF7L7|||F7||F77|||FJ||L7|L7F-JF7F7F7F-7||L--------7LJL7F----7L7--|-L.|J
+FJ7JL|F-|7|LL-7|L--JLJL7F-7|L--JL--7F7FJLJ|FJ||||L7|||||||L--7F7|L7||FJL7|||||||LJ|FJ|||FJL7||FJ|F7|LJ|||L7LJ|F--7F7F7FJ.F7|L---7|FJJFLJ|FLJ
+7L7.FF7-FF7LLL||F--7F--J|FJ|F-7F---J||L--7LJ-LJLJFJ||||||L7F-J|LJF||LJF-J|||LJ|L-7|L7||||F-J|||FJ|||F-J|L7L7||L7LLJLJLJF-J|L--7FJ|L7|FJFFLJ7
+||.F--|-7.-J|LLJL-7|L---JL7|L7|L7F-7||F-7L7F-----JFJLJLJ|FJL-7L--7|L-7|F7|||F-JF7||FJ||LJL7FJ|||FJ||L-7L7L7L7L7L---7-F-JF-JF-7|L7L-J-JL||||7
+F|-7.LL7LFLFFJJLF-JL7|F7F7||FJL7LJFJ|||7L-JL---7F7L-7F--J||F7|F--JL7FJ||||||L7FJ||||FJL-7|||FJ||L7|L7FJFJ.|FJJL-7F7L7L7FJF-JFJ|FJJF|-F.LF|J7
+.J-7FL|7.7-LJF-JL--7L7||||LJ|F7|.FJFJ|L----7.F-J|L7FJ|F-7|FJLJL--7FJL7||||||FJL7||LJ|F7FJFJ||FJL-J|FJL-JF-JL---7||L7L-JL-JF7||LJJF7F7-77||.|
+JF777.FJ.J-|77J-||FL7LJLJ|F7LJ||FJFJFJF7F-7L7L7FJFJ|JLJFJ||F7F7F-J|F-J||LJ||L7FJ|L7FJ||L7|FJ|L7F7L|L7F--JF-7F7FJ|L7|F-7F--JLJF-7FJLJL-77LF77
+F7|.F7LF-J..7-F--7F7L---7LJL7FJ|L7|-L7|LJ7L7|FJ|FJFJF7FJFJ|||||L-7|L7LLJ|FJ|FJ|FJFJL7||FJLJJL7||L-JFJ|F-7|.|||L7L7|LJFJL---7JL7||F--7FJ-7J||
+L|L77L-F7L7.J|L-7LJL----JF-7|L7L-JL-7|L-7F7LJL7|L7|FJLJFJFJ||||F7|L7L---7|FJL7|L7|F7|||L---7-||L7F7|.LJFJL7LJ|FJ7|L-7L7F7F7L--JLJ|J-LJ.L|7||
+L|.LF7..-F|7JL7.L-------7|FJL-JF7F7FJL-7LJL--7|L7LJL--7|FJFJ|||||L7|F---J|||FJL7|||LJ||F--7|FJ|FJ|||F--JF7L7FJL-7|F7|FJ||||F-7F-7L-7FJ77.L7J
+-F-LLJ-FJLL7-7F.F------7LJL7F7FJ|||L--7|F-7F-JL-JF----J|L7|FJ|LJ|FJ|L--7FJL7|F7|||L7FJ|L-7||L7|L7|LJL7F7|L-JL7F-JLJLJL7||||L7||FJF-J-J-FJ-JL
+|.L.|7.L7-7|F|7-L-----7L---J|||FJ||F7FJ|L7|L--7JFJF-7F7L7||L7L7||L7|F7FJL7FJ||LJLJFJL7|F7||L7||FJ|F--J||L---7|L---7F7FJ||||FJ||L7L7.JJL|7L7.
+JJ.|F|7.F--7FJF7F7F7F7L----7||||FJ||LJFL7||F--JFJFJFJ|L7|||FJFJFJFJ|||L7FJ|L||7F--JF-J||LJ|FJ||L7|L-7FJ|F---JL7F-7LJ||FJ||LJ-LJL|FJ7.-7LLF|J
+|F7J7||-J-LLJF|LJLJLJL-----J|||||F|L--7FJ||L--7L-JL|FJFJ|||L-JFJFJFJ|L-JL7L7||FJF7FJF7||F-J|FJL7LJF-J|FJL7F--7|L7|F-JLJ-|||JJ.F-JL7J77J.|LL7
+-FLJLL|||7.LF-L-7F---------7||||L7|F--JL-JL-7FJF---JL7L-J||F--JFJ-L7L---7L7|||L7|||J|LJ|L-7||F7|F7|F7|L-7LJF7||FJ|L----7|L7J.FJF--JF77|-L7||
+L|J.7-L7J--.L-LLLJ7F7F-----J|||L-J|L------7FJ|FJF7F--JF--J||F7FJF7F|F7F7L7||LJL||LJFJF7L7J||LJ|||LJ|||F-JF-JLJ|L7|F7F7FJ|FJ-7L-J|LJJLF-.|LFJ
+LJ.L|-LJL7|.|||JJF-JLJF7F--7||L-7FJF7F7F--JL-JL7||L-7JL-7FJ|||L-J|FJ|||L7|LJF--JL7FJFJ|FJFJ|F7LJL-7|LJL-7L-7F-JFJLJLJ|L7||-L|7|.L.|.|L--L-7.
+.F-7L-JJ.||.F|..FJF7F7|||F-J||F7||FJ|||L---7-F7LJ|F7L-7FJL7|||F--JL7|||FJ|F7|F-7FJL7L7||FJFJ||F7F-JL-7LFJF-JL-7L--7LFJFJ||77|F|7F7-7F7L7L--.
+-7LJ||||7LJ7LL7FL7|LJ|||||F7||||||L7|||F-7FJFJL--J||F-JL7FJLJ||F--7LJ||L7LJ|||FJ|F-JFJ||L7|FJLJLJF-7FJFJFJJF-7L7F7L7|FJLLJ--L-|-7J7F|7|J7|FJ
+FJ.LFF7F|7JFJ.F--LJF-J|||||||LJ|||FJ||||-|L7|F-7F7|||JF-JL-7FJLJF-JF7LJLL-7|LJ|FJ|F-J.||FJ|L7F7F-JFJ|FL7|F7|FJ-|||FJ||-|J-|||FJ-LF-7.FJFL77.
+F-7-LJ-F----..F-7JFL-7||||||L7FLJ||FJ||L7L-J||FJ|||||FJF--7||F-7L--JL-7F--JL-7|L7||L|-|||FJ-LJ||F-JFJF-JLJLJL-7||LJ7|L-7J7.FJL-F-JFLL|7FLL-7
+F||.J.F|||7|.-77F-L.|||LJ||L7L7F7LJL7|L7L-7FJ|L-J|||||FJF-J|||FJF-7F7FJL--7F7|L-JLJ|.FLJ||F---J||F7L7L7F7F7F7FJ|L7-LL7FJ-F|L-L-J--J7LLJ77L-F
+FL-77-F|7-L|7F77.L|-FLJ-FJL7L7LJL--7LJ.L7FJ|FJF--J||||L7L-7|||L7||||LJJ-L-LJLJJJ|LJ7J-JJLJL---7||||FJL||||||LJF|FJ..LLJ7-|.F7-L||7.J7J.LL|-J
+|JF--7FJ.|LL7F||7.|J|LL-L7FJFJF-7F7|.FJL||7|L7L---JLJL7L-7||||FJL7|L--7FFL7L7|J.F7J.LFJ|7.LF--J||||L-7LJ|||L7J-||77F|JL7.FL777.--7J-JJFF|.|7
+|F7JL|J.FJ-.F7LJF7JLLJ|F-JL7L7L7LJ|L-7J7||FJFJF-------JF-J|||||F7||F-7L77-LJLJL7|--7-F7|J-7L-7FJ|||F-JLL|||FJJFLJ--JL7JJF-7LJ-7JFLJL|-LJJ--J
+-|JFFJ7-LLJ-J-.LL-..LF7L7F7|7L7L7JL--JLF|||FJFJF7F7F7F7L-7|||||||||L7L-J-7|..-7.|-FFJL7..FJ-L||FJ||L-77JLJ||LJ7-JJ||7|7|J.LJLJFJ..|F77-FJL||
+F|F.|-F.FJJ.|.F7.|-F.F7J||LJJ.L7L-7LJJFLLJLJFJFJ|||||||F7|LJLJLJLJL-JJJF|7J|J-|-|.LJ.FL-J77FFJ||FJ|F7||7L-LJ7L7-J.JJ-L|-.F.7LF-7F-FL||.LJ.|7
+L-|-77L7F-7-J-J|.|J.-|L-LJL|7LFJF-J.L-|-JJ-LL-JL||||||||||FJ|7|-J-LJ.|FJJF-L7LF7J7LJF-7FL|7F|FJ||JLJLJ-L.||FFF7L7-J7JL7F|.FJ-L-J7JF7LL77|-F7
+J.F..F-F|LJ77|FJF7..LL7|.JFLF7L7L77F7.|FJ|-LL|JJLJ||||||||JLL-.F||LL-JJF-7|LL.LJFF7F7.|.-F--JL7LJ-JF|||L-7J|J|J-JLF|-|L-L-.JL|J7JL--7J|FL-F7
+.FF7LL7.|-|-7FJ.|JF|.J|J-|F-LJ.L7L7L-.7JF77.||-F|FLJLJ||LJ.F|--J77-LJ-FJ---.|-L7-77FJ-77|L----J-JJ.|7.F|-|.L7L7FJ.F.F7-LLJ7.F--J-F|F|.|7|LJF
+.FL|J.|F77J.F---F7-|-7L7|FF.7.-.L-J-L.|LF|L7LJ-F|FJ|.L||LLJF777L77F7J7FJ-LLF77.J-LJJ.L|-F|||JFJFL7.777.L7F.F|J---7LLF7|FJ.FJ7L7JFL7-L-LLJJLL
+-77JLFF7|J7.7||F|J-J.FLL7.77.7.|JLJ|.F|-FF---JJJLJ.F7FLJ-.|FJ---77-L7-J.7||LJ7F-F-.F-.|L-7-JJF.7-FF||-|FJJ-LJ|JF77JJ|F7.|77F--J-L-J|.F|7LJF7
+FLF--7L-J7|-LL|-|J.J7--JF|77F|.FJLFJ.L|-FJ7.|F7-|7.7.LJJFF.JJJFL.|||FJ|-L--7JF--|FFF|---7J|LF-JJF--7--JL.L7.L|.|L|JLF7JF7-FJ|.F.F|.J.-7J|F-7
+F7|-FJ|L|-J7.F--F7|FJF|7L|||F77J-FFFL7.F|J|F-FJ|.F.--------|.|F.---7L-LF|-L7L7JL|L7.|.|7F-J.JJ.--|7|||.JF-F7|L|.|.|.FL-7L|L|7..|7-|.|LJ||7FL
+LJJJ||L-J7LJ7F|-LLJ|7L--7L-J-.|F--FJ.|7LL.|L--7-7L7|L||-7JJL-JJLLJFF7J.LL77..J.F|.|7LF---J.FL.JLF|LJJ-F-F..F--|.77F7-JJL77.||.|F7.LFL77|J7FJ
+LJJ..LL-JJ-L---7J-F77LL.LFJJLL-J-7JJ.L-LL7-L7.LLJL|JJF7-J-JLLJLLJ-7LJJ..LLJ-LJJ.LFL-FJJL|.FLLF-FL|LL.J.FL|-JJ.JJL--JLL--JJ.|J-L|J--J.L7..JJJ
+
diff --git a/2023/_input/day_11.txt b/2023/_input/day_11.txt
new file mode 100644
index 0000000..441419a
--- /dev/null
+++ b/2023/_input/day_11.txt
@@ -0,0 +1,141 @@
+...........................#...................#...........................................................................................#
+.................................#..................................................#.................#............#......#.................
+.......................#..................#...............#............#..........................................................#.........
+..........#........................................#........................#............#.....#..............#.........................#...
+............................................................................................................................................
+.....#..........#..............#.......#.......................................................................................#............
+.................................................................#...................#..............................#.......................
+............................................#..............#...............................................................#................
+.........................#..................................................................#..............#................................
+#..................#..............#.........................................................................................................
+...................................................#.........................#........................................#....................#
+.............#...........................#...............................................#..................................................
+...........................#...........................#.......................................#............................................
+......................#..............#..........................#...................................#..............................#........
+........................................................................................................................................#...
+...#................................................................................#.......................................................
+.....................................................#....................#.................................#..............#................
+..............................................#...................................................#..................#......................
+.............#.............#...................................#.....................................................................#......
+..................#......................................................................#...............#..................................
+...........................................................................................................................................#
+......................#.....................#......................................#.............................#.............#............
+....#.............................................#.............................................#...........................................
+............#....................#.............................................#............................................................
+#.............................................................#.......#..................................................................#..
+...........................#.............................................................#...............#..................................
+......#..................................................#........................................#......................#......#...........
+...................................................................#.................#...............................................#......
+......................#.........#...........................................................................................................
+...............................................................................................#............................#...............
+........#.......#............................................................#...............................#........#....................#
+............................................................................................................................................
+....................................#.......................................................................................................
+............................................#.........................#.....................................................................
+.#...............................................#..........#....................................................................#..........
+................................#.................................#......................................#........#.........................
+...............#.........................#...........#.......................#.....#..............#....................#....................
+............................................................................................................................................
+.....#.................#......................................................................................#.............................
+...............................................#...............#...........................................................................#
+.................#..................#......................................#..............#..............................#..................
+...........................................#........................#............................................#..........................
+..#......................................................#......................................#...............................#.......#...
+.......#............................................................................#.......................................................
+...............................#..................#..........................................................#..............#...............
+.....................#................................................#.....................................................................
+...............#................................................#........................................#..................................
+...................................#...................................................#....................................................
+...........................................#..............................#..........................#...............#...............#......
+..............................#.................................................................................#.............#.............
+.........#.............#.................................#..................................................................................
+......................................#..............................#.....................................#...............................#
+.................................#..........................................................................................................
+...............#...............................................................................#..................................#.........
+..................................................................#......................................................#..................
+#............................................#..........#...............#...........#.......................................................
+.......................................................................................................#....................................
+............................................................................................................................................
+............................................................#..............#.....................#..........#.............................#.
+......#.........................#..........................................................................................#................
+............#...........#............................................................#......#........................#................#.....
+........................................#............#..............#.......................................................................
+...#........................................................................................................................................
+............................................................................................................................................
+................#................................#...............#......#...................................................................
+............................................................................................................................................
+............#.................#............#...............#................#..............................................................#
+#.......................#............................................................................................................#......
+..................................#.........................................................#..............................#................
+......#..........................................................................................................................#..........
+............................#.................#.......................#..................................#..................................
+...............#....................................................................................................#.....................#.
+............................................................................................................................................
+.........#.............................#.........#................#........#........#.......................................................
+...................#...............................................................................#........................................
+.........................................................#.....................................................#............................
+.#..........................................................................................#................................#..........#...
+.............................................#......................#..................................................#....................
+..........#..........................................................................#......................................................
+...........................#......................................................................#.........................................
+.................#........................................#.................................................................................
+.........................................................................#..............#..........................#.................#......
+.................................................................#....................................#.....................................
+...#.................................#.......................................................................#..............#...............
+............#.............#........................#........................................................................................
+....................................................................#..........................#............................................
+.............................................#....................................#.......................#.....#..............#............
+.....................#............#..........................................#.............................................................#
+............................................................................................................................................
+..........#....................................................#........................#...................................#...............
+#........................................................................#........................#.........................................
+................................................#.........#..............................................#.....#......#..........#..........
+..............#.....#.......................................................................................................................
+..............................#.............................................#.......#........#.......#...................................#..
+....................................................#.......................................................................................
+.............................................................#..............................................................................
+.....#........................................#........................................#.............................................#......
+............................#...............................................................................................................
+.......................#...............................#.................................................#..................................
+...........#........................#........................................................#.............................#................
+...........................................................#......#......#...........................#......................................
+#......#..........#............................#.....................................#...................................................#..
+..............................#................................................#...............................#............................
+.....................................................................#......................................................................
+........................................#...................................................................................................
+.....................................................#..........#.......................................................#..................#
+.......................#...................................................................#.................#................#.............
+#...........................#..............#..............................#.................................................................
+............................................................................................................................................
+........................................................................................................#...................................
+............#.....#...............#.....................#.........................................................#...................#.....
+..............................................................#............................................................................#
+.................................................#...................................#......#............................#..................
+......................................................................................................#.....................................
+...#.........................#.....................................#...........#................................................#...........
+................#..............................................................................#.............#..............................
+......................................#....................................#..............................................................#.
+.........#...............................................#..................................................................................
+.......................#........................#....................#......................#...............................#.....#.........
+..........................................#............................................................................................#....
+......#.....#.....................#..............................#.....................#....................................................
+....................................................#.......................................................................................
+.#......................................................................................................................#...................
+..................#........#................#...............#.............................#.................................................
+..........#........................................................................#..............#...........#.....#.......................
+.....................................................................#......................................................................
+...#.....................................#.....#...........................#..................#.............................................
+............................................................................................................................................
+.....................................#.................................................................#...................#.......#........
+.......................#........................................#...................#.......................................................
+.....#............#..........#..............................................................................................................
+#.................................................................................................#.............#..............#............
+.........#.......................#..........................................................................................................
+..................................................................#........................................#................................
+......................#..............................#.....#...........#....................................................................
+...........................................#..........................................#...............................................#.....
+...............................................................................................................#............................
+.............................#..................#............................................#.......................#............#.........
+................#..............................................................#.....................#......................................
+.......#............................#...................#............#...................................................#..................
+
diff --git a/2023/_input/day_12.txt b/2023/_input/day_12.txt
new file mode 100644
index 0000000..566b1d0
--- /dev/null
+++ b/2023/_input/day_12.txt
@@ -0,0 +1,1001 @@
+##???#??#?????????#? 11,6
+???.#??#.??? 1,1,2,1
+#????#?.???????. 3,3,4
+.#?????####.?.#? 1,1,5,1
+?#?????????#?#? 3,2,1,1,1
+.?#??.?..#. 4,1
+??.??????????.? 1,1,3,1,1
+?#???..??.?????##??# 1,1,1,3,6
+#?.?#????#?#.. 2,8
+..#??????. 3,1
+?#?????#.??# 7,2
+??#?????#.?#?##???? 3,4,5,1,1
+???????#??? 6,1
+#..?#?##??????.#?#? 1,6,1,3
+???#..??#? 1,1,2
+???#?.#?#.??.?? 3,3,1
+?#???.?..# 2,1,1
+#??#?????##?.???? 4,3,1
+#?????????.??#?. 2,4,2,2
+?#?????#???#??? 2,4,3
+?.??.??#??? 2,1,2
+??#???.??##?#.? 4,5
+?.#?.#???##???.#?# 1,2,2,5,3
+????????#?#???? 2,1,6
+.??.?#?..#. 1,3,1
+.????.??.??#.#. 3,2,1,1
+??.?#??????##?#??.?? 1,13,2
+????#??.???#??. 1,2,4,1
+??#??????###?#.#? 1,1,9,2
+??#?..##???#???.?#? 1,9,2
+?#???#??#?# 5,1,1
+?#??#.????????? 1,2,1,4
+.?????#??#?#????. 1,10
+?.???#?#?#? 1,6
+????#???#????? 2,8
+#?#???????.?.?? 7,1
+??.??#????##?#?##.? 3,7
+?????#?#?.????#?#? 2,4,7
+?.????#?###?#?? 1,8
+?.??????#.????#?##.? 7,1,5
+.???#???.?? 1,3,2
+?#.?..????? 2,2
+..?????...?????? 4,3
+???#.???.??????? 1,1,1,4,1
+?###???????#?..?? 7,1
+.???????#???????#?? 1,1,10
+#??.??##?#??.## 2,6,1,2
+??#???.??#????#?? 2,8,1
+?.?#.???#?????? 1,9
+???#??##?????. 8,1
+#??#?#?????###?? 1,5,4
+?..#??????? 1,5
+###??##?...??#?# 7,5
+?#?#??#.??## 6,3
+.????.?.??# 1,1,2
+???.?.??#??#??? 1,9
+.????..#??? 1,3
+??????..?? 1,1,1
+?.????##??#? 1,8
+????##???#.. 5,3
+??#?????#???# 2,1,2,2
+#??????????#.?##?.?# 6,1,1,1,3,1
+.?#??##????. 5,1
+?????.???#??#??##? 4,8,3
+????#?#??#?? 1,4,4
+?.?#??#??..????# 1,7,1,3
+?.?.??#????.?# 1,5,1
+?#??..?.??????# 3,1,1,1,2
+?##?#???#??.???? 4,4,3
+???#?????#?????????? 13,1,1,1
+????#?.???????#? 3,2,2,5
+?.#??#.??#?????? 4,4,2,1
+.?#?#####..?.?.?. 7,1
+##????.?#????. 4,5
+????????#????????. 2,1,4,1,2
+????.??#???..? 1,1,5
+#????.?..?#? 2,1,2
+??????#???? 2,1,5
+??#??.???? 1,3,1
+?#??#??##?.????#?.? 2,7,5
+???????.??? 4,1,1
+.?##????#??? 3,4
+???.?#.?.??.. 2,2,1,2
+????.???????. 1,7
+?#?#.?#????#? 3,1,1,1
+??#?????##??.#.??? 1,6,1,3
+?????????.?###?#. 2,1,1,2,6
+?#.##????#????#.??? 2,2,1,7,1
+#??#.?????#??. 4,5
+?#??#..?????#?#??#? 2,1,1,8
+##?.?.?#?.#?????? 2,1,2,7
+.???.???....#??# 1,2,2,1
+??#??#????##?????.? 7,8
+..?????.?. 1,1
+???????#?#??????.. 1,7
+#?????????#??..?? 1,3,1,5,1
+???.??#??.. 3,2
+???.#?#????????? 1,1,1,9
+?.?#??#??.?#. 6,1
+????#?#????.#??..? 7,1,1,1,1,1
+???..#?.#???? 1,1,3,1
+??.??...??? 1,1,1
+.##??????..#? 4,3,1
+????.??.???###??. 1,1,1,1,5
+?..??????.?? 5,1
+???????#??.?. 3,4,1,1
+#????##?.??#?.? 1,3,3
+??.?#?##?#?????????? 2,13
+????#??#?##??. 1,9
+????.???#??.. 3,3
+??#?#??#?? 3,1,1
+?#?##??.????#???? 4,2,4,1
+.??#???#???#??????#? 2,13
+?.?#.?..?#??#??#???? 2,1,8
+????.?###???#.?. 1,7
+..#?????????#???? 1,2,5
+???????.?#..? 6,1
+.#???###????.? 1,6,1
+??.??###?????#???.. 6,7
+#?..#??###???.?? 2,1,7,2
+???.??#?#??#?##?? 1,12
+#???????#?????#??#?. 1,1,10,2
+.????###???.???? 10,3
+??#?.?.#??? 3,3
+?##?????.#?? 4,1,2
+??#??.??.????##? 3,1,4
+???#####??.? 7,1
+#?##??#??#.????? 8,1,3
+.#.??#.????? 1,1,1,1
+??#??.???.#? 2,1,1
+???.????????????#??? 1,10,3
+.?.##????? 1,2,2
+?.##??#???#???.?#??. 11,4
+?????#?????##????.#? 13,1,2
+.???#?.??? 4,2
+?#?#????#?.. 5,3
+.???#?????#?#? 3,3,2
+..??.???#.????.. 4,1,1
+????????????. 1,2,1,1
+??????##..?. 1,1,1,2
+?.????#????.?????? 1,1,3,1,3
+?#???##??#???#? 8,2,2
+??...???????#?# 1,2,4
+??????#????#? 7,2
+???.#..??.?#?.#???? 2,1,1,3,2,1
+?#???###?#? 1,5
+????????????? 1,1,5,2
+.?.??#?#????????#?? 1,5,8
+.????#???.#??#?#?#.? 4,8
+?#?.????.###??? 1,4,3,1
+?##.???#?????#? 2,11
+?.??###.?.?##?##?#?? 4,8
+???##????????? 1,5,1,2
+##.????#...?#? 2,2,2,2
+.?#??????.? 1,5
+..?#?????.#??#. 3,4
+?.???.????#? 2,1,2
+.????????????#?#???? 5,11
+.???#????###????#??? 12,4
+???#??.???????? 1,1,6
+#??#.?#??.????# 1,2,4,1,1
+.?.??.???#?.??#?? 5,4
+??#?#.????.? 3,1,1
+????..???##?#????#. 1,1,8,2
+?#??.????? 2,2,1
+???#?###.?#???????.# 1,5,9,1
+#????##?#??##? 1,4,5
+?#??##.???.??? 5,1,2
+.???####?????? 7,1,2
+?##?????.#.?#####??? 4,2,1,7,1
+???##...??? 3,1
+????#????#??##???? 10,6
+???#?????????? 1,10
+#?????#?#?#??????.?? 9,1,1,1,1,1
+?????#??#?. 1,4
+????#??#?? 1,1,5
+?#?###???????#??#? 1,5,8
+???#???.??????. 3,5
+?##...#?#..?. 2,3
+???#???#.?#??#?###.# 1,5,9,1
+?.##?#??#??. 1,5,1,1
+??#?#????????#??#??? 2,1,2,7,1
+????##??##?????. 10,1
+?.?????????.???? 4,1
+.???????.# 2,1,1
+.??##??##?.?? 5,3
+??????.?.??.?#?# 3,2,1,1,1
+#?.?.#??#?#??#????? 2,1,13
+??.#.??###?? 1,1,1,4
+.??####???#?## 6,5
+??.??##????????? 2,2,2,3
+..?.###?##??????? 7,1
+??????????.? 2,4,1
+?.#.?.?.??. 1,2
+????????#.?..?? 1,5,2
+??.#??#?#??#? 1,7
+?...???#??????.? 1,1,6,1,1
+#????????#???#. 3,1,1,2,3
+#????#??.??? 3,1,1,1
+#??#?#.???#?##???.?? 6,5
+?.?.?#????#????#### 1,1,2,1,3,5
+????.????????.?? 1,1,7,1
+?##?.????.???? 3,2
+.??#.???#???####??. 3,1,9
+??#.???.##? 1,1,2
+.??##??????#?.? 1,3,4
+??.?#?#???#??#? 2,1,1,3,1
+?#?#??.?.??????.#?? 5,1,5,1,1
+???.?????##??##?? 1,1,1,7,1
+..#?.??????#? 1,2,3
+????#???##???..?#?# 2,10,4
+#???#?#?.?????.#.. 7,3,1
+.##???#???. 2,4
+?.#???????#?##? 3,2,4
+?#??#????.##????? 5,2,2,2
+.#?#?#.?#?#?##???? 3,1,7,2
+????????#????.?#?? 1,2,7,2,1
+.?#####???..??? 7,1
+???????#?? 1,1,2
+??#?.????#? 4,1
+????.??????#. 1,4,1
+???????#?? 2,5
+?????#?.?.??#? 3,1,1,1
+.?...????#? 1,1,2
+?#?????.??#. 1,1,1,3
+??#?#???#??. 4,1
+?????..???. 2,2,1
+.??.?.#?.????#??#?# 1,1,10
+.????#???#?? 5,1,3
+?#??#??????????. 9,1
+#??.?????#?#???? 3,2,7
+?#.?????????#? 1,1,4,1
+.????#??#?.#. 5,1
+???????##??.# 1,1,5,1
+?##?#??.??#????#?? 6,3,4
+?##???????##? 3,1,1,4
+#??????#.?? 8,1
+#????#??????#??# 1,1,1,5,1
+?.??.#????#????. 1,1,1,7
+..?##??###?#???????. 9,4
+??.??#?.??##???? 1,3,8
+???##..?.?? 2,2
+.?#???#??######?? 1,3,7
+.????.#?#?#??. 1,6
+??##???#???#?????# 4,3,2,1,2
+??.?????????? 2,1
+????#????????.#??? 4,1,2,1,2
+?#?#???.?..?????.? 4,2,1
+.#???#.??.?#?##??? 1,3,1,6
+??????#??# 3,2,1
+?.#.??.??#?#?##? 1,1,1,1,7
+?##????##??.? 4,5
+???.?#?.?? 1,1,1
+????#.??#?.??#?#.? 1,3,1,3,1
+?????#?#?.?????#? 1,2,1,1,3
+???.??????? 2,2,2
+?#?#??.?#?#?? 5,5
+??????????##?#? 1,1,7,1
+?????#.??????? 2,3,2,2
+?#????#?#? 1,5
+?.?#????..??#?... 5,4
+..#???#??? 1,1,3
+.#?#.?#?##??????? 1,1,4,1,2
+?##?.#?#???# 3,3,1
+?????#???? 2,5
+???#???##. 1,1,3
+??##???.#.??? 6,1,1,1
+????.??..? 4,1,1
+????.???#? 2,1,4
+?#??.???.??#????? 2,2,8
+????????##??#? 1,1,5
+?????#???. 1,1,1
+##.???.##. 2,2
+?#?.???#?????.? 2,4,1
+?????..?.??##???? 5,1,3,1
+#?#?..?????#???? 1,1,6,2
+..#????#???##?.?..#? 1,1,8,1,1
+?.?..?#??#??#??. 2,6
+.???###?#??? 1,5,1
+???.?#??#??##? 1,9
+???#?????##??.??#. 12,3
+##???????#?#? 3,3,3
+???..?#?##? 3,5
+??..??.???#??.. 2,4
+???.????..???#.????. 1,3
+???##...?.???? 3,1
+??????#?.?#.??? 2,4,1,1
+???????#.#?. 1,1,2,1
+?????##????? 1,4,1
+?####.?????#? 4,2,3
+?#.#????#..? 1,1,3
+..??#??.?#?#????? 4,6
+?###????#???####?.?. 9,5,1
+?###??#???.?.?? 10,1
+?.???#?#??#?????? 1,1,2,4,1
+.???.?????? 1,3,1
+??????#????##?.#?.?. 10,3,2,1
+.??.?.?##???#???# 1,1,6,3
+??#??????#.#?.##?#?? 9,1,4
+????.?#?#???#????.#? 3,1,2,1,3,1
+?????##?????.?# 1,1,7,2
+??????.#?????#? 1,1,1,4,1
+.?#??????#.?.. 1,4
+??????.#??. 4,1,1
+?????????#?#?? 2,6
+?.#???????#?????#??? 10,1,2
+???????#??. 1,2
+?##???????.#???# 6,2,1,1,1
+.???#?##?#?????.??? 2,6,1,1,1,1
+.??????#??? 2,3
+#???????#??.?##? 1,8,4
+.#.??##??.?? 1,3,1,1
+???..#??..?? 3,1,1,2
+?????????#????#??? 2,12
+?????.###..##?? 4,3,4
+???.?????#??#??#??## 1,16
+?????#??###? 2,1,5
+##????????#??.?? 12,1
+?.??.#?#?????#?###?? 1,5,5,1
+.???.???#?#????####? 2,1,9
+..???#??????#??. 2,7
+??.#?#??#??.?.#?#.? 2,8,3,1
+??.???#???## 1,6,2
+.????.??#??.#??#. 4,4
+???.???##?? 2,1,2
+??.???#?#??.#?????#? 1,5,8
+????.??#?..????? 3,1
+???##????? 1,5
+???#??.??????#??. 5,7
+??#??..??? 3,1
+???.??#???????#??#? 2,1,3,5,1
+???#??????#???.#?? 11,2
+??.#?#?#???.#???#?? 1,3,3,3,1,1
+?#..??.???#??. 1,5
+?.?#..?#?#???#? 2,8
+#?????#.????? 2,3,1
+#?#??#???##????.? 14,1
+??????.??????#? 2,1,1,1,2
+??#???????.??? 8,1
+??.???.#??##.???##?? 1,2,1,3,1,5
+??.????#.#.?# 1,4,1,1
+?.???.??##.. 1,1,1,2
+#????????????? 3,1,4,1
+??????#?#. 1,6
+??#?#..??#????? 3,1,6
+???#???????#??????? 1,1,1,1,5,1
+??#??#?#?###..???? 11,1,1
+???#?##?##?. 2,1,2,3
+??.??#?????????##??? 1,1,1,1,1,6
+??#????##?#.? 2,5
+.?????#.????. 2,1,1,1
+.?.?.##?????####?? 1,11
+?.#?#?#.?# 3,1,1
+#??#?#?????.#? 1,8,1
+?????#.?#?#?##??.? 1,1,1,9
+?????????#???? 3,2,1,4
+?#?#.?.?.. 4,1,1
+.#.?##?????? 1,3,1
+.?#?#?#?????.? 7,1,1
+??????..??..?#????. 3,5
+#???.?.?????# 1,1,1,6
+???????#??##??????# 1,2,12
+??#???#??..?.???#? 2,4,1,1,1
+#?#?????##??##?#??# 1,14,1
+..?#???#??#?? 6,1
+.???????????. 1,3,1
+????????#??.#?.?? 8,2
+??.??..?.#.??#?.? 1,1,1,1,4
+.?#???##????. 3,4,2
+?????#????.? 5,1
+?#??#.????#??##.? 5,1,4,2
+??.#???#?#.??.??? 1,7,1,2
+?.????#?##????? 1,1,6,1,1
+.????##?#..?.?? 2,4
+?#??????#.??.?????? 2,4,1,1,1,1
+??#??#?#??.?#?#.. 7,4
+??.?#???.. 1,1,1
+???##?#?????##?##??# 10,8
+?#.##???##.??#? 1,3,2,1
+?##?#.???? 2,1,3
+.???##??#??? 1,8
+????#??.?????. 1,4,3
+.???.????.#? 1,1,1,2
+??##?#????#????#.#.# 1,10,1,1,1
+?????#?.????#??? 3,4
+?#??#??#????#?? 3,4,3
+??.??#..?? 1,1,1
+?#??#??#????.? 1,8,1
+?#??#???????## 1,4,3
+??#.???????.?.#???# 1,1,2,3,1,5
+???.???#?.??????#?#. 3,3,1,1,3
+#??#??##?#???#??# 1,1,7,1,2
+#?##.????.?? 4,2,1
+?##???.?#????#? 5,8
+.???#?##????. 1,8
+????????.? 3,1
+??.??..????.????? 2,1,2,1,2
+???#?????#..?. 4,1,1,1
+?.?##?#??#??#?? 5,6
+???????##???#??? 2,10
+#.??.#?..????? 1,2,3
+??##.#??.? 2,1,1
+?.#?#?#?.?#??#????#? 6,6,3
+?.?????????#??#?# 1,10
+?????????#? 1,5,2
+??#?..?##??#? 3,5
+??#?#???????.#.?..## 6,1,1,1,2
+.?????#?#. 1,2,1
+.?#.#.?????#? 1,1,1,5
+#??#?.?..###?????? 4,1,9
+.#?.?#?????#? 1,2,1,1
+?##????.???????.# 6,3,1
+#.?????#????#.? 1,1,1,6,1
+?..??#.???.#??.. 2,1
+????#?.##????? 3,3
+??#??#?.?????? 5,1
+.#.##.???.?#???#?.?# 1,2,1,1,6,2
+???#?##?.??????????# 7,9
+???.?#???? 3,5
+??.?#?.???.???? 2,3,1,2,1
+?##??#?#??#????.? 8,5
+#..#?#??.?.???##?? 1,3,1,1,1,5
+?????????#?#?#? 3,1,1,3,2
+.????.?.?#?.???##?. 2,3,3
+??#?#?.?????..??#?.. 4,1,2,4
+..?#?#???.????.??#. 6,1,1,1
+?##???????.? 9,1
+#?.????.#??##????? 1,2,1,7,2
+.#.?#?.?.?#.. 1,2,1,1
+??.?????.?? 1,2,1
+.#??????.?# 1,4,1
+.???????????#??.. 5,1,2,1
+?..#????.??? 4,1
+.#?#?????? 1,7
+.????????##?? 2,2
+?#????##????.? 7,1
+..?#??..??#?...?#. 2,3,2
+?#??#.#???.??.?#? 1,2,2,1,2
+??#??###.? 2,3
+???#??#???. 1,1,4
+??#?##?.?.???????#?. 5,1,1,5
+???????????..?? 2,1,1,1,1
+????.?#????##??#??? 1,2,4,2,2
+???#???#?#?.???# 1,1,6,1,2
+???.??..?????? 2,1,4
+.?????##????????? 1,7,3,1
+?#??.????#?#?#???? 3,7
+?.?#??#?#??????.??? 11,1
+?.?#.??#???# 1,1,7
+?#?????#??.. 2,3
+.?????#???????? 2,5,4
+??.?##??.#?? 1,3,2
+???##????#.?? 1,3,1,2
+#?##?.?.?????????? 1,2,3,1
+.??.????.? 2,4,1
+#.?.??.???#? 1,1,1,1
+?.#????#????.?? 6,2
+??##.????### 3,5
+?.?????#???.#.???? 1,7,1,1,1,1
+.?????????#???#?? 6,5
+.?.??#???.???? 1,1,2
+.??.????#????.?#??? 2,8,2,1
+??..???..?#.# 1,2,1,1
+.??#???#??? 3,3
+???##?????????.? 2,5,1,2,1
+???.?##?#?#????#?.?? 1,2,1,7,1
+.??.?#.?#??????..??? 1,2,2,5,1
+????#????. 2,1,1
+?#???#?.?#?.???# 2,2,3,4
+??????.????... 4,2
+.??#?????#???? 8,1
+#??????#???? 2,2,5
+?#???????.??###?..#? 3,1,1,1,4,1
+?#??#?..??.??.? 1,2,1,2,1
+#????????????# 1,2,1,6
+?#?.?????.???##??. 1,1,1,1,6
+????#??.???? 4,2
+????????#???.#?# 4,1,1,2,3
+?##??????.????.?.??? 6,1,3,1,1,1
+??#?#??#??? 5,1,1
+??##???##???#? 2,6
+.?#?#?...?#? 1,2,3
+??????#????###??? 5,7
+?..????.????.?#. 3,3,2
+???????#?? 6,1
+???.????#?. 3,1,3
+#?..???.?##? 1,1,1,4
+??#????????? 2,1,1,1
+????##????#??? 4,5
+.??#?#.??.?????????? 5,3
+...#????#???? 2,2
+#??#???#..??? 1,6,1,1
+?#??????#????.?#.??? 1,3,3,1,1,3
+????#?#?#?#??..#?.? 10,2
+#?????.?.??#?#??# 1,2,1,1,6
+????#????????????? 3,1,1,2,1,4
+#.?????#????? 1,1,2,2
+?.##?????????? 1,2,2,5
+.?#???##???. 6,2
+.#??#??????.???## 1,7,1,2
+.??.?????#??.?. 1,2,5,1
+??#??###??#.??? 2,5,1,1
+#?.#.#??????#. 1,1,8
+???????##??#?? 2,7
+???#???##?..?? 4,2,2
+?##??#??#??..????. 11,1
+???##??????#?? 1,4,1,2
+.??.???##??#??.??.? 1,1,7,1
+#?#?#?##???.???.??.? 11,1,1
+???..?###?#??#??...# 3,11,1
+?.???.????#??? 1,1,5,1
+#??.?####????#???? 3,11
+#??.???????? 1,3,1
+?#?#?#?.?.#???? 6,5
+..?#?###..#.? 6,1
+??#.???.?#? 2,3,3
+??#??????#????? 4,5,3
+??.?????##???????? 1,14
+.?.??#?..??#.? 1,3,2
+??????.????.#. 5,3,1
+.???????.??#??????? 1,1,1,10
+???..??.?#??.#?? 1,2,2,1
+??#???#????#? 1,6,3
+???#.#???.?#?#?#?## 3,1,2,9
+?##??.?#??.???..# 3,3,2,1
+????#???????#?##?# 1,1,1,2,6,1
+#.??#??????? 1,4,1,1
+##??#??#?.###?#??#?? 8,8
+?##?????????????? 7,3
+##??????#####? 5,5
+#???#??..#?#?.? 2,1,1,1,2
+.?????..????#?? 2,1,3
+.?#???##??#??. 7,2
+???#?##?.? 1,4,1
+.?.#.?????#?????#? 1,1,3,2,2
+.##??????#??????# 4,1,2,1,3
+??.?.??##?????? 1,10
+.#?#.?#?.??#?#??.?? 3,3,3,1,1
+??##?.???####. 5,6
+.??##?.#?#?#.?? 3,5
+?.?.?#??????#???#??? 3,7
+??????#????... 1,1,1,1
+?#.?#?????????.?? 1,2,1,5,1
+????###??.#??##.??? 1,5,5,3
+.?????.#?????.????? 1,1,5,4
+.??..??#?.?? 1,4,1
+?#?.?#??##?#?#.? 1,2,6
+.#..???.?.#? 1,1,1,1
+?##?????????#???#??? 4,5,2,4
+??#??#?????#?#. 1,1,4,1,1
+#?.?#???###??#??.# 2,2,8,1
+#??.??##.?????.?# 3,4,5,1
+?..#????#????????? 1,1,4,2,3
+.#?????????#.?.?? 3,4,2,1,1
+?#?#??#?.#???# 4,1,1,3
+.??????????.# 3,6,1
+???????????? 8,1
+??????#??.??#??? 5,1,4
+?????.#??.?. 2,1,3,1
+#???##??????????#?? 1,3,1,5,2
+??#.??#???? 2,1,5
+????##????????.#???? 9,1
+?????..????#? 2,5
+?#?#?.?.??#?##? 1,2,1,7
+.#?????????? 1,1,1,1
+?#???.?#..? 4,2
+.#?.#??.????..???? 2,1,1,1,1,2
+.?##??#.???#???.?#? 3,2,4,1,1
+?.?#?#???#? 4,1
+..?..??#??#???? 1,6,2
+.??#????#?#. 3,4
+??#?#.#.???????.??## 5,1,1,4,4
+??.???????# 1,1,1
+..???#?#.??.?#.?#.# 6,1,1,1,1
+?????##??#??.? 1,3,2
+?##??#?#?##?????? 11,3
+#?#???#?????.????? 1,1,4,1,1,1
+?????..??????????#? 2,2,1,1,8
+?????###???##??? 9,4
+?????#??##???.? 1,1,1,5,1
+##?.?????##?#?##. 2,1,9
+???#?..??#????#?#?. 3,8
+???#?#???#.? 6,1
+?..??#??.. 1,3
+??????#?##.#??? 1,1,4,1,1
+???????#????.????## 6,1,1,2
+???.??..#.?.??????.? 1,1,1,1,6,1
+?.???..?#??.??###. 1,1,1,2,1,3
+?.##???????#?. 6,1,1
+?????..#.?#????#? 4,1,3,3
+?.??##??##??????? 12,1
+????.?#?##???. 1,1,8
+??###????#??.?#?.?? 7,1,1,2
+###???##????? 3,4
+.?.??##?#?#???????? 1,1,4,9
+#.????###?.#. 1,7,1
+.?#??.?????? 1,1,2,1
+?#..?????? 1,4
+?#??.????#?.?.??? 2,2,2,1
+.#???#?..?? 2,1,1
+.??????#.?##?.?.#??? 4,2,2,3
+???###?#???????.?# 1,6,6,1
+.??????#..#??.#??. 1,5,3,1
+???.?????? 2,1
+????????#?#.?????##? 2,1,3,1,4
+?.?#?#?#?????.???.?? 8,1
+##.??#?#???##??????? 2,5,3,1,2
+??#?#??#???.???? 7,4
+??.??###????#?.? 1,1,8
+????#???.???#?#???? 8,1,3,1,1
+.????.??.???##?# 1,1,2,1,4
+????##??????? 1,5,1,2
+.?#..?##?#? 1,5
+??????#???#???#?? 2,9
+?#?#???#???.?????? 1,3,4,1,1,2
+..???#?..?.? 5,1
+?##??.???##?????? 4,3,2,1
+???#??#?##?.? 9,1
+.???##?#???????#? 5,9
+?#.?#?#?????????.?.? 2,4,3,2,1
+.#.??????# 1,4,2
+#???????###????? 6,4,1,1
+???#?#?..? 4,1
+??.?##.????.#?? 1,2,1,1,1
+.????#??????#?? 1,4,4
+????.?????????.? 2,7
+#??.##????##??##???? 2,2,1,3,5,1
+??#??##..???.#??##?? 2,2,1,1,6
+????.??.#.?# 3,1,1,2
+?#.?.?#?.? 1,1,1
+.?.???#?.?????..?.?? 3,4,1
+..##???.???.#? 5,2,1
+?.?#???#?#. 2,1,3
+#????#????????.# 1,1,1,7,1
+??.???##?.?.? 1,1,2,1
+?????#????#???.?#? 1,2,2,3,1
+??.??#?????? 1,3,1
+?.??#??#?.?##?# 1,3,2,3,1
+?#??.??.??.? 2,1,1,1
+#???#???..#?? 5,1,1
+.#??????????.? 4,3,1,1
+.??.?#???.??#???#?#? 1,4,4,5
+???#??????????? 6,1,1
+?????#??????#??. 1,1,5,2,1
+?##?..??????. 3,1,2
+???..?.?##.? 1,1,2,1
+?????????#? 4,1,2
+.????.#???#?? 1,1,2,2
+..??##??????.?#?.?. 6,2
+?.?.?###?.??.#?.. 1,4,2
+.##???.????????? 5,3,1
+..????..?? 4,1
+??#?...#?#????? 3,1,1,1,1
+????????????????? 3,11
+.?.??.?#??#.?????. 1,2,2,1,3,1
+#...?.##?##??.#.#? 1,1,6,1,1
+?????????#??##?? 1,3,2,3
+#??#?##???? 7,1
+.??.??????.???#? 2,2,1,1,1
+?#.#..??.?????#? 1,1,1,1,3
+#????#?.#????#.?#?? 7,6,2
+????.?#?.?? 1,2,1
+???###..???#?.#? 1,3,4,1
+.???#?.????? 3,1
+???????#?### 3,1,1,3
+????.????.#? 1,3,1
+??????????.????#??? 1,2,1,2,1,1
+????#.??###?#?###?# 1,2,13
+##?.???#??? 2,4,1
+?#..#???#?#??? 1,1,6
+#?..??.??????????#?# 2,1,1,1,7,1
+?????.?#.????. 2,2,3
+?????.#.???#? 2,1,3
+??????#??.??? 1,1,3,3
+#??#??.?##??#??#?. 1,2,1,6,1
+#?##?.#???????#?.? 1,3,3,2,2,1
+???.?????###?#???? 1,4,8
+.?#????#???????? 4,3,1,1,1
+??.?????????????##? 1,5,1,8
+???.?#?????#?# 2,4,3
+??.????#.#?? 2,2,1,3
+??????.??????.#?#? 5,2,3
+??????????? 1,2,3
+?.?#??#???#?????## 4,8
+..##?.???#?.#??### 3,5,6
+????#??.#??.#??? 6,1,1,1,2
+?.????#???? 1,6
+????#???????#?#? 1,1,1,7
+????????.?.#?. 1,1
+.????##????.??.?? 1,6,2,1
+?##?.?#?#?.? 2,5
+??#?#????#?..#?#? 1,1,1,5,4
+###???.???.???#?? 4,4
+.??????.?##????? 2,1,3,2
+?.?????.?# 1,1,1
+#.##???????? 1,3,1,1
+#????#.?.#??????? 1,2,1,5
+.??.?##??.?.?? 4,1
+##?#.?.?###???#?#?? 2,1,1,10
+????#?.???#?.?. 1,2,1,2
+?????????????? 3,1,2
+?.#??.##?##?..#? 3,6,2
+?#.??#???#? 1,1,2
+#???????#??? 1,1,3,3
+??##??.#?#.???. 3,3,1
+#.??##???#?#???.#? 1,13,1
+?????#.??.#?? 1,1,2,1
+??#?##????????? 1,1,4,1,3
+?.???.????.?#? 1,1,3,2
+..????.?#?????.? 1,1,6,1
+?.?.??#?###?#. 1,1,1,7
+#?#.?????#????.#. 1,1,7,1,1
+???.??##????#?#? 3,3,1,3
+?.??????#??#????.#? 10,1,1,1
+??????????#???# 1,2,2,5
+?###?.#?????#?. 4,3,3
+.##???.???. 3,2
+#?#.?.????? 3,1,1
+????#???.#??? 5,1
+.?#?????#?????.??? 1,1,6,2
+#?#??##????????.?? 10,1
+???.?#???#? 1,2,1
+??#?.????????? 4,4,3
+??#?#?.##.?# 3,2,2
+?#?????.#???#.#? 1,3,1,2,1
+?????#??##..?#? 5,3
+???#.?#??? 4,4
+...??.????#????.? 1,7
+??????.?????#?????#? 2,3,6,2
+??#??.#??##??#.? 1,1,3,1,1
+.?????.??#.????? 5,1,1,2,1
+#?#????##???.#????. 4,3,1,1
+#.#???.#????#?##?# 1,1,1,2,1,6
+#?????##????#?##?.?? 10,4,1
+?#????#?#.??.##???.. 3,5,4
+?.????.?##??#...? 1,2,2
+?.???#??#?.?#??? 6,2,1
+??.?????????##?? 1,2,6
+?.?#???.#?#?? 2,2,3,1
+???..?#?#?????#?### 1,1,3,7
+?#??.?.????#????? 2,6,1
+????#?????? 2,2
+??.??#??????.?.??? 1,9,1,2
+?#???#??.?##????? 1,3,1,8
+??##?????#?..#???#.? 8,5,1
+?.???#?#???#????? 1,1,5,4,1
+.##??#??????????? 3,1,7
+??###?##???????.?.# 10,1,1
+#?#????##?????#? 12,2
+?#??#?.?#??.. 5,4
+?#?#??????#??.???.# 1,1,4,1,1,1
+?????????###.#??#??? 2,1,6,1,1,1
+???#????.?#.??? 2,2,2,1
+.??????.?????.. 4,5
+???####???.????.?.?. 7,1,3,1
+.##??#?.???. 2,2,3
+?#.?????????? 1,1,3,1
+.#?.????#??????#?? 1,5,2,1,1
+#???..?####?..# 4,5,1
+..???.???.?#.?.. 1,1
+???.#??###? 1,6
+..??.?????? 1,2
+??###??#????. 1,6,1
+#????#???.???? 2,6,3
+??#???.??????#?.#? 6,2,3,1
+.??#??????? 1,3,1
+?.?.??##???? 1,2,1,1
+...?.??#?#. 1,4
+?????#??#???????? 3,2,5,1
+??.?????.?????? 1,2,1,2,1
+???.?.??.?#. 1,1,1,1
+.?##?#???..#???.. 5,4
+??####??.????. 7,4
+#????#????#???? 9,1,1
+?.?.???.?????.???? 1,1,2,4,3
+??#?#?..??????? 6,1,3
+..?.#?#?##????#. 9,1
+?.?..?#?#.? 1,2,1
+????##?.??# 2,3,2
+?..??????##?#? 4,4
+??????????????# 1,8,1
+????#???#?????.?.?? 1,2,1,4,1,2
+?.###?#??.??#?#?. 7,4
+?.#??#?.???#???#?? 4,8
+??????##????#?..?# 1,9,1
+.?.???#????????#??? 1,2,5,2,1
+?#.???#???. 1,5
+?????#?#???#???##? 3,3,2,3
+..??????.?#? 4,1
+#.?????#??????#???#? 1,15
+?##??#??#???????#.?? 3,5,1,1,2,1
+??????..#?? 2,1
+????#.??????.#.?. 3,1,1,2,1
+.???.????? 1,2
+????.????. 1,2
+#????.#.??#??.??? 1,3,1,5,1
+#.??##???.?.?#????? 1,6,1,2,1,2
+??.?#.????.#???.#??? 1,1,2,1,1,4
+?.#?#..?#?. 1,1,2
+??#?????.?#.?.?.?.. 7,1,1,1,1
+?#?.????.??.???#.? 2,3,1,1,1,1
+???#???#.??#??#.? 3,3,1,1,1
+#????????###???#? 2,1,6,3
+??.#????#? 1,3,2
+???#??.#??##?# 5,2,2,1
+?#??????????#?? 2,5,4
+#.?#??????#?#??#?##? 1,1,14
+.??????????#????? 5,1,4,1,1
+???..?#???#??????##? 1,1,15
+#??.?#.#??????##. 1,1,1,1,4
+?????.???.?.?..#.??. 1,1
+???...#?.????? 1,2,1,3
+.????#??.?#??## 1,3,2,2
+?##?.#?..???? 2,2,1,1
+????.?.?.??? 2,1,1
+?????..???.?#???? 1,2,4
+???##.???#??? 5,3,2
+.????.???.?????? 4,2,1
+?..???#?????##?# 1,1,1,7
+###?#???#?.?#????#. 9,2,2
+???.?????. 1,1,1
+#?.?.#??#?#??# 1,9
+.?#???.?.?????? 3,5
+?.??#?..#?##???#?##? 1,2,12
+#.??#?#???#?#???? 1,12
+???.?.???##?? 1,1,4
+?.?#??#??##??# 1,2,6,1
+.????????..?????? 6,4
+???#???????. 3,2
+?.?????.???????? 2,3
+.??#.??#????#??. 1,1,5,1,1
+??.??#?###??????.?#? 1,8,4,3
+#???.?##?#?.?....?? 1,2,5,1,1
+?#???#?#?? 2,2,2
+.???##?.#?#???# 4,1,5
+?#?#..???? 1,1,4
+????????.#????#.? 3,1,1,6,1
+..?.????#??#??????? 1,1,6,1,3
+?.????###?#?. 1,6
+???..??#?. 1,3
+?#???#???????#?? 8,1,2
+?#???#???? 2,2,3
+?#????#.?# 2,3,1
+#???..??.?##? 3,2,3
+?????????##?#?#. 3,7
+?????##??.? 1,4
+#????.???? 2,1,1
+???????#???? 1,1,2,1
+??##??#??.????#??.# 7,2,2,1
+#????#??#?????? 3,1,3,2
+???#???.?.??. 2,1,1,1
+#??#????#?##??.?.? 1,10,1
+?.?.?#?.?? 1,1,1
+?..##?#.?##?????.? 1,4,5,1,1
+???#..????#????#??? 2,1,5,1,3
+??????#.???##?#????? 1,6
+????????.? 1,5
+?.??????.?? 1,2,1
+?????????.?#?#???#?? 3,10
+??????????.????? 1,1,2,2,1
+?#?#???.??.#? 2,4,1,1
+??.#?.##?? 1,2,2
+???.??#??#???.#?#? 1,1,1,3,4
+??#??##?#???.?#??? 8,3
+??##?..#????.?.? 4,1,2,1
+?.??.???????.???. 2,1,1,1,3
+????#?#????????# 1,2,3,1,4
+??..#??.??????##.?# 2,1,1,7,1
+.?????###?#?##???#? 1,8,1,1
+??#?.#???.#?? 3,1,1,2
+??#.???#????? 1,1,2,5
+?#.????.???? 1,3,2
+#???????#?.?##?? 3,3,1,5
+?#????#?#?#??#?.?? 1,4,4,1
+???#?#???.??? 2,3,1,2
+???.##???..??? 1,2,2
+#????##??.?.??.# 1,7,1,1,1
+#?##????.??.???# 5,1,1,1,2
+#???#???.??.#?? 1,1,3,1,1
+??#??????.#??.?. 6,3
+.#???.??..#?#?# 1,2,1,1,1
+.???.???#??#? 1,2,1,1
+??.??????#?#?#..??? 2,1,1,4,1,3
+?.#?##????..?????? 1,2,2,4
+#????.???.?# 1,1,1,1
+?##???????##???#?? 6,9
+.??????..?. 1,2,1
+?..#???##?###??. 1,2,7,1
+?#????##????.?#???# 2,1,2,1,1,6
+??.???#??.?.? 2,5,1,1
+.##?.#?#?? 3,5
+?#?.??##???##??????? 1,1,4,8
+.??.#????????.?# 1,4,1,1,2
+??#?..####?.. 3,5
+#?#?.?#?##?#.??#? 4,4,1,3
+????##?#???#?.##??? 1,5,1,1,2,1
+#?#????##???#??# 3,4,2,2
+?.##????#..?? 7,1
+.?????#.## 5,2
+?#.#?????????.? 2,1,1,3,1
+.???##?#?#??#??#?# 7,6
+??#???#??#???#???? 6,2,5
+?#?.???????#???###?? 2,3,3,4,1
+???.???.??#???#??? 1,1,4,3
+?##.???#?????#.#?.?? 3,2,4,1,2
+#?????.?####?..?. 3,6
+?#????..#??????#???? 2,2,1,9
+??????#?#?? 4,5
+???#?????????#???# 3,10,1
+???..?#?#.. 1,3
+???..?????#?###??. 2,9
+.???.???.? 1,3
+????#.???###.???? 1,1,3,1
+?##??????#. 6,1
+.#?#?#.???.?.?? 3,1,2,1
+.?#?.???###?#?##?#?? 2,14
+#?.???????? 2,6
+??#?###?????????#??. 8,3,3
+????.????.??#?. 3,2,1,1
+.#?#?#?#???#??##?? 1,1,5,7
+.##?#?????#?#.?.#?. 8,1,1,1,1
+????..#??? 2,2
+??????#????? 2,4,2
+?#??#???#?...? 5,2,1
+???.?.?????.? 2,5
+???#?#?##??????#.?#. 10,1,1,1,2
+#?..?.??#??????# 2,5,2
+#?????#?#??.?# 11,1
+?.#?#?.?.? 3,1
+?????.?.?#???? 3,6
+.??????#?#?? 1,1,2,2
+#??##????#?.??????? 6,2,1,4
+?.??###?.??# 1,3,3
+??????#??.?#???##. 1,4,6
+?????..??????#?#? 5,10
+?###?#?#????#?.???.? 8,3,1
+..?###??????????. 4,1,3
+??????.#?#?? 1,4
+???????#?.??? 1,3,2
+???####???.???#.? 7,1,3,1
+??#?.??.???##.??. 1,2,2,5,2
+#?.???##???.?? 1,1,6,1
+????#??????#?#?? 1,1,5,3
+.??#.?.##?????.? 1,7,1
+.?.?##??#? 3,1
+?.???????#??# 1,10
+?.???#??#??#??? 1,1,2,5,1
+?#.???#??. 1,4
+?????#?????##???? 1,5,2,1
+.#?#????##? 6,2
+#????#?##?..?? 1,3,3,1
+?#??#?..??##?? 5,4
+?.?.?#???? 1,1,1
+??#???#?##?? 6,4
+??.??.?????#??#?#?#? 1,1,1,5,6
+.????????? 1,1,4
+?#?..?#... 1,2
+?#.?#?.???.???? 1,3,2,2
+??#?#?#.???#??? 6,2,4
+????#???##? 4,4
+??.??###??#?#????#.? 11,2
+??????????.??#.???? 1,5,1,1,1,2
+?????????##?.? 1,2,6
+?????##????#.#????? 6,3,1,1,1
+?#???????#??.? 5,2,1
+??#?????????. 4,1,2
+#????.##????## 1,1,3,3
+?#?##???##???#.?? 5,4,2,2
+.#??#?#..? 6,1
+#???????##???#?.??? 1,9,1,1
+?.???...??? 1,1
+??#??.#??#? 4,4
+??.#???#.?#????? 1,3,1,1,1
+?#?.#?#.#?.?###???## 2,3,1,9
+??#?#????#??#? 7,2,2
+#??#?.?#?.??? 1,1,2,2
+..#.?.?#??.? 1,2
+????#?????#?#??? 1,1,1,6,1
+?.???##???????##?.?. 6,2
+.##.??????#? 2,7
+?.#?....?#? 2,2
+??????..?#####????? 1,3,8
+?.?????#???? 1,3
+??#???????? 1,1,3
+.???#?????.#?. 1,4,2
+?.??.#??#?#??? 1,8
+???????????????? 1,4,1,1,1
+???##?#????# 1,5,3
+??#??.???##? 1,1,1,5
+.##??#?.?????.???#? 5,2,1,1,1
+..?##.???????.?#?. 3,3,1,3
+#??#???.???#..?? 4,1,3,1
+??#????????.? 3,1,1
+??.??#???#??#?????.# 1,4,5,2,1
+?#?..????#??? 2,1,1,3
+?????...#.? 1,1,1
+??.?.??###?.?? 1,4,1
+??..?.#????#????#.?? 2,6
+.???#?????#. 7,1
+??????#?#?.#.??.??? 9,1,2,2
+
diff --git a/2023/_input/day_13.txt b/2023/_input/day_13.txt
new file mode 100644
index 0000000..83cf508
--- /dev/null
+++ b/2023/_input/day_13.txt
@@ -0,0 +1,1312 @@
+######..#....#.
+######.#.#.####
+##..###.##.#..#
+......######.#.
+#....###...##.#
+.#..#.###.#.##.
+.#..#..##.#.##.
+
+#.#....##....#.#.
+#.#....##....#.#.
+##.##.####.##.###
+.....#....#......
+#####.####.######
+.###...##...###.#
+..####....####...
+.#####....#####.#
+.##...#..##..##..
+#.####....####.#.
+.#....####....#.#
+..##........##...
+.#.###....###.#.#
+
+#########..##
+.####..#.##.#
+.#..#....##..
+..##..#.#..#.
+.......#.##.#
+.####.#.#..#.
+..##...#....#
+......#..##..
+#...###..##..
+
+#..#..#.###
+###....####
+##..##.#.#.
+##..##.#.#.
+###....####
+#..#..#.###
+##.##..##.#
+#...#.....#
+...##.###.#
+####.#.##..
+.#.###.#...
+####..#...#
+#.#.#####..
+#.#.#####..
+####..#....
+.#.###.#...
+####.#.##..
+
+####....####.#...
+#.#.#..#.#.#.#...
+...#....#....#.##
+.#.#.####.#.###..
+#.##.##.##.##.#..
+####....#######..
+.##########.##...
+...##..##....####
+##...##...##.####
+.##########..####
+.#.##..##.#..#.##
+.#........#.#.###
+.##.####.##.#..##
+
+####..##..#####
+#.#..#..#..#.##
+.##..#..#..##..
+.#..#....#..#..
+..#.#.##.#.#...
+..#.#.##.#.#...
+.##..#..##.##..
+
+#....##....##..
+##..#..#..####.
+##........####.
+...##..##......
+###..##..######
+..##.##.##....#
+###..##..######
+.##########..##
+##..####..####.
+..###..###....#
+..########....#
+..#............
+#.#..##..#.##.#
+####....#######
+....####.......
+
+##.##.###########
+#..#..###.#..#.##
+##..#.##...##.#.#
+..##.###...##...#
+#.###.#..######..
+##.##...#.####.#.
+##.##...#.####.#.
+#.###.#..######..
+..##.###...##...#
+
+#..##..##..##
+#..##..#..##.
+#.#..#.#.##..
+#......##.##.
+#......##.##.
+#.#..#.#.##..
+#..##..#..#..
+#..##..##..##
+.#....#.#..#.
+
+.##..####.###.##.
+#..######.##...##
+#..#.##.#..##.#.#
+####...####.#..##
+####.#...##.####.
+#..#.#.#......##.
+#####.###.##..#.#
+#####.###.##..#.#
+#..#.#.#......##.
+####.#...##.####.
+####...####.#..##
+#..#.##.#..##.#.#
+#..######.##...##
+.##..####.###.##.
+.##.##.##..##.###
+.......#.#....#.#
+#...#....##..#...
+
+.##.#.##.
+.##.#.##.
+##.....##
+..###...#
+###.##.#.
+.#...##..
+.#...#...
+
+...#.....
+........#
+#..##..##
+###..###.
+###..###.
+#..##..##
+........#
+
+..####.....######
+#.####.######.##.
+###..####...#.##.
+..#..#..#.#######
+...##......######
+..#..#...#####..#
+#.####.####.#....
+.##..##..###..##.
+#########.##.###.
+##....##.########
+..#..#...#...####
+
+########..#.#
+....#.##...#.
+.##.....#..##
+.##....#.#.#.
+####.###.#.#.
+####..###.#..
+#..#.#.#...##
+.##..#.#.#..#
+#..#.##..##..
+#..#.#.#...#.
+#..#.##..#..#
+....##.....#.
+....####.###.
+....####.#.#.
+....##.....#.
+#..#.##..#..#
+#..#.#.#...#.
+
+#.##..##.###...
+.###..###.##.##
+###.##.###.#...
+#.#....#.####..
+#...##...###..#
+#...##...###...
+#.#....#.####..
+###.##.###.#...
+.###..###.##.##
+#.##..##.###...
+#.##..##.#.####
+.#.####.#.#....
+###....######.#
+
+.####.##.##
+#.#..#..#..
+#.#..#..#..
+.####.##.##
+...#.......
+##.#......#
+.##.######.
+
+.#..##...###..#
+.########..#.#.
+###.##....##.##
+...#####...##.#
+.#.#.#.#.#..##.
+.#.#.#.#.#..##.
+...#####...##.#
+###.##....##.##
+.########..#...
+.#..##...###..#
+..##..#...###.#
+..##..#...###.#
+.#..##...###..#
+
+...#.#.
+...#..#
+.#..##.
+##.#.#.
+####..#
+.###..#
+.##...#
+####..#
+##.#.#.
+.#..##.
+...#..#
+...#.#.
+####...
+####...
+...#.#.
+...#..#
+.#..##.
+
+#.###..#..#..###.
+...#.###..###.#..
+..#..#.#..#.#..#.
+...##.#.##.#.##..
+...##.#.##.#.##..
+..#..#.#..#.#..#.
+...#.###..###.#..
+#.###..#..#..###.
+..##.#..##..#.##.
+.##.#.#....#.#.##
+.####.##..##..###
+#.#.#...##...#.#.
+#...#.##..##.#...
+.##...#....#...##
+.#...#..##..#...#
+.#.#...####...#.#
+##.#....##....#.#
+
+.###..#....#..##.
+.###..#....#..##.
+#.##..##...##.###
+#...##..##..##.##
+###..#.#..##.#.##
+#.#.#.##.........
+.###.#.##.....##.
+.###.#.##.....##.
+#.#.#.##.........
+.##..#.#..##.#.##
+#...##..##..##.##
+
+...##....#.......
+#..##...###..##..
+.##..##.#..##..##
+#..#.##...##....#
+#.##...####.#..#.
+#...#......######
+##.#...##.#.#..#.
+#...#.#..####..##
+#.#.#..##..######
+####....#.###..##
+.####..#.##......
+.####..#.##......
+####....#.###..##
+#...#..##..######
+#...#.#..####..##
+
+##...#......#..
+##...#......#..
+...#.########.#
+#.#..##.##.##..
+..###.##..##.#.
+.#..#..#..#..#.
+###.##.####.##.
+#...#...##...#.
+..###.#....#.##
+
+#.#####
+..#####
+#.###.#
+#..###.
+#..##.#
+.##..#.
+..#...#
+.....##
+.....##
+
+.#.#.##..##.#.#
+...#........#..
+##...#.##.#...#
+.###..#..#..###
+##..##....##..#
+.#...#....#...#
+...####..##.#..
+###..######..##
+#...#.####.#...
+.#.##.#..#.##.#
+#.#.###..###.#.
+.#..#......#..#
+######.##.#####
+######.##.#####
+.#..#......#..#
+#.#.###..###.#.
+.#.##.#..#.##.#
+
+..#....######...#
+..####...##..#..#
+.##.###.##.###...
+#.#.....#....#.#.
+.#.#..###...###..
+.#....###...###..
+#.#.....#....#.#.
+.##.###.##.###...
+..####...##..#..#
+..#....######...#
+.#.###.###..#####
+.#.###.###..#####
+..#....######...#
+..####...##..#..#
+.##.###.##.###...
+
+##.###..#.##.
+##..#.#...#.#
+##..#.##..#.#
+##.###..#.##.
+#####.##.#.##
+###....##.#.#
+.......#...##
+##.##.#######
+###..#...#.##
+.......##.##.
+..#.##.##..#.
+
+#.###..#..#.####.
+......#.##.#....#
+.##..#..#.......#
+.#######...#....#
+##.....#..##..##.
+#..#....#######.#
+##..#.....###...#
+##..#.....###...#
+#..#....#######.#
+##.....#..##..##.
+.#######...#....#
+.##..#..#...#...#
+......#.##.#....#
+#.###..#..#.####.
+#.###..#..#.####.
+......#.##.#....#
+.##..#..#...#...#
+
+###.#.#
+...####
+##....#
+##...##
+...#...
+...#..#
+#..####
+..##.##
+###.#..
+..#.#.#
+...##..
+####.#.
+..#.##.
+..#.#.#
+..#.#.#
+
+##.#.###..##...#.
+.#..##...#..##...
+.###...##.#.####.
+#.#.##.#..###..##
+.###.#...##..###.
+.###.#...##..###.
+#.#.##.#..###..##
+.###...##.#.####.
+.#..##...#..##...
+##.#.###..##...#.
+.#..#....#...####
+###..####.#.#...#
+.###.##.#..######
+#..##...#####.###
+#..##...#####.#.#
+
+#....##..####.##.
+#....##..####.##.
+.#...#.....#.#..#
+...#...#####.##.#
+..##..##.###..##.
+#...###..##..####
+#...###..##..####
+..##..##.###..##.
+...#...#####.##.#
+.#...#....##.#..#
+#....##..####.##.
+
+#####..##.###
+#####..##.###
+###...##.#.#.
+#..##..#..#..
+##.#.#..#####
+##.###...#.##
+..#..###.##..
+..#.#...#####
+#########...#
+..##..##..#..
+..###.##.#..#
+
+..#####.##.
+.###.######
+..#..#..##.
+#####.#####
+#####.#####
+..#..#..##.
+.###.######
+..##.##.##.
+##.###.....
+#.#####.##.
+#.#........
+
+...#####.....
+...#####.....
+#....#.###..#
+#######...##.
+..##.#..##..#
+###......####
+..#.##.##..#.
+.##..###..#..
+.##..###..#..
+..#.##.###.#.
+###......####
+
+.###....###..
+...#.##.#...#
+##..#..#..###
+##..#..#..###
+...#.##.#...#
+.###....###..
+..###..###...
+##.######.###
+##...##...##.
+#...####...#.
+..#......#...
+##.####.#.##.
+##.##..##.###
+
+##..##.#.##..
+.#..#.#...#.#
+..##..#######
+..##..#######
+.#..#.#...#.#
+##..##.#..#..
+..##..#.#.###
+.####.##.#.##
+#....######..
+......###.#..
+.####.##..#..
+.####.....###
+#.##.#...#.#.
+#.##.####..#.
+#....##.#.#..
+######..####.
+.####....####
+
+##..####..##.#..#
+.####.#.###..####
+.#..#.##....##..#
+.####..#...###..#
+..##..#....#..##.
+..##..##.#.##.##.
+#....##...#..#..#
+..#....#.#....##.
+..##..#....######
+########.#..#####
+#######.##.###..#
+..##..#...#..####
+##..###.#..#..##.
+
+......##.....
+......##.....
+####.##.#.#.#
+.......#.####
+.##.##..#.###
+.#....###....
+#####.##.#.##
+###.#.##.#.##
+.#....###....
+.##.##..#.###
+.......#.####
+####.##.#.#.#
+......##.....
+
+..#..#..#..#...
+.##.##..##.##..
+##.##....##.###
+....#....#.....
+#............##
+...###...##....
+####......#####
+#...#....#...##
+...########....
+#.##.####.##.##
+##.#.####.#.###
+
+.#..######..#..##
+##..##..##..###..
+##..##..##..###..
+.#..######..#..##
+..#........#..#.#
+#.###.##.###.#..#
+#.#.######.###...
+
+###.#######....##
+######.#...####..
+##...#..#.#.##...
+####.#.##########
+##.####....#..#..
+##.....##.#.##.#.
+.######..##.##.##
+...####.###....##
+...#.##..........
+##..#....#.#..#.#
+##..#....#.#..#.#
+...#.##..........
+...####.###....##
+.######..##.##.##
+##.....##.#.##.#.
+##.####....#..#..
+####.#.##########
+
+.#...####...#.#.#
+##..#.##.#..##.#.
+.##...##...##.#..
+..###....###..#..
+#.#........#.#.##
+..#..####..#..#..
+..............###
+..............###
+..#..####..#..##.
+#.#........#.#.##
+..###....###..#..
+.##...##...##.#..
+##..#.##.#..##.#.
+
+..##.#..#
+###...##.
+..#.#####
+.##.##..#
+#........
+##..#.##.
+#........
+##..#.##.
+#...#.##.
+
+..#.##..###
+#.##.#.##..
+...##.#....
+...####....
+#.##.#.##..
+..#.##..###
+#..##.##.##
+.#.#...#.##
+##.##.#....
+#..#...#...
+##.#..#.#..
+..#.#..#.##
+##.#.##.#..
+
+#.....#
+#...#..
+#...#..
+#.....#
+.##.###
+.####..
+#.##.#.
+##..##.
+##..##.
+####.#.
+.####..
+.##.###
+#.....#
+
+........###..
+#..##..#.##..
+.######....##
+......#..##..
+#..##..#.#...
+###..####....
+#.#..#.##..##
+#.####.#.####
+##.##.##.##..
+.##..##...###
+##.##.##.#...
+###..####.#..
+.##..##.#....
+
+.####.#######
+..##..#.##...
+##..##.......
+##..##..#.#..
+.####..##....
+.####.##.##..
+.####.##.....
+#....##...#..
+#....#.##.#..
+...#..#.#....
+#.##.###.#.##
+
+#......##
+.#....#.#
+#.#....##
+..#..#...
+..####...
+..####...
+.#.##.#.#
+.#.##.#.#
+..####...
+
+##.#..##.
+..###.##.
+..###.##.
+##.#..##.
+..#...##.
+#...##..#
+#.#.##.##
+
+..##..##.#.###.
+.###..##.#.###.
+###...#.###..##
+#######.#...##.
+######.......##
+#..######...###
+.#..###.###.#..
+..#.##.##.#.##.
+.###.##..##.###
+.####.######..#
+.####.######..#
+.###.##..##.###
+..#.##.##.#.##.
+
+#.#...##..##...#.
+.....##.##.##....
+.##...######...##
+.##...######...##
+.....##.##.##....
+#.#...##..##...#.
+#####..#..#..####
+.....#.####.#....
+..##..#.##.#..##.
+####.########.###
+###.##......##..#
+...##..#..#..##..
+#.#.###....###.#.
+.##.###....###.##
+.##.#.##..##.#.##
+.#.#..#....#..#.#
+....#.#.##.#.#...
+
+#.##.#...#.##..##
+.....######....##
+#.##.###....##.##
+###...##.##.##.##
+.#...##..#.....#.
+#####.#.##.#..###
+#.#####.#..#.#.##
+#.....##..####...
+..#.###.....#####
+#.....#.#####....
+#.#.##.#.###.#.##
+#.#.##.#.###.#.##
+#.....#.#####....
+..#.###.....#####
+#.....##..####...
+#.#####.#..#.#.##
+#####.#.##.#..###
+
+###.#..###.#...#.
+##.#.#...####...#
+##.#.#...####...#
+###.#..###.#.#.#.
+.####.##..#.##.#.
+#.##.###..#.#####
+..#..########..##
+#.####.....#.##.#
+...###..##.####..
+..#...#....#...##
+..#####...#####..
+..#####...#####..
+..#...#....#...##
+...###..##.####..
+#.####.....#.##.#
+
+#..............
+#...##......##.
+..###..#..#.###
+##...##....##..
+.#.#...#..#...#
+.####.######.##
+..#...##..##...
+..#.##.#..#.##.
+#..##..####..##
+#..##..####..##
+..#.##.#..#.##.
+..#...##..##...
+.####.######.##
+
+#..###.#.#..#
+####.##.####.
+#..######.###
+#####...#..#.
+..#..#...#.##
+.......#####.
+######..#...#
+#..###.##.#..
+######.######
+....##..#.##.
+....##..#.##.
+######.######
+#..###.##.#..
+######..#...#
+.......#####.
+
+.###.##..#.
+.###.##..##
+.#...##...#
+.##.###....
+.##.###....
+.#...##...#
+.###.##..##
+.###.##..#.
+#....#..###
+#.#.##..#..
+.##.#......
+#...#...###
+###..###..#
+....###.##.
+.#..##.##.#
+
+#.#....##..#.#.
+#.#....##..#.#.
+#...#######...#
+##.##........#.
+...#.###...#.##
+####.....#.#.#.
+..#####.##..#..
+..#####.##..#..
+####.....#.###.
+...#.###...#.##
+##.##........#.
+#...#######...#
+#.#....##..#.#.
+
+...##.###..
+##....#.#.#
+...#.#.#.#.
+.#.##.##...
+#..##.#..#.
+######.#.##
+######.#.##
+#.###.#..#.
+.#.##.##...
+...#.#.#.#.
+##....#.#.#
+...##.###..
+#.###..#.#.
+..#..###.#.
+#..#..###..
+#..#..###..
+..#..###.#.
+
+.##.#..#.
+.#.##..#.
+..##....#
+##.#####.
+.#.....#.
+#.###.#.#
+#.###.#.#
+.#.....#.
+##.#####.
+..##....#
+.#.#...#.
+.##.#..#.
+..####.#.
+.#.#.##.#
+.#.#.##.#
+
+####...#....#...#
+.##..####..####..
+####....#.......#
+....##..####..##.
+....###......###.
+#..##..#.##.#..##
+....#.#......#.#.
+#..#.#.##..##.#.#
+.....##.#..#.##..
+
+..##.#......#.##.
+...#.#.#..#.#.#..
+###....#..#....##
+##.#.#......#.#.#
+#####...##...####
+##.#..#.##.#..#.#
+..#..##....##..#.
+###.#.######.#.##
+..###.######.###.
+..###.######.###.
+...#...#..#...#..
+###..#......#...#
+..#####....#####.
+##....#.##.#....#
+...#..######..#..
+..#.##......##.#.
+##.#####..#####.#
+
+####..#......#.#.
+#..#...#...#..#..
+....##..#.###.###
+......#..###.#..#
+#####.....##....#
+#..#..#.####.#.#.
+#..###...#.....#.
+#..##.#.#.#..####
+#..##.#.#.#..####
+#..###...##....#.
+#..#..#.####.#.#.
+
+#.##.#....#..#...
+###....###.######
+..###....######..
+.#.#..#.#......#.
+..########.##.###
+..########.##.###
+.#.#..#.#......#.
+
+..####...#......#
+...##....#...####
+#.#..#.#.##..####
+...##.....##.#...
+...##...#.#.#....
+##########..#....
+#..##..##.#...###
+.#....#.##...##..
+##....##...#.##..
+
+....#####.#.##.#.
+#....##.#.#.##..#
+##...#.....##..#.
+#..##..###...#..#
+#..##..###...#..#
+##...#.....##..#.
+#....##.#.#.##..#
+....#####.#.##.#.
+#..#.#..#..#.#.#.
+.#.#.....#.#..###
+#.#.#.#####.##.#.
+#.#.#.#####.##.#.
+.#.#.....#.#..###
+#..#.#..#..#.#.#.
+....#####.#.#..#.
+
+#####.#..##
+..###.#..##
+..###.#..##
+#####.#..##
+##..#......
+..###..#..#
+##.#.#..#.#
+#...##.##.#
+..####.#.#.
+###...#.#.#
+..#..##....
+##...##..#.
+..#.####...
+##..#.#.###
+..#.#.##...
+
+####.#.#.###.#.
+....#.#.######.
+....#.#.######.
+####.#.#.###.#.
+##.##..###.#...
+#..#.###.....#.
+#.#######..####
+.#.##.#...#..#.
+#..####.......#
+.##############
+#.#....#.###.#.
+#.#....#.###.#.
+.#########.####
+#..####.......#
+.#.##.#...#..#.
+
+.#.....#..#..
+#.#.#.#..##..
+.#####.#..###
+#.#....#.#...
+#.##...###...
+#.##...###...
+#.#......#...
+
+#.#..#......##..#
+..#..#..#..#..##.
+#.......#.###....
+##.###.###...#..#
+####..###.####..#
+...###.......####
+###..#..#...#####
+###..#..#...#####
+...###.......####
+####..###.####..#
+##.##..###...#..#
+
+...#..##.#.
+...#..##.#.
+#..#.#..#..
+...#.###.##
+##..#...##.
+###....#...
+#.#.#..###.
+.#..###....
+.#..###....
+#.#.#..###.
+###....#...
+##..#...##.
+...#.###.#.
+#..#.#..#..
+...#..##.#.
+
+...#####.##.#
+#.##.........
+#.##.........
+...#####.##.#
+.#######....#
+##.#..#..##..
+....##...##..
+..#.##..#..#.
+.###.##......
+.#..###......
+...#.#.##...#
+
+.#..#...#.##.
+...#####.#..#
+...#####.#..#
+.#..#...#.##.
+#...####.####
+......#..#.##
+.##..#.#..##.
+#.#.#.##..#..
+#.#.#.##..#..
+.##..#.#..##.
+......#..#.##
+#...####.####
+....#...#.##.
+
+##....#.##.#.
+.........#.##
+##.#...#....#
+##.#...#....#
+.........####
+##....#.##.#.
+####.##...#.#
+...#.....###.
+..#######.#..
+
+#.###.##.###.##
+###...##...#.##
+.....#..#......
+#..#......#..##
+##.########.###
+#...#.##.#...##
+##.###..###.###
+.##.##..##.##..
+###.#....#.####
+
+..###.##.##..
+..#........#.
+##...####...#
+...#.####.#..
+....##..##...
+..##.####.##.
+...#..##..#..
+##...#..#...#
+##.#......#.#
+
+......#
+..#..#.
+####...
+###.###
+..##.##
+..#..#.
+..###.#
+##..###
+##..###
+..###.#
+..##.#.
+
+...##....##..
+...##....##..
+..####..####.
+####......###
+#..#.#..#.#..
+#.#.##..##.#.
+.############
+###...##..###
+##.########.#
+#.#..#..#..#.
+#.####..####.
+#.#.######.#.
+.#.##.##.##.#
+.#...####...#
+##..##..##..#
+
+###....
+###....
+#.###.#
+###....
+..##..#
+.######
+#.#.##.
+##..##.
+.#.....
+
+####..#
+####..#
+...####
+....##.
+...#..#
+.##....
+.#.....
+#.##..#
+##.#..#
+.#.####
+.##..#.
+##.....
+.#..##.
+#.##..#
+.##....
+##.....
+..#####
+
+##....##.#.###.
+....##.##.#..##
+.#.######..#...
+...#.#.#.##.#..
+###.#..#.#..##.
+##.###.....#.##
+##.###.....#.##
+###.#..#.#..##.
+...#.#.#.##.#..
+
+...#.#..#
+###.#.#.#
+###.####.
+.....##.#
+.#.###...
+.#.###..#
+.....##.#
+###.####.
+###.#.#.#
+...#.#..#
+.##..#.#.
+.##..#.#.
+...#.#..#
+
+.#.#.##.#....
+###..##..#.##
+#.....###....
+#..##..#.....
+#..####.##...
+###..####.#..
+###..####.#..
+#..####.##...
+#.###..#.....
+
+#######..#..##.#.
+#####.#..#..##.#.
+##...####...###..
+..####.#.#..##...
+###.#######....##
+..#.###.#.#.#..#.
+...#.###.####.#..
+
+#.######.##
+.#......#.#
+.#......#.#
+#.######.##
+#.##..##.#.
+.##.##.##..
+#######.##.
+..######..#
+##..##..###
+.########..
+#.######.##
+##.####.##.
+...#..#....
+#.######.#.
+..##..##...
+
+#........##
+.#.#.#.....
+.#...#.....
+#........##
+##.##..##..
+.#..#..##..
+##.#.#...##
+#.#..###...
+#.#.#.##...
+
+.##...#.###..
+.#..###...#..
+..##.#.##....
+.#..#.##.####
+...#...#.#.##
+.#.##.###.###
+#.###......##
+#...###..#.##
+.###.##.##.##
+#.###.#.#..##
+#.###.#.#..##
+.###.##.##.##
+#...###.##.##
+
+####..###.#
+......###.#
+.....#.....
+.....#..#.#
+....#####..
+.##...##.##
+....######.
+####.##.#..
+#######...#
+.##.###..##
+.##.####.##
+.......#.##
+#####...###
+#######..##
+#####..#.##
+####..#...#
+####..#..##
+
+.....#.####.#
+#.###..#..#..
+##.#.#..##..#
+#.#.##.#..#.#
+.....###..##.
+####..#.##.#.
+.##..########
+.##..########
+####..#.##.#.
+
+#....######
+#....####.#
+#....#..#.#
+##..####...
+.####......
+..##.....#.
+.......##.#
+......#...#
+#.##.##.##.
+......#.#..
+.####..#..#
+
+...#...#..#....#.
+#...##..#..##.#..
+###.####.#..##..#
+###.##.##.######.
+...#.###.#......#
+#..###.#..##..##.
+#..###.#..##..##.
+
+#########.#..##
+..#....#.#.#.#.
+#.#.#.###...#..
+#....##.#.#..##
+#.....#.#.#..##
+#.#...###.#...#
+..####..#.#...#
+..####..#.#...#
+#.#...###.#...#
+#.....#.#.#..##
+#....##.#.#..##
+
+..##...
+...##.#
+...##.#
+..##...
+..#...#
+...#...
+##...#.
+....#.#
+..###..
+#####..
+..###..
+....###
+.#.##..
+...#...
+####...
+
+##....######..#
+.#....#.##.#..#
+########.###..#
+.##...#..#.....
+.##..##.##.####
+.######.##.#..#
+#..##..#...####
+##.##.#####.##.
+.#....#.##.#..#
+#......###.####
+#.#..#.#.#..##.
+###..###..#.##.
+#########.#.##.
+
+#.#####.#..####..
+...###.....#..#..
+#...#..##...##...
+####.##.#.##..##.
+#########.##..##.
+#...#..#.########
+#..##..#.########
+
+..#####
+..##...
+#..#.##
+#.#.###
+.#..#..
+....###
+.#.#.#.
+....#..
+#..####
+.##..##
+.##..##
+#..####
+....#..
+
+###..#.##
+#.###.#.#
+#.###.#.#
+###..#.##
+.#.#.###.
+.#.###.##
+.#####.##
+
+#####.#.##...
+#..##...##...
+.##..#......#
+......#.##.#.
+####..######.
+....#.######.
+.##...#....#.
+.##.#........
+#######....##
+#######....##
+####.#..##..#
+#..#.###..###
+#####.#.##.#.
+####.#.#..#.#
+#..####.##.##
+
+####..#####
+#.#.##.#.#.
+###....###.
+###....###.
+#.#.##.#.#.
+####..#####
+#..#..#..#.
+#.##..##.##
+...####....
+######.###.
+##..##..###
+..#.##.#..#
+#.#.##.#.##
+####..####.
+#.##..##.#.
+.###..###.#
+#..#..#..#.
+
+#....#.##..##
+........#..#.
+......####.#.
+......####.#.
+........#..#.
+#....#.##..##
+#.##.##.##.##
+#....#..#....
+#.##.##..#.#.
+##.#####.#.##
+..##........#
+......##.##.#
+#....#.#..###
+
+##..#...#
+##..#..##
+#..#.###.
+######..#
+#.###....
+....#....
+....#....
+#.###....
+######..#
+
+........#....##.#
+.####...#....#.#.
+..##..####.#.##.#
+##..##.....##..#.
+###.##..#######..
+.#..#.....####.##
+.#..#.....####.##
+
diff --git a/2023/_input/day_14.txt b/2023/_input/day_14.txt
new file mode 100644
index 0000000..8adc8cc
--- /dev/null
+++ b/2023/_input/day_14.txt
@@ -0,0 +1,101 @@
+#.....OO..O#.O.#O......#...#...#.O......OOO.....O#...OO##...#..#O..O...........O..#O....O......O..#.
+#....O#..OO#..O.#O#O......O..#..#.O..#.....###....#.O.....#O#.##..##..............O..OO.#O.##OO.O.O.
+OO..#.O.O....O..#..##.O..#.O..#O..#..#..#..O.O..#...O#.OO.O.#.....#..#.O..OO.#......#....#.O..#.#.#O
+....#..#.#.O...O.........#...O...##.....O......#O#O.#O.............O..#O.....O.O.O..O#......#.O.#..O
+#...O..#..#..#..OO......#.....O.OO...#...OO.O......#O.....OOOOO.##......#.#....OOO#...#.......O.....
+.O.O...O.#.....O..##......##O#....O.##.#OO#...#OO..O..##...#....#..O.O.##......#..O.O#...........#.#
+....#....#...OO....#..#.O...O...O.OO#O.OO..O...OO.O....#OO#.#....O....O..#...#.#.##.O...O.O..O..##..
+...OOO..#..##..O..O.#...#O......OOO....#.#.OO.#.#..#.##O...O.O....##OO..............O#.O..##.O#..OO.
+##..#.......OOO..O....#.O...O.O......O#..O##.OO###..OO....O......#....##.O.....#O#O...#..O....#.....
+#..OOO..#.O##O.......O..O....O...#.....#OO..#.......##.O...#....#.#..O.O.#O.....OOOO##..##O#O....O..
+#.O#..O.#..OO.O.#O.OO#O....OO.....#..O...#..........#....OO..O#O.#OO......#....OO...#....#O.O.O.##..
+#......#.#.#.##.#O#.O....OO....##.O.#..O..O..O...#O.........#.O#.#..#..#...#....#OO..#OO..#........#
+...#..O.O.OOO#O#..OO......OO....#..##.....#O.....#.##.OOO#O#..#.....O....#......O.#.#O.O.O..OO.#....
+.#O..OO#O...#...#O..O#.OO....O..##..#..#...........#..OO#O.#..#...OO...O.#..#..O..##......OO....O..O
+.O..O#O..#...#O#O#.#......#.#..O...............O..O.O#.O..........##..#.O.....OO#.OO.#....#.####....
+O..#.O#..O.O.O...#.#O.#.......O....OO.O.#.O.O....#O##.O.......##O..OO#O...##.##O#...........O#.O###.
+.O..#O..#....#..O#O....OO#....O#........#.#.#...#......#..##...O.......#O.#.#O#.O...#O.#.OO.#.......
+###O.......#.....O.O..#.#.....O.....#...#.#......#O.O.......##......##......OO.#.O..OO...O#.........
+..O..O.OO#..OO#O##....O..OO...O.O..OO....#.O...#O.##..#.O........#....#OO#....#...O...O.##.#.#O#OO##
+....#OO.O.....#.OO.#.#.#.#......OO......O...#.#.#....O..O#......#O.O#...O#.......#..O..O..O.##....OO
+.OO#OOO.....O.OO...O...#....#OO........OOOOO..O..#...O#..O.....#..O#.#......#O.#..###.O.O..#.O.....#
+O##.####O.##.OO..#..........O#.O...........#..O..........O...#.....O......#........O.#O.#O#O.O..O...
+...#.OO..##.....##.O.##...O....O.##.....#.O..O.O.....O.....#....O..#.#..O..O....O....#O..#O..O..O...
+...O#..OO#O..O...O.....#..#..#.O.O......O#......O.##.OO....O...#....#..O............O...OO#.O..O#.O.
+O..O..O.#O....O#.##O..#..#.#.O.....####OO...O.##..O#..OO...OO.#O.......##..#.O.....O..O.#O...O..O..#
+........#O..#O..O..#.#.....#..#...O.......O...#..OO.##.....O...O..O.#.....##.......#O.#O.#O...#O.#..
+......O...#O#OOO.##.##O..#...O....#O.......OO....#...OO....O...#..O...#O.....OO#O#O##..O..OOO.#..#.O
+##O..O.O..O.........#O....OO.##O..O..#OO....O.......O#O#.O..O......#....O...#..O#....#.OO#..#....O.#
+..O....#...........#.O.O.O...#.#....#.#.........O.#..O.#.#..O........#O....##..#O...O.O#...O.#...O.O
+#....O............#....#..O.O......#....#.#O......#.OOO...#.O..O##...#.#..#...O..O..#..#....O...O...
+........#..O#.......#O.O.........O.###..#...O#..O.....OO#O...O...OOO.#..........#.O.OO#...O.........
+.#.....##.#.#O###.O...#.O##O.#..#..OO.....#.....#....#...O........#..##O.#...O.....O........O#.O.O..
+.O.O##...O..##O...#.........OO#O.#...#O.......O.....O#....O.O.....###...O.#..#....O........OO..O....
+#.##OO.O.....OOO.#...O......O....#..OO..#O..##...OO.....#.#...O.O#..#O##...OO..#....O#..#.O.#.#..OO.
+.O........OO.##....O.#.#....#...O.O#..O...##....OO.O....O.##O..#.O....#O....O.....#..O..O.#...OOO..#
+.OOOO..O#O..##......O##....#OO.#..#...#...OO#.........O.#...#..##..O...O.##.OO##..O.#.......#...#O..
+.O##......#...#O..OO.O.O.O.......O.#................OO.......O.OO....O......#..O..#....OO#.OO....O#.
+....#OOO...#..O..#..OO..##...##...#...O.O...#.O..OO#O....#.....##OO...O.O....#.OO.O.#.#O..O.O#.#...#
+OO...#OO.OO#...#.#....O.#.O...#.....OO..O.....#O..#....O.#.#...............O#..#...###.O.O..#......O
+#O#.#.....##.O#....#O....O...O.#.OO#.OOO...OO.....OO...O....#.#O....OO..O..#OO#.O...O..#O.##...#....
+.#.#O#...OO.....#.O##.OO.....#O.#O....O#..O#..O...O....O#.O...#O........#..#OO...#...O.O.#O##....O..
+.O..#.O#O..O....O...#........O....O........OO..O.#..O..#...O.O.#.O.#.O...O........O..#.#.O#...#...#O
+....O..O.##O#..O.....OO.O.......##.#....O.....O.OO....#.#..O....#...#O#O.#.#.O..O.#...##.#.O..O.O...
+#..OO.OO.#...O##O#.O.#.OOO..#O.#.........OO.O..##.#..#..............OO#..##OOOO.O.#..#....#...#....O
+..O..#.....##.#...OO..O.....OO.....O#.O.##.#...O.#O..#............##....##.....##..#.#.O...O#..OO..O
+O.#..O.#.........#...OO....OO....#..#...OOO.O..OO.#...OO.......#.#.O..O..O....O.......#O..#O..O..O..
+#.O#...OO......#..OO#.....#..O....O#....#O...O....#...O...#.O.O..O.O..#O...O.O...OO.#O..#.O.......O#
+#O........##..O...........O#.........#.O.......O...##..OOO..#...###O....#..#.#.#OO#...#O....O.O...O.
+#......OO.........O......OO..#..OOO.#......#...O....#.O.#.....OO.#...O..O..........###.O...O......#O
+####O..OO#....O#...#.O.......O.#...O.....O##....O.O#........#.....#O.#......O.#O....O.#.OO.O.O.#OO.#
+..#.....#.....O...#..O......##.###...#..O...OO#O...O.#..OO...O#...#.....O..#....#O..OO.O#.....#...##
+......O#O...O..O...#..O..O.O..#OO.O.#...O##..OOO.#.#.....O....##....#O...O.....OOO..#O.O..O#.OO.O#.#
+.....O.....O.OO##...OO#....###..#..OO.#O.#.#..#.....#.....O......OO.#.#OO...##......#..O##.#..O#O...
+...#O..#...O...O.O...#....O.#...O..O.O.......#.#O...O.O...O#.....#.O.#.......OO.#..O..O#.....O......
+......#.O#.............O...O..O#O...O#.O.#..O..O.O#....#.....O...#...#O.........##...OOO.OO.#.#....O
+..O..#O...##.O.O......O##...####.#...#..O#....#...O.O.OO........#...O.#.#........#...O......#....O.O
+..O..#O.OO...O..#...#O....O.....#O......#OO.....#...#..#....O..#..##O..O..##...........O.O##...####.
+#.OO.O........O.....#O....O..#..##.##.O.....#..........#OO.O.O#O#.....#.O#..O...#O##.....#.#OO......
+#.....#....O##..O..OO..O...#..O.##.......#..O..O....#.OO..#..#...O..#..O.#.....O.O..#O#.....#.......
+..O...O..O..#O#...........O.....O....OO.....O..OO...###O##..#.O..O..O..O.#.#OOO#O.O......#.O..#.#...
+...O#O.O.#..#..........#..OO.###..#O##..O#..OOO....O.#.....##.O##..#...OO...#O....#....OO.O.#.#.#...
+.O...#..O#O.O.OO....OOO....O#..OO.#O...O.O..#......O.O...##..#..#O.O.#OO...O.O##...........O#O...O..
+..#..#..##...OO#.....O#O.O#..O...O.##O.##...OOO.O.#O#O..O....O#....O..#...#.O##.....#.O.OOO..#.....#
+.OO....##O..O#O.O..#.#....OO..O.#.......OOO#.O.......#O.O.O.O.#...O....O.O...##O...O..#OO#.....#...O
+.......O.O.O#.OO.#.#OO...#.O#..#...O...#...#.#.....O.#O..OO........O#OO##..#.O.O.O#.O..OO#..#.O##...
+...........O...#..#.OO.....O#.#.#...#O......O..OO..#.#...#.O.O.#.O...O.#.O.O..OO.............#.#O...
+.#.O#..O.O.O.OOO.##.......#..O.O..O##...O......OOO.......#O#.O.##..#..O...#..#.O.#.O..O...OO#O#.#...
+.........OO....O..#.......O..O.OOOO#O....O...O..O.O..#OOOO.O.OO.O...O.......#..O....#..O####..O...O.
+O.O.............#..##O#..O..#..............##.O....#O....OOOO............O.#.#O.O....O.#.......O.O#.
+....#O.O.#......#....O.O...#O#O#OO#.O.O.....O...O.#...O.OO#...OO#.OO............#....#..O....##.#...
+#.O..O.O.O.O.............#.#...#....O..#OO.#........O.........O....#..#.O.O.#....#....#..#O..O......
+.#OO..O..O.O.O#...........#...OO.#.....O.O........O..O.....#.##.OO.O..O..........O...#.O...#..O..#O.
+...#O#O#.......#.O..O.O.#....#..#..O.O.O..O#..O##........O.O.#....#.......#..O.O..O.#...O..O...#...#
+OO.O...#..O.#...#O#......##.#O....O...O.......O.O.O......#...........O.O.#O#.........O...O#..O#.#O..
+O.OO.O.O.O.O..#..OO......OO....OO......OO....#.....O........O.#O.O##.O.O.O.#OO.O....OO..##O#...O....
+..O..OOO.O...#....O..O#.O...O..O.O#O..OO...#OO.#....#.#.#OO.....#...O..OO#OOO....O..OO.O.O.O#..#.O##
+O....O............#.O...O...O.O.O.......#..O....#O..#..O#O...#........#....O...#O.##O.#.O.##O....O..
+.O.O....O..O..O..O..O..O.O.O.#....##...O.O.....O..##.O#.O.O.#.OOO.O........O#OO..OOO.#.#..O.....#O.#
+OOOO..#.........O...O.....#O.O..#.O.#......O..OO.......#O.............O...#.#.O..#.#.......#.O......
+.....OO.O...OO.#O...O.#.#.O.#.#..O.O.....O.O.##O..#...O.#...##O.O##...#O#...#O..........O#....##.O..
+.#..#.....#.O..##O.O...O.#..#.#..###...........O..#.....O#.OOO#..#OO.#.##.O#.....OO..##O.#.O..#O...O
+#....O...O...O#..O.O......##O...O....##....##.O#.O.....#..##.O#.O#.#...#O.###...#..OO.#O..O.OO....#.
+..O.OO.#....O.#.OO....O......##.OO.....#.......#.#..O.O.O...O.........#O#..O.O....O....#O.O.O....###
+.O...#......#OO.#.O#.O.#.O...O....OOO##O#.O##....#.O#..#O#......#.#.........OO....O.#....O.....O....
+.#..O.O..#O.#....OO....O.O.#.....OO.O#.O#...##O...O#............#.OO.....O...O....#.#O#...#..#.O#.O.
+.#O.......O.O.#...O.......#..O..#O..O.##..O#.O#....O..O....O.O#...O..OO................#.OO..O.O.#O.
+.....O.#...O.O.#...#...O.O.O.#......#.O.#.##.........#.#.#O.............#O#.....O.#....O..OO#......#
+O....O..#.#...#O#.....O.O...#....O..#.O#....O....##.OO..##.....#.O.O...#O...O##....O#OO#...#O#O#.O..
+..O.#..#O.O...#......#...O.O..O...O......OO#...O...#OO.OO.#.O##..OOO....O..#...OO.O...#O#O..#OOO.#..
+.##....O.#..O#.#OO..#...O....#O...#..OO................O....O....O#.O.#.OO.O....#...OO.#.O#..#O#...#
+.....#....#.OO..#O....#.#.....#..##.....O...#.O..O...............#O##....OO.#OO.OO.....O..O......##.
+.##..##O..#......#O..O...OO....O.#.#OO..#.....O....#O.#.#.#..O...#O.#....#O.O.....#.#O.O..........O.
+.......O##.O..##..##..O#....O.OOO.OO.#..##O...O#.#......#O.....O..#..#...#...#O..#.#..#..#....#..O..
+...#.O..O.#....O....O###....O#...#..#O..O...#.#..O.O.OO...O.##......#..##.OO#O..O.......O#.O...O.O..
+....O.O.O..#O...O.................OO.O.......O.OO.O#.OO..#.O.OOO.O.O....O...OOO....OO....OO#.#...O.O
+OO.....O.#.##.#O..O.O...#.O.O#...O...O.OO....#..#..........O...##..#.....#.#O...#..O#..###...OO#..#.
+....#O.....O..O..#.O##.#...###..O...O.O...O#..#.O.#O..#..O.#..O..#....#...#..O..O.O....#..#.....#...
+#O.......#..O.O..#.....O#O..O..O.O..##..#....O.O#.#..#.O.#.OO..O...#O....O....O#O#..#.#O.O.....#...O
+.O.###.O..#..#..#.......O.O....#..OO...##..O#O#O#.....O.##O.#..O.O.OO.#.O...OO...OO.O..OO.O..#...O#.
+.O#OO.#.....O..#.O#.#O.O......O..###.#...#.......O#...#O.#..#..O.#.#......O.O..#O..#...#O..#O.OOO.#.
+
diff --git a/2023/_input/day_15.txt b/2023/_input/day_15.txt
new file mode 100644
index 0000000..99246fc
--- /dev/null
+++ b/2023/_input/day_15.txt
@@ -0,0 +1,2 @@
+fnln-,bkxf-,spfc=9,ds-,trzx-,dtck-,xs-,bg=4,fgmpc=5,xmxf=1,cl=9,md-,ct=2,ftz=5,xhd-,vkqx-,hxd=6,mlcn=6,ctdbt=6,txpsv-,nkx=3,jfz-,fzm=3,rvcd=4,nfgp=3,jjd=7,nzq=6,zv=5,lh-,nfgp-,gcbtgm=7,zj=6,sxlh=3,vsj=8,cjb-,tslfp=5,vc-,kpn=7,qpm=5,jgmnxd-,xp-,kmm-,xb=4,tv-,bmnlf=7,cb-,vbmk=5,dvz-,ssd=6,sb-,mldgtn-,mtx-,kz-,nzq-,dnkf-,sn-,js-,bpq-,vc-,fzm=9,xqv-,gqsr=2,jzxp=5,bc-,lxg=5,sv-,gflrmd=9,ncjb-,fm=9,lln=1,ql=9,tj=2,pbmldc-,fkzq=7,vkh=3,tn=4,fdl-,frgf=1,vf-,fpg=4,xzt-,jf-,pjfk=5,rvcd-,rv=6,zrs-,qnd=1,vqzhc-,xrb=8,lvx-,dfz-,xstdx=6,sf=4,hsb=3,sqjgc-,xtl=7,zthrd=8,mldgtn-,rc-,kpz-,tpnmp=6,bzj=7,gmrrx-,bszd-,mjz-,bzj=8,ztk=9,dtv-,qgm=4,ssd=3,xc=8,hvglb-,xf-,qhvz-,vqc-,ktj=1,ppq-,zxt-,rnsbt-,qpx-,nj-,vhl-,rknz-,zngsp-,vhl-,fjh-,vrzjf=7,gkn=6,tfd=4,bgg=1,fgmpc=9,lpd-,pbmldc=4,jm=2,vlv=4,shn-,vps=8,ljsvc-,rfdrk=3,vkqx=7,gftx=9,nzq-,cq=1,ckb=6,zsx-,qpf-,cggz-,bzj=9,lfg=6,tfd-,xdfz=8,ghbr-,dsdm=8,nj=4,jf-,fnln=7,fzm=7,fkzq=7,xcq=8,fkzq-,dm-,bfz=2,lqf=4,sfp-,kpqvtc=2,fkzq-,vth-,zn-,xhs-,vsj-,psfnx=4,xbx=1,xgk=9,snpgsm-,psg=3,shn=6,qxkrd-,pxvxlh-,xbx-,gt-,ksn-,dzn=7,gp=7,mp=8,jtz=3,ph=2,jxj=8,pg=5,txkh=6,drls=6,zthrd=9,gqsr-,dtv-,mktlhp=9,bszd=5,snpgsm=5,qz=6,sh=6,lqt-,mktlhp-,mgt-,mvmqfm=5,bc-,lpd=6,zn=3,nhsvv=3,vdf-,znjg-,phsl=7,tnb=4,qlf=9,txpsv-,pxvxlh=6,lqfv=7,lffv=5,djmlb=7,pxn-,hdxvhr=8,vbz=1,vqc=1,xrb-,bj=1,bzpv=5,tdl-,xc=2,cnr-,ss=6,mf=2,sv=2,mp-,zpc-,rqg-,xtsd-,hlg=6,xdfz=9,nl-,kfp-,cr-,qxkrd-,vpxv=9,mtx=1,drls=9,jzxp-,xqfrg-,js=3,ql=8,xp-,kpz=8,zj=9,jxj-,gf-,gcbtgm-,cmpc=4,tr=4,px=6,pvv=9,tpnmp-,jhhqj=5,mmn=3,qpf=5,vnk=9,cnn-,xgr-,mmsz=4,lvs-,cv=3,cq-,bfz=8,ct=7,kr=6,gk-,zdtz=1,vqzhc=3,xzt-,vqt=4,dphx-,kmr-,fkzq-,lk=8,dvz=6,ghbr=6,hm=6,zm-,sn-,jgmnxd-,vkz-,ps-,vpxv-,gpg=4,bmnlf=9,pjfk=3,ndmt=7,zk-,zthrd=5,fgmpc=8,rgh=7,bx-,ctp=2,nl=7,rtj=6,grlkl=9,zf=8,lg=4,zngsp-,rsn=5,drls=9,lxmkfx=7,sbt-,bx-,lln-,dm=6,fnv-,qpf-,tq-,qv=9,cfnbp-,pxvxlh-,tr-,nh-,clg-,xjpbxm-,zs-,trzx=8,bgh-,cmbv=1,vq=6,lcr=9,scbjp-,sjb=2,gmrrx=6,mg=5,znjg=4,zn=9,grlkl=7,xmxf-,smtd-,vkh-,spsx=9,qpf-,bgg-,smtd-,ntg=6,qpf-,vtp-,nlcrm=8,cvc-,frgf=8,blfx-,vbz-,tcs-,bqpp-,fjh=5,rtj=5,vr=6,kjrc=1,nzq-,qpf-,vqc-,kmr-,hj=8,fnh-,scbpb-,gxg=9,kf=6,xhs-,zdl=9,sscn=9,dzt-,rl=9,gr=6,tv-,jmthd=9,gn-,bzj=4,pv=9,pcnzf-,jxj-,sxlh-,lxg=3,rpn-,vr=9,rl-,tslfp=5,pgd=2,xmxf-,mjz=9,drls-,hrbj=7,rr-,lxg-,grlkl=3,jsv=1,sr=6,dv-,scbjp=1,pkg-,mgt=9,hsb=3,ccs-,xdfz-,cqq-,nbtq=2,ljsvc-,rpn=8,msbfzl=5,kz=7,cnr=4,hz-,ctf-,tgqp=9,tfd-,sqd=7,rb-,qf-,srp-,fkzq-,pfjml=6,rnsbt-,dmp-,zngsp-,cfnbp-,kpqvtc-,gftx-,lvs-,zpc-,kpz=2,pxvxlh-,spm-,rt-,ftz-,lvs=2,zsx=2,sjb=4,lxmkfx=7,bqpp-,hb=7,xzl-,ckb=7,hsb-,cvc-,ksn=7,mktlhp=5,jhl=6,snpgsm-,mm-,xstdx=2,rm-,rqx-,ld=4,zv=6,fx-,sbx=2,blfx=8,fmkjj-,km-,cmbv=8,vz=9,lg=4,fpg=4,kpfr-,dmp=4,xxj-,jhl=2,km-,vx-,sh=8,xqv=3,kfp=3,zdm=3,tdl-,ddxn-,gzrz=9,xqv=8,kqh=2,rlrlql-,lpd=1,vr=1,ggm-,dkz=3,jx=2,trzx-,sjb-,rh=8,dbsf=4,jhhqj=8,jzxp-,bkxf-,thnmq=7,mktlhp-,jtz=7,sh-,plt-,rfdrk-,hj=4,dk-,zjvd=9,jsv-,vkn-,jc-,zk-,mmsz-,lcr-,dkz-,px-,pcnzf-,jtz-,pzd-,kqh-,ts-,znb-,dzn-,qgm-,drls=9,bmnlf=3,thnmq-,bpq-,zxt=9,lg=6,rknz=8,bzj-,vsh-,lq-,rm-,ql-,cs=1,dzt-,hfrdk=4,kmm=9,lhks=9,jsv=5,zxt=9,kc=4,rm=8,hvglb-,bzpv-,drs=1,tgqp-,trg=4,dp-,zmlr-,pvv-,lfg=2,rqg-,nh=5,mkj=5,cct=1,lxmkfx-,txpx=2,vps=5,dzn=3,dph-,kv=1,vth=6,gftx-,lztd=3,hb=8,qpx=2,fjg-,plp-,vnhfc=3,zv-,xt=1,bgkjq-,pbk=9,hj-,sv-,kpz=5,fnh-,zpc=3,zj=8,pxvxlh-,qgm=6,gct=5,tdl=5,xtl=2,lg=7,trzx=9,hvglb=3,ss=6,vpxv-,gh-,js=1,jf=1,rqx-,pg-,nqcj-,zzx-,mf-,zlcmgc=3,lxg=8,rpgj-,vhl=6,phsl=8,dtck-,rxv=2,qpf=7,nh-,ccs-,mf=3,xrm=4,pljg=1,rnsbt=5,nnn=2,snpgsm=5,qxkrd=5,xgk-,trg-,phsl-,bzj=5,ckb=4,cqbvs=5,xgk=8,ck=7,dbffb-,tj=2,dm-,fjg-,zdm=8,jc=9,rqg=3,qhvz-,cmpc-,dzn=4,xrb=2,kfp=2,vbz-,xhs-,dnkf=3,chpn-,sl-,kftx=5,rsn=5,ps=9,jm-,pbk-,vq-,qpf=4,rfdrk-,rsn=9,nqcj=7,vsh=7,npm=7,qxkrd-,hpl=1,rnsbt-,pxn-,zsx-,lpd=5,fgmpc-,vkqx-,vth-,pm-,mgt=5,cct=3,bb-,hzlzn=2,gkn-,mjz-,kx=8,qcnnzx-,kmr=7,lfl-,jhhqj-,lqfv-,gkn=5,pfjml-,lhks=4,bzj-,tnp-,nj=1,xhs-,rtj=9,rlrlql-,qcm=3,mph-,fx-,jm-,xtl-,xdfz-,msbfzl-,ckb=7,hj-,cqr=5,scbpb=2,tslfp=1,kmm-,cv=4,zpc-,qfb-,rlrlql-,trzx-,sf-,ccs-,fsz=2,dv=8,thncf=4,bmnlf-,qgm=8,plvd-,dm-,pjfk=4,gr=6,qv=7,khx=3,vs=7,dtck=9,xbx-,xstdx=8,km=6,hgp-,kf-,xf=1,vnhfc=6,xgr=1,pbk-,sl=2,jmthd=8,sbt=6,mkj=8,vnk=3,bgkjq=8,bg=2,xbx=6,mmsz-,rnxt=1,shn-,ss=3,kpqvtc-,dfz-,qxj=9,mktlhp=4,jzxp=1,hm-,vx-,bzj=1,vnhfc-,vrc=7,bgkjq=8,gp-,vq-,lh-,tnfx=4,ntg-,dd=5,znb-,vtp=4,vgln-,hz=1,lk=1,mktlhp-,vz=3,vpk-,bbsk=4,qlf=1,hgp=5,xjpbxm-,qcm=8,tz=4,lqf=2,bz=3,jfjbj=9,lfl=6,cqq=8,xzt=4,xb-,rlrlql=9,cqbvs=8,dzt-,blfx=9,rqx=5,xfn=6,px=3,chpn=7,js-,lg-,ctf=1,qcnnzx-,hsb-,xnmq=1,hpl=1,pg-,gr-,fkzq=2,rfdrk=7,tnp-,gbsp-,nq=4,vttk=1,lrpx=5,xrm=3,crb-,nglvx=5,md=2,px=6,pljg-,sjb=3,kpjqgm=9,xrm=6,slzd=6,xc-,sxlh=6,mtx-,xc-,nbtq-,plvd=2,hb-,znfd=7,ghbr=1,gkn=3,gct-,cqq-,znb=5,jsv-,txpsv=6,dk-,dbh=7,lmlx=6,lcr-,bfz=4,xhs-,cjb-,tkpb-,dkms=4,sh-,fkzq=3,kqh=8,dv=9,lrpx-,vnhfc-,bqpp-,pcnzf-,km=1,ssmflk-,pnp-,rsn-,cqbvs=5,fr-,kfp-,npm-,vbz-,jm=9,pgd-,trzx=6,hsb=6,qrn=3,lln=8,zl=6,qpf=8,djmlb=6,zj-,qhvz=1,kz-,bzpv-,bq=8,frgf=7,blfx-,tnp=9,lqf=3,zrs=5,lc=2,scb=6,dzfqlb=3,kmqjt=1,trg=1,fzm-,bgg-,gzrz-,sv-,qz-,zlcmgc=4,qcm=1,xhd=7,zmlr-,fnv-,xdfz=9,fx-,xfn=7,zdm-,fr=7,tfd=1,njvd=4,vnk=2,xbx=8,xp=3,zbgdxg-,lxmkfx-,pbmldc-,znfd-,znb-,xh=5,ccf-,lxmkfx-,tgqp=6,ng=6,kz=9,hlg=2,mmsz=9,vdf=1,vkh=9,cvc-,sfp=7,ckb=6,gxg=9,cggz=2,clg=8,zn=6,ctf=6,zdtz=1,ddxn=6,nhsvv-,plvd-,sbx-,ncjb-,lc-,pvv-,vpxv=3,mhh-,qgm=6,vbmk=8,rb-,gxx=7,pt-,qpx-,gcbtgm-,xf=4,xfn=1,tv-,mmn-,zrs=6,zm=7,pxvxlh=5,xc-,dbsf-,scbpb=3,smtd-,fsz-,znjg=3,rfdrk-,ccs=9,mgt=5,mjjk-,vsh-,sv=8,cgp-,gf=1,pg=5,mph-,ctp=3,vblpd=7,gbsp-,gf=3,nbtq-,vjsg-,jsv-,lqfv-,np=4,xh-,tq-,xs-,vk-,hb-,mmn-,vbz-,kpjqgm=5,dkz-,rzjkqp-,tvm=3,dz-,kftx-,khn-,nj=2,cnn=3,cl-,sf-,vc-,zmlr=3,lxmkfx=3,blfx=9,vbmk=6,tpnmp-,sqjgc=5,rz=2,bszd=6,kkc=9,dnkf-,lmlx=7,ddxn-,bhfh-,gflrmd-,xb-,mmn=2,jfjbj=1,zm-,sqd=4,kl-,dfz=4,ktj=5,lxmkfx=2,qxkrd-,dp=6,hl-,lqfv-,kx-,vbz=5,qf-,sv-,kpqvtc-,vhx-,ps=1,fr-,vbmk-,bnhz-,tj-,rlrlql=2,np=4,vs-,vbmk-,pmz=3,pbk-,zxt-,ck-,xf=2,jtsdd=7,ng=1,gn-,qfb=5,mf=4,xb-,rc=7,jjd-,xv=6,gzrz-,cqq=5,dzt-,scb-,plvd-,vqbp-,mvmqfm=3,pr=1,nj-,pvv=8,xtsd-,gbsp-,hnf-,fdfc=3,zzd-,kftx-,pbk=3,lrpx-,hbmt=4,mktlhp=2,ld=4,sf=4,rxv=1,kkcd=9,dph=7,ssmflk-,vnhfc=1,hrbj-,ljsvc=6,rt-,xf=5,tq-,npm=1,kkcd-,spm=7,ljsvc=4,lpd-,nh-,cnr-,xmxf-,cxq=6,mjz-,hpl-,lh-,grlkl=7,pv=9,pqf=1,zsx=7,vbz-,vgln-,dvz-,zl=6,js-,rqx=8,hdxvhr-,pkg-,tzjln=1,nhsvv=7,ggm=5,zz-,kmm-,zngsp=5,gqsr-,cnn=8,vrc=3,zxt-,txpx-,jmthd=9,gbsp-,gn-,zrq-,ss=5,xjpbxm-,ssmflk-,sr-,kl-,gp=9,mhh=7,bpqv-,mvmqfm=6,vr-,kmqjt=4,xnmq-,hvglb=5,qpf-,xb=5,jgmnxd-,sfp-,sscn=8,pcnzf=4,rr=7,gqsr=4,xs-,ql-,pxn=6,jf-,ckb=6,ps=7,bzpv-,qcm=5,gf-,vk=8,hlg-,kjrc=4,dnkf-,kjrc-,qgm=7,pt-,mmn-,dphx-,dsg=8,brp=5,lq=6,kpqvtc=8,xhs=1,tz=1,rm-,qht-,jhl=3,mr=1,tj=4,pnp-,zngsp-,lcr=5,fr=9,vgln-,bz=1,nfgp-,xzt=1,xzbz-,cqzt-,vblpd=9,mg=6,dd-,xtl-,mf=7,qln-,qxj-,mgpp=7,cb=7,zf-,pkbv=2,fgmpc=4,lc-,dmp-,zxt=1,db-,hrbj-,vnk-,smtd=1,cjb-,dtt-,zlcmgc=1,kkcd=9,xh=3,sqjgc-,td=9,npm-,cqbvs-,hj-,sf=2,zf-,mph=7,zcjvl=4,dkms-,rgh=6,zzx=4,hm=4,tz-,vr-,vf-,cqq-,bgh=1,sn-,vbz-,sxlh=3,xtl-,lqt-,kd-,mg-,vf-,lg=5,fnh-,gbsp-,ksn-,mlcn-,vqzhc=8,gzrz=6,lcr=3,qxj=1,hpl-,dphx=5,js-,fm=5,vgslz-,vf=5,ns=2,qcm-,ds-,pr-,vqfz-,hl-,mnphn-,ctp-,qht-,dv-,kd=1,lrpx=9,bpq=1,qgm=9,ckb=6,zf-,vps=5,gbkt=3,zk=4,lztd-,tpnmp=9,rr=9,rpgj=5,dbffb-,mvmqfm-,fzm=8,bpq=9,lxmkfx-,sf-,br-,jxj=1,snpgsm=2,bj-,fsz-,vjsg-,gxx=4,hbmt=1,gflrmd-,rtj-,zl-,snpgsm=7,ppq-,vrzjf-,dv-,njvd-,sxlh=1,xgr-,tv=8,kmqjt=2,cfnbp-,xxj=1,zngsp=5,cqr=1,jc=9,gr-,qxkrd-,xzbz=9,xnmq=1,zcjvl=1,vjsg=4,fx=2,srp=2,kpfr-,bbsk-,xqfrg-,tvm=1,pqf-,fdl-,ss=5,bnlpjk=6,dphx=6,vbz=4,grlkl=7,gxx=1,lrpx=3,drls-,dph=8,vs=4,sbt=3,jpc=5,pbmldc=8,ddxn-,br=3,qln-,rvcd-,dmp=5,dhh=5,fjh-,sn=6,txpx=2,ctdbt=1,rzjkqp=7,bzpv-,gt=6,sb=8,qht=9,kpz=2,hvglb=8,mr=3,fq=5,jm=5,rzjkqp-,ndmt=6,bzj-,lg-,ks=1,npm-,vqbp=4,lcr-,km=9,tv=6,thncf=6,bxx-,vq-,rpn=6,dz=2,tcs-,mr-,kd-,spfc=8,npm=7,hrbj=1,cggz-,jjd=7,drs=6,vr-,rfdrk=4,kc-,pkbv-,zmlr=1,lqt-,hsb=1,xb=5,pljg=5,bq-,gxx=5,vrzjf=9,xhs-,xk-,vdf-,lg=6,xrb-,vc-,pbmldc=5,js=5,ld=4,sbt=4,gftx-,kpz-,khx=1,mr=9,lztd=7,xqv=8,cb-,sbx=6,qpf-,vgln-,xcq=9,jf=4,zs=2,cv-,vqc-,vgln=3,bmnlf-,nsxz-,vttk-,jx=1,tnfx=9,zv-,fdfc-,rc-,lhks=4,zlcmgc-,grfxxs-,hrbj=4,vqt=8,ts=5,hd-,tq=8,bg-,mf-,pcnzf-,sh-,trzx-,xb=4,rc=8,bzj-,pkg=8,hlg=5,qcnnzx-,ck-,mjz-,vth-,mgt-,cct=1,bkxf=8,rpn=1,mg-,fjg=3,vlv-,zngsp=8,ksn-,hnf-,dbh=7,pxn=5,hsb=8,mq-,jsv=7,ccf=1,ts=8,kz-,xgr=5,xbx=5,sqd-,fpg=8,lvs=5,smtd-,zs=3,dsdm-,nrc-,jtz=8,jxj=3,sv=3,mlcn=9,psfnx-,kpqvtc=9,rsn=4,zdl-,lztd=4,vnk=2,dmp-,sscn-,zj-,dd-,zdl-,smtd-,tj=3,ggm=6,ff=2,zzd-,pfjml=7,chpn-,mjjk=4,spm=7,sfp=6,xbx-,dbffb-,sh=9,hnf-,pmz-,rzjkqp-,hb=8,bj-,hgp-,txkh-,znjg=2,vqfz-,vgln=2,zzd-,crb-,vqt=3,ssmflk-,bqpp=4,xt-,dbffb-,bhfh-,hsb-,rvcd-,sbt-,txpx-,jtz-,cb-,dp-,mvmqfm=3,ddxn-,msbfzl-,xgk-,jpc=5,phsl-,dbffb-,zcjvl=4,tvm-,pv=2,sfp-,nnn-,jmthd=2,qcnnzx=3,xnmq-,tgqp-,fzm=3,jpc=2,cnn-,jhhqj-,mvmqfm-,rtj-,km-,lk=6,slzd-,chpn-,xb-,tpnmp=9,vkz-,lqt-,vf-,gbsp-,cmpc-,xc-,pkg=5,tz-,dzt-,mvmqfm-,dvz-,lhks-,npd=6,lfg=7,bgh-,vqbp=5,grlkl-,lvx=4,mgpp=1,znb=6,zf=4,lfl-,cr=2,dbffb=3,jzxp=2,mhh=2,gftx=7,lfg-,gkn-,xb=5,djmlb-,qln=8,zmlr-,dkz=6,grlkl-,rt-,zcjvl-,vblpd-,lztd-,lfg=2,gxg=6,bj=8,zs=9,ssd-,lcr-,tqx-,ncjb-,kmr-,trg=4,kmm-,cjk-,tq=7,qqp-,scbpb=1,rc-,xzt=1,ftz-,sjb=2,rknz=4,gbsp=4,qrn=3,dhh-,mph=1,pjfk-,grfxxs-,xfn=3,bq=6,kd=3,vjzt-,vgln-,rv-,lcr-,blfx=4,gzrz-,kmm-,hj=8,pvv-,khn-,jfz-,gr-,gr-,dhh=9,ps=3,vblpd=9,sqd=3,hz=7,mp-,lxg=1,bnlpjk=3,jjd-,txpx=7,fx=9,nkx-,bg-,rvcd=4,sr=6,qz=3,vdf=9,ld-,nsxz=1,zdtz-,dzn-,hb-,vjzt-,nfgp-,cmbv=6,pljg-,sqd=1,ssd-,fzm-,qv=8,tn-,cct=8,cnn=2,vkh-,zl=8,xcq-,ppq-,scb=5,pbk=6,jmrz-,xgr-,kpjqgm-,nglvx=5,qht-,fnln-,cl-,kkc=9,kpfr-,xtl=9,dsg-,xrb-,zdm-,mmn=5,tz-,gh-,vkn-,vkqx-,gkn-,qxkrd=7,rt=7,rh=3,bc-,nzq-,mtx=8,jc-,kfp-,dkms-,thnmq-,jhhqj=6,vhx=2,lqfv-,kc-,vqzhc-,bzj-,fmkjj=5,ql-,fdfc-,kftx-,ktj-,bgh=2,cqzt-,rtj=2,vkh=2,dfz=6,xstdx=9,npd-,hf=8,jhhqj=1,snpgsm-,xrb-,hm=5,bx=1,ql=2,djmlb=7,xcq=6,xbx=4,kl=9,dk-,sh=7,ctf-,sqjgc-,thnmq=7,lhks=9,xdfz-,tk-,pt-,vgslz=7,dtv=5,sbt=9,kv=1,drs=3,db=8,lqf=6,xhd-,qln-,ckb=2,kpn-,qvlzn-,fb-,xcq=3,vqc=2,ct=4,dtck=5,vgslz=9,shn-,rv-,cr=3,tpnmp=1,cct-,zj=8,bnhz=4,psfnx-,nnn=8,kl=8,ps=5,ng=6,cnr-,snpgsm-,dnkf=9,znb-,bgkjq=1,pjfk-,pl=9,dtt-,sqd-,hgp=7,gs-,qrn=8,dvz=4,kftx=7,ggqq-,cl-,cr=9,jsv-,vjzt-,pxvxlh-,kqh=1,tqx-,lvx=9,mf-,rpn=2,bpq=4,km=4,vnk=6,cqzt=9,bxx=8,tn-,pgd=8,dp=7,thncf=8,zdtz-,vgslz=5,cnr=7,nkx-,hdxvhr=6,tj=6,xnmq-,qf=4,lq-,vnk=7,rpn=4,zd=8,rxv-,lln-,sbt=6,mhh-,rz=5,dtt=9,gxx=7,pnp=2,lqt-,xdfz=7,lhks-,gflrmd=8,kpqvtc=3,tj-,pvv-,xcq-,xfn-,kpjqgm-,kc=6,zngsp=1,vpxv-,xfn=1,qqp-,tj=2,xrb-,zsx=4,lfl-,vqc-,nq=9,lrpx=7,rpn-,phsl=7,chpn-,vq=6,dd-,ff=1,lztd-,lq-,vx-,lg=3,jmthd=7,vnhfc-,jgmnxd=6,fpg=3,xs-,ggqq-,msbfzl=7,znjg-,xt=8,xzt=9,ff=3,mmn-,dmp=7,hrbj-,vth-,dkz-,nsxz-,bnhz-,bq=2,hm-,dm=7,trzx-,xmxf=1,npm=7,qqp-,fnv-,bzpv-,hnf-,ztk=4,hz-,bx-,srp=4,sqd-,zk=5,gbsp-,fsz-,vlv=6,hpl=5,jgmnxd-,rtj=9,lh-,qhvz-,vkn-,blfx=6,sc-,rqx-,tslfp=6,zdm-,fsz-,mm=5,lc=5,ghm=6,ktj-,kl=6,dph=6,ztk-,cb=2,kz-,psfnx-,mq=4,vqc-,dph=9,zj-,js-,znb-,vqbp=9,dx=2,dtck-,gt-,br=6,zrq-,bqpp=5,ckb=6,ng=9,zdm-,jc-,lvs-,ql=9,zf-,sc=2,dph=9,bz-,vbz-,khn=6,kmr-,drs=7,kx-,vlv-,pljg=6,vpxv=6,fsz=5,vqbp-,tcs=5,qz=9,xp=2,xp=7,kx-,ssd-,bz-,vs=5,mgpp=8,rnsbt=1,hdxvhr=4,rz=9,nq-,ktj-,pv-,cmpc=5,psfnx-,pqf=9,tv=4,jpc-,jfjbj-,vps=6,bszd-,jx-,xhs=2,cfnbp-,cb=6,nfgp=8,mg-,fjh-,mtx-,vrc-,cr-,njvd-,lffv-,qqp=4,cr-,js-,jx-,pgd=9,qg-,vsj-,bnhz-,sjb=1,nglvx-,fkzq=9,qhvz-,nlcrm-,kmm=2,jzxp=2,zrs-,mtx=9,hnf-,lk=5,nq=2,rpgj=1,tkpb=7,zzx=7,pnp-,rgh=1,qhvz-,zpc=1,pmz-,nhsvv=5,zqr=6,cggz-,lhks=3,bpq-,tfd=7,jm=4,kpjqgm=9,qxj=8,pv=8,pmz=2,jf=2,gxx-,jf-,mktlhp=1,lrpx=2,lqf-,scbjp=3,fdl=7,khn-,ddxn=7,dzn=6,chpn=5,vpxv-,kl=8,sqd-,vnk=9,vbz-,cqzt=9,lc=4,nhsvv=7,ph-,bz-,xzt=7,cqr=8,spfc=3,vsh=9,bbsk-,khn=1,bl-,lffv=3,pl=8,zdl=7,qg=2,vkz-,qht=9,xhd-,blfx=5,vbmk=5,npd-,zv-,bpqv=2,tvm=6,xqv-,zv=8,dbffb-,trg-,cqbvs=2,vqbp=4,kpfr-,ql-,cggz-,kpfr-,sbt-,plp=2,fsz=3,ct=1,zcjvl=6,rpgj-,nfgp-,zqr=4,zn-,mq-,ps=8,rtj=4,kpqvtc-,ndmt=3,plvd-,xv-,rt-,fb-,psg=8,sxlh-,nhsvv=4,pkbv-,vrzjf=7,dzn=7,mmn-,jfjbj-,vnkmzj=6,dp-,rh-,cv-,dzn-,lg-,rpgj=1,dph-,ctdbt=3,cfnbp-,gxx=8,hj=3,xnmq=4,lc=5,bb=9,zdl-,zzd=9,hzlzn=9,dz=9,rz=9,bzj-,xb=4,lrpx-,vlv-,dph=1,cqbvs-,ghm-,pcnzf=2,vr-,cct-,mph=2,nsxz-,ssd=2,hfrdk-,psfnx=9,rc-,pbk-,znb-,zmlr=1,dk-,dkz=3,rqg=3,mv-,zv=9,sscn-,bszd=1,xhs-,dzt-,mgpp=3,dnkf=6,tnfx=9,drs-,spfc=3,dbsf-,sr-,lfg-,bg=2,gbkt=7,jxj-,tv-,fjh=9,fdfc=5,gs-,vbz=1,dbsf=9,zdtz=6,fgmpc=2,njvd-,hfrdk-,sh=8,scbjp-,zn-,msbfzl-,px-,spfc=6,vdf=2,vc-,vlv=2,cqq-,vhx=1,hl=3,vkqx-,fx=7,gct-,vrc-,hpl=8,zm=1,ktj-,xmxf-,rqg=7,zm=8,cqq-,zlcmgc-,kkcd-,dtt-,jmrz-,gf-,xzl-,pcnzf-,tslfp-,pxn=2,ccs=5,lmlx-,cct-,vgln=4,xt=3,gxg-,vq-,dz-,vqc-,bgh=6,zbgdxg-,ctdbt-,mg=6,fb=1,xbx=1,xv=2,lvs-,kd=9,slzd=2,xb=3,mvmqfm-,kv-,jfz-,jc=8,mgpp-,shn-,kpn-,scb=9,txpx=5,zf-,vhx-,rnxt-,pxn-,mg-,gftx=6,fsz-,xnmq-,bz=4,nfgp-,gkn=7,bnhz-,qpm=1,vhl=5,pm=1,spm-,xfn=8,xf=9,vqbp-,trg=1,pkg-,lrpx=4,mf=7,rpn=7,vqbp-,vdf=8,zz=5,tslfp-,dz=1,fjg-,cb-,zqr=3,clg-,js=2,xjpbxm-,fnln=4,pgd=7,hzlzn=6,qrn=4,khn-,psfnx=7,grfxxs=8,lvx=4,spm-,zl=6,grfxxs-,trg=1,lmlx=2,rsn-,rb-,cnn-,zdl=1,mmn=8,rr-,scbjp-,zk=2,xrm-,lc-,pkbv-,ss-,qhvz-,fq-,bnlpjk-,kkc=8,fpg=7,tgqp-,jzxp=8,rm=2,plvd-,lfg=5,jmrz=9,vk=7,spsx=2,spfc=5,plp-,cfnbp=6,jzxp-,fjh=3,xjpbxm=4,br-,nrc-,sn=3,rc-,lfl-,plt-,np=5,bgg-,xf=4,vlv-,vrc=5,cct=5,vps-,xzl=9,nnn-,pvv=9,dmp-,sf-,hm-,vtp=7,cqr=7,kv-,rnsbt-,qcm-,dvz=1,dbffb-,dbh=4,bzj=9,ctdbt-,tnp-,ksn-,dmp-,qz-,lxg=6,dtck=9,lvx-,bfz=6,xgk=7,qpm-,ggqq=2,grfxxs=3,msbfzl=1,xqfrg-,nlcrm=5,hzlzn-,rfdrk-,xhs=8,xnmq-,pbk=9,jsv=9,zk=8,dtck-,jtz=2,nhsvv=6,ddxn-,ks-,tcs=1,jsv-,xb=1,ff=1,scbjp-,mjz=7,pbmldc-,tcs-,xhs-,plt=8,zs-,xbx=6,bxx-,qcnnzx-,dkz-,dvz=2,rh=4,mhh=7,djmlb=7,bnlpjk=8,jgmnxd=9,pzd-,lffv=2,xqfrg-,cb-,tzjln-,bfz=1,fnh=8,xf-,cqbvs-,lqfv-,ld-,jtz-,nj=8,cjk-,dsdm=9,thnmq=2,ck=8,bpqv=4,rgh-,mf-,sqjgc=8,rzjkqp-,dvmm=8,zthrd=2,mtx-,cqzt=6,gct-,spfc=7,trzx-,hlg-,rqx-,lffv=5,vf-,bqpp-,nhsvv=8,kpfr=2,dfz-,cnn-,gkn-,hb=2,vnk-,px=2,hxd-,zthrd-,xv-,jzxp-,vkn=7,cxq-,ccf-,xfn-,lxmkfx=5,pljg-,lqfv=5,rfdrk=9,khn=5,cnr-,vr=9,kd-,ssd=5,mmsz=7,fnh-,mf=8,lvs=3,vgslz-,pfjml=7,dtck=8,dph-,gk=4,ntg-,lpd=2,fnv=1,mnphn-,xzbz=1,zd=8,gf=1,tr-,lpd=9,vjzt-,ss=7,qnd-,db=2,vz-,lxg-,khn=3,vkqx-,fjg-,zrs-,tnp-,rc=9,fdfc=4,tqx=1,scbjp-,nbtq=6,kmqjt-,jc=9,txpx-,pr-,vps-,zv-,vnhfc-,jmthd-,blfx=1,vqt=4,spfc-,tzjln-,cfnbp-,zf-,ndmt=4,xqfrg=2,cmbv=4,mtx-,ktj=5,nh=1,mm=6,xv=5,ng-,bfz=2,zj-,pt=6,njvd-,qcnnzx-,qgm=8,fjh-,zqr=9,tn-,zz-,mvmqfm=9,gt=3,vgslz=4,px-,fnh=7,njvd=8,jtsdd=2,rzjkqp-,np-,ph=5,zqr=6,cb=6,sxlh-,pfjml=2,dmp-,lxmkfx=2,kpqvtc=4,mvmqfm=1,rknz=8,zcjvl-,tq=1,nnn-,vc-,zdl-,ndmt-,dtt-,mf=4,qcnnzx-,zzx-,pkg=6,xfn-,rnsbt=8,rgh-,vp=2,vpk=1,zz=2,mkj-,mr-,lln-,dm-,cfnbp-,sbx=9,dsdm=1,kpqvtc-,zzx-,bqpp=9,lqf-,cqr-,mlcn-,spm=1,dhh=6,js=4,pg=1,vbmk=3,vqc-,ftz=4,zxt-,zz-,xtl=6,pr=9,cnr=8,rqx=4,bszd=3,rl=6,phl=4,dvmm=2,drs-,bnhz=4,cggz=7,nhsvv-,cnr-,bgg=4,tr=1,pjfk=8,fq-,kmm=2,jjd=9,dbsf-,sxlh-,xzt-,mjjk-,pfjml=8,lmlx-,xtsd-,ftz-,nq-,kd=3,tk=2,vth-,nrc=4,vqbp-,grfxxs=1,ssmflk-,mmsz=6,lh-,td=2,vc-,qht=1,ccs=3,fpg-,ff-,ppq=2,cl-,ff=9,gk=1,zzd-,mv-,pqf-,vq-,vtp=1,thncf-,gt=7,ksn-,bnhz=8,xmxf-,ktj-,cnr-,ctdbt-,cggz-,vps=8,ff=1,jhhqj-,hd-,dphx=3,zk-,bg-,pkg-,gh-,nl=4,dtv=1,ph=5,xk=4,sbt-,sjb=4,tslfp-,kftx-,gxg-,mjz=9,bzpv-,dvmm-,zlcmgc-,mvmqfm-,jmrz-,sf=3,zz=4,vsh-,kfp=9,cggz=4,pm=4,nlcrm-,pg=9,xhd-,spsx=9,xmxf=8,bbsk-,pr-,qhvz-,vqfz=7,dp=5,ndmt-,nlcrm-,mgt=8,gflrmd-,vkn-,jsv-,qrn=7,gk-,rc=9,qvlzn=2,xtsd-,xzl=8,vdf-,fb-,mr-,vrc=2,qpx-,bmnlf-,scbjp-,vpk=5,vjsg=3,rvcd=7,tk=2,xstdx=9,tcs-,zqr-,kpfr-,rz-,vgln-,dvmm-,lqfv=8,bszd=3,nglvx=9,lq=5,dnkf-,sfp=3,pxn-,blfx=6,zzd-,sbx-,dfz-,fq=2,qqp-,rtj-,sb-,nbtq=2,bb-,zpc=6,tfd-,zl-,scb=4,nfgp-,kftx-,zn=8,rh=3,fzm-,qvlzn=3,ctp-,qrn-,ztk-,pmz-,rh-,vpxv-,lvx-,cq-,jmrz=8,sqd=2,kftx-,ppq=7,dvz=3,vblpd-,jgmnxd-,gxx=6,vnk=5,ntg-,sjb=3,dkms=3,bgh-,zsx-,xrm=8,pkbv=7,vttk=7,lxg=5,jm=9,vqbp-,kfp-,hzlzn=5,hl=4,trg=9,lq=7,ksn-,mmsz=5,px=2,lcr=4,td-,hfrdk-,rnsbt-,qln=3,dvmm=6,gftx=6,ppq-,xbx=8,pvv=8,xcq-,tzjln-,tdl=8,vf=9,sxlh=9,bgh=5,bqpp-,zxt-,xs=5,kmm-,ps=5,ctdbt-,hd=4,md=7,xzl=5,jfz-,tzjln=9,gpg=5,lmlx=2,phsl=2,jx=3,lfl=4,kpfr-,db=9,fdl-,rm=3,bqpp=7,mp-,xv-,bpq-,pg=1,nlcrm-,xk-,mq-,lk=7,hrbj=1,hj=1,ss=8,hnf-,xqfrg-,tnfx=9,znb=8,kl-,lqf-,dsdm-,khn-,cct=4,bzj-,spsx-,lc=6,jfz=4,plp-,fb=1,bgkjq=2,pvv-,br-,cfnbp=5,sqjgc-,sv=5,mmsz-,dd-,lrpx=5,mgt-,hdxvhr=1,dsg=6,zz-,gkn-,fjg=7,px=4,lfg=7,jfjbj-,ghbr=4,ftz=1,lffv-,pjfk-,spfc-,mlcn-,vth-,qxkrd-,ctdbt-,qpx=5,gqsr-,sscn=7,ghbr-,vqbp=8,bgg-,zf=2,qxj=8,bpqv=6,hlg-,tn-,lfl-,bzj-,tk=4,ql-,gxx=6,gqsr-,mtx=1,rqg=7,zzx-,lcr-,bx=7,nl-,msbfzl-,bhfh-,sxlh=7,nsxz=8,bgg-,pfjml=4,pv-,qv-,kx=4,dp=5,gxg-,qpx=9,mjz=5,zxt-,tv=4,kx-,xtsd=7,txpx=4,hdxvhr=7,pzd=2,vqc=4,xjpbxm=3,dm-,rvcd-,ps-,hbmt=9,nsxz=5,cct-,xhs=3,cqr-,fm=3,pzd=5,qxkrd-,rz=8,pgd-,txpx-,xk-,hnf=7,hlg-,lcr-,nqcj=9,pgd-,spm=3,zk=5,jxj=9,vth-,srp-,sbx-,cs=1,vpk-,srp=7,sqjgc=7,ks=1,dvmm-,zqr=6,gbkt=5,rl=1,phl-,mg=9,rm=2,dsdm-,rz=2,pgd-,gf-,bxx-,nq=3,vtp=6,sbt=9,kpqvtc-,qcm-,td-,bnhz=3,rknz=6,mjjk=6,qf=9,thncf=5,bb-,vjsg-,cnn=6,jxj=6,vkn-,gbsp=3,kpfr=1,lqfv=6,kv-,gt=1,fq=4,kl=4,rtj-,vth-,pfjml-,hbmt-,vr=1,xmxf-,sc=1,cgp-,jx=1,chpn-,xcq-,vttk-,vpk=1,mnphn-,mtx-,gxx=1,cgp=2,qvlzn=4,sr-,ct-,rh=3,rzjkqp=2,ld=9,pljg=6,vlv-,rgh-,spfc-,jm=8,fkzq=4,xmxf-,gp-,chpn=8,xtl-,cggz-,xnmq=3,rnxt=1,znb-,nfgp-,ts-,bqpp-,fnln=3,pljg=5,hz-,kfp=4,cq-,bgkjq=9,vs-,zngsp=7,jsv=3,dbsf-,kx=4,ph-,xb-,dsg=6,sn-,jmrz=4,dzt=7,mnphn-,vk-,kkc-,kpn-,vblpd=6,vqbp-,dmp=6,hsb=1,zlcmgc-,vbmk-,dp-,tk=3,drs=8,pl=4,sbx-,jhl=9,rknz=5,qcm-,mp=8,vqfz=9,ctdbt-,qp=2,vsh=8,nkx=8,qxkrd=6,bpqv=9,cxq=3,nbtq=1,sxlh=4,fnv=5,vnkmzj-,gpg-,nh=8,zd=1,rzjkqp=6,qpx-,bzj=2,fkzq-,lxg-,bb-,lffv-,xs=3,rzjkqp-,bpqv-,bz=3,zn=5,br-,zthrd=5,kc=2,ss=2,kf-,bb-,bz=6,hb-,dtck=4,sxlh=9,mmsz-,znb-,mhh=3,nhsvv-,ntg=1,bqpp=2,thncf-,tnfx=8,nglvx=1,bzj=3,gcbtgm-,cmbv-,ctp-,pg-,zpc-,rpn=1,gn-,ncjb=8,kmr=3,tz-,bnhz-,dvz=2,mvmqfm=5,jc-,plt=6,cl=8,vc-,qgm=2,ss=5,jc-,cggz=4,chpn-,qln-,nh=8,pljg-,km-,pgd=7,tqx-,xhd=2,gmrrx=3,bhfh=6,bx=3,msbfzl=2,rm=6,qcnnzx=9,xgk=6,gct=4,kpjqgm-,jx-,tgqp=4,sv=2,xf-,ks=9,pzd=6,zrs=3,md-,thnmq-,zzd-,xnmq=3,rc=2,kmm=9,rz-,jc-,rsn-,dphx-,bqpp=7,vs=2,kkc-,sqd-,tdl=9,zbgdxg-,qgm-,gmrrx=7,cb=4,bx-,lvx=8,slzd=1,fzm=5,cs-,xs=5,xxj-,xhd-,qcm=2,xxj=6,vz=8,cqzt=2,fdfc-,vx=6,rpn-,gxx-,nhsvv=6,mktlhp-,vjzt=4,lztd=7,zs=7,mv=2,nlcrm-,tkpb=9,sxlh-,pv-,qxj-,xcq=8,xgk-,scbpb=3,dk=9,mjjk=3,lztd-,njvd=8,znjg=5,lxmkfx=5,snpgsm-,ph-,pr=1,rpgj=4,nzq=2,kc=2,rsn-,dzfqlb=6,gf-,qcm=1,tcs-,mm=2,fjh=6,vp=6,sl-,kfp=4,tslfp=9,hl=1,fzm-,lmlx=2,bnhz-,sfp-,pcnzf-,gct-,jc-,xk-,zpc=2,jxj=6,tzjln-,bqpp=5,pjfk-,cct=5,qgm=8,sxlh=7,lhks-,mmn-,rpn-,vp-,qnd=9,mjz=2,td-,gct=6,sfp-,cb-,tnb-,zf-,chpn-,pkg-,gs-,mmn=2,mnphn=9,pxvxlh-,fm-,vdf=2,vnhfc-,njvd=1,npd-,cl-,vhx-,kz-,hl=8,bpqv=7,ks-,pl=6,txkh-,mjz-,bl=1,cqzt-,bbsk=7,ghm=3,tpj=4,tv=2,qf=7,tpj=7,ztk-,mq=2,jtz-,vkn=4,cs-,xdfz-,ccf-,lxg=9,ctdbt=1,trzx-,bnhz=6,gf-,kjrc-,vr=1,msbfzl=2,vblpd=6,qxj=7,cjk-,nj=4,cjk-,sjb-,ng=4,rnsbt=4,rtj-,frgf-,tqx-,sbx=9,kmqjt=8,rfdrk=8,ctdbt=5,mldgtn=8,rfdrk=7,pnp-,phsl=3,vc-,hz-,rzjkqp=9,njvd-,qqp=7,pjfk=1,sscn=2,pkbv-,lfl-,vp=5,kr=4,ccf-,plp=8,lpd=5,mph-,rh=6,zl-,lc=2,jhhqj=5,xf=6,snpgsm-,lq-,sxlh=6,vsj-,trg=1,cl=1,vjsg-,gp-,tn-,mlcn=8,gmrrx=5,qfb-,fx-,tzjln-,tfd=2,bg-,bkxf-,qpm=3,npd-,ssmflk-,fpg-,rknz-,zngsp=1,nlcrm=4,pt-,vkz-,mq=7,mldgtn=2,gr=7,fr-,xzt-,mkj-,jmrz=5,lxmkfx-,pxvxlh=3,vbz-,nq-,sbt=8,rtj=8,ktj=3,bpq-,mq-,lqf=9,vp=7,vz=1,bb-,ndmt=4,vdf=7,mr-,fnh-,rzjkqp=7,sxlh-,bszd=1,vgslz=5,zd=2,tpnmp=6,fr=2,bgg-,lk=1,qpf-,bpq-,xt-,ps=7,pxvxlh=1,fkzq=7,mgpp-,cqzt=6,bbsk-,clg=7,ztk-,bl-,vjzt=4,tk-,plvd-,jsv-,zd=7,dm-,gxg=8,lxg=2,bgkjq-,np=4,frgf-,lh-,ssmflk-,bc-,vjsg=9,rfdrk-,jx-,pbk=7,npm=5,kjrc-,jfz=8,bz-,bfz=3,ld=6,hj=4,msbfzl=4,clg=2,vhx-,vq=1,hb=4,mmsz-,sbx-,xnmq-,cqbvs=8,hgp=5,qlf-,nfgp-,ztk=8,vnkmzj-,cmbv=9,jjd-,rz-,bl-,jfjbj=7,hxd-,tfd=6,sh-,frgf-,ctp-,sjb=7,vsh=6,br=7,vz=9,px-,lrpx-,fzm=3,tslfp=9,znfd=5,bpqv=2,mktlhp=2,hm=9,znfd-,xgk-,xdfz=7,gxx=8,vpxv=3,qfb-,qnd=1,gpg=1,txpx=4,zmlr=4,zk-,plt=5,dx-,qfb-,vqbp=2,hzlzn=3,bfz-,mgpp-,xf=1,fgmpc-,rl=9,fjg-,qpf-,tslfp-,qvlzn=3,gbsp-,scbjp=1,mktlhp-,jhl-,fdl-,jmrz=1,rc=8,dmp-,clg=2,xtl-,cqbvs-,qfb=9,lpd-,kmr=3,xh-,lh=4,spfc-,cnr=1,lqfv-,scb=7,kd-,rqx-,tpnmp=5,pjfk-,qz-,gf=7,tz=9,kjrc=5,td-,bl=3,dmp-,ccs=9,rzjkqp=5,npm-,kpn-,pljg=6,dsg-,bg-,mhh-,mvmqfm=4,xzl-,plp=7,tk=6,zn=7,njvd=6,lqfv=7,rzjkqp-,kmqjt=5,cv-,mf=7,gxx=3,pxvxlh=4,nbtq-,vqzhc=7,bpqv=2,sl=6,ccf=5,slzd-,ssmflk-,sf=3,vhx=8,mmsz-,chpn-,fzm=2,xtsd-,tvm=1,zk=9,hm=2,cv=1,lq=2,dzfqlb-,kmm-,rxv=5,txpsv-,nrc=7,ps-,gflrmd-,tv=6,gs=6,znfd-,kc=3,zzx=8,vc-,tvm-,rtj-,kqh-,dsg=9,fx=3,hm-,rsn-,lpd=1,zjvd-,nq=6,hgp=3,vqbp=5,jzxp=5,pxn-,js=4,zthrd=3,nj=3,znb-,ncjb-,kc-,kmr=6,lcr-,vs-,kpfr=3,jgmnxd=9,bhfh-,rv=4,ks=3,hf=9,bgg=4,fsz-,hf-,np-,zzd=8,pgd=6,kmqjt-,znb-,fb-,qlf-,zj=1,pvv-,nzq-,ng-,lmlx-,zdm=4,hvglb=9,nhsvv-,kjrc=4,hvglb=1,ctp-,qlf-,lfg-,jhhqj-,txpsv-,bxx=3,ppq=2,vhx=7,scb-,lq-,sscn=9,pljg-,gxg=2,cv=7,zm=6,hdxvhr=4,hpl-,mkj=5,zl=7,zcjvl-,xp=3,bszd-,lxmkfx=5,rgh=7,lztd-,xv=1,cjb-,rqx-,gflrmd=5,lqfv=1,fdfc=4,vblpd=6,tslfp=5,rnsbt-,tpnmp-,cmbv=6,cq=5,gk=2,zdtz=8,lhks=2,gr=2,cxq-,xzbz=7,bpqv-,cmbv=3,cqq-,bgg=2,znb=3,vkn=7,gxx-,pv-,vf=7,gbsp-,qp=6,grfxxs=2,vqc=6,lh-,msbfzl-,dfz-,fgmpc-,kmqjt=3,qrn-,pfjml-,pm-,qpf-,qg=8,vlv=4,cq=6,lq=1,tnfx=2,cgp-,lq-,vgln=7,bgh=3,ggm-,jtsdd=1,xk=2,rqx=5,zv-,mhh=2,bpq=6,fdfc=6,lmlx=7,hdxvhr=5,jgmnxd-,lvx-,vrzjf-,dtck=5,ph-,rqg=5,gf=9,nqcj-,vqzhc-,bj-,fjg-,qln-,jpc-,vnk=1,sbt-,qf=8,qrn=8,gpg-,nglvx-,dbsf-,hz=1,jfjbj-,hbmt=1,sqd=1,cl=7,bzj-,jtz-,vblpd=7,znfd=1,gpg-,drs=3,gn=7,mvmqfm-,cr=3,tpj-,ck=3,qp-,zrs-,tpj-,gcbtgm-,zv=8,lfg=8,jxj-,ftz-,zz-,fdfc-,plvd=9,spm-,fkzq-,xcq-,sqd=4,dph-,rsn=9,vjzt-,xt-,dsdm=4,qlf=3,qht=2,js-,sv-,slzd=9,spsx-,zk=1,rv-,jxj-,scb-,db-,ff=2,cq=9,nh-,fzm=1,cs-,rzjkqp=4,vx-,qp-,spm=9,tnb-,bgg-,phsl=2,lg=5,gmrrx=3,pfjml=1,psfnx-,dbsf=3,jmrz-,lztd-,vrzjf-,vkqx=8,mv-,sqd-,hrbj=8,tgqp-,sbt=6,lhks=2,vp-,mv=6,snpgsm=9,xf=3,tnb-,hl=5,vqbp=7,zd=1,fm-,hbmt=7,scb=1,txpsv=3,jf=6,rc=3,vs=7,qpx=1,sf=3,zbgdxg-,xv=7,xv-,hgp=3,nfgp-,qht=8,vblpd-,ql=9,kmr-,rtj=2,lpd-,rfdrk-,rxv=5,sbx-,rfdrk-,pgd=8,kpjqgm-,vjsg-,cgp-,fnln-,dvz=3,pbk-,mvmqfm-,lmlx-,ndmt=2,trzx=7,tnfx-,xgr-,zlcmgc=5,plvd=8,gs=5,sv=2,dk=9,vnkmzj-,vkn=3,xbx=9,kl-,psfnx=8,ppq-,vq=3,xzl-,mldgtn-,plvd=7,gcbtgm=1,sscn-,drs-,bnhz=2,lhks-,sf-,pbk-,sxlh=3,vkn=2,vqfz=9,gct=1,cmbv-,qgm=5,lg=6,tnp=6,jsv=7,mmn-,xnmq=3,vx-,fkzq=1,vqbp-,gbsp-,txpx=9,jtz-,hdxvhr=8,xk=4,xxj=3,vrc-,fjh-,pxn-,gbsp=8,hl=5,jm-,zn-,chpn-,nbtq=7,kqh-,chpn-,nnn-,hfrdk-,mp-,bgh-,ns-,vsj=3,fgmpc=1,kd-,dtck-,nh=4,frgf=3,cq-,pt-,vttk-,px-,smtd=7,ctf=8,zn=4,kl-,jjd=4,bzj=7,cnn-,mtx-,pzd=1,ssmflk=4,jgmnxd-,ccf=4,jmthd-,vnhfc=7,srp-,qxj=7,chpn-,nh=2,kkcd-,dm-,mmsz=4,fnln-,lq=6,kkc=1,bq-,nl=3,mmn-,jfz-,zf=4,sl=3,sqd=7,dtt=3,ql-,jmthd-,ndmt-,vqc=2,jjd=2,jpc=4,vrc=9,kpn-,gs-,mjz-,ftz=7,bq=5,cv-,xv=2,mktlhp=9,cmbv-,mtx=6,ggqq=7,fq-,rknz=3,xxj-,zngsp=3,rsn=5,xrb=3,vrc-,fb-,phsl-,plp-,pl=9,cr-,vpxv-,lk=4,khx-,rpgj=2,kd=7,md-,dvz-,rl-,dkz=9,fsz=8,vq-,pm-,xf=7,tv-,tk-,dz-,qqp-,bg=7,xb-,nfgp=9,ng=7,kfp=2,mp-,vbz-,lxg=5,xqv=1,npd-,pvv-,xzl-,slzd-,dmp-,jzxp-,dphx-,txpsv=7,mldgtn-,ql=2,xgk-,mv=7,rl=7,kjrc=6,rl-,jfz-,ctdbt-,tdl-,fq=6,lcr=6,hzlzn-,qpx-,nbtq-,td-,mr=8,zngsp=4,vps-,ssmflk-,djmlb=9,pxn=7,cqq-,nlcrm-,rt-,vgln=9,gn=2,nsxz-,cfnbp=2,xrb=8,ts-,bfz-,lh=1
+
diff --git a/2023/_input/day_16.txt b/2023/_input/day_16.txt
new file mode 100644
index 0000000..81b3afc
--- /dev/null
+++ b/2023/_input/day_16.txt
@@ -0,0 +1,110 @@
+\..\.|.........|..|................................................................./.-............./-....../.
+............../..--.../...................-....|.......................\../...|..-....\...-|...-...........\..
+.......\......................................|..-\.................-..-......................................
+........\..............|......................\........./..............................|..............||......
+.........|........|......-...........|....../....-.../.....|/.........-..../.../..........................|...
+..\............................./\............................................................................
+........|....................\............................./.....|\|..-....../............/..-..........\.....
+...\.........................\.............|.........../..............-..../.............../-.................
+.||....../..............\.|...............-......................|-..-......../.|.............................
+...|.|.....-...../.............-............./............\.\/........|.............................\|.-..\.-.
+............./....................|.......|.....\..\..............................-.../....|..................
+./......./.|...............\................................................||................................
+......\......|.................|........../......|\|.......-|..................|.....-.-.||../.\..............
+................../...............|.....\........-...-.\...||..\...........\............|.........|...........
+...-........|\|........././/............|...........\.../\...|.......-........\....................-..........
+..../...........\.........................../......-.|...................................../..\........|......
+\...............\/......./........-..............|..............--........../....|..-.\...........-........./.
+..........\........\|.........|\.........../........................../.........|............\..........|.....
+...........\....|/.|..........-..............-....-|...\..........-.../............./.........................
+..\..\......../...\\....................../...../.........................|.....\..............|..\...-.......
+...........................-./...................................-/.\.....\...................\.../...........
+..-..................|..................-...\.......|../............./|-............/........|.......|..-.....
+...........-......................-.................|............../.......-./..........|....../..............
+.........|.............././...............|..../..............|.........|.....|..\......................|.....
+......./-/...................\\..\......|........................\...\....../.....................|...-.......
+.....|.......................|............|...|........|...........-....../..................-...-............
+.../................../......|...........................-............|.............-........./............|..
+.-.........|.............|-...../..............................\................|........................../..
+.........../.........-.......|..-.........................-...............-...-.../...................../.....
+../.......-../....................-...\...\........................-.............-...\...../.|.........../....
+............-...............|........................................../...\.|....|........-.....\|...........
+.....................|\............................-..-....../..-|..../..................\................\...
+.\.................-......\...|............................./......./.........-............../................
+.\.........././............../|......\/..............\........................|........................|...-..
+.............../.........|.................................-.......\\.\-..........-......................./-..
+-.|......................|.............|............................/....................|...........-........
+../.....-.......|.....-.....\.../\........|.............|.........\./..//\................|.........-.....||..
+.\..\.......|......./............\..\.........../........-.../.|..............-..../....\.........../.\.\.....
+.............|..........|.........|.|...\-......................-..............|.../............./.........|..
+....|................................................../...........-......-/......................-.....-.....
+............................./.........-............................./..................\..........\..../.....
+.....|.....................-.........../.......|..................-.......\...|\...|......\.....\...|.........
+........|............../..../|.|......-................|...../..........|................|...................-
+....../.....//..........\.-|......|.....|..................../..............|.................................
+\.-...-....\..................\....................|............||............................../.............
+............................-|...-...........-.../......-.........\..-...|.|\..........-...............\.|//./
+....../......././.|...................|\........../.\.../-...\..........\.-..|\../...........\....\..|.....\..
+...............\.../..../.................\.......-...........\..|..................\\................./.\....
+............-..........-......................|.......|..|....................-......|......\...........|.....
+...............\......|.-............./............\.../.............-|........./...............\|\.....|.....
+.\...............|.................|...........\......\................\............\.|...\......./...........
+\...|..............-..........|...................|....-.....\......../..........................\........|..|
+.........|........./.........|....-........-...................../|./.--.......\........................-..../
+..........................-.....-...............-/............................--...../........................
+.....................-.\../\..........|.....................\.......\.../..........|.............\............
+......................../..\.......\...............................................\./........................
+....|......\..|\.-........../......................\|........\...............\.................|..............
+............................./.....|..|............-...\.........-...\....|......\.............-..|...........
+..................-......-.....................-...........-......\...-|-.-................\............|/....
+...|....../............../..\.......................-....\...|.....\..|..\......./.................-.....-....
+.........-........|........../..-................................./....-.................-....................
+.............................-.......\...............\.....|......-....-.../.................\................
+...../......|...................|..............-........./.............\...\....|.............\.......|.......
+.......|............./........./......\..../........|...........\................................-............
+/...|././.......|-.|..........|................................/\.\.......-......-........-........\..........
+../................./|.-...\........................|........|........|...\|.\........................./.....-
+................-.........../|..............|.|/...|\...........-.......................-..|../...............
+./..||........|....../........................|.................................../..............\..|./-......
+/..-...../......................................\-...........-..................\|................../.........
+.............|.-......................|................-../.................-............../..............-...
+-.....-|-...............\..........-...........\.......\........................\.........../..../...../......
+.-..................../..........|.--.............................-..-....|.\................|....|...\......\
+......./.-........................................\....|........|...../...........|...\|..-...................
+\...............|........|.......\|..-..|...-..|-........|........./.\........................................
+/.|./....|....-...../\..|...............................-.../........./.............-|.........-..../.-..\....
+../......./...../..|........|../.....\....\.............-.-.................-...\.......|.\...........\.......
+...-........./.............../..................\.|................/..//..................|.......-..\......-.
+./.............../.-..\..........|.............-....................-....-..|...........-.....................
+...........|-..|........................................./\............./-.../.................\........\.....
+................................/...........................\.....................|.|.........................
+.........|............\........................................-...../..........|........../.../......\...\...
+../.........|......./..................|........\.../.\.-...-......../../\......../................../........
+.-........./.........|....|.|.............................................|.\............/../.................
+./.........................................\....../................../.--.....-..../.....|./.-......|.......\.
+.\..................../.-........|.........\............\...........\...............|-../................\....
+........................|......./.-....-....\.|...................-......-..........|........\.........../...|
+.............-......./.../......................\.......\............/......................................|.
+............-..........................-..................-.......\--......-.....-.......|..\..-....|........\
+...............|.......\......|....................\.....................-.../.|......|................../....
+---..\-.../.........//....\../....|........\....|-.........-.....|..........-|..............|...../..........|
+......-.............................-.........................-.........../...../.|.../................-.....|
+.........-.........\..............|....\..............-......\......../......\.......-\........-.............\
+.................../......................|......|.....\..........................-..-......./....-.....-.....
+...\.....................-..-....\.......././....\......./...........................\..............\\........
+.................|................./.....................\...../.\.................\.........|...|....|.......
+./............-........................\..|...-............................./............./..\................
+-............-..............|.................-..............................-..............................\.
+................................/.....\........|....-.....||............/.|.............-..|....|....-........
+/.........|............-./...|././..............\./-............/......../\.\..././../..\..\..............-...
+..../.....................\.........|......-...........|...\/..........//\.......//....-...|/.....\..\........
+../............................/...././...-....-............./.|..\..............|...../.........-.....\....|.
+.................................\..../...-.....-.....-....|..\.\...../....../.............../.\..............
+..................|..|.......-......\.../....../....................................................|.......-.
+-./.....|...\.....\../.......\..........................\.....|.............|...................|.\.../.../\..
+..................-.....\.............|...|.........-..-............................../............/..|.......
+.....................\..../.....|......................................\.\............|/....................\.
+.....-..\.........-....\..............-..........................\.....\....................\.........\.....-.
+\...\|\...../.\............................\........-.........................../.......-............\........
+.............................................-......\.............|..../.......|......../.....................
+/.........-............./......|................-........-.............|...-..../.....\.\....\................
diff --git a/2023/_input/day_17.txt b/2023/_input/day_17.txt
new file mode 100644
index 0000000..4b1857b
--- /dev/null
+++ b/2023/_input/day_17.txt
@@ -0,0 +1,141 @@
+121325426323542412134412222563763214173242535453232325612225164551127635723772145575536566417713247311545541175727733552452212441523653523523
+231216223351264655141552632132146473161357374264732366771212156625436662643364737431521763213145311617777525575176251125412656265156636352432
+255435624536215242455255274127151752475473257313426654415761317568425352264846453367673257227477673421453656366237631536651114522326245456615
+344331433555112552532552441246721161524725237132172162473256673465755557232328644654572412153231541264466241774431162777355546362533344542421
+525434363526162414614511663416111745537123243145613227283763543465788327456326856852866874124527274332336777363327232541433222231612255241612
+352235344252142631232127357265376676254615135133242727833447765382324487438778656255478645828762521474722353742357252641751351141543313223632
+235365554564642142213252263132372377425544636553542833456273556476758848377428287838746647527425711117252167121757242425125161251113264443626
+165425632552555165372613266166327523222655423886342562537544327574724656766642523836564685768736434166164652735551562516455571412531311465335
+121531436312116267461622426412334716376556665774834833357383344676667323322748475835558366425878324331212135566154435674513154235616216163653
+454344321515415445647672543161512554212387736754464372857823786875252667875673864352686688388833573228427444421467132524723143512135562244526
+613226242114623136313663545543152317753778652442275543868435823455584488773643782734268233428646834523476537544571432233243333612245253454624
+161334323365467755255722513257555111247447826333235664636475334363246553548854742324663775673776676673782743363512746613324113561464351562433
+551242656566236736277377461266667667558658874288565746376546236587353778774373782475282584848426676678373323242726212443546316455635653155436
+336214616613325457172215621734164865282833245743578454544644268255423686363442453522542852382684442285543288741155321351577752531474223533221
+144344123531637514434312127552563257522557774874344644854364727668743855485536325723282665758742642538662557482455224675736631163331511422142
+336351626524131641554261754317638358738826684428323377423622538523375362228223672787457562836347625764576734457587474766475747516372652566231
+612513241543725162327454351625436332668668856233758464376282784356685584657874346444277467466588865736667748646588425753462255337344555365446
+366424126763222316745161123522677374645733584275462735334644344554593365885387847566528547447664424874685455268367223311761364165627461121446
+356311142447474655364457372563887674634575568383426367898359693768789377693745759643487776846625334828753572877373875176522444431252331224422
+425424324567624576122615622276325327742576743837356844644479575844967796477573537793985633434477625458353733673643674141773331632656722223463
+621254765663163614457635662333844655438234278424844747388633859993586587574799568538737743853325275665367223662268284723456517574235121566532
+346136661256751245124217883654467857786866448456756588949449553584865546834849685777597945843934338844275462462687574643747327175345551677341
+512161274455154234633663764872574643827782625594539793643858755895385735748634556745699898587755353587587723883526358273613757213626117456351
+242731413511512266452636286277758466337866238495734956789456574346779889855734834547488794979387533645746648268686345257861622423451374215452
+335166447433422657346432388562528287826366355894963778777799438768474485597366944738549768335885458468334823545752547338662336527435117713141
+467626137762614433253484867872626742833688586595749979597599774499774673884389699467965985859435965673475766884854322677558417322416245624424
+362537221231463666185555537234234367424653394783455736956669948353874555695643679646653874769856983843747377878554684536665271422645536163465
+133355763452411133324864436452373446723747645337555838367656555849444569338376987644974885896658553955365284856875454443347341765127212314235
+273733633455731656747452578662772427878353837835754448534794744496455567744793635667536654485665395867777686268265783288365376655434725534212
+644432565162632358572576325448387286448655489458448646878559887394965346863775833574867349638847993747537897627374726526787353826366471147427
+556563226255361765247323432455827446998387988646647354863939867997796476864447747863757865435947479368486357455638582345324573276657463726452
+422174721337717272857442783737733588559683868677964486366348486954878587859574487799647793838594987685576489934866876788274372777733371375462
+752161217431428388568723358666735554549383436444899376959455964864579887656579945799978683739849675335789896499465323833665742253126552775633
+334777552645554748868428457476664434634675764864865543685458978898864876558474664694897655745493969333484579837446532837445274685762554716161
+724453764525682552223737538638788799838463689663938997999599644955584644944666486769977558437979677676968864676332477642454568332343114571744
+213256326653433462676273747733678457989684878683883759988464894648789767979545777999697899945745688984653454544596464233258876486522145636625
+622547345371288747242226232299598884878789874988576976866899799557986984864498485565867466768683657969756443363979523462863762572845234676635
+234361754218524365866776553359555657395745646588654869677866459754799689555984978488549799664865378557996867934367767582226253674525436273146
+725461275282432446636623863496659574533869994344994554678994979849444579956788647885986946777759437979877497458947546734253247487568744323637
+451674534427263687826283534685655553389457477945896845845485748797985869844794875558847745889596443669754948599988389626634674458567321776321
+527443232588288574842563884737658733938759658845688945499677996664469957899468888789596675897687894799433478834755945748625523764426571277355
+413327625783838684385434664645396393846938778555698554697976684485889764479788894599998486675548676967374995747584798774345774636638842337547
+471133737455724564378552487657498857869649566999646599658645479889944766658974484766974987844749775663784496675488669996856248664457636666541
+275416538678372775874562883669684354544779585784868856545894745445774767866686495755498456586574457998373563947896936962264246255743634117613
+726721558785255224428485856338985895895894978595599844876665957585687689976996678666477984489748777677537496673536495688572254767267565753354
+165454645836736554446379748437859635558475849666585546645876767665578986998755788646694984986889757879745845969867369593646727663427388575222
+545564574242538573572376863754559656356465466486479647875567798978667779999669867579857885489774759685868473443845595986484243686386845232123
+437727747777447645454546944866854985544859849597457489765756759588569976695686687788957988898546467564687698949544396437553666527732437472742
+367115673785725744822778539437867558977668665656487666657779676976575876868686998776688564755844988755885877848444837435345735334744868863713
+154231384378845435436333346879665634955475645964765798775679956855965897685888755559795895595848747558677976637945799636698472268863723876726
+732116326453732742743679844346868563797849585888688889695769657577898667766668595889687788855795968778794787856844789376734268586767366425347
+537466534756452332889944985594363567579464986854786669675996956995965899986655798776657877789875695549446985973333996746879848863454378735736
+232437823888337527699479375673933555644596944964976878896799977789579799695989869676589996796869744446547678676463794365385975287866545836574
+627367827638632257833487968756599579495479858799946669799879959696778576997576959575999998569965575954984785939447896769653826228432882822237
+223537546632535267374938566547335549454879975758988678798977879576776859986956766658595698986958958578848466766564589996785372572347788857526
+767462554365445862453579685585478846487546855996999778779959876575896779899689975656676589597897476658777687687399568898949973225838357525515
+427158354326458335459776869668775468546798566969688958759875797968887699877587768877566566558867988697474796948855943549359532535762286826444
+727473624563678642598359846353469567445754654956968558787858589668598687966787868765869896595777745489945767987559549666694333748526728572737
+675332588577675777498537776665984784754974678447769996788966969556976987988898659998977968776599574846499549569674367939497675674842682562526
+616633734462324766989559479568877855949994744999568655697789999797799697968867759598679966989799946987949497488863549778993553857468428786465
+225863848834254684763437333455364984789896494488685778557586996769779996899968987666856968655795984845945877744837377765878864334237263333723
+656466528235852463579894579393696645964769474989668989579977858686887779986767768976559996685679595565698476975476954977873333826573723863487
+255377484435828279796885878835958665669855456699695565896599897687668998789778966997599877675689664586785676558889696674646653286472743646875
+745447273475736483988685464946775766855555866589775586785879687886688876968769788879675679785895895748849486899985939983646375375862755662541
+762463265652786795394676999987956644659558986696669597859659787796698667679989796665975869779889769976974586697493437763853976627878473653573
+256524446848833848698473648697699998944687948877697765798699666897987786789876896977575795657859568594484658654548968947846598568788363663682
+124273355248257646643368469834444579858649647975886779985787988897787796668886788696668976986676778659554758488757543877995469576243468567668
+774248454835252458348467636368986954844977968757856577779687799686877786969767996988655766589869556776945784574649978593834693325552643458878
+232674784886437298846345348649877498895646569958997577557978788889798796797988688799985987877996885589594688587558473446776677535484267273538
+622855828833226287376494589438459699676465566569776865679688686769887887766699878996755665857567595866478994858944846344685899674832387238486
+475882247637357668753498444586849898549959695575999995685689987787697898877966668797667566556975896997947448558847969979384533976846745844343
+628553637525437239793463598636574895979459876697767996855886967896969789699877679666658586967969896946958999455763855736695738783434346388384
+518554888456433663836877639893476956648785697979589986675796699666798876967667776699976758589676988654445467847997658795639478328724567572487
+535422734272548767894674876955676979978477978687867698557799989968786976978899987897766985876986768667478558648497767698385476654324656636552
+355485777372224736599899667535884798846797698779685695697596866887677767896778869777969776559978796478946456899577573553735744453352385835487
+538538734362626739638488766944698944565886859869597755598676996896686868896998879867689857975587957586969554754956698894797754553367526467337
+478562664223688544996659356367449569755777768898876577758766669786796797687986799997879899797999576767464565984484889833347359765524734584657
+318566285878825468736366765944668498486878476995886676566957989896776999688897987996655556868669786954555999765597989948899875384867383462764
+556873627333226234473338883746554566969666956566785576677566776678867996989967789765955586659869794879466859854756599948587739857475427775475
+316528428832386727498374889836398866547949844669678999557967797767769767886697869985976687598995568488456957946484798454465934786677665445645
+711827865826258229863653693974765548565997545599897898567776699688698778668896876858798586689988877549975444555969443577373969472462426845757
+255846247547426838467986347564894658594544785766987569876759988898878688776666967768777955887876755954569689449759468453648573374385234882371
+545327574627834757335364964497588997844584478879769775695878589989989768989966866597788876767759964466696697794754497896668476473764828776235
+623542268675677528986783476548564985758754975876968787758559856966968769776767698558659957857797887886578848666545849385549633346427676782852
+523272367852473835358866377589458545685684767446977955655597859886587999798778858698599666986557877556985899597978638396767487262255282388574
+526464537226232253776799357347638799555545556498579666888669677677695667988886698999757896875978958494665989786554456677447786438745867346675
+577147534524455465447887948487393449775478485964759679655555889878877785965797688969658775597979469957795684846655587459935354488683868574475
+476573744388447423584864793793738687979474964546458656856879977957556596965858776655689965565748458956447677994987584759763968528588724355852
+765627353433228375456947843836564677968978758967949997668657898675679896979698566675889695985847675775885449683696794687577937842737586643352
+477134587642685728265784483844776466795497794547868798688895955977598795769868757799777956565588895786697794859357379544975528765367763856877
+266742482326685677599467374596888546575645989698484699778886886676958799595588877799889858769697674975978644639787996485495458256842325574757
+511267643566767533888646333695644346658549984489574685876757869677598886768978755777579757556565598854947664464687733388759522627253848472425
+132453735523256254676859739435649744646577849745978576765755576898585578599889897976587769674698699767559987453938553435576682258522368863515
+261271326334444562374387646686638477479675989655869968765886857887965969957587656785975744778879468965897886648985574487796442545668557435536
+333311652555825272556657854883565378575577657974447779559966885998686989769998795598665749487475768967567457967743633499368744726368236564332
+556152854664362567274585587564687735875744594447495957669459795589859798976687768967775954876475944764975646959949897977782647535248678877511
+264133385533255388732773947884977359799668959987896575645985977758886987796989957997695676698755444975487666754345698738652872868786345766727
+463113176447683582335265393398466858559586884499479697945477646669998577779575676785499475877984488786483549478756845366576537332825275321127
+234754217423267847437428693754995579687888987986466865874744755897875878857888866699946656657556949796739636534655639763833526784427583553515
+337121135364426334726223568894688765456965954877664774697659467465988684846796557679575457484794849866738548668674443592734238636282848564115
+525432728768642268423837647476659966537864884845577948656546694548897564578574576456847644479875989499696347558694977835763227444757773677217
+156224463358485728473363843754663638933574949566789679565746758849676455698844667988697995997665785499735885987657974628433833555435685515136
+626564231826425747284656538384673854766757349555974958576685795986849894964885544468857766986988954378558377779889746387372527537437461725142
+445163665587553553444628539497589763898673745545857459746478755669495459878987475776945787945847867374858357636869769677723374876456457165757
+153366452647645476878324567869439896344676947664859995465865987465754895649486979755879996566986669779646658347698956867866267276436816151113
+127352244373287438458433247869795949787875964597957497677699867658694688977484588679699786847448937389536364384838565247866454845226161175723
+721741643716473372688765645349654653433346574449588877957544676696994485668588556677898759864946868874958453937933688673454722748466623411652
+675736624326228287826836766533748773384344658798746846455458798564674548656569788488799848555985667549483833349574762738373276633836476134627
+554355724334358242262268673832537853795949493753735499554557564598876545697885759964464675653735897674734494347967552322786248748773433173756
+524245531542635544452688778273864537884657748433949889444574468445787474979867568494798686673539667457488746444566645782734865724373616263236
+777267215621225823587456728228359948654376758834949464465549786465778584948998557789887889986394343869834563568453768426825343888227144173166
+265564113372672575653724842356682744669898357534933347666789565784587947576466449944678587339599744743557488372843638343572776823277543723375
+212352523617334254267644573867753683633696466336799678446899434386687976777687834333934593465633459583756789768242338755872352375532647466227
+111627741725656332366674333258827826855435645558795857487796886854336863347974873745348869899349886695545664884662678638564436537433222736161
+751471263751634114635565276285257754964789786366464984543765398497679333354587347363945366373587745497886436426273645853646845641277744323514
+574717513615323754464466666322864236459478738648458834487669937333854886745538895843545845666934588876848228688353378737476634263752771276145
+174244655323632474785437732386584262658779585758993364633848866539693757468968548673465698748365568894458263656753622636377414142673221243322
+166156571447265174328544282873634644377894647986437555376785653448937566995375636838633878868784898647883365447845536654375453222174632441251
+654164557172147564374256368627264444728622377779976798455698345746878373973896765973759947985693879832342646232772324282424464437275452463655
+565652532553113233523827884848633483625844846937786747673867368467993338459946345977589487577684334668275362857356337875843212172615654352251
+136444124551637421417468456666378884854788583383837673774543339546456453754847436335893836959945773738527375687646736886267674326212777763716
+444353742346377224341232334425262657468736873538567459567845689556548746446388464869648779758459726854267866576453566472167257475341222456531
+462614525614355533772434583462633832257557638644285865794369797694698863536458549967639547734687288467428853288846886287715632366341631561115
+455441432435714326616747438357253222332582425867288445889467835944779599586367765576693398943366488578555332622463247655161333226323675352455
+333444526427627456346265253275687327432534244657234864853399846595886679774465998576653787363644627268888657745482657213341134333232217251546
+415442524346772367715767346362633778553623736262777663675623548378554545379769474853854558442457463745628676765348376112111266562354717415164
+365316216737244653574726463346527547664757422635463777366444786753568754993555528747645573364237467476834244465353114662241533135343526443354
+642156535332266156154527631472724633643463332275322654263687536764555433884484872223523578455236337253773846583442363553451141565376121563123
+244523631421322355153425713263448623674673364463283834252622474824474765435427683635476382363664338348634362582717422471426736454651564455316
+253625236524547371773674334443474228222284888542835387542755752672824826663388384838663866487244658742645257677716551235417613351512356344533
+611332423251345151727574654411316523644243288763383785232527743372275338786488442433353623285538557376682745715444327162752542662532463466641
+424561223232512512225435257561476517647846267447682737858538454624762665424754623672526763552335854437625663167326414777711372475411244253315
+113445234225455575716433756264621114768575746383344332688867545365688287364473386668462857253452527847752367227434333453645536274433363351456
+311645443322532425632437732576611256323424536473675555622587885685256723826767245854644433734667687468571222263523247771752351754265251214136
+512416342312651622176655526243467562223245588372876637243434578222436572547672245574763847367673234581331713611173336321113414556131451125355
+544126134335454312772124477776571372151312722382728682266462285748233358658752327846786837524283276245374515153651776564354246643163351254245
+161465163312132356325543532457453137741137674643588543372324648768736672372454445822678234873823421761535355522321756266276365333544564112263
+535322143226134621342247743331746616277725262674766583564888573648676748678685644867364857557762545355635147457167542233551416562236121661612
+166513621125514212452452465653337671155715633155415735438632523225822753456628472866466783365443766373747533377762526471263564366145253153246
+241256124152326322554142667257454522265554757273453374213777577356787834227842242227264715774737665132267716542367135321542134465324433441643
+525456252341264533166516163744757274726223464616557543136577647326736286542837871744411672175662567555261523634677477436662463555523615556434
diff --git a/2023/_input/day_18.txt b/2023/_input/day_18.txt
new file mode 100644
index 0000000..505fe6d
--- /dev/null
+++ b/2023/_input/day_18.txt
@@ -0,0 +1,604 @@
+R 2 (#3e6b80)
+U 6 (#2b1de3)
+R 4 (#1465b0)
+U 2 (#549d23)
+R 6 (#aa9992)
+U 6 (#27e7f3)
+R 7 (#aa9990)
+U 6 (#5a3933)
+R 5 (#1465b2)
+U 5 (#23ade3)
+R 4 (#49b5b2)
+U 6 (#39ad53)
+R 7 (#54c4f2)
+U 5 (#491513)
+R 9 (#4f5960)
+U 5 (#357be3)
+R 3 (#4f2140)
+U 6 (#258b43)
+R 4 (#4f9570)
+U 3 (#1ea371)
+R 8 (#7be6c0)
+U 5 (#67bd61)
+R 5 (#a31240)
+U 6 (#6bf7d1)
+R 5 (#a31242)
+U 4 (#3464a1)
+R 3 (#7be6c2)
+U 4 (#33f091)
+R 5 (#5c0530)
+U 6 (#4c4e11)
+R 2 (#611e90)
+U 3 (#128231)
+R 6 (#5ecef2)
+D 9 (#6eb251)
+R 5 (#5e54d2)
+U 9 (#1e8081)
+R 3 (#73a8b0)
+U 10 (#6dc731)
+R 3 (#84d470)
+U 2 (#6b91a1)
+R 7 (#64edf0)
+U 5 (#4da881)
+R 10 (#710072)
+D 5 (#4aa4f1)
+R 7 (#4dd192)
+D 6 (#4aa4f3)
+R 3 (#2af062)
+D 6 (#6fabe1)
+R 5 (#177cc0)
+U 5 (#26ba61)
+R 5 (#5a3aa0)
+U 9 (#3b5401)
+R 5 (#012590)
+U 2 (#747f11)
+R 4 (#753b32)
+U 7 (#965a31)
+R 4 (#753b30)
+U 3 (#20c281)
+R 5 (#225830)
+U 4 (#7a4da1)
+R 4 (#716560)
+U 6 (#036ca1)
+R 5 (#55fd00)
+D 4 (#064ad1)
+R 4 (#93a480)
+D 6 (#411d21)
+R 3 (#990d00)
+D 6 (#4af4a1)
+R 3 (#0f8880)
+D 4 (#0f56c3)
+R 3 (#7f2590)
+U 7 (#0f56c1)
+R 7 (#374e40)
+U 6 (#4af4a3)
+R 2 (#161a20)
+U 3 (#5277d1)
+R 5 (#7c6760)
+U 4 (#528313)
+R 4 (#525840)
+U 4 (#267643)
+L 10 (#525842)
+U 5 (#501273)
+L 4 (#447950)
+D 10 (#69cdc3)
+L 3 (#530a00)
+U 10 (#590643)
+L 5 (#243450)
+D 5 (#74a853)
+L 6 (#7c2a42)
+U 5 (#1d9673)
+L 3 (#3f8d62)
+U 8 (#606b43)
+L 5 (#576480)
+D 8 (#63d243)
+L 5 (#86ad60)
+U 4 (#63d241)
+L 7 (#0be9f0)
+U 8 (#4b0801)
+L 2 (#64f9c0)
+U 4 (#478081)
+R 9 (#20b940)
+U 4 (#a60cd1)
+L 9 (#02c6a0)
+U 5 (#0d8be1)
+L 4 (#8226e0)
+D 6 (#013a81)
+L 3 (#5cf860)
+D 4 (#985951)
+L 5 (#162d72)
+D 2 (#1c2c31)
+L 2 (#654f82)
+D 4 (#51b4e1)
+R 10 (#401a32)
+D 5 (#32c291)
+L 7 (#84ff82)
+D 2 (#25cf41)
+L 3 (#43b090)
+D 4 (#6208d1)
+L 3 (#a428a0)
+U 9 (#6208d3)
+L 3 (#07d9c0)
+U 9 (#6e8a01)
+L 2 (#3ab640)
+U 3 (#187711)
+L 4 (#162d70)
+U 6 (#8e5a81)
+L 6 (#049580)
+D 6 (#a81333)
+L 2 (#342030)
+D 3 (#233073)
+L 7 (#510730)
+D 4 (#15cbf3)
+R 3 (#507520)
+D 5 (#3be881)
+R 6 (#52f2a0)
+D 3 (#a52711)
+L 3 (#0d7680)
+D 5 (#1db6c3)
+L 5 (#5f0450)
+U 5 (#6c6d73)
+L 2 (#47abc0)
+D 5 (#707733)
+L 5 (#771be2)
+D 2 (#151c53)
+L 3 (#413da2)
+D 3 (#768703)
+R 11 (#640b02)
+D 2 (#37b343)
+R 4 (#4ac8d0)
+D 5 (#016421)
+L 2 (#907990)
+D 5 (#016423)
+L 3 (#412220)
+U 5 (#0f5603)
+L 9 (#5e11d0)
+D 5 (#24abb1)
+L 7 (#1ab552)
+U 2 (#06e641)
+L 2 (#9e07e2)
+U 4 (#06e643)
+L 6 (#51f692)
+U 4 (#763581)
+L 8 (#3716a0)
+U 4 (#1360d1)
+R 5 (#567bc0)
+U 2 (#222831)
+R 9 (#7d2160)
+U 6 (#72b991)
+L 6 (#4a6840)
+U 3 (#3ef773)
+L 4 (#626a10)
+U 4 (#4c3d93)
+L 4 (#6fa5e2)
+D 4 (#6e0b33)
+L 4 (#6fa5e0)
+U 3 (#38aaf3)
+L 5 (#223552)
+U 5 (#025c33)
+L 4 (#4205c2)
+D 4 (#49ddd3)
+L 3 (#3aa782)
+D 4 (#028fd3)
+L 5 (#76e842)
+D 3 (#028fd1)
+L 3 (#9bc962)
+U 4 (#6bde73)
+L 9 (#9d6be0)
+U 6 (#2db831)
+L 5 (#1192c0)
+U 3 (#6b5c33)
+L 4 (#152940)
+U 4 (#746923)
+L 5 (#8648a0)
+U 3 (#4cb8d1)
+L 3 (#877170)
+U 5 (#24ca21)
+L 4 (#877172)
+D 3 (#6e4261)
+L 2 (#691310)
+D 6 (#655001)
+R 6 (#7e7740)
+D 3 (#1562b1)
+L 6 (#261a00)
+D 4 (#700e91)
+L 4 (#6ade10)
+U 9 (#4a1251)
+L 3 (#5a7c00)
+U 7 (#5a30e1)
+L 6 (#15a832)
+U 3 (#152e01)
+L 3 (#643622)
+U 5 (#977db1)
+L 7 (#4b7bc2)
+U 2 (#546691)
+L 7 (#8cd5a2)
+U 7 (#5b7a31)
+R 3 (#6c85f2)
+U 6 (#6996a1)
+R 8 (#458692)
+U 3 (#370e51)
+R 6 (#7bc6d2)
+U 4 (#07aa01)
+R 4 (#389dc2)
+U 6 (#3de6d3)
+R 6 (#54ece2)
+U 5 (#625703)
+R 10 (#0e9512)
+D 5 (#1e8793)
+R 3 (#873d92)
+U 4 (#2eb4b3)
+R 5 (#2d3432)
+U 5 (#26b2f1)
+R 2 (#2c8c52)
+U 3 (#2ff4c1)
+R 7 (#0e68f2)
+U 3 (#32b371)
+R 8 (#0e68f0)
+U 4 (#5d6fb1)
+R 3 (#128622)
+U 5 (#06af41)
+R 6 (#a95192)
+U 4 (#274af1)
+R 3 (#3af302)
+U 6 (#50fff3)
+R 6 (#3f9cf2)
+U 2 (#50fff1)
+R 3 (#4734a2)
+U 3 (#1a5051)
+L 12 (#986ce0)
+U 3 (#224b61)
+R 9 (#2d66c0)
+U 4 (#6f2a31)
+R 6 (#0aba80)
+U 7 (#0ecb81)
+R 4 (#606870)
+U 3 (#0ecb83)
+L 3 (#4e78e0)
+U 3 (#4563f1)
+L 11 (#8bed00)
+U 3 (#3298c1)
+L 5 (#5a39d0)
+U 2 (#51d641)
+L 8 (#8e6ee0)
+U 4 (#233851)
+R 4 (#31c7a0)
+U 9 (#728831)
+R 3 (#670cd0)
+U 4 (#1f3621)
+L 7 (#8df230)
+U 4 (#44a361)
+R 7 (#2aed30)
+U 7 (#2a0161)
+R 4 (#1db2c0)
+U 3 (#6387c1)
+R 3 (#1886b0)
+D 3 (#128c21)
+R 3 (#acb330)
+D 3 (#3a9d01)
+L 4 (#3658a0)
+D 6 (#00ec51)
+R 4 (#682712)
+D 6 (#2440e1)
+R 5 (#45f812)
+D 9 (#6298d1)
+R 3 (#778f22)
+U 4 (#6298d3)
+R 2 (#271462)
+U 10 (#0d5ff1)
+L 4 (#6a69e2)
+U 5 (#0d5ff3)
+R 6 (#24b5e2)
+U 3 (#2440e3)
+R 5 (#5f3192)
+U 4 (#41c313)
+R 3 (#236852)
+U 7 (#6e15c1)
+R 8 (#5187b2)
+D 5 (#6e15c3)
+R 2 (#65a3d2)
+D 4 (#41c311)
+R 11 (#3dfa02)
+D 4 (#26ca51)
+R 5 (#4e3912)
+D 6 (#797803)
+R 5 (#2f8ee2)
+U 5 (#2a9b83)
+R 8 (#3d6702)
+D 5 (#4646e3)
+R 3 (#3d6700)
+D 2 (#43a1c3)
+R 4 (#592f22)
+D 3 (#9d61c1)
+R 4 (#1f90f2)
+D 5 (#172261)
+R 7 (#5a7ba2)
+D 8 (#797801)
+R 6 (#4e4ad2)
+D 8 (#28fda1)
+R 5 (#55a862)
+D 4 (#28fda3)
+R 5 (#1665a2)
+D 6 (#3fca41)
+R 9 (#850700)
+D 3 (#43f8f1)
+R 3 (#3cbd90)
+D 6 (#620311)
+R 8 (#70b2b2)
+D 6 (#25cb11)
+R 3 (#336c52)
+D 4 (#8da331)
+R 4 (#336c50)
+D 5 (#0594c1)
+R 3 (#4a2b92)
+U 8 (#31cac1)
+R 5 (#392742)
+D 8 (#233743)
+R 6 (#798b32)
+D 4 (#233741)
+R 6 (#4fcde2)
+D 4 (#1ffd91)
+L 9 (#207ed2)
+U 5 (#9314d1)
+L 9 (#056d22)
+D 5 (#56c131)
+L 9 (#431340)
+D 6 (#94bbb1)
+R 8 (#357120)
+D 2 (#19ca71)
+R 8 (#8bebb0)
+D 6 (#4257c1)
+R 8 (#0c4fc0)
+D 3 (#380131)
+R 3 (#07a260)
+D 3 (#02a841)
+L 11 (#100a10)
+D 2 (#07ad11)
+L 4 (#4a2b90)
+D 3 (#10d091)
+R 6 (#609d22)
+D 2 (#69a281)
+R 9 (#320ed2)
+D 5 (#0782c1)
+R 2 (#67c382)
+D 2 (#19a311)
+R 7 (#14e152)
+D 3 (#4ee351)
+R 5 (#14e150)
+D 8 (#54dae1)
+R 3 (#428ba2)
+D 5 (#0a5431)
+R 3 (#1880e2)
+D 2 (#2fc091)
+R 9 (#440bc0)
+D 6 (#758b11)
+R 6 (#6a54b0)
+D 3 (#31f8d1)
+L 6 (#37e190)
+D 5 (#0c4af1)
+L 4 (#6acc62)
+D 2 (#161df1)
+L 4 (#72f272)
+D 4 (#161df3)
+L 7 (#088332)
+D 4 (#182831)
+L 8 (#82d720)
+D 3 (#371df1)
+L 7 (#7207b0)
+D 6 (#206d61)
+R 4 (#0c1082)
+D 2 (#796721)
+R 6 (#220252)
+D 7 (#2948a1)
+R 7 (#5f2c02)
+U 7 (#137d21)
+R 3 (#0fe252)
+D 2 (#0164d1)
+R 6 (#1ce912)
+D 6 (#4e0983)
+R 2 (#7d7c72)
+D 11 (#598c93)
+R 4 (#581202)
+D 8 (#0ffba3)
+L 4 (#500e32)
+D 2 (#42bcf3)
+R 4 (#31e852)
+D 8 (#2d8913)
+R 4 (#1d67d2)
+D 5 (#5a03c3)
+R 9 (#45c0b0)
+D 4 (#3a1e53)
+L 9 (#687430)
+D 4 (#3a1e51)
+L 4 (#25b1b0)
+D 8 (#613e03)
+L 7 (#4ea210)
+D 8 (#366193)
+L 3 (#4cb7c2)
+D 8 (#452333)
+L 6 (#675322)
+D 6 (#6ae223)
+L 3 (#0d88b2)
+D 2 (#23a4a3)
+L 8 (#60f512)
+D 5 (#568a53)
+L 3 (#0cbd02)
+D 3 (#4bad03)
+L 4 (#588672)
+D 4 (#72dfa3)
+L 2 (#960472)
+D 9 (#394403)
+L 5 (#28bcc2)
+D 6 (#4eb073)
+L 6 (#04e992)
+D 3 (#22c803)
+L 3 (#a76142)
+D 5 (#22c801)
+R 10 (#171512)
+D 3 (#25f2f3)
+R 6 (#581600)
+D 7 (#3d0f33)
+L 8 (#142a40)
+D 4 (#6eb893)
+L 5 (#142a42)
+U 4 (#02a243)
+L 9 (#522a40)
+U 2 (#4d2a01)
+L 4 (#081760)
+D 7 (#17c601)
+R 4 (#081762)
+D 6 (#497a01)
+R 5 (#2fbb50)
+D 3 (#4be663)
+R 4 (#3b3140)
+D 2 (#48f803)
+R 3 (#69ec82)
+U 3 (#80c993)
+R 5 (#3f05f2)
+U 8 (#5d5463)
+R 4 (#50d1c2)
+D 3 (#472973)
+R 3 (#1b68a2)
+D 5 (#5ebab3)
+R 7 (#464fd2)
+D 3 (#64c0a1)
+L 7 (#4062d2)
+D 6 (#8e33b3)
+L 5 (#1c3382)
+D 6 (#8e33b1)
+L 4 (#50b882)
+D 4 (#64c0a3)
+L 2 (#2bcfb2)
+D 7 (#84fc61)
+L 3 (#413452)
+U 10 (#84fc63)
+L 3 (#47ad42)
+U 2 (#03ba03)
+L 3 (#7197b2)
+U 5 (#81aa33)
+L 8 (#5c0552)
+D 5 (#235433)
+L 5 (#4236f2)
+D 5 (#4e9bc3)
+L 5 (#3740a0)
+D 2 (#1e7f23)
+L 10 (#3740a2)
+U 3 (#5f66a3)
+R 4 (#4236f0)
+U 7 (#164f83)
+R 4 (#5d1a30)
+U 3 (#1192e1)
+R 4 (#4c67a0)
+U 5 (#954a91)
+L 8 (#3348c0)
+U 3 (#306c01)
+L 4 (#694200)
+U 8 (#52c163)
+L 3 (#6abee0)
+U 3 (#26c123)
+L 4 (#6abee2)
+U 4 (#4c3413)
+L 9 (#4e8800)
+U 5 (#1192e3)
+L 3 (#2bb700)
+U 4 (#21ceb1)
+L 12 (#4ec360)
+U 3 (#21ceb3)
+L 4 (#32f940)
+U 8 (#5d5f73)
+L 4 (#1dcf10)
+U 9 (#3cf413)
+L 3 (#7cc870)
+U 8 (#5f0953)
+L 4 (#376c70)
+U 6 (#01d623)
+L 5 (#697e50)
+U 5 (#99e693)
+L 5 (#6f63b0)
+U 3 (#576c53)
+R 10 (#7fa030)
+U 3 (#1fd933)
+L 5 (#4eb2d2)
+U 6 (#39a1f3)
+L 4 (#3f0452)
+D 4 (#42ffd3)
+L 3 (#5b9d52)
+U 7 (#25c2d3)
+L 8 (#5ba250)
+D 7 (#40d763)
+L 5 (#5ba252)
+D 3 (#5f2a73)
+L 7 (#477ce2)
+D 3 (#2652d1)
+L 5 (#453770)
+D 5 (#758781)
+L 11 (#453772)
+D 3 (#937381)
+L 2 (#119e62)
+D 5 (#131891)
+R 5 (#3285e2)
+U 3 (#211fd3)
+R 11 (#8349d2)
+U 4 (#211fd1)
+R 4 (#3246c2)
+U 3 (#2515f3)
+R 9 (#5a5bd0)
+D 7 (#6fbf83)
+R 4 (#6a5680)
+D 3 (#6fbf81)
+R 9 (#329240)
+D 7 (#750063)
+R 5 (#5e71f2)
+D 9 (#3358d3)
+L 6 (#1d2652)
+D 4 (#6a8ee3)
+L 3 (#4e9cd2)
+U 6 (#3e8623)
+L 2 (#3607d2)
+U 5 (#379d43)
+L 6 (#3cf342)
+U 3 (#853b63)
+L 3 (#737102)
+D 3 (#1de1b3)
+L 2 (#66ff82)
+D 10 (#634163)
+L 3 (#2eff02)
+U 6 (#2ac343)
+L 2 (#528a42)
+U 7 (#4d81d3)
+L 3 (#2ea1e2)
+D 5 (#19e063)
+L 6 (#8b5a82)
+D 7 (#4b8e33)
+L 4 (#5e41d0)
+D 2 (#159903)
+L 5 (#31f3c0)
+D 9 (#537013)
+L 2 (#31f3c2)
+D 7 (#4b7b43)
+L 4 (#5bd890)
+D 10 (#1be163)
+L 5 (#0c3340)
+D 3 (#540d83)
+L 9 (#2449f0)
+U 6 (#9411c1)
+L 7 (#766db0)
+U 7 (#9411c3)
+L 4 (#37ee30)
+D 3 (#516ad3)
+L 3 (#0991b0)
+D 2 (#98a733)
+L 5 (#0ea042)
+D 3 (#513f83)
+L 2 (#a0c682)
+D 8 (#616323)
+L 4 (#a0c680)
+D 3 (#4555b3)
+L 3 (#79e032)
+U 9 (#673de3)
+L 4 (#5904b0)
+U 7 (#495bd3)
+L 3 (#5904b2)
+U 2 (#49a633)
+L 5 (#76a9c2)
+U 10 (#10de23)
diff --git a/2023/_input/day_19.txt b/2023/_input/day_19.txt
new file mode 100644
index 0000000..934f577
--- /dev/null
+++ b/2023/_input/day_19.txt
@@ -0,0 +1,732 @@
+hfm{a<1891:R,m<2881:A,m<2987:A,R}
+ns{s>2289:R,x<3094:A,R}
+vll{s<2397:R,x>1015:A,A}
+fx{a>3383:R,a>3059:A,A}
+bhg{x>669:A,x<605:R,a>3407:R,A}
+fr{m>2523:A,m>2353:R,x>2678:dts,A}
+llj{m<2149:vzl,pjq}
+qh{s<2205:R,R}
+nml{a>1072:R,x>1129:R,A}
+tb{m<2429:A,m<2506:A,x>2910:R,R}
+cr{x<735:R,a<2972:R,x<973:R,R}
+rb{s>2603:A,x>240:R,s>2405:A,A}
+xr{x>975:A,R}
+pb{a>2460:A,s>686:A,cq}
+dfv{x>1219:A,km}
+kc{m>1600:nsj,tjp}
+lx{s>3383:kgn,qrh}
+dc{s<723:A,x>2900:R,x>2607:A,A}
+gxn{s<3351:R,s<3754:A,A}
+kkk{a>1099:R,R}
+jbz{x>3246:R,m<3301:lh,zz}
+qf{s<3162:R,m>2686:R,R}
+gqb{s>2575:A,m>2634:R,R}
+pz{a>2415:sv,x<1649:A,a<1508:bv,R}
+fn{m<2045:ht,a<1532:sm,x>1630:bxs,gfk}
+br{m>631:A,m>392:A,R}
+dtx{a<3420:A,x<582:A,R}
+ms{m<1784:R,a<1945:R,x<276:R,A}
+ljm{a<3677:R,m<2840:R,a>3790:R,A}
+gcp{x<964:zqt,a>3632:qr,cvc}
+kz{m>2543:A,m<2302:R,ns}
+gqp{a>1014:A,R}
+hq{a>416:kz,m>2537:mm,pt}
+bcb{m<2838:A,x>355:R,R}
+cp{s>2863:A,R}
+gfr{s>2813:vxb,R}
+kx{s>3076:A,s>2788:bcb,rb}
+lrf{m>3285:jg,a<1934:A,R}
+sjf{x>2162:dc,s>886:ddk,s>327:qjs,zqv}
+cqp{a<3274:R,a<3562:pjn,A}
+zkb{x>927:vpm,x>553:pbm,pvv}
+cl{s<2019:A,a<672:mx,hh}
+vxm{s>3645:A,x<3010:R,R}
+tl{m>2863:hfq,s<618:xmd,zf}
+lc{m<1255:qjt,m<1360:mml,m<1405:rrz,R}
+mk{m<2694:A,m<2720:A,m<2742:R,R}
+vhd{a<1005:R,a<1032:fl,m>3001:hp,vc}
+bhl{a<63:A,A}
+dnp{m>2478:R,js}
+vx{x>459:A,s>3010:R,A}
+mgm{a>2427:A,m<512:A,m<672:R,A}
+mkg{m<3037:kqc,pg}
+pgn{x<657:dbf,bp}
+gk{a<2387:A,m>3634:tjf,xrs}
+bk{x<1464:R,m<2385:R,s<2889:A,R}
+brh{x<592:A,a>1420:A,a>1294:A,A}
+jlk{x>3037:A,R}
+sj{x>1055:R,A}
+hpg{a>2950:R,s<183:R,R}
+rvj{s>535:fv,x<2858:kjp,m<1563:hv,ff}
+nxz{m>2313:R,s<3765:A,a>2157:A,A}
+gml{x>3077:hk,fr}
+mnn{a>363:R,A}
+rh{a>120:A,a<63:R,a<86:A,A}
+kqs{m<1616:xpt,zzs}
+pp{s>2657:nk,m<2894:hhh,clh}
+tnr{m>2934:A,x>1403:A,x<1189:R,A}
+kk{x>2090:zkj,m<2508:A,m>2704:A,qln}
+zl{a>239:xgn,x<2628:nn,a>99:A,bhl}
+lm{a<2364:R,a>3061:A,a<2725:A,A}
+mml{s<927:A,A}
+pn{a<66:R,s>3144:R,x>3414:A,R}
+grp{a>988:gfr,knm}
+rbq{a<1659:R,m>2412:R,a>1755:R,R}
+bs{x<455:R,m<2320:R,a<1359:A,R}
+kh{m<354:A,pcg}
+xc{a<915:A,x>481:A,m>1053:R,R}
+zm{x<921:A,x<994:A,a<1883:R,A}
+xmd{a<1534:vg,m>2299:rpl,xs}
+dpj{a>155:A,s<3370:lf,s<3618:nxx,R}
+jzt{x<2429:R,R}
+bgg{a<224:A,m<2159:R,A}
+gcg{x<467:A,drb}
+smm{s<3438:rdk,m<1941:A,a<2090:A,shf}
+fds{m<817:A,A}
+dts{m<2173:A,x<2824:R,A}
+nch{a<862:R,A}
+pkx{x>1081:A,R}
+kl{a>3653:A,A}
+zmn{a<3055:A,A}
+vpm{s>2871:gb,a>302:A,x<1117:qh,A}
+zjh{s<681:R,s>1108:A,a>2949:R,A}
+csf{x<2624:A,R}
+fqm{a<2452:A,R}
+fp{m<2297:R,x<1623:A,m<2552:tb,lgz}
+qjs{x>1439:A,m>195:R,A}
+tcp{a>3014:dbd,a<2122:xr,s>395:R,qpp}
+qlq{m<2703:A,s<1679:R,a<3363:R,A}
+qp{s>3440:bmb,s>3155:jxr,m>2536:trb,gtv}
+pgt{x>2227:R,x<1942:R,m<2848:A,R}
+ks{a>2805:A,a>2754:A,A}
+gzs{a<1925:mg,A}
+nn{m<3249:R,x<2147:R,m>3368:A,R}
+hv{a<2412:fkv,hpg}
+sf{s<3613:A,s<3794:R,a>2553:A,R}
+dx{a>2210:kvd,lz}
+rt{x<702:sq,a<2430:dp,jd}
+tdx{a>951:R,R}
+rdk{m>1912:R,s<3160:A,s<3318:A,R}
+xd{a>1917:A,a<1756:cgg,s<1553:R,R}
+xgn{x<2590:A,A}
+mm{m>2703:R,gqb}
+kg{x>575:A,s<2499:A,s>2683:R,R}
+ml{a>1963:R,R}
+nt{x<1093:bfn,dr}
+kxz{s<2359:qxx,bkc}
+qqz{m<1860:A,a<3554:A,s<937:R,R}
+zc{s>2080:R,m<2808:qlq,s<1761:bl,lb}
+tvf{s>2113:A,a<3780:R,R}
+dhh{a<2922:A,a>3078:A,A}
+gtv{a>2013:A,m>2316:R,s<3022:R,mc}
+xh{x>2824:R,A}
+mq{s>2361:thg,sgb}
+lf{s>3091:R,A}
+lz{a>1814:spd,x<958:jj,kkj}
+th{s<215:A,x<3295:R,m>3355:A,A}
+xtp{s<2152:A,R}
+gqm{m<1316:R,R}
+dr{x>2043:A,m>2796:A,s>782:A,R}
+dbf{x<616:A,s<2980:R,A}
+hhh{x>2202:jzt,R}
+sq{a>2651:qcp,s>2270:kx,a<2082:bqv,sh}
+sh{x<322:lnq,txg}
+tc{x>1958:hr,rkl}
+hkm{m<2693:A,m>2768:kv,R}
+vjh{m>3433:nqx,a>372:qxl,s>2941:dpj,zl}
+nb{m>1186:A,m<1106:R,R}
+ttg{a<1907:R,R}
+rzt{x>1028:R,x<934:A,s<1494:R,A}
+gcj{m>493:A,A}
+mj{m>759:xc,a<926:A,A}
+rp{x>1430:llz,a>3405:R,s>253:cr,xzt}
+ngj{a<1849:jkc,vcl}
+ddk{x>1064:A,a>860:A,s>1170:A,R}
+fs{m<3638:zv,m>3842:R,s>1558:fh,xg}
+rpl{s>314:szc,a<2372:pkk,s<158:gsj,rp}
+jpb{s<2898:zh,pdq}
+ngr{a>1086:A,m<1535:A,R}
+lsm{m>2766:R,A}
+vt{a>2734:R,sf}
+kfg{m<3340:jnx,s>2974:jhg,jpx}
+hbg{a>39:pn,x>3436:rzv,A}
+pjq{a<3306:R,a<3496:R,A}
+fv{a<2261:ltf,qck}
+hh{x>2281:R,s<2324:R,A}
+pv{m<3610:kfg,dnd}
+kfm{x<1892:R,A}
+gck{x<1059:zm,s<1802:tnr,R}
+knz{s>1104:xlt,x>2522:hkm,m<2690:dnp,nt}
+zb{a<1282:A,gxn}
+qn{a<2568:R,a>3362:A,A}
+fhz{m<2469:R,x<1017:A,R}
+hl{s<2004:A,m<2517:A,s<2219:gn,R}
+hr{x<2819:A,x<3556:R,R}
+hs{m>1138:A,m>1099:R,x<1102:A,R}
+gm{s>1235:A,x>871:A,R}
+sm{x<1462:xmf,m>2947:xjm,sr}
+sgn{a>785:A,hgs}
+ll{s>2311:A,x<941:A,s>1709:A,A}
+gr{m<3579:R,m<3743:R,bcr}
+hgz{m>1825:R,A}
+vcl{x>1884:A,R}
+bp{s<2265:R,a<2991:R,m<931:R,R}
+vtg{a>589:A,s>611:A,x<1171:R,A}
+drb{x>499:R,x>483:A,R}
+kkj{s>2996:prz,s<2115:A,s<2591:rbq,R}
+mf{m>1621:xdf,m>1509:R,zpx}
+qx{m>2493:A,s<67:R,s>99:R,A}
+xj{x>1073:sd,a<2088:ssz,a<2874:mv,fx}
+nl{x>1901:vt,dhh}
+qxx{s>1740:gk,a<2502:xd,fs}
+lh{x>2845:R,x<2721:R,s<1013:R,R}
+gn{a<2827:A,x<888:R,R}
+ssr{x<1329:hcd,a<3869:bk,s>2378:R,fcm}
+djv{a<669:R,s>2282:A,A}
+vg{m>2419:xbq,xxp}
+hxz{s>1149:R,s<970:R,R}
+pcg{m<563:A,R}
+pfz{s>3593:A,s>3372:R,a<1883:A,R}
+spt{s>1816:ffb,R}
+js{a>3135:R,a>2472:A,R}
+qck{m<1565:R,R}
+spd{m<2263:R,x>787:A,fbv}
+cnh{m<106:vrl,R}
+gmg{m<76:A,R}
+ltf{a<1339:R,A}
+ssz{x<912:R,s>2404:R,A}
+hx{a>2776:A,s>3120:R,a>2575:R,A}
+ps{m<2121:R,m>2614:lsm,R}
+vzl{s>2769:R,A}
+qbq{x<1041:R,A}
+zn{x>2869:xtp,s>2386:qv,x>2164:vm,gq}
+xpt{a<1592:hkg,jrs}
+ckf{x<2913:A,s<3461:A,qd}
+vmr{s<538:R,A}
+xjl{s<1931:R,R}
+sd{s<2558:R,m>674:R,R}
+gzx{s>3734:R,a>2118:A,x<2007:R,R}
+vxb{a>1179:A,x>2948:R,R}
+grj{a<986:A,x<3665:A,R}
+hz{m<2410:R,a<1473:R,m<2553:A,R}
+xfz{m<664:R,A}
+qjt{a>2336:A,R}
+skl{m<1447:tbm,x<2563:kc,x<3380:rvj,xmk}
+rpt{s>3373:kk,a>3465:pmz,qs}
+tbm{x>1640:gl,x>940:lc,x>555:dh,ppp}
+rkl{s>758:A,s>703:A,A}
+kt{a<1525:sjf,m<165:cnh,a<3002:kmt,glm}
+rxb{a>1274:A,s>217:R,x<2590:R,R}
+bmb{a<1887:qmq,m>2527:gzx,nxz}
+lj{m>1658:A,x<1304:R,a<2946:R,R}
+dz{m>958:skl,kqg}
+cgg{m>3549:A,a<1669:R,a>1715:A,A}
+bv{a<517:R,A}
+pzp{m>1796:A,s>337:R,A}
+kjp{x>2667:R,a>2007:jq,x<2619:tf,R}
+mmn{a<962:bfg,s<3092:rd,a<1071:vhd,kkk}
+qpj{m<474:jx,vrb}
+nbd{s<2643:fdz,x<2979:qc,a>109:dg,hbg}
+gv{m<1621:A,a<2391:R,s<526:R,A}
+bqv{x<397:A,s>1928:R,s>1735:hfm,vb}
+bxn{s>3496:A,R}
+rd{m<2982:R,a>1048:R,x>688:rs,A}
+xs{x>1594:hnv,m>2097:tcp,spr}
+hd{x<2832:R,a<1703:A,A}
+sgb{x<2756:R,m<3350:R,a>989:A,R}
+ct{s>268:A,m<1145:R,R}
+gfn{x>2445:R,m>3468:A,R}
+jrs{m>1415:R,s<2989:R,csf}
+mx{a<418:A,a<544:A,R}
+sz{x<3171:R,A}
+xp{x>96:kp,br}
+bz{m<2623:zn,x>2581:npm,s<2334:qz,pp}
+hsm{a<809:A,m>2928:R,s>2549:R,R}
+vm{x<2604:R,s>1820:A,R}
+jnx{a<2355:R,ll}
+ffb{a<3297:R,x>1272:R,m>2403:A,A}
+dkm{x>1784:A,a<3116:R,A}
+pjn{s>2661:A,A}
+vrb{x>458:rjt,a<2892:bj,xcb}
+ktc{s<1670:R,zs}
+cq{m<1671:A,a<1916:A,A}
+tt{s<2036:A,A}
+hnv{s<227:A,R}
+djh{m>3475:R,R}
+bx{x>3185:R,m<3404:A,gfn}
+bh{m>3890:R,a>2742:R,s<2390:R,R}
+jk{s<2685:nv,a>577:mj,m>532:vjr,gcg}
+zdz{m<2908:R,s<3336:A,R}
+bl{a<3471:R,m>2937:A,a<3715:R,A}
+gxl{s>3244:jcc,m<2779:rfj,npx}
+gq{a<2394:A,s<2052:R,x<1953:dkm,R}
+cqv{m<3827:jm,hlq}
+vrl{x<2650:R,x<3541:A,A}
+glm{x>1916:A,a>3599:nhd,ggg}
+zlm{x>195:A,R}
+md{x>1309:zdz,ttg}
+vpp{x<3122:R,R}
+kv{m>2823:R,x<3299:A,R}
+fcm{s<1752:R,m<2347:A,A}
+hmr{x<549:bh,a>2572:R,R}
+nm{x>2081:R,ljm}
+shf{x>2947:A,s>3634:A,x>1974:A,A}
+pt{x>2491:R,x<2085:A,s<3066:mnn,A}
+xdf{a<861:A,R}
+dbx{x<1876:A,a<1669:R,R}
+dp{s>2341:md,s>2015:gzs,s<1618:pqp,gck}
+kgn{x<1215:R,A}
+lgz{a>1196:A,R}
+in{s>1392:fn,vv}
+qln{s>3608:R,m>2588:R,a<3582:A,A}
+dvf{x>592:A,m<2183:R,x>320:A,A}
+dh{a>1930:A,x>739:A,a<1115:rbz,R}
+kvg{x<2234:R,A}
+qtn{a>1139:A,s<1193:A,A}
+pc{a>1879:cm,nch}
+fcr{m>2273:rdr,zqz}
+qcd{a<2274:A,s>2074:R,R}
+bcr{x<3112:A,s>600:R,A}
+nv{a<903:cx,s<2221:qnm,a>1077:fds,A}
+lkf{x<1086:A,R}
+qnm{m<806:R,s<1909:R,m<985:R,R}
+gb{a<426:A,x<1187:R,s>3618:R,R}
+sxt{s>2383:zt,m>218:nf,x<678:gmg,zmn}
+tsc{a<2880:bxn,s>3543:bhg,A}
+npx{x<551:R,m<3518:mjv,rkd}
+fbv{x>325:R,m>2480:R,x>134:A,A}
+zz{a>2965:A,x>2929:R,x<2695:A,A}
+np{a>3482:A,x<3481:A,A}
+sbs{s<259:A,x<1379:A,R}
+bn{m>3500:R,s<1981:A,R}
+rxv{x>2424:gml,a>3161:rpt,a<2452:qp,nl}
+rrz{m>1386:A,A}
+bpn{s<3253:A,m<2833:A,A}
+hvk{s>893:qtn,s>718:fp,ps}
+xzt{s<214:A,a<2852:A,a<3195:A,A}
+gt{m<2278:dvf,x<488:zlm,s>2549:A,tvf}
+nk{m>2791:kxp,bbf}
+sx{x>429:A,A}
+hvr{m>1538:vmr,x>3824:zjh,R}
+vd{m<1786:A,A}
+hgs{m<3070:R,R}
+vlk{a<1234:cl,bmn}
+lnq{a<2399:A,A}
+xbq{s>361:zmh,x>1853:A,A}
+jcc{m<2771:bm,s<3604:ssm,a<1271:A,R}
+jpx{m>3485:A,x>558:phc,m>3423:tt,A}
+hfq{x<2572:zbr,xt}
+bkc{m>3587:xrm,bx}
+sn{m>847:cqp,mvz}
+nq{x<785:ms,vd}
+lt{a>3074:R,hx}
+gl{s<547:nb,m>1232:gqm,lm}
+vk{s>2248:R,x>1018:R,x>875:A,R}
+nh{s<2219:A,R}
+rkd{a>1307:R,m>3778:R,s>3005:R,A}
+pl{m>532:nx,ckf}
+cvc{m<2242:llj,s>2486:lx,spt}
+xlt{x<1412:gm,R}
+tlh{s<680:R,m>1528:R,R}
+xcb{m>816:R,m<635:R,R}
+rf{a<3404:R,a<3430:A,s>3097:A,A}
+npm{a>2858:zc,m<2822:gvj,vpp}
+vb{x>516:R,a<1732:R,a<1881:A,A}
+rbz{m>1164:R,m>1031:R,R}
+dpg{m<2841:R,A}
+djj{x<2363:A,x<2667:A,R}
+jg{m>3682:R,x<1403:R,s<1039:A,R}
+jkc{a<1057:kvg,x<1649:brh,R}
+bm{x>529:A,s>3739:R,A}
+mvz{a>2875:A,x>2783:R,a<2598:mgm,vp}
+szc{s<471:zx,R}
+jb{x<659:R,x>709:R,x>676:dt,R}
+mb{a>173:R,a<102:R,R}
+qcp{m>2929:gkj,m>2762:dpg,x>412:mk,R}
+pld{m<1537:A,s<834:gv,m>1601:hxz,R}
+pzt{m>2415:pkc,m<2185:A,x<753:bs,A}
+jq{a<3196:A,s<241:A,A}
+hcd{s<2451:R,x>1173:A,A}
+nj{x<2302:R,x<2582:R,a<2520:A,R}
+fpt{a<3130:R,A}
+cbt{s>2382:R,s>2035:A,x<3432:A,A}
+tjp{a>2112:tlh,m>1498:ngr,a>994:R,vtg}
+xjm{a<583:vjh,m<3559:fhm,cqv}
+pg{s<2659:R,m<3065:R,s<3521:A,A}
+rs{m<3568:R,s<2122:R,R}
+tdg{a>716:R,s>1859:R,m<2373:R,R}
+vjr{s<3323:A,m<887:R,s>3746:R,R}
+qz{a<3160:pgt,nm}
+tk{x>369:R,x<184:A,x<290:A,R}
+qmq{m<2599:R,x<2042:R,a<1683:A,A}
+tv{x<344:A,x<362:R,A}
+pbm{x>798:R,s<2731:xq,A}
+jj{m>2323:tk,s>2354:vx,x<498:R,R}
+qgp{s>1012:A,R}
+ph{x<1029:R,R}
+hp{s>3534:R,R}
+xrm{s<3121:cp,x<2635:R,s>3518:R,R}
+xmf{a<675:zkb,a<1132:mmn,s<2787:gj,gxl}
+jtd{a<2647:nml,lkf}
+dnd{m<3828:dcc,hmr}
+zj{a<1710:jb,m>522:pgn,s>3129:tsc,sxt}
+cz{s>3009:jc,zzv}
+hck{s<2868:jzg,m<2279:px,x<1200:gp,A}
+fdl{m<1066:qbq,hs}
+qs{a<3302:R,x>1926:R,x>1732:rf,cxv}
+ggg{s<517:A,R}
+qr{a>3785:ssr,a<3690:dfv,hck}
+tjf{m>3817:A,R}
+xmk{a<1412:mf,x<3641:pld,m<1591:hvr,pb}
+kp{s>2187:R,x>165:A,A}
+fg{x<399:csz,x>551:zj,a<1392:jk,qpj}
+thg{m<3389:R,a>1107:R,R}
+zqz{x>596:A,x>213:R,R}
+qc{x<2322:A,mb}
+vv{m<1712:dz,tl}
+pbv{m<2080:mhd,s<878:tc,plt}
+px{a<3748:A,A}
+jzg{a>3732:R,A}
+tlp{x<3026:R,a>2164:R,m>353:A,R}
+xzl{s>159:R,x<3229:R,x>3323:R,R}
+zmh{s>488:A,x<1954:R,A}
+tf{s>209:R,s<81:R,R}
+vq{m<1053:R,a<2219:vll,A}
+glz{m<2247:A,x>725:R,m<2273:R,R}
+zkj{m<2706:R,s<3737:A,s>3825:R,A}
+nf{m<397:R,s>1752:R,s>1617:A,A}
+gfk{m>3145:pv,m>2600:rt,a>2976:gcp,dx}
+jhg{s>3608:djh,R}
+hlq{x>2998:grj,R}
+dv{s<2926:R,s<3607:A,x>402:dq,fpt}
+fh{m>3713:A,m<3664:A,s<1671:A,R}
+zzb{a<161:A,A}
+pkc{x>535:R,s<2008:A,a<1368:R,A}
+dg{m>2360:A,bgg}
+cx{s>2101:A,x>475:A,s<1778:R,R}
+zss{a>2883:R,s<2474:R,A}
+nx{s>3208:vxm,s>3008:tdx,R}
+gh{s>107:A,m<2657:R,A}
+qrh{x>1346:A,m<2388:R,m<2525:R,A}
+zv{x>3110:R,R}
+jm{a>1039:A,s<2431:R,A}
+kj{m>2931:nh,vk}
+jd{s>2473:lt,s<2087:ktc,kj}
+mhd{a<3200:R,x<2076:R,qqz}
+zzv{m>1041:A,A}
+krh{s>1661:xjl,m<446:R,rzt}
+tsj{x<132:R,m>834:nc,zss}
+jzz{x>368:R,A}
+xt{a<1846:gr,s<470:th,jbz}
+kxs{m>3533:R,a>1643:A,R}
+pvv{s>3049:A,a>280:R,m<2872:A,bn}
+zt{m>312:A,R}
+prz{a>1630:R,A}
+dcc{s<2488:qn,A}
+ppp{s>555:qgp,ct}
+sgl{x<1049:kxs,m>3295:dbx,ml}
+xrs{a<3128:R,R}
+qd{s<3697:A,s>3883:A,m<256:A,R}
+mg{a>1779:A,A}
+kvd{s>2370:mkz,a<2669:lvz,m<2375:ks,hl}
+gp{s>3412:A,m>2453:R,s<3190:A,A}
+gs{m<3214:hnp,a>1327:R,m<3478:R,R}
+dq{m<2294:A,a<3133:R,s>3809:R,R}
+fhm{m>3214:mq,a<1065:sgn,m<3095:mkg,nzh}
+kqg{m<471:kt,ngj}
+gvj{x>3475:dkt,m<2753:A,kq}
+bbm{a<2651:R,x<1934:R,a<2930:A,A}
+sr{a>523:grp,a<289:nbd,hq}
+zx{x>1522:R,s<413:R,x>551:R,R}
+rx{a>2719:R,a<2394:A,x>892:R,A}
+nsj{a<2290:gqp,lj}
+ht{m>1276:kqs,x>1383:vr,x<809:fg,jpb}
+rfj{a>1363:hz,x<924:jzz,x<1249:rvd,gjv}
+rdr{a>3396:R,x<490:A,s>1707:A,A}
+llz{m<2526:A,a>2958:A,A}
+vp{s<2776:R,m>438:A,R}
+bxs{m>3075:kxz,s>2929:rxv,bz}
+zh{s<2067:krh,m>838:vq,m>452:xj,qg}
+mv{s<2553:R,a>2583:A,R}
+lq{s<3384:A,s<3723:A,a<502:R,A}
+hk{a<2548:pfz,s>3580:lms,qf}
+fl{x>561:A,a<1018:R,A}
+qxl{a>469:R,xh}
+bfn{x<471:R,a>2998:R,s>903:A,A}
+htd{m<2745:A,A}
+lms{s<3778:R,A}
+mjv{x<1153:A,A}
+nqx{x>2835:cbt,a<271:zzb,a<391:djj,R}
+dt{s<2326:A,x<694:R,R}
+spr{m>1944:A,a>3045:pzp,x>1013:sbs,hgz}
+jx{s>2889:R,m<279:qcd,x>487:A,sx}
+trb{a<1977:R,a>2166:A,A}
+zs{a>3142:A,x<1091:R,R}
+vr{a>2273:sn,m>843:cz,s>2681:pl,vlk}
+gsj{x<2446:qx,s>79:gh,a<3044:A,np}
+sc{m>2483:A,R}
+nc{a<2727:A,s<2752:R,m<1032:A,A}
+pmz{x>2124:A,a>3726:kfm,A}
+rzv{m>2612:A,a>17:A,A}
+pkk{m<2591:sc,R}
+qv{m>2307:R,nj}
+mkz{m>2298:rx,m<2213:ph,a<2681:R,glz}
+txg{s>1691:R,A}
+kxp{x<2013:A,R}
+jc{m<1072:A,a<1090:lq,s<3550:hd,R}
+zpx{a>639:R,a>349:R,x<3587:R,A}
+cm{m>1760:R,R}
+zqv{x<1298:A,a<689:A,a<1166:R,R}
+bj{x>424:R,s<2808:A,a<2043:A,A}
+kmt{x>2294:tlp,s>566:R,x>1268:A,A}
+km{s<2922:A,a>3666:R,a>3644:R,A}
+hnp{x>507:R,x>187:A,R}
+ctf{m<1863:A,x<1658:A,A}
+lb{m>2935:A,s>1913:R,s>1845:R,R}
+zqt{a>3510:gt,a<3321:dv,s>2328:dtx,fcr}
+zbr{s<567:sgl,lrf}
+fdz{x<2671:rh,a>121:R,A}
+nhd{a<3761:A,s>849:R,a<3857:R,A}
+qpp{a>2654:A,m<2211:R,A}
+bmn{x<3088:R,a<1847:A,gcj}
+fkv{m>1512:A,x<3170:R,x>3258:A,A}
+sv{x>2547:R,R}
+dkt{x>3767:R,s<2076:R,s<2423:A,A}
+dbd{x<944:R,x<1326:A,A}
+xg{a<3113:A,m>3707:A,s<1469:A,R}
+phc{s<1991:R,x>1172:R,x<840:A,R}
+phf{s>1933:kg,s<1674:R,x>508:A,R}
+pqp{m>2786:A,s>1514:R,R}
+gj{m<2941:pzt,m>3643:phf,gs}
+rvd{a<1252:R,s>3015:R,R}
+knm{s<2302:tdg,m<2584:jlk,htd}
+clh{x>2113:R,a>2983:A,fqm}
+ssm{s>3366:A,A}
+zzs{s<2716:pz,x<1486:nq,m<1843:pc,smm}
+nxx{a<86:R,m<3157:R,s>3477:R,A}
+csz{x>235:df,a>2090:tsj,s<2596:xp,zb}
+lvz{x<566:R,m<2338:hf,fhz}
+kqc{m>3000:A,a<1259:R,x>2607:A,A}
+pdq{s>3502:jtd,m>734:fdl,kh}
+nzh{s<2592:R,s>3085:R,R}
+kq{x<3010:R,a>2121:A,s<2261:A,A}
+jxr{m<2447:A,a<1841:A,a<2096:A,bpn}
+plt{a>3255:kl,bbm}
+hkg{m>1491:R,djv}
+xq{a<399:A,x<652:R,R}
+rjt{a<3053:A,a>3622:R,R}
+cxv{x>1677:A,R}
+hf{s<1982:R,x<1260:R,x>1414:R,A}
+mc{a<1706:R,x<2072:A,A}
+bbf{m<2692:R,a<2801:R,R}
+bfg{x<492:A,hsm}
+vc{a>1052:R,s<3558:R,A}
+ff{x<3072:R,s<333:xzl,x<3262:sz,R}
+gjv{m<2383:A,A}
+df{a<2151:xfz,tv}
+qg{m>298:sj,pkx}
+xxp{m<2001:ctf,x<1555:R,a<853:A,rxb}
+gkj{a<3512:R,R}
+zf{a<2136:hvk,m<2363:pbv,knz}
+
+{x=270,m=803,a=872,s=703}
+{x=168,m=751,a=718,s=82}
+{x=153,m=830,a=1600,s=1613}
+{x=335,m=2651,a=45,s=535}
+{x=1744,m=2707,a=2054,s=421}
+{x=792,m=2226,a=694,s=2812}
+{x=2839,m=2056,a=3184,s=1188}
+{x=136,m=2452,a=76,s=610}
+{x=917,m=1348,a=184,s=1413}
+{x=1109,m=1790,a=648,s=1026}
+{x=1397,m=450,a=1618,s=714}
+{x=486,m=1721,a=1685,s=718}
+{x=2719,m=106,a=910,s=447}
+{x=623,m=1151,a=772,s=1053}
+{x=977,m=493,a=1463,s=2396}
+{x=499,m=270,a=3225,s=760}
+{x=70,m=2583,a=2786,s=300}
+{x=39,m=2807,a=3758,s=133}
+{x=1875,m=2332,a=869,s=2285}
+{x=2498,m=1034,a=2958,s=2313}
+{x=412,m=596,a=1271,s=295}
+{x=59,m=2215,a=3630,s=331}
+{x=1357,m=240,a=630,s=15}
+{x=48,m=1507,a=269,s=1936}
+{x=394,m=844,a=923,s=660}
+{x=227,m=436,a=2767,s=792}
+{x=27,m=773,a=586,s=987}
+{x=574,m=40,a=166,s=99}
+{x=1818,m=379,a=1740,s=908}
+{x=507,m=419,a=300,s=1289}
+{x=241,m=1679,a=226,s=235}
+{x=98,m=2248,a=1826,s=1645}
+{x=1608,m=752,a=1752,s=1596}
+{x=491,m=1129,a=780,s=2579}
+{x=41,m=2383,a=1346,s=336}
+{x=2266,m=755,a=248,s=29}
+{x=610,m=378,a=533,s=1732}
+{x=1681,m=935,a=2270,s=2267}
+{x=2150,m=1331,a=1113,s=3004}
+{x=689,m=261,a=1010,s=1711}
+{x=991,m=225,a=1468,s=2326}
+{x=18,m=1705,a=1963,s=664}
+{x=28,m=546,a=2929,s=92}
+{x=3391,m=440,a=1644,s=2483}
+{x=859,m=1340,a=508,s=25}
+{x=865,m=654,a=578,s=3020}
+{x=1297,m=144,a=172,s=611}
+{x=691,m=1975,a=1682,s=368}
+{x=5,m=3220,a=1769,s=356}
+{x=1974,m=1287,a=1944,s=215}
+{x=345,m=421,a=2361,s=2440}
+{x=1009,m=351,a=431,s=410}
+{x=749,m=836,a=40,s=79}
+{x=2735,m=2444,a=3141,s=813}
+{x=74,m=12,a=2040,s=3428}
+{x=20,m=188,a=14,s=1207}
+{x=1123,m=108,a=591,s=35}
+{x=184,m=410,a=22,s=251}
+{x=146,m=1425,a=833,s=1064}
+{x=2551,m=1056,a=1433,s=1569}
+{x=1883,m=1442,a=108,s=646}
+{x=804,m=14,a=1000,s=1944}
+{x=160,m=104,a=1040,s=2738}
+{x=1185,m=651,a=2981,s=1563}
+{x=43,m=1746,a=512,s=1247}
+{x=386,m=1151,a=1189,s=1107}
+{x=2118,m=2914,a=226,s=75}
+{x=3542,m=3035,a=1877,s=584}
+{x=120,m=1243,a=575,s=8}
+{x=3828,m=1207,a=124,s=7}
+{x=142,m=1824,a=2620,s=574}
+{x=622,m=713,a=354,s=1178}
+{x=107,m=671,a=142,s=446}
+{x=230,m=581,a=1034,s=1436}
+{x=622,m=521,a=440,s=2084}
+{x=671,m=717,a=224,s=535}
+{x=64,m=818,a=1947,s=214}
+{x=74,m=1639,a=441,s=1224}
+{x=625,m=1559,a=3240,s=134}
+{x=1738,m=2097,a=197,s=511}
+{x=884,m=2434,a=178,s=1287}
+{x=1524,m=773,a=201,s=1309}
+{x=99,m=24,a=3313,s=812}
+{x=216,m=97,a=2561,s=182}
+{x=2981,m=399,a=383,s=252}
+{x=61,m=439,a=671,s=1747}
+{x=309,m=3,a=8,s=2011}
+{x=74,m=958,a=87,s=896}
+{x=100,m=661,a=1197,s=174}
+{x=391,m=284,a=2173,s=348}
+{x=1477,m=1641,a=150,s=1475}
+{x=1376,m=801,a=10,s=221}
+{x=706,m=1658,a=415,s=2618}
+{x=137,m=13,a=1319,s=264}
+{x=754,m=940,a=245,s=362}
+{x=1977,m=987,a=206,s=1058}
+{x=1652,m=194,a=1058,s=1236}
+{x=66,m=297,a=2194,s=339}
+{x=1440,m=1819,a=200,s=923}
+{x=221,m=35,a=2729,s=1582}
+{x=145,m=503,a=160,s=2628}
+{x=643,m=772,a=1129,s=634}
+{x=1580,m=5,a=847,s=503}
+{x=2069,m=370,a=447,s=465}
+{x=2794,m=92,a=1234,s=1493}
+{x=2752,m=215,a=305,s=1296}
+{x=1769,m=449,a=1991,s=210}
+{x=1513,m=405,a=1029,s=1594}
+{x=1260,m=1937,a=327,s=959}
+{x=165,m=557,a=1077,s=3128}
+{x=1263,m=180,a=19,s=72}
+{x=369,m=173,a=530,s=1370}
+{x=331,m=639,a=567,s=263}
+{x=1046,m=2303,a=32,s=461}
+{x=106,m=160,a=18,s=1293}
+{x=1202,m=48,a=644,s=155}
+{x=1411,m=1973,a=68,s=1002}
+{x=3082,m=1684,a=1314,s=2303}
+{x=781,m=414,a=885,s=341}
+{x=294,m=2955,a=2670,s=268}
+{x=913,m=49,a=378,s=1057}
+{x=67,m=1402,a=910,s=310}
+{x=304,m=2341,a=214,s=1026}
+{x=668,m=478,a=1233,s=363}
+{x=2275,m=3714,a=12,s=57}
+{x=2603,m=591,a=1357,s=1809}
+{x=7,m=511,a=3472,s=1883}
+{x=1305,m=2652,a=1194,s=227}
+{x=308,m=2241,a=416,s=2248}
+{x=83,m=3545,a=3477,s=372}
+{x=2771,m=1273,a=1640,s=816}
+{x=3080,m=174,a=542,s=724}
+{x=209,m=70,a=534,s=210}
+{x=452,m=114,a=679,s=1008}
+{x=771,m=294,a=338,s=1258}
+{x=1730,m=826,a=345,s=27}
+{x=2901,m=1038,a=1499,s=2199}
+{x=2066,m=3193,a=957,s=393}
+{x=130,m=3257,a=2250,s=253}
+{x=235,m=987,a=278,s=597}
+{x=2465,m=1268,a=1893,s=2360}
+{x=940,m=470,a=435,s=1386}
+{x=958,m=392,a=79,s=18}
+{x=1513,m=2440,a=1287,s=36}
+{x=84,m=361,a=3217,s=28}
+{x=2451,m=2374,a=57,s=1242}
+{x=251,m=1008,a=1114,s=1458}
+{x=2058,m=46,a=657,s=989}
+{x=2398,m=463,a=1753,s=917}
+{x=1181,m=2013,a=4,s=2832}
+{x=1548,m=271,a=6,s=218}
+{x=1934,m=240,a=410,s=954}
+{x=2328,m=1860,a=1111,s=1487}
+{x=2370,m=27,a=694,s=1372}
+{x=2299,m=350,a=669,s=360}
+{x=2010,m=2306,a=700,s=1297}
+{x=349,m=2569,a=223,s=352}
+{x=50,m=343,a=49,s=17}
+{x=1980,m=82,a=20,s=1637}
+{x=1336,m=1955,a=269,s=264}
+{x=154,m=3620,a=2,s=818}
+{x=623,m=3021,a=2297,s=1911}
+{x=2981,m=2825,a=1290,s=69}
+{x=493,m=534,a=1029,s=3961}
+{x=44,m=1352,a=1311,s=1147}
+{x=920,m=389,a=2045,s=1441}
+{x=1166,m=930,a=1522,s=291}
+{x=51,m=673,a=2995,s=496}
+{x=950,m=557,a=24,s=1444}
+{x=1261,m=2375,a=234,s=1565}
+{x=303,m=464,a=645,s=923}
+{x=2077,m=287,a=740,s=1523}
+{x=1813,m=370,a=1529,s=111}
+{x=861,m=2269,a=1182,s=2074}
+{x=111,m=1145,a=543,s=326}
+{x=504,m=468,a=2391,s=990}
+{x=1701,m=1719,a=2574,s=331}
+{x=1123,m=70,a=754,s=2870}
+{x=6,m=1068,a=1404,s=2472}
+{x=991,m=1306,a=767,s=2885}
+{x=50,m=980,a=947,s=856}
+{x=1450,m=580,a=869,s=229}
+{x=684,m=486,a=1191,s=2639}
+{x=100,m=1569,a=66,s=644}
+{x=1756,m=138,a=1347,s=3488}
+{x=1403,m=562,a=726,s=619}
+{x=601,m=2128,a=43,s=953}
+{x=40,m=160,a=73,s=161}
+{x=556,m=2694,a=792,s=22}
+{x=505,m=1755,a=2185,s=391}
+{x=2545,m=3215,a=850,s=430}
+{x=1256,m=153,a=112,s=1132}
+{x=2016,m=2104,a=408,s=2138}
+{x=238,m=1081,a=645,s=882}
+{x=1735,m=620,a=52,s=34}
+{x=39,m=125,a=655,s=269}
+{x=233,m=1962,a=601,s=248}
+{x=284,m=2418,a=468,s=17}
+{x=864,m=2542,a=1040,s=399}
+{x=229,m=152,a=753,s=285}
+
diff --git a/2023/_input/day_20.txt b/2023/_input/day_20.txt
new file mode 100644
index 0000000..854c849
--- /dev/null
+++ b/2023/_input/day_20.txt
@@ -0,0 +1,59 @@
+%hm -> lg
+%ph -> gr, cd
+%xs -> st, zf
+%xc -> vv, bn
+%fx -> lx, st
+%dn -> zc
+%nd -> lg, tc
+%pd -> dn, lg
+%pc -> gr
+%lx -> gp
+%tc -> kj
+%tl -> nn
+%kk -> xs
+%gq -> pd
+%xq -> st, xj
+%nn -> bn, xc
+&st -> kk, fx, hz, lx, zb
+&hb -> rx
+%xj -> st, vq
+%sz -> gr, ph
+%bz -> kx
+%vq -> st
+%vv -> hh, bn
+%gp -> st, hz
+&js -> hb
+%lf -> bn, qg
+broadcaster -> nd, fx, mc, lf
+%cd -> vr
+%vr -> qc, gr
+%kx -> kc, lg
+%jr -> bn, tl
+&gr -> cz, dh, mc, qc, js, nj, cd
+%qg -> hq
+%mc -> gr, cz
+%nl -> st, ch
+%hz -> nl
+%kt -> gr, jc
+%zc -> lg, qn
+%vj -> rs
+&zb -> hb
+%kc -> gq
+%qc -> kt
+&bn -> qg, hq, rs, lf, bs, vj, tl
+%cz -> dh
+&bs -> hb
+%jc -> gr, pc
+%nj -> sz
+%kj -> lg, bz
+%hh -> jv, bn
+%hq -> vj
+%dh -> nj
+%ch -> st, kk
+%jv -> bn
+%rs -> jr
+%zf -> xq, st
+%qn -> hm, lg
+&lg -> gq, bz, tc, nd, rr, kc, dn
+&rr -> hb
+
diff --git a/2023/_input/day_21.txt b/2023/_input/day_21.txt
new file mode 100644
index 0000000..ea05ab5
--- /dev/null
+++ b/2023/_input/day_21.txt
@@ -0,0 +1,132 @@
+...................................................................................................................................
+................#..#.....#...#........................#...............#................#..........#.......#.....#......#.....#.....
+..#..........#...#......#..#.........##.....#....#.....................................#.......#.#........#...#...#.....#..........
+....#......##.......#..................#...#......#.............................#..#....#..........#...............................
+..................................#...........#...##......................#.#.......##....................#.................#......
+..##.#..#.........#.............#.#.....#..................................#................#.......................#..#........#..
+...........#.#....#.....#...#..................................#............#......#..#.........#..#....#.......................#..
+........#..............#.....#......#...#...........................#...................#.#....#..#........#...#...................
+...#......#.....##.............................#.#.......................................................#....#..#..#..............
+..#..#...#.....#..#....................#.#...#................#.......................#........#.......#..#........................
+...#.#.........#...............#.#.....#.........##..........###.....#.........#.........................#......#..#...#...........
+.................#.......##...#........#..................#......................#........#..#.......#............#.#....#.........
+.....##........#.............#...#.............................#........##......................#....#..................#.....#....
+...................#...#...#......#.#.#...................#.....#.........#..........................#..........#..#.#......#..#.#.
+...#.##..#..............................#............................#.................#.......#...#.......#........#...........#..
+...#................#....#........................................#.....#............................#..#....#....#.........#......
+....#.#.....#............#....#...#.........................#.#...#....#.....#...................#.....##....#.......#...........#.
+.#..................##..#.#...............#...............#.#..#...#..#...#.#...........#.#................................#...###.
+...............#..........#.....#..#.....#.........##..........##.....#.......##..........#...#..............................#.....
+.#..#..##.#.........................##.....................#.................##...............#.#......#.......#......#............
+.........##..#.#...............##....................#...#............#.....................##......##....#..........#........#....
+.............#...#....#.#..........#.....................#...##.....#.........#...........#.#.............#.#.............##.......
+.#.#....#....................#..#.......................#....##.........#......#.........................................#.........
+.........#......#..##..#..............................#.......#.....#..............#.................#......#..##...........#......
+.#...#..........#..........#....##..................................#.#.......#.................#.#.........#.........#......#.....
+..........#....#.....#...................................#............#.....#.........#..................#......#..#....#.....#....
+.........#.....................##...........#.#.........#.#......................#.....#........#...#...........##.................
+..#....#.........#.............#...........#............#.#....##..........#...#.#..........................#.#....................
+....#...........#......###....................#....#.....#..#.....#..#.....#......................##...#.....#..#.....#....#.......
+...........#....#...#...#.........................#.......#..#...........#.....#..#.................#..........................#...
+........#.......#.#.#..#...............#.#.............................#...#..............#...........##..............#.#..........
+..................................................#...........#.....#............#.....................#.....#....###..........#...
+.#.#.......#.....#...................#...................#.#..................#....#..........................#....................
+..........#....#......#...................#...#............................................................#............#.#..#.#...
+..................#..#.....#..........#.#.........................#.....................#.............................#...#........
+.........#................#............###.....................#.....#...........#...#....#...............#.........#...........#..
+.....#.#.............#..............#....##.....###..##........#..............#............#.......................................
+..............#...#..#..........#....#........#........#.......#...............#........#...#.#...#.........#......#......#..#.....
+........#........#...............#...#..#...#......##..........#..................#...............#.........#.....#.......#....##..
+.........#...##................#.........#...#...........#.....#...#......#....#.#............................#....................
+...................................#.............#.......................................#..........##.........#...#.##...#....#...
+.............#.............................##.............#.................................##...#....#.................#.....#.#..
+.........#......#..............#......#........#..........#..##......#.................#.......................#.......#..#....#...
+.....#.#......#...........#...........#....................#.#.....#................#.........#......#.............................
+...............#........................................#....#.....#.....#.........#..........#...#....#...........................
+.#.............................####.........##.#.#....#.#.......#...##....#............#.#...#.....................#..#............
+......#..........................#.....#............................#.#....##......#........#...........#..........................
+.......#.#..#.#.........#................#........#.....#.......#....#.......#.#......................###................#.........
+.#........##..........#......#......#.......#...#...#.......#.....#................#.......#..#......#.......#.................#...
+..............................................#...#.......................#.....#..............##..#..#.....#......................
+...................#......#....................#.........#....#....#..#.#.........##....#........#.................................
+.....................#..#..........##..............#.....#.#........#................#......................................#......
+..#...............#...........#................#.......#...............#..#...#.....#.............#..##....#...............#..#....
+...#.#..#........#.#...........##.............#...#......##..#.....#......#.....#..#.......#.......#...#.##...##..........#........
+..#..................##....................#.......................................#.....#......#.....###.....#.............#......
+..#............#...........#.......#.#................##.....#.##...............#.#..#.................#..#........#...............
+..............#..................#........#.........#.......#................#........#........#.....#.#...........#...............
+..................#............#.....#...#.#...#...#......#.....#.....#....#..........#........................................#...
+.#.........#........#........#.............#...#..#...#...................#......#.................#...#.#.........................
+..............#..........##..#....#.....#.......#....#..#..............#..#..............#.................#....#..................
+..........#...#...##........#......#.......###...##..........#...........................#...............#.##.........#............
+................##..#.............#......#...##......#.....#..............................#.......##.........#..#....#...##........
+.................#.......#.......#..#...##...#.......#.....#............#.................##........#.......#.##..........#........
+........#....................##.......#.....#..............#.............#.......#...#...........###.............#..#......#.......
+..............##............#.#..........##..............#.....#.....#..##.............##..............#.#.........................
+.................................................................S.................................................................
+..........#.........#.......##...#.#.......#.#.......#...#........##........##...............#..#..#.#..#............##.##.........
+........#...............##.........#.........#.#........#.#.#............##....#.......#...#.##...#...#...#........#.....##........
+..........#.........................#...#....#.............##..........#..............#.##.........#............#..................
+...........#.#................##..........................#..#...............###..#.............#...#..#.........##................
+...................................##.............#....#..#.#......#...##.....#..........#.#..........#...........#..............#.
+........................#......##.....................#..#...........#............#.........#...................#....#.#...........
+...............#....................................#....................................#......#...............#......#...........
+..#.............................###...........#........#..#....#....#..#....#..........#....#...#..................................
+.................#........................#.......#.#..#.....................#..........##..#....#.#........#.#....................
+.....................#...............................................#..#.........#..#.......#.................#...................
+.......#........#..#.............#..#......###...#....#................#.....##....#.#..............#.............#.........#.#..#.
+.#...#...........#.#..#....#.....#....##..............#...#...........#.....................#.....#..........#.....................
+.........#............#.....#.........#.....#...#..#..#.....................#..#..............##..............#....................
+.#..#..#....................#..##...#.........#............................#........#.....#.............#.#.............#.#...#....
+..#.#.....##..........#.##............#......#..#..............#....#..............#......#..#..#.......#...............#..........
+.....................#..........#...##.............#.............................#.....#.....#............#.#..............#.......
+..........##............#............#..#..#.........#.#............#..#.................#.......#.....#......................#....
+.....#..................#.....#........##.................#.....#....#...#................#....#......#.....#............#....#....
+.....#..#.....#..........#...#..#....#....#........#..#..#.....#....#..#..........#............#...##.#...#..............#.......#.
+....#...#......#..........#.......#....#........#..#..#.......#.#.................##...#...#.#.#.........#......................#..
+..................................#.....#..##...#............#..#..#..........#....#...............#.....................#..#...#..
+..#.......#...#.................#...#..............##..................#............#......#........................#........#.....
+..#.......#.................#.......#................#..#.#.#......#..................#........#...#........................#..##..
+...........#.............................#....###..................#......#.....#.........#...#................#.......#...#.#.....
+....#...#.......#................##....#.#..#..#...#..................##....#.................#................##............##....
+....................#...............##............##..........#.......#........#........#.......................##..........#......
+...#.....#.......#.................#........#.....................#..##........#......................................#......#..#..
+.#.....................................##.................#.#.....#......##.#..##................................#...........#.....
+................#........#............#...................#........##...................................................#.##.......
+.........................#.............#.#..##..#......#.#........#...............#....##...................#.....#................
+.....#...#........#.#....................#.#...#..#...#......#......#...................###................#.....#.#...#.......#...
+.....#.....................#............#....#.#..#.##...............##.........#........................#.........#....#..........
+............#..............#.#.......#...........#....................#......................#.......................#...#.........
+..#....###.....##............##................###.#....................#.....#....#..................#..##..#.#...#.........#.....
+......##.......#.................................#..#..#.....#..#.#.#.#....#..##.....#.....#.......................#.....#.#..###..
+.#.......................#...................#.##..............#...............#..................#.#........#...........#..#......
+........#........#..........................#...#..##.................#..#..#.##.......#..............#.#.........#....##..........
+.....#...#............##..#......##..............##.###....................#............#.......#............................#.....
+........#.#.........##...#.#.....#............#.............#............#......#...............#.#..........................#..##.
+...#..#.#...............#....#..##..............#............#.........##...........#.........#...........#...#....#...........#...
+.##.......#..##......................................##................#.....#.....................................................
+...##.......#......#...#............................................#...#.........................#.#.......#.#.......#....##..#...
+..#........#...#.#.#.#.............#...#...............#...............#...................#....#....#...#.#.....#............#....
+........................#........#......#.........#......#..........................................#....#.......#..........#......
+........#...........#....#..........#.................#......#..#...#.......#...#.....................................#........#...
+...#.#..#.#.#....##...#........#......................#....##......#......#...................................#...#.........#......
+..#.............#.......#..............#................#....#........#.....##................#.#....#...#.#....#......#..#........
+........#...................#...#...........................#.........................#.....#........#......................#.#..#.
+.............#....##.....#.#........#......................#..#....#.....#...............#.....#......#.....#....#..#..........#...
+..#....#.....#.#.#...........#.#..........#.................#..#...#..................#..........................#.#.....#..#......
+...#.....................#.......#...#...#............................##...................#.....#...#.................#...........
+..#.....#.............#......##..............##...................#......#.........................##.......#..........#...........
+...#................#....#.##.........................................###...........#.#.....#..#...............#...##..............
+.......#............#........#...............##..#........................................#.#...........#.....#...#..#.......#.....
+......#...................#...##.............................#....#....#........#........#....#........##..........#.........#...#.
+..#.#.#......##..#.#.##...........#.#........#....................#.............................................##...#.#.##........
+......#.................##..#.#......#.............##..................................#.............#....##..........#............
+.......#.#...#...........#.........................#...........#................#............##....#.........#.................#...
+....#....##.........#.........#..........##.....##..............#.......................#.....#.#.#.......#...#...#.............#..
+...#....#....#.............#...............#....#....###...................#........#.............#.....#..#.........#.....#....#..
+....#..............................#..#..........#.................................#.#.................................#..#.....#..
+.......###...........................#.................#.#.........................................#.....#...#.........##..........
+...........#....#..........#..#..............##..........#...................#.#............#.......#.#..#.#....#.........#......#.
+.....#..........###..#.....#.#.........#.............####..#.............#..#.......#.............#...#..........#......#.#........
+...................................................................................................................................
+
diff --git a/2023/_input/day_22.txt b/2023/_input/day_22.txt
new file mode 100644
index 0000000..f53e185
--- /dev/null
+++ b/2023/_input/day_22.txt
@@ -0,0 +1,1394 @@
+4,8,311~6,8,311
+2,7,275~5,7,275
+3,8,80~4,8,80
+7,6,12~7,8,12
+0,3,259~3,3,259
+4,6,197~4,9,197
+4,6,312~4,6,312
+7,2,65~7,2,66
+9,7,272~9,8,272
+4,4,230~4,4,230
+1,4,87~3,4,87
+3,6,137~6,6,137
+7,0,253~7,1,253
+1,4,270~1,4,270
+9,5,97~9,5,100
+5,5,199~5,5,199
+0,7,271~3,7,271
+1,1,299~1,3,299
+1,5,180~1,6,180
+8,6,2~8,6,4
+9,2,8~9,4,8
+8,1,44~8,3,44
+6,7,35~8,7,35
+3,1,234~3,2,234
+4,1,38~4,4,38
+8,6,16~9,6,16
+4,8,29~6,8,29
+1,2,25~2,2,25
+6,2,291~6,2,292
+7,9,230~9,9,230
+4,4,144~4,7,144
+7,7,261~9,7,261
+4,7,149~4,9,149
+0,8,246~2,8,246
+2,4,91~2,6,91
+6,7,15~8,7,15
+3,6,99~3,6,101
+5,2,214~8,2,214
+2,7,221~2,9,221
+4,8,284~6,8,284
+6,2,100~8,2,100
+1,6,196~4,6,196
+4,4,224~7,4,224
+2,5,63~2,5,65
+6,5,111~6,7,111
+1,7,86~1,9,86
+0,5,95~3,5,95
+0,4,309~3,4,309
+1,5,152~4,5,152
+1,5,96~3,5,96
+5,0,46~7,0,46
+1,5,312~1,7,312
+9,5,57~9,8,57
+0,2,158~0,4,158
+6,4,12~9,4,12
+3,9,209~5,9,209
+2,8,210~4,8,210
+2,2,226~2,4,226
+2,7,285~5,7,285
+3,5,138~3,5,141
+6,3,174~7,3,174
+3,5,221~5,5,221
+6,4,110~6,7,110
+6,1,113~7,1,113
+3,6,268~3,7,268
+7,5,225~7,7,225
+7,7,227~7,9,227
+9,2,117~9,4,117
+8,1,161~8,3,161
+9,2,50~9,3,50
+3,6,86~7,6,86
+2,6,240~2,7,240
+7,1,51~7,4,51
+4,0,25~4,2,25
+2,6,152~5,6,152
+8,3,42~8,6,42
+5,0,59~5,0,62
+2,6,81~5,6,81
+2,5,217~2,6,217
+6,0,44~6,3,44
+0,0,145~0,1,145
+6,4,221~6,6,221
+6,5,62~9,5,62
+5,1,169~5,3,169
+4,1,35~4,3,35
+5,8,232~7,8,232
+4,2,46~6,2,46
+3,6,157~6,6,157
+3,3,82~3,4,82
+3,3,254~3,5,254
+2,6,132~2,8,132
+0,6,200~2,6,200
+7,1,186~7,2,186
+9,4,10~9,6,10
+0,1,10~0,3,10
+1,3,70~4,3,70
+9,6,262~9,8,262
+3,4,21~3,6,21
+7,3,129~9,3,129
+7,0,258~9,0,258
+6,5,272~7,5,272
+9,2,115~9,4,115
+7,0,274~7,3,274
+6,1,286~8,1,286
+5,9,233~7,9,233
+2,4,191~2,6,191
+0,5,24~0,8,24
+9,3,195~9,4,195
+6,2,255~8,2,255
+2,4,11~4,4,11
+9,8,141~9,8,143
+3,5,183~5,5,183
+4,5,250~4,6,250
+1,4,56~4,4,56
+6,1,298~6,4,298
+0,2,1~4,2,1
+3,1,91~3,4,91
+2,3,260~4,3,260
+2,7,107~5,7,107
+4,3,127~4,3,127
+3,7,194~5,7,194
+4,1,7~6,1,7
+5,1,3~5,4,3
+6,9,297~8,9,297
+3,5,198~6,5,198
+6,7,175~9,7,175
+3,2,150~6,2,150
+0,9,95~3,9,95
+5,4,229~6,4,229
+4,8,6~4,8,7
+4,1,165~5,1,165
+6,7,132~9,7,132
+0,5,275~1,5,275
+5,3,265~5,6,265
+1,2,205~1,4,205
+7,5,19~9,5,19
+7,2,245~7,2,245
+3,5,4~3,7,4
+7,5,5~7,6,5
+1,1,275~3,1,275
+3,0,96~5,0,96
+5,5,119~8,5,119
+4,7,4~4,7,7
+9,4,103~9,5,103
+3,4,54~3,5,54
+1,6,160~3,6,160
+9,0,112~9,2,112
+4,6,201~4,6,204
+0,6,53~0,6,55
+7,3,193~7,5,193
+7,7,278~7,8,278
+2,4,299~2,6,299
+2,3,109~2,4,109
+0,6,285~0,9,285
+3,1,133~5,1,133
+1,8,171~1,8,174
+3,5,273~3,8,273
+3,9,304~4,9,304
+6,1,280~9,1,280
+4,2,293~5,2,293
+7,2,292~7,2,295
+9,6,190~9,8,190
+2,5,155~3,5,155
+9,1,193~9,3,193
+0,2,168~2,2,168
+9,4,239~9,7,239
+2,0,291~2,2,291
+3,8,135~5,8,135
+0,9,288~2,9,288
+6,0,49~8,0,49
+6,1,39~6,4,39
+6,7,25~6,9,25
+3,4,29~5,4,29
+4,0,151~5,0,151
+2,4,89~2,7,89
+7,6,187~9,6,187
+8,3,112~8,3,113
+3,7,202~5,7,202
+0,6,277~0,6,279
+6,6,138~8,6,138
+7,8,74~7,9,74
+1,0,239~1,3,239
+0,3,139~3,3,139
+9,7,71~9,9,71
+9,0,168~9,2,168
+4,3,124~4,6,124
+9,6,263~9,9,263
+6,8,64~6,9,64
+4,2,12~4,4,12
+7,0,114~7,2,114
+6,5,202~6,7,202
+0,0,273~0,2,273
+5,0,6~8,0,6
+7,4,269~8,4,269
+4,9,66~7,9,66
+2,6,100~2,9,100
+4,1,210~7,1,210
+8,6,259~8,9,259
+7,7,197~9,7,197
+3,9,254~5,9,254
+2,4,35~2,7,35
+2,2,196~2,2,199
+7,1,185~7,4,185
+3,6,97~3,8,97
+3,1,39~3,3,39
+2,2,167~2,5,167
+3,3,149~3,6,149
+3,7,166~4,7,166
+5,2,212~8,2,212
+3,6,9~4,6,9
+3,4,46~3,7,46
+1,6,106~1,7,106
+7,4,172~7,7,172
+6,4,34~6,7,34
+6,0,277~8,0,277
+3,6,35~6,6,35
+2,8,173~3,8,173
+5,9,304~6,9,304
+7,6,8~7,7,8
+6,3,155~6,4,155
+2,9,43~4,9,43
+3,4,214~5,4,214
+2,2,208~2,4,208
+7,6,271~7,9,271
+8,0,217~8,1,217
+2,4,218~5,4,218
+2,1,10~4,1,10
+0,5,238~3,5,238
+3,6,24~5,6,24
+6,1,289~8,1,289
+8,6,194~8,9,194
+3,3,137~3,5,137
+6,0,269~6,2,269
+0,4,135~2,4,135
+8,7,225~8,9,225
+8,6,77~8,7,77
+6,8,181~6,9,181
+6,3,161~6,5,161
+8,0,164~8,0,165
+6,8,299~8,8,299
+1,7,129~3,7,129
+6,5,270~6,9,270
+7,8,61~9,8,61
+4,0,8~6,0,8
+6,6,299~8,6,299
+4,0,49~4,2,49
+0,6,45~0,7,45
+3,7,110~3,7,112
+0,7,113~3,7,113
+8,3,306~8,3,307
+4,5,29~5,5,29
+4,6,45~4,6,48
+3,4,261~3,6,261
+6,4,166~8,4,166
+7,7,62~9,7,62
+6,4,100~6,6,100
+7,8,106~8,8,106
+5,3,298~5,3,300
+5,5,21~8,5,21
+1,1,72~2,1,72
+3,4,177~3,5,177
+7,5,265~7,5,265
+6,1,238~8,1,238
+9,0,195~9,1,195
+7,5,263~7,7,263
+6,6,122~6,8,122
+6,4,248~8,4,248
+5,5,32~7,5,32
+3,9,258~3,9,261
+8,3,271~8,4,271
+1,0,293~5,0,293
+3,4,26~3,5,26
+2,4,243~2,6,243
+0,2,58~2,2,58
+2,1,155~5,1,155
+3,0,278~6,0,278
+5,3,142~8,3,142
+1,2,176~1,4,176
+5,6,55~5,7,55
+9,5,13~9,8,13
+4,8,213~4,9,213
+6,5,63~6,8,63
+4,6,288~4,8,288
+8,2,110~8,3,110
+1,9,37~3,9,37
+4,8,269~4,8,271
+3,9,255~4,9,255
+1,7,34~1,9,34
+5,8,304~6,8,304
+1,6,309~3,6,309
+0,4,37~0,5,37
+6,7,137~8,7,137
+3,6,88~3,8,88
+5,3,158~8,3,158
+2,1,110~4,1,110
+5,4,227~5,8,227
+9,3,54~9,5,54
+6,2,142~8,2,142
+0,7,282~0,9,282
+8,1,146~8,2,146
+7,7,48~8,7,48
+1,1,114~4,1,114
+4,9,3~6,9,3
+8,7,294~8,9,294
+4,8,153~4,9,153
+4,0,176~4,2,176
+2,8,40~3,8,40
+6,3,295~6,6,295
+7,1,28~9,1,28
+5,8,185~7,8,185
+2,1,264~2,3,264
+5,1,104~5,4,104
+2,7,244~2,9,244
+6,5,234~6,7,234
+9,1,32~9,2,32
+9,4,27~9,6,27
+3,2,28~5,2,28
+4,5,164~4,7,164
+4,1,75~4,3,75
+7,3,135~7,5,135
+7,3,277~7,3,280
+0,1,12~0,1,13
+0,0,266~0,3,266
+3,7,200~4,7,200
+6,2,271~6,4,271
+3,9,50~6,9,50
+9,4,104~9,6,104
+1,1,271~1,3,271
+7,8,72~7,9,72
+9,1,225~9,3,225
+1,7,274~1,7,276
+4,1,260~6,1,260
+4,1,178~4,1,180
+2,9,94~4,9,94
+4,6,306~4,8,306
+4,3,18~4,4,18
+7,3,128~7,4,128
+2,8,36~2,8,37
+2,2,215~5,2,215
+6,8,302~8,8,302
+6,7,272~7,7,272
+2,3,65~3,3,65
+4,1,238~4,3,238
+3,0,257~5,0,257
+1,7,123~4,7,123
+9,3,75~9,3,77
+0,8,187~1,8,187
+1,5,24~3,5,24
+1,9,39~3,9,39
+4,0,149~4,4,149
+8,5,269~8,6,269
+0,6,188~0,8,188
+4,7,34~4,7,36
+3,5,253~5,5,253
+7,6,14~7,8,14
+5,4,145~5,7,145
+6,8,296~9,8,296
+0,4,141~0,7,141
+7,7,16~7,7,18
+0,9,47~2,9,47
+9,3,171~9,4,171
+5,6,239~5,8,239
+3,5,257~4,5,257
+3,7,25~4,7,25
+3,6,310~3,6,312
+1,3,229~3,3,229
+7,1,166~9,1,166
+8,4,268~8,5,268
+9,6,107~9,6,109
+0,5,35~1,5,35
+5,1,59~7,1,59
+2,4,15~5,4,15
+3,1,45~6,1,45
+8,0,300~8,2,300
+2,7,24~2,9,24
+2,1,248~2,1,250
+8,2,246~8,4,246
+7,4,120~7,6,120
+6,6,179~6,6,181
+0,6,229~1,6,229
+3,3,80~5,3,80
+7,0,193~7,1,193
+9,6,79~9,6,82
+7,3,38~7,5,38
+4,1,58~4,1,60
+8,5,224~8,8,224
+7,7,28~7,8,28
+8,0,160~8,0,163
+4,4,57~4,4,59
+6,3,115~6,5,115
+0,5,178~0,5,180
+8,4,8~8,7,8
+0,8,107~2,8,107
+4,7,140~6,7,140
+7,5,177~7,8,177
+3,2,87~3,3,87
+8,8,64~8,8,68
+4,6,279~4,7,279
+6,1,61~8,1,61
+6,1,216~7,1,216
+7,5,10~7,6,10
+8,6,142~8,9,142
+5,3,8~8,3,8
+8,3,300~8,5,300
+0,7,131~3,7,131
+3,7,74~6,7,74
+1,4,306~3,4,306
+7,1,283~7,3,283
+2,4,18~3,4,18
+4,5,148~5,5,148
+8,7,128~8,7,130
+6,9,48~9,9,48
+3,1,220~5,1,220
+9,7,135~9,9,135
+5,6,168~6,6,168
+1,7,26~4,7,26
+1,4,264~1,4,266
+4,6,213~4,6,214
+2,4,234~4,4,234
+0,9,88~2,9,88
+0,3,33~0,5,33
+7,0,269~7,3,269
+5,8,104~7,8,104
+6,0,151~6,3,151
+0,5,175~2,5,175
+2,1,117~3,1,117
+2,2,22~4,2,22
+2,4,105~2,6,105
+9,1,287~9,3,287
+6,3,169~8,3,169
+0,6,103~2,6,103
+0,5,85~2,5,85
+1,2,26~1,4,26
+6,9,72~6,9,72
+6,5,220~8,5,220
+3,5,102~3,5,104
+2,5,77~4,5,77
+7,8,50~9,8,50
+2,7,205~2,9,205
+6,5,114~8,5,114
+9,5,124~9,5,125
+0,5,276~0,7,276
+4,0,170~5,0,170
+5,8,230~6,8,230
+5,1,214~8,1,214
+5,7,240~5,7,242
+4,5,121~4,7,121
+2,5,60~2,6,60
+0,3,296~2,3,296
+6,5,96~9,5,96
+5,1,242~5,3,242
+3,7,56~3,7,58
+2,6,43~2,8,43
+1,5,48~3,5,48
+0,3,231~2,3,231
+0,2,4~2,2,4
+2,1,89~4,1,89
+0,0,208~0,3,208
+6,2,116~6,3,116
+1,2,206~1,5,206
+2,3,232~2,6,232
+7,6,230~7,7,230
+0,5,205~0,5,207
+1,7,189~1,9,189
+4,8,211~7,8,211
+5,5,228~5,5,229
+1,6,98~1,6,99
+6,4,94~6,6,94
+2,1,86~5,1,86
+4,5,82~4,7,82
+3,4,222~5,4,222
+8,1,235~9,1,235
+8,5,285~8,8,285
+1,3,300~1,6,300
+8,2,103~8,2,106
+7,4,50~7,6,50
+9,0,261~9,2,261
+3,5,242~6,5,242
+2,8,26~2,9,26
+3,2,232~6,2,232
+6,5,64~8,5,64
+0,8,3~0,9,3
+4,5,295~4,7,295
+6,8,54~9,8,54
+0,4,303~2,4,303
+2,8,91~4,8,91
+9,8,290~9,8,290
+2,6,251~2,7,251
+5,5,225~5,6,225
+7,0,252~7,3,252
+0,6,42~0,7,42
+0,4,221~3,4,221
+2,1,272~2,3,272
+7,0,231~7,2,231
+4,1,213~4,3,213
+7,5,229~7,6,229
+2,3,108~2,4,108
+5,8,155~7,8,155
+2,6,38~2,7,38
+3,8,304~4,8,304
+6,1,300~6,2,300
+8,7,37~8,9,37
+3,3,46~5,3,46
+5,7,133~8,7,133
+3,4,217~4,4,217
+9,1,72~9,3,72
+8,8,266~8,8,266
+6,4,50~6,6,50
+5,0,209~5,3,209
+9,4,66~9,6,66
+7,8,53~9,8,53
+1,3,95~3,3,95
+6,1,119~6,4,119
+6,3,225~7,3,225
+9,7,65~9,8,65
+2,6,6~4,6,6
+2,1,273~2,1,273
+4,2,42~4,4,42
+9,5,305~9,7,305
+8,2,215~9,2,215
+4,4,176~6,4,176
+2,0,220~5,0,220
+3,9,301~7,9,301
+0,6,267~2,6,267
+3,0,54~3,1,54
+3,6,274~3,8,274
+6,4,175~6,5,175
+4,7,133~4,9,133
+6,3,32~9,3,32
+2,1,188~2,4,188
+2,1,11~3,1,11
+5,1,302~6,1,302
+6,7,283~7,7,283
+4,3,106~4,5,106
+5,6,288~5,7,288
+7,1,1~8,1,1
+7,0,68~8,0,68
+8,3,256~8,6,256
+2,3,96~2,3,99
+3,6,253~3,9,253
+4,1,270~6,1,270
+9,0,11~9,2,11
+2,1,173~2,2,173
+8,0,311~8,3,311
+5,6,312~5,7,312
+2,5,174~4,5,174
+1,7,263~2,7,263
+6,8,126~8,8,126
+3,4,152~6,4,152
+6,0,153~9,0,153
+4,0,157~4,3,157
+3,5,23~3,7,23
+1,9,210~4,9,210
+5,6,48~5,8,48
+1,2,185~1,4,185
+0,1,319~2,1,319
+5,0,256~9,0,256
+2,6,176~5,6,176
+0,3,22~0,4,22
+1,0,286~1,2,286
+3,7,299~3,7,301
+7,5,136~9,5,136
+4,1,81~4,3,81
+7,8,99~9,8,99
+5,2,235~6,2,235
+1,5,314~1,5,317
+1,7,191~3,7,191
+3,7,51~6,7,51
+5,3,282~7,3,282
+7,4,89~7,6,89
+5,5,73~7,5,73
+2,2,262~2,4,262
+7,2,302~7,3,302
+3,5,301~4,5,301
+9,8,137~9,9,137
+6,2,64~8,2,64
+0,7,89~1,7,89
+3,6,198~5,6,198
+0,1,316~1,1,316
+2,8,136~3,8,136
+5,2,54~7,2,54
+8,5,98~8,8,98
+0,5,79~2,5,79
+3,5,31~4,5,31
+1,1,301~1,2,301
+7,0,303~7,2,303
+0,1,170~0,2,170
+0,0,118~1,0,118
+3,6,200~6,6,200
+2,9,101~2,9,103
+3,5,248~5,5,248
+0,4,60~1,4,60
+0,2,261~0,5,261
+7,7,282~7,9,282
+7,0,137~7,3,137
+5,8,35~7,8,35
+3,3,296~3,4,296
+3,1,64~5,1,64
+0,5,264~0,6,264
+7,0,62~7,2,62
+7,4,300~7,6,300
+0,6,22~0,7,22
+7,9,77~9,9,77
+3,3,171~3,5,171
+7,9,265~9,9,265
+0,8,217~1,8,217
+7,6,181~8,6,181
+6,2,109~9,2,109
+2,0,7~2,2,7
+8,3,47~8,6,47
+2,0,210~5,0,210
+0,5,271~0,5,273
+3,5,232~3,6,232
+5,6,146~5,8,146
+7,3,312~7,3,314
+8,3,36~8,6,36
+1,7,12~4,7,12
+9,7,1~9,9,1
+3,5,99~3,5,101
+4,0,286~4,3,286
+1,1,131~1,4,131
+1,4,24~3,4,24
+6,5,302~7,5,302
+8,3,252~8,3,254
+1,0,292~2,0,292
+0,3,64~3,3,64
+3,0,26~5,0,26
+1,7,16~1,7,18
+4,8,157~8,8,157
+7,4,174~7,6,174
+8,8,56~9,8,56
+6,6,260~8,6,260
+1,9,190~3,9,190
+0,6,18~2,6,18
+1,3,74~1,6,74
+3,7,323~5,7,323
+1,4,134~4,4,134
+5,6,230~5,6,232
+1,8,156~3,8,156
+3,6,238~5,6,238
+9,4,21~9,5,21
+1,7,260~3,7,260
+5,3,164~5,6,164
+4,4,277~4,7,277
+5,4,182~7,4,182
+3,6,96~3,7,96
+2,5,68~2,7,68
+8,2,123~8,4,123
+1,3,236~1,5,236
+7,0,110~7,2,110
+0,9,228~3,9,228
+1,6,159~3,6,159
+8,3,194~8,5,194
+1,0,74~1,2,74
+4,0,281~7,0,281
+2,2,15~3,2,15
+6,6,31~6,8,31
+5,2,227~8,2,227
+9,4,64~9,6,64
+3,0,51~4,0,51
+7,6,47~7,9,47
+9,3,239~9,3,240
+2,2,193~2,4,193
+2,8,79~4,8,79
+3,3,62~3,4,62
+5,1,234~9,1,234
+0,8,207~2,8,207
+8,2,116~9,2,116
+8,2,120~9,2,120
+1,0,213~3,0,213
+4,6,151~4,9,151
+4,1,265~7,1,265
+8,2,193~8,5,193
+1,5,15~1,8,15
+8,4,275~8,5,275
+7,2,47~9,2,47
+0,3,8~0,6,8
+6,8,124~8,8,124
+2,3,233~3,3,233
+3,6,162~5,6,162
+5,8,178~8,8,178
+1,6,248~1,9,248
+3,3,267~3,5,267
+9,5,60~9,5,61
+4,0,123~4,1,123
+3,2,190~6,2,190
+1,1,243~1,2,243
+1,3,129~4,3,129
+9,1,167~9,4,167
+2,6,206~2,8,206
+1,0,117~1,3,117
+9,1,10~9,2,10
+6,6,176~7,6,176
+1,5,215~2,5,215
+4,4,73~4,6,73
+8,5,6~8,7,6
+6,5,327~6,8,327
+1,4,175~4,4,175
+1,1,226~1,4,226
+1,5,71~4,5,71
+2,6,33~2,9,33
+7,2,27~7,3,27
+9,1,52~9,4,52
+0,6,50~0,8,50
+5,3,311~7,3,311
+7,3,5~7,3,7
+0,2,138~0,4,138
+2,6,9~2,8,9
+3,4,49~6,4,49
+2,5,59~4,5,59
+2,7,147~4,7,147
+1,3,92~1,5,92
+7,6,286~7,9,286
+2,5,197~2,6,197
+5,1,136~5,3,136
+3,0,93~3,1,93
+1,7,44~1,9,44
+7,9,31~7,9,33
+3,4,229~3,6,229
+5,4,249~7,4,249
+3,9,178~4,9,178
+0,1,281~0,2,281
+6,3,288~6,5,288
+1,4,33~2,4,33
+0,0,263~4,0,263
+3,5,142~6,5,142
+4,1,77~4,4,77
+0,4,144~0,6,144
+2,1,172~2,2,172
+3,0,113~6,0,113
+3,9,41~6,9,41
+5,6,142~5,9,142
+0,0,276~0,2,276
+5,9,1~8,9,1
+8,6,279~8,9,279
+0,6,170~0,7,170
+9,4,292~9,7,292
+2,2,57~2,5,57
+6,3,11~6,5,11
+0,2,5~0,4,5
+2,4,31~2,6,31
+2,6,80~2,8,80
+2,3,183~2,5,183
+3,3,169~3,6,169
+4,3,125~7,3,125
+2,1,271~4,1,271
+4,0,163~4,2,163
+5,5,186~7,5,186
+4,0,54~4,2,54
+1,5,186~1,8,186
+1,6,95~4,6,95
+1,4,269~3,4,269
+0,7,116~0,9,116
+6,0,283~8,0,283
+3,4,300~3,6,300
+1,2,287~1,2,288
+9,4,139~9,5,139
+9,4,307~9,6,307
+9,7,287~9,8,287
+4,7,33~6,7,33
+2,7,241~2,8,241
+1,9,27~3,9,27
+5,3,102~7,3,102
+4,6,131~4,7,131
+4,0,83~4,3,83
+4,9,27~6,9,27
+6,7,289~9,7,289
+2,3,283~5,3,283
+0,8,11~2,8,11
+2,5,76~2,8,76
+4,6,92~4,9,92
+7,7,142~7,7,144
+2,5,125~2,8,125
+5,9,5~6,9,5
+2,1,65~5,1,65
+5,2,289~8,2,289
+3,7,176~3,9,176
+9,0,282~9,0,284
+8,1,35~8,4,35
+2,1,71~4,1,71
+2,7,2~2,8,2
+5,4,179~5,6,179
+5,9,2~8,9,2
+1,1,246~4,1,246
+5,8,235~7,8,235
+5,8,310~7,8,310
+7,2,1~7,2,1
+2,0,114~6,0,114
+4,3,146~4,5,146
+5,5,170~7,5,170
+1,8,168~3,8,168
+9,7,24~9,9,24
+0,2,60~0,2,62
+0,1,33~0,2,33
+8,9,145~8,9,147
+0,2,304~0,4,304
+2,7,276~2,7,277
+1,5,28~3,5,28
+0,1,267~0,3,267
+3,4,227~4,4,227
+3,0,320~6,0,320
+7,2,246~7,2,249
+3,0,53~5,0,53
+2,1,152~4,1,152
+4,5,129~6,5,129
+4,0,183~4,1,183
+9,6,20~9,9,20
+3,1,68~6,1,68
+7,8,236~7,8,239
+5,8,102~7,8,102
+2,6,237~5,6,237
+1,9,223~3,9,223
+4,3,171~5,3,171
+5,7,324~8,7,324
+0,7,117~0,7,118
+6,8,2~8,8,2
+9,1,54~9,2,54
+8,6,178~8,7,178
+8,6,59~8,8,59
+6,4,185~6,4,185
+1,9,206~3,9,206
+0,5,216~3,5,216
+3,3,85~3,6,85
+5,7,91~8,7,91
+5,2,43~5,4,43
+6,1,189~8,1,189
+1,7,247~4,7,247
+8,8,58~8,9,58
+3,0,161~3,2,161
+4,2,139~6,2,139
+5,1,48~5,1,51
+6,8,280~7,8,280
+5,2,230~8,2,230
+4,0,72~4,2,72
+0,0,279~0,2,279
+2,5,259~4,5,259
+6,0,260~9,0,260
+7,7,136~8,7,136
+9,4,266~9,6,266
+0,7,212~0,9,212
+4,4,17~7,4,17
+2,0,310~2,3,310
+6,3,249~8,3,249
+8,6,302~9,6,302
+6,9,29~8,9,29
+7,2,192~9,2,192
+0,4,39~0,6,39
+6,8,276~8,8,276
+3,6,154~3,8,154
+2,0,169~5,0,169
+1,2,303~1,3,303
+5,7,27~5,7,29
+6,2,224~6,3,224
+7,8,179~8,8,179
+3,2,12~3,5,12
+7,9,35~9,9,35
+3,2,289~4,2,289
+5,9,160~8,9,160
+4,1,4~5,1,4
+3,3,68~5,3,68
+3,1,209~3,4,209
+2,6,294~2,7,294
+3,7,256~4,7,256
+0,8,83~1,8,83
+8,7,273~8,9,273
+1,7,31~1,9,31
+4,3,294~4,5,294
+7,7,304~7,9,304
+3,1,240~5,1,240
+7,1,2~8,1,2
+2,8,170~2,8,172
+0,5,106~0,7,106
+1,5,82~1,8,82
+3,3,293~6,3,293
+7,1,50~7,2,50
+6,8,293~9,8,293
+2,9,67~4,9,67
+0,0,271~0,3,271
+2,8,102~2,8,103
+3,2,189~3,3,189
+6,7,76~8,7,76
+6,6,39~8,6,39
+7,3,54~7,4,54
+4,6,282~4,7,282
+7,4,273~9,4,273
+5,4,267~8,4,267
+7,2,296~7,2,297
+5,2,109~5,4,109
+0,2,12~0,3,12
+3,3,206~6,3,206
+3,1,121~7,1,121
+4,6,309~4,9,309
+3,8,297~6,8,297
+3,7,297~5,7,297
+2,6,174~6,6,174
+4,6,252~6,6,252
+0,2,25~0,4,25
+7,5,268~7,8,268
+6,1,171~6,3,171
+2,5,242~2,6,242
+5,5,47~5,7,47
+3,7,258~5,7,258
+5,6,30~8,6,30
+9,7,200~9,7,200
+6,3,223~9,3,223
+4,5,132~7,5,132
+1,6,291~3,6,291
+0,2,206~0,3,206
+4,6,263~6,6,263
+8,0,310~8,3,310
+5,8,16~8,8,16
+8,9,39~9,9,39
+8,0,26~8,3,26
+8,8,38~8,8,40
+6,8,214~6,9,214
+0,2,155~2,2,155
+5,9,31~6,9,31
+4,3,105~7,3,105
+0,5,114~0,7,114
+8,3,23~8,5,23
+6,8,263~7,8,263
+0,7,90~2,7,90
+4,0,292~4,2,292
+3,0,164~3,1,164
+8,3,312~8,3,312
+1,1,247~1,2,247
+5,0,110~5,2,110
+2,1,134~4,1,134
+1,2,140~1,4,140
+5,7,230~6,7,230
+0,7,31~0,8,31
+9,3,135~9,5,135
+7,0,194~9,0,194
+1,7,283~1,9,283
+0,4,233~2,4,233
+2,2,318~5,2,318
+2,6,296~3,6,296
+7,7,61~8,7,61
+0,8,211~3,8,211
+3,8,299~3,8,301
+3,3,284~5,3,284
+1,3,2~2,3,2
+0,7,318~3,7,318
+4,1,274~4,2,274
+0,3,312~2,3,312
+0,9,307~3,9,307
+6,7,125~9,7,125
+3,2,212~3,4,212
+3,4,320~3,7,320
+7,3,167~7,5,167
+7,5,65~9,5,65
+5,4,263~6,4,263
+6,0,59~6,0,62
+4,2,51~4,2,51
+4,1,32~4,3,32
+1,1,1~1,1,2
+7,1,165~7,5,165
+6,1,69~9,1,69
+1,1,208~1,3,208
+0,1,6~0,4,6
+0,5,166~3,5,166
+1,5,167~1,8,167
+6,2,51~6,4,51
+9,2,227~9,2,229
+3,2,81~3,4,81
+2,8,276~3,8,276
+4,0,56~6,0,56
+7,1,72~7,1,75
+6,5,163~6,6,163
+4,9,155~5,9,155
+5,3,34~7,3,34
+9,4,193~9,7,193
+4,3,167~5,3,167
+6,9,69~9,9,69
+2,2,169~2,4,169
+3,8,36~5,8,36
+6,3,109~6,5,109
+3,9,230~5,9,230
+3,4,9~6,4,9
+0,7,210~0,9,210
+8,6,189~8,6,191
+3,8,265~6,8,265
+0,2,313~0,5,313
+1,4,77~1,6,77
+7,8,261~9,8,261
+1,2,183~1,5,183
+1,7,21~2,7,21
+9,9,178~9,9,181
+0,7,169~1,7,169
+9,4,242~9,6,242
+1,5,212~3,5,212
+3,2,258~3,5,258
+6,2,285~6,5,285
+5,6,272~6,6,272
+7,5,57~7,8,57
+9,1,245~9,4,245
+3,7,39~5,7,39
+6,4,118~6,6,118
+5,5,89~5,7,89
+1,4,171~1,7,171
+6,3,50~8,3,50
+5,3,4~5,4,4
+3,7,177~4,7,177
+8,0,298~8,3,298
+5,4,266~5,6,266
+3,2,135~3,4,135
+9,7,27~9,7,27
+4,3,27~4,5,27
+6,0,241~6,2,241
+4,4,226~6,4,226
+0,7,195~1,7,195
+2,4,223~3,4,223
+2,6,220~2,7,220
+6,0,282~8,0,282
+2,0,295~2,2,295
+0,7,144~0,8,144
+6,1,258~6,3,258
+3,7,3~5,7,3
+0,5,147~0,5,149
+1,1,302~3,1,302
+0,0,87~3,0,87
+7,1,31~9,1,31
+0,4,209~0,6,209
+1,7,262~1,9,262
+4,2,235~4,4,235
+2,1,293~2,5,293
+3,5,73~3,7,73
+6,7,291~7,7,291
+4,2,65~4,4,65
+6,3,74~6,5,74
+9,1,238~9,4,238
+5,3,187~7,3,187
+5,5,92~8,5,92
+4,1,107~7,1,107
+5,1,105~7,1,105
+7,8,284~9,8,284
+7,1,307~7,3,307
+4,4,300~5,4,300
+5,6,166~7,6,166
+0,8,267~3,8,267
+2,4,288~4,4,288
+3,0,156~3,2,156
+5,3,112~5,5,112
+3,2,86~5,2,86
+9,5,22~9,7,22
+8,0,62~8,3,62
+2,4,296~2,5,296
+2,4,298~4,4,298
+5,6,144~7,6,144
+3,3,192~3,5,192
+3,8,32~6,8,32
+7,1,240~7,4,240
+5,6,122~5,7,122
+7,0,65~9,0,65
+2,6,211~4,6,211
+5,5,26~7,5,26
+5,4,52~5,7,52
+7,7,307~7,9,307
+4,5,297~4,5,299
+2,0,312~2,2,312
+7,6,76~9,6,76
+3,3,154~4,3,154
+7,1,288~7,4,288
+1,4,51~3,4,51
+5,3,36~7,3,36
+0,5,265~0,7,265
+1,6,315~1,8,315
+0,9,6~2,9,6
+6,1,172~8,1,172
+7,0,116~7,0,119
+5,2,174~6,2,174
+5,5,317~5,5,317
+9,1,282~9,1,284
+3,6,53~3,8,53
+1,8,139~3,8,139
+1,1,37~1,3,37
+3,7,76~5,7,76
+6,2,217~6,5,217
+8,7,18~9,7,18
+4,5,180~7,5,180
+4,3,41~6,3,41
+7,2,12~9,2,12
+5,0,215~6,0,215
+9,2,199~9,2,202
+3,5,29~3,7,29
+3,2,5~5,2,5
+0,0,10~2,0,10
+7,6,139~8,6,139
+6,1,279~9,1,279
+5,3,31~6,3,31
+0,8,287~0,8,289
+6,5,222~8,5,222
+5,4,55~5,4,57
+1,9,246~2,9,246
+4,2,21~6,2,21
+3,0,317~4,0,317
+3,0,260~4,0,260
+8,7,264~8,9,264
+2,8,212~2,8,214
+1,8,81~2,8,81
+2,9,265~2,9,267
+3,3,126~5,3,126
+0,0,120~1,0,120
+8,1,70~8,1,70
+5,2,295~5,5,295
+3,3,48~4,3,48
+0,5,27~2,5,27
+9,7,196~9,8,196
+1,7,194~1,9,194
+5,7,309~8,7,309
+2,6,203~2,8,203
+1,4,57~1,6,57
+0,3,172~2,3,172
+6,4,70~6,7,70
+5,3,286~5,5,286
+6,6,73~8,6,73
+6,8,3~6,8,3
+5,6,278~5,7,278
+9,3,170~9,5,170
+5,7,26~7,7,26
+9,4,244~9,7,244
+1,3,298~1,5,298
+8,7,198~8,7,198
+2,5,181~2,7,181
+3,6,263~3,6,265
+1,0,283~4,0,283
+6,1,173~6,3,173
+0,0,270~0,3,270
+1,0,264~2,0,264
+3,4,16~3,5,16
+4,8,152~6,8,152
+3,0,130~3,3,130
+6,4,163~8,4,163
+3,9,101~5,9,101
+3,2,2~3,5,2
+2,5,272~2,7,272
+2,3,308~2,6,308
+3,8,51~5,8,51
+7,1,190~9,1,190
+7,0,299~7,2,299
+2,2,153~2,3,153
+4,8,4~4,9,4
+4,5,25~6,5,25
+2,0,318~2,0,318
+6,4,13~8,4,13
+6,3,232~6,5,232
+5,7,141~7,7,141
+4,7,267~4,8,267
+7,7,65~8,7,65
+4,8,198~4,8,200
+5,0,235~5,1,235
+7,5,16~7,6,16
+3,6,222~6,6,222
+3,5,144~3,5,146
+6,0,2~6,0,4
+9,3,130~9,3,132
+1,0,86~1,3,86
+0,7,127~2,7,127
+5,9,182~7,9,182
+1,3,29~3,3,29
+7,5,184~7,7,184
+3,4,260~3,6,260
+7,2,190~7,4,190
+2,0,176~3,0,176
+8,2,143~8,3,143
+0,2,28~0,4,28
+0,8,32~0,9,32
+1,6,290~4,6,290
+6,8,28~6,9,28
+5,6,58~5,7,58
+3,5,197~5,5,197
+1,8,47~1,8,47
+5,0,224~5,0,224
+1,2,235~1,5,235
+6,6,227~7,6,227
+0,6,231~0,7,231
+2,1,315~2,3,315
+8,9,4~9,9,4
+2,0,266~5,0,266
+2,4,209~2,7,209
+7,3,308~7,6,308
+5,3,140~8,3,140
+9,0,14~9,0,16
+8,7,22~8,9,22
+5,6,97~7,6,97
+0,3,143~0,3,145
+3,5,165~3,7,165
+2,0,222~2,3,222
+4,0,165~7,0,165
+8,4,244~8,4,244
+4,6,134~6,6,134
+8,1,241~8,4,241
+1,3,30~4,3,30
+3,5,126~5,5,126
+8,0,156~8,0,159
+0,9,25~3,9,25
+4,1,218~6,1,218
+0,3,203~3,3,203
+0,8,89~0,9,89
+4,1,56~6,1,56
+1,2,85~4,2,85
+5,9,302~8,9,302
+7,4,26~9,4,26
+4,0,213~6,0,213
+5,0,117~5,0,119
+8,7,295~9,7,295
+6,4,27~6,6,27
+3,4,173~3,5,173
+0,3,173~0,4,173
+8,5,221~9,5,221
+6,4,24~6,7,24
+0,2,92~0,5,92
+1,8,105~3,8,105
+7,1,271~8,1,271
+6,7,268~6,9,268
+0,4,90~1,4,90
+6,5,171~6,7,171
+3,5,194~5,5,194
+3,1,160~5,1,160
+3,8,183~6,8,183
+2,6,22~5,6,22
+0,6,193~2,6,193
+6,3,306~6,4,306
+4,1,276~6,1,276
+5,5,204~5,7,204
+7,3,2~7,6,2
+4,6,120~6,6,120
+6,3,106~6,6,106
+9,8,136~9,9,136
+4,0,3~4,3,3
+5,6,6~5,8,6
+7,6,145~9,6,145
+2,2,273~2,2,274
+8,2,39~8,5,39
+9,0,281~9,2,281
+1,3,268~1,4,268
+1,9,51~3,9,51
+5,4,106~5,7,106
+6,8,282~6,9,282
+8,2,55~8,3,55
+9,3,246~9,5,246
+7,8,36~7,9,36
+9,5,295~9,5,297
+0,4,20~0,6,20
+0,7,29~2,7,29
+2,3,60~4,3,60
+0,6,232~0,9,232
+1,2,242~1,5,242
+9,2,122~9,5,122
+4,5,165~4,6,165
+1,9,263~3,9,263
+3,2,277~6,2,277
+8,3,175~8,5,175
+1,7,214~1,8,214
+6,6,66~6,6,68
+1,2,29~2,2,29
+5,0,295~8,0,295
+1,1,89~1,2,89
+6,3,304~8,3,304
+5,1,113~5,2,113
+6,6,297~6,7,297
+6,7,64~8,7,64
+2,0,285~2,0,288
+4,8,82~6,8,82
+5,6,140~7,6,140
+6,4,121~7,4,121
+6,3,25~9,3,25
+7,6,284~9,6,284
+3,5,33~5,5,33
+0,1,142~0,3,142
+4,3,28~5,3,28
+6,2,20~6,4,20
+2,8,46~2,9,46
+5,5,173~8,5,173
+5,8,159~5,9,159
+2,5,246~5,5,246
+5,1,70~5,1,70
+7,2,241~7,2,243
+2,1,113~2,2,113
+7,5,117~9,5,117
+3,6,235~5,6,235
+5,5,4~5,7,4
+8,6,31~8,8,31
+7,2,138~7,3,138
+5,6,290~5,7,290
+6,3,290~6,3,292
+5,1,266~7,1,266
+5,0,31~5,2,31
+8,7,20~8,8,20
+1,9,98~3,9,98
+7,7,46~8,7,46
+2,3,152~4,3,152
+0,2,176~0,5,176
+2,5,321~3,5,321
+7,0,213~7,1,213
+7,2,99~7,5,99
+2,2,235~3,2,235
+0,5,11~0,7,11
+9,8,139~9,9,139
+2,4,74~2,7,74
+1,3,186~3,3,186
+4,0,214~4,0,217
+0,4,203~2,4,203
+0,8,279~3,8,279
+7,6,294~9,6,294
+8,6,282~9,6,282
+8,2,258~8,5,258
+0,3,35~0,3,37
+7,2,57~8,2,57
+5,4,260~8,4,260
+1,1,261~1,4,261
+3,2,36~6,2,36
+1,3,34~3,3,34
+6,2,77~6,4,77
+7,7,270~9,7,270
+2,6,239~3,6,239
+4,6,239~4,7,239
+6,6,159~6,7,159
+1,8,282~3,8,282
+3,5,240~3,7,240
+3,0,4~5,0,4
+4,0,268~4,3,268
+3,3,45~5,3,45
+4,3,63~5,3,63
+5,3,220~8,3,220
+7,6,285~7,7,285
+3,0,279~5,0,279
+0,1,31~0,4,31
+1,6,226~1,9,226
+3,6,44~5,6,44
+3,2,97~3,4,97
+2,3,206~2,4,206
+5,7,99~8,7,99
+4,6,127~4,6,130
+1,6,178~3,6,178
+3,4,42~3,7,42
+5,3,314~5,6,314
+9,7,176~9,9,176
+1,0,5~1,1,5
+5,3,221~7,3,221
+0,8,41~3,8,41
+4,4,179~4,4,179
+2,1,109~4,1,109
+6,2,172~6,4,172
+0,8,208~2,8,208
+9,8,38~9,9,38
+3,7,124~3,8,124
+1,0,316~3,0,316
+9,1,134~9,4,134
+7,2,53~9,2,53
+7,1,30~9,1,30
+3,0,298~5,0,298
+1,0,214~1,2,214
+2,4,194~2,4,196
+6,9,298~8,9,298
+1,2,315~1,4,315
+9,2,196~9,3,196
+0,6,47~0,8,47
+8,1,49~8,2,49
+1,0,313~1,3,313
+3,1,294~3,3,294
+6,7,286~6,7,288
+8,0,35~8,0,37
+2,5,219~3,5,219
+2,9,35~4,9,35
+0,3,202~0,6,202
+0,4,269~0,6,269
+1,3,31~3,3,31
+1,1,264~1,1,266
+6,2,314~6,4,314
+4,5,289~6,5,289
+8,0,34~8,1,34
+6,4,7~9,4,7
+5,1,263~5,2,263
+2,1,62~4,1,62
+3,0,223~6,0,223
+4,3,189~6,3,189
+0,0,123~0,0,124
+4,0,168~6,0,168
+0,2,236~0,4,236
+1,3,224~2,3,224
+1,9,40~2,9,40
+3,3,264~3,5,264
+5,7,174~7,7,174
+2,7,250~3,7,250
+1,0,225~2,0,225
+1,3,168~2,3,168
+8,4,43~8,8,43
+4,1,168~4,2,168
+1,0,173~4,0,173
+6,4,5~7,4,5
+3,1,139~6,1,139
+1,8,3~2,8,3
+4,3,285~4,5,285
diff --git a/2023/_input/day_23.txt b/2023/_input/day_23.txt
new file mode 100644
index 0000000..c49da98
--- /dev/null
+++ b/2023/_input/day_23.txt
@@ -0,0 +1,142 @@
+#.###########################################################################################################################################
+#.........#...###.....#...#...###...#...#.....#.....#...#...###.......#...#...#...###.......###...#...#...#...#.....#####...........#...#...#
+#########.#.#.###.###.#.#.#.#.###.#.#.#.#.###.#.###.#.#.#.#.###.#####.#.#.#.#.#.#.###.#####.###.#.#.#.#.#.#.#.#.###.#####.#########.#.#.#.#.#
+#.........#.#.....#...#.#.#.#...#.#.#.#.#...#.#.#...#.#.#.#...#.....#.#.#.#.#...#...#.....#.....#.#.#.#.#.#.#.#.#...#.....#.........#.#.#.#.#
+#.#########.#######.###.#.#.###.#.#.#.#.###.#.#.#.###.#.#.###.#####.#.#.#.#.#######.#####.#######.#.#.#.#.#.#.#.#.###.#####.#########.#.#.#.#
+#.....#...#...#...#.###.#.#.#...#.#...#.....#.#.#...#.#.#.#...#.....#.#.#.#.....#...#...#...#.....#.#.#.#.#.#.#.#...#.....#...........#...#.#
+#####.#.#.###.#.#.#.###.#.#.#.###.###########.#.###.#.#.#.#.###.#####.#.#.#####.#.###.#.###.#.#####.#.#.#.#.#.#.###.#####.#################.#
+###...#.#...#...#.#.#...#...#...#.........#...#.#...#.#.#.#.###.....#.#.#...#...#...#.#.###.#...#...#.#.#...#...#...#...#.#.................#
+###.###.###.#####.#.#.#########.#########.#.###.#.###.#.#.#.#######.#.#.###.#.#####.#.#.###.###.#.###.#.#########.###.#.#.#.#################
+#...#...###...#...#...#.........#.......#.#...#.#...#.#.#.#.#...###.#...#...#.....#...#.>.>.#...#.#...#.#.........###.#...#...###...#.......#
+#.###.#######.#.#######.#########.#####.#.###.#.###.#.#.#.#.#.#.###.#####.#######.#######v###.###.#.###.#.###########.#######.###.#.#.#####.#
+#.....#...#...#.#.......#...#.....#.....#...#.#.#...#.#.#.#...#.#...#...#.#...###.......#...#...#.#.#...#...........#.......#...#.#.#.#.....#
+#######.#.#.###.#.#######.#.#.#####.#######.#.#.#.###.#.#.#####.#.###.#.#.#.#.#########.###.###.#.#.#.#############.#######.###.#.#.#.#.#####
+#.....#.#.#.....#.......#.#.#.....#.#...###.#...#...#.#.#.#...#.#.#...#.#.#.#...#.......#...###.#.#.#.#.............#...###...#...#...#.....#
+#.###.#.#.#############.#.#.#####.#.#.#.###.#######.#.#.#.#.#.#.#.#.###.#.#.###.#.#######.#####.#.#.#.#.#############.#.#####.#############.#
+#...#...#...#...#.....#.#.#.#.....#.#.#...#.....#...#.#.#.#.#...#...#...#.#.###.#.###...#.....#.#.#.#.#...#.>.>.###...#.#.....#.......#.....#
+###.#######.#.#.#.###.#.#.#.#.#####.#.###.#####.#.###.#.#.#.#########.###.#.###.#.###.#.#####.#.#.#.#.###.#.#v#.###.###.#.#####.#####.#.#####
+###.....#...#.#.#...#...#.#.#.....#.#.#...###...#.#...#.#.#...#.>.>...#...#...#.#.#...#.......#.#.#.#...#...#.#...#...#.#.....#.#...#...#...#
+#######.#.###.#.###v#####.#.#####.#.#.#.#####.###.#.###.#.###.#.#v#####.#####.#.#.#.###########.#.#.###.#####.###.###.#.#####.#.#.#.#####.#.#
+#.......#...#.#.###.>...#.#...#...#...#.>.>.#.#...#.#...#...#...#...###.....#.#...#...........#.#.#.....###...###...#.#...#...#...#.#.....#.#
+#.#########.#.#.###v###.#.###.#.#########v#.#.#.###.#.#####.#######.#######.#.###############.#.#.#########.#######.#.###.#.#######.#.#####.#
+#.........#...#...#...#.#.#...#.#.....#...#.#.#.#...#...#...###...#.......#...###.......#.....#.#.#.........#...###.#.#...#...#...#...#.....#
+#########.#######.###.#.#.#.###.#.###.#.###.#.#.#.#####.#.#####.#.#######.#######.#####.#.#####.#.#.#########.#.###.#.#.#####.#.#.#####.#####
+#.........#.....#.....#...#...#.#...#.#...#...#.#.....#.#.#.....#.#...#...###...#.....#.#...###...#...........#...#...#.......#.#.......#...#
+#.#########.###.#############.#.###.#.###.#####.#####.#.#.#.#####.#.#.#.#####.#.#####.#.###.#####################.#############.#########.#.#
+#.....#.....#...#.......#...#.#.#...#.....#.....#.....#.#.#.#...#...#...#.....#.###...#...#.....#.................#...#...#...#.........#.#.#
+#####.#.#####.###.#####.#.#.#.#.#.#########.#####.#####.#.#.#.#.#########.#####.###.#####.#####.#.#################.#.#.#.#.#.#########.#.#.#
+#.....#.#.....###...#...#.#.#.#.#.........#.....#...###...#...#.........#.....#.....#...#.......#...............###.#.#.#.#.#.#...#.....#.#.#
+#.#####.#v#########.#.###.#.#.#.#########.#####.###.###################.#####.#######.#.#######################.###.#.#.#.#.#.#.#.#v#####.#.#
+#.......#.>.#.....#.#...#.#.#...#...#...#.#.....#...#...#...#...........#.....#.....#.#.....#...................#...#...#.#.#.#.#.>.#.....#.#
+#########v#.#.###.#.###.#.#.#####.#.#.#.#.#.#####.###.#.#.#.#.###########.#####.###.#.#####.#.###################.#######.#.#.#.###v#.#####.#
+#.........#...#...#.#...#.#.###...#.#.#...#.......###.#...#.#.......#...#.....#.###...#...#.#...........#.......#.......#...#...###...#.....#
+#.#############.###.#.###.#.###.###.#.###############.#####.#######.#.#.#####.#.#######.#.#.###########.#.#####.#######.###############.#####
+#...........#...#...#...#.#.....###...#...###.......#.#...#.........#.#.#...#...###.....#...#...#.....#...#.....#.......#...............#...#
+###########.#.###.#####.#.#############.#.###.#####.#.#.#.###########.#.#.#.#######.#########.#.#.###.#####.#####.#######.###############.#.#
+#...#####...#.....###...#...#...#.....#.#...#.....#.#...#...#.........#.#.#.........###...###.#.#.#...#...#.....#.....###.......#.........#.#
+#.#.#####.###########.#####.#.#.#.###.#.###.#####.#.#######.#.#########.#.#############.#.###.#.#.#.###.#.#####.#####.#########.#.#########.#
+#.#.......#...###...#...###...#.#.#...#...#.#...#.#...#...#...#.........#.............#.#...#.#...#.#...#...#...#...#.....###...#.#.........#
+#.#########.#.###.#.###.#######v#.#.#####.#.#.#.#.###.#.#.#####.#####################.#.###.#.#####.#.#####.#.###.#.#####.###.###.#.#########
+#.#.......#.#.....#...#.#...#.>.>.#.#...#.#.#.#.#...#.#.#.#...#.#.......#...#...#.....#...#.#...#...#.#.....#...#.#...#...#...#...#...#.....#
+#.#.#####.#.#########.#.#.#.#.#v###.#.#.#.#.#.#.###.#.#.#.#.#.#v#.#####.#.#.#.#.#.#######.#.###.#.###.#.#######v#.###.#.###.###.#####.#.###.#
+#.#.###...#.#.........#...#...#...#.#.#.#.#...#.#...#.#.#.#.#.>.>.#.....#.#.#.#.#...#...#.#.....#.#...#...#...>.>.###...###...#.#.....#.#...#
+#.#.###.###.#.###################.#.#.#.#.#####.#.###.#.#.#.###v###.#####.#.#.#.###v#.#.#.#######.#.#####.#.###v#############.#.#.#####.#.###
+#.#...#...#.#.#...........#.......#.#.#.#.....#.#...#.#.#...###.###.....#.#...#.#.>.>.#.#...#.....#.....#.#.###.............#...#.#...#.#.###
+#.###.###.#.#.#.#########.#.#######.#.#.#####.#.###.#.#.#######.#######.#.#####.#.#v###.###.#.#########.#.#.###############.#####.#.#.#.#.###
+#.....###...#...#.........#.#...###.#.#.#...#.#.#...#...###.....#.....#.#...###...#...#.#...#.....#...#.#...#.....#...#...#.....#...#...#...#
+#################.#########.#.#.###.#.#.#.#.#.#.#.#########.#####.###.#.###.#########.#.#.#######.#.#.#.#####.###.#.#.#.#.#####.###########.#
+###...#.........#.......###...#...#...#.#.#...#...#####...#.....#.#...#...#...#.......#...###.....#.#.#.###...###.#.#.#.#.#...#.#...........#
+###.#.#.#######.#######.#########.#####.#.#############.#.#####.#.#.#####.###.#.#############.#####.#.#.###.#####.#.#.#.#.#.#.#.#.###########
+###.#.#.......#...#...#.#.........#...#...###...#...#...#.#.....#.#.#...#.....#.#.......#...#...#...#...#...#.....#.#.#.#...#...#.........###
+###.#.#######.###.#.#.#.#.#########.#.#######.#.#.#.#.###.#.#####.#.#.#.#######.#.#####.#.#.###.#.#######.###.#####.#.#.#################.###
+#...#...#...#...#...#...#...#.......#.###...#.#.#.#.#...#.#.......#.#.#.###...#...#.....#.#.#...#...###...###.......#...###...#...#.....#...#
+#.#####.#.#.###.###########.#.#######.###.#.#.#.#.#.###.#.#########v#.#.###.#.#####.#####.#.#.#####.###.###################.#.#.#.#.###.###.#
+#.#...#...#.....#...#...###...#.......#...#.#.#.#.#...#.#.......#.>.>.#...#.#.#...#.#...#.#.#.......#...###...#...#...#.....#.#.#.#.#...#...#
+#.#.#.###########.#.#.#.#######.#######.###.#.#.#.###.#.#######.#.#v#####.#.#.#.#.#.#.#.#.#.#########.#####.#.#.#.#.#.#.#####.#.#.#.#.###.###
+#.#.#.#...#.....#.#...#.....#...#.....#...#.#.#.#...#.#.#.......#.#.#.....#.#.#.#.#.#.#.#.#.#...#...#.......#.#.#...#.#.....#...#.#.#.#...###
+#.#.#.#.#.#.###.#.#########.#.###.###.###.#.#.#.###.#.#.#.#######.#.#.#####.#.#.#.#v#.#.#.#.#.#.#.#.#########.#.#####.#####.#####.#.#.#.#####
+#...#...#...###.#.#.........#...#...#...#.#...#.#...#.#.#.......#.#.#...#...#.#.#.>.>.#...#.#.#.#.#.#.........#...#...#...#.#.....#.#.#...###
+###############.#.#v###########.###.###.#.#####.#.###.#.#######.#.#.###.#.###.#.###v#######.#.#.#.#.#v###########.#.###.#.#.#.#####.#.###.###
+###...#...#...#...#.>...#.....#...#...#.#...#...#...#.#.#.....#...#...#.#.###.#.###...#.....#.#.#.#.>.>.#.....#...#.#...#.#.#.#.....#...#...#
+###.#.#.#.#.#.#####v###.#.###.###.###.#.###.#.#####.#.#.#.###.#######.#.#.###.#.#####.#.#####.#.#.###v#.#.###.#.###.#.###.#.#.#.#######.###.#
+#...#...#...#...###.#...#.#...#...#...#...#.#...#...#.#.#...#.#...#...#.#.#...#.#...#.#.....#.#...#...#...#...#.#...#.#...#.#.#.....#...#...#
+#.#############.###.#.###.#.###v###.#####.#.###.#.###.#.###.#.#.#.#.###.#.#.###.#.#.#.#####.#.#####.#######.###.#.###.#.###.#.#####.#.###v###
+#...#.........#...#.#.....#...>.>.#.....#.#.#...#.#...#.#...#.#.#.#...#...#.....#.#...#...#...#...#.......#.#...#...#.#.#...#...#...#...>.###
+###.#.#######.###.#.###########v#.#####.#.#.#.###.#.###.#.###.#.#.###.###########.#####.#.#####.#.#######.#.#.#####.#.#.#.#####.#.#######v###
+###...#.......#...#...#.........#.......#...#.#...#...#.#...#...#.#...###.....###.......#.....#.#.........#.#...#...#.#.#.....#.#.#.......###
+#######.#######.#####.#.#####################.#.#####.#.###.#####.#.#####.###.###############.#.###########.###.#.###.#.#####.#.#.#.#########
+#.....#.......#...#...#...#.........#.......#...#...#...###.....#.#.....#...#.................#.....#.....#.#...#...#.#.#.....#.#.#.........#
+#.###.#######.###.#.#####.#.#######.#.#####.#####.#.###########.#.#####.###.#######################.#.###.#.#.#####.#.#.#.#####.#.#########.#
+#...#.#...#...#...#.....#...#.......#.#.....#...#.#.#...#.......#.......###.................#...###.#.#...#...#...#...#.#.....#...###.......#
+###.#.#.#.#.###.#######.#####.#######.#.#####.#.#.#.#.#.#.#################################.#.#.###.#.#.#######.#.#####.#####.#######.#######
+#...#...#...###.........#...#.........#.#...#.#...#.#.#.#...............###...#.............#.#.###...#.........#.....#.#...#.....#...#.....#
+#.#######################.#.###########.#.#.#.#####.#.#.###############.###.#.#.#############.#.#####################.#.#.#.#####.#.###.###.#
+#.#...#.......#.......###.#.............#.#...#.....#.#.........#.....#.#...#.#.#...........#.#.....#...#.......#.....#.#.#.......#.....#...#
+#.#.#.#.#####.#.#####.###.###############.#####.#####.#########.#.###.#.#.###.#.#.#########.#.#####.#.#.#.#####.#.#####.#.###############.###
+#...#...###...#.....#...#.#...#.........#.#...#.....#.........#...###...#...#.#...#.........#.#.....#.#.#...###...#...#...###.....#...#...###
+###########v#######.###.#.#.#.#.#######.#.#.#.#####.#########.#############.#.#####.#########.#.#####.#.###v#######.#.#######.###.#.#.#.#####
+#.......###.>...###...#.#...#...#...###...#.#.......#.........#...#...#...#.#.#...#...###...#.#.#...#.#.#.>.>.#...#.#.###...#.#...#.#.#.....#
+#.#####.###v###.#####.#.#########.#.#######v#########.#########.#.#.#.#.#.#.#.#.#.###v###.#.#.#.#.#.#.#.#.#v#.#.#.#.#.###.#.#.#.###.#.#####.#
+#.....#.....###.#...#.#...#.....#.#.#.....>.>.#...###...........#.#.#...#.#.#...#...>.>...#.#.#.#.#.#.#.#.#.#...#.#.#...#.#.#.#...#.#.#.....#
+#####.#########.#.#.#.###.#.###.#.#.#.#####v#.#.#.###############.#.#####.#.#########v#####.#.#.#.#.#.#.#.#.#####.#.###.#.#.#.###.#.#.#.#####
+#.....#...#...#...#.#...#...###.#.#.#.###...#...#...#...#.......#.#.....#...#...#...#.#.....#.#...#...#.#.#...###...#...#.#.#.#...#.#.#...###
+#.#####.#.#.#.#####.###.#######.#.#.#.###.#########.#.#.#.#####.#.#####.#####.#.#.#.#.#.#####.#########.#.###.#######.###.#.#.#.###.#.###v###
+#.......#...#.....#...#.......#...#...#...#.........#.#.#.#...#...#...#...#...#.#.#.#.#.....#.........#...###...#.....#...#.#.#...#.#...>.###
+#################.###.#######.#########.###.#########.#.#.#.#.#####.#.###.#.###.#.#.#.#####.#########.#########.#.#####.###.#.###.#.#####v###
+#.................###...#...#.#...#.....###.....###...#.#.#.#...###.#.#...#...#...#.#...#...#...#.....#.........#.#...#.###.#...#...#.....###
+#.#####################.#.#.#.#.#.#.###########.###.###.#.#.###.###.#.#.#####.#####.###.#.###.#.#.#####.#########.#.#.#.###.###.#####.#######
+#...#.................#...#...#.#...#.......###...#...#.#...#...#...#.#.#.....#...#.....#...#.#.#.#...#.........#.#.#.#.###.....#...#.......#
+###.#.###############.#########.#####.#####.#####.###.#.#####v###.###.#.#.#####.#.#########.#.#.#.#.#.#########.#.#.#.#.#########.#.#######.#
+#...#.#...............###...#...#...#.#.....#...#.#...#...#.>.>...###.#.#.......#.......#...#.#...#.#...........#.#.#.#.#.........#.......#.#
+#.###.#.#################.#.#.###.#.#.#.#####.#.#.#.#####.#.#v#######.#.###############.#.###.#####.#############.#.#.#.#.###############.#.#
+#.#...#.................#.#.#.....#...#.......#.#.#.###...#.#...#...#...#...#...#.....#.#...#.#.....#.....#...###...#.#.#...............#...#
+#.#.###################.#.#.###################.#.#.###.###.###.#.#.#####.#.#.#.#.###.#.###.#.#.#####.###.#.#.#######.#.###############.#####
+#.#.#...........#.......#.#...#...#.............#.#.#...#...###...#.....#.#...#...###.#...#...#...#...###...#.......#...#...#...###...#.....#
+#.#.#.#########.#.#######.###.#.#.#.#############.#.#.###.#############.#.###########.###.#######.#.###############.#####.#.#.#.###.#.#####.#
+#...#.....#...#...#.....#.#...#.#.#.....#...#####...#.#...#...#.........#.#.....#...#.....#.....#.#.#...#...........###...#...#.....#.......#
+#########.#.#.#####.###.#.#.###.#.#####.#.#.#########.#.###.#.#.#########.#.###.#.#.#######.###.#.#.#.#.#.#############.#####################
+###...###...#...###...#...#...#.#.......#.#.........#...#...#...#...#...#...#...#.#...#...#.#...#...#.#...#.......#...#...#...#...#.........#
+###.#.#########.#####.#######.#.#########.#########.#####.#######.#.#.#.#####v###.###.#.#.#.#.#######.#####.#####.#.#.###.#.#.#.#.#.#######.#
+#...#...........#.....#.......#...........#.........#...#.......#.#...#.#...>.>...#...#.#.#.#.###...#.#.....#.....#.#...#...#.#.#.#.#.....#.#
+#.###############.#####.###################.#########.#.#######.#.#####.#.###v#####.###.#.#.#.###.#.#.#.#####.#####.###.#####.#.#.#.#.###.#.#
+#...............#.....#.#...#...#...###.....#...#.....#.......#...#.....#...#.#.....###.#.#.#.###.#.#.#.#...#.......#...#...#...#...#...#...#
+###############.#####.#.#.#.#.#.#.#.###v#####.#.#.###########.#####.#######.#.#.#######.#.#.#.###.#.#.#.#.#.#########.###.#.###########.#####
+###...#.........#.....#.#.#.#.#.#.#...>.>...#.#.#.........#...#.....#...#...#.#.......#.#...#.....#.#...#.#.......#...#...#.#.....#...#.....#
+###.#.#.#########.#####.#.#.#.#.#.#####v###.#.#.#########.#.###.#####.#.#.###.#######.#.###########.#####.#######.#.###.###.#.###.#.#.#####.#
+#...#.#.......###.....#.#.#...#...###...#...#.#...#...#...#...#.....#.#.#.#...#.......#.......#.....#...#.....###...#...#...#...#...#.....#.#
+#.###.#######v#######.#.#.###########.###.###.###.#.#.#.#####.#####.#.#.#.#.###.#############.#.#####.#.#####v#######.###.#####.#########.#.#
+#...#.#...###.>.......#.#.#.........#...#...#...#.#.#.#.#.....#...#.#.#...#...#.#...#...#...#.#.#...#.#...#.>.>.#...#...#.#...#.........#...#
+###.#.#.#.###v#########.#.#.#######.###.###.###.#.#.#.#.#.#####.#.#v#.#######.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#v#.#.#.###.#.#.#.#########v#####
+#...#...#...#.........#...#...#...#.#...###...#.#.#.#.#.#.#...#.#.>.>.#.......#.#.#...#.#.#...#.#.#.#.#...#.#.#...#...#.#.#.#.#.....#.>.#...#
+#.#########.#########.#######.#.#.#.#.#######.#.#.#.#.#.#.#.#.#.###v###.#######.#.#####.#.#####.#.#.#.#.###.#.#######.#.#.#.#.#.###.#.#v#.#.#
+#.........#...#.......###.....#.#.#...###...#...#.#.#...#.#.#.#.###...#.......#.#.....#.#.....#.#.#...#.....#...#...#...#.#.#.#...#...#...#.#
+#########.###.#.#########.#####.#.#######.#.#####.#.#####.#.#.#.#####.#######.#.#####.#.#####.#.#.#############.#.#.#####.#.#.###.#########.#
+#.........#...#.........#.......#...#...#.#.......#.#.....#.#.#.#.....###.....#...#...#.....#.#.#.#...........#...#...#...#.#.#...#.........#
+#.#########.###########.###########.#.#.#.#########.#.#####.#.#.#.#######.#######.#.#######.#.#.#.#.#########.#######.#.###.#.#.###.#########
+#.........#.....#.......#...........#.#.#.......#...#.#...#.#...#.......#...###...#.......#.#.#...#.....#...#.....#...#.....#.#.###.....#...#
+#########.#####.#.#######.###########.#.#######.#.###.#.#.#.###########.###.###.#########.#.#.#########.#.#.#####.#.#########.#.#######.#.#.#
+###...###.....#...#...###.............#...#.....#...#.#.#.#.#.........#.###...#.#.........#...#.....###...#.....#.#.#.......#.#.#.......#.#.#
+###.#.#######.#####.#.###################.#.#######.#.#.#.#.#.#######.#.#####.#.#.#############.###.###########.#.#.#.#####.#.#.#.#######.#.#
+#...#.........###...#...#.......#...#.....#.........#...#...#.......#...#.....#...#...#...#...#.#...#...........#.#...#.....#.#.#.#.......#.#
+#.###############.#####.#.#####.#.#.#.#############################.#####.#########.#.#.#.#.#.#.#.###.###########.#####.#####.#.#.#.#######.#
+#.#...#...###...#.#.....#.#...#...#...#####.........###...#...#.....#...#...###...#.#.#.#.#.#.#.#...#...........#.......#####...#...#.......#
+#.#.#.#.#.###.#.#.#.#####.#.#.#############.#######.###.#.#.#.#.#####.#.###.###.#.#.#.#.#.#.#.#.###.###########.#####################.#######
+#...#...#.....#...#.....#...#.............#.......#...#.#.#.#.#.......#...#...#.#.#.#.#.#.#.#.#.#...#...#...###.###...#...#...#.....#.......#
+#######################.#################.#######.###.#.#.#.#.###########.###.#.#.#.#.#.#.#.#.#.#.###.#.#.#.###v###.#.#.#.#.#.#.###.#######.#
+#.............#...#.....###...............#...#...#...#.#...#.....#.....#.#...#.#.#.#.#.#.#.#.#.#...#.#.#.#.#.>.>.#.#.#.#.#.#.#...#.#...#...#
+#.###########.#.#.#.#######.###############.#.#.###.###.#########.#.###.#.#.###.#.#.#.#.#.#.#.#.###.#.#.#.#.#.###.#.#.#.#.#.#.###.#.#.#.#v###
+#...........#...#...#.....#...............#.#.#...#...#.........#.#...#...#.#...#.#.#.#.#.#.#.#.#...#.#...#.#.#...#.#.#.#.#.#...#.#...#.>.###
+###########.#########.###.###############.#.#.###.###.#########.#.###.#####v#.###.#.#.#.#.#.#.#.#.###.#####.#.#.###.#.#.#.#.###.#.#######v###
+#...........#...#...#.#...#...###.........#.#...#...#.#.....#...#.#...#...>.>.#...#.#.#.#.#.#...#...#...#...#.#.....#...#.#...#.#.#.......###
+#.###########.#.#.#.#.#.###.#.###.#########.###.###.#.#.###.#.###.#.###.#######.###.#.#.#.#.#######.###.#.###.###########.###.#.#.#.#########
+#...#.....#...#...#.#.#...#.#.#...#...#...#...#.###.#.#...#.#...#.#.###.......#...#.#...#.#.#.....#.#...#...#.....#####...#...#.#.#.........#
+###.#.###.#.#######.#.###.#.#.#.###.#.#.#.###.#.###.#.###.#.###.#.#v#########.###.#.#####.#.#.###.#.#.#####.#####.#####.###.###.#.#########.#
+#...#.#...#.#.......#.#...#.#.#...#.#.#.#.#...#...#.#...#.#.#...#.>.>.#.....#...#.#.#...#...#...#...#.###...#.....#.....#...###.#.#.....###.#
+#.###.#.###.#.#######.#.###.#.###v#.#.#.#.#.#####.#.###.#.#.#.#######.#.###.###.#.#.#.#.#######.#####.###.###.#####.#####.#####.#.#.###.###.#
+#...#.#...#.#.......#.#.#...#.#.>.>.#.#.#.#...#...#...#.#.#.#.......#.#...#...#.#.#...#.......#.#...#...#...#...#...#...#.#...#...#...#.....#
+###.#.###.#.#######.#.#.#.###.#.#####.#.#.###.#.#####.#.#.#.#######.#.###.###.#.#.###########.#.#.#.###.###.###.#.###.#.#.#.#.#######.#######
+###.#.#...#.#.......#.#.#.###.#.....#.#.#.#...#...#...#.#.#.#...#...#...#...#.#.#.#...#...#...#.#.#.#...#...#...#...#.#.#...#.#.......#.....#
+###.#.#.###.#.#######.#.#.###.#####.#.#.#.#.#####.#.###.#.#.#.#.#.#####.###.#.#.#.#.#.#.#.#.###.#.#.#.###.###.#####.#.#.#####.#.#######.###.#
+###...#.....#.........#...###.......#...#...#####...###...#...#...#####.....#...#...#...#...###...#...###.....#####...#.......#.........###.#
+###########################################################################################################################################.#
+
diff --git a/2023/_input/day_24.txt b/2023/_input/day_24.txt
new file mode 100644
index 0000000..6fbb9f2
--- /dev/null
+++ b/2023/_input/day_24.txt
@@ -0,0 +1,301 @@
+260252047346974, 360095837456982, 9086018216578 @ 66, -174, 512
+511477129668052, 548070416165820, 520727565082156 @ -386, -384, -322
+358771388883194, 290970068566246, 208977773545854 @ 88, -82, 254
+126687249998278, 281467449200748, 381838847917690 @ 156, -21, -138
+387555897070204, 265423499409000, 234620593397299 @ -117, 7, 114
+145889837538820, 320469908388792, 158376746448532 @ 115, -74, 173
+285469538594908, 273084414160108, 460747259136580 @ -78, -9, -240
+301609598923332, 172929143989132, 293135433361660 @ 61, 219, -30
+229817261409244, 242103235132548, 256777324376932 @ -30, 30, 36
+382702971099508, 294454989005628, 239623283981980 @ 48, -108, 159
+111969515957356, 220272741325224, 317725858112722 @ 43, 47, -31
+90289069003396, 245258021611553, 259665829177778 @ 51, 20, 29
+366568689132052, 205845920382660, 271912507753744 @ -145, 109, 18
+369483756415645, 215790550878981, 308658168996229 @ -130, 102, -54
+152917073206179, 84582480192213, 55482823209615 @ 158, 280, 350
+157397866670023, 428923425147576, 73579850554771 @ 72, -209, 272
+166074202922500, 411443659961202, 363011578878524 @ 51, -182, -97
+277210830950116, 407131182833676, 340081413006268 @ -139, -141, -51
+145942723469704, 289582433881656, 267126826821304 @ 20, -26, 22
+389134483297595, 147759339251644, 416281585968907 @ -82, 363, -414
+426159794716196, 248693291783596, 361718270324092 @ -110, 98, -408
+387893848712080, 181706705875368, 261036596589922 @ 31, 375, 69
+126426169350884, 187536290962320, 219513137088695 @ 19, 79, 70
+343166181618092, 199633553939308, 231799196307476 @ -76, 135, 98
+235138717311314, 387012721138020, 205434095229918 @ -16, -161, 106
+315625891701607, 165491367071694, 218784106578586 @ -144, 121, 81
+271330638294580, 171541255868436, 268521824575300 @ -135, 92, 20
+424686923963423, 281897041255143, 254210841267860 @ -76, -68, 119
+93688515601738, 242329137681174, 269767489032676 @ 62, 24, 19
+67587776544460, 183357916328832, 111857960290042 @ 283, 127, 261
+331948173571088, 270722982954544, 351687526906556 @ 157, -7, -257
+352470676644748, 332671425949248, 287702919128110 @ 59, -209, -31
+247599705809380, 333127859125566, 260764308332614 @ 35, -108, 36
+454698002076976, 277462093586392, 272732467591632 @ -66, -114, 28
+45122854936960, 325949432759319, 29595337687738 @ 119, -64, 273
+403002662832753, 274769599892843, 289255635828805 @ 134, -36, -90
+429294653822626, 264498741759426, 274546373747347 @ -11, 37, 8
+196825494522172, 505954558137936, 333984007658308 @ 5, -294, -59
+274006998438343, 281081235786738, 291217987123435 @ -6, -23, -14
+26648628553647, 155386233544350, 146761804230778 @ 110, 109, 141
+424339894040782, 371038945638722, 278889968840950 @ 78, -864, -30
+457791511206928, 272358933408118, 280884983012300 @ -105, -39, -97
+357650740120948, 334335608049174, 276478724157094 @ -213, -72, 12
+237477346723428, 257254357551772, 274363189195148 @ -23, 12, 14
+173174548083564, 336615926081064, 415266853851384 @ 113, -104, -196
+433283695168618, 281054067999568, 283465796369330 @ 6, -99, -70
+52236708068029, 100788971188212, 70977698744893 @ 84, 163, 216
+419166001161340, 245510568353508, 242333031846520 @ -51, 125, 180
+235683583291548, 406147528170948, 261629963097260 @ -56, -164, 29
+272588521797874, 321203815691115, 320463362203153 @ -47, -78, -52
+203932032433365, 235048122017063, 276795664732395 @ 88, 50, 10
+141505979676574, 271017889403242, 326616432258434 @ 48, -6, -46
+358609967278201, 341674812676281, 260910661474888 @ 134, -298, 67
+110696685128992, 280353226664823, 265441184192224 @ 199, -20, 27
+194772690222964, 284181138262908, 340959700279324 @ -36, -20, -57
+289355378574733, 277064192718978, 177942372212305 @ 144, -23, 264
+181346847600192, 220241033014807, 322694340555640 @ 23, 56, -45
+334057848707013, 358916197047778, 268201459807710 @ 26, -235, 29
+383833004393356, 229653113084892, 398206940312860 @ -162, 73, -225
+185728625658784, 175687210095414, 189638792764012 @ 159, 157, 159
+183764600310148, 300838892114760, 373798669114558 @ -13, -39, -96
+19354701540608, 200855895654253, 311919614592905 @ 223, 80, -32
+397529491114050, 265344980349075, 282500734592930 @ 89, 22, -35
+150730399919245, 327441705067513, 350689629709098 @ -24, -60, -59
+351830206437526, 281179155071188, 306695621836660 @ -114, -25, -45
+193310183351275, 298778882257743, 343589226835150 @ 106, -50, -95
+263623225505308, 415667029132508, 548386368493280 @ -63, -193, -340
+367545388131973, 483735180604063, 274591231934370 @ -120, -438, 13
+285779995052130, 320031204638093, 200141577685477 @ -127, -60, 96
+379319883891758, 294948043198878, 240066725940480 @ 62, -110, 157
+284747679239167, 369856825930864, 258405302544755 @ -24, -169, 40
+111472168943236, 240994318136455, 222819386069098 @ 51, 26, 69
+384695710924300, 346492382256660, 286110844081396 @ 138, -414, -52
+446707183997664, 402617204624103, 357795692211473 @ -289, -230, -128
+146025596458637, 228412549072948, 281951949040916 @ -20, 35, 7
+124218710583478, 211682826069954, 352093317377104 @ 102, 68, -83
+256912286505080, 242934381017574, 232279023275898 @ 95, 49, 97
+447100025339481, 231647581674146, 250823665971982 @ 50, 573, 357
+189166438230076, 234540091993428, 197639351397020 @ 264, 70, 175
+109499336519287, 191437282582394, 382761289911163 @ 156, 101, -132
+387976394328904, 353502198589738, 550594297576684 @ -201, -135, -417
+439947695940388, 299546815090236, 434476918204696 @ -213, -113, -576
+426826058074393, 222928532958960, 287064685296862 @ 82, 423, -107
+286331927511076, 293433866979432, 243263600000296 @ -69, -38, 58
+282405825830251, 235517448577063, 341269109590007 @ 24, 60, -112
+339201210668319, 263630396706723, 257091289022354 @ -26, 10, 53
+142438328552498, 341611114469074, 362254088220432 @ 32, -84, -83
+199487514274836, 273033963392952, 181280883715612 @ -49, -8, 111
+220003197519889, 257635709574780, 270476406247768 @ -10, 11, 19
+425230590137268, 263105645881268, 277926652722610 @ -37, 39, -12
+349520190740203, 236350724857629, 217274490649315 @ -38, 76, 150
+53805544593126, 188135360166680, 28236478797570 @ 290, 117, 380
+159442932684024, 99056419722600, 377660901494652 @ -20, 166, -89
+437985305187634, 279983675949036, 276882967133116 @ 5, -101, -17
+365245200177382, 232843393505991, 269965133776552 @ 21, 118, 27
+445467048517908, 298922607250084, 312965025875000 @ -133, -217, -275
+293205488617132, 204550829516724, 391364981829892 @ -106, 78, -134
+314143899708583, 255521009857758, 275067473424967 @ -8, 25, 12
+407621929628228, 254270562289088, 255880095928540 @ -157, 38, 63
+445893581436608, 319005578306188, 263909681840922 @ 17, -645, 142
+316276033347061, 263305851291265, 285185139922902 @ -36, 8, -7
+272024047849396, 310418417082302, 294119377911946 @ 195, -111, -39
+439822662137629, 304224150688365, 336611859996022 @ -180, -164, -279
+418137117118108, 193883857541268, 232445808143500 @ -153, 247, 151
+275066320015663, 197436551236773, 254944012947265 @ -26, 108, 44
+172927402070068, 51148482593268, 328931097171292 @ 57, 280, -57
+449270439886924, 274923276513702, 278909614483840 @ 63, -86, -75
+240483227536318, 334892273627198, 221494125016570 @ -39, -87, 81
+319478594525944, 204908531114796, 180274797281512 @ 174, 211, 324
+176005885386880, 271193232554595, 245406211077871 @ -49, -6, 42
+74160415638206, 171041570771294, 307988846139402 @ 61, 93, -19
+142933563830548, 190507398440868, 386584415696500 @ 23, 81, -107
+69067105883278, 475025537710914, 153575920175368 @ 57, -203, 131
+433405095404698, 257826640562802, 353885715276210 @ -123, 61, -415
+316724956668508, 251442386315988, 369631175041732 @ 42, 40, -216
+379863289408878, 418038741114912, 338910022343114 @ 32, -587, -242
+160956147512977, 473129383401726, 130799797515973 @ 14, -231, 174
+380699912839277, 239946459907974, 259622104530955 @ 160, 157, 90
+328555183897063, 261786701109618, 292609561188730 @ 46, 17, -35
+232859881347097, 31811085441715, 379689745903330 @ 6, 332, -135
+404447157366358, 283017743638028, 278832680262080 @ 6, -69, -11
+364517719195208, 418360738054328, 487007529256830 @ -139, -271, -368
+299643058465672, 201594038322693, 93955941607817 @ 159, 190, 526
+257345717958016, 339685066584756, 255111013865680 @ -42, -99, 40
+180057362376514, 52302285112905, 357102074379577 @ 133, 342, -118
+203970691172872, 86819229070221, 367387166479175 @ 111, 298, -140
+426360087742733, 262031142974243, 286630769074435 @ -88, 38, -54
+311177754519902, 372925373687843, 89609635179839 @ -11, -210, 382
+362991742981468, 311560982254932, 252898621062328 @ -63, -107, 66
+296573597236004, 224719551407756, 289423818792364 @ 101, 107, -24
+393524833708948, 239592397653048, 256349284717276 @ -113, 80, 63
+443479078073358, 279242856478603, 261532992579730 @ 29, -118, 165
+249771575290064, 285073499047600, 354918325372724 @ 100, -34, -143
+231286399515078, 242277424621522, 296717574699824 @ 22, 36, -19
+86675892262392, 337725224594088, 313399669385562 @ 181, -95, -38
+189557205874708, 309715658690428, 189905659836980 @ 39, -57, 125
+404824049363635, 304241084345646, 370727931535915 @ -162, -91, -230
+122755855350460, 247817594293476, 199787501956422 @ 231, 31, 134
+257408956285321, 251509201406037, 276428878305615 @ 48, 28, 10
+377835014682076, 375717388723728, 332019284465422 @ 71, -455, -234
+179122138188786, 57976159435157, 247433609876336 @ -19, 222, 43
+131165096554572, 276065005532966, 257546538448634 @ 71, -12, 34
+312028148931800, 305345328575564, 356646394705329 @ -41, -69, -136
+343903915993946, 142324232939944, 389942758043250 @ 104, 429, -380
+381343334046868, 276668042570388, 287729619231960 @ 87, -35, -50
+157837357281456, 424787095231278, 259859067674100 @ 125, -230, 35
+375050689888512, 117476396624848, 307862897770116 @ -71, 405, -77
+269404149399892, 531685013084856, 553956410303728 @ -117, -283, -283
+378587071147541, 229293890906765, 306445035395956 @ 148, 204, -153
+299495706475760, 291653987464988, 305324775916586 @ -11, -45, -44
+296173970890117, 275079251466102, 239444012766553 @ 168, -19, 112
+107603862021516, 248974332954192, 237305527405804 @ 29, 16, 51
+261627365808599, 275030239505757, 241604433473801 @ 56, -14, 74
+418578743455044, 340146611849820, 288955077554180 @ -157, -233, -35
+296888553673609, 295805451518897, 272636516114234 @ 30, -58, 17
+313142681183966, 335495338798711, 430076570935087 @ -67, -114, -246
+228895566001444, 191299375053372, 278980790151952 @ -61, 83, 9
+245610739020050, 275273028843688, 326896207685004 @ 110, -15, -89
+71824981057092, 43920570835212, 204479384139964 @ 241, 319, 114
+434821499622974, 274962934656868, 272882576434594 @ -19, -45, 21
+377400385964533, 188320296393778, 251426859185030 @ -84, 209, 73
+241165275256580, 168129516960140, 33021798279068 @ -29, 129, 331
+141834587229076, 252089152234432, 104413889231828 @ 15, 14, 193
+331949934030148, 174420420655508, 385939064824080 @ -45, 191, -215
+402265676786649, 334257660856933, 294396738531160 @ -130, -190, -45
+411728281632704, 259235705801182, 363781677728718 @ -121, 33, -299
+296455010257918, 297963123001458, 232192319674722 @ -48, -50, 82
+417679850754976, 250669320685028, 454374670482908 @ -192, 45, -449
+28509374129166, 33225677080434, 444886806634038 @ 100, 226, -152
+410139478376752, 296310151491432, 252018037705792 @ 104, -188, 166
+272994257702758, 157222174983558, 153263643213865 @ 17, 193, 226
+322155270337732, 188081478577932, 368590067129980 @ -135, 103, -110
+413347361210877, 277885756530478, 257202436350338 @ 50, -55, 121
+167387271582272, 216956134407396, 340728824064368 @ 149, 79, -91
+265042615018508, 384312065458478, 401259928005385 @ -133, -115, -108
+8525196082785, 318705221525096, 257730489767577 @ 164, -57, 32
+434473347189754, 255463229743171, 303852672491578 @ -159, 62, -123
+406839331301470, 220252255405944, 322853271357772 @ -130, 149, -137
+229999879973204, 185932729404616, 210769868379484 @ 223, 188, 159
+435356311410128, 300785590689108, 278143467186940 @ -136, -167, -9
+160000261860828, 145783697055114, 298749555832226 @ 127, 178, -22
+281299595237732, 193805609044620, 87745265681276 @ 88, 163, 424
+214942250915014, 233729076694908, 269962713190708 @ -50, 35, 19
+375067871279068, 139023805236348, 175860567749035 @ 155, 651, 504
+287626726905742, 551949004075122, 70178398864742 @ -12, -494, 368
+353361942964228, 304003764115788, 372642962428060 @ 139, -139, -377
+224626708552138, 261433702622238, 394032104280460 @ -20, 6, -137
+253192598783251, 139598168852450, 325510380262858 @ -54, 161, -51
+149989568673907, 311719255647106, 328730670034853 @ 24, -51, -46
+412930774946808, 276289688982028, 247122297911380 @ -22, -37, 153
+101085902072264, 295889690107668, 225555111400572 @ 100, -35, 71
+439565997787933, 245300219115653, 306394628548380 @ -204, 92, -113
+164673266157390, 5606789398183, 333052342786080 @ 185, 440, -85
+450677614132400, 249042067555392, 205318058844040 @ -121, 199, 675
+429347285014672, 394459039393692, 318088240118248 @ -120, -617, -204
+104900090362108, 319177113434748, 255219089095810 @ 27, -53, 33
+191859374888596, 220827418401684, 302059358838640 @ -37, 47, -15
+275494854387310, 294088149121466, 239987794041016 @ 54, -52, 81
+196529153002196, 317373560393984, 476126067966699 @ -29, -57, -208
+238614574858332, 250546956874252, 143129625805696 @ 49, 27, 228
+359564904140299, 249794846714622, 356120896991680 @ 78, 69, -285
+322218145613763, 257659380462708, 269441535304340 @ -44, 19, 23
+340050262541317, 281412269205239, 374975512784479 @ -180, -18, -102
+167529805923184, 274679769722514, 315138171652435 @ 71, -11, -40
+338997880192948, 193002534480138, 240731348261620 @ 171, 286, 139
+265443211856980, 146773871884216, 367083338119828 @ 159, 288, -207
+440080960681708, 276167106658131, 313130033672797 @ -133, -42, -228
+296249530975468, 130800635625868, 228969716827760 @ -9, 251, 97
+365911643136904, 264270030969468, 362962654834012 @ 30, 15, -289
+374534251529188, 282408576477168, 239277440283268 @ -173, -25, 71
+454959846305028, 366822557602288, 246712572897280 @ -205, -706, 210
+224583776148124, 544050635118624, 467209538746456 @ -55, -312, -202
+216749136762548, 395451600794968, 84336190867900 @ -41, -148, 231
+429600688814648, 238012010665476, 241305548942504 @ -68, 193, 214
+174903776547418, 248011558280129, 223986634762965 @ 57, 24, 80
+275087057056557, 220907472032932, 387195583149881 @ 20, 83, -188
+306509296095583, 277304042488794, 223007218103449 @ -8, -19, 114
+169998768568425, 203888135864971, 346013299344966 @ 110, 92, -91
+284196913095691, 255167819794982, 292619067409723 @ -6, 21, -18
+337307749623478, 383362695137898, 517704797307928 @ -88, -210, -427
+287427768536280, 238380819726296, 334816249794888 @ -94, 36, -64
+361348630503772, 357929577764676, 320849734330888 @ 65, -319, -154
+435565556996708, 284369939742748, 270497559901500 @ -23, -124, 41
+244536442087168, 293851858201728, 217770924234100 @ 100, -50, 121
+458942400054260, 240651054123356, 286824736239358 @ -181, 323, -132
+24685323460277, 209594130068392, 361765230018103 @ 170, 63, -84
+248348669699828, 175775542456188, 475543260893900 @ -112, 88, -184
+387691982568408, 515568006267247, 372961236446587 @ -233, -294, -102
+274811300590453, 202140926475081, 27798293633833 @ 112, 148, 568
+375641261333236, 212885887718226, 256049622939448 @ 131, 269, 99
+347503995873073, 305383373919375, 290966632024522 @ -88, -74, -19
+201256912879009, 305207655156478, 355642307024689 @ 54, -55, -102
+324754170669430, 276799893521154, 273093070806478 @ -44, -18, 16
+258961224554666, 297171881059276, 325117353506934 @ -80, -37, -46
+449070505758187, 264483230686530, 246839549094586 @ -92, 53, 289
+181293248100852, 221197724585944, 365537280925728 @ 155, 77, -139
+148593244192656, 270148844447628, 266427056912151 @ -17, -5, 22
+436692194782318, 272859781276548, 255305866370770 @ -174, -17, 96
+263338515052890, 356894375105708, 243243754235652 @ 53, -165, 71
+455577527471392, 241905362834440, 317481639208400 @ -102, 378, -580
+370075365522980, 289083186054913, 292539031573265 @ 19, -70, -50
+411659050132428, 257443136659324, 253344237006252 @ 22, 69, 133
+382376913411294, 241392573719362, 274100487737157 @ -151, 53, 14
+371398977583798, 199943205015228, 328599107521360 @ 13, 235, -173
+95132638635994, 280415022478347, 161466437630434 @ 145, -18, 157
+399347534845531, 165021285520902, 239103367538290 @ 28, 513, 185
+425515104298308, 266648391487228, 262944219586580 @ -37, 17, 82
+414097500293340, 279330657854165, 269402843152819 @ 43, -64, 42
+422692690054814, 262272927036196, 283565409045144 @ 98, 63, -71
+363470288588283, 281921445167868, 178197571629035 @ 112, -53, 404
+311287285221820, 239609989151292, 219165860959468 @ -90, 41, 97
+416496137502683, 248362644227943, 266210585648996 @ 92, 160, 71
+251842295966779, 272899870139824, 257786292235853 @ -12, -9, 38
+437521748023833, 268129947037833, 276488829122830 @ 32, 16, -15
+289691518105993, 266456869243491, 285016249687858 @ 212, 6, -19
+296004391588480, 217339674414301, 234647105515165 @ -129, 56, 60
+86986863969982, 41476193140308, 405611175038842 @ 38, 215, -112
+366109821876333, 198501852122183, 295292428183412 @ -58, 180, -41
+453074543670367, 286028691063770, 267181381222372 @ -114, -183, 87
+339336564536197, 441503114313885, 423436201298311 @ -172, -212, -166
+447211513330612, 260354547440952, 291901728330100 @ -97, 86, -155
+294112454126409, 187547424592063, 151112828326508 @ 110, 200, 319
+437114327150624, 300115809385972, 268174434574468 @ 20, -303, 69
+71077865007748, 250908661982152, 153144417138652 @ 147, 18, 159
+201571092293566, 315667182923832, 403952659238746 @ -71, -49, -111
+207485901780540, 258058398572092, 304694407931644 @ -26, 9, -21
+346604146677672, 145318527855940, 464383098341956 @ -119, 207, -309
+446624717332606, 302480574328938, 268358409268258 @ -120, -270, 58
+240183990794544, 248239636700365, 295513897713243 @ -89, 18, -8
+322594376517988, 302444328257858, 336112077985780 @ -45, -67, -105
+433308188765446, 305271495468960, 244428731181064 @ 90, -383, 329
+387037847729296, 181666721206302, 294167436916429 @ 79, 421, -84
+442461534444658, 388942103331777, 533502631991707 @ -283, -202, -416
+291171726300013, 257232749495847, 383699023126399 @ -38, 16, -164
+161218736417716, 277249019038620, 281719175212828 @ -26, -12, 7
+221079659499298, 380751764961848, 338717699623545 @ -51, -129, -58
+276891834590108, 351897860987353, 144715729582180 @ -5, -142, 231
+129549142095477, 248760879006853, 3260806794584 @ 68, 20, 331
+284057822733188, 234042704760588, 265581103368860 @ 43, 67, 31
+282948412739428, 229380012806508, 336235069008860 @ -12, 64, -91
+144462336497566, 311284428310276, 307261076762692 @ 18, -49, -21
+282152605151608, 246707674895148, 299389976473708 @ -8, 35, -29
+248207347898418, 310949709878008, 213330684216555 @ -91, -49, 80
+74129585145465, 271989410371970, 226670258895259 @ 100, -7, 66
+195204344296560, 144916203025495, 175314529168529 @ 223, 246, 212
+445694022102036, 265685041297404, 278474293402588 @ -134, 28, -21
+356124573882414, 328021631981904, 240216543311590 @ -19, -161, 105
+3823511042166, 352820981745532, 335608792939408 @ 166, -93, -51
+213763366117663, 274787710785403, 350609871173045 @ -54, -10, -68
+318496682533488, 307617273517798, 238964066863370 @ -115, -58, 64
+236261913574409, 444532514407650, 164477802160809 @ 98, -323, 214
+377117089960588, 558698655004116, 197724865007476 @ -148, -564, 162
+183038197603048, 76472787650658, 238818213745165 @ -25, 201, 52
+195952250575844, 270148844447628, 317497840385494 @ 83, -5, -51
+133932189974788, 420967245338808, 457056312102620 @ 51, -176, -193
+135279533226373, 332338648692273, 220209403493305 @ 204, -104, 100
+43437060649708, 167146833139836, 248807909465956 @ 117, 103, 41
+381580219540428, 528348381958764, 304224506914416 @ -223, -317, -22
+373242883125355, 312355839528897, 126378714997459 @ -34, -132, 458
+416945996292841, 290887199702151, 271179151339720 @ 126, -176, 35
+
diff --git a/2023/_input/day_25.txt b/2023/_input/day_25.txt
new file mode 100644
index 0000000..8b69410
--- /dev/null
+++ b/2023/_input/day_25.txt
@@ -0,0 +1,1173 @@
+ckf: rqc
+zpm: ffp
+lgt: jbp qgn
+zcn: jcz srr bbx
+vbt: hgx
+cgg: qvk
+gnb: rtc qtc nvv cmn pjt
+rgk: mzv gjk jdk
+vxg: hlc fpd kmr lxs vnj
+lds: rdt
+knb: nrn qhs
+zkv: tqg bgb fkd qmp prl mqc
+tmj: fbn cjn
+jjz: hcg cjk psp
+qtc: mdk
+kpn: mgj nms
+xbp: ksx ckf bxt qbn rjt nrl
+dpz: jlq
+rgh: tbh
+sqf: fqg mvk hsx bhm
+bgz: vfk ltk mrl cxr
+mjt: hkm vvc spp
+jbg: xzp xkr qmg sch xdp
+cml: nsm kfq zlk fpn kjq vqd
+srk: dtm
+dtd: kqx kxm
+mkd: ggt nbj tpq
+tnq: jfp tzh tcq vnh
+ntd: vcq xmd
+gcg: ggl xng vkm lst
+jsb: rzv
+ctr: jxj nvx mjr qlh
+dqt: qvk tbl xff pnv xtm
+ftr: dkn vkn pcv
+zqf: vlz dpv dpp lkm kdt
+zdx: jfs
+ctx: mpt cqc
+bkg: phb mbg cpl kqd
+shr: gvv fxh
+lzt: xnq
+ltv: shp dfr bvb fpn
+psp: qrc
+shm: trj
+nvh: xcb
+fjk: hbm gsn bhk
+jjv: qgm qml
+qps: vds xrj
+vqv: hfj
+kvk: nrs jkg dhz
+vmr: nld btf
+mql: dpz kjr fzg
+qcg: flr mmq hvx qqd
+cpr: vbk sfd pnz qtc hbg
+gbh: gmg lxb sbz
+gzx: lrg qxp tls dtt
+sdr: qgq
+tmv: mln ktd qnz hrg
+dgz: csz zcs qqp tjn
+gxz: rtc
+dsh: kfd
+cgt: cdh ckf qgx
+skj: ffp qgf czj
+dcj: zqd nhg zzc
+bnt: jtp qmz
+zbb: pfv pjc kdk
+mdm: zsn hgx lbq qxh
+bcj: zpm smt mjq zcs mlq kbq
+rcz: qfp
+qgx: tvm zjp mkh xxb
+svr: zcc btq qbb
+pjs: xnd qnq zjn hjn
+bmd: gbr lds
+lvj: dxs lzm cmk fmg
+xkk: lvd dtm
+dgd: nmj
+vps: tvr rzv tmp pvb
+xjh: dmd
+tqx: xbb zfm xnq nrt lzt cpq ggm
+vcq: kfh fsh
+vnz: cqc vzm rjr
+zmp: rgh jbp shm
+xkl: zgr hbl qkg php
+zjp: rkp mqc zxf
+pbz: bgv dmd
+tnz: xnh shr kbq
+lfq: gxj
+bhq: zzv rmc mhs vxx
+hdd: pzs
+lqf: scn brc pkh nms
+mck: tmp pks
+rtp: pbz vfz kmp
+jgh: tkd nmj tnm lzb
+bfq: zzh spp hdv
+kcx: slg vrk
+knc: tjj
+bgb: ckj mcq
+qpj: qpg jsb tvm
+csh: cbf vrn jhh
+llc: gbr mzn cpr trt
+gsc: xcm krq tdg bkv
+fdq: crl thj
+cxt: vph
+frf: pkc
+zrv: kfk sjl tqs grd srl pjg
+kvf: rdt
+ttc: fmg fmm
+qkg: bbd
+vxx: jkn xmd sgk
+xfh: nch
+czc: smj qcz lxb cxq
+mcs: gdk knt lcm qmk
+mzv: dpz
+gkk: gfg vkm
+ltk: trj
+dcs: rxv jgz
+jcz: nmv
+fdx: fjm zhz kdp skh qxr
+bgx: mbk ksm pdv
+lbx: xtd sth tfx
+cmn: mkd
+rmc: jlq
+zvv: cvl ghm
+mng: mdc
+dhg: bfq dbs fxh hfc
+bzz: czm dpz fzg
+htq: nlc rnr nrt rkb
+lxp: cxm tdz
+gqb: tfm jvr kzc
+lmt: vgt qdk
+kzq: qgf
+kps: npl czm bqd dfn
+kvv: fsx
+crq: qdm pqg qpg
+jnr: pkh qmz jkb
+bfg: nvq qkg jml dlk rmt
+xgr: xrj tzt hfp tsq
+lrg: hbg
+qmd: cps zgh rfh phb
+mtv: cbd
+zqn: ljd vpr rsj
+tng: cnd vcl gmj xlz
+hfk: vzz ppt frc
+rll: ppk
+vdc: zrr bvm
+rts: ffp
+hhq: bqs hch qhd
+bqm: mbx ckj vmg
+jlc: bqb
+qjm: vfl cfq
+djr: crk xkr
+rrn: zxz
+vgr: bbx khf
+gtg: tpq
+jsn: vph
+ftt: nnl jcq
+mcq: xxb
+vfv: zpx zpm
+clq: nhg gbl txz
+brg: tsf jxs
+dqm: kdp qmg
+hlq: fpv cjb lzd mfb rcr
+hrg: cpl kvn
+jbb: gsz svs
+pht: dpp
+glq: qnq qgm
+mvt: kht
+mnd: bjv nhg
+xnj: hjj dtd mlq qtl qjm
+shp: vfk crc hch
+txm: zpc rdt vbk gcs ggl
+qfm: nsx skj ftt lgf
+nvt: dhz bqf ppk
+rqp: txl mhl mzq
+mvk: mht sbd
+klz: njh rzm
+btc: jxq
+dbv: trj qxc
+vsp: kfg tzf
+lpf: nkd qhg vlz
+knz: qzp gfx
+cbd: hrn
+pdh: xkk cxl ngm
+fgv: xht lhm xdt rtp
+bzx: zvc mvt ngj qgd
+tls: mbg bhb
+ggt: gbl
+lgj: tdz chv fcz qqd
+zbd: vmr xvt
+fqg: jrt qnh
+npl: qxp xfj
+mqc: ngz mgd trn
+zgh: mvq
+kmp: dmr
+tcq: xxb
+xsb: jjq
+hkm: phb
+fkc: fsh rdt qxp zfg
+lqv: cdz lmp vvq
+jgz: nmj
+hlk: dbl vpl
+fft: jhh jhf kfg kxm
+pbs: hjj
+bvz: rzd mvt xvc sgk
+nms: njd
+crk: xmd
+mjs: fxs zpz bcj
+qsr: qzv vfk sxt jxs
+tpd: rkk
+tfx: mpt pjg
+vgx: rfb crk tzf ldc
+dlp: sbk tmj
+kst: lrf
+mkk: fkt
+tkd: rvn vcq ldc pdh
+rnt: pph
+gkz: lrj vnh mqc bvd
+flr: kvf dmv cxq
+hsl: xmt tdx cjk scm
+llr: xbh cxc hpd pjg
+qnf: vrn czm kqx
+nhn: jxn kqx mfv zpx
+rlv: xtd
+svs: jnc xdt nrl btb
+qxx: xtd
+cxc: nsz hjg
+hgx: hjv cpp
+mdl: gcs pkc zcs
+bvc: fqz snv ldm xpz lcm
+qlb: txc rzm
+cmm: pbq kkf nnt
+sgh: fxh snf ngm
+qhd: qvk
+kfv: vbt krq
+sxt: btc bgg
+lhm: vqd ztv pzc kvk
+tcx: kfh jlq
+ghv: jxj rrr mcs zqg
+qpx: lzd gqr lxx hmk
+bfb: lmg ghm tjf ksf
+fxm: dmd cbd kvl bbm
+btq: dbs cmk
+cpl: dtd
+zql: sbd jkb qnh
+dlk: cps dgx
+frz: zbg dxs nmv gmg
+mtn: ckf nxh ltk gfx sxp qmk
+rnz: htm lck lzb ldv
+rmt: gqk nqn
+crl: fqh thj
+dnq: sjl zhc gqb pvb
+hzj: gqr cgg mrl
+dvs: lqr sth vds
+bbk: vsm zxz zfc vmd
+qdr: xzp skm tlj rts kbt czv
+czj: khl kxm
+lcc: pgk pks
+dgp: lxp gvv
+mcb: bnt xng sbz
+kjh: jbn lbq qnz rpf
+bxt: btb fml vfz
+vkg: lmp rjr pmb
+hkn: htc
+sxk: rck qjk
+bcr: hvk vbt hkd
+vdr: kfr
+cfk: xfh ssb
+tvm: jbk
+jhh: xlk hhb
+dcp: bgv dhz vdc dgs
+zqg: qlh xhk kcx pvd
+mlq: kqx xbd
+mbk: lxp qxp
+sfz: tcq fxf bdl xsh mbx
+ckq: llp hkm
+hbm: tst cdb
+szg: bbk bxt vzm bqm fpd
+cns: qzp mpt qzv
+mxb: lcj lmg jks rvd
+pbg: xmd gjx
+qmv: cpp fbn
+cxp: pgp sht
+thj: kdz
+qbn: mcq
+zsl: fpn trn sjv rcr dgs
+djq: kkj xnh xzr jbd
+dhz: phq kvt
+gfg: xdp
+xps: kcp cgg vnj frc mtx
+cxr: trj
+xdq: czm fsx
+kdm: kbq fzl
+tvv: mgj rqp jrr klz
+vzv: mrl cmq xrc dfg
+qkl: dgg vhd vtg bhk fbj
+qgd: gkk tdg
+dsp: nxz vmp ksm
+tsq: xrj mtl sxp
+tff: rtc ghh
+ndj: khl vsr
+ldv: pjj csm stt zhn
+bbz: qjf gch rnt zzv
+cff: rck rsj
+dzg: rnr qnq vxf gjg
+tpv: nhg xdp
+vjg: rzv nkd ppt gqb pzc
+bqd: dpz jdl btf
+khz: bjr fft qhs
+zbk: nxz qxp
+czv: hmm fbl fnk
+cjb: cft
+vtk: ckj cft bvm fbj
+rtd: pcv
+zvh: lgx fvh btb
+mjz: cdz
+bpl: hmh nbj xkr vpd qjr qct
+bkh: dpx lvd kst gjn fjv
+jrx: jkc jjz
+qlc: zcn lmt ntd hxj
+xsf: jbn fdq bjv
+jbd: ddt
+kfq: jpm vvq
+qfl: hbl hjq vnk fcn
+jxn: sls tpv cbv
+fsx: dgd
+hsk: prf htc qtb
+lgq: mrt
+vql: vpl bsc jbk
+kpg: tdf fqz rtd
+tzt: shq vhd
+mqq: gsz
+mnr: rpf brc tvd cpl pjj
+qdm: dlf
+pft: jcq gqk
+vhn: lzm gxz lcj jkb bfq zvc
+qrf: mcq gfx qzv tpd
+shs: dbd sxt
+snf: qkm
+cqg: mcs qzv mhn qxx
+hpc: qmt bqf
+mrg: cdl jsg bgb
+nrt: hlc hjn
+tnk: rll lzt mlt dqf sqb
+xsh: rlv
+fmg: lrg
+gjv: rxv kfh
+vlj: rlb kvl bsx
+fzg: ddt cbf
+gmj: zmh hdr
+cpv: zlj
+sxp: rck frj
+rgb: lbz tdc shq zgc ftr
+dgm: qhd
+fbn: nvh
+hxj: xsf kdz
+mkb: bnt kqd ctz qjf sjg
+xbj: mjz zgq tsf lml
+rjj: nzj ctz zrh
+rxh: qbn rjt qzp
+tml: xtq frf lst cvl
+jjd: bsd gjg cbd
+ggj: lxb fbg njd lvd rlg
+kfb: rjd mmq nnl lzm
+krq: kzq fxh rjj
+nxs: ttc ntd pjr hbg tgr
+xht: bsx dbd
+nsx: ptb vxd sht
+xjz: lrf ctl jbn qbv ngm hhb
+kfr: hch
+phb: gch
+lsn: qnh qtl
+dfn: nqn
+cpp: lds fdj qkm tbg
+nhj: hnf hcb lfq
+nbj: zvl
+nbm: zzg gjv cgj fsv
+dlh: tjj kvt qmt
+fhr: djr nnh llv
+kdk: xdq btq hjj
+nvq: kjs tts
+gjf: mhr
+ftq: svs cjk cjb
+jfd: chm mkk zgr zql
+ptq: jkn zvc nzj
+hpd: msc xbb pht
+drf: fkt kjr
+grd: fbj zgc lqq
+frt: nvt rlv rrn
+brs: dmv jnr pdv kqm
+psb: mqq hlc jxq qmp
+mcn: zpm mht
+bdl: lhx jxj spx
+bhk: xsh srl
+zxz: kzc ldm
+bxj: mdg lhp tbh
+jnc: zhb jfp
+tsn: kpg lzt bgg tnk
+qrc: jcm knt tmq
+hvk: mdk lrf
+srx: qmg rts dxl mdd
+mdk: bbd
+jfs: lrj
+jkz: xlk lgg jkn mzn fpq
+sxg: cfq bmd rlg smt
+lcj: dbp
+gnn: klr zrb
+klk: nqr kcq jvc hqq
+gqg: fns dpk gjs cmq
+kbs: ghh nzj cbf
+bsd: lxc zrr
+hxv: tmp zqn pfs mtn
+pbq: bhp tbg gbl
+vck: kjg fhg mvt gbl dbp bxq
+pnc: qkm njh
+ntm: lfq knq
+pgp: mhs hbg xvc ggt
+ntk: tpq
+bjr: djr npz
+qks: jcm pks shq crc
+dhl: sbf cjk
+kmc: dqm gxz pls fmg
+ldc: cgj
+ccc: lph qdk clk jrr
+qqh: sbf qhg jkg bbb
+hjg: kvr mcq ksr
+hcn: jfs xtm crc nlc
+dpx: pbs czj dbp
+qxh: hbn cxq
+zbg: lst zmf frf
+xzl: krj dmr vvq jbk
+qhs: gsm ghh
+ncc: jxq
+kfn: gnn bzc cgm cbr sdr
+djj: tfx rcr xff
+plz: mtx msc bxj
+zzh: sht
+fjv: jhr gxj
+jdl: ssg
+ljk: hhq qtm cff cpv pzc
+jbp: xsh lzd
+xpv: jbb mvn
+vxl: qjf kfh dgp vvc
+jln: zlj
+zpn: qrc fpv dmx dgg kvt
+hxn: gcn gjf
+tnm: jfd kff znj brq
+vgg: pdc bqf gjs cjb
+kzg: hcg qjd dvk
+qnk: gch pnh skm sgk zbd lrk
+bfn: dcs mfv ptq chv ltn
+vpf: tgr fpq sbz
+xmh: fgk sjv dvk mhr
+xvv: tpv dpz xlk
+jmz: zxz fhx zkg cnd
+xnl: fzx pnc pbs
+lmc: ncc kvr nvt
+lqj: jcm plz
+zkg: zhc qgm jxq lqj
+dxc: lcb ndj sgh
+qlj: chm vtb rtm dvn
+sbz: zdd
+xnd: dkn
+pks: bvm
+bvd: qtb
+fbj: vpl
+qqd: vsr
+kvn: mpf rzm
+xtq: tvv nnv tpf
+qqb: cxt
+tbl: glm
+pfs: rhs slg
+gzm: xff tzq mkh bdl
+zfm: hhf
+lml: tsr qjk mjz
+tqh: gxc zsl vvf
+vgt: fkt kht
+kxl: hkn zvh rtp knz
+snv: vhd
+clv: fzx nvv xbd
+zhs: rsj kzg pqg skg mck
+kfg: zzg
+lgf: pfm pnc lrf
+fdd: njh zpc lvd
+bld: ckq ptb bjr qtt rlg
+ksx: vxh vds jvr
+vqq: ffl qvr kkj
+qlx: bbd sfd llv
+bqf: dbd
+rjt: qps
+lzx: lhv kvl
+jqj: gjg kxc ljd njp frj nrs
+vzb: lrg txl
+cfc: mng vkh lkk lph
+zrh: mbg zfr
+jlx: mbz cld
+gcd: zvl qnf srr jdl jsq
+tjf: pmk bmd mln sfd
+nvv: zdd
+jbn: chv
+cqz: clb cxr zhc fxf mrg
+tzn: ftr gnn jrx
+xmc: dbr scl hvh
+fcg: vcl ttn fns
+hcg: ldm xdc tbl
+bdr: qnz cmm hjv nld
+dvn: qlx cfk kvf zcc
+hkd: mjq fxb
+ggm: hhs vxm nmh
+fqz: pvb
+zpz: mvq lcj nmv zsn
+mkh: pzs lqj
+zmj: qsd qtm hnh zxf
+qrp: bvm hqq sdh
+msj: hxn dmr fkd
+qfv: sth kjf vlz
+pcd: mbg gjx fzx
+mvn: zmh gfx
+dkg: qxx tst sdr qvk
+pvd: dbv
+sqb: mgd qmt
+mkv: mjt hmm knb xsf
+pmm: vlz dsh pht scq mlt
+nvz: lmc dkl tqh mrt
+fsv: lmt zvl mnd
+nvb: nnh qqb fmg gbr
+cpm: rlv mdg lgq
+vxm: jln hpc gzs
+lcb: php kbs mhl
+rjr: hmk dgm
+qmr: klz vph xzr xzp
+kbn: brc jhf fxs
+hhf: xlz
+xmt: jjv kfk
+rkp: rlv
+tqq: tfm hbm
+fdj: qqd kfh
+tpf: sbk xrq zcc
+tjb: mbk xzr zmf
+rhs: jkg lxc
+ctz: gvv xcb
+spx: kfr tcq
+xxb: qzv
+cdh: zqf dbr vfk
+jbs: dcp trj qlh pnv
+fzl: zhn rbp txc llv
+ttn: dbm
+kcl: ckv hpd qzp xbb
+mbz: trs
+rtz: mht zqd jks
+rpd: rkk vnz rnr
+vxf: bhk skz
+hnz: ksf brd ddc rbl
+krj: jnc vpl tdf
+gmh: hjv qbs
+hmm: ltt ptq
+ndp: fml scl jkc fkd
+cgh: nnh mcb btf bbd
+nhg: ksf
+vcx: ttn gbm
+qjr: gjz vbk pkc jhf
+dpv: hdh
+hvh: rgh zdx ncn
+xmd: ksf
+gzk: vmd cqc fjk dnh xhk
+lnp: dkg hbm ljz rth dmr
+bpk: mhs jcz dlp
+lbn: ddx qjd mvn mbz
+jpm: qtb kcq lzd
+lln: vzb vkm sgh cps
+mbt: btf zvv npz jbd dnr
+slk: cxr qxc xjh qhg
+bgv: kfr
+mxd: kdm xrq glz ntk
+fcz: qqd lph
+lpc: mck kcx ttn
+xpz: gtt kdt mfb
+lbz: ngz xhk
+vvq: lxx hnh
+gbr: jck nch
+cjs: mfb bvc ncc xmt
+xqk: cpv cpm rll
+dcr: mcq bqb gkz bdl
+blt: mdl mdc zcn
+mgx: ksx cgt ldm bcp
+tlm: bhb lrg xcs smj
+xcs: mjq mjl crr
+mtl: btc
+spp: kxm gjh ksm
+lzk: zfr bxq cjn lgg
+mhb: dfn kbt vqq hzr qxh rzm snf
+rxz: fkd tqq pvd dgm
+pnh: vfl fkt rtc
+vqb: hdh
+srh: lpc vxh tjx vhm fns
+pfm: tzf srr
+lhx: ljd zjn
+jjq: knt
+cft: zgc
+gdt: tbg sdv xvc jhs
+kms: nmv qvr nvv htm
+gch: rvd
+hzr: fnk dxs
+jqr: drf dqm bnf tts mql tgr cvc hvk
+dbl: gsn
+pjt: tzf dxl gjh
+dvh: mtx tvr
+ldq: bvg tnq bvd jrk
+kff: pft nrn xzr sjg
+tdx: tnk vkg vxf
+tlj: vkm lvd
+kkc: hfj jln mdg qgq
+cvs: pfs vqd jch vdc
+jhs: zcv fcn vgr
+rsj: shs
+cqc: kvr
+khf: ltn mkk qjm
+prf: bsc hhf mrl
+fpn: gjf scl
+rvn: qgf
+xxf: mjr shs zrb
+bjj: knc xnd mrl gsz
+dtm: nrn
+ljx: vrk tzt rpj mrb
+xrc: kzl mtx
+fzx: kjs vsr
+sxm: htp tmj qdk mjs
+fxg: hgx hjq
+tvr: gsz pzs mfb rrn
+mxj: xdq hsx kkf qfp dlk
+xhk: gtt
+zxf: mtv crc
+hnf: dgx
+hfc: mkk ccz
+znj: bjv xnh dnr
+cjx: rlr lzk mcb
+cgm: hmk dqs prf
+vpd: cfq mql vck
+zlk: tfx glm jvc
+qvc: cxt kdz czm dsp qtl
+vfc: hch jrx bbb vmg
+sbk: fsh
+rfl: gjv sht xnn hvx
+xdh: vzb dbp pfm brq
+khr: bbb fhx pnv
+sjv: qgq
+shh: btb djj xrj hlq qgx
+scn: pph ntk
+zpv: xhz gmj tst hhs tmp
+qtl: nrn
+lvn: kdp ssg gqz xnl
+cbl: kcp rsm
+lgx: tmp kfk jxz
+hjn: msc
+klr: jkc dqs
+rvd: ksf
+nnt: cvc vxd jrt cmn
+lbh: fdj cpp hrg vbt
+qgq: gqr
+crr: ltt nnl njd
+gdk: dsh jvc mkh
+pjr: chm mng cpp qvr ffl
+csz: qtt zbg zln
+dfl: kfv snf kbn vkh
+xxs: hfk gsn lxs
+qml: lhp gcn
+rcm: rls fxg rgr
+jrf: chv znj tbm bjr bzq
+ngj: gqz
+fnr: cgj crl hkm
+mph: kfh gjz ntm khl
+jsq: kdp gxz
+sjj: pbz kgp mfn
+fhf: bgv zqf dbv pnf
+rkb: dlf
+ktd: vpf ngj rgk
+mdc: kht fxb
+dlj: shm skz bqm pnf
+jhg: cmk mcb ggl
+pjc: rts mvk ngr
+gjk: dcs nmj jsq
+xzr: qvr
+sjb: kjf rkb
+vtx: ztv rlb xjh trs vqd
+sls: fxs txc zgr
+jfp: rcr rkp
+mfv: xbd fbg
+rth: kfk qnq kmf
+pnf: mtx
+zhz: mhs mkd dmv ssb
+dgx: ctl
+rxv: tbv jrt
+vhm: mhr rqc
+kxc: vrk frj mgd
+tzq: prl rzx kcq
+dnr: cgj
+tdf: mdg qxc vnj btc
+cdb: jcm jbk
+dkh: frc bkq ngz
+jkf: qsm hpc cft vvf
+cts: hjj tjb fjv mzq fdq
+qjd: qhd
+cch: xtd jrl tdx mrb
+xgm: vsp xrq zzh mln kfv npl qtt
+gxg: rmt jsq ssb hzr
+ltt: zvc cjn
+mgj: fsh ksm
+kvl: jlc hqq
+zfv: vph ngr cxp ntk
+fns: vnh vfz
+nxj: fpq txl mdk gjz
+hfp: kdt slg cld
+fnk: btf bhp
+txz: rmc cjn dmv qcz fnr
+bxq: thj tvd
+kbp: lgt qmt vhd dpv
+nlc: xjh vvf
+qlm: nnl hmz stt mpf jbg
+zhb: mck nvt
+nnl: dtm
+vdm: bkq bsx xpv vhm
+zcv: gxj cfq qxr bxq rjd cxt
+ppt: pvb
+lzv: bsc bsx rpd cdb
+zzg: llv
+ckj: jxs dnh
+dbs: gtg czm
+mfn: djc fhx ssn
+pkd: dvs bjj jvr jrl
+rpf: pfp gfg fxg vgt
+rrx: kgj kvv crk zbk
+tts: xnn rmc kjp
+dqg: qmv skh kzq zbk zfg
+hsf: bpk hmz dpj ttc
+xdc: rsm
+qtt: vrn kvv
+bzq: hjq nzj
+rzd: vrv qtc
+tvk: cxq jcq rgr rjj vck
+trt: bgx clq pnc nhn
+ztv: dlh
+xrj: hrn
+jrk: lcc gcn mpp
+hmh: rcz
+xbb: mkc
+dkv: sqb knc qzp vqb
+mlt: tjj
+fbl: bkv ctl
+fhs: dhl qtm dgs
+ccz: xcb nld tcx
+qmz: qdk
+bvg: qtb dpv srl
+ddz: cjx fsx blt nhj
+skm: fcz nnh flr
+hmk: prf
+tbm: fbg kpn jhf
+vmp: rnt gqk ghm
+pdc: mbz rkp zgq
+kmq: xzl gdk dvh lmp
+smh: rbp ptq zqd npz
+tqg: dnh sxk
+jhr: gtg
+kmr: vkn cld
+cbv: qmg fmm vrn
+tqk: jck mnd zmf fbl
+gmg: lgg
+fpd: bvd jsb
+kcp: knt rrr
+pnz: pgc fcz
+glz: cjk lxc
+nxm: pgk mtx hnh
+mhr: rzv
+cps: gjh
+qts: jck ngj hkm
+kgj: kbn xjz zrh
+pdv: tff rjd
+jch: klr zkg xnd bsd
+rfh: ffp ghh dxl
+qzn: dbd vqv nmg
+nrs: mkc vzm
+dxl: tbv
+cld: jxz
+ncm: pgk jvc jfs
+jvr: xmm xdt
+mmv: vvc tpf kst jhr gjx jkn
+vbk: qbs lds
+plt: dlf gqg snp fhs
+gtt: ncc
+lqr: zgc
+fjm: hvj bqd
+hsx: bkv sgk
+ljz: lmp dfr mpp
+rrp: ngp cxs sxt
+jdk: bfq qdk
+qqp: tzf sch fhr kvn
+zjn: lrj cdz
+fxf: tsf fvh pcv lgq
+rzx: cns rsm nsz
+gkx: rvd lsp sbz rts zbb
+rls: jnr kms ndj
+mbx: bqb
+gfx: dkn svv
+xqg: ttq dbm lqv xgr
+cxs: dpp
+cbb: hsk pfz kzl pmb
+hzk: vkh vnk qmz nqn
+gsd: ctx bcp qrp kfn
+njd: qbs
+hpm: kdt gcn gzs sqb lqr rxh pkd
+fhg: jsn sgh zbd
+cqq: mbg pjc ngm rgr
+phs: rbl lsn nxz hvx
+nsz: cxs glm
+skg: zhc vcx xmt
+sdv: vtb xsf hxj
+nqn: jsn
+rlg: csm
+ddx: xdc nsm qff qgn
+ztm: rbp kfh jrt ckq zpm
+ntn: hfm lzx bfv zgb
+bbx: fbg lmg
+qbv: brc nrn php
+kcq: trs lkm
+qmg: fxh ffl
+xbh: gzs sjb
+gjs: ppk qvk
+lcz: lrj mfn dgm fhx
+hjv: xlk
+zzv: zfx tbv
+zqs: gxp hcn dpk cbl dvf mlt kvr
+qrg: xhz lgt
+kjp: fkt
+npq: rhs bsc njp
+qff: hkn ksr dmd
+hrs: lgq tfm qbn mck lxs
+zgb: ksr sjj fhx
+qxr: ssg vxd
+qjf: ntm
+zfc: vlj lzx phq
+kjs: hnf ffp
+npz: mvq
+tjx: qgm hnc zfm
+hbl: kjr zzh sgh
+vph: nmj
+vtg: dkg rkp rck
+dgg: cgg fhx
+ssn: jjq
+ghm: mjl
+kgc: vmc dgd xvv mvq fkt
+kvt: vnh rlb
+hvg: qsd hfj hdd
+mjr: dvf dbl jlx
+hfm: tqs pcv
+vpg: dqs rsm hdh dgs
+ptl: qff kxc lsr xmc
+nch: gjh
+thv: xvt vfl gcs spp
+zrr: xtm
+djc: kzc kfd
+nqr: jxq
+knq: fqh
+hrn: qsd
+xxt: zdd gqz zhn
+vpr: srl kjq vqb
+kbq: gfg dgd
+tjn: kqm hdv nvv
+zhc: mtv
+xsp: pmb bdn pvd jrk
+bhv: bfv rjt crq
+jlk: zhb trj dkg
+mpp: rrr
+tbh: lhp
+cpq: bkq rck bqf
+kmf: tqg hrn vzz tpd
+srr: dnr khl
+xhz: pht kfd jlc
+ddt: pkh
+bnf: lfq
+hvj: vfv mjq ddt
+qtx: knb lbq xfh dtm
+htk: fjp lrj khb psp bhv
+njp: ppt tjj
+kkf: pls vrv
+ffl: llp
+xmm: mtl gfx
+mmq: lxp hbn lmt
+nvx: sdr ttq kzc
+lhv: glq djc mgd
+xnn: hdv
+pzs: qlh
+qcz: kjp bfq
+jcq: fqh rvn
+nrl: bqs shq
+dmx: vcl tfm nmd
+thh: vqb brg thk pmb fbj dkn
+zrb: mpp lqq
+dvb: mjz phq lqg qps
+lkk: hdv
+nmd: qgn qsd lpf
+bkm: clb pnv mkc
+vkq: zlj zdx zqg hlk
+mdd: jgz tpq
+dxk: qgf srk kjt skh
+kgp: bbb
+cdl: bpz mfb kmr
+jjh: xrc jbb hvg pmb xgj
+pkh: cbf
+dkl: hjn jxj dbm kjq
+mhs: jck czm
+tzh: bkq nqr bgg
+lbq: pmk
+cbj: rkc nqr bgg spx
+khb: zjn cld
+pmg: hfc bkv fjm gbl qmz xbd
+vcl: cxs
+tsv: tlj jhr gqk
+smj: kst rtm
+fgh: gjv vfl xnh
+bcp: nnp gsn fns
+tdg: kfg
+kbt: gbl knq
+fjp: xsb vqv fvh
+nzt: kjr lbq jdl cvl
+chr: fhf dfg jrl vzz ckv
+txl: flr
+bpz: trs vzm
+jml: xfj zzg stt lkk
+lkm: glm ngz
+dbx: nvh rcm pjj
+vxh: pzc mrb
+sjl: tpd bqm jkg hfk qhd knc
+bjv: fcn
+nnh: zfx gxj gtg
+prl: cxc mrb
+nlp: kmp gqr jcm lml
+gjg: rtd
+hnc: rtd dkh
+fmm: xng qmv
+lqg: qxx bqs clb
+dhc: mbz jlk psp
+cvc: dxc zgh
+bzc: mhn zrr kfq
+scm: glz rkc ksr
+lpv: jdk fsx csh lck mzq
+brd: zcc bcr qqb lst clb
+llp: fxb fmn
+zxh: hzr zfx rts rvd
+nsm: jbk
+jxc: dhc sjv gnn xnq mrb
+jmj: bsx cff xfr
+rqs: nbj tts vgk vkh pjj
+zgr: rvn lkk
+qck: xxf sjb tsr xqk cmq
+lsr: vpl kvr tjx jlx
+gcs: khl
+snp: dvk dpv bvm
+zdn: qfv kzl snv gqg
+bxv: rzm nsx cxm gbh
+hcb: qxr kfv fmn
+lmp: xdt
+pfz: qzp clb tmq
+svf: hdr sdh dvf sjb
+jrl: rnr bqs
+zhn: rcz
+pjq: rpd ftq xmm
+rtm: htp
+xtn: zdd qlb zzc xlk rtz
+zzc: cxp scn
+zcq: kzv tqq xff zkg ksr
+fqh: vxd
+smt: pls nch
+kkq: rll dqf lbz qml
+bdn: vnj hqq
+clk: hbn
+lth: qhs smh clv psl
+lck: qkm ccz xfh lzm
+zgx: kzc vqv lxs hnc hdd
+zfg: ggt jlq
+sdh: ltk
+xth: bqb dbl jln dsh
+fzz: glq jjv qff
+bzn: jjv tlg tzn qjd jxj
+xgj: mtr xps rrr
+vmc: chm gqk
+qnz: lqz tgr jgz
+dpj: stb drf zdd
+nmv: ssb
+lgg: zsn vrv
+mhn: zsl rsj
+vmg: qtb
+gbz: hmh pbs csm fbv
+jxj: vql xsb
+rpm: tpg qdm mcq cnd
+bkv: qfp
+kjg: hmz vvc qdk
+cvl: kjr nmj zpc xvt
+pfp: tvd nvh khf
+jrr: kfh fsh
+vkn: vzz xlz dqf
+zcs: sfd ctl
+vds: vfz
+hqv: qrg fgv zpn jsg kfq
+qkx: lzb dgp jhg zgh
+hzs: mqq vql pqg lrj
+mln: zpx
+qmm: bxj sth lqg tbh
+nmg: rck fqz tmq
+stl: xcm fpq sbk
+ddc: qlb sgh kjp
+bqg: mqc dhc ssn qrg
+cmk: hjq xnn
+llv: dmv
+xfj: xvc tls
+rlr: hkd fgh mzq
+pqx: bjj npq nkd tvm
+clb: xrc
+dpp: lxx
+rkk: mtv
+hkz: tlm kqd tdg zfr
+kdz: lxb fkt
+zvl: kqd
+brq: sht pft bbz
+dtz: nsm pgk lbx nmg msj
+sbd: pbg
+hvq: tcx tnz dbx nnv hnf fxs
+pqk: zbj spx hkn knz qhg
+lqq: qsm
+rdt: gjz
+zmh: tbl slg
+xfr: qsm rkk
+rnr: vmg
+qmt: dbd jxs
+ckv: dpk nxh
+xcm: pkh zfx fzg
+pgc: hjj gjx jtp
+shq: tst
+gvj: vgk gsm ghh
+fmn: bkv ltn sgk
+vcg: pjq xsb scq nxm zdx jvr
+fxb: ltn
+nxz: jtp
+jks: ltt qts zgh
+qmp: ljd jlc xdc hdd
+bhm: kvf vxx gmh
+zbj: qdm rlv khb kmp hlk
+dfg: jjq
+qnq: pvb ckj
+scq: vdr pqg mrt
+htc: pzs
+sbf: hdr bpz
+tlg: jxz svv lhm plt zmp
+dfr: zfm tqs jmj
+qpp: zbd hjv mhb cpl hvx dsp dlp
+mjl: tbg vsp
+ptb: fcz htm
+vgk: htm
+dtt: cxm xkk
+sch: jck clk
+kjt: xng hrg vmc pls
+pcp: skz qvk vcx vdc snv
+hhs: zrb shq
+bhp: nnh tff
+nnp: glz nmh qpj cpv
+txd: npl ggl qnh
+frc: mdg
+xhh: fgk ctx jbk frt jsg
+pjg: xtm
+thk: tbh qgn xxs
+tvq: zgc njp vsm lhp
+lrk: pcd xxt bbd stb
+ppk: msc
+tft: gzk jsg kzl jcm
+mtr: mfb gbm sxk
+scl: shs zxf
+grx: njh rbp zsn zql frf
+mhl: qlb vph llv ghh
+nxh: rlb knc
+tdc: jcm rsm cnd
+qct: xnn jbd zpx hmz
+pnd: vgk qgd jsn xkr mcn dcj
+psl: gsm txd mzv
+kzv: sth rkb fzz
+hdr: qjk
+rfb: zpc xvt nvq
+djn: jdl mzv tkd bnf svr tdz ftt mcn
+tzf: skh
+rbl: dgx hbn
+mzq: gmg
+qhj: htc hfj vdr fcg svv dqs frj lhx
+hfj: jjq
+vrq: pnc sjg gtg gqz
+vvf: xbb cmq qjk
+jnt: rrp qsm pjq vrk
+sdd: gkk bnf dtt qkg
+kxr: tvd clk gmh bzz jcz
+bbm: glq zgx cbd jsb
+vtb: cmk vfv
+rql: mrt hnh rrr mtl
+vmj: cbl hdh lqr ncm nkd
+kqm: kkj fkt
+gxp: hxn hfk tpd
+gxc: ztv jfp lcc
+zlj: xlz pnf
+cxl: fqg ldc fcz
+brz: kdm jck dfn cmn
+fbv: sbd lrg zvv pdv pnz shr
+mzn: nld ngr
+gvv: kht
+jkc: ncn
+hjx: rcz bxq fft
+vmd: qzp qpg
+pph: mdd djr
+fml: bdn tmq
+vkm: xzp vkh
+lqz: rtm lrf stl
+qmk: pfz cbj sdh
+vdt: zdx qpg sxt kgp
+rkc: gbm tsf
+dvk: shm
+rqc: mkc dqf
+gvz: kkj tsv bzq tjb cdt
+gjn: vxx xrq vgr
+trn: lqq ttn
+zgq: xnq ncn
+sjg: rjd
+ttq: hlc ncn
+cdt: lsn mdm vsr
+vsm: hfp dhl hfm
+ngp: dkh mtl dcp
+mpf: tdz cxm
+gnx: rhs hzj qxc ttq
+jxd: vdr lxc bbz xht
+fgk: sbf kfq
+dxs: srk pkc
+pmk: cgj stt
+lsp: fdd ssg rmt
+zln: txc kzq php knq
+zqd: qlb jkb csm pjj
+tsr: qnq qsd
+pfv: cfk fbn gtg kvv
+bfv: xpv zrb
+zxm: mbx rll gzs dpk
+qjk: dlf
+qtm: brg
+stb: tbv mng fcn
+lzb: gvj nms kpn
+rgr: lph hjx
+bhb: xdp rnt
+nmh: zmh kgp fvh
+lcm: fpv ssn dgm kjq
+dvf: kfd gtt
+cnc: gbm dfg cdz xbh zmh hhf
+vnk: gbr rzd kdk
+zfr: gsm
+rpj: jjd tnq skz
+tpg: tqs svv vkg trj xfr
+hhb: qfp qbs
+xhx: vrv jtp bxv rbp
+nnv: hmh phb rfh fbn
+mht: btf
+fps: mqq jxz pht tjx
+bvb: kbp qzn bxt
+qbb: khz lmg vmr qqb srk pkh
+htp: pbg qxh
+dbm: pvb
+phd: bkm dvh hxn qck
+fpv: dpk
+zmf: zfg
+kjf: pmb gjf
+cbr: rgh hmk zhb
+kjq: dnh
+qgh: qfl ngr xcb lfq
+fnp: vfk khr phq lxx
+dbr: rrn mpt
+