% file: grammar.pl % author: Bob Keller % purpose: Using grammar notation in Prolog % show(Height) will list all generable strings with derivation tree height at most Height % The productions are given in Prolog's Definite Clause Grammar Notation. show(Height) :- setof(Result, gen(Height, Result), Set), display(Set). % display displays a list of results one line at a time. display([]) :- nl. display([[_Length, Result, _Height] | X]) :- atom_chars(Atom, Result), write(Atom), nl, display(X). % gen(H, R) will generate as result R all phrases of height at most H % A result is a triple [Length, String, Height]. Length is included % for purposes of sorting the results by length (setof sorts automatically). gen(Height, [Length, Result, Height]) :- s(Height, Result, []), % s is the start symbol of the grammar length(Result, Length). % Grammar rules % The original rules are shown as comments on the right, after % s(H) --> {H > 1, H1 is H-1}, [a], s(H1), [b], [b]. % S --> aSbb s(H) --> {H > 1, H1 is H-1}, t(H1). % S --> T t(H) --> {H > 1, H1 is H-1}, [b], s(H1), [a], [a]. % T --> bSaa t(H) --> {H > 1, H1 is H-1}, s(H1). % T --> S t(H) --> {H > 1}, []. % T --> epsilon /* Sample ?- show(15). abb baa aabbbb abaabb babbaa bbaaaa aaabbbbbb aabaabbbb ababbaabb abbaaaabb baabbbbaa babaabbaa bbabbaaaa bbbaaaaaa aaaabbbbbbbb aaabaabbbbbb aababbaabbbb aabbaaaabbbb abaabbbbaabb ababaabbaabb abbabbaaaabb abbbaaaaaabb baaabbbbbbaa baabaabbbbaa bababbaabbaa babbaaaabbaa bbaabbbbaaaa bbabaabbaaaa bbbabbaaaaaa bbbbaaaaaaaa aaaaabbbbbbbbbb aaaabaabbbbbbbb aaababbaabbbbbb aaabbaaaabbbbbb aabaabbbbaabbbb aababaabbaabbbb aabbabbaaaabbbb aabbbaaaaaabbbb abaaabbbbbbaabb abaabaabbbbaabb abababbaabbaabb ababbaaaabbaabb abbaabbbbaaaabb abbabaabbaaaabb abbbabbaaaaaabb abbbbaaaaaaaabb baaaabbbbbbbbaa baaabaabbbbbbaa baababbaabbbbaa baabbaaaabbbbaa babaabbbbaabbaa bababaabbaabbaa babbabbaaaabbaa babbbaaaaaabbaa bbaaabbbbbbaaaa bbaabaabbbbaaaa bbababbaabbaaaa bbabbaaaabbaaaa bbbaabbbbaaaaaa bbbabaabbaaaaaa bbbbabbaaaaaaaa bbbbbaaaaaaaaaa aaaaaabbbbbbbbbbbb aaaaabaabbbbbbbbbb aaaababbaabbbbbbbb aaaabbaaaabbbbbbbb aaabaabbbbaabbbbbb aaababaabbaabbbbbb aaabbabbaaaabbbbbb aaabbbaaaaaabbbbbb aabaaabbbbbbaabbbb aabaabaabbbbaabbbb aabababbaabbaabbbb aababbaaaabbaabbbb aabbaabbbbaaaabbbb aabbabaabbaaaabbbb aabbbabbaaaaaabbbb aabbbbaaaaaaaabbbb abaaaabbbbbbbbaabb abaaabaabbbbbbaabb abaababbaabbbbaabb abaabbaaaabbbbaabb ababaabbbbaabbaabb abababaabbaabbaabb ababbabbaaaabbaabb ababbbaaaaaabbaabb abbaaabbbbbbaaaabb abbaabaabbbbaaaabb abbababbaabbaaaabb abbabbaaaabbaaaabb abbbaabbbbaaaaaabb abbbabaabbaaaaaabb abbbbabbaaaaaaaabb abbbbbaaaaaaaaaabb baaaaabbbbbbbbbbaa baaaabaabbbbbbbbaa baaababbaabbbbbbaa baaabbaaaabbbbbbaa baabaabbbbaabbbbaa baababaabbaabbbbaa baabbabbaaaabbbbaa baabbbaaaaaabbbbaa babaaabbbbbbaabbaa babaabaabbbbaabbaa babababbaabbaabbaa bababbaaaabbaabbaa babbaabbbbaaaabbaa babbabaabbaaaabbaa babbbabbaaaaaabbaa babbbbaaaaaaaabbaa bbaaaabbbbbbbbaaaa bbaaabaabbbbbbaaaa bbaababbaabbbbaaaa bbaabbaaaabbbbaaaa bbabaabbbbaabbaaaa bbababaabbaabbaaaa bbabbabbaaaabbaaaa bbabbbaaaaaabbaaaa bbbaaabbbbbbaaaaaa bbbaabaabbbbaaaaaa bbbababbaabbaaaaaa bbbabbaaaabbaaaaaa bbbbaabbbbaaaaaaaa bbbbabaabbaaaaaaaa bbbbbabbaaaaaaaaaa bbbbbbaaaaaaaaaaaa aaaaaaabbbbbbbbbbbbbb aaaaaabaabbbbbbbbbbbb aaaaababbaabbbbbbbbbb aaaaabbaaaabbbbbbbbbb aaaabaabbbbaabbbbbbbb aaaababaabbaabbbbbbbb aaaabbabbaaaabbbbbbbb aaaabbbaaaaaabbbbbbbb aaabaaabbbbbbaabbbbbb aaabaabaabbbbaabbbbbb aaabababbaabbaabbbbbb aaababbaaaabbaabbbbbb aaabbaabbbbaaaabbbbbb aaabbabaabbaaaabbbbbb aaabbbabbaaaaaabbbbbb aaabbbbaaaaaaaabbbbbb aabaaaabbbbbbbbaabbbb aabaaabaabbbbbbaabbbb aabaababbaabbbbaabbbb aabaabbaaaabbbbaabbbb aababaabbbbaabbaabbbb aabababaabbaabbaabbbb aababbabbaaaabbaabbbb aababbbaaaaaabbaabbbb aabbaaabbbbbbaaaabbbb aabbaabaabbbbaaaabbbb aabbababbaabbaaaabbbb aabbabbaaaabbaaaabbbb aabbbaabbbbaaaaaabbbb aabbbabaabbaaaaaabbbb aabbbbabbaaaaaaaabbbb aabbbbbaaaaaaaaaabbbb abaaaaabbbbbbbbbbaabb abaaaabaabbbbbbbbaabb abaaababbaabbbbbbaabb abaaabbaaaabbbbbbaabb abaabaabbbbaabbbbaabb abaababaabbaabbbbaabb abaabbabbaaaabbbbaabb abaabbbaaaaaabbbbaabb ababaaabbbbbbaabbaabb ababaabaabbbbaabbaabb ababababbaabbaabbaabb abababbaaaabbaabbaabb ababbaabbbbaaaabbaabb ababbabaabbaaaabbaabb ababbbabbaaaaaabbaabb ababbbbaaaaaaaabbaabb abbaaaabbbbbbbbaaaabb abbaaabaabbbbbbaaaabb abbaababbaabbbbaaaabb abbaabbaaaabbbbaaaabb abbabaabbbbaabbaaaabb abbababaabbaabbaaaabb abbabbabbaaaabbaaaabb abbabbbaaaaaabbaaaabb abbbaaabbbbbbaaaaaabb abbbaabaabbbbaaaaaabb abbbababbaabbaaaaaabb abbbabbaaaabbaaaaaabb abbbbaabbbbaaaaaaaabb abbbbabaabbaaaaaaaabb abbbbbabbaaaaaaaaaabb baaaaaabbbbbbbbbbbbaa baaaaabaabbbbbbbbbbaa baaaababbaabbbbbbbbaa baaaabbaaaabbbbbbbbaa baaabaabbbbaabbbbbbaa baaababaabbaabbbbbbaa baaabbabbaaaabbbbbbaa baaabbbaaaaaabbbbbbaa baabaaabbbbbbaabbbbaa baabaabaabbbbaabbbbaa baabababbaabbaabbbbaa baababbaaaabbaabbbbaa baabbaabbbbaaaabbbbaa baabbabaabbaaaabbbbaa baabbbabbaaaaaabbbbaa baabbbbaaaaaaaabbbbaa babaaaabbbbbbbbaabbaa babaaabaabbbbbbaabbaa babaababbaabbbbaabbaa babaabbaaaabbbbaabbaa bababaabbbbaabbaabbaa babababaabbaabbaabbaa bababbabbaaaabbaabbaa bababbbaaaaaabbaabbaa babbaaabbbbbbaaaabbaa babbaabaabbbbaaaabbaa babbababbaabbaaaabbaa babbabbaaaabbaaaabbaa babbbaabbbbaaaaaabbaa babbbabaabbaaaaaabbaa babbbbabbaaaaaaaabbaa bbaaaaabbbbbbbbbbaaaa bbaaaabaabbbbbbbbaaaa bbaaababbaabbbbbbaaaa bbaaabbaaaabbbbbbaaaa bbaabaabbbbaabbbbaaaa bbaababaabbaabbbbaaaa bbaabbabbaaaabbbbaaaa bbaabbbaaaaaabbbbaaaa bbabaaabbbbbbaabbaaaa bbabaabaabbbbaabbaaaa bbabababbaabbaabbaaaa bbababbaaaabbaabbaaaa bbabbaabbbbaaaabbaaaa bbabbabaabbaaaabbaaaa bbabbbabbaaaaaabbaaaa bbbaaaabbbbbbbbaaaaaa bbbaaabaabbbbbbaaaaaa bbbaababbaabbbbaaaaaa bbbaabbaaaabbbbaaaaaa bbbabaabbbbaabbaaaaaa bbbababaabbaabbaaaaaa bbbabbabbaaaabbaaaaaa bbbbaaabbbbbbaaaaaaaa bbbbaabaabbbbaaaaaaaa bbbbababbaabbaaaaaaaa bbbbbaabbbbaaaaaaaaaa aaaaaaaabbbbbbbbbbbbbbbb aaaaaaabaabbbbbbbbbbbbbb aaaaaababbaabbbbbbbbbbbb aaaaaabbaaaabbbbbbbbbbbb aaaaabaabbbbaabbbbbbbbbb aaaaababaabbaabbbbbbbbbb aaaaabbabbaaaabbbbbbbbbb aaaaabbbaaaaaabbbbbbbbbb aaaabaaabbbbbbaabbbbbbbb aaaabaabaabbbbaabbbbbbbb aaaabababbaabbaabbbbbbbb aaaababbaaaabbaabbbbbbbb aaaabbaabbbbaaaabbbbbbbb aaaabbabaabbaaaabbbbbbbb aaaabbbabbaaaaaabbbbbbbb aaaabbbbaaaaaaaabbbbbbbb aaabaaaabbbbbbbbaabbbbbb aaabaaabaabbbbbbaabbbbbb aaabaababbaabbbbaabbbbbb aaabaabbaaaabbbbaabbbbbb aaababaabbbbaabbaabbbbbb aaabababaabbaabbaabbbbbb aaababbabbaaaabbaabbbbbb aaababbbaaaaaabbaabbbbbb aaabbaaabbbbbbaaaabbbbbb aaabbaabaabbbbaaaabbbbbb aaabbababbaabbaaaabbbbbb aaabbabbaaaabbaaaabbbbbb aaabbbaabbbbaaaaaabbbbbb aaabbbabaabbaaaaaabbbbbb aaabbbbabbaaaaaaaabbbbbb aabaaaaabbbbbbbbbbaabbbb aabaaaabaabbbbbbbbaabbbb aabaaababbaabbbbbbaabbbb aabaaabbaaaabbbbbbaabbbb aabaabaabbbbaabbbbaabbbb aabaababaabbaabbbbaabbbb aabaabbabbaaaabbbbaabbbb aabaabbbaaaaaabbbbaabbbb aababaaabbbbbbaabbaabbbb aababaabaabbbbaabbaabbbb aababababbaabbaabbaabbbb aabababbaaaabbaabbaabbbb aababbaabbbbaaaabbaabbbb aababbabaabbaaaabbaabbbb aababbbabbaaaaaabbaabbbb aabbaaaabbbbbbbbaaaabbbb aabbaaabaabbbbbbaaaabbbb aabbaababbaabbbbaaaabbbb aabbaabbaaaabbbbaaaabbbb aabbabaabbbbaabbaaaabbbb aabbababaabbaabbaaaabbbb aabbabbabbaaaabbaaaabbbb aabbbaaabbbbbbaaaaaabbbb aabbbaabaabbbbaaaaaabbbb aabbbababbaabbaaaaaabbbb aabbbbaabbbbaaaaaaaabbbb abaaaaaabbbbbbbbbbbbaabb abaaaaabaabbbbbbbbbbaabb abaaaababbaabbbbbbbbaabb abaaaabbaaaabbbbbbbbaabb abaaabaabbbbaabbbbbbaabb abaaababaabbaabbbbbbaabb abaaabbabbaaaabbbbbbaabb abaaabbbaaaaaabbbbbbaabb abaabaaabbbbbbaabbbbaabb abaabaabaabbbbaabbbbaabb abaabababbaabbaabbbbaabb abaababbaaaabbaabbbbaabb abaabbaabbbbaaaabbbbaabb abaabbabaabbaaaabbbbaabb abaabbbabbaaaaaabbbbaabb ababaaaabbbbbbbbaabbaabb ababaaabaabbbbbbaabbaabb ababaababbaabbbbaabbaabb ababaabbaaaabbbbaabbaabb abababaabbbbaabbaabbaabb ababababaabbaabbaabbaabb abababbabbaaaabbaabbaabb ababbaaabbbbbbaaaabbaabb ababbaabaabbbbaaaabbaabb ababbababbaabbaaaabbaabb ababbbaabbbbaaaaaabbaabb abbaaaaabbbbbbbbbbaaaabb abbaaaabaabbbbbbbbaaaabb abbaaababbaabbbbbbaaaabb abbaaabbaaaabbbbbbaaaabb abbaabaabbbbaabbbbaaaabb abbaababaabbaabbbbaaaabb abbaabbabbaaaabbbbaaaabb abbabaaabbbbbbaabbaaaabb abbabaabaabbbbaabbaaaabb abbabababbaabbaabbaaaabb abbabbaabbbbaaaabbaaaabb abbbaaaabbbbbbbbaaaaaabb abbbaaabaabbbbbbaaaaaabb abbbaababbaabbbbaaaaaabb abbbabaabbbbaabbaaaaaabb abbbbaaabbbbbbaaaaaaaabb baaaaaaabbbbbbbbbbbbbbaa baaaaaabaabbbbbbbbbbbbaa baaaaababbaabbbbbbbbbbaa baaaaabbaaaabbbbbbbbbbaa baaaabaabbbbaabbbbbbbbaa baaaababaabbaabbbbbbbbaa baaaabbabbaaaabbbbbbbbaa baaaabbbaaaaaabbbbbbbbaa baaabaaabbbbbbaabbbbbbaa baaabaabaabbbbaabbbbbbaa baaabababbaabbaabbbbbbaa baaababbaaaabbaabbbbbbaa baaabbaabbbbaaaabbbbbbaa baaabbabaabbaaaabbbbbbaa baaabbbabbaaaaaabbbbbbaa baabaaaabbbbbbbbaabbbbaa baabaaabaabbbbbbaabbbbaa baabaababbaabbbbaabbbbaa baabaabbaaaabbbbaabbbbaa baababaabbbbaabbaabbbbaa baabababaabbaabbaabbbbaa baababbabbaaaabbaabbbbaa baabbaaabbbbbbaaaabbbbaa baabbaabaabbbbaaaabbbbaa baabbababbaabbaaaabbbbaa baabbbaabbbbaaaaaabbbbaa babaaaaabbbbbbbbbbaabbaa babaaaabaabbbbbbbbaabbaa babaaababbaabbbbbbaabbaa babaaabbaaaabbbbbbaabbaa babaabaabbbbaabbbbaabbaa babaababaabbaabbbbaabbaa babaabbabbaaaabbbbaabbaa bababaaabbbbbbaabbaabbaa bababaabaabbbbaabbaabbaa bababababbaabbaabbaabbaa bababbaabbbbaaaabbaabbaa babbaaaabbbbbbbbaaaabbaa babbaaabaabbbbbbaaaabbaa babbaababbaabbbbaaaabbaa babbabaabbbbaabbaaaabbaa babbbaaabbbbbbaaaaaabbaa bbaaaaaabbbbbbbbbbbbaaaa bbaaaaabaabbbbbbbbbbaaaa bbaaaababbaabbbbbbbbaaaa bbaaaabbaaaabbbbbbbbaaaa bbaaabaabbbbaabbbbbbaaaa bbaaababaabbaabbbbbbaaaa bbaaabbabbaaaabbbbbbaaaa bbaabaaabbbbbbaabbbbaaaa bbaabaabaabbbbaabbbbaaaa bbaabababbaabbaabbbbaaaa bbaabbaabbbbaaaabbbbaaaa bbabaaaabbbbbbbbaabbaaaa bbabaaabaabbbbbbaabbaaaa bbabaababbaabbbbaabbaaaa bbababaabbbbaabbaabbaaaa bbabbaaabbbbbbaaaabbaaaa bbbaaaaabbbbbbbbbbaaaaaa bbbaaaabaabbbbbbbbaaaaaa bbbaaababbaabbbbbbaaaaaa bbbaabaabbbbaabbbbaaaaaa bbbabaaabbbbbbaabbaaaaaa bbbbaaaabbbbbbbbaaaaaaaa aaaaaaaaabbbbbbbbbbbbbbbbbb aaaaaaaabaabbbbbbbbbbbbbbbb aaaaaaababbaabbbbbbbbbbbbbb aaaaaaabbaaaabbbbbbbbbbbbbb aaaaaabaabbbbaabbbbbbbbbbbb aaaaaababaabbaabbbbbbbbbbbb aaaaaabbabbaaaabbbbbbbbbbbb aaaaaabbbaaaaaabbbbbbbbbbbb aaaaabaaabbbbbbaabbbbbbbbbb aaaaabaabaabbbbaabbbbbbbbbb aaaaabababbaabbaabbbbbbbbbb aaaaababbaaaabbaabbbbbbbbbb aaaaabbaabbbbaaaabbbbbbbbbb aaaaabbabaabbaaaabbbbbbbbbb aaaaabbbabbaaaaaabbbbbbbbbb aaaabaaaabbbbbbbbaabbbbbbbb aaaabaaabaabbbbbbaabbbbbbbb aaaabaababbaabbbbaabbbbbbbb aaaabaabbaaaabbbbaabbbbbbbb aaaababaabbbbaabbaabbbbbbbb aaaabababaabbaabbaabbbbbbbb aaaababbabbaaaabbaabbbbbbbb aaaabbaaabbbbbbaaaabbbbbbbb aaaabbaabaabbbbaaaabbbbbbbb aaaabbababbaabbaaaabbbbbbbb aaaabbbaabbbbaaaaaabbbbbbbb aaabaaaaabbbbbbbbbbaabbbbbb aaabaaaabaabbbbbbbbaabbbbbb aaabaaababbaabbbbbbaabbbbbb aaabaaabbaaaabbbbbbaabbbbbb aaabaabaabbbbaabbbbaabbbbbb aaabaababaabbaabbbbaabbbbbb aaabaabbabbaaaabbbbaabbbbbb aaababaaabbbbbbaabbaabbbbbb aaababaabaabbbbaabbaabbbbbb aaababababbaabbaabbaabbbbbb aaababbaabbbbaaaabbaabbbbbb aaabbaaaabbbbbbbbaaaabbbbbb aaabbaaabaabbbbbbaaaabbbbbb aaabbaababbaabbbbaaaabbbbbb aaabbabaabbbbaabbaaaabbbbbb aaabbbaaabbbbbbaaaaaabbbbbb aabaaaaaabbbbbbbbbbbbaabbbb aabaaaaabaabbbbbbbbbbaabbbb aabaaaababbaabbbbbbbbaabbbb aabaaaabbaaaabbbbbbbbaabbbb aabaaabaabbbbaabbbbbbaabbbb aabaaababaabbaabbbbbbaabbbb aabaaabbabbaaaabbbbbbaabbbb aabaabaaabbbbbbaabbbbaabbbb aabaabaabaabbbbaabbbbaabbbb aabaabababbaabbaabbbbaabbbb aabaabbaabbbbaaaabbbbaabbbb aababaaaabbbbbbbbaabbaabbbb aababaaabaabbbbbbaabbaabbbb aababaababbaabbbbaabbaabbbb aabababaabbbbaabbaabbaabbbb aababbaaabbbbbbaaaabbaabbbb aabbaaaaabbbbbbbbbbaaaabbbb aabbaaaabaabbbbbbbbaaaabbbb aabbaaababbaabbbbbbaaaabbbb aabbaabaabbbbaabbbbaaaabbbb aabbabaaabbbbbbaabbaaaabbbb aabbbaaaabbbbbbbbaaaaaabbbb abaaaaaaabbbbbbbbbbbbbbaabb abaaaaaabaabbbbbbbbbbbbaabb abaaaaababbaabbbbbbbbbbaabb abaaaaabbaaaabbbbbbbbbbaabb abaaaabaabbbbaabbbbbbbbaabb abaaaababaabbaabbbbbbbbaabb abaaaabbabbaaaabbbbbbbbaabb abaaabaaabbbbbbaabbbbbbaabb abaaabaabaabbbbaabbbbbbaabb abaaabababbaabbaabbbbbbaabb abaaabbaabbbbaaaabbbbbbaabb abaabaaaabbbbbbbbaabbbbaabb abaabaaabaabbbbbbaabbbbaabb abaabaababbaabbbbaabbbbaabb abaababaabbbbaabbaabbbbaabb abaabbaaabbbbbbaaaabbbbaabb ababaaaaabbbbbbbbbbaabbaabb ababaaaabaabbbbbbbbaabbaabb ababaaababbaabbbbbbaabbaabb ababaabaabbbbaabbbbaabbaabb abababaaabbbbbbaabbaabbaabb ababbaaaabbbbbbbbaaaabbaabb abbaaaaaabbbbbbbbbbbbaaaabb abbaaaaabaabbbbbbbbbbaaaabb abbaaaababbaabbbbbbbbaaaabb abbaaabaabbbbaabbbbbbaaaabb abbaabaaabbbbbbaabbbbaaaabb abbabaaaabbbbbbbbaabbaaaabb abbbaaaaabbbbbbbbbbaaaaaabb baaaaaaaabbbbbbbbbbbbbbbbaa baaaaaaabaabbbbbbbbbbbbbbaa baaaaaababbaabbbbbbbbbbbbaa baaaaaabbaaaabbbbbbbbbbbbaa baaaaabaabbbbaabbbbbbbbbbaa baaaaababaabbaabbbbbbbbbbaa baaaaabbabbaaaabbbbbbbbbbaa baaaabaaabbbbbbaabbbbbbbbaa baaaabaabaabbbbaabbbbbbbbaa baaaabababbaabbaabbbbbbbbaa baaaabbaabbbbaaaabbbbbbbbaa baaabaaaabbbbbbbbaabbbbbbaa baaabaaabaabbbbbbaabbbbbbaa baaabaababbaabbbbaabbbbbbaa baaababaabbbbaabbaabbbbbbaa baaabbaaabbbbbbaaaabbbbbbaa baabaaaaabbbbbbbbbbaabbbbaa baabaaaabaabbbbbbbbaabbbbaa baabaaababbaabbbbbbaabbbbaa baabaabaabbbbaabbbbaabbbbaa baababaaabbbbbbaabbaabbbbaa baabbaaaabbbbbbbbaaaabbbbaa babaaaaaabbbbbbbbbbbbaabbaa babaaaaabaabbbbbbbbbbaabbaa babaaaababbaabbbbbbbbaabbaa babaaabaabbbbaabbbbbbaabbaa babaabaaabbbbbbaabbbbaabbaa bababaaaabbbbbbbbaabbaabbaa babbaaaaabbbbbbbbbbaaaabbaa bbaaaaaaabbbbbbbbbbbbbbaaaa bbaaaaaabaabbbbbbbbbbbbaaaa bbaaaaababbaabbbbbbbbbbaaaa bbaaaabaabbbbaabbbbbbbbaaaa bbaaabaaabbbbbbaabbbbbbaaaa bbaabaaaabbbbbbbbaabbbbaaaa bbabaaaaabbbbbbbbbbaabbaaaa bbbaaaaaabbbbbbbbbbbbaaaaaa aaaaaaaaaabbbbbbbbbbbbbbbbbbbb aaaaaaaaabaabbbbbbbbbbbbbbbbbb aaaaaaaababbaabbbbbbbbbbbbbbbb aaaaaaaabbaaaabbbbbbbbbbbbbbbb aaaaaaabaabbbbaabbbbbbbbbbbbbb aaaaaaababaabbaabbbbbbbbbbbbbb aaaaaaabbabbaaaabbbbbbbbbbbbbb aaaaaabaaabbbbbbaabbbbbbbbbbbb aaaaaabaabaabbbbaabbbbbbbbbbbb aaaaaabababbaabbaabbbbbbbbbbbb aaaaaabbaabbbbaaaabbbbbbbbbbbb aaaaabaaaabbbbbbbbaabbbbbbbbbb aaaaabaaabaabbbbbbaabbbbbbbbbb aaaaabaababbaabbbbaabbbbbbbbbb aaaaababaabbbbaabbaabbbbbbbbbb aaaaabbaaabbbbbbaaaabbbbbbbbbb aaaabaaaaabbbbbbbbbbaabbbbbbbb aaaabaaaabaabbbbbbbbaabbbbbbbb aaaabaaababbaabbbbbbaabbbbbbbb aaaabaabaabbbbaabbbbaabbbbbbbb aaaababaaabbbbbbaabbaabbbbbbbb aaaabbaaaabbbbbbbbaaaabbbbbbbb aaabaaaaaabbbbbbbbbbbbaabbbbbb aaabaaaaabaabbbbbbbbbbaabbbbbb aaabaaaababbaabbbbbbbbaabbbbbb aaabaaabaabbbbaabbbbbbaabbbbbb aaabaabaaabbbbbbaabbbbaabbbbbb aaababaaaabbbbbbbbaabbaabbbbbb aaabbaaaaabbbbbbbbbbaaaabbbbbb aabaaaaaaabbbbbbbbbbbbbbaabbbb aabaaaaaabaabbbbbbbbbbbbaabbbb aabaaaaababbaabbbbbbbbbbaabbbb aabaaaabaabbbbaabbbbbbbbaabbbb aabaaabaaabbbbbbaabbbbbbaabbbb aabaabaaaabbbbbbbbaabbbbaabbbb aababaaaaabbbbbbbbbbaabbaabbbb aabbaaaaaabbbbbbbbbbbbaaaabbbb abaaaaaaaabbbbbbbbbbbbbbbbaabb abaaaaaaabaabbbbbbbbbbbbbbaabb abaaaaaababbaabbbbbbbbbbbbaabb abaaaaabaabbbbaabbbbbbbbbbaabb abaaaabaaabbbbbbaabbbbbbbbaabb abaaabaaaabbbbbbbbaabbbbbbaabb abaabaaaaabbbbbbbbbbaabbbbaabb ababaaaaaabbbbbbbbbbbbaabbaabb abbaaaaaaabbbbbbbbbbbbbbaaaabb baaaaaaaaabbbbbbbbbbbbbbbbbbaa baaaaaaaabaabbbbbbbbbbbbbbbbaa baaaaaaababbaabbbbbbbbbbbbbbaa baaaaaabaabbbbaabbbbbbbbbbbbaa baaaaabaaabbbbbbaabbbbbbbbbbaa baaaabaaaabbbbbbbbaabbbbbbbbaa baaabaaaaabbbbbbbbbbaabbbbbbaa baabaaaaaabbbbbbbbbbbbaabbbbaa babaaaaaaabbbbbbbbbbbbbbaabbaa bbaaaaaaaabbbbbbbbbbbbbbbbaaaa aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbb aaaaaaaaaabaabbbbbbbbbbbbbbbbbbbb aaaaaaaaababbaabbbbbbbbbbbbbbbbbb aaaaaaaabaabbbbaabbbbbbbbbbbbbbbb aaaaaaabaaabbbbbbaabbbbbbbbbbbbbb aaaaaabaaaabbbbbbbbaabbbbbbbbbbbb aaaaabaaaaabbbbbbbbbbaabbbbbbbbbb aaaabaaaaaabbbbbbbbbbbbaabbbbbbbb aaabaaaaaaabbbbbbbbbbbbbbaabbbbbb aabaaaaaaaabbbbbbbbbbbbbbbbaabbbb abaaaaaaaaabbbbbbbbbbbbbbbbbbaabb baaaaaaaaaabbbbbbbbbbbbbbbbbbbbaa aaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbb */