Bladeren bron

Ok, now I got it, part1 solved

Piotr Czajkowski 2 weken geleden
bovenliggende
commit
02c5e59134
2 gewijzigde bestanden met toevoegingen van 170 en 29 verwijderingen
  1. 30 29
      04/code.go
  2. 140 0
      04/input

+ 30 - 29
04/code.go

@@ -23,46 +23,47 @@ func readInput(file *os.File) [][]byte {
 	return matrix
 }
 
-func countWordOccurrences(matrix [][]byte, word string) int {
-	rows, cols := len(matrix), len(matrix[0])
-	count := 0
-	found := make(map[string]bool)
-
-	var dfs func(i, j, wordIndex int, wordSoFar string)
-	dfs = func(i, j, wordIndex int, wordSoFar string) {
-		if wordIndex == len(word) {
-			if !found[wordSoFar] {
-				found[wordSoFar] = true
-				count++
-			}
+var directions [][]int = [][]int{
+	{0, 1}, {1, 0}, {0, -1}, {-1, 0}, {1, 1}, {-1, -1}, {1, -1}, {-1, 1},
+}
 
-			return
-		}
+func checkPath(i, j int, matrix [][]byte, word string, index int, direction []int, rows, cols int) int {
+	if i < 0 || i >= rows || j < 0 || j >= cols || matrix[i][j] != word[index] {
+		return 0
+	}
 
-		if i < 0 || i >= rows || j < 0 || j >= cols || matrix[i][j] != word[wordIndex] {
-			return
-		}
+	if index == len(word)-1 {
+		return 1
+	}
 
-		wordSoFar = fmt.Sprintf("%s%d_%d%c", wordSoFar, i, j, matrix[i][j])
+	i += direction[0]
+	j += direction[1]
+	index++
 
-		dfs(i+1, j, wordIndex+1, wordSoFar)   // Down
-		dfs(i-1, j, wordIndex+1, wordSoFar)   // Up
-		dfs(i, j+1, wordIndex+1, wordSoFar)   // Right
-		dfs(i, j-1, wordIndex+1, wordSoFar)   // Left
-		dfs(i+1, j+1, wordIndex+1, wordSoFar) // Diagonal down-right
-		dfs(i-1, j-1, wordIndex+1, wordSoFar) // Diagonal up-left
-		dfs(i+1, j-1, wordIndex+1, wordSoFar) // Diagonal down-left
-		dfs(i-1, j+1, wordIndex+1, wordSoFar) // Diagonal up-right
+	return checkPath(i, j, matrix, word, index, direction, rows, cols)
+}
+
+func check(i, j int, matrix [][]byte, word string, rows, cols int) int {
+	var count int
+	for _, direction := range directions {
+		count += checkPath(i, j, matrix, word, 0, direction, rows, cols)
 	}
 
+	return count
+}
+
+func part1(matrix [][]byte, word string) int {
+	var count int
+	rows, cols := len(matrix), len(matrix[0])
+
 	for i := 0; i < rows; i++ {
 		for j := 0; j < cols; j++ {
 			if matrix[i][j] == word[0] {
-				dfs(i, j, 0, "")
+				count += check(i, j, matrix, word, rows, cols)
 			}
 		}
 	}
-	fmt.Println(found)
+
 	return count
 }
 
@@ -78,5 +79,5 @@ func main() {
 	}
 
 	matrix := readInput(file)
-	fmt.Println("Part1:", countWordOccurrences(matrix, "XMAS"))
+	fmt.Println("Part1:", part1(matrix, "XMAS"))
 }

+ 140 - 0
04/input

@@ -0,0 +1,140 @@
+XMSSMSSMXSXSAMMMAMMMASAMXSSMAMSSSMMXSMMSSSMSAXAAMMMSMSMSMAMMMMXMMMMXAMXXMMMSMMMAMXMMSASMSSSMSMMMXMSSMSMSXMMXXMASXMMMMMMMXMASXAMSXSXSXSMAMSXS
+SMAAXSAMMAAAMAASMSAXSXMXXXMMAXAAMAXASAASXMAMXAASXAXMMAXAXXXSXSAMASXMSSMMSASXSASAMXXXSASAASAXAXAMMMAAAAASMMMSSMAMSAAMAMAXAXAXAMXXAMAAASMSMSAA
+MMSSMSAMAMXMMSXSAMMXMAMMMMMMXMMMMXMASMMSAMXMSXMAMMSMSSSMXSAMXSASAXAMXAAAMSMASMSAXAMXMAMMMMSSMSMSAMSMMMMMAAAXAMAMMMMSMSMMXMMSMSMMAMAMXMAAAMXM
+XAAAAMAMXXAXAXMMXMMASAMAASAMMXSAMXMMMMAMXMMMXASMMMAMMMMAASAXASAMXSXMSSMMXAMXMXSMMSXSMAMAMAAXMAMAXXXSMAASMMSSMMMSSMMAASASMMXAMAAMSMSMXMSMSMXA
+MSSSSSMMMSMSMSSSSXSASASXMSAMAASXMMMSMMXSXMAMSXMAMSMXAAMMMSXMMXMAMAMMXXMXSASMSXMMSAAXMAXAMMSMSXSASMXAMSXSAAMAXXAAAMMMXMAXAXSSMSSMAAAXAMAXAMXS
+XAAXAAXAXAAAAMAAAAMAXXMAXSXMSAMASAAAXSASASXMSAMMMAAMSMSAMXXMXAMMXXAXAXXMAAXAXAASAMSMSSSMSAMAMAMMSMSSMXASMMMSMMMMSMSMSMSMXMAXXAMMMMMSSSSSXSAM
+SMSMSMSXSMSMXMMMMMMSMMMXASXXMAXMMMMSSMASAMXAMMXASMSMXASXSAMMSXSMASXMMSMSMMMSSMMMMXMASMAASAMMMASAMXAMSMMMMAAXAXXAMASAAAMXXMMSMMSAMAXAAAAAAMAS
+AAXAXMXXAAAAXMASAXAAAAXMSMXSMMSXMMMXAMXMXMMMMSMMMAMAMXMXMASMAAAMMSAAAAAAAAAAAAMXXAMXMMMMMAMXSXSASMSSSXSAXMASAMMXMAMSMMMSXAMSAMSASXXMMMMMMMMM
+MSMSMXXMSSSSMSASASXMSSXSAMXSAASXSAXMAMXMMMMXXAAAMSMXSAMXSAMXMXMXAXMMMSXXXMMXSMMASMSMXAASMMMMSASXMAMAMASAMXAXAXAMMXMMSXAMMAMMMMMMMMAXMMXAAAAM
+XXAXMXMXAAAXAXASMMAXMMXSMSMMMMMASASMMMMAAAXSSMSXMXXMSMSMMMXMXASMSXMMXXASXSSMXAMAMXAAXMSSXAAAMMMAMSMAMXMMMSMSMMXMASXXXMASMMSXMASMASMMSXSSSSSS
+MMSMMAMSMMMMMSAMXSXMSAMXXAXMASXMMAMMASXSMXXXAAXMSMXAMXMAMXASXMSAMMSMXMXXAAXAMAMASMMSSXAMMSMXSAXAMAXXXAAAXAAAAXXMAXAXXMASAXSASAMSAMXAMAXAAAAX
+MAXAMAXAAXSAMSAMXMAMXASMSMMSASMXMXSSMSAXMMSMMMMAAAMSMAXSMSAMAXMMMASAAAMMMMMMSXMMXAAAXMAMMMAAMASMMSSMSSXMSSSSSMMMSSSMSAAMMXMAMAXMMMMAMMMMMMMM
+MMSAMMXMXMMAMSMSXSSMSMMXAMAMXSAXMMMMAMXMXAAASMMSMSAAMAMAAMSSSMMAXAXXMSXAAXSXAMSSSMMMMSAMAMMMSMXXAMXMAMXMMXAXAAAXMAMAXMXXMAMAMXMXMAXAMXAXXAXX
+SXAXMXASXSMSMSAAMMAASMSSMSXSASXSXAAMMMAMMXMXMAAXMAXMSMSMSMAXMASMMMSMMXXSMSMAMSAXXMXMASASMSMAAMAMXMAMASMMMMSMSSMMMAMXMSMMXASASAMSSMSASXSSSMSM
+XAMASXXXAAMXAMXMMSMMMXMAAAAMASAMXMMSMSASASMSSMMMMAMXAAAXXMMXSAMAXAAMAMXMMAMAMMXSSSSMXSAMXAXSASMAASXMASMAXXAXMAMAMXXAMAAMSAMAMAXMAMSAMMAAXMAX
+SAMASXMMMMMMAMAXXAAAMMSXMMXMXMAMMSXMASAAASAASAMXMASMMSMMMASAMASXMMSSMXAXAAMASXAMAAASAMXMSMMXAMXSXXAMAXMXMSMSMASMSMXAXSMMAAMSSSXMAMXXSAMSMSXS
+MAMASXXAAMXSAMXMMMSXSAMAMXMAXSAMAMXMAMXMXMMMSXMASXSMMAXAMAMASMMXAXAAAMXMSASXSMMSMSMMMSAMAXXMXMAMASMMMSXMAMXAMMSAAXSMMMAMMXMAAMMSXMSXSAMXAXAA
+SXMASMXSXSASXMSMSMMASMSXMAASXSMSSSXMMSSXSSXXSXSXXXMASMXSMSSXMMMSSMSSMSAAMAMAMXAXMAXAMMMXXSAMAMXMMAMAAXMSMSMXXXXMAXXMASAMXMMMSMAXAMMXSXMMSMAM
+AAMXMAXXAMMSAMXMAAMAMMSMXXXMMMMAASAMXAXMASXXMASAMSMMXXXMAXAMXAAMAXMXAMMMMAMXMMMSSMSSSXSXAMMMAMAXXASMMMMSAAMSAMXMXXAMASMMMASXMMSXXMAMMMMAXMXM
+AAMAMSXSAMXSAMASXSMXSASXSMMSAAMMSMXAMASAAMMMMSMSMAAXSMSMMMMSSMSSXMMMSMSASXSAXAMXAAAASAMMMMASMSASXMSASXAMMMAXAAXMXSMMAMMAMXSASAXMXSASASMASMAS
+XSSMXAXMASAMASMSAXASMMSASMASMMSXAXXSMSXMMAAAXAAXSSMMSAAXMASAMXXMASAAAMAMSASAMSXMMMMSMXMAMMMSXAAXMASAMMSMASXSMMXSAMMAASMMXMXAMASMASXSMSAAMMAS
+XMAXSMMSAMASAMXMMMSMSXMAMMASAXXXMSMAMXAASMSSSMSMAMMAXSMSSXSASMMMASMSSSMXMXMSMMASAMXAMXSSSSXXMASMMMMSMAMSXXAMXAAMASASXMXSAMSMMMMMASXMASMMXMMS
+AMAMXAAAMSMMMAXASXMASXMAMMASXMSXXAXMSMMMXXMMAMAMAMMMMMXXMMSAMAAMMSXMAMXAXMAXXSAMXMSXXAMMAXAXAAAAXMXAMSMMMMSMMMSXMMAXASASAMAAAXSMMSMMAMXAXSMM
+MMASMMMSMAMAXXSASAMAMMXMSMMSMAXXSMSXAASMMMMSAMMMMMXSAMSXMAXASXMSXMASMMMSAMAXMMMSAMAAMSMMAMXMMXSSMSMMXMAXSAMAXAXAAMMMMMASXMMSMXAAAMMSASMSXSAM
+XSMXAAAMXXXXAAMXMXMMMASMXMAMAMMMAMMXSMMAAAAMXSXSAAAMAMSMMSSMMMMSXSAMXAAXXMXSXAASASMSMXAMXSXASAMAMXAXAMXMMASXMASAMXAAXMAMXXXAMXSMMSASXSAMASMM
+MMSMSSSSXSAMSMMXSXXAXXAMAMAMXAXXAXXAXASXMMSSXMAMMMSXSMXASMMAAMASMMMSSMSSMMSMMMMSMMXAAXAMASMMMASMMSMMASMXSAMASXSMMSSMSMMMAMSMSAMAXMASMMMMAMAM
+SAMXAMXMAMXMMASASASMSMMSSSMSSMXSSSSMSAMXMAMAMMMMSAXAMXSMSASXMMASAXMAMXAMAXXAAMXMAXMMSMXMASAASAMMAMSAMXXMMMSAMMSAAXXXSAMSMAAAMASMMMAMXAXMAMSM
+MAMMXSAMXMAXSAMASXMAMXXAXAXXAMXSAAAAMMSXMSMMXSXASAMXMXXAXAAMAMXSMMMASMMMSMMSMSMMMASMMXSMXSXMMSSMAMXMMSASAMMXSASMMSSXMAMAXSMSMAMAXMASMSSXSAMX
+SSMXMXASMSAXMASAMAAAMMMSSMMSASMMMSMMSAMMMMAMAXMAMAMXMSMMMMMSAMXSXMMASASAXAAMXXAXMAMAAAXSASMMXAMXAXMSASMMMXMMMASAMAMMSAMXXXMAXXSAMSAMAXMAMMMS
+XAAMSXSMMMMMSAMASXMASMAXXAAXMXAAAMXXMAXSASAMXSMSMMMASAMXAXXXASAXAMSXSAMXMSSSMXSXMASMMMSMXSASMSSSSSXMASXAAAMXSASAMMSASASMMSSMMMMMAMAMSMMAMSSS
+SMMMMMMAXMSMMASAMXSASMMMSMSSMSSMMSMSSMMMAMXXAMAMAASXSXSSSSMSMMMSMMAAMXMMXAAAAAXAXAMXAXXXASAMAXMAAAXMAMXMXSAAMASAMXMXSAMAAMMMMXAMAMAMMAXXXMAM
+AAAXAASMMMAMXXMASXMXMASXXAAXMAXXXMAMXXMMSMSMAMAMSAMAXXXAAXAAMAXXASXSMAMMMMSSMSSSMSSSXMAXMMSMMMMMMMXMAXXMAAMXMAMMXAMMMMSMMSMASMMSASXSMSSMSMSM
+SSMSSXMAASASMMMXMXMAMMMMMMMMMMMSASMSSSXAAAXAAMXXMAMXMMMMMMSMSSSSXMAAXXXAXXAXMXAASAAMMAXSXAMXXAAXSMSXSMSMSMXAAAAXSMSAMAAXSMMASAAMASAAAXSAAAAM
+MAAXMMSSMSASMASMSMMMSASAMXSMAXSAMXAAAAMSSSXSXSXXMSMASXSASXAAXAXMMMMMMSXSMMMSAMSMMMSMXMSAMXSMXSSSXASAXAXAAXMSMXSASMMAMSMSAMMMSMMMSMMMMMMSMSMS
+SMMMXMAMAMAMMASXAAXXAAMXXASMAMMAXMMMMMXXXAMMMMMMAAMXMAMASXMSMMMAAAMAMMAXXMAXMXMAXXXXXMMMXMSAXMMMMAMAMSMSMSAMAAMASMSXMAMXMMXAXAMXAAXMASAMXAAX
+SAMXXMASAMSSMASXSMMMMXMXMSSMMSSSMMSAMXMMMMAAAAAMXSMSMAMSMMXXAXSMSXSASMAMAMSSXSMSMMMMMSAMXAMMMMAMSMSMMAMAAAAMMMMMMAAXSAMMXMMMMAMXMMMAAMAXSAXX
+SAMMXSAMXSXAMASAMXSAXSAMXXXMXAAXMASMXMAAAXSSSSXSXXAXMAMXAXXXMMSAMAXAXMASAMAAASAAAAXAAMASMMMXMXAMAAAMMMASAMXMAAAXMMMMMAMXAXAMMXMXMAMMSSMMSASM
+SAMXAMAMSMXSMXMAMAMSXMSAXSAMMMMMSMMMSXSSMMAAXMASAMXMASMSMMSMMAMXMAMSMSASASMMAMXMXMXMMSAXAXMXMASMMSMMAXMXXSXSSSSSXMXMSAMSMMMSAMSMSASAXAMAMMAM
+SAMMXSAMAAXXSSMMMAMAXMMSMMASASXAXAAXSAMAMXMAMMXMMMMAXXMAAASMMASAMXMXAMASMMXXASMMSASMXMMSMMMMXMMAXMMSSSXMASAMAAAMXMAMXSXAAAAMAMAAXMAMMAMXXSAM
+SAMXAXASMSMMAXASXSXSASAXXSXMAAAXSMMMMAMXMMSMMMMMXXXSXSMSMMXAMAXXMSMMXMAMAAXMAMAAXAAXAMXAMAXAAXSXMSAAMMXAAMAMMMMMMMXSAMMSSMXSAMXMMSMSSSMSMSAS
+SASMMSMMMAAMMSMMAAAMAAASAMXMXMSMMXSASXMASAAMAAAAAMAAAXXMASMXMMSMXAXMASXMXMMSSMMMMMMSSMSXSXSSMXSAMMMSSXSSSSSMASAAMSAMXSAMMAXAMXSMAXXAAXAAASAM
+SXMAAXAASMXMXAMMMMMMXMXMXMAMAMXASASXSASAMSSSSSSXMASMSMASAMMMSMAMSASAMXAMSXXAXMAXXAAXAAXAXMMAMASAMAAMMAXAAAXSASMMXMASAAAMMSMXXASMMMMMSMXMAMAM
+SMSMMXMMMAASMMSSMMMXAMMXMSXSSSSXMMSMXXMAMAMAMXMMMXMAXMMMXSAAAMAMSMMMXSAMMAMMSAMXSMSSMMMSMASMMAMASMSSMMMMMMMMXXAMSMMMMSSXAMASMASASAMSMMXXSSXM
+XASASMSSMSMMASAMAAAASMMAAMAMAAAXMXSMMSXSMSSXMASASAMXMMXMASMSSSMMSAMAASAAXXMXAAMAMAXAXAMAXMAMMSMMMMAMMXAAAXMXSMSMSAAMAAXMXMAMMXMASMSAAMMAXMAS
+MMSAAAASMAMXMMAMMMMXMASAXSASMMMAMAMAXMAXAAMXSXSXXASXMSMMMMXAXAXAXAMMMMSMSAMXMMMASAMMMMSSSMSXAMXSMMASMSXMXXMASXXASMMMMSSMSMAMMSMXSMSMSMAAXMAM
+AXMXMMMXXAMASXMMSMSMSMMMMSASAXXXMMMAMMAMMMSAMXSASMMMXAXASXMMSSMMXSMAAXAMXMMSMAXASXAXSXAAXAXMMSMAASASASASXMMASMMMMMSXMAMAAXAMMSMMSAMAXASMXSAM
+SXAXXSAMXSSXSAMMAAAMAMAMXMXMMXMASXXSSMXSMXMASMMAMXAMXMSMSAAAAAASAXSXSAMXMAAMMSMASXSAMMMXMAMAXMASAMAMAMAMMAMAXAXAAAMAMAXXSMSAAXAAMAMAXMAAXXAM
+XMMSAMASAAMASXMSMXMSASASAMASXXMAMMAXAMAXAASMMAMSMSSMAXAMXMMMSMMMAMAMXAXSSMMSAAMXMMMAMXMXSASXMMMMXMXMXMSMSAMMMMMSSMSAMMSMMAMMXMMSSMMMSSMMMSSM
+XMXAMSAMXAMAMXMXXMXSASMSASASASMMSSMSAMASMMSAMXMAAAXSXSAMSASAXAMMMMAMSMMMAMAMMSSMXXXAMAMXSAMXASAMXMAMXMXASASXASAMAXSAMXAAMAMXSXMAXAAXXAAAAAAX
+XSMSXSXASMSXSMSMSAAMXMASXMASASXAAAXSXMASMASXSSSMMMXMMSAMXAMASMXAXSAMXXASAMAMSXMXAMXSSMSAMXSSMMXSASXXAAMAMMMXMMAMXMXXMSMSMAMXMXMAXSMSXSMMMSSM
+MAAXAMXXMASXMAAAMSSMAMMMXSAMMMMMSSMXSAMXMMSAXMAMMMAAXMMMMAMMMXMMMMAASMXSMXSMMAMMXMAXAMMAMAMASASMXSMSSSMXMASAMXAMXMMSASXAXXSAMAXMAMXSAMASAAMM
+AMMMSMMMMSMXMSMSMMMXSSMXAMASXXAXMAXAMXSAMXMMMSMMASMSMXSAMASASASXMSMMASASXAXASAMSMMMSAMXSMMMAMXSMAXMAMXXASXSASXSMAAAMAMMMMXSXSMSSXMAMXSAMMSSS
+SMSMXAXAMMAMAAXXXMAAMMXMMSMMMXMXSAMXXMAMASAXMAASXSAXMASASXSASXSAXSXSMAXXMAMAMMMSAXASAMAMASMSSMMMXMMMXMAMMAMAMXMSSSXMSMSMSMMAMAAAXSSSXMXMSAXA
+XAAMSSMMMSAAXSSMMMMSMSAXMAMASMXAXAMXMMMAMXAXSMMMAMXMMMSMMXMMMMMMMXASXMMMMSMMMSAMMSMMMMMSAMAAXAMXAXAXMASASXMMMAMMMMAMXAAAAXMAMMMSMMXAMMXMMMSM
+MSMXAMXAASASXMAMSAMXMSAMMASAAMMSSSMMAAXAAMSMSMXSAMASXXMAMSMMSAAXXMMMAXAXAMASAMAMAAAASMXMXMMMSSMSXSXSMMMAMXAASXXAAXAMMMMXMSMMXAAMAAXMSXMMAAAX
+AAXMXSMMMXXMXSAMXASXXMAMSAMMSXAMMAAXSXSXSXMAXAASASASXMASXSAAXMAMMMASMMSMMSAMAXXMSSSMSXAMMSXXAMAXAAMSASMAMSSMSXMSMSASXSXMAMXMXMMSXMXXSAXSXSXS
+SMXSASAMMSMSXMAXSAMXAMXMAXXXXMXSXSMMMAMMMAMXMMMMXMASXMAMASMMMSSXXSASAMMAMMMXSMSMXAMXSMXSAAXMMMXMXMASAMXAMAXAXMXAAMXXAAASXSASASMMASMAMXMAAMAS
+XXAMASMMMAASXMAMXXAMXXSMSMSMMASAXMAMXXMASMMSSMMSSMAMMMMMXMAAXXAAXMMSAMSXMAMAXAASMAMXXMXMMSAMXMAXAAXMMMSSMAMMMSXMSSMXMMMMASASASAMAXMAMAMASMAM
+SSXMAMAAMMSMMXSMMMSMMXMAAAXXAMAMXXAMSMMXMXAXAAMAAMASXAASASXMSMMMMAASMMAMSAXSMSMSXSMMMSAAXMMSSSSSMXXXMMAMMSXSAMXXAAMAMASMMMXMAMMMSXSASXSAMXXS
+MMMMASMMMMAMMAXAMAXAXSASMSMMXSASMSMMAAMMSMMMSMMXMMXSMSMSASMMAMAXXMMSXXXXAMXMAAMSXMAAAMMMMSASAMMAMASMMMASAMXMASXMXXSMSAXAXASMSXXXAAXAMAMAXXMA
+MAAXAMXSASAXMMSSMASAMAAMAXMAXMAMMAMMSSMAAASAXASMXMAMMMAMAMAMAMMSMMMMMMXMAXAMXMASASXMSSXSAMMMAMSXMASAAMMMXXMXMMMMSXMAMMSSMMSAAAXMMSMSMMMSSMAM
+SSSSXMAMAXAMAAAAMMMXMMSMXMASXMSMMSSMMXMSSSMASAMAAMMSAMXMAXSSMSAMXAAAAMSSSMSSSXMMXMAXXAAAXSAXMMSXMMXXMMSMMXSASXSAAAMAMXAASAMXMXMXXAXXASAAAASX
+MAAXXSSMSMMSMMSSMXSSSXXXSXMMMMAASAAAMXMAXMMAMAMSXSXMASXMAMMAMMXMXSXSSMAXMAMAMXXSASXMMSMMXMASAAMASMMSSMAAMXSAMAMXSXSAXMMMMMSMSAAXMSXSAMMSSMMS
+MMMMMAMAMXXAXXAMXXAAXAMASAXMASMSAMSMMMMSMMMSSXMXXMASMMAMMAMAMXAMXAXMAMASMSMSMSMSASASAMAXXXAAMXSAMAAAAXSAMMMSMAMAMXSASXSMXAAAMMXSAAAMSMMAMMAX
+SASXAMMAMXSMSSMSSMMSMXMASMMMXXXMMAXAMXAAAXAAMXAMASASASXMAXMAMSASMSMSAMSXAAAAMXAMAMAMSSXMSMSXSXMASMMMSMMAXSAXSAMASAMAMAAMMSMSMAAMMMSMMMAAXMAS
+MXMMSXMXSXSAAAAAMAAMAXMASXMSAMXMXMSAMMXXMMMSSMXSAMXSAMMSASXSMMMSAMASMMAMSMMMSMSMMMXMXMXAXAAAXXSMMASXAASAMMAMSMSAMAMAMSMMAAAXXMMXAAAAXSSMMXMA
+XAMMMMSAMXMAXMMMSMMSSMMMSAMXMXAXAXSXMASXSSXAMMAMASAMXMAMMXAMXAMMAMXSAMMMMXAXMXMAAXSXASMMMSMSMAAMMAMSMMMAMSXMXAMAMXMMXXAMSSXMSMXSSMSMMAMAMASX
+SMSAAAMASASMMXMAAXMXMMSXMAMASMMXMMMSMXXAAXMXSMMSAMASAMSSXMAMSMMSSMXXXXXXAXSXSASMMAASAAAXMXAXXMMSMSXXXSMMMXSMMXMMXMXXAXAMMAASXXAXXAMASASAMMMS
+MASXSXSAXMAXAAMSSSMMMAMAMSMASAAXSMMSMSMMMMMSMXXMXSMMXSAAXSAMAMMXMMXMMMXMMXXASXSXMXMSMSSMSMMMMSAMXXAMXSAAMAAXXMASAAAMXSSMMSMMAMMSMAMAMASXSAAX
+MAMXMMMMSAMSSMXAMXMAMAMAMAMXMMMMMAMXAAMAAAXXXAAAMSAMXMMSMSAMAMSASXAXAXASMAMMMAMXMXXMAXMAMASAAMASXMASASXMMSSXMMASMSSMXAMXAAMMXAAAMAMAMXMASMMM
+MASXMASAMXXAAXXXMASMSAXSSMSMXAMAMAMXMMSSSSSMMMSXASXSMMMMXSXMSMSAMSMSXMAMMXSASASXMXSMMMMSMASMMMXMXMAMAMMXXMXMAMASXAAMSAMMSXSXSMSXSSSMXXMAMMSM
+MAMXMAMMSAMSSMMAMMSMMXSAAXAASMMXSASMSMXAMAXAAXMAMXAXXAMMAMMAXAMMMAMAMMSMSMMASAXAMAMAMMAMMAMXMSAMSMSSSSMXMAMXSMASMSSMSAMXMASAMXXAXMAMXMMAXMAM
+MSSSSXXAXMAMXASAXAXAMMAXMMMXMAAASAMAAMMASASMMMXXXMSMXSSMMMAMMXMASASASXAAAAMXMMMAMMSAMMASMMXAMSAMMAXAAAXAMXMAMMMSMAAAMAMMMAMAMAMASXMMMXAMXSAM
+XXAAMMMSMSXMSMMMMASMSXMMXMXAMMMMMAMSMSXAMXSXMMSSMAXAAXXXSASXMXMASASXSXMSMSXAASMMAXSAXSASASMSMSMMMMMMMMSXSAMXSAMXMSXSSSMXMASMMXSASAMASMASASAS
+SMMMMXXAAXAAXMASMMMXSMXXAMXXSXAXSMMXASMMMMMAAASAXMMMMSAASAMXSXSAMMMXSAXXMMMMSMAAAAMAMMXSMMAXAMXSXMAXMASAAXSASASAMXAXAMXMMMXMAMMXSAMAMAXMASAA
+AAXXMMSMSSMMMMMMAASASASMMMAMXMXXXXAXMSSXMAXSMXSXMMASAMAMMAMAXAMASMMASMMAAAXXAMMMMSSMXMXMAMAMAMASAMSMSAMXMXMMSAMXAMXMAMAMAXMASAMXSAMSSSXMAMMM
+MSMMAXAXAXMAMAXSSMMASXXAAAXXSXSAMMXSXMXSSSMMXMXMMSAMASXXMSMMMMMMSAMMMXSSMMMMSSSXMXAXMMASAMXSAMAXAMAXMASXXXMXMAMXXAASXMXMASMMXXMXMMMMAXXMXMSX
+XXASMAXMASXXXMXMMSMAMXXMMMSAMAMXXAAXAXAMXMAXASAMXSXSAMXXXMAXMXSXSAMXXMAMASXAAAAXXXAMMSASXMXXMSSSMMSMSAMXSXSASAMMAXXMMXSMAMMSMMSASMSMAMXMXMXM
+XMAMXMXSMMXMAXAAASXMMMSXAAMMMAMXMSASMMSMSMXMAMAMASMMASXSMSMXMAMASXMASMASAMMMMSMSSMSMAMXSAXSXMAMAASAMXASXMASASAAXAMXMAAMMSMMAAASMMAXMAMASAMAS
+XAMSMMMSAAASMMSMMMAAXAAMMXMSXXMAXAMXMAXASAMAMSSMASXSAMMXMAAAMASXMAMAXSMMXXAAXAAAXAAMXSASXMMXMASXMMSMSMMXMAMAXMSMXMAMMXSAXSSMSMXAMSMMMSMSASAS
+MMSAAAAMMMMSAAMMMSSMMSSXAMSMASXMMXSAMXMXMAXXXAXMAMMMMXMASXSXMAXAXXMMXSXXMASMSMMMSSXXAMXMXMXAMAMXMSMXMXAMSSMSMAMAMSASXAMMXAXAAXMXMAAAAAASAMXS
+AXAMSMXXXAXMMMMAAXAAXAXMXSAAAMAXSAMASXMMSAMSMMSMASMMSXSASMXAMSSMASMSASMSMAMASXXMAMXSXMAXAMAMSSSMXAXAXMMXAAAXMAMAMSAXXMSSSMXSMMAMSSMMMSMSXSXS
+SMMXXXSSSSMXXXXMAMSXMSSSXSXMAMXMMASAMAMASAXXAXMXASAAXAMXXAMSMAAXMAAMAXMASAMMMMSMMSXAASASMSMMAMAXMXSSMAXMSMMMMAMSMMSMMXAAAXMMSXXXAAMSXXASAMAS
+XAXMSMXAAMAASMMXSAMAXAAMAXMASMSXMMMMXXMAMXMXXMXMXSMMSSMMXMAAMXMMXMXMMMSAMMMSAAAXXMXSXMASAAMMSSMMAXAAMXMMXMAAXMXMSAAXAXMMXMAAASAMMSMSAMMMAMAM
+XSAAAAMMMMSMAAMAXAMAMMMMSMMMMAASASASXXMASMSAXAMXXMAMAAXXAASXSXSXMXXAMXMAMSAXMSSSSMXXMMXSMXMAAAASMMMXSXMXASMSXSAAMXSXSXSMSMSMAMMXXXXMMMMXAMAS
+AMMSMSXMXAAXSSMSSXMSXSAMMSSSMXMAMSAMAAMXAAAAASMMMSSSMMSMMMMAXASXMASAMXMMMMAMMAMXAMASAAAXMXMMXSAMAAXAAAXSAMXMASMSMXMAMAAMAMAMAAXXMMMMXSMMSSMS
+XXAMAMASMMSXXAMXMXXMASAXAAXMASXMAXAMSXMMMSXMMMAAAXAAAMSAXAMXMMMSXMAAAAMMMMAMSAMMAMMSMMMAMXAMAXMSSMMSSSMMXSAMMMXAXAMXMSMSAMXXMMSAAAAAXAAAAAAM
+XMAXASAMMMMXSAMAMMMMMMMMMSMMMXAXMMMMXAXMXMAMXSSMMMSMMMXAMMXMAXAAMXSMSXMAXMAXSAMSSXMSXSMAMAMMMXAXMAXMAAXXASASXMSSSXSXAXMSAXSXSASXSSSSMMMMMSMM
+XMMMMMMMMASXMASXXAMAAAMXAXASMSMMXXSASMMSASAMXXASXMAMXSMAMXMSSMMSSMAAAMSSSMMMSAMAMAXXAXXXMASAXMSMMMMMSMMXXSXMAXXAAAXMSMMMSMAAMXMAXXAMAMXSAMAS
+XAAMAAMMSASASAMMSSSSMSSMASAMAAMXMXMASAASXSASXSAMMMASAXXAMAAAAAAAAXMMMMAAAASAMXMASXMMMMMSSXSMXSXASXSAXAMSAXXMXMMMMMMAASXAMMMMMMXSAMXMSAAMASAM
+MMMSMXMAMMSAMAMMAMXXMAMMMMMMXMSAMAMAMMAMXSASXMMMAMAMAMSXSMMSSMMXXMXXXMMMMMMASMSMAMAAAAAXAMXMSMSMMMMMXAMXMASMASMMSMXSAXMASAMAMAAMXXMAXMMMMMXM
+XSAAMXMASXMXSSMMASXMMAMAMASXXAXAXAXAMAMXXMAMAXXSSSMMSMMAAAAXAXXXSSMXAASXSXSAMMASMSXMXSSXAMAXAAXSXMAMMSMASAXMAMAAXMAXMASASXSASMMSSMAXMASMSASX
+AMSSMMSASMMAMMASAMAMSASMSMASAXSSSXSSXSAMXMAMXMASASXAAAMSSMSSSMSMAAAXSAMAMAXMXXAMXMXSXMMMSMXXASMXMSMSAMSMXMSMSSMMMMXSMMMMMASASXXAXMASXMMAMAMX
+MMMMAXSXSAMAAXAMASAMAXSMAMMXSXXMAXAMAMAAASASMMXMAMMXMSMXAAAAXAAAMMMMAAMMMSMMMMASXAASASAAAMXSAMXXAAAMAMAMMXMAMAXAXXAXXMASMMMAMAMXSMAXAAMSMSMM
+XAASMMSASXSMSMXSXXMXSXMXXMMAXMAXXXSMAMXSASXSAXAMMMSSXAXSMMMSMSMMXAAAMXXXAXAMXAMAMMMSXMMMXSAAXXMAXSSMMMAMAMMSMSMMSMXMXMAMAAMXMASMAMASMMMXXMAX
+SXMMAAMMMAMAAMMMMMSXMAMMXAMXMSSMMMMSXSAMXSMSAMSMSAMMSMMAAAMAAMAMSXMMSSXMASMMAXAXAAAMXMXMAMMSMMMSAMXAAXXMXSAMMXSAMXMMMMXSMMSMXAXASMAMMASXMXMM
+AMSXMMMXMAMXMSXSAAXASXMSSMASAAXSAAXAMMXXMSMMSMAAMXSMMSAMSSSMSMAMMAMAAXXAAXXSAMXSSMSAMXAMXMXAAXAAAXSSSSMAAMASXAAXMMSAASASASAXMMSSXMAMSAMXMASM
+SXSAXMAMMMSMAXASMXSAXSAXXMAMMAMSSSMSMXSMMMAMAXMXMMXMAMMMAAAMXXXMMAMMSSMMMSMMMSAMASMXASXSAMMSSMSSSMMXAAMMMSAMMSSMSAMMSMASXMASMXMMASXMMXSMSAXA
+MASAMMSSMAAXXMASAXMMMMXMXMAMAMAMXXAAXMMAASAMMXSASXMMSSMMMSMMAMMSSMSXAMAAXAAAAMASMMMSXSMMMSAMXAXXXAXMMMMMAMASAMAAMXSXMMXMAMMMMAMSMMSMAMAMMMSS
+MAMAXMAAMSMXXMMMMMMMAMAAMSSSMSSSMMSMSASMMSASXAMAMAMAMXMAXAXMASAXAMMMMSSXSSSMMSXMAAXMAMXAAMMSMMMSSSMASMSMAAAMMSMMMASAMXAMXXAASAMAAAXXAAAMXMAM
+MSSSMMSMMAXXMXMAAAAXAMMSAAAAAAAAAXAAXXXMASMMMSSMXSMAMAXSMSXSAXMMAMXAMXMAMAMAASMXMAMMAMMSMXMAXXAXAMXMAXXMAXXSXMASMASAMMMMSMSXSXSXMXSMXXSSXSAS
+XMAXSXMMSSSMAAMSSSSSMSMMMMMMMMMXSSMSSMXMAMAAXMAMAMAMXSMXAXAMAMSSSMSMSAMAMMMMXSASMMXSASXXMASASXXSMSSSMXMAXSASASXMMMSMMMAXMAMXSMMXSAMASMMMXMAS
+SMSMSMSAAAAMAMMMAAMMMAXXASXSXSMAXXXAMXAMSSSSSMXMASASMMAMSMMMSMMAXASASXSAMXAMAMAMMAASMSASMXMASXAMAMAAXSXXXAAXAMXXXMMMSSMSMSMAXAXAMAMAXAAAXMAM
+SMMASAMMMSMMAMAXXXSMSSSSMXAMAAMMMMMMSMXSAXXMAMXSXSASAMXMMAMAMASAMXMAMXSAMSAMXMAMMMXSAMAMASAMXAMMAMXMAXAMSMMMSSXMAXAAXAAAAAASMMMMSSMMSSMSMMSS
+SAMAMMSXMXAMXSXMSAAAAMAAMMSMSMMAAXAAAXMMMSMSXMASAMMMMMAMXAMASMMAMMMAMAMAMMASXMSMXXAMXMXMASMXMXMSXSMSMMMMMAAMXAASXMMSSMMMSMXMAAAAAXAXAMAMXAAM
+SAMXSASAMSXMXAAAMXMMMMXAMAXAAXSXSSMSSXXAXMXMASASMXAAASMSSXMASXXSMAXAMMSMSSSMXSAAXSAMXAAMXMXXMAMMXSAAAMAAMMMSMSMMAAAAXAAAAMASMMMMSMSMMMAMMMSS
+XAMXMASAMAASMMMMXXSAMXMSMMSSMMSAXAMXMMSMSMXSAMASXSMSXMAAMAMAMMMXSXMXMASAAMAASMMMMAAMSSMMAXMASAXMAMSMSSSSXSAXAXASXMMSSXMSXXMMAXSXXAXAASAMAAXA
+SMMXSAXAMSSMAAMXMASAXXMAAMAMMAMXMAMAXMAAAAXXAMXMXMAXASMSSXMAMAAMAXSMXMMMMSMMMMAAMSMMMAXSASMMSMMMAXAMAMAAAMAMXMAMXMAXMMMMXXXMSMXAMXMXMMAXSSSM
+SSMAMMSMMMMMSMSXSAMXMSSSSMASMSSMSAMASXMSMSMSXMSMMXAMAMAAXXXXSMSXMMAAMXXAMXXXAXSSMMMXSAMXXMAXXAXSXMSAAMMMMMMMXMAMAMXMMAMMXSAAMAMSMMSMSMSMAAMX
+SAMXSXAXAMXAMXXAMXXAAAAAXMMMXAAMSXSMXAAXXMAMMAAAMXMMSMMMMSMXMAMAASMSSMSSSSMMMMMXAAAXMMMMXSMMMMMMAAXSMXSAMAAXXXASMSSMSXSAAMMMMAMAAXAASAXAMXMS
+MXMSXXMSMSMASAMXMASMMMMMMXMXMMSMSASMSMXMMMAMMMSASXMAMAMXAAMXMAXXAMXAAAAAAMSASAMXSMMMMXAAMMSAAMAXXMXASASASXSSXSASAAAAAXMMMSSMSSMMAMMXMAMAXAXS
+MSMMAMXAAMXMMXMAXXMXAXXASAMXXAMXMAMASXAMAXXXAXXAXXMMXMMAMASXMXMMSMMSSSMMMMSXSASMXMXAXSMSXASXSXSSSMSMMMMMMMAAMMXMMSMMMMMAXAAMAXXXSASASXMXSMSS
+MAAMXMSMSMAMXSSMXSMSSMSASMSAMXMAMXMSMSASMMMSASMSMMMSAMXSSMMXMAXSASAMMMMAMXXASAMMXSSXXAXAMMMMMMXAMAAMMMMAAXMSMMAXAAAAXMSSSSSMASMXMASMSASXSMAM
+SSSMAAXAAXAMXAAMMSAAAAMXMAXASASMMMXXAXMAMSAMXAAMAAASASXAAAXMMSXMAMXSASMXSAMXMSMMXMAMXMASXXAAXXMAMSMSASXSMXXMAXSMSSXMSAAAXAAMASXAMXMXSAMAXMXM
+XAAXXSMSMSXXMSAMAMMMMMMMSASMMMAXAXASAMSXMMAMAMXMSXMSXMXSSMMMAMAMXMMSAMAAMXMXAAMMASAMXMSMXSSSMMMSMXAMXSAAMXSXMSAMAXAAXMAMMXMMASXMSAMXMAMSMMSS
+MMMMXXAAMMMXXMAMMMAXAMXMMXXXAXMSSMAMXXXAXSXMAXXMAMXMAMAMXXXMASXMXSAMXMMASAMSSMXSAMMXXSMSAXMAXSAMAMMMSMMMMASAMAMMAMMXMASMSMSMXXXSAMXMSXMXAAAS
+SAAXMMSMSAMXXSAMSSSSXMAAXSMSMMXAAMAMMASXMAXSXMAMAXSMSMASAMXMASMMMMXSAMXASAMXAAXMMMSMMMAMMSMSMMASXXSXAMXMMASAMMXMSSMAXAXAXMASAXSMMSAMXAASXMMS
+AXASAAAASMMSMMAMAAAAASMSMMASASMSMSAXSAXMMSMMAMAMXXSAXMXMAMAMXXAMAMASASMMSXMMMMMXAAAAXMAMXXAAASAMXASMMSMXMAXAMXXMMAXSSMMMXAMXMXXAAXASXMAMAAXX
+MSMMXSMMMMXSMSMMMMMXMXAAAMAMXMAMASAXMXMXXXAMAMXSMAMAMMSMXMASXXSSSMASXMXAMASXMAMXMSSMMSASAMXMAMSSMMMAAAXXMMSSMMXMSAMXAXXMASXMASMXMSMMMMASMMSS
+XAAMMMMAAXAMAMXAMXMMMMSSMMMSAMMMMMMMXSAMXXMSMSAXMAMAMXSAAMSMMAAAAMAMAMMASAMMSASAMMMAASMXAMXXXMXMAXXSAMXMSAAAMXMXMASXMMAMAMASXXAXMAXAMSMSAAAA
+SSMMAAMSMMXSASMSMXXAXAXMXAAMXMAAXAMSSSSSMSAAXMASXSSXSAMMMMAAMXMXMMASAMSXMASXSASASAMMMSMSSSMSXSAMMSAMXXSAMMSMMAAASXMMXMAMMSXMXXXMSASMMSAMMMMS
+AAMSXMMAMAMMASAXAASMMXSSSMSSMSSSSXSMAMAMAAMSMMAMXAXAMXSXMSSSSSMSXMXSXMXMSAMXMXMAMAMSAXXAAAAAXMASMAXMXMAXMAAAMXXXSAXXASMSXMASAMSAMXXMAMAMXSXX
+MMMSASXSXSXMAMMMMMXMAMAAAAMXXAAXXMAMXMAMSMXMXMSSMSMXMMXAXMAMXAAAXSASMSAMMASMMMMAMSMMXSMMSMMMSSMMMXMMMMMMMSSSMSSXXXMSASAXASAMAAAXSXSMSSSMAMXX
+XAMSAMAASAMMXXXXSXMASMMMMMMMMMSXSAMXXSXMMAMXMAXAAXXXXASMMMSMSMMMSMAMASXMSXMAAXSXSXXXMAAMAAAXAXAMSMAXAXXXMMAAXMAMMMAXMMMXXMAXXMSMMXAAAAAMXSAM
+MMMMAMXMMXAXSSSXMASAMXSSMSMSAMAAAMMXMASMXSMMMASMMMSAMMSAAXMAMSAXXMAMXMMXMASMSXMSAMXAMMSSMSSXMSXMAAXSXSMSSMSMMMAMAAMSXAMMSSMSSMXAMSMMMSMMASAS
+MSXSSMMXMXSXAAAMSAMMSMMAAAASMSMSSSMSAMXMAMAXAXAXAMAMXAMXMMMAMAMSSMASAAAAMXSAMXSAMXMMXAAAMAXAAAMSMSAMXSAAXAMXASASXSSXMMSAAAAMMASAMAXAXMAMXMAM
+MAAMAMXAMMMSSXMMMXSASXSMMMMMMXAAAAAMMMSMASXMSXMSMXAXMMSASASASMMAMSMSMSSXSAMAMXXXXASAMMSSMASMMMMMXAAAAMMMSXMMMSASAXMAXMMMSMMMMXMASXSSSSXMMMMM
+MMSMMSSMSAAMXAMXXSMMSAXAAXAMXMMMSMMMAAMMASXMMAXAMMSMSASASASMSXMAMAMXXMXXMXSAMXASXMSASXAXMASAAMAMXSMMMMAAMASXXMAMMMMSMSXAAXASXASXXXSAMXMMAASA
+XAAAXAXASMSMSMMAMXMXMMMSXSASAAXXXASMMXMMMXMAMMMSMMAAMXMMMMMXMASXSMSSXSMXMXSASXAXMASAMMSSSXSMMSSSXMAASXMAMAXXXMASXSSXAXSSXSXXSASASXXMAXAXXSAS
+MMSSSMSXXAAAAASXMAXSAAAAASAMXXASAXMAMAASASXSAMXMASMXMAMXXSMAMAXAAXAAAXAAMMXAMMSMMXMMMXMAMAMMXAMXAXSXSAMAMSSMXSMSAMXMMMMMMMMMMSMAMXAMASMSMMMA
+SAAAAXMMMMMSMXMAMAASMMMSMMAMXASXMXSAMMSMASAXAMASMMAASAMMMMMAMMSSMMXMASXMSASXXAMXMMSXSAMAMAMMMSSSMMXASAMSMMAAXMAMMMXSSMSAAAAASAMXMSSMAXXAASXM
+SMMXMAAXAAXXMASXMMXXMAXMASMMMMMAMMMAXXAMAMASAMMSAMSMSAMXAAXMSAAAXAXXMXMASMAAMXMAASXAAXSXSXSAMAMAXAMAMXMAAXXMXMAMASAMAAAMMMSSSMSAMXAMMSXMMMXX
+XASXMSAMXSMAXMXAXSAMMSSSMMSSSXSAMMSAMMMMASASAMAMMXXMSXMSSSSSMMMSMMSSMAMMMXMXXXMMMAMAMMMXMMMMMMSSXMMXMASXSMASMSXSASAMMMMMSMMMMXSASXMSASMASXXS
+XAMAXMXSAAMXMXXMMMASAXAAXAMXMASASXMAMXASXMASXMASMSMAMAMAAAXMASAXAAAASASAMAXMMMXSMMAAXAMAMAAXXMAAAAMAMMMAXMAXAAXMAMXMMAXXXAAMXMSXMAMMAXXAMAMM
+SSMMMMASMXXMASMSASAMMSSMMXSAAXXASXSASMMMAXAMMSXXAAAASAMMSMASAMXSMMSMMMSASXXXAAAXAMSXSSSSSXSMMMMSMMMAMXMSSMSSSMMMSMASXMSMSSMMAXXMASXMAMMMSSMM
+AAAXXMASXMXXSXXXAMMAMXXXAAMMMSMMMAMASMXSMMXSAMMMSMSMSASXAXMMXSASAXXXMMSXMASMSMSMAMMAXMAXMXXAMMXAMXSMSAMMAAAAAXXAMMXAMXMAAAASMXAMSMAMSMSMAAMX
+MXAMXMXSAMSMMMSMAMSSSSSMMSMSASAAMSMMMMXXXASMXMAXXAXASAMMXXXSXMASXMMXSAMASAMXXAMMSMMSMMXMSASAMXXXXAXXSASMMMMSMMMASMXMSAMMSSMMSSXMAXAMAAAMMMMS
+SASMSXASAMXAAAXMAMXMAAAMAAAMASXMXAXAAMXMMSSMSSMSMAMAMAMXSMASMMAMMMAAMASAMASAMXMAMMAMAMAAMASXMMMSMMSASAMXASXXASMAAXAXMASMMMMAMMMSMXMSMSMSMMAM
+XAMAAMMSAMMSMSXSASXMMMMMMSMMAMXSSMSSXSAMXXMMAASXMMMAMSXAAMAMAMMSAMMXSAMASXMMSSMASMASXMMSMAMMXMASASAXMAMSAMASAXMSSSMSSSMMAAMASAAASAAAAAAAXMAS
+XXMAMMXSMMXAXXMSMSAMXXXXXXXMXSXXAXMMXSASXMXMSSMXAASXSAMXSMSSXMASMMSAMXMXXXSXSMSSXMMSMXSXMASMXMSSSMASMMMSASXMMSAMXMXXMMASMSSXSXSASMSMSMSMSSMS