day 19

[?]
Dec 19, 2020, 5:41 PM
QJSZZQL6C5MLMMF23QN3V45CWS2FQ4TBI6WNUPJHWSY2OCI3LNOAC

Dependencies

Change contents

  • file addition: 19 (dxwrx-rx-r)
    [1.0]
  • file addition: regex.hs (-xw-x--x--)
    [0.5]
    import Control.Arrow
    import qualified Data.Map as M
    data Rule
    = Const Char
    | Alt Rule Rule
    | Seq [Int]
    deriving (Show)
    (!) = (M.!)
    parseRule :: String -> (Int, Rule)
    parseRule s =
    case words s of
    [] -> undefined
    num : rest -> (read $ filter (/= ':') num, buildRule [] rest)
    where
    buildRule acc [] = Seq (reverse acc)
    buildRule acc ("|" : rest) = Alt (Seq (reverse acc)) (buildRule [] rest)
    -- we can cheat here, we know that the leaves are always single characters
    buildRule acc [['"', c, '"']] = Const c
    buildRule acc (n : rest) = buildRule (read n : acc) rest
    buildRules :: [String] -> M.Map Int Rule
    buildRules = M.fromList . map parseRule
    match :: M.Map Int Rule -> Rule -> String -> (String -> Bool) -> Bool
    match _ (Const c) (x : xs) k = if x == c then k xs else False
    match rules (Const c) [] _ = False
    match rules (Seq (r : rs)) xs k =
    match rules (rules ! r) xs (flip (match rules (Seq rs)) k)
    match _ (Seq []) xs k = k xs
    match rules (Alt r1 r2) xs k = match rules r1 xs k || match rules r2 xs k
    match' :: M.Map Int Rule -> Rule -> String -> Bool
    match' rules r s = match rules r s null
    solveOne :: String -> Int
    solveOne s =
    let (ruleLines, inputs) = second tail $ span (/= "") $ lines s
    rules = buildRules ruleLines
    in length $ filter (match' rules (Seq [0])) inputs
    new8 :: Rule
    new8 = Alt (Seq [42]) (Seq [42, 8])
    new11 :: Rule
    new11 = Alt (Seq [42, 31]) (Seq [42, 11, 31])
    solveTwo :: String -> Int
    solveTwo s =
    let (ruleLines, inputs) = second tail $ span (/= "") $ lines s
    rules = M.insert 8 new8 $ M.insert 11 new11 $ buildRules ruleLines
    in length $ filter (match' rules (Seq [0])) inputs
  • file addition: input.txt (-xw-x--x--)
    [0.5]
    90: 86 86
    122: 86 1 | 99 20
    116: 86 58 | 99 75
    20: 86 123
    62: 99 95 | 86 113
    81: 76 99 | 90 86
    106: 120 86 | 93 99
    73: 99 72 | 86 45
    117: 131 99 | 72 86
    92: 86 96 | 99 98
    13: 3 99 | 118 86
    56: 90 86 | 58 99
    85: 72 99 | 51 86
    51: 99 99 | 86 86
    59: 99 25 | 86 62
    65: 99 15 | 86 97
    112: 86 13 | 99 38
    46: 33 86 | 2 99
    10: 67 86 | 68 99
    33: 120 99 | 76 86
    38: 35 86 | 125 99
    26: 86 10 | 99 55
    1: 33 99 | 60 86
    8: 42
    16: 51 86 | 93 99
    107: 40 99 | 2 86
    40: 17 120
    34: 86 82 | 99 127
    88: 93 17
    2: 99 51 | 86 120
    32: 100 99 | 7 86
    113: 86 127 | 99 82
    14: 73 86 | 44 99
    25: 86 101 | 99 56
    130: 110 86 | 109 99
    19: 86 4 | 99 49
    30: 86 92 | 99 70
    27: 17 86 | 86 99
    94: 47 86 | 53 99
    115: 86 107 | 99 84
    15: 76 99 | 58 86
    58: 86 99
    105: 130 86 | 32 99
    71: 120 99 | 131 86
    12: 99 131 | 86 82
    60: 72 86 | 93 99
    84: 86 102 | 99 80
    44: 99 76 | 86 72
    125: 76 99 | 131 86
    18: 99 71 | 86 52
    129: 37 86 | 111 99
    102: 99 131 | 86 76
    66: 86 105 | 99 41
    99: "a"
    9: 99 18 | 86 65
    131: 17 99 | 99 86
    39: 76 99 | 93 86
    64: 115 99 | 114 86
    57: 86 48 | 99 94
    35: 72 86 | 51 99
    0: 8 11
    77: 86 83 | 99 106
    118: 72 86 | 75 99
    47: 99 103 | 86 85
    23: 99 27 | 86 76
    48: 119 99 | 78 86
    49: 86 51 | 99 45
    67: 86 120
    61: 86 72 | 99 127
    108: 72 99 | 72 86
    95: 86 58 | 99 90
    83: 86 27 | 99 131
    75: 86 99 | 99 99
    101: 51 99 | 27 86
    103: 90 99 | 90 86
    128: 86 69 | 99 33
    70: 99 14 | 86 19
    52: 127 86 | 90 99
    21: 86 24 | 99 59
    22: 86 63 | 99 12
    42: 79 86 | 66 99
    97: 51 17
    104: 86 33 | 99 28
    100: 99 16 | 86 39
    72: 99 86
    78: 86 43 | 99 50
    55: 86 6 | 99 34
    45: 99 99
    5: 86 46 | 99 77
    93: 99 99 | 99 86
    6: 131 99 | 51 86
    110: 71 86 | 28 99
    68: 90 86 | 27 99
    29: 87 86 | 122 99
    80: 86 93 | 99 131
    54: 120 86 | 75 99
    43: 93 86
    98: 99 103 | 86 117
    7: 101 86 | 88 99
    127: 17 86 | 99 99
    96: 86 12 | 99 61
    41: 99 5 | 86 112
    79: 86 57 | 99 21
    11: 42 31
    86: "b"
    111: 45 99 | 72 86
    63: 76 99 | 127 86
    124: 86 81 | 99 116
    28: 86 75 | 99 58
    82: 99 86 | 86 99
    121: 64 86 | 74 99
    87: 86 124 | 99 104
    74: 99 26 | 86 9
    31: 126 99 | 121 86
    50: 99 72
    119: 34 86 | 36 99
    36: 86 82 | 99 75
    91: 86 131
    3: 58 99 | 27 86
    114: 99 129 | 86 22
    24: 86 89 | 99 128
    53: 91 99 | 95 86
    126: 29 86 | 30 99
    109: 99 108 | 86 23
    17: 86 | 99
    76: 86 86 | 99 86
    120: 17 17
    89: 54 86 | 37 99
    4: 99 131 | 86 58
    69: 27 17
    37: 99 58
    123: 86 76 | 99 82
    bbababbaabbaaabaaaabbabbbbbababbbababaaaabbaabaaaaaabaaaabbaabba
    aaabbbabbabbbbbbaabbabababaaaaabaaabaaaaabaaaabbbbabbabb
    babaabaabbabaaaaabbababb
    babbabbaababbaaaababbaabbbbbaabaabbbababaabbbabbbabababaabbabbabaabbbaababbbbbbb
    bababbbabaaabbaabbababab
    aaaaabaaaabbaabaaaaabbaa
    aabbbaaaaababbaaabaabbbbabbbaaaaabbaaaab
    baaaabaaaabbababbaaabbab
    ababababaaaaabaaaaabbaaa
    baabaababaaabbaabbbababb
    abbbabbbbbabaaabaabbabbb
    aaababbbabababbbaabbaaaabababbaa
    babbaaabbaaaabaababbbabb
    bbbabbbabbabaaaabaabaaab
    bbbbaaabaaaabbbaabbbbabb
    aaaaaaaaaaaaabaabaaaabbb
    babaabbababbabaababbaaba
    bbabaaaabaaabbaaaabbbbbbbabbabbbbaaaabab
    babaabbbbbbbbbaabbaaabaa
    baabbbabababbababaabbbaa
    baaaabaaaabaaaaaaaaaaaab
    aaabbbbbbbabbbabbbbbabbb
    bbabaaabaaababaabbbbbbba
    baaabaaabbabbaaaaaaababb
    abbabaabbaaaaaaaaabaabba
    aaaabababbbbbbaabababbab
    bbbbbbabababbaabaabbbabaaaabbabbaabbabbbbaababbbabaabbbbabbabaabababaabaaaaaabab
    bbbabbaaaababbabaabaabbbabbbabab
    bbbabbbababbbbaabbbbbbab
    baabaaaaabaabbbbaaabaaaabbbbbbab
    bbbbaaaaaabaaaaaabbbabaababbaabb
    bbbbbabaabaaaaababbaaabbbaababbbbbaaabaa
    aaabaabaaaabaaaaababbaaaaaababbbaaababab
    bbaaaababbbaaabbabbabbabbabbbbabbababaabbbabbabbabaaabbabaaaabba
    aababbbaaaabbbaabbbbababbabbaaaa
    abbbaabbabaaaaababaaaaaa
    babbabbabbaabababbabaaaaaabbbabbbabaabbbbabbbaabbaaaaaba
    aabbbaabaaabbabbbbaabaaabbbabbababbaababababbbba
    baabbabbbaabbbbbbbaaaaaababababaaabbbbabaabaabbaaaaabbab
    bbabaaabbbbbaaaababbabbb
    baabaabaaababbbabaaababa
    aaaabbbbabbbaabbababaaaa
    babbababaaaababababaabab
    bbbaabbbabbbabaabbbabbbaaabbaabbabbbbbbbaaaabaaabaaabbaabbbbabbb
    aabbaabbabbabbbabaaaabba
    abaabbaaaaabbabbaaabbbabbabbaaaa
    bababaabbaaabaaababbababbbbbbabbbaaabaab
    aaababbbaabbaabbbbaaabbaaababaaabaabbbaa
    abbaaababbaaababbaaaabba
    bbaababaaabbabaaababbaabbaabbbbaaabbaabbabaaabbabbabbbbbabbbaaabbbababbb
    bbaaabbbbbaaabbabaaaabba
    abbbabaabbaabaaaaaabbaaa
    bbbabaabbbbbbbaababbbbaaabbbabba
    abbabbaaaaaabbbbbbabaaabbaaaaaab
    bbaababaaaababaabaabbababbbbbaab
    aabbababaaabbbaaaaabbabbaabbbbbbbabbbabb
    aaabbbaaaababbabbababbbb
    aababbababaaabaabababbbb
    bbabbbabbbabbbabababbbba
    aaabaaaaabbbbbbbbaaaaaab
    babaabbbaaabbbabbaaaaaab
    bbaabbbaaabbababbbaaabaa
    aabbbaaaaaaaaaaaaaaaabaaaabbbbbabbabaaaaabbbbbab
    abaaaaabaabbbaaaabbbaaab
    abaabbabbabbbbbabbababaa
    baaabbaaaabbbabbaaaabaaa
    abbbbbaabbaaababbbbabaab
    aababbaaaabbbbbabaababaabababaabbabbbaba
    abaabaaabbabababababababbaabaaabbbaabaabaabbbababbbabbbabbabbbbbabababaabbabbaba
    aaaaaabaaaaabababbbabbabbbaabbabaababbbb
    babaaaababaaababaabbabba
    ababbaaaabaaabbbbababaaa
    baababbbabbbbaaabaababbbabbbbaababaaabaaaabbaabababababaaaaababa
    bbaabbababbabaabbbabbabb
    bbabbbbaababbaabbbbabbbbbabbabaaaaabbbababbbbaabaaaaaabbbababbbbbabbbabb
    baaaaaaababaaaabbbbbaaaaabaabbbbbaababbb
    aabbabaaabbbbbaabbbaabab
    ababbabbbbaabaaabababaabaaaabbab
    aaabbabaaaaabbbbabbbbaaa
    bbaaaaabbaaaabaaabbbaaaa
    abbbaaaaabbbabbbabbabaaa
    bbaaaabbaaaababababaababaaaabbbaaabaabaaaababbabbbaaaabaabaaabbaababbbaaabaabbaababbbaabaabaabbb
    bbaabbaaaababbababbaaabbbabbbababbbbbbaabbaabababbababaababbaababbbaaabbaabbbbab
    aababbabaaabaaaabbaabbaa
    babaaabbaaabaababbabbbbabbbaabaabbaabbbababbabaabababaabbbababbabbbbaababbaabaaa
    baabbabbbbaabbbaaabbaaab
    abaaaaabbbaababaabbaabab
    aaabbbbbaaababaaabababaabbaababb
    bbaaababbaabbbbababbbbbabbaabbabbbbbaaabbbabbabb
    bbabbbbaabbbbbbbbaaaabba
    aababbabaaabaababaabbabbabaaaabaaabbbabaaabbbabbbabaaaaa
    babbbbbbaabbbaabbabbbabb
    baabbbbaababbaabaaabbabb
    aaabaabaabbbaabababbbbaaaaaabaabbabaabbbabaaabbbaaaabababaababbbababbabaaaaaabab
    aabbabaabaaaaaaababbababaabaabba
    ababbababbaabbbaabaabaababbaabbbaaaabbaa
    aabbababaabbbbbbbaababaababbabba
    baabbabbbaaaaaaaaaaabaaa
    baabbbabaaabbabbbbbbbabb
    babaabaaaabaaaaabbbaaaab
    baaaaaaababbbbbaabbbbbab
    bbabbbabababbaabbaaababa
    bbbbabababaaaaababbabbbababbabaaabbaabababbababaaaaabbab
    aabbbbbababbabaaabababaaaaabaababbbabbab
    babbbbaabaabbbbabbbbbabb
    aaabbbabbabaabbbabaaababbaaabaab
    abbaaabbbbaaabbbbabbbbbbbbbbabaa
    bbabbabaaaabbabbbbbababababbaaabbabaaaaababaaaba
    bbaabaaaaabaaababaababbb
    baabbaaaaaababbababbaabaabababbbabaaabbbbbbaaabbbbababaababaabbbbbabaaababbaaaabbbaaaaaa
    aaabaaabbbbbaaaabbbbabba
    abbbaabbbabbbaaaaabaabab
    aaabbbaabbaabbabbaabbbbbbbabbaaaaaaabbbaaaaaabab
    aaaaaaaaaabbaabaaabbbbaabbaaaaabaaabbaababbbbbab
    bbbbababbabababbbbababba
    abaaaabaabbbbaaaabbbbbbbbaababbabbbbaabbaabbbbbabaaabbbaaaaaabab
    bbbbbbaabaabaaaaaaaaabbaaaaaaababbabbabaabbabbab
    abbbbbbbbaaaabaaaababbabbbbbaabb
    bababaabaababbbaabbaabab
    abaaaabaabaabbabaaabbbbbbbaaaaaa
    aaaaaabaababababbbaabbbabbaaaaba
    abaabaabbbababbababbaabb
    baaabbaabbbaabbbbabbabbb
    baababaabaaabaaaabbabbbabababbaabbbbbbba
    bbbaabbabbbabaabbaaabbaaaabababaaabbbbaaababbaab
    abaabbbbabbabbbbaaaaabab
    bbbabaababaabbbbbbbaaaab
    abbaaabaaaaaaabaabaaaabaabbaaabbabbabbbbaabaabab
    aabaaaaababbbaaaaaaababb
    aaabbbaaabaabbbabbbbabaa
    aaaaabaababaabbabaaaabaaabbaaaaa
    aaaabaabababbbbbaaaaaaaaaabbbbbbbbbbbbababbbbabbbaaabaab
    bbabbbabbaabbbbaaaabaabaabaaabbbaaaaaaababbbaaab
    aabaaabaaabbababbabababa
    babbbaaaaabbbaabbbabbababbbbbbbaabbababa
    abbaabaabaabbaaaabaaaaaaababbaab
    abaaaababbaabababaabbbababbabaabaaababbbbbbbabba
    bbaaaabababbabababbabaabbbaaabbbbbbabbaa
    aabbaabbaaabbbaabaaaaaab
    bbaabbabaaaabbbabbabbabb
    abbaaabbabbbaaaabbbbbaaabbabbabababbbbbbabaabbbbbabbaaaaabaababb
    ababbaabbabbbbbbbbabaaaabbbbababbaaabbbabaabaabb
    aaabbabaaabbbabaaaaabaabaaababbaabbbabbababbbbabaabbabbb
    abbabbaaabababababbbabaaaaaabaabbabaabab
    babaabaaababbaaaaabbaaab
    aaaaaababababaababbaaaab
    ababbabaaababbaaabbbaababaaaaabb
    bbaaabbabaaaabaabbabaaaaaaaababbbbbabaaa
    bababbbabbaabbabbbbbabba
    bbaaabbaaabbbbaabababaabbabbaaaa
    aaaabaabaaaaabbaababbaabababbaaa
    ababbabaabbabbbbbbaababb
    aabbbbbbbaaabbbababababa
    bababbbaabbabbaabaaaabab
    bbaaabbbaabbbbbaaabaabba
    aabbbbaaababbbabbbaabbbb
    baaaabaaabaaabbbababbbabaabbbabbaabbbaabbbbbbbabaaaabbaababbaabaaababbbb
    babbbbabbbbababbabaaabba
    babbbbaaababbbbbbabbbaaabaabbaab
    bbbbbbaaaabbbabbaaabaaaabbbabaaaaabaabab
    babbbbbabbabaaaaaaaaabbb
    ababbbabbabaabbaaaabbabbaaaabbaa
    bbbabbbabababbbabbaaabbbbbbbaaba
    abbabbaaabaaababbaaaaabb
    bbababbabababaaaaababbbbbabbbaabababbaabaabbbaababbaaaba
    babbababaabbbaaaabbaaaab
    abbaaabbbaaaaaaabbababab
    bbbabbbabbabbabababbbbab
    babbbaaabababaabaababbbababbbbbaabbbbaba
    bbbababaabaabaabababbbbbabaaaababbabbbabbbaaabaababbaaaaabaaaabbaaaabbab
    babababbabbabbbaaaaabbab
    baabbabbabaabbaaababbbbb
    aabbabaaaaaaabbaabbabbbaababbaabababbbbbbabbbababbbaaaba
    aababababbbabbbaabbaaaaa
    aabababaaabaaabaaabbaababbbabbaabbaaababbbbbbbababababbaabbbbbab
    abbbaabbbbabbbbaabbabbab
    aaaabbbbaabbaabbbabaaaaa
    aababbababaabbbaaabaabba
    baaaaabaaaaaabbababaabbbabaaaabbabaabbbaabaaabbaabaababaaaabbaaa
    ababbaaabaababaabbbbbababaaabbbb
    babbabababbbaaaabbbaabaa
    baabbabbbaabbabaaabbbbaabbbaabbaabbabaababaaabaabbaababbbaaaabbb
    abaabbbbaaaabaabbbbbbbba
    baabbabaaaababaaabbaabbbbbbbbbbb
    abbaaaabababbbbabababaabbbaaabbaababaabbbaaaaaaaaabaaaab
    bbbabbabaaaabbababbaabababaaaabaaabbaaaabbbababa
    bbbababababbbbbbababbbba
    bbbbbbaaaaabbbaabaababab
    aaaabbbaabbaaababaaababa
    bbaaabbabbabaabaaaabaaaaabaaabbabaaababb
    ababbabaabaabbaababaaaaa
    bbbaabbaaaababbaabbbbabaaabaaaab
    abbbabbbbbbabbaaabbaabbbababbbbaaabababb
    bbbbbaaabaaabaabaabbaaab
    bbaabbababaaababaaabbbabaaaababaabbaaababaabaaab
    abbbabbbaabbbbbabbababbb
    bbbaabbabbabbbabbaaaabba
    bbabaabaababbbaababababaaabaabababaaaaaabaaababb
    babaabaaaaaaabaaaabaabba
    babbbbbaaabbbaaaaabbababbaababba
    aababbaaababbbbbbabbabba
    bbabbbabaabbaabbbbbbabaa
    ababbababbbababaababbbaa
    aaabbbaabbabaabaababbbba
    bbaabbabbbabbaaabaabbbababaaabaabbbbbabbbbaaabaaababaaba
    baababaabbaaabbabaaababb
    abbaabbbababababaaababbbbaabaabb
    baabbbbbaaabaababaababba
    babaabaababaabbbbaabaabaaaababaababbabba
    bbaaaaabaababbaaaabbaabaaabbabbbbababbaa
    abbaaabbaaabbbbaaabbbbaaabbaaaabaabbaaabbaababbbabbabbabaaaababb
    aaabbaabababaaaabaabaaab
    bbaabbaabbbabaaabbabbbbbbbbabaabbabaaabababbbbabbaabbabbbbbabbaa
    bbbabbbbbbabbbaabaababab
    bbabbbbabbaabbbababbabba
    aaabbbaabaabaababaabbabababbaaaabbbbbbba
    babbaabababbabababbbbbbaababaabbbaabbbbababaaaabbbaaaaababbabaaabbbbaaaaabaaababbbbaabba
    babbbabbbaaaaaaabbaabbbbabbbbabbaaabababaabbbbab
    bbaaaaababaaabbaabbbaaaaaababbabbbaabaabaaabaaabbabaabab
    baabbbbbabbaaababbbbaaabbbbbbaabbbbbbaabbaaaaababbaaaaaaaabbabba
    bbabbbaaabaaabbbabbbabaaaababbaaaabbbaabababbbbabbababaaaaaababb
    baaabaaaaabbababbbabbbbaabaabbbaaabbbaabbaaabbabbaaabaab
    aaaaaabaaaaabbbabbbaabaa
    bbaaabbbbabaaaabbabaaaabaabaaaaababaababaaaabaaaaababbbb
    babbaaababbbaabaabbbbaab
    aaabbaababbbbbabaaabbaaaaabbbbbaabaabaababababababbabbbb
    babababbbaabaaaabaaabbbb
    babbabaaaaabbbabbbbbbbaabbbaaaaa
    aabbabaabaaabbbaaaaaabab
    bbbabbaaabbbbabbbababbabaaabababaababaab
    bbabaaaabaabbabbbbbabaabaaababbb
    baababbbbaaaabbabbaabbbbbbbbbaaabbbbaaba
    aabbaababaaaabaabaabbaba
    bbbabbaababaabaaabbbaaaaabaaaabaaabaaababababaaabbababbbbbbbabba
    bbabaabaabaaabaabbabbaab
    aabaaaaaaaababbbaaababbbbbbaabab
    baaaabaaabbbabbbabaaababbaabbaaa
    baabbbbabababbbaaababbbabbabbbbabbaabbbaabbabababaaabababaabaabbbabbabba
    baabaabaabababaabaaaabbb
    abbaabbbbabaabaaababbababaabbabbbabbbbabbbbbaabababbaabb
    abbbabbbbbbababaabbbabbabbbbbaab
    abaaabbbbbbaabbbaabbaaab
    ababbbabbbabbbaaabaaabaababababa
    bbbbbbaaabbbaaaaaaabbabaabbbbaabbbbaaaab
    bababbbbbabbbbbbbaabbbbbbbababbbbabbabbbabbbbaabbaaaabba
    baaabbaaaaaaaababaaabbbaabaabaaabaabababaaabbaaaabbaabaa
    aabbaabbbbbabaababaabaaaababbaaabbabbababbbbaabb
    abbbbbaabbbabbbbbbbbaaba
    aaabbabbbbbabbbababaaabb
    abaabaaaaabbaaaababbbaab
    aaaabaabbbbbaabababaaaaaaaaaaabb
    bbbababaabbbabaabaababba
    abbbaabbabaaababbbbbbabb
    babbabbbaaaaabbbaababbabbaabbbbbbaaabbaaaabbbbbaabaababbbbaaaaba
    aaaaaababbbababababaabab
    bbaabaabbbaaaabbabbababaaaaaababaabaaabb
    aabbabaababaaaababbbabab
    ababbbababaabbbbbaaaabbbbbbbbaababbbbaaabbabbbaaabbbabbbbaaaabbbaaaaaaaaababaaab
    bbbabaabaaaaabbaaaabaabb
    babbaaabbaabaababbbbaaba
    bbabaabababbbbbaabaabaaabbaaabbabbbabaaa
    abbabaabbaaaabaabbbaaaba
    aabbabaabaaabbbaaaabbbabbabababbbbbaabbb
    aabbbbbbabababababbbbbab
    abbabbbabbabaababaaabbbb
    baaabbaaababbaaabaabaabb
    bbbabbbaaaabaaaaabaaababaaaabbbbaabbaaaaabbbabab
    aabbbabaaaababaabaaaaaba
    abbbabbbababbabbbbaabbaa
    abbbbbabaabababbbabababa
    bbaabaabaababbaabababaaa
    bbabaaabaababbbaaababbbaaaababba
    abbaabaababbababaaaabbbaabbabaababbbaabaaaabaaabaabbbbab
    babbbaaabbabbbaababbbbaaaabaababaaaabaaa
    babababbabaaaabaaabbbabaaabbbabababaaaabbbabbaab
    aabbbaababbaaabaababbaababaaabbbaaaaaabaababbaaaaabaaabbbbababaa
    abbbabbbaaabbbbaaabaabab
    abaabbaaaabbaabbbbbaaaaa
    bbabaaabaaaabbbbaabbbaaaaabbbbbbabbbbbbabbbabaaa
    bbbabbaababbbbbabbaaaaabbabaabaaababaababaaaaabb
    abbbabbbababbaaabbabaaaaabbabbbabbabaabbbaaaaabbabbabaaabbbbbbbb
    bababbbaaaabaabaabbababb
    abbbbbbbabababaaabbaababbabaaababbaaaaaa
    abbaabbbabaaaaabaaaaabbaabaaaaabababbbababbbabab
    abbabbbbbbabaaaabbbabbbabbbbaaba
    abbaabbbbaabaababaababba
    bbabaaababaabbbaaaaaabbb
    baabbabaaaaabbabaabbbbabbabbabbabbaaaaaa
    babbbbbbababbababbabbbabaabbaaab
    aaabaaabbbbabbbbaabbabbbbaaaaaabaabbbaabbaababaa
    baabbbbbaaabaababababbab
    babbaaabaaaabaababbabbaaaabaabaa
    abaabbbbbbabaaaaaabaabab
    aaaaabbaabababaabbbbbababbbababbbbaababb
    abababababaabaaabbaaababbabbabbb
    abaaaaabbbbbbabaaaaabbaa
    aaaabbbbbbbbababbbabaabb
    bbabbabaabaaabaaaaababab
    aaabbbbbabbabbbbbabaababbbaabaababbababb
    bbabaabaabbabbaaaabaabba
    abbabaaababbaabaaaaabbbabbaaaaabbbaabbabbababaaabaabbaabbbbaaabaaaabbbaabbbbabba
    ababbbabaaabbabbaaabbabaaabaabba
    bbbabbbbbabbbbbbabaaabaaaaababbbbababaaa
    babbabaaabbaaabbabbabaaa
    babbbbaaabbbbbaaabaaabaabbbbababbaaababb
    abbabbbbabababbbbbabbaaabaaababb
    babbababbbaababaabbabbab
    bbaaababbbbbaaababbbbabb
    baaaabaababaabbbabaabbbaaabbbaabaaaabbab
    abbaabbbbbaaaaabbbaabbabbaabbaab
    aaaaaababbaababaaabaaabababbbabb
    baaabbaabbbababaaababbbaaaaaabba
    bbbbabaaaaabaaaaaaababbaaaababbbbbaabaaaaabaaaabaaaabbaabbbbbbbb
    abaaabbbbaaabaaababbabba
    aaaaabaaaaabbbaabbabaaaaabababaaabbbbbaabbaaaaba
    ababbabababbbaaaaaaaabbb
    aaababaaabaabbaababbabbb
    ababababaabbbabbbaaabaab
    baabbbabbaaabaaabaaabbbabbabbabb
    bbbabbaabbabbababaabbbbaabaabbabaabaaabbbaaabbbb
    aaabbbabaaabbbbbabbabbbbbbbaaaaa
    aaabbababbaaababaaaabbaa
    bbbabbaaababbbabaaabaabb
    baababbabbbabaaababaaababababbaaaababaabbbbaaaabbabaaababbbabaababbabbbbbaaabbab
    bbbabbaababaabbabbbbbaaa
    abababaabaaaabaaabababbbbaababbbbbabbaaaaaabbaabbbbabababbabaabb
    babbbababaaabbbabaababbbaaabababaaaababbbabbaabbabaabbba
    bbbabbaabaabbbbaaaaaabaabaaabbab
    bbbabbbbaabbaabaaaaabbbbbaabbabbabbaabaababbaabbaaabbaaa
    aaababbbbaaaabaaabbabbbbabbbbaba
    aaaaabbababaabbabaaaaaaaaaaaaababbbbbbaaababbaaaaabaabab
    babbababbaaabbabbabbaaaabbaabaabbaaabbab