aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2024/day_04.f9078
-rw-r--r--2024/day_04_input.txt140
2 files changed, 218 insertions, 0 deletions
diff --git a/2024/day_04.f90 b/2024/day_04.f90
new file mode 100644
index 0000000..3be12da
--- /dev/null
+++ b/2024/day_04.f90
@@ -0,0 +1,78 @@
+module day_04_utils
+ implicit none
+contains
+ recursive function find_xmas(arr, row, col,row_dir, col_dir, search_letter) result(found)
+ implicit none
+ character(len=140), intent(in), allocatable :: arr(:)
+ character(len=1), intent(in) :: search_letter
+ integer, intent(in) :: row, col, row_dir, col_dir
+ integer :: new_row, new_col
+ logical :: found
+
+ if(arr(row)(col:col) == search_letter) then
+ if(search_letter == 'S') then
+ found = .true.
+ else
+ new_row = row + row_dir
+ new_col = col + col_dir
+ if(new_row > len(arr(row)) .or. new_row < 1 .or. new_col > size(arr) .or. new_col < 1) then
+ found = .false.
+ else
+ select case(search_letter)
+ case('M')
+ found = find_xmas(arr, new_row, new_col, row_dir, col_dir, 'A')
+ case('A')
+ found = find_xmas(arr, new_row, new_col, row_dir, col_dir, 'S')
+ end select
+ end if
+ end if
+ else
+ found = .false.
+ end if
+ end function find_xmas
+end module day_04_utils
+program day_04
+ use day_04_utils
+ implicit none
+ character(len=140) , allocatable :: lines(:)
+ integer :: io, row, col, score, z
+ logical :: found
+
+ score = 0
+ open(newunit=io, file='./day_04_input.txt', status='old', action='read')
+ allocate(lines(140))
+ read(io, '(a)') lines
+ do row = 1, size(lines)
+ do col = 1, len(lines(row))
+ if (lines(row)(col:col) == 'X') then
+ do z = 1, 8
+ found = .false.
+ select case (z)
+ case(1)
+ found = find_xmas(lines, row, col-1, 0, -1, 'M')
+ case(2)
+ found = find_xmas(lines, row-1, col-1, -1, -1, 'M')
+ case(3)
+ found = find_xmas(lines, row-1, col, -1, 0, 'M')
+ case(4)
+ found = find_xmas(lines, row-1, col+1, -1, 1, 'M')
+ case(5)
+ found = find_xmas(lines, row, col+1, 0, 1, 'M')
+ case(6)
+ found = find_xmas(lines, row+1, col+1, 1, 1, 'M')
+ case(7)
+ found = find_xmas(lines, row+1, col, 1, 0, 'M')
+ case(8)
+ found = find_xmas(lines, row+1, col-1, 1, -1, 'M')
+ end select
+ if(found) then
+ score = score + 1
+ end if
+ end do
+ end if
+ end do
+ end do
+ deallocate(lines)
+ print*, score
+
+end program day_04
diff --git a/2024/day_04_input.txt b/2024/day_04_input.txt
new file mode 100644
index 0000000..ecdae0b
--- /dev/null
+++ b/2024/day_04_input.txt
@@ -0,0 +1,140 @@
+SMMMSMSMSSSMSSSXAMXXAASXMMSMXMAMSSSXSAMSAMXSXSSSMXMAXASXSASXSXMXSMSMSXSMMMMAMMXXSMMMSXSXXAMXMAMASMSMSSMMMMSAMXXMXMASMMMAMXSSMXAMXMASMSMSMSAA
+XAAAAXAAMAAAAAMMXXMASASAMAAXMXSMAAMASXMSXSXMAXAAXSMSXXMASAMSXAMAMAMASXSXSASAMSAMXAAXSSMXASXSXXMMSAXAAAAAMAMXXAXMASMSAMXAMXMASXSAXSASXAAAAMMM
+SSMSSSMSMSMMMSXASMAXMASXMXSSMAMMMMMAMAAMMMAMMMMMMSAAXMMMMMMAMAMAMAMXMAMASAMASAMXSSMMMASMMMAXAXSAMXMMMXAMSSMSMAXXMAXMASMSSMMAMMMAMMASMMMMXMAM
+XMAMXAAXAAAMXXASAXSXMXMASAAXMASXXXMXXMMXASAMAAXXAMMMMMAMAMXMSXMASASAMXMAMAMMMMMMXMSMSAMSAMXMMMSAMMAMXXSMMAASMMMMXMAXAMXXAMSASAMAMMAMAXAXASMS
+XMAMSMMMSMSMAMMXMAMXSAXAMMSMMASMMMMSXAMSXSASMSSMMMMAAXAXASAXAXMMSMSASMMASAXAAAAAAMAXMAMMMXAAAXMAXSAMXXXAMMMMAAXXAXXMMMXMAMXAXMXASMMSXSXSASAA
+XXAXMMMAXXXMXSAMXMMASXSXMAMAMAXAXAAXMAMSAMXMAMXXAASMSSSSXSMSMMSMSAMAMASXSASXSMSSMSAMMXMAMSSMMMSAMASXSXSAMXASMMSMSSMXSAMXSMSMMSSMMAAXXAMXMMMM
+MSMSAAMSSMXSXMMSAAMXSXSXMASMMXSXSMASMSMMAMMMMMXMXMXAXXXAXMXSMAAAMASAMXMAMAXAAAMAMXXSAASXMAMAMXMASAMXMMMXSSMXXMAMAAAAMAMMMAAXAXAASMMSXMAXXAMX
+AAAXXMMXAAASASASXSXAXAXXSASAMMSXAMAXXAMSMMMAASXSASMSMSMSMSAMMSMSMXAASAMXMMMSMMMMXAMMMMMAMASXMASXMMMXSAXAXAMXSXMASMMMSSMAMSMMSSSMMXMXMASMMMSS
+MMSMMSASMMMXAMAXAXMAMXAXMXXAMAMSXMXSSXMAMAXMMXASAMAXASAAAMMSAAAXXSAMXAAXSMAXASXSAAXAXMXSMASASASXMAXMASMMSSMAAAXMAXXAAAMSXXMXMAMSMASMMXAMAMAM
+MAMAAMMAXAXMSMMMSMASXASXMXSSMAXXMASMAMSAXMSMAMMMSMAMAMMMMMXMMSMMMXMXSAMXSMMSAMAMSMMMXMAXMXSMSXMAMMXMAMXXAAMXSXSXMSMMSSMMMXMAMAMASASAMXMSMMMS
+MAXMMSXMAMMAMAMAAAMAMMXAXAAXMXMAMSMXMASAXSAMMSAAXMAMXMXMMSAMMXAXXAMXMASAMAAMAMMMAXXXAMXSAMXAXMASXSMSASMMSMMXMMMAMAAXAAAXMASASMSXMXSXMXAAXAXA
+SMMSAAMXSAMSSMMSSSMMSMAXMAMSSMSSMMXSXMMAMSASXSMMXXMASXSSMSASASMMMASASASASMMSMMASMSSSXSMAMSMSMSAMXXASAXAMAAMASASMMSSMMSMMMAXAMXXMMMMMMMSXSMSM
+AMAAAMAAMAXAAAAAAAXXAMSSSXXAAAAXXXSAMXMXMMAMXXSAMXXXXAMMMSXMMXXAXXMASXSAMXAAMSAXXAMMMMMMSAMAAXMMMMMMSMXMXSMASMMAXMAMMAAMMMSAMSSMMSAAXAXAXAAM
+MMAMSAMXSXMSSMMMSMMSMXXAMXASMMMSAMXMAXMMSXMASAMXXMXMMMMAAMASASMSAMMAMAMAMMSSMMMSMMAASMMXSAXMMMAAXMAAMMXSAMMAMASMMXMSSMXSAAAAXAAAASMSSXSASXSM
+MAMXMAXMAMAXXXAAAXXSXSMMMSAMAXSMXXASMXMAMAMXMXMMASAXMAXMMSAMMAAMAXSXSXSAMXXMXMSAXSSXSAMXSAMSMMSAMSMSSXAMASMXMXMXMAMXXSAMMSMMMSMMMSSXAAMAMAAX
+MAMASXMXMXSXAXMSXSMMXSAXAMAMAMSAMSASMAMMSMMMSASXMSMSMAASAMMSXMMSAMSAAASXMXMXAXMAXXAXMAMMMXMAAMAMXXAMXMASAMMMSAMAMSSMAMXSXMAXAAMAMXAMMMMAMSMM
+XASXSXXAMXMAXSAMXSAMMSAMXMXMMSMAMMXMMAMXAAAAMMSAAMAAXMXXAXAMAXMAXAMXMXMMXXASMSMSMMMXXSMAXSSMSMSSXMAMAMAMAMAMXASXMMAMXMASASMMXXSASAMXMASXMMAM
+SASAMMSXSASAXXAMASAMAMASMSMSMAMSXMXAMXSSSXMSSMSMMMSMSMMSAMMXMMXMMSMMXSMMAAMAXXMAAAXAXMASAMXXXAAAASASMSASMMSMSXMXXMAMXSAMAMXSXMSXSXMAXXSMMSAM
+AXMMAMXASMXMXSAMXMAMSSSMAAAASMMXASXMSMMMXAXXAAXXAAMASAAMXXMASMMXMAAMAXAMMXMASMMSSMSAXSAMMMMSMMMXMMAAAMASXAXAMMMSSMAMAXXMXMXSAAXMSMSMSAXAXSAM
+MXMSSXMXMAMSAMASASMMMXAMSMSMSXMXAMMAAXMASMMSMMMSMXSASMSSMXMASAAAXSAMMSXMXMXAAAAXAXMAXMASXAASAMAASMMMMMSMMMMXMXAAAMAMMSMSSMASMMMMXAAAMMMSMSAM
+XAMAMXXMMMMMASAMXXXAXXMMXXXXMASMMMMSMSAAXXXSMMASXAMMMXMAMMMMMXSMMXAAMMXMAXMASMMSMMMSAMXMAMMSAMASXASAMXMXAXMXSMMSXMAMXAAAAMAMMAAMMMMSMXAAASXM
+MXMASAMSAMAMAMASMMSSMMSAMXMASAMXMAXMAXMASMAXXMASXMSSMSSSMAAMMAMXXMMMAMAXAXMAXMXAXSAXMXXXXSXMXMMXXXMAMAMMMSMAMAMXMSASXMSSSMASMSSSXSAMXXSMXMMM
+XAXMMXMXASMMMMAMAAAAAAAASXXAMMSASMSMMMMXAMXMMMMXMAXAXAAXXSSSMSMMXXSSMSSSSMMAMMSASXMMMSSMASAMSSMAMMMAMASAXAMMSSMAXMMMXAXMAMXSMAAMAMMSSMXMXAAM
+SXSMSSMSMMMASMXSMSMSMMMSMXMXMASASAXXXAXSXMASAAXAAMSMMMSMAMXMMMAMXXAAXMMAAXMAMAMMMAXAAAAMAMAMAAMASXSMSASMSMSAAAMMSSXSMSMMXSAMMMMMXMAAXMAMSSMS
+XXAAAAXAMXSASAAMXXXMASXMASXSAMXAMMMXSXMXAXAXSMSASAAMXMMAMXAMASAMXMXAMXMSMMSSSXSASMSMMSSMAMSMSSMASXAMMASAAASMSMSMAAMSAMXSAXMASXAMMMMSXSAMMAAA
+SMMMMSXMMMMASMMSASXSAMXMXMAXMMMXMXMAMSSXMMMXAMXAMXSMSSSSSSSMASXMASXXXAXXXXXAAASASASXMAMXMSMAMXMAXXMMMAMXMMMAAXAMMSMMAMAMASAMXSMMAMXAASAMSMMM
+XAAAXMMSAMMMMXSMASAMXXASAMXMSAAAMAMASASAAAXMSMMXMAMMXAXAAAXMAXAXAXXMSMSMXMMMMMMXMMMMMMSXXAMAMXMASMXSMSSXMAMMMSMXMAASMMSXXMASAAMSSSMMMSAMXAMX
+SSMSXSASASXAMXXMMXAXMMXXXMAAXMSASXSMSASMMXSAXAXXMASMMXMMMMMMMSSMMSMAAASMMXAAAXAMXSASXSAMXAMSMXMAXAAXXMAMMASAXAXSSSMMMAXAAXMMMMMMAAXSXMMSMASA
+XAAXXMAXAMMMSSXASMSMMMSMMSSSSXMAMAAAMXMXASMMSMMMMASAMMMXMMMMAAAAXAAXXSXAAXSXMXXAMSASXMASXMMXXMMSSMMMSMAMSAMXXMXMAMSXMASXSMSXSASMMMMSAMAXMAMM
+XMMMMMXMMMMXAMXSMAXXMAAAMXMAAXSAMXMSXSXXMXAXAMAAXXXXMASAMASMMSSSMMSMSMMMMXMAMSMSAMMMXMXMAMAMAMAMXMMXAAAMMXSMAXAMMMSXMAXXAAXASMSAXMAMXMMSMMSS
+SAXAASMXXAXMAXMMMSMXMMSSMAMXMAMXMXAXAMMXXSAMXSSSSMSMSSXXSAXXXMAMAAXXAXAAXAMAMAAASMSSSMSSSMASAMXSXMASMSMSMXSAMMMSMAXASASMMMMXMAMMMMXSXSAAAAAM
+AASMMSAMSMMXSMASMXAMXAAMXSMAXMSXMAXMSMASAAXAXAMXAAAAMAMMMXSAMXAXMMSSMSMSXMSMSMMMXMAAAAAAASASASXMXMMXAXMAMMMMXAASMXSAMXMAAXAMMXXXXSXAAMSSMMSS
+MMMMAMAMAAXAMXMXAXAAXMMSAMMMSMAASMMMAAMSMSASMAXXXMMSMAMAAAXMMAMXXMAMXMXMAMXMAXMASXMXMMMXMMMSMMMMAMMXSXSASMMAMXSMAXMMMSSSMMSXMASXAMMMMMAMXAAA
+XXAMXSAXSXMASMXMMMMMSAMMXSAAAMSMMAMSAMMXAXAMXAXMAAAXXSXMMMMXMAMMSMMXXMAXAMMSASMXSASXSASMMSXMAMASMSAAAAXASMMAXMAMXMSAMMAXAAMASAMMMMAXAMMSMXSM
+MMXXMMAMAXSXMAXAXAAMMAMAXMMSSXMXMAMXXMXXMMSMMSAASMMSXMASXXXXMASMAASAMMXSAMXMASAASMMASASXAXXXAMXMAMMSMSMMMXSAXXAMAAMAMXMSSMSMMMSAMXMMAXAAAMMX
+AAMSMMSMMMXAMXSSSMSSSMMSXMAMXAXMXSSSMSMAXAXXXMMMXAAXAMSMAMSXSASMSMMAMAMSAMXMSMMMSXMXMAMMXMMSMSASMMAAAMAMAMMMMSASMSSMMMXXMASAAXSXSASXSMXMSAMX
+SSMAAAXAXASXMAMAAAAAAAAAMSSMMSMMXMAMAASMMMSMXMXXXMMMSMXMAMXASASXMASAMXMMAMXMAXAXXXXSAAXXXXMAMSASXMSMXSXMASMAAXAMXAAASASXMXMMMMXAMASAXAASAMXM
+XAMSSMSAMXMSMASMMMMSSMMMXAAXAMXSXMAMSMSXAAAAAMAMSMSAXMASASMAMXMASAMSAMXSSMMSASMSSSMASMXMSAMXXMAMXXXAXAXSXSMSSMSMMMXMMSMMSMSMSXMMMMMMMMMMAXXS
+SSMMAMMAMAAXSAXXXMMAMAXMMSXMSSMMXMAMAMXMMXSXMXAXAAMASXASASMAMMSMMMMMXSAMAAAAXXAAAAMAXMXXMXSXXMMMSAMXAMMXXXAAAAAMXSAXMAXMAAAASAMXAXAXAMASMMMS
+MAASXMXAXMXMASXXAMXASMMSAXSXAAAXSXMMAXXMMAXAMSASMSMMMMXSAXMAXAMXAAAXMMASMMMSSMSMSMMASAMSMAMXMASAMXAXMXXAMMMMSMMXAAMMSMSSMSMSMAMSASXSXSXSXSAS
+SSMMMMMMSMSSMMSMAXMMMMAMASAMMSMMMASMSMSAMASAMXAXAAAAAXXMXSXAMSXSSSMXASMMXXAXMAAAAAXAMMAAMAMAAAMASMSXXMSAMXMMMMXMSSSXXMAAMXMAXAMXMXXMAMAMAMSM
+XAAMAAASAMXSAAXMXSSMAXMMMMMSAMASMAMAAASXMMSMMSXMXMSSSSXSAMMXMXAMMAMAXSMMMMSSMSMSXSMSSXXXSSSSSXSMMXMASAXSAMXXAMXAMAMXMMSSMXSSMSSSMMMMAMAMAMAX
+SSMMMAXSASASMMMXAAAXMXSAXAXMASAMMMXXMMMXMAMXAMXMXXXAAMXMAMASAMXMSAMMMMAAAAAAXXMMXXXMMMAXAXXMAXSXMAXXMXMXXXMSMMMSMMMMAMMMMAXAAAAAXXAXAXASMSMS
+MAMSAMXXAMASAMXMMSSMXAXSSMSMMMXMASAMMAXSSMMMMSAMXSMMMMASMMSMSSSMMASXASMSSMXAMXASMMXXXXXMASMASAMASXSXSXMSAMMAMMAMAASMXMAAMMSMMMSMMSSSSSMSAAMA
+SMAMAMAMMMMMAMSXMAXMMSXMMAMXMAXSAMAMSAXXAAAAMSAMAMAXXSXSAMXAAXAASAMXMSAMAMAMXSMSAXMASXXMSMMAMASXMAAAMAXAAMSAMSASXMXAMSSSSXXXAXXXXAASAAXMMMSM
+AXMMXSASAAAMAMXAMSSMAMAMMAMMMMXMXSMMMSXSMMXAMXMMASXMMSMMMMMMMSSMMMSAMMMMAMXAAMASAMMXMMSXAAXXSMMMMMMMMSSSSMMMMSAXXSMAMXAMMMMSXSAMMMMMXMMMXXXX
+AAXXMSASXSMMASMMMMAMAXAMXASAAXXXASAAAMMSAAXSSMSSMSAXAXAMMSSMXXXXAAMMSSSMSMXMASASAMXXXAAXMSMXXMXSAAXXXAAXMXAMMMSMAXSXMMMMAXMAXMAMXXXXAXASAMXM
+MSXSAMAMXMAMXSAMXSXMMSMMSASMSMMMAMXMXSASMMMAAAAMXSAAXSSMAAAASMMSMMSAAXXAAXMMMMXMAMXMMSSMMAMMAMXSMSMSMMSMMXXXAAAMMMMMSAMMSSMXSXMMMSMSXSASMAMA
+AAAMSMAMXXXASMMAXAXMXAAAMMMXXASAMMSMXMAXASXSMMMSAMMMXAXMMMXMMAASXMMMSSMSMMSXAMMMSMSAXAAXMAMMAMXMAXAMXAXAMSMSMSMXMASASMSAXMMMSXMAXAXAAMAMXXAM
+MMSMXSSXMMMXMAAMAMMMSMSMMXMAMAXXSAAAXXSMMAMMXAXMASMSAMXMSSSXMSMSAXXXAXMAMSMSASXMAAXSMSSMSMSSMSXMAMAMMXXAMAASXMAMSASXMAMXXAAAMASMSMMMMMMMSSSM
+XSAXMAXAAAMAMXMSAXAMXAAXXASMMSMMMMXXMAMAMMXXSASMMMXMAXMXAASAAXMSAMSMMSSXSAASMAASMSMMMMAAAAAAAXXMAXAMMMSSMMXMAMXMMMXMMXMMSSMMSAMXAXAAXAXSAAAX
+XSASMAMSSXSASMMSAXSAMXMXSASAAMASASAASASAMXSXMASMAMMSSMSXMXMXSMAXAMXXAAMMSMMMMXXMXAAAXMMMMMMMMMSSSSMSAXAMXSSMMMSXXAMSMSMXAAMMMAMXMMSMSMSMMSMM
+AMAMMXMMAMXXAAXMXMXASMAMMXSMMSXMAMSXMASXMASAMAMXAMAMAAMMSXMAAMMMSMSMSXSAMXMXMSAMSSMMSSXMXSMXSXXAAAXAMMASAXMASASMMMXSAMXMSSMAMASASAMXAMXXAXXX
+XMAMSXSMMMMMSSMMAMXAMMAMXAXXXXAMAMXXMMMMMXXAMMSMSSSMMXMAMAMXMASXXAAXAMMMMXAASAMMAMAAXAAXAXMASMMMMMMSXSMMMASAMASAMXAMXMAAXAMXXMSAMASXMSMMMSMX
+XSASMASXAAXMAMASASMSMSASMMSSSMMMSXMMXMAXXMSSMMSAMAMXXMMSSXMASMMAMSMMMASASMSXSMXMASMXMMSMSXMXSAXMAMAMMMXMXAXASASXMMMXAMMMSAMSSMMMMMMMAAXAXAMM
+XSMSMAMXSSSMSSXSSSXMASXSAMAAAAMAXAMXAMMSSMAMAAMAMMMMMAAAMAXAXAMAMAMXXXSAMAXAMXAMXMMASXAAXASMSAMSSSSMSAAMMMSMMXSXXMMXSXSAMAMAAXAXMXAMSMSSSXSA
+ASASMXSAMXXXAXXSAMXMAMMXAMMSMSMAMASMSSMAMMAXMMXMMXAXSXMMSXMMSMSSMMSMSXMMMSMMXSASAASASXMMMMSASMAXXAAAMSXSAMAXMSMXSAAAMXMASXMXSMMSSMMXMXAAAAXX
+MMAMAAMMSSMMSSMMXMSMMSMSSMXMXMMMXAMAXAMAMXMSSSMMMMSMMASASMSXAMAMAXMAXAAAAMAMAMAMXXMASXMASXMAMMXSMMMMMAXSXSAXMAAAXMMXSAMMMMMAMAXAMASAMMSSMMAM
+XMAMXMXXMXAAAXASAMXAXMXAMSXAAMASMMMSMSMMMAMAAAAXSAMASXMASAASXXAXSMMSMMXMXXMMAMAMSSMMSASASAMMMXAAXAAXMMMMAMASMMMMSXAASAMXAXMASAMMSAMASMXAAXXM
+MSSXMXXXXXMMXSSMASXSMSMMSXMMSMASAMXXAMAMMAMAMSMMMMSAMSMAMXMMMMSMMAMMAMASXSXSMSSMMAAASMMXMAMXMMXSSSSSSXAMAMAXMSAAXMMXSAMMXXSASMSXMMSMMASXMMSA
+XAAASXSMAAMAXMMSXMAXAAXMAMMAAMXMAMXMXMAMSXMSXXAXAAMMMXMAXAXAAXMASMMMAXMSAAAXMAMASMMMMXXXSMMSMSAMXXAAMSSMXXXXXXMASXXMMAMXXMAXMMMAMAAAMMMXSAMM
+MMSMMAAAXMMSSMAXXMXMSMSMMSMASMMSMMMMAMAMMAAXASXMMMSAMMSSSMSSSSSMMAASXSMMMMSAMSSXMASXSMSMAMAXAAMXMAMXMXMASXSXSXXMAXMMSXMMMMMMMXSXMMSSSXMXMASX
+MXAAMSMMMMXAAMMMMMMAMXAAXAMXXXAAMAASXSASXMMMMMXAXXXASMAAAAAAXAAXMXMXXAAAXXMAXAMMSMMASAASAMSMSMSMASMSSXSAMASASMSMMASAAMAMAAAAMXMASXXAXAMASXMX
+SSSMMXXXAXMMMMAAMAXMASMSMSSSMMMMSSXSASASXMAXAMSSMMMMMMMSMMMMSSSSMSSSMXMMSMSSMASAAAMAMAMMXSXAMMAMMXAAAAMMSXMAMAAXXAMXMSASMSSXSAXAMAMXSMSASASX
+AAMXSXMSSSSSMSMSMASXASAMXAAXXAMXAMXMAMXMAXSXMMAAMXASXSXXXXAXAAAAAAAXMMSMXAAXXMMXSSSMMXMMXMMSMSASXMMMMXMAXAMAMSMSMMSAXMASAAMMSXSMSXAMMXMXXAMS
+MMMXMAAAXAAAMXAXMAMMMMAMMMSMMSSMAXXMXMSSMMMAXMSSMSMSAASMXSXSMMMMMMSXSAAXMMMSMMXXXAAAAMXXMXAAXMAMMAMXXSMMSSMAMMAMAXMMSMMMMMSAXXMAAMSMMASXMSMS
+XXMASMMASMSMMMMXMAMAMXAXAXXAXAAMXMMSSMAAAASAMXAAXAAMMMXSASAMXXXXXXXAMSMMXMASAMXMMSSMMSASAMSSSMAMAMSSSXAAAASASMAMSXMASXSXXAXAMMMAMXMASASAAMAS
+XAXXXAXAMXMAXAMMSSXMASMSMMSSMSAMXAXAASMSMMMMAMSSSXMMAXAMMMAMXSMSSSMXMAXAMMASAMAAMAMXAXXXXAMXMMSSXSAMXXSMSMSXMMAMMASAMMXAMSXSAMAASASAMASMMMAM
+SXSMSXMAXAXSMMXXAXMAXSAMMAAAXXAMXMMSMMXMASXSSMMMMAAMSMMMASAMXAAXMASMXMASMMMMAMXSAMXMSSXMXXMXAAMAXMASMXXAXASAXSAXSAMASMMAMAAMSMMXXXSAMXXAAMXM
+XXAMAMXSMSXMASMMMXAMXMMMMMSSMMMMAMMMXXXXAMXAMXAAMMMMXASMMMAXSMSMMAMSAMXMAAMSSMAXMASAAMAMSSSXMXMXMAMXMXMAMAMAMSAXMMMMAMSMMMXMAMXSSXMASASXMMSA
+SMMSMSAXAXAMAMAAAMAMAMMXAAXXAASXXSAMMSMMMSXMSXMSSMMMSXMAXSSMXMAMMXMXXSXSSMXAAMMMXAASMMAMMAMXMMSSSMSAMMMMMMMXMMXMMXMMAXAXAMASMSAAXXSXMXXAAAXM
+AAXAAMAMMMXMSMMXMASMSXSAMXSMSMSAMXMSAAAXMAXXXASAMXAAXMMSMAXXAXASXMSMMMAXAXMXMMMSMSMMXSMSMAMASMMAAAMMMAAMASXSMMSSXSXSSSMSSSMSAMMSMAMAMMSMMMSX
+MSMMXMMMSSMMXAXXXXXAMAAXXAMMMMMXMSXMXSSMMMSMXXMASMMSXMAAMAMXSMXSAXAAAMSMSMMSAMXAXXAXAXAAXASMMAMMMMMSXSXSASAXAAXMASAMAAXAAAMMXMAMAAXAMXAAASXM
+XMAXXXAAXAAAMSMMMMMAMMMSSMXAMAAAXXAXXMXXAAAASXSXMMAXAMSSMASAMMSSXMSSMSAAXAAXMMMMSMSMSMSMSXSAXAMXXXASAXMMAMASMMSSMMAMSMMMMSMXSXMASMSSSSSSMMAS
+MMMSMSMSSSMMMAMXAASXMXAAAASMSMSSSSMMSMAMMMXSAAMMMMMMAMMAXAMMSMMXXXMAXSMSMMMSSSSMSMAMXAMXXASXMSSMMMXSMMAXXSASAMAAXSXMAAXMSMXMXMMAAAXAAAMAASAM
+SAAAAAAXAMMSAAMXSXSAXMASXMMXAAAMAXMAMMAMAASAMXMAAMXSSXSAMXSXAMXAMSSMAMXMAMAAAMAMXMASMMMSMXMAMAAAXMASXSXMMAASXMSSMXXSSSMMAAAMAXMAMXMMMMSSMMAM
+SMXSSMXMAMAXMXMXXAXAMXAMMSMXMSMAXXMSSXSSMXMAXSMXSSXAAAXMASXXSSMSMAAXMAAXAMMMMSAMASMSASAAMAXAMSSMMSSMMAAAXMMMMXXAMMMMMMMSSSMSASAMXSXXAXAMXXAM
+MSMXAXAMMMMXSSMSMAMSAMXSAAMSAMXMMMMAAAXAMASMMSAAXAMMSMMASXMAXAAXMXMMXMSSXSMSMSXSMSXSMMSASMSXMAMXAMAMSMAMXMAXAXSAMXAAAAAXXAAXASMMAXMSMXMAMSSS
+MMXMASMSMASAAAAAMAMXAXXMXSSSMSAAXMSMXMMAXMASAMMSMAXXAXSXMAMSMMSXMASASAMAXAAAAMXSASASXAMXMMAMMMMMXSMMAXAAMASXSASAMXSASMSSMSMMXMXMAXMASAXMXAMX
+XSAMXMAAMAMMMMMMXXMSSMMSAMXMASXSXXMAXXSXMXXMXMAAMMMSMMSASXMMXXAMMAMAMAXMSMSMSMAMAMAMMASASMASAMXSXMXSSSSXSAAAMXXXSAMXXXXAAXAXSXMMSMMAMMMXMAXX
+AMXSAMXMMXSAXMXSSSMAAAXMASAMMMMMMSXAMMXMMSXMMMSSXSAXXASAMMMAMMXSMASMSSMXAAAXMMXSAMMMMMSAMSXSASAXAMAMAAAAMMSXMXMAXAXMMSSMMMSMSAXAMMMSMSMSXSXX
+MSMMASXSSXMMSMAMAAMSMSASMSXSASAMASMSSXAMASXMAXAAAMXSMXMAMAMASMAMMMMXAAXSMSMSXAAMAMMXMAMXMXXMAMXXXMAXMMMMMMMMMXSSXSMAAAAXAXMASXMASAMXAAASAMXS
+MAAMAMMAMXXAAMAMSMMASXXXASMSASAMXSAAAXAMAXAXSSMMSMXMXMXMSMSASMMXASMMSMMXXAMXMMMXAMXAMMSSMXSMXMSMXSSSXXASXSAMXAMXAMSMMSSMMAMAMAMXMAMMMMXMAMAX
+SMSMSXMAMXMSSSMMXXXMSXSMAMAMASMMAMMMASMMMSSMMXMAAMASAMAAAAMASAMSAMXAXAMMMSMSXAXSXMMSSXAAXAXXAAAAAAXMXMMAASMMMXSMAMAXMAMAXXMXSXMASAMSASXSMMSS
+SAAAXASASAAMAAXSAMSXSASMAMXMAMASXXASXSAAAAAAXSMXXSXSASMSMSMXMAMMSMMMSSMAAMASMMMAASAMXMSMMSSXMMMMMMSMMMAMXMASMSAAAXXMMMSSSMSAMXSXMAMSASAMXAAA
+MSMSSMMASMSMMMMMAMXAMAMMXSXMMSAMASXSASXMMSSMMXAXXMASXMAMXMXAMAMMAMAAMXSSMMAMASAMAMXSXMAAAAMXSSSXAXAAAMASAXXAXSMSMSAMXAAAAAAXMXAASXMMSMMAMMSS
+XXXAAAMAMMXXMXMMAAMXMAMXAMMSMMAXXSAMMMAXAMAXSMMMAMAMSMXMAXMSSSXSASMSSXXXAMMSAMMSMXAMASXMMSMMMAXSASMSMSASMSSMMMXAAMAMSMMSMSMSMSMXMAAXAXMASAAM
+SMMSSMMAMAAXMAMXSSSMSSMMMSAAXSSMMMAMAMXMXSAMXAASXXXMXMASMSMMAAASXSMAMXASXMAMAXXAXMASAMXSXXXAMXMAMSAMXMASXAXMMSMMSMSXXMAXXMAMMMXMAXMMMMSAMMSM
+MAAAAXSSSMXSSXXAMXXAMXSXMAMXXAAAMSMMMSMMMMMSSSMSMMSMASASAAAMMMMMXXAAXMMMSMXXMMSASXXMASASASAXMMAMASXMXMMSMMXSAXMAMMMMAMXSMMMMMXMASAMXXXMAXXAM
+SSMSSMXMAMAAAAMSMMMSMXAXMAXXXSMMXAAAAAAAAMAAAMXMXAAMAMXMMMXSXMXXMMMSSSXAXSMMSMMMMMAMXMASASAMMMXSAMXMMSAXASAMMSMMSASXMMAMXAMMSXSAMAAMASXMASXS
+XAXAMAAMAMMMMMMXAAAAMSMAMMSSMXSSMSSMSXSMSSMMXMAXMSSXSSSSSXASAMSAMXAAMXMAXMMAAAAXXSSMMSAMAMMSXMXMXSASAMMSXMASAMXMSXMAMSASMXSAAMMMXMMMAXASXMAA
+SXMXSMMMSXMMSASXSMXMMAXMXAAMAMASAAAAAXMAMXMXASMSXAAXXAMASMXXAMXXXMMMMAXXMMMSSSMSAAXXXSAMXMASASXSXSXMASAMASMMXMAMMMSSMSASMAMMMMAXSSMMMSMMAXMA
+AAMASXMAMAAAXMXAXAAXXMSSMXMMSMAMMMMSMMSAMAAMMMASMMXXMAMAMXXMAMXSAMASMMSMSXAXAMASAMXMASAMMMMSAMAMXMASAMASXMMAASAMMAMXAMXMMSSSXMMSAAAAAAAXXMXM
+SXMASXMASXMMSSMXMMXSASAMXSAMXMAXSAMXAXSAMAXMAMAMASAMSMMMSAXSAMXMAMASAAMAMMXMXMAMASASAMAMXAMMMMAMXSXMMSAMAAMSXSAXMAMMSMMSXMAMXAXAXSMMSSSSMMAS
+MAMASMMASAMXAXXXXAAXXMAXAMXMSSMMSAXMXMSAMASXSMMSAMAXAAAAMAMXASMSAMSSMMMSMMMAMMSSMMAMAMSMSAMAMXMSMMMAAMMSSSMMAMXMSAMXAAAXXMAMXSXMMMMMAMXAASAM
+MAMAXAMASXMMASMSMMSSXMAMSSMMAAXASMMSMMSAMAMXAAAMAMSMSSMSMMSXAXXXXMAXXXAXAAMSMAAAMMXMAMXAXXSASXXAAAMMSMMAXMASMXSXMAMSAMXSMSSSXMXXAXAXMMSSMMSS
+SMMMSXMXSMXSXAMMAAAXXMAXMAMMSXMMMSAAAMSXMXSMSMMSSMXAXAMXMAMMSMSXSMXMAMXSSMSXMSSMMXMAXAMAMMAAMASXSXSMAAXMAMXMXAAASAMXSXXXAMXMASAMXSSMXXAAXAMX
+AAAXMXSAMXMMSMASXMSMSSMMMAMXXASAMMXXMAMXXSAMXAXAAMMMMSSMMMSAAAMAXXMSSMAMAXAXXXXAXXMSSMMMMMMMSMAAXASXSMMMSMSXMASAMXMAAMSMSMAXMMMSMAXSMMSSMSSS
+MSMXAMXASMMMAMXMMMXMAAASMMSASAMAMASMSMAXMMMMSXMASMAXMAMAAAMXSMMXMXMAXMMSAMMMMMMMAMAAAAAAAXXMAMMMMMMMMASXAAXXMXXASAMXSAXMAXMXSAAMMMMAMAMAMXAX
+MXXXAXSXMAXMXMAAAAMMSMMMAAMXSXMAMXSAAXMSMMAAMAMAMXSSMASXMMSAMXSAMAMAXXMXMMSAAASMSMMSSMMSMSASASXSXMAXMAMXMMMSMAXASXSAMXSXMMMAXMMXAXSMMMSASMMM
+AAAMXMMMSMMMSSMSMXSAXMSMMMMAXXSSSMMMMMAAAXMMSAMSXMMMXXSMAMMMSASMXAMSSSSSMASXMXSAXAMMAMXAMXAMASAMMSMSMMMXSAAAMAMAMASXMASAAAMXSSMSSXXXAMAMXAAM
+MMSXMAXAAXAAXAXXXSMMMMAMXAMXSMMMAXAASMSSSMMMMXXXASAMSXMMMMAAMMMMASXMAXAAMAMMXAMXMMMMAMMXXMMSSMAMAAMXMAAAXMSMXAMAMXXAMASMMMSAAAMAMXSAMXSSSSMS
+AXAASMMSSSMSSSMMMSAAMSASMSMXAMASAMSMXAMMMAAXMMSSMMAMMMSAAMMSSSMSAXASMMXMMSXSAXAAXMASASXSXSASASXMSSMAMMMMXXAMSMMXXMMMMAMAAAMMSMMASMAAMXAAAAAX
+MMMMMXAXAAAAXAAAASMMXMAMAAMMSXAXXAXMMSMSXSMSXAXAASXMAAMMMMMXXAAMASAMXAXSXMAXMASAXSASXSAXAMXSMMXMMXMAXAAXXMAMXMASASASMMSSMSSMXAMASASXSMMMMMMM
+SSMSSMSMSMMMSSXMMXAXAXAMSMSSMMSSMSAMXXAXAAXXMMSSMMXSMSMSSSSMMMMMMMMMMSMSAMMMXXXAXMASMMMMXMAMXXSMXXSMSMSSSMAMMMXSASASXMAMXAAXSAMASMXAAAXMAMAX
+AAAAXAAAAXXXXMXSASXMMMXXMASAXAAXMAMXMMAMSMMXAXMMMSASMXAAAMXAAAAXXAAMXMAMMMXMXXMMMMXMAAXMXMSSMMASXMAXAAXAXMASXMASXMAMMMASMSSMSAMXSXMXMSMMSSMS
+SMMMSXMSMSMMSMMMASMAXSSMSSSMMMMSMAMAXMMMAAXXSXXAAMMSAMMMMMSSMSMSSSMSAMSMSSXMSSMAMMXMXAMXAXMAASAMMSMMMSMAMSMSAMASXMXMASAMXMXMSAMXMXSMMMAMAAAS
+XAMASAAAXAAMAAMSAMXSMXMASAXXAAMAMASMSXXSSSXAXSMMSSXMXMXMMXXXAXMAMAASMSMAMAAXAXXAXXAMXAMSSSMSMMASAAXAAAMXMAASXMASXMAMMXMSMSAXSXMAMAXAAXAMMXMM
+SXMASMMMXASXMSMMAMXMXMMSMMMMSXSAXXAMXAMMAMMAMAXMAXAMMSXMXSSMSMMASMMMXXMAMSMMMSSSMSAMAAMAAMXAASMMXSSMSXXAMMMMAMASASASMMMAASMMMMSAMASMMSMSSXAA
+XXMASXAAXMXMAXMSSMMXAXXMAMAAMAMAMSAMMSMMAMMASMMSSSMMAAAMAXAAAAXAXMASXXSAMMAAXMAAXXAXSXMMSMSSXMAAXXAAAASMXXASXMASAMXAAMMMMMMAAMXAMASAAAAAMXXM
+MXSASMMSSMAMMMMAAAASXSMSMMMMMAMAMSAMAXASMXSASXAAAAMMMXXMMSMSSMMXSXXMSXSMSSSMSMMXMMMMMAASAMXMASMMSSMMMAXAASASASXMXMMMASAXAASMSMSAMXSMSMSMSMSX
+SAMSSMMAAMAMAAMSMMMMAAAAAASMSSMMXSAMXSAMAMMXSMMMMSMSSMSAAXXAAASAMXSXMMSAAAXXXMMSMAAAXSMMAXSAAXAAAXMAMXMSMSASAMAMXSXMAXMMSMMXAASAMXXAXAMASAMM
+MXMAXAMXSXMXSXXXSXAMSMMSSMSAAAXMAXAMXMAMMXSAMMSSMAAAMMXMSSMMSMMASASAMAMMMSMSSMMASMMXXAMXSMAMXXMMSXSASAAMAMXMAMXMASMMMXXAMAXMMMMAASMAMSMAMAMA
+ASMMMAMXXASMXMASXXXXMAAAXXMMMMMMMMSMAXAMXXMMXAAAXMMMSSMMMAMAXAXMMASXMAMAXAAMXAMXXXAXMASAAAMMSMXAMASAMMMXXXMSSMAMASASAAMSSMXSAMSXMSXMAXMXSXXX
+AXAAMSSXSAMAAASMAMSSSMMSSMXAAAMXMAAXSSMMSAASMMSMMXXSAMAAMAMXSAMSMMMASMSMSMSMSMMSXMAMSXMXSMXAAXXMAMMMMSXMXSAAXSAMAXMMMMSAAXASMMMMMMAMAMMMMMSM
+SSMMXAAMMAMSXSAMXMAAAMAAXMSSMMSAMSSMMAAAAMAMXMAMSSMMASMMSSSXMXMAASMMMAAAAAMXSAAXAMXXAMXMXMSSMSSSMXXSASAAAMMMMMMMASXMXMMMSMMXXAMAASAMASMAAAAA
+XAAAMMSMMAXXXMASXSMSMMSSXXAMAMMMMAAAMMMMASMSSMASAAASAMXAAMXAASXSXMAXXSMMMXMASMMSSMSAMXXAXMAMXMAAAAXMASMMMSMMAXAXMAXMSSMXAMXSXMSSXSXSASXSMSSS
+SSMMXAAASXMSASMMAXXXXAXXXMAMMMAMMSSMMSXXMXAAASMMXSMMMSMMMMMMMMMMMSMMXMMMSXMASAAAAAXSXMASMMASXMSMMMSMAMAMAMXSASMSMSAXAAXXXSAMXMAMAXAMASAMXXXM
+XXSXMMSMMAASAMXMXAMMMMSMSMSMMSASMMMMXMAMMMMSMMXMAMXAMXASMSMSSXAAAAAXXSAASAMASMMSMMMMXAMXASAMXMAMAMAMASXMASMMAMAAAMMMSSMSMMASMMAMSAMMXMMMMMXM
+XASXSMMXMMMMMMXXSXMAAMAAAAXAASXSMXAXAMXMXMAMXMAMXMSSMMXSAAAAMSSSSSXSASMMSAMXSXMAMAAXASXSMMASAMAXASMSMSASXSMMMMSMMMXAXAAAASXMASAMXAXXAAAAAXMA
+MSMAMAAASXMXSXSXAASXSSMSMSMMMXMSASMSMSMMAMASASXSAAMMASXMMMMMMAXAXAAMAMSASXMMSAMXSMXSMMAMASXMXSXXMMAAXSMMMMAAAMAMXXSSMMSMMSASMSXSMSMAMSSSXSAS
+SAMXMMSMSASXSASMMMMAMMAAAXMASXAMXMAAAAXSAMMSAMASMSMSAMAAXXSSMMSMMMMMMMMMMAMASASAMXASAMXMAMXMAXXASXSSMXSAASMMMSAMXAAAAAXXAXMMAXAAAMAMXAAXMAMX
+SMSMMXMASAMAMAMXSMMAMMSMSMMASMMMMSSMMMXSASXMXMXMAXAMXSMMMMXAAAAAMAMAAAXAMAMXSAMXSMMSASXMMSXMAXSSMAAAAXXSMSAAAMAMAMSSMMMMAMSMXMMMSMAXMMSMXMAS
+MXMAXAMXMAMXMAMMAMMSXXAAXXXAXAAMAXXMXXXSAMMMAMAMMMSMMMXSAMXSMMSXMAXSMMMXSSSXXMMMXMASAMASAMXMMMSAMSMMSMXMMMMMMSAMXMAMMSMMMXSAMXAXAMMMSAMXXSAX
+MAMXSMXMMXMAMXMAMMAMAMMXMMMMSSMSMMAMAAXXMXASASASAAAAAAAMASAMAAAAMSMXMMSAXAAXXMASAMMMASAMAXSAMXSAMAXAXMASAMXAXSXMASXMASXMSAMXXSMXSASAMASAMMMS
+SMSXAXAMXSSSSSSSXMAMAXXAMAAMMAAAMSAMASAAXSXSASASMSXSMSSSSMXSXMMSMXAMAAMMMXMMXSASXSXSAMXSAMXXMAMMMMMMMMXXAMMAXXASAXAMASAXMMSMMSXSXMASMXMASAMA
+AASXMMXSAAAXAXMXSMMXMMMSXSMSXMMMXXASXMXMMMXMMMAMMXAMAAMMXAMMMSXMAMAMMMSXMSMSAXASAMXMXSAMXMASMSSMAXAMSXMMAMSMSSMMXSAMASXMAXAMAMXMAXMMMAAXSASM
+MXMASAAMMMMMXMXAXXXAXAMMXMMSXXMXXMAMXAASAMXSAMAMAMAMMMSXMSMAAMASXSSMAAAAXAAMMSASMSAXSMXSSMMXMMAMXSMSAAMSMMAMAAAAAXAMAMXAAXSMMSMSAMSASMSMSAMX
+XSSMMMSSXSAMMSMMSSSMXASMASAMAXSASMAMXSMSASXAMSMSXSXMSXXMAMSMXSMMAAXAMXXMMMSMXSASASAMXMAXAXMAMMAMXMMSMMMAAAMMSSMMSSMMASMSAMXMXAMXXXSAMMAXMXXM
+AMAAMXMXASXSAAAXAAAASXMXAMASAXMAMSXSAXASMMXMXAAMAMXMMASMSMMSMAMMMMMSSXMSAMAMXMAMMMSAMXMSMMSMSMAMXAAXXASMXMXXMAMAAAXSAMXMAMXMMMSAMXMMMSSSSSMM
+XSSMMAMMMMAMXMXMMMMMMMAMXSMMMSMAMXMMASAMXSAXMMSMAXSXMAMXMSAAXMMSXXMASAAXMMAMXMAMXAXXAAXAXAAAXMASMMMSSMMAASXSSSMSSXMMSSSSMMMSAMSXMASAAXAAXMAX
+MXMAXAMAMMMMMMMMMXMXAMSMMMAMXAXXMAXMAMAMASMSXAXXMMSAMAXAMMSSSMASAMXXMSMMMSMXAMMMMMSMSMSSSSMSMSAMXAAAXXMSMMAXAAAAMXSAMXMASAASAMSASAMMSSMSMSSM
+AAXSSMSASXSAAASXSAXMAXAAAAAMSXSSSSMSASXMAMMMMMMAMASMMSSMSAMXAMASAXXMMAMMAAXMSMXAAXXXAMXAAASAMXMXSMMSSXAAAMMMSMMMSAMMMAXXMMMSAMXAMASXMXAAAXAX
+SAMXAAAAMASMSXSASASXSSSMMXSMXMXMAMASAXMMMXAMSSSMMAXAAAAMMMMSSMASMMMMMASMMSSXMASXSMSSSSMMMXMXXAMMMXMXXMMSMMXAXAMXMASMMSMXXAASAXMXMASAAMSMSSMM
+MMASMMMMMXMAMAMXMAMAAXAASXMASAMMAMXMSMSASMAMAAAXMMSMMSSMASXSAMXSASAASASXMAMXMXMAAAAMXXAXXAMXSXSAXAAMMAMAAXMXSMMASMMMAMAMSMXMXMSMMAXMMMXXAAAA
+SXXXAMXSMAMXMAXMMAMXMSXMMAMAXMXMASAMXMMAMXXMXSMMAMAMXXXMASXMSMASAMMXAAXXMSSMSASMMMMSSMMMSXSAMASMSMSAASMMSASXSASASASMASAMXMSSSMAAMXXSAMMMSSMM
+MMMMAMAMSMSMSMSASMSMMMMMMAMMMSMSASMMASMAMXSMMXMXMXMSSMSMASXMAMXMMMXSMMMXXXXAXXSXMXXMAASAMXMASAXAMXMXMXAAXAXXMAMXSAMMMXAXMMAAXSAMXMASASAAAAAX
+SASMSMXXAMAAAAAAMAXAAAAXSSSSMAAMASMSASMASAAAAMMAMAXXAMMMASASXSMSMSASAASMMMMSMMMAMXMMSMMAMMSMMMSSMSMSMSMMMMMSMAMAMASAMXSMSMMSMSMSSMMSAMMMSSMM
+MASAAAXSASMSMSMMMXMSMSSXXXMASMSMMMAMAXMASMSMMXSASMSSMMXMASXMASAAAMASXMAASAAAMASAMAXMAMSAMAAAAAXAASAAMAAAASAASAMXSASASAAAAASAASAAXAXMXMXAAMAS
+MMMMMMMSMMXAAXXMMXAXMAXASMSAMMAAXMXMXMMMSMXMAMSXSMXAXSXSAMXXAMMMSMMMMSSSMMSSSXSSSXSXMASMSSSSMSSMMMSMSSSSSSSXSSSXMASAMMSMSSMMSMMMSAMXAXAMMSAM