commit 86fdde4c253fc06fe0b2f48fc48b7d3ced5f99a8
parent 2b73ccd78fbf8ddd417250b7496bff3d7f4346dc
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date: Wed, 4 Dec 2024 08:07:57 +0100
Day 4 2024
Diffstat:
6 files changed, 376 insertions(+), 0 deletions(-)
diff --git a/2024/04/Makefile b/2024/04/Makefile
@@ -0,0 +1,24 @@
+CC=g++ -std=c++20 -g -Wall
+
+a:
+ ${CC} -o a.out day04a.cpp
+
+b:
+ ${CC} -o b.out day04b.cpp
+
+clean:
+ rm -f a b
+
+atest: a
+ ./a.out
+
+btest: b
+ ./b.out
+
+arun: a
+ ./a.out < input
+
+brun: b
+ ./b.out < input
+
+.PHONY: a b clean atest btest arun brun
diff --git a/2024/04/b.out b/2024/04/b.out
Binary files differ.
diff --git a/2024/04/day04a.cpp b/2024/04/day04a.cpp
@@ -0,0 +1,96 @@
+#include <algorithm>
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <string_view>
+#include <vector>
+using namespace std;
+
+enum class Direction { U, D, R, L, UR, UL, DR, DL };
+Direction all_directions[] = {
+ Direction::U, Direction::D, Direction::R, Direction::L,
+ Direction::UR, Direction::UL, Direction::DR, Direction::DL
+};
+
+pair<int, int> step(pair<int, int> p, Direction d) {
+ auto [i, j] = p;
+
+ switch (d) {
+ case Direction::U:
+ return make_pair(i-1, j);
+ case Direction::D:
+ return make_pair(i+1, j);
+ case Direction::R:
+ return make_pair(i, j+1);
+ case Direction::L:
+ return make_pair(i, j-1);
+ case Direction::UR:
+ return make_pair(i-1, j+1);
+ case Direction::UL:
+ return make_pair(i-1, j-1);
+ case Direction::DR:
+ return make_pair(i+1, j+1);
+ case Direction::DL:
+ return make_pair(i+1, j-1);
+ }
+
+ return make_pair(-999,-999);
+}
+
+class Board {
+public:
+ int M, N;
+
+ Board(vector<string> &lines) {
+ N = lines.size();
+ M = 0;
+ for (string l : lines)
+ M = max(M, (int)l.size());
+ cells = new char[M * N];
+ for (int i = 0; i < N; i++)
+ for (int j = 0; j < M; j++)
+ cells[N*i + j] = j < (int)lines[i].size() ?
+ lines[i][j] : out_of_bound;
+ }
+
+ string word_at(int i, int j, Direction d, int l) {
+ string ret = "";
+ auto p = make_pair(i, j);
+ for (int k = 0; k < l; k++, p = step(p, d))
+ ret += (*this)[p];
+ return ret;
+ }
+
+ ~Board() {
+ delete []cells;
+ }
+
+private:
+ const char out_of_bound = '.';
+ char *cells;
+
+ char operator[](pair<int, int> p) {
+ auto [i, j] = p;
+ if (i >= N || i < 0 || j >= M || j < 0)
+ return out_of_bound;
+ return cells[N*i + j];
+ }
+};
+
+int main() {
+ string line;
+ vector<string> lines;
+ while (getline(cin, line))
+ lines.push_back(line);
+
+ Board board(lines);
+ int tot = 0;
+ for (int i = 0; i < board.N; i++)
+ for (int j = 0; j < board.M; j++)
+ for (Direction d : all_directions)
+ if (board.word_at(i, j, d, 4) == "XMAS")
+ tot++;
+ cout << tot << endl;
+
+ return 0;
+}
diff --git a/2024/04/day04b.cpp b/2024/04/day04b.cpp
@@ -0,0 +1,114 @@
+#include <algorithm>
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <string_view>
+#include <vector>
+using namespace std;
+
+enum class Direction { U, D, R, L, UR, UL, DR, DL };
+Direction all_directions[] = {
+ Direction::U, Direction::D, Direction::R, Direction::L,
+ Direction::UR, Direction::UL, Direction::DR, Direction::DL
+};
+
+pair<int, int> step(pair<int, int> p, Direction d) {
+ auto [i, j] = p;
+
+ switch (d) {
+ case Direction::U:
+ return make_pair(i-1, j);
+ case Direction::D:
+ return make_pair(i+1, j);
+ case Direction::R:
+ return make_pair(i, j+1);
+ case Direction::L:
+ return make_pair(i, j-1);
+ case Direction::UR:
+ return make_pair(i-1, j+1);
+ case Direction::UL:
+ return make_pair(i-1, j-1);
+ case Direction::DR:
+ return make_pair(i+1, j+1);
+ case Direction::DL:
+ return make_pair(i+1, j-1);
+ }
+
+ return make_pair(-999,-999);
+}
+
+class Board {
+public:
+ int M, N;
+
+ Board(vector<string> &lines) {
+ N = lines.size();
+ M = 0;
+ for (string l : lines)
+ M = max(M, (int)l.size());
+ cells = new char[M * N];
+ for (int i = 0; i < N; i++)
+ for (int j = 0; j < M; j++)
+ cells[N*i + j] = j < (int)lines[i].size() ?
+ lines[i][j] : out_of_bound;
+ }
+
+ string word_at(int i, int j, Direction d, int l) {
+ string ret = "";
+ auto p = make_pair(i, j);
+ for (int k = 0; k < l; k++, p = step(p, d))
+ ret += (*this)[p];
+ return ret;
+ }
+
+ ~Board() {
+ delete []cells;
+ }
+
+private:
+ const char out_of_bound = '.';
+ char *cells;
+
+ char operator[](pair<int, int> p) {
+ auto [i, j] = p;
+ if (i >= N || i < 0 || j >= M || j < 0)
+ return out_of_bound;
+ return cells[N*i + j];
+ }
+};
+
+int main() {
+ string line;
+ vector<string> lines;
+ while (getline(cin, line))
+ lines.push_back(line);
+
+ Board board(lines);
+ int tot = 0;
+ for (int i = 0; i < board.N; i++) {
+ for (int j = 0; j < board.M; j++) {
+ int tmp = 0;
+ auto p = make_pair(i, j);
+ auto [x, y] = step(p, Direction::UL);
+ string wUL = board.word_at(x, y, Direction::DR, 3);
+ tmp += wUL == "MAS";
+
+ pair<int&, int&>(x, y) = step(p, Direction::UR);
+ string wUR = board.word_at(x, y, Direction::DL, 3);
+ tmp += wUR == "MAS";
+
+ pair<int&, int&>(x, y) = step(p, Direction::DL);
+ string wDL = board.word_at(x, y, Direction::UR, 3);
+ tmp += wDL == "MAS";
+
+ pair<int&, int&>(x, y) = step(p, Direction::DR);
+ string wDR = board.word_at(x, y, Direction::UL, 3);
+ tmp += wDR == "MAS";
+
+ if (tmp == 2) tot++;
+ }
+ }
+ cout << tot << endl;
+
+ return 0;
+}
diff --git a/2024/04/input b/2024/04/input
@@ -0,0 +1,140 @@
+XMMXMASAMSAAAXSXMASAMSMXSAMXMMMMXMSSSSXMAMSAMXMSXMMASAMXMMMMAXMXMSMSMXSXMXSMXXSAXXMSXSMXXXSASXSMMSSSMMXMAMSMSSSMXMAXXXXSSXXXXMXSXAXMASMMSASM
+SAMXXAMXMAMAMMMAXSAXMAAMSMSXSAXMAMAAASAMXMSASAMMAMXAAASAMAASAMXXSAAAMMSAMASMMAMASMMSAMXSXMSASAAXAXMAMMAMAMAAAAAAAXSMMMMMMMMMXMAMXMAXXMAXSAMX
+MAAAMSSMSASASASXMXMXSMSMXAAAXAXSAMMSMXXMSXSMMAMSAMMMMAMASXMMXMMMSMSASASAMASASAMAMAAMAMASXAMAMXMMMXSAMSMSASMMMSMMMXAAXAAAAAAXAMASAMAASMSMMXMX
+SMMXXAAAMAXASAMSAXXXAMXMMMMMMAMSASAXMXSSMMXASAMMXMASMMMMMMAMXMAMXXXMMMXAMMSAMMMSMMMMXMASMSMAMAXAXAMXMAAXXMXMAXAAMSSMMSSSSSMSMSASMMSXMAMMXSSX
+XXMMSMMMMSMMMXMMMMXAMMAMXMASXSXSAMXSMAMAAXMMMASMASMSAAXSASAMAXSSSMXSASMSMXMMMMAMAAAAXMMXAXMAXXXSMASXSSSXSXXMAMMMMAMXAAMXAXAAXMASXAMAMMMSAAXX
+MXMAAXXXAAAXXMXSXMASXSASMMSMAAAMMMXAMXSSSMMAMXMMASASXMMSASMXSSMAAAASXSAMXMAMXMAMXMMAXSAMSMSSXSAXMAMMAAAAXXSMSSSMMMXMSSSMSMSMMSASMMMAMXAMMMMS
+MXMXSSXMSSSMSMMMASAMASXMAXAMXMAMAMXXMXMAMMSAXSAMXSAMAMXMAMAAMAMSMMMMMMAMMXAMAMMSMSMXMAXSXAXAAMAMXSMMMMMXMASAAAAXXSAAMAXAAXMXMMAMASMSMMXXXAAM
+MASAMXXXAAAAXAASXMXSASAMSSMSMSMMASXMMAMAMMMAMSASAMXMXMAMAMMMSAMXXAAAAXAMMSSMSSXAASAMXXSAMXMMMMASXMAXMAXAXAMMMSMMASXSMMMSMSXAAXXMSMMAAMXSSMSS
+MAMASASMMSMMMSMSMSXMAMXXAAXAAXMSAXAXSASASAMMMMAMXXAXSXXSXSMASAMXSSSSMSASAXAAXMXMSMXXXMXXAXMSXMMSASXMSSSMMMSMMXAMXMMMASAMXSXMSMMXXXSSMMAMAMAM
+MASXMAXSAAMSXMAMAMAMAMXMMSSMSMMMMXMMSAXXSXSASMMMSMMASAASAXMASAMXAXAAMSAMXSMMSAAXAXMMMMAMMMXSAMSMMMAXAMMXMAMAAMXSAMASAMAXAMMXAXMAMMXAXMASMMAS
+MXXAMXMASMMSASAXSXMMASAAMAMXAAMAAAMXMSMMXASASAAAXAMASXMMAMMAMAMAMMMMMMXMASXAMXMSMMXAAXASXAAMAMAAXSXMMSMAMASMMSASASXSSSSMSSSSMMSASXSXMAXMXSAX
+SSSSMSAMXMASAMMXXAXMASMXMASMSSSSSMSAAMXMMXMAMXMMMXMASAMXSMMAXSMMSASAXMSSXMMSSSMAXASXXSASMMMSAMMSMMAXMAXASMSXSMMXAMMSAXXAAAAXAASAMASMMXSXAMAS
+XAAXASMXAMAMXMMAXAMXXMXSMXXXAMXMAAXMMMAMXMMSMSSSSSMXSAMAMXMXXMAAXASASMAMAMSXMASMMMSAAMMMAAASXSMXXXAXXMSXSASMSASMXMSMMMMMMSMMMMXAMAMAXASMMMXA
+MMMMMXSSSSSMXSMXSSXXXAAXXSSMSMAMSMXSASMSAMXAAXAAAXMASAMASMSMAMMMMMMAMMAXAMXAXAMXAMMMMXMSSMMSAAAMMMMMMXMASAXAXAMXXMXAXXSAAMAMXMSAMXSSMAMAXXMA
+ASXMMAXXAAXMMAMAXMASMMMSMMAAXXMMAXMSAXASAXSMSSMMMMMXMAMXXAAAAXAXAAMXMXMSMSSSMMMSAMXMSAMMAMAMAMAMXAAAMAMMMMMSMMMSSMSMMMMMMSAMAMMSMAMXAMSMMSAS
+XAAAMMSMMMMXMAMXXSASAAAXASMMMAMSASMMSMMMSMAXAXMSXXMAXXMSMSMSMXMSXMSMMXMAMXAMXAXXSXMASXMSAMXSASASXMSXXAXAAAAXAXAXXAAAAAAAXSAMXSAAMASMSAAMAMXA
+SSSMMMAAAXXAXSXSAMXSXMMSMMMASAMSSMAAAMAAASXMAXMXMAMMXMAAAAXXAMXMXASAAAMXSMMMSXSAMSSXMXMSAMXSASASAMAMSMMSSMSSXMASMMMSXSMSXSXSXMMMXASAXMXMASMM
+AAAMAMSSMSSMSAXMMMMMASXXMMSAMMXXAXXSMSMXXMMXSXMAXXAASMSMSMSMMMAAAXSAMXSMMASXAAMAMAMAMMMXMSMSXMXSXMAXXSAXAAAAAXMAMAAXAXXMASAXAMXSMASAMXMXAMAX
+MMMXAXXMAXMXAMMSAAASXXMMXAMMSSXSAMMMMAMXXSMAXASMSSMMSAXAAAAAAMMXMMMMAXAAMAMXMXSAMASXMASAMXAMXSAMXMSSXMSSMMMSSMSAMMSMMMMMMMSMAMAXMAMAMXAMSMMS
+XMXSSXSMSMSXXXAXXXXXMMMSMMSMAAXAXXAASXSAASMXSAMAAXAXMMMSMXSSMMMAXXAMXMSMMASXXASASASXSXSMMMSMAMASAAAMAAAMXSXMXXMAMXAMXAAXSAAXAMXSMMXMMXMAAAXA
+XAAXMASAMAAMSMSSXSSMAMAAASMMMSSMMSSMSAMMXMAMMAMMMMSMXSAXAMMAMASXSSSSSMAXXAMXSASXMAMMMAMAASAMXSASMMASMMMSAMAAXSMSMSSSSMSAMSSSMSAMXAASASXSSSMM
+SMMSMAMAMMMSAAAAAAMSMMMMMMXXSAXAAXMMSASMSMSMSSMSMXXAMXSMXMSAMMAAAAXAAMAXSAXAXXXXMXMAMAMMMSASMMAXXMAXXSXMASMMMXAXMAXXAAMAAAMAMXXSMSMSAXMAMXXX
+XSAXMASMMMMSMSMMMMXSMMXSAMXSMMSMMMMXSAMAAAXAAMAXSAMAMSMSXAMXMAMMMMMXMMAXSXMAXXMXMASMSMSMXSAMAMMMASASMXASAMXXAMSMMMSSSXSMMXSXMASMMMAMAMMXSAMX
+SMMMXXXMAMXMXXAXXXMXAAAAXAMXAXSXMMSAMAMSMSMMAMMMMMSAMXASMMMSMMXXAXMXAMXXMXAMSMSASMMAAAMAMXMSMMAMMAAAAMXMSSSMMXMAMXAAXMXMMMXXMXMAAMXMMMXAMASA
+AMAAXSSSSSXSAMMMMXAXMMSSMMMSMMSAMAMXSXMMMXXSAAAXAXMASMMMASXSAXMMMSSMSMSASMSMSAAASXSSMSMSMMXSXSASAMMMSMMAXMAMXAMAMMMSMSASASMSSSSSMSSSXSXMSAMM
+MMMXSAAAAXAMMSSSMXSAAAAAMXAAMASAMMXMMXXXAMASMSASMSXAMAXSXMASXXAASXMAAASAXAMXMXMMMAAAXXMAAAAMMMASMMMAMAMMMSXSXXXASMMAAXASXSAMXAAXSAXMASAMMXMX
+XMAMMMMMMMMSAMAAAAASMMSMAMSSSMSMMSSMMASAAMAMMMMAASMMXSMMAMMMAMSMSAMMMMMXMSMAMXMMXASMMASMSMXSXMAMXSMAMMMSAMXMASXMMAMMSMMXXMMMMMMMMXAMXMASASXM
+MASXAXSXXMASMMMMMMXMMAXXSXAAAAMXAAMAMASXMMXSASXMMXAMAXASMMSMAMAAXXMASMMSAASAMAMMMMMXSXMXXMMSMMMSASMMMSAMAXAMXMASMMMAXAXMASAMAAAXXMXMXMSXXMAM
+SAMMXSAMXMMSXMSSMXSSXXMAMMSSXMXMMMSAMXSAMXXMASXMMSSMMMAMXAAMMSMSMMSASAXMSXSMSMSAAASASAMXMMXXAAAMMSASMMMSASXMSSMMSAMASMSAMMASXSXSMASMMMMSMSXM
+MASXMXMASMXXMMAAMAAXMXMASAXAXSAMSASASAMAXMMMXMXXAAAAXMXMMSSMMAAAMAMXMXAMAMSAAASAXXXMMAMAMSMSMMMSAMMMAAMXMAXXMAMAMXSAAAMMMSAMXMASAMXAAAAXMAAX
+MAMXAAXXAMXMMMSSMMMSAMSMMMMSMMASMXXMMAMAMSAMXMMMMSSMMSMAXAXAXMXMSMMSMMSAXAMMMXMASXSSSMMAMAAXAMXMAMASMMMAXASMSAMXXAAMMXMAXMAMMMAMAXAMSMSSXSSM
+MASXSXSAASXAAAXAXXAXMASXMAXAXMSMMAMSSXMSXSASMSAAXAAAAXMXMMSSMAAXXXAAXAXMMMMXMSMMMAAMASXSSMSMASMMMSASXXSAMXSASXMAMXSSXMMMXMAMAMSSMMXXAAXMAMXX
+SXMAXAMMMMMSMSSSMMMSXASXSXSSMMMAMXMAAAMXASXMASXSSSSMMSXSAAAAMMMSAMSSMSSXSSMAMXASMMMMAMXAAAMXXMAAAMXMAASAMMMAMAMAXSAMMSAAMMSSMMAAMXSMMXMMXMAX
+XAAAMAMAMAXAMXMMAMXMMXSXMAMAASMSMAMXSMMMAMAMXMAXMMXAXAASMMSSSMMXXXXXAXXAAXSAMXXMASXMMSMSMMMAMSMMMSAMXMSAMXMASXMAXMAMAMMMSAMAMMXSMASXXAAMXMSS
+XXMSMMSXSXSXMAXSAMAXMASMSAMXMMAAAMMAMAXMMMXMMMSMMXSMMMMMXMAAAAMMMSMMSMMMMMSMXXSXXMMMAAAXMMMSMAAAXSXSAAXXMXMASASXXSMMXSAAMASAMMAMMMXASXMMASXA
+MSXMAAMMSAMMSXXMMSMMSAMXSASXSMSMSXMAXMXASXXXAAAAXXMMASXSAMMSSMMAAAASAMXMXXMASXXMAXAMMMMXXAAAMSXMXSASMSMSMSMXSXMXMAAASMMMSXMXSMAMASMAMAASXMMM
+AXAXMMMAMAMASMMXAAAAMASASXMASAMAMMSSSMSAMXMSMSMSMSAAXXASASXAXMXMSSSMMSASMSMAMXAXAXSXMXSMSMSSMMSXXMAMAAAAAAMMSXMXAMMMXXAAXASXXMMXAMMMMXMMAMSX
+XMMMSMMMSAMASAMSSMSMSMMASAMXMMMAMMAAAXSAMXXSAMXMASMMSMAMAMMMMXAMXMXAASASASMMSSMMSXXAXAAXXXAXAAAMAMXMXMSMSMMAXAMASXSAXSMSMAMXXSSMSMSASMAMAMAA
+MAAASAMXSXMXMAXMAMXAAXXAXMMMMMSMSMMSMMMASASMAMAMAMMAMMAMMMMXAXASMSMMMSAMXMAMAAAAMASAMSSMMMSSMMSAMXXSXMXAAAMSSXMAMMSAMXAAMAMXMXAAAAXAXXAMMMMS
+ASMMXAMAXXAXXSXXXMMMMSMSSSXXAAAAAXAMMSSXMXXMAMMMMMMMSSSSXAMXSAAAAAAAAXAMXSXMSSMMSAMXMAAASAAXXAAMXMMMASMSMMXMAMSXSAMMMSMMXAMXXAMMMSMSMSSXSAAM
+XXSMXSMMSSMXMAMSMSMSAXAXAMXSMSXSMMXSAAXXMASMXSAAASAMAXAAMSMAMMMMSSMMXSMMXMAXAAMAMMMXMSSMMMMSMMSXSXASXMAXXSAMXMMAMMMAXAASXSSMSXSAXAAAAXAASMMS
+SXMXAXAMXMASMXMAAAAMMMSMMMAMMAAMXMAMMMSMSAXMASMSMSASMMMMMXMMSXMXMAASAMAAMXMMMSMAMASAMXAXXXXSAMXAXSMSMMXMXXMXMSMXMASMSSXMAAAAAAXXSMSMSMMMMAXM
+SAMMMMAMMMAMXMSMMMXMASXAAMMSMMSMAMMSMXAAMXSXXXAXAXMMXSAXXXSXMASASMMMASAMXASXMAMXSASASMSMMMMSAMMXMMXMXMAXSSSSMAAASXSAMXMXMSMMMSMAMAAXAXXASXMS
+SAMASXMMXMASXMAMMXSMMMMSMSAAAMXMSMMAXSMXMASMMMSMSSSMAXMMMXMASASMSAASAMXSSXSAMASMMASAMXAAMSASAMMMSMAXXSXSXAAASMSMSAMMMASAAAMXAAMAMSMSSXSXSAAA
+SAMAMAXSAMMSMSAXXAMAXAAXXSMSSMAXMASMMMSAMXSAAXAAXAAMXMXAMAMXMXSXSXMMXSAXXMSMMASAMMMXMXSXMAXXAXXAASMMMMSAMMSMMMXXMMMXSASMSMSMSMSXMMAXMASMXMSM
+SXMMMSMSASASXSMSMASXMMMSASAMXMAMSAMXAAAXAASMMSMSMSMMXMSSMXMAMXMMMXXXXMXSSMMAMAMXMAMMSAMXXMASMMMMMASAXXAXMMAXAMXXMAMAMMSXXAXXMXMMMMXMMMMAMXAX
+MMMXAMMMXMASAMAXMAMAMSAMXMXMXAMMMSSXMXMXMAXXXXAAXMASAAAAMSSMSXXAXSMMXSAMXASXMMSASMSMMASMSXMAAASXSASXSMMSSXMSSSSSSSSXSASMMMMMMXSAMMMMAXASAXMS
+MXSMMSASAMXMAMSMMSSMMMXXMXXMAXAXAXMASAMXSAMSXSSMXSASMMMSMAAXAXSMMSAMXSAMSMMSAMXXMASASAMXAAXXSMMAMASMMAXAXAXAXAAAAAAASAMXAXAAXMASAAASASMMSSXM
+XAXAMXXAMXAMAMAAXAAASXSMSAAXMASMXMSAMASXMAXSAMXSAMXXXMAXMXSMMAXMAMAMXXAXXAAMMMXAMAMXMASXMMMAMAMSMAMMSAMXSSMMSMMMMMMMMAAMMMSXMXMASMMSAMAAAMAA
+MMSSMXXXXSXSASXSMMSMSAMASMSMMMMAXMASXXMXMMAMXMAMXSXSAMXXSAMAXMSMAMSMSSSMSMMSMMXSMXMXXMXMAASXMAMXMSSMSASXMMAXMAMXXSAMSSMXSAXASMXMAXAMXMSMSXSM
+MAAAXMMMMMMMASAXAXXXMAMMMXAAASMSMSAMXAMMSAMAMMMSAMXAMMXXMASXAASMMXMAMXMAXMASAAAXMMMSSMASXMSAMSMMXMAMSAMXMSSMSMSMXMAXMAMXMASAMAASMSXMSMMAXAAS
+MSSSMSAAAAASMMXMASXXSAMXXMMSMXAAAMASXSMAXAXXMAMXAASXSMSMSMMMMXMAMAMAMSMMMMMXMMXMASAAAMAMAAMMAMXMASAMMAMMXAXAAAAMASXMSAMSMAMASMXAAXMXAAMAMMMM
+MXAAASXSXMMMAMXMAMXAXXSAMXMAXMSMSMMMXAMMSXMXMSSSSMMAAASASMAXMAXAMASXMXMASMSXSAXMXMASMSMSMXMMAXASXSSSXSAMXAMSMSMMAMXASXMASXSAMXMMMMMSSSMSSXMS
+SMSMMMXMXSSSSMAMXSSMSASAMXMAXXAMXAXXSXMASMMAXXAAXAMSMMMAMMAMSXSASASMMASMSAAAAAMSSSXMAAAAXSXMMSMMMXAXAMMAMXMXAAXMMSMMMSXMXMMMSXMAAAAXAXAAXAAX
+XAAAAXMMAAAAXMXSAAAAMAMXMMMSMMSXMAMMMAMXSASMSMSMSAMXAXMMSAXXAAAXMMSXXAXAMXMMMSMAAAAMSMMMMMXSAAAAAMMMXMASXSSMSMXMMAAAAMXXMXAXMASASXSMAMMMSMMS
+MSMSXMAMMMMMMMASMSMXMAMSXMAXASAXSASXSASMXMAAAAAMSMMXXXXAMXXMMSMMMAMXMSSMSMSXXXMMXMXMXXXAXXAMMSMMSAXAMXXMAMXAXXASMMSMASMMAMMSSMMXXAMMXMAMXAAS
+AXAXMMXXXXAMAMASAMXXMAXSAMXMXMAXSAAAMAMAXSMXXSSXSAXSMMMSSMMMAAMSXMXAAAAAMASAMXSASMMSMSSSSMASXMMMMMXSSSMMAMSMMXAXAMAMXAAXSAAMAMMXMMMMSAMSMMMS
+SMAMAASMMSMSAMAXMSMMSMMSAMSSSMMMMMMSMSMMXXXXMAXASMMXAAAXAAMMXSAMAXSMMSMMMMMAXAMXAMXAAAXAXMASAMXASAXXAAAXXXAMMXSSXMAMMXSMMMMSAMXAMSAMXAXMAMXX
+AMXMXMAAAAASMMMXSAXMAMAMAMXAAAASXMXXAXAXSAMSMAMMMXSSSMSSSSMXAMASXMXAAMMMSSSXMXSSSSSMSMMMMXAMAMSASMMMSMMMSSMSSMAAAMXMSMMAXXAMASXMMSXMMAMSSMSA
+MSMMASMMMMXMAAXXSAXSAXAMMMMMMMMSAMXMAMMMXAMXMAMXMAXMXAMXAAMMXSAMMMMMMMAAXMXASXXAAAMXAAMXAXXSSMMXMAMAAXAAXAXAXMASMMMAAAMXMMMSMMASAMMSMSMAAAXS
+XAASASXSASAXSMSMMSMSSSMXMASXSAXSMMMSAAAMSSMXMASXMSSMMSMMSMMSMMASAAMSMSMMSMSAMXMMMMMSSSMXMAAXXXXMSAMSSSMSSMMMSSXXMXASMXMAXAXAXMAMASAAAAASMMMM
+XXXMXXXSASXXAXXAAMMSASAASAMASAXXSAASXXAXAMAMXAMAXAAMAXAAXXMAASAXXXMAAAASAXAASXSAAAXMXMMAMSMMMSMAMXMMAXXAAXXAAXMAMXMMXAMSXMSAXSASMMXMSMXXSAAM
+XSAMMSMMMMXAMXMMMXMMAMMMMASXMMMMMMMSMMSMASXSASMSMSSMSSMMMASMMXASXSSMSMMMXSMXMAMASXSMSSMMMAAAAMMMMXMMXMASMMMMSXSAMXSSSMSAAMMMMSASMSAMXXXASMMS
+XAAAASXMASXXXAXAMASMSMSXSAMXSXMXAMASMAMMMMXSAMAXAAAMXMMAMAMXMXMAXXAAAMASAMXAMXMAMMXXAMASXXSMSSXMASXMAMXMMMSXMXSASXSAAXXMXMASAMAMASMSMSMMMSMA
+XSMMASASXMXXSSSMSMSAMAAXMAMAXAMSXSAMMASAMXAMAMXMMMSSSMSSSMSXAXXXXSMMMSASASMMSAMASXMMASAMXMAAAMAXXAMSSMXMASMAMMSAMXMMMXASXSXMXSXMAMXMAAMAAAXM
+MXAXAXXMAMMMAAXAAXMAMMMXXSMMSSMAXMASMASAMMXXAMASXXAAAAAAAAAMMSMMXMASXMXSAMMMMASXSMMAXMAXSAMMASMMMMAXMXAMMMMAMAMMMXXAXMXMAMMSAMMMXSSMSMSMSSSX
+AMSMSSSMXSAAMMMSMSSXMASAAXSMAXMASMMXMMSXMASMASASXMMSMMMSMMMXAAAXXSASAMAMMMAAMAMXXMASXAMASMXXXAMXAMMMMSMSSXSASMASXXMAXAAMAMAMASXXMXAAAAMAMXAX
+SSXAMAXXASMSXXXAMAAASASMSMAMXMAMXAAXMAXAMAXSAMMSAMAXMAMXXXXMSMSMAMAXMMASASMSSSMMMMMXAASAMXMXMSSSSXSAMXMAXXMAXXAASASXSSXSAMXSMMMSAMMSMMMSMMSA
+XAMXMSMMASXMMMXAMMSMMASXMMAMMMSMSMMSMMSAMXMMXSXSMMSSMMXMXMAXMAMMSMSMASMSASMMAXMAAAXXSXMASASXAAMXAASXMAMXMMXSXSSMMXAAAAAAAXAMXAXASXXAAAXXAAAM
+MMXMAMAMXXMMAMMMMXXXMXMXMSMSAAAAMAAXAAXAXXMSMMAMXMXAXMASAMMXMXXAAAASAMXMMMAMAMXMMXXXMXXMXAMMMMMMMMMASXMSAMAMMMAXMMMMMMSMMMSMSMSMXMMSXMSMMMMX
+AXMAMXXMMSMXXMMSAMXMSASAXMASMSXSSMMSMAMMMSXAXMAMSSMMMSXSAXMAXMMSMSMMMSAMASXMASXSSSMAASXMMSMMSSSXMXSXMAASAMXSASMMXAXAAXMAMMAAAAAXAAMAMSMMASXM
+SMSSXSASAXMASMXMASMXSASXSMAMXMXAAXXMASXAAXMMSXSXSAMSMMASXMSXXAMAXAXAASASMSXMXAXAAMXXAMXMAAAMAXMAXAXAMXMSXMXSXSXMSMSMSMSAMXMSMSSSMMMAMAAMASAS
+XAAAASAMSSMASMAXSMMAMXMAMMMXASMMMSSMAXSMXSAXMAMXMMMAAMAMAMAASMMMSMSMMSXMAMXSMMMMMMSSSSMMMSXMMSSMMSSXMMXMMSXSAXMAXAAMAASMSXAMAAMAXSSSSSSMASXM
+MMMSMMAMAXMAXMAMXAMXMASAMSSMMSAXAXAMAMAMASMSMAMASASXSMASAMMMMMAMXXXXASAMXMAXAXMASAMAAAXSXXXAXAAAAXAAXSASMAAMSMMAMXMSSXMAMMMMMMXAMXAMAAXMMMAM
+XMXMXSXMXSXSSMSMMAMXSASAXAASASMMSSXMSSXMAMMAMAMXXAXAAMASMMXAMSXMMMSMMMXSXMASMMSASAMMMMMXAXSMMXSMMSSMMSASAMMMMXMMSAAXXASXMAAAXAMSSMMMXMASMSSM
+XAAXAMASMMXXAMXMMMMXMMSXMXSMXMMAXAASXSAMSXSASXSSMSMSMMXSMMSAMAMXAAAAASMMASXSXAMXSXMASAXMMMXMAXXMMXAXXMAMMXXAXXXAXMSMSMMASMSSMMSAAAXSAXXAXAMX
+MMSSMSXMASXMMMSXASMSMAMMSMMMAMXSMSMMASMMMAMXSAMXAMAMXSXXAASMMAMSMMSSMXAXAMMMMMSMMASXMXXAASXMXSMASMMMXMXMAXSAMSAMXXAASXSMMXAMMMMXMMMMMSMMMMSS
+XXAAXXASMMSAAAXXASAAMMSAMASMMXMXMXAMMMMAMXMASASMMMSMAMAMMMSMMAMXAAMAMSMMAXASAXAXMMMXSMSSMSAAASMMMAXSMXSAXXMAMAAXAMMXMXMAMXMASAASXSXSAAAAXMAX
+MMSSMXMMAASMMMSAMMMMMXMXSAMXSAMASMMXSXMASAMXMMMAAAAMMSSMSXXASMSMMMSAMAMMXSASXSMMSAMMAAXMAXMMMMAXMMMXAAMAMXMAMMMMMMMXMXSSMXXASMSMMSAMSSSMSMAS
+XAMAXSMMMMSMSAMAMSSXAXSAMASAXASAMASAMAXAXASXAASXMSSSXAAASMMAMAAXSMSAMXSAAMMMMXAAMASAMMSMSMXMSSMMSAAMMMXAAMSSSXSXSASMSAAAMXMASXAMAMAMAMAMMMMS
+MSSMMAAAMSXXMAMMMASMMMAAXAMMMMMMSXMASAMSSMMXSXSAAAAXMMMMMASMMSMMMMMAMAMMXMXAMMMMSAMMXMSAMXMAAAXASXXXMSXMSMAMAAXAMAXAMMXMMMMXMASMSSXMASAMXMSX
+XMAMMXMMSAMMSSMMMASMAASMMSMSMSAXMMSAMXSAAAAMMMMMMMSMMXSXSMMAAMXMAASAMXMXAMMMSAAXMXMMMAMXMMSMXXMASMSAMXASXMMSMSMSMXMSMXAXAAMAMXXAMXMXASMSAMXM
+SAMASAASMMAAAXAAMMSXSXMMXXAAAMMMSMXMXMAXSMMSAAXSAMXAXXXASASMMSASXXSMSXMMASAASMSSMSSSMXAXMAMMSMMAXMASMSMMAXMAMAAMMXXXASMSSXSASMMMMAMMMSASXSAA
+MAMASXSMMXMAXSSMSAMAMMAMAMSMMXAAAXMMMSAXXXAMXMXSASXSMAMXSMMMAMMSMAXXMAMSASMXMAAAAAAAXMASMMXAAAMAXXAMXAMSMMSXSMSMASXMAMAAAAMASXAMMSSSMMAMAMXS
+XAMMXMXAXMAMMAMAXMMAMMAMAMXMSXMMXMAAAMXSMMMSSMMSAMAAMXSXMAMMAMASXMSMSAMMXMMXXXSMMMSMMMAXXMMSSSMSXMMSXXXAMXSAXMMMAMMAXMMMXMMAMMSMAAMAXMAMAMMX
+SMSSMMSAMXAXMAMASXSAXSASMSAMMXSXMASMSSMMAAAAMAAMAMSMMAXAAAMSMSAMAXAAMASXAMSMMMMXAMAMAMXSXMAMAAAAMSXSAXMAXAMXMXMMXMAXMXXMSAMMMAXMMSSMMSMSMXAX
+AXAAAXXMMMSMSXMXAAXAMXMSASAMXAMSSMXAAMAXXMSMSMMMXMAXMMSMMXMAAMXMASMSMXMXXSAMXAXXMXAMXSSMMMSSSMXMAMASASMXMASAMAMXMMSMSXAXAMXSMMSXXMAMMAMAAASX
+MMSSMMSASAMXSAMXMSMMMAXMAMAXXXXAMXMMMSMMXMMXMXMSMSMSAAMAAXMMMXMAXXAXMAMXXMXSMSXSSSSMXSAAAAMXAXSXSMAMAMAASAMMSAXXXAAAMXSAMXASASXXMXSMSASMSMMA
+XAXAAASXMASXMAMSAAAXSSSMSMASMMMSSMXXMAXAAMSASASAAAAMMMSMSSXXSAMXSMXMSSSMSXAMAXAAAAAMMSSMMSSSMMMMXMASMMSMMAXXAAMSMMMSXAXAXMSSXMMMMAMASASAMXXX
+MSSMMMXAXAMASAAXSMSMMAAAXMASAAXAAAXAXAAXAXAAMMSMSMSMAXAAMXAXSASXSAAAXXAAXMMMAMMMMMMAMXXMAMXXAAMXSMXXXMXSXMASMSMAAAAMMMSSXMAMMAASMAMAMSMXMASM
+MXXXAXSSMASXMMSMXMAMMSMMMMASMMMSSMAMMSMMSMMSMXXMXAXXAXMXMMAMMAMMSXSSSXMMMMXMASMXMXXXMAMSSMSMSMSXMXMASMAMXXXAAXMXMMMSAXXMMMMSMSASMSMSMAMSSXMA
+SMMMMMAMMMMAXAXMASAMXXXMAMAXAMAXAMAXAXXAXAAMXXSXMSMMAMSAAXMMMAMMMAMMMAASAMXMXXXAMXMXMXMAMXXAAAMMSAMSMMXSAMSMMMSMMAAXXMAMXMMAAXASAMAASMSAMASM
+MAAXMAXAAAMSMSXSASASMMMMSMSMSMXSAXXMMSMSSMMSMSMAAMAMAAXXXMSXSXSAMXMAXSMSXSMSXSSXMAMASAMMSMMSMSMASASMXMXMAMAAAAAAMMSSMMAMAMMMSMMMAMSMSXMASAMX
+SSMSSSMSSXXAAMASASAMAAAXMAMAXXMSAMSAMSMMXXXAMAXXMSXMMSSSMAAAASAMXAMSMXASAXAAAMMASASXSAXXAAXXSXMXSMMAASMSMSMMMSSSMMAAXSASASXXAAXSMMMXMXSAMASX
+AMAAAAAMAMSMSMAMAMXMMMSSMAMAMAAMAMSAXSASMMSXSMSMMXAXXAAAMXMMMSSXXMAXAMAMXMSMMASXSMSAMAMSMSSSMMSASAMSMXAAMMMMAXMAAMMSMSASASXSASXXMAMXMXMASXMX
+MMMMSMMMAMAAXMXMASASASXAMXSASMMXMMSAMXAMAMMAAAAXMAMMMMMMMASXAXMMMMAMAMXMMXXXSAMXSAMXMAMSAMXAASMMSAMMAMSMMAAMSMSSMMXAAMAMAMASMMMXMAXMSAMXMAMX
+XAAMXXMSXMMSMSXSXSASXAXMMMSAXAAXSASMSMXMXAMSMSMXSAMAXXXSSXSMXXMMSMASAMXSAMMMMASAMAMXMSMXASXMMMAXSXMSMXAAASXSAAXAXMSMXMXSAMXMAXAMSMSASMSMMSXM
+SSMSAMMXSAAMAMAXXMXMMMSMSMMMMMXXMASAMMMMSMMAAAMASASXSMXMAXSMMSMAAXAXAMAXMASASXMXSAMMMMMSAMMSXSAMXXMAMSXSMMXSMMMMAXAAXSAMASXSSMMXAAAXSAMXAAAX
+AMAMASMASMSMAMXXXMASAXAAASAAAAMSMMMAMMAAAASXSAMXSAXAAXMASMMAAAMSMSSXXSMSMMSASMMASXSAAMXMASAAMMSMSXSAMSXXASAXMASXMSMSMMASXMASAAMSSSMMXMXMASXM
+XMMMAAMAMXAMXXSSMSASMSMSMSSSMXSAAMSAMXSMSMMMMMMMMXMSMMMAMASMMSAMXAMXAAAAMXMMMAMMSAXMSMXXSMMXSAAMAASMXMASAMMSXXMAXXAAASAMMSSXMSMAMAXXAMMMMMMA
+XSXMSSMMSMMSSXAAAAXSAMAMXMXMAXSMMMSASAMAMMXAAAAAXAAMXSMXSAMXMAMAMASMSMSMSAXAMAMSMXMXXAMMXASMMXSSMMMSAMXMMMXMXMMXXASXXMMSAXAMXMMXMAMMAMAAAAMS
+MMXMAMASAXSAMSMMXMSMMMAMMSMMSMMMXAXMMXMAMASXSSSSSMMXAXAMMXMMXXSXSSXAAXMASMSMSXSAAASMMASASAMXSAMXAAAXXXSMXMAMMSMSMMXSAMXSMMSAMXSSMSMXMASMSMSM
+MXXSASMMAXMAMSXMMXMMXXASXMAAXAXXMSXXAXMAMMMAAAXAAMAMSMSMAAMMMXMXMXMXMSMMSXSXAXXMSMXASAMXXAXAMXSSSMMSMMXMAXMXAMXAAMAMXSAMAXAMAAAXAAMSSMXAXXSM
+SAMMAMMMXMSMMMAXSASASXAXASMMSMMMMXAMXSSXSXMMMMMSMMASAAXMMXXAAAXXMASXMAMSMAMXMSMXMXSXMMSXSSMXSAMMXMAAXAAXSMSMASXSXMASAMASMMSSMSSMMMSAAXMAMASX
+MASMMMXMAMAAAMMMSASAMXXSXMXAXAAAAMAMAAMAXMXMAXMXMMXSMSMSASXSSMXASASASXSMMAMAAAMAMAXMASAAAXAAXASAAMMSMSMMMAASXMAXXSMSXSAMXAXAAAMAXXMMSMMMMSMS
+XAMMASASASXMMMSAMMMAMMMMMMMMMMSMXSAMXSMMMAASXSXAMSAMXXXMASAAAXSAMASAMXMMSMSMMSMSSSXSSMSMMSMMSSMMXXAAAXXAMSMMSMXMASAMMSAXMASMMMSSMXMAXAAASAMX
+MSMSASXMASAASAMXSASXMXAAASAMMXMMMXAMAXASMMASAAMXMAAAASAMXMMMMMAMXXMMMMAAMXAMXXAMAMAXAAXMXXAXXMXMAMSSMMMSXXXAXMASXMASASXMAXXXAXAAMAMXMSMXSMXX
+MAAMASAMSMXAMASMMXSASMSMMMASXAAAMSXMXMMMASXMMMASASMMXSXMMMSSXSASMSMAMMMSSSXSAMAMAMMMMMMMXSXMAXAXAAXAAAXXASMSMMXMAXXMMSXMSSSSSMXSSMSSMASAXMAX
+MMMMXMASXAMXSAMASASAMAXMSSMMXMSMMAXSMSMMAMMAMXXMXMAMAXAMAMAAMXASAMXAXAMMAMMMMSXMSSXMASASMAXSMMMSMSSSSMSMXMAMAMSSSMMSAMAAAXAAAAAMAMAAXAMXAMMS
+MSXSAMXAMAMXMMSAMMMAMAMAAAAAXXAMMMSMAAXMMMSAMMMMASAMXSMMSMMSMMMMAMAXSXSMAMASXMXSAAXSMSASMMMAAAAAAAAXMAAAMMAMAMMAMXXMASMMMSMSMMMSAMXSMSSMSAMX
+ASAMMSXMAAAAXXMXSSSSMSSMSSMMSSMSSXAMSMSXAAMXMAASASASAAMAMSAAAAMSAMXAMXAMXSXSAMSMAMMSXMMMAXSMSMMSXMSXMSMSAMMSMMMXMMSSXMMSXAAAXAXXAMXAXAAAMMMM
+AMXMAMAASMSMMSAMXAAAXAAXAMAAAAMAMSMMAAXMMMMSMMMMASAMXSXXSASMSSMMSMXASASXXSASMMAXAXAXXMXMMMSAMAXXAMXXXMMMMMMAMAMXAAASXAAMXMSMMASXSSMMMMSMMXAX
+MMMXAXMMMAAMASASMMMMMSSMSSMMSSMAMMMSMMMMXSAAMSXMAMMMMMMMAXMXAMXAAMSMMAMMMSASMSXSAMMMXSAASAMXMXMSAMASMSASXMSMSXSSMMSSSMMSAMAMSMMMMAMXMXAAMSMS
+XAASMXSAMSMMXSAMXXAAXXXAAMMAAAXXMAMMAAAAAMXMMAAMAXAAAAAMSMSXXMMXMAMAMAMAMMAMAMXMXAMAAMMSMASASXASXMASASASXMAAXAMMXMAMXMASMSXMAXAAXAMAXSMMMAAA
+SMXSAAMMXXAXXMMMMXXAMMXMMSMMSSMXSAMXSMMMXXASXSXMXSSXSMXXAAXXSMSSSMSSMSSSMMAMAMXSASXMMMXXMXMAMMMMAMAMMMSMASMSMMMAAMXSXXXSXSXSMSXMSASAMXSAXXXM
+XMAMMMMMSSMMMMAAASMSASMXSXMAXAAASXMAMXMASXMSAMXXXAAXMASXMSMAMAAAAAAAAXAMXXMSMAAXAMAMMSSMAMMSMMASXMASXMASAMMMMXAXXSMMMMMXAXAMXSAAMASXMAXMMMSX
+XMASXMSAAAXSASMSXXAMAMAMSAMSSMMMSAMXSAMAMXXMAMASXMSMMAMAAMMXSAMSMMMMSMMMSMMXMMMSASXMAAAMASXMASMSXXMAXSAMXMAASMMSAXXAAASMMMXMAMMXMASAMXMSAAXM
+MSASAAMMSMASASXXMMSMAMSMMAMAXAAAMAAMMMMSSMMXAMAXAAXAMAMMXMAAXAXXAXXSXAAAAMXXXAXMAMMMMXXSAMAXAMXSMMMAXMXMMSSXSAAMMMSXXMXAXASMMMMAMASMMAAMMXMM
+XMASMMMMXAMXAMASXAAMXMXAXAMXSMMSSMMXXAAXAAASMMSSMMMSSMXXMMMMSSMSSMMAXMMSSSSMMSSMSMSSSMAMASMMMSAMAAXSAMMXAAMAMMMSAAMSMSSMXAXMSASAMXSMSMSXSAAA
+MXMMXAXXXXXSAMXMMSSXSSSSMAMXMAAAXXSMSMSSSMMSXAXSMXAMAXXMAXAXXAMAAAMMSSMAAAASAXXAAAXAAMXMAAXAXMASMMSAAASMMSMMXMAMMXSAMMAMMSMASASXSAMAXAMASMSM
+SAMXSXSMSMASXSXXMAMAAAAAXAMMSMMXSAXXXAAAAXAMMMMMMMMSAMXMSSSSXMMSSMMXAAXMMXMMSSMSMSMSMMXMMSSSMSMMAXAMMMSAMAAMXMXSAXSAMMAMXAAXMXMMMASMMAMXMAMA
+MAXAMMMAAMAMXAMXMAXMMMMMSMSXASXAMMSAMXMSMMXSAMAXMXMMMXAAAAAAXXAXAXMMSSMXXAAXXXXMAXAAMAXXMMAXAAMMSSMXSXSXMSSMAMAAXXXAMSSMSAXMMXXASXSXMAMAMMMM
+SSMASMXSMSMXSMAXMASMXSMXXAAMMMMMXAXMASMXAAASMXMSMMSAMMSSMMMXAXMSMMXXAXXAMSMMMXSMMMSMMXSAMXXMSMSAAAXSAMMXMAMMAMASMMSAMAXMAXXAXMXMMAXXMAXAXXMA
+AASAMMAMXAMXAMAXMAMMAMASMXMSXAAXMASXMMXSMMXXAASAMASASAMAMMXSMAXAXMMSMSMSXXASXAMASAMXSMMMSMMAXAMMSMMXMAMAMAMSXSAXAAXAMXMSAXSSMAASMSMSXSSMSMSS
+SAMXAMMXMMXAMXMSMXSMMMAXMMMXMXMXSSMAXMASXMAMSMSAMMSAMXXSMXAAXSSSMSAMXAAMAMAMAMSAMSMAAAAAAAMAMSMAAMAMXSSMSSXSAMASMMXSMXXMAXAAXSASAAASAXAMAAAA
+XXXSMXSAMSSSXSSXXAAASMXSXAMAMSSMMASXMMASAMXXAMXAMAMAMXXXAMSSMMAXAMXSSMSMSMSMSXAXSAMXSMMMSXMSMMMMSSMSAMAMAMXMAMMAMXXXASXXMMSSMMAMMMMMXMASMSMM
+SAMXSAMASAAMAMMAMSSMMXAMXMMXMAAASMMMMMASMMSSSSSMMXSXMXMMAMAAXMAMXSSMXXAAAXAAXMSXSXSAMASXMASAAXXMXAXMASXMMSSSSMXMAMMMAMXAAMXAMMAMXXMMXSAMMAXX
+MAMAMXSMMXMMSMMSMAAAXXSXSMSMMSSMMXMASMAXAXAAXAAXSMMMSMASXMASMMMMMSAMMSMSMSMSMAXASMMMSAMAMXMMXMXASMMSAMXXAMMAMMAMAMMMXMSSMASAMSXMAAMAMXSAMXMX
+SAMXSAMXAMXAAXXAMSMMSXMASAAAMMAAMXSSMMXSMMMSMSMMSAAAAAXAMXAMXMAAXMXMMAXAAAXAMMMAMASXMASXMMSAXMMMXAAMAXXMMSMAMMAXASAMXMAAXMMAAXAMSSMAMSXMXAXX
+SXSAMMSMSSMSSSSMMXAXAAMMMSMSMSMMSAMASMAAAAXAAMMMSSMSSSMSSXAXAXXSSMSSSMXMSMMXSAMXMXMASAMAAAAMXSAXSMMSSXMASAMASMSSXMASAMSSMXSMMMXMAAXMMSAMXSAX
+MMMXSASAMAAAMAAXASXASAMXMXXMAMXAMASAMMSMMMSMSMAMXAMAMAAMXMXSMSMMAMAAXMAMAMASMMMSXMXXMASXMSMXAAMMMMAAMXAXXMSMSAMAXXXAXMAXXAMAAAMMSMMXASAMAMMM
+SAMXMASXXSMMMSMMXMMMMAMAASASXXMXSMMMSXMSMMAXAMAMSMMSSMMMAAMXAAAMAMMSMMMSAXMXAAAMAMSASXSXXXXSMMXAXMMSSXSMMMSAMXMASXMMMXMSMSSMMXXAMASMXSAMXSXA
+SSSXSMMMMMAMAMSMAMAAAMSMSMAMXMAXXMAMSMAAXSMSSSMXAAAAAXSSMSAMXSSXSXMXXAXMMMXXXMMSAMSAMAMMXMASXXSASXAMXMMAMAMXMMMAMMAXSAMXXAAAAXSASAMXMSXMAMMX
+MAXXXAASASXMASAXXSSSXXAMAMSMMMSMSSSMSMSMMXAAMAMSSSMSSMAAAMMXMXAAXSMAXXSASXXSASAMXMMMMAMMAMMMMXXMAXAXAASMMAXSMSMMSSMMSMXMXXXMMXAAMMMMMMAXMSSX
+MSMMSSMSASXMXSAMMXMAXMXSAXAAXAAAXAXAMAAMMMMMSAMXXMMAMXXMMSXSMMMMMAMSSMSAMAASAMSAMXSASAMMASAXXXMXMAXSXXMXSMSSXAASXMXAXAAXSSXXSAMXMXSMASMSMAMX
+XAAMAMAMXMXXXMAMXAXXSXMSXSSSMXXMMXMMMSMAAAXMMASMAXMASMXSAXXAAASASAMXAMMAMMMMXMMMAASMSAMSAXXSMXAXMAXSMSMXAMAMSMSMAMMXMXXXAAAXXMMMMAASASAAMAMM
+SSXMAMXXMSMMMSXMSXMAMAXMMMMAMSSMMXAAAXMSSSXMXAAMSMMMSXAMAXXXMMXXSMMSAMMXMAXXMXASMMSAMAMMSMAMXASMMSSXAXMXMMAMMSXMAMMXSAMMSMMMXSXAMSXMMSXMSMSM
+MASXMSMMMAAMAAAMXMASXMMSAMSSMAAAAXSMMSAXAXAXMMSAAAAASMXSAMMSMSXMMMASAMASMMMASXXSAAMXMASAXMSMAMMAXMMMSMMAMMMSMAXSAAMAMASAXASXAMMSMMASAMAXAAAM
+SAMXAAAASMSMSSXMAXAXAMXSAXAAMSSMMMAAXMMMAMMSAMXMSSMMSAAMASAAAAXAXMASAMASAAXSXMASXMASMAMMSAAMMMSSMAASAASMSAAAMMMSSSXASAMXSAXMASAMXMASAMMSMSMS
+MXSMSMSMSMMAMXMSXMMSMMXSXMSSMXAMXXSXMSAMXMASXSXMXAMXMMMSAMXMAMASAMXSAMSSMMMXAMAMMXXMASXAMMMSXXXASXSSXXXMAMSXSXXMAMMASMMXMAMSMXMAMXMSAMXXXXAX
diff --git a/2024/learned.txt b/2024/learned.txt
@@ -3,3 +3,5 @@ List of things I learned (or refreshed) with this year's AoC.
* Day 1: std::count()
* Day 2: std::sstream
* Day 3: std::string_view
+* Day 4: nothing special, some practice with classic and a weird trick
+ to assign two variables at once with a pair of references pair<int&, int&>