working implementation of stree construction
authorGeoffrey Allott <geoffrey@allott.email>
Sat, 20 Aug 2022 21:10:46 +0000 (22:10 +0100)
committerGeoffrey Allott <geoffrey@allott.email>
Sat, 20 Aug 2022 21:10:46 +0000 (22:10 +0100)
Makefile
src/stree.c
test/test_stree.c

index e5d3cc7d4d94ee08f8969b3235d679c749ffbf5b..6d8cdb237b6197757fa9a6efd9a2eb9db838b216 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -19,6 +19,8 @@ $(TEST_OBJS): test/test.h $(OBJS)
 
 test/test_tANS.o: src/tANS_decode_st.h src/tANS_decode_tbl.h src/tANS_encode_st.h src/tANS_encode_tbl.h src/tANS_symbol_tbl.h src/tANS_freq_tbl.h
 test/test_tANS: src/tANS_decode_st.o src/tANS_decode_tbl.o src/tANS_encode_st.o src/tANS_encode_tbl.o src/tANS_symbol_tbl.o src/tANS_freq_tbl.o
+test/test_stree.o: src/stree.h
+test/test_stree: src/stree.o
 
 clean:
        rm -f $(OBJS)
index ff94e1dfa6eb8c2de6df4aca2d789bbae94127a1..8c71a17ba2f1dbdedc9cd85b0a3dbe1891d65b91 100644 (file)
@@ -11,7 +11,6 @@ struct node {
     size_t to;
     struct node *brother;
     struct node *son;
-    struct node *father;
     struct node *link;
 };
 
@@ -21,23 +20,22 @@ static void node_init(struct node *self, size_t from)
     self->to = (size_t) -1;
     self->brother = (struct node *) 0;
     self->son = (struct node *) 0;
-    self->father = (struct node *) 0;
     self->link = (struct node *) 0;
 }
 
-static void node_dbg(const struct node *self, size_t indent, const uint8_t *str, size_t len)
+static void node_dbg(const struct node *self, const struct node *root, size_t indent, const uint8_t *str, size_t len)
 {
     const struct node *node;
     size_t i;
 
     for (i = 0; i < indent; ++i)
         printf(" ");
-    printf("%d->%d  \"", (int) self->from, (int) self->to);
+    printf("(%d) %d->%d  \"", (int) (self - root), (int) self->from, (int) self->to);
     for (i = self->from; i < self->to && i < len; ++i)
         printf("%c", (char) str[i]);
     printf("\"\n");
     for (node = self->son; node; node = node->brother)
-        node_dbg(node, indent + 2, str, len);
+        node_dbg(node, root, indent + 2, str, len);
 }
 
 static void node_add_son(struct node *self, struct node *son)
@@ -47,7 +45,6 @@ static void node_add_son(struct node *self, struct node *son)
     brother = self->son;
     self->son = son;
     son->brother = brother;
-    son->father = self;
 }
 
 static void node_split_son(struct node *self, uint8_t edge, size_t len, struct node *split, struct node *son, const uint8_t *str)
@@ -60,15 +57,11 @@ static void node_split_son(struct node *self, uint8_t edge, size_t len, struct n
             split->to = node->from + len;
             split->brother = node->brother;
             split->son = node;
-            split->father = self;
             split->link = (struct node *) 0;
 
             node->from = node->from + len;
-            node->father = split;
             node->brother = son;
 
-            son->father = split;
-
             if (prev)
                 prev->brother = split;
             else
@@ -168,16 +161,11 @@ int stree_encode(size_t len, const uint8_t *in, uint8_t *out, size_t *aux)
     active_node = root;
 
     for (i = 0; i < len; ++i) {
-        if (!node_validate_suffixes(root, i, in, 0)) {
-            free(nodes);
-            return -1;
-        }
         aux[i] = (size_t) (active_node - root);
         prev = (struct node *) 0;
         ++rem;
         while (rem > 0) {
             printf("i = %d, active_node = %d, active_edge = %c, active_len = %d, rem = %d\n", (int) i, (int) (active_node - root), (char) active_edge, (int) active_len, (int) (rem - 1));
-            node_dbg(root, 0, in, i);
             if (active_len == 0) {
                 if (!node_edge_present(active_node, in, i)) {
                     printf("creating node %d as child of %d\n", (int) n, (int) (active_node - root));
@@ -197,9 +185,9 @@ int stree_encode(size_t len, const uint8_t *in, uint8_t *out, size_t *aux)
                             active_edge = in[i-active_len];
                             while (node_edge_end(active_node, active_edge, active_len, in)) {
                                 active_node = node_edge(active_node, active_edge, in);
-                                active_edge = in[i-active_len+1];
                                 printf("setting active_edge in first loop to %c\n", (char) active_edge);
                                 active_len -= active_node->to - active_node->from;
+                                active_edge = in[i-active_len];
                                 if (active_len == 0) active_edge = '^';
                             }
                         }
@@ -219,7 +207,7 @@ int stree_encode(size_t len, const uint8_t *in, uint8_t *out, size_t *aux)
                 }
             } else if (active_len > 0) {
                 if (!node_edge_present_2(active_node, active_edge, active_len, in, i)) {
-                    printf("creating nodes %d and %d\n", (int) n, (int) n + 1);
+                    printf("creating nodes %d and %d from %d\n", (int) n, (int) n + 1, (int) (active_node - root));
                     node_init(nodes + n + 1, i);
                     node_split_son(active_node, active_edge, active_len, nodes + n, nodes + n + 1, in);
                     if (prev) {
@@ -250,9 +238,10 @@ int stree_encode(size_t len, const uint8_t *in, uint8_t *out, size_t *aux)
                     printf("active_node is currently %d\n", (int) (active_node - root));
                     while (node_edge_end(active_node, active_edge, active_len, in)) {
                         active_node = node_edge(active_node, active_edge, in);
-                        active_edge = in[i-active_len+1];
-                        printf("setting active_edge in second loop to %c\n", (char) active_edge);
+                        printf("setting active_node in second loop to %d\n", (int) (active_node - root));
                         active_len -= active_node->to - active_node->from;
+                        active_edge = in[i-active_len];
+                        printf("setting active_edge in second loop to %c\n", (char) active_edge);
                         if (active_len == 0) active_edge = '^';
                     }
                 } else {
@@ -268,7 +257,7 @@ int stree_encode(size_t len, const uint8_t *in, uint8_t *out, size_t *aux)
         }
     }
 
-    node_dbg(root, 0, in, len);
+    //node_dbg(root, root, 0, in, len);
 
     if (!node_validate_suffixes(root, len, in, 0)) {
         free(nodes);
index 7c5892aa0856937ce02a7272166d556b23b3d37f..6b03f95afc5c57f4946928f5399fd8c102e8b29e 100644 (file)
@@ -147,6 +147,16 @@ enum test_result test_stree_minimal_3(void)
     return TEST_SUCCESS;
 }
 
+enum test_result test_stree_minimal_4(void)
+{
+    const uint8_t *in = (const uint8_t *) "dbbcaccbdbdbde";
+    uint8_t out[14];
+    size_t aux[14];
+    ASSERT_EQ(0, stree_encode(14, in, out, aux));
+
+    return TEST_SUCCESS;
+}
+
 enum test_result test_stree_long(void)
 {
     const uint8_t *in = (const uint8_t *) "abcdeabacacabbabcdcccaccccaabbbaababdadbaccabbdadbadbabaccacbbbcbadddbdababddddddabdabddddddabbbbccc";
@@ -159,10 +169,1041 @@ enum test_result test_stree_long(void)
 
 enum test_result test_stree_very_long(void)
 {
-    const uint8_t *in = (const uint8_t *) "abcdeabacacabbabcdcccaccccaabbbaababdadbaccabbdadbadbabaccacbbbcbadddbdababddddddabdabddddddabbbbccc";
-    uint8_t out[100];
-    size_t aux[100];
-    ASSERT_EQ(0, stree_encode(100, in, out, aux));
+    const uint8_t *in = (const uint8_t *)
+        "acaaeabdecdcebcadbebddeaebeceacbbbaeeedbddeedcbdaaeddbadabaedeae"
+        "aaaedebdccbcaaaabdbddabadadaaedebeeaddeeeaaaeecbdcdaaddadbddebcd"
+        "edacecabdccdedbbeecbdeceebbcdaddbaebdcbeaadebadbebaacaecebeaeecd"
+        "abacdadbbaaceaabadaeadbcecccaeadcccddbaeaceedccddcdabddeabcadbdc"
+        "adaaaaadaeeaebabaddeeedaabdeccbcacddbbbabbbecbbbbdebccedabacedba"
+        "eaacbacecebddbdaaccdacddbacbaadadddddcdaadddeeadbaaaadcccdcccbcd"
+        "beebbaabceecaaabdcdeeababcbdebcacddbcdacdaccddaedeaedccedabaaebc"
+        "eedbaecacabddcaaedddeeabcedbbaedbebebbeccdeabcbaeebedbebdecadccc"
+        "dcabddacbcaaedbcabceeedacadceaabbddcaccbececbbabbaaaebecebbaacba"
+        "ccdebdaabddaeeadeeccacbecdddaaddcccdebbddaeccbdaeebbdcaaeaadadda"
+        "dbbcaccbdbdbdecaecbddcccaececbdcaebadcddaedcdddbeaebbecaeadddcca"
+        "ddddadbeabcbabdccbcebcadaadaaecbcdcbcebeceacbabdebccccecebaeaaaa"
+        "eedadeeadbcabdedccabdbcebacbbedbbdeaaacebeeedcbaaacdaececeabeeeb"
+        "ecceceaabaebaeeaceddaacdabebbeccdbdceacabeecbddaaeaeddaecebebbec"
+        "beaddbcaabdbdcbbddbaccdeebcaacbacabcaecaeeecdceabdbcbabeaeaaebea"
+        "daabebebadadadcbabbaddeeeedbebcebdbcbabeecbdabeeecabcecdcabbbaad"
+        "debcdbdadebbadaabdbebbacaceeeeabbadebaabcddaeeeaaaebccceebdebccb"
+        "eebdbbacdaaddedacdecbeddcdbcdeecddabeacbbaaaeeddaeeadedbdacedabc"
+        "ceedebaccdccbdaddcbdcbaccdaabeedabceaccaecaaddceeaacbdadcdeeeaec"
+        "ebecaececbbdbaaaeedeacdcdeadeddbbebddccededdabacebccacdcdcebcbaa"
+        "cceeaeebdcbcabeddeebacdcdcaebbcbddcdeccbddabadcdaccaacbececbcabb"
+        "eaabadcbeeaeebcdccdccccedcdabebadaddcacdeabededeaaedddeabcaedced"
+        "cebbcbcdadbbbdecbdaaaacdacacbaadaadacdeebaacddcadcdadebcddbeeeeb"
+        "aceaecabacbbbebacbecaeeeaaaedcbaaabdbddedbadaacacbdadbcbdeecddaa"
+        "bbccddbeecbddeaebaddbaadceeddadbcbeedebbaebcdabededddbdbcbcdbccb"
+        "eddaeedaebdeacdebadbebacdcdaccabadbacadeebcceedeccebceaadbddeeab"
+        "eeeacbbdadceaebcbebedccedbbdcdecaaacebdeebdaddbccaabdaeecadcecba"
+        "bdccccaecebbadccbebeddbacaccacebcaeacaedcecccaeedbedeadecbdacced"
+        "dedbcaeadecbeeddacebdbbbddbabaabecccabaedccdebabbcdadebcceacebbb"
+        "ddeeeababbebeecbdcbdbcbccebdeddcccebcbebcabbdbccedbbbcebbabaccab"
+        "dbdceaeebdcbcbeadbadbbeeeadebdbbcbabceeeebebabcaaeeddabbedbeaaed"
+        "beedeeaecbdcaadaedbbacbadbcdabeaccdbcdbceccedcbeebabecbadadbcebb"
+        "aaacabbeebcaabeadadbcbdcacdedeccabeeadaaecbebdadedcdccacdccadebb"
+        "daeddabecddbccbbdcddcbbecdacddceedbcceecdcbcedddcbccdcdbaeaecaea"
+        "eeacebdcdbedceadcbaabdceeaaaeabeaabdbacddeacebebcbcbedccaeecdeab"
+        "eceecaadcbdaebacebaaccccbdbeeebedccdaceccacbceedcabcbebdacbecebc"
+        "adbcdbbecccceedcdaaaeeddadedebaeccbaaacaebbdaadcecbbeaedabcaacea"
+        "ccdcacbaebedddccdccecacdcadeadbacbaeaeecdabaaabeebebceaceccbddcc"
+        "deeebbdbacdbbcccdebbebeebcbbedcbccdbedaedbccdbbcacbaddbaecdddbcc"
+        "ecddebbddbbbedabbadcddadeccdaeeaddebadceecbebccacbeeeceabceebaac"
+        "adabcbcdaeabecbaddecaedaacbbeedeedaddaeedaccababccadcebcddecbeeb"
+        "cbabbceababadccebacaedbaccdaeecabcbadcbcbabaebceadeeacedcadabbde"
+        "ecceddbeccbceeadcebbccbbaabaabeecececbaddcebcbddeedaacbeedbbceca"
+        "cedaaacecceebabcadecdcabbcdceabdbdbdaddddacebebadcebdcdcacbbeeba"
+        "cdccbbaedbcadecedcededecaeaccecdcacddaaceddaaebccebbcbbcaebccaee"
+        "aeaacadaccbbdbbddecdeebcdedaeacbadbdeabaeeeabdbeccaadcdedddabdda"
+        "dddacaeebdbdbeaacbbcaeeacccbbeecdcaaeccddbcdabbeeeeceaabcadaccad"
+        "ccbadeaeababddedcdadaabcdedcacebecaabebbaaeabaaeecadebeedaeeedbe"
+        "eecbedddbbdbabacaebdaeecbdddeaecacaadddbbbcadadceadecccdcebbaeeb"
+        "beaaddaecadcceebdbecbabdaaddbccaacbeeeaacbacedbbecebdedbbcbedddc"
+        "acccecbeddccdabeddacbabaacaebdbbdabdeeaaabbababceeccbedaeaabecba"
+        "cabdbedcceababbacaabcdeeebedbcbedbecdaaccbbcaeeeecbedaeaaadadbee"
+        "cccdbceccbbbcacadbccddeccaceedbdcbedabcccbbdbabcbebdbebaadcdcaad"
+        "bddacdcdcadedceeeecdaddacddaebdcadedbbadeaacaebbbeadabdeeebeecce"
+        "caacacbdccceeeecabdecacceadeebacaabbeacacddcdcdcabdbecdaaaebcedc"
+        "addacddeecacdabdabcbabcbadbcddceedeebbacddcebccabcbccabacbaecebd"
+        "eddcbbcedababeacbebedddabeceeccceaadececdacdeeeabababaceacccebea"
+        "bbbcabadbdabcbdbebacaecadeececaddacadeadcabcccddcebaeacbdedaedba"
+        "cbaecdcdcdbccabeebadddbbdebbbecebbdaceeebbcabacaabaebdcedbcebada"
+        "ecdbcdecebaadaadaabbdccbcaaaebaccbbcbaaceccdaebccabdcbdcdbeaccee"
+        "adbaccedcdcacaeeecbcbddedbcdacaebabcdbbddeedabaaceadceaabeecdccd"
+        "cbcdaebcdeaebebbccedebeecdadaebedaaabacdedaecacddecdeddbeaacdcab"
+        "dedddbdbbbadbbaeccbaaeceeddaecaedbebccadcaeaeeaedacebeedcbddbbae"
+        "bdedaddabaebcaeadeaaccdcbaeadddecbceeecbcaeabbbbbdaaeccdcbacbeeb"
+        "aceeebdbdccbbbebabacaeedaebadbcadacadbcebdbedaaddcbbeddebddbdcee"
+        "aaaedaadeeabccabaeaaedbdebeabadeeceebeaebddaecedbbdebcccedcecbed"
+        "ddceccddbbedbbedceebeedaecceacddebaeaabdceaeaaeabbaeeeabbceccdad"
+        "ccbdbadbdaaadaedddcbdaccebcdddbbdcdbebaacebbeebedbdaededadebadee"
+        "eebbdbeaececaacaccecbbdcecbbcaaecccaedeeacddcaaebaebaebbcbaeabec"
+        "cccbeedbdeadeeacdaddcebdcaaeaebaadeeceebbccbedbabebbcdeedaeccaec"
+        "beaebbbabbbbedeeaccdaecccbededcabdbebabaaedabcaebebbcceacbacaaae"
+        "dbbcbcebbacaaeeaaedddebabaeebdebbbabebdddccedaedcdcdeebbdacddecc"
+        "ecdecdcdbedababbbabdceabbabcacdbdebddcccddbaceedeebbbbabdaacacce"
+        "bbeeeaeedebbebbbaaeebbacabacaebcdbabecaabeaabbdaddbdeebacbbbaacc"
+        "bcaeddecdeaeedadecdebeabebcebcdecdabcdaddeecacebbedaedabeaaecacd"
+        "daceeacddccbbddbeadadcdbbdaecaaccbcbbbbcbacceeddeebeabcadcededac"
+        "beabcabcbeeadceeaeebeabcdadedbedccceeecceacbecaddeaeaeacecaabbcd"
+        "ebaccbcbaeebebcaceabedcedacddabdddaadaddcbabdbecaaaccbceecbedcae"
+        "eaedbdacbbaaabecccabccebceaaacedeccbcdbeeadedeabdaaebeaaaaedbcea"
+        "ceaeadeacbecbadabebaeaddabbbdaebabbebddaaddadbdcabcbbebbcbebbbad"
+        "dccaaddcabaadedeabaadbbbccacdcaaaceddacdedbbebabbedccbbecbbbecbb"
+        "ecadbebcadcccbadeadcbbabaeeedbcceddecabbcbdecdbbccdaedadbcebbead"
+        "adadcebaccacdecdecdcdaeddadeeeceadcdadebadacdeadbcccbaccebdaaada"
+        "becebaabeecaeabebaebaaddeabaceddbbeaacdebbeaebdcbccbdaacaacdbadc"
+        "aaeeadacbeecadeeeecdbcabdbebcebaaccdebdaddacbaeeacdcbebbdedabebd"
+        "bebcbddeedeadaacbeddcbabecdcbecdddcaedddbdeceaaebdcebabbccacdcee"
+        "baaecedacdabebecaebdaaadcbcdabacadeaebbcebcecababbcceecbcbacacbb"
+        "cbeedebdbabebbddebcccebadbbeebdbbabcdbecababdebeaabcdbedeccccddb"
+        "decdcedbeaecacabccabbceccccaebbccccbcbcebabeededdbddbebaccdadece"
+        "ccccaeaaebaabeadbeaadccedbeebacdeaccabddbcdeaceadcceeaabacddcbba"
+        "ccbebcdecabbecaadddacbbcedebcddacdbddadbadccecbdebeacabeabeaadca"
+        "badeaabacdbdaceaddedaedaebaaccedcddebecceabcddcdbcaeacbecccabbca"
+        "deceaebeeddcddaceeeeeddacccccaececeabdcabeecdacbdcedecdeaceddbcb"
+        "ddecadadcaabbebcaddbdedeccaedaedbccabcbccaadcbaeeedeacaccccddbbd"
+        "eccebdbdaecceaedccddecbacdabebbeaaeaeecdadaeaaecbebccdebcdacdebe"
+        "dadcaeaecceaddeeaacaabdcaceeaacdceeebeddacbdcdbbebeaedcabdddcaae"
+        "cecceeeaeecceebcbaaeeaddaddabcbeecdabbdcceecdaacadebbdddbbdcacec"
+        "bbddcaecaedaccbadbadcababdebddbaecaedaabacdcbbcdbeddacbbebccaedd"
+        "adcebbdebaaeeaabeddcbcecedacbaaaadebccceeebbdcabadbebdabddddbaaa"
+        "edaddbdaccebaddabdddcdceeabcdbcaaabedbbaebedeacdabbebecaedcdeadb"
+        "eadacdeacaddcdcbabacaadaaaedebabbdbebeaebcbeeaaadbeceeeacedbdeba"
+        "dacaebecdceadacbbabbdcaaecabbebbbdedcdceceaccecabaeddcdabceeecea"
+        "aedbedaecddadaceabdcabadabdacacdabbddeccaaecebceddbedcaebdacdade"
+        "dcdedbdbabebbeecdcebdeeeeddaaaddcbbcaaebedeacecececcdebdcbdadbad"
+        "ecaaadbcacecaabbdcbdbdcaeecbebbbdccdedadebcedcbadaecdbbadcdedaeb"
+        "ddcddccebcedcbcccbaadcbdccdababddcdbcdbcabbddadddddebcbaaddcbdcc"
+        "eabacdadadaacbebbaaaaacdbcadccbbedcdcbabaededbdeceddeceaecededea"
+        "bcdcadbcbcbbbbeddebeeddcbbcacddddceededdedcdebedbeaeaebecaacbcae"
+        "dacccdcdbbeacbdeecdcabaddbdeeceabeebdeebbebdeaeeebedadcdceecdaeb"
+        "ecdbeaeccedeedbbcabcccceeadcacceebdebccdaaacbaddabeccaaacedcaade"
+        "dbeeebcceacacadabdeabaaebaddecaedabceeabbdcaaacccaceeeeceeeddaeb"
+        "aeccebbeabaeddccebbaddddacecbedebcbccdcbcdedacadeeebbcbcddcedaae"
+        "baaedadaedabebaaaaaebddbabdaaadabcdbeaecdccedcccaedadbeceabbcbca"
+        "ecedcaeeccbdabcdabcababbecbddabcaeaadadabddddbcbdeedbedcbbaccecb"
+        "ebdecaecbeddaaabaecdeacaceebedbbbaeabcedaaeaabdaaccccaadedcddcaa"
+        "abeebdcdccdedbdbedebccdbeeadcbbddedddaddabcbcccdaebdeebaeadcdadc"
+        "adbadecbadebbdacbdcbabcaacaaeacbbacdaececacddeecdccaeddbcbccdaea"
+        "eddadbbcdadcbdacacdbeecdaacaecbacdbcaaacaeacdcdcbabaadaaaaeebbed"
+        "ddebbcdddddedbbbecebcbcabebdccebdaaeaeadcadadacaeacabadcbccdcbcc"
+        "bddbbbbceacbdecaceabeaecaebcbaacbeadacdabdaeebeccddecdeaabaaebbe"
+        "ecbedeebbeedabcdeaeecddddbcaabbedbcbabaeaecabbdadacbcdeecdeadeee"
+        "dcabeccaedaeeeeaaabcecceecececcbdeeeecaddbaebeebbccbbbcceeaeacbd"
+        "abcbecadcabbbdbbaabeebccadcbcccaabbdeaadbcddbcaaebbcebabddecccdb"
+        "ecaaebbbcadadccbbddcdeddadebcccbadcceedadbbabbebbbcdaeeaddcddcdd"
+        "debdaecdceaaabbeabaaedaabbdbcdbbcddbdcbacacceaccdabbededcaabcbbe"
+        "becbbbacaeeeabbdeaccbbaedecdccdeaebebedeeaebdddbabaadcbcdeaaeabd"
+        "baeaaabddeeeedcacdacdecdaadbbbaddddaaddedcadacaeaebceaeddbdbdcdd"
+        "dcadadcdccbeaebeeeccbaaacdeeedeedeeceddabdccdccdeedbaedccbcceedb"
+        "eedebeeaaceaeebecebbaebaaebdcaebaecaecbeaabbbeccbeebddcccbabbeea"
+        "bbacebebdccebedccaccdaaeecccbcccacaecbbcaedbeaacbbdbbabceccddedc"
+        "eebeaebcabbeadcaabadeabaaaedbdabddecbdeabcabdeadeaadcdeaecbbbdac"
+        "ebeedebacecdcdccbeaebbaceeeaeaccdaeaaadeedacdaeccadbaaeaaeeeebaa"
+        "ecaeddbadcceacdcccebaebdcecbaacaebbceabbebddcdbdededabadcadbdbdc"
+        "adaacdabcbddceaebbbaaeececaaeaccbbeeebbebeaaabbcebeecceebadcaeca"
+        "ddeeeecceeebdeebdcabcdeaaccdcdcccbaecbbcbabbddacdeaededabeabddce"
+        "ebaaedcadcdbdedacdaddadccedbcbdcbeaabdcebeadceccdeecabdaaaebccda"
+        "aeeecbbceddebdadddcadbdcdeebcdeebaacaedebeeceddaceccdeaaabcaadbe"
+        "bcbcdbecaddcbaeedeabebbbcaabccbdacdebceecaecadceebbadcbcbceeecdb"
+        "caecbabceaccdceedccbcbbacacaddeccaadbeaeaacedccbeacadeadadbeddbc"
+        "bddaceceecbeebdcbcedaceabeeebbcecbcdacddecdebadaadecddbdaebdacbc"
+        "bcbecccadcdabaeeeaddcceeeaacbccdaecacabbacacecdebaceeecabdbcdace"
+        "dddcddbeaeccebcadbacaaaeeaabbcdadbadaaccbacdacaedeaadcdbbedbaaae"
+        "ebdaeddcbceeacdceaaaeaececbdceebaabccbbbaccddceeddbdaacebeebccae"
+        "cccceaddcadbeeabadedddcdbecddbdbaeebedaeccbbbddbaeaadedaadeebeea"
+        "aedccccdabeebacabbeeeebbcbdeebaedbceadaceeaaadaeccdeedebbddccbde"
+        "cdccddaddaaedeebbbbcdbdeeaedecabaedaebeeeabeeecacabebbcbebeddcac"
+        "edabbabbdeaceeecaeadcadbadddccdcbbabceaadbecdeadabeebabedceceaac"
+        "beadbeacececaabaaeeddeedddcecaaeaeaadbcdeaeaabacccebddcaceacdaba"
+        "eadcdadadcaaabdebdcedaaeeddeeabccbeeeeaecbceeaecbcdcdaeeaeaccbdd"
+        "aecdaddeebccecbbaaabeeeddaecbeaedaaccabebbeedccdbebebaabccccdacc"
+        "cadcedecaacbaebdddcadcddaedeebacdbacecbedaadbdcaebedcdeadcdacacd"
+        "aaacebcebaaceaebbaeecaebadbbbaadcadbdbeeabdbdaabbcbebcddcabebeec"
+        "dbcebdbadabeebceeadcaacbabddceaedcbdabccbdaababbedabcecbeeabecac"
+        "adbabbbeadacdedebdeaabcecebcbdbdcadbceeeededaecaadabbdacbeacbeab"
+        "eecebddcdbbabcdeddeebababdabecbdceeaabbbacbcbdadcabacdebedaeddbc"
+        "bcdbceeecaaaddecdebdbacababddcdcdbeeadaddbaadbbdaeccaeabedbdedce"
+        "baccbabdbbcaddbadeeeaacdeceeaececddebacaecabeeadaeedecddaceeadde"
+        "eeacbdadeaaaeaadedebabaabcebdcdadbdecceacccaebdcbbbbbaceacdcbbbe"
+        "cccaebdecdcebededceccaecaaeaecacdbbbaadbcdedeaeaaacabccaccbaeacc"
+        "dbcbceeaadacbabaaccecbdbaacabccacdaeaeadbacbdccbdcabacdaccebcdec"
+        "bbeacbdecdcccbeebeeaeeaeccbadecbbceeeaaaadecabbedbbabedbecabeaad"
+        "edebcaeeadaabdacbaccaecebedddaeedbdbceddedecdccdcbeebbeeababdebb"
+        "aeaeadbbdaaddcecddccdebddecbaadccebbedeabdddacdcdeeeecacbcdabeaa"
+        "debccecaacaeeeacabccecdacacdecdecbecaadcdbabddbddebeededbcbddcee"
+        "dcbaecbeaacbcaaceaddcdcbcdecdcddecddcbcecaadbadababeeadeebdbadbd"
+        "cacbcaeeaebeceaceedeabaeccedbaadcbcaeedcecdacdedeabbcbddedabccea"
+        "bdededbeceeacabbdaaebcbdccdbbbeacccedaccbceeedabbadaaeabaeaadaad"
+        "eaebceadcbbecabeeeaecaeedaaedbcceaeaddcdbebedbddaecdbeabedacaaae"
+        "ecbccaddccedeaecedebdbedbdbbeadbcbbdeedddbaaeacdeddededcaccdbeac"
+        "eeaeabaceabbededbecabcdbcbdcaeacbeaccecddcdbdbebbdcccbbbcaadbaaa"
+        "bbceaadbeaacccccbedbaaccddcddbeeceeedecebebbdddacdbadcdadecbccbc"
+        "baadbcabcaaedecebdbdbeeabadbececeaacbeeccdaaeccbabbaaebbccdabada"
+        "dabadedeeadbaddebcbcaadacccabcaadaacdacebebbaebeeabaeedadddecbdd"
+        "bcbbecbdeedcdcbbdccbcadaadbedeebdebbcebabcecadbbdbbedbdceedaccab"
+        "aabadcccccbadcaabecdcdbadddbbbedeabeaedcdeeacbaccdebeadbeaedddad"
+        "ddddecebbbdcaabcedaccaeaebccbecbabddccecdadbcdcaecbbcbaadadaebee"
+        "eaaebebaadcbaeedebacbdaddcacddcbeebadeccadcbaadbabdaaabddeedcadd"
+        "bacebbceadcabdcbedcbdacaaaeabbdcbeebdedceeedccddcacabdaccbeeccae"
+        "eceaebdaeadeabecadbbddddedcecadeeedbdcaecbeadcecdbeecbcceaeddede"
+        "aacdeaaecebbedccaeeaeddbbbbddadecdadceadcdeedbddbeabccaacebbbade"
+        "ceaddcaacecedabdadadcedaecdbaecacedededbeaeaebecbdbaeacbaddcdcbd"
+        "dccbaaeddcbdecaaeeacedabdececadcabaaaebcccbbebbdcecccacebdacadad"
+        "ccceccecbbbcdabedebaabecabebbcceabcedddaaaacceedccebcdaacbcdddde"
+        "beaeddbedeabaaebababcadbecadcceaaeddcdcabaeeddbbabcdcbcdaebbbecc"
+        "decdecbdcceccaaeaaeebbebabdeecebdeeeeddddacecdcbeabdaedeebbbcaaa"
+        "dddebabbeacacbcacaeacddaebcdedccbdcecdcbeeddebdccbccabdaedadadab"
+        "cdeccecddacecabacbbddccebcedebddbddaceceaadbdbacceddbabaededeccd"
+        "aeacedccacbeccaebddabddcdcddddaeedeabcabceabddcadbbeadeadcbbedeb"
+        "cbedaededadccddcbbdbbeeaccedabdecdceabcdbaadceabacaaedcceeaecabe"
+        "abddecebaeabceaededeabaababecadeadddbdcddceebcabbbdbecaeebdcceda"
+        "eaaeabebddaacddeedbbdacccbadbdadaeccdeeeddeddccabeaaabcbeaeeaeea"
+        "bedeebbcbeabebdabadedccbcbbeeabbadecaeebbbaacaadcabbddbabccedeca"
+        "aaabedbedbdeceadbaaacbbeabccacbeaddeeeddeeaaaaacebeceaadbdcedebc"
+        "eabbbdbebaccbecccbdebddbeadddadccadeacbbabbceecebaeedcedaedbbdaa"
+        "dbaeabdeaeaddccededdddbacdcddbbabeadcdaebbddbbdbcabdeaacbdddadcb"
+        "ecaaadbeecddbebadcabccaabadedcaaabcbbaeaddbeadbddbecaaccecbeddea"
+        "edcbddddebbedeabbbccaaeaaaadcaacaeadeaeacccccbdddecabeeadcedebcd"
+        "eeeedacbcbeddcebaaedacacecbbbbdaaebbbbcedeaadaedcecccdaeccedabca"
+        "eebeeaadcaabbdcdaaaddbaddaebadaebccaaddcceccaeababdecbbdacbbadba"
+        "ceaeeabdecbecacaadcccacadadcedacdeaccbbeecacadcabbbddaaebebcbece"
+        "abbaebbdeccadabaebaeeccabeeebaadaaeaccdbddebccaaceceeaddedebadbc"
+        "dcbabaebededecdaadccdadcdbbdaedaddbbadaeebeabbabbbbbcedacdcdcbbb"
+        "bddccdadddabadebceaebedeeeeaaeadbccaccceeccdccbdeccacceeeaadbcde"
+        "edaadabcabeaacecabdbadbededbadacceccbeaebeeeedadeedacceabecaedeb"
+        "cbdaeaaeceacbcdeecdeabcdabccbdabeddeaeecededbadeddcdccbdbdaceadc"
+        "bdbaabbcdbeceaccecacdcdddcadecbbdacecedabaceebbeeaebabecaaecdaac"
+        "dbbddcdcadabdacabaeccddbdedeebacbedaddabcebbedebdabcebedcadaecaa"
+        "becdadeeaeadcddccaaabbeddbebdbbecbaebdabeabacbcecbcbeebdaeebebcb"
+        "bcddcaabaccebddaeaebecbbcddabbccbedebdaacaededcacabdadaccacbebaa"
+        "ccbbdeaeecadebecaebebeebbaacabbeebcbabaeaccbedbaceebeecdeececceb"
+        "abdcebdbbaceebcdbcecabaeebbebebcdbbccabbaacdcdebabcabccedcaddade"
+        "cbabddeeaceeeaaceccadcbcadbaddcdbcbadcecdeecddadaceaaedadadcbdbd"
+        "eebdcdbedcaeaccceeaaddacacbabcdccbebeabeadddededbebedeaccdeaeeae"
+        "deabcdaaddecacaeacbbdeedecececcaeacebebecccaabdcbeedbcedacedaccd"
+        "adbcdeeaccdadeacbddedacbbceabcedddeeacaeecaabcbbccbcececbebcabdd"
+        "adbdcebebbbadcadaebddaabeddebdcddececebabcaedbddddbdecacdaddbdcc"
+        "eaeedeccbbddeceeedbaeddcdcccaecbeaeabbbdeaedeadcceeededdbddedccd"
+        "abbecbdadcccdeaceccedbadddcdebdbdecbccebaaeeaadabccddabccacebadb"
+        "eecceececccdcbcbcbdabdcccbdccaeabbeecadddbddacdbcbeadccdddaebadc"
+        "becaaeddeecdeccaabdaadeacadcedadeebabcbcdedcebdededbdbebaeaaaadc"
+        "eddbadebbdaadeacbbcedeeacadeecdbbababaabcddbadaaeecbbcddabadcbca"
+        "ccabacedcbeeedaddeaaddccebadcaeaebedcabededcdcddcbaeadaaebeddbbd"
+        "eacceaeccbdaaadbbbeddbabedecdddcaabcedebebdacbabdcaeeddeceaebbbe"
+        "cbceecccacbbcebeaaedbacbccaccddbeebeaecececdbbdcbdbdeaeecabcbbaa"
+        "eceeadeeaceccacdeabaeeaddedecaceecebaecabdccadaeadaebbcccacbdcba"
+        "acdbdcbedabebdbdbeaceedcebcbebadcbdbcecceacddcababbbeacedbeecaac"
+        "baadddeccececcbebceaceabdeceddadcdddddbeabdbcadebdbaebabbddecccc"
+        "eeedababbccddedcebccdcbbcbadaaeddbdeeabeccaecdebaddbadaedadcecaa"
+        "edeaaaedadbaabcdcbecdcaaadabbdadabeccbeaedbdcbaddeebbbecadaeaacd"
+        "ecbcbabaaacbaceccadcedddeddcbccabdcbccecbcdcaeadbcaaabdbbdaacbdd"
+        "dbcbeeddbaecabccbacdeebabebadcebebdeebabbedaeabcdceeebdeaaeeedbd"
+        "ebcebeecaeaeacdcecacaaaacaedcadceceaedadcceebabedabaedcebabccede"
+        "baedbebbaaaccbccddedbbdcececdbeceeaeabbbcaddaadaebdbacbbbcaadbdc"
+        "abdbdbdcbbacbaececccabddbdedeaeddddaedaedabdcdecdbeedddabdadbcde"
+        "eceedccebacbcabcadcdeccebecdcbcaabaccdacecbeeeaabebdcdabcdaebdac"
+        "acbededbeaccdcdeebccbcddaaccedabebbeccccabcadedeebbbdaaadccbdcae"
+        "baebeaeedaabacdcacebeaaabbeeabcabaabaaccceccdebabdadeeedcabdccbd"
+        "edeaacdddeddaceceaedcdaabdaacadbacbcccddeecdeabeecaceaacceadabab"
+        "dcbdacdaaeacdcbbcbadecacbbaedddacebeebdceeeddcbdbdecddbbecbaaaee"
+        "dbcdecaaccaeeaeddbebdcedadeacbbabaeceaddebcebeadddabeceecceddcbe"
+        "acacbeadacaccdacdceeadcadccdadcdecacccbbdaabcbbdceeabeacddecaece"
+        "ebdcbaaaeacdbacabadcceecaaedcdedbbaacdabbcecddaaedebbbccaeeecbdc"
+        "dbacedbecdabdedeeccdeebbedacadeebcacdacaebdadbccacdeecceccdbacad"
+        "cdebccbbbbcecbedbcbdeddaaadceeaaaeecdbeadbeaceabedeeacccdeadbdea"
+        "dadbcbddbbeedacadaccedccbcbccceccbcaabacdcbadcadeeebdceccacceade"
+        "bdcadeddddabaaecaaddbccbaacdceaacabbbaeccadacbdaaeeeedeabbaaacda"
+        "accbcedcadccceaceacecbdebaacaaddccaeaeabeeababccacdcdcaadcabbeab"
+        "daecacabacacbcdeaaebceaeeebecadbdecdbbdaebcddadbcecbcdbbdbbeadeb"
+        "cacaebecccbdbabadbcdbadeecbcedabebcbcddaebbbaeacdbdbddbaeeabbcae"
+        "dbdceecbacbdaeeadbaebadbccaedaecdbeedaeccaebbcebcecbabaceaebbaec"
+        "eaadebaebdbeaadcdbbbdeddabaacbddebbbaabacbeacdadbaaeabbdcaaecebc"
+        "ededbeebcedbbbdeccecdbeacadcadadddddddeeadaeeabdaaacabaaaeaebbbd"
+        "ecbbedeebeeabeccebecdedbddcabecccbeabacbbbabcdaeaedcdaebeeaebaab"
+        "dddaebeebabecceedccaddacdbdcaceabddecaaaaaecaceccecddbbcdabedaab"
+        "bcbdceddcbdacabcadcdceddeadaedddbedacebbdabedbedeecaacadbbbbbedc"
+        "dcaabbdcdeecadeadebcdeccdccbeeeeaccddbbccadbdbecaacadceaecaadbaa"
+        "dacdeeedcaeaaabcbcbbceecebaceeadaeeeabadcbdcebacdecebbbcedcbdeec"
+        "abecbedcedcdcccecadeebcacaebeedcecaddcdecbeeecabacdcccbbbdddadcb"
+        "bbeedebcabccadbdccccdcbcbcdbadbeabecacccbdcdbdebcabadbcadaaaddbc"
+        "ccdbcabdadeaddcbadccbdcacdabeaebdeabbbbcdcbaccbabedaeaaaadceeeab"
+        "bcddaddaaeacdadadbcaccdbdccdbcebabaaebacdaecdacbbbccedadeebebbbb"
+        "abadedcbcbbabeabbeeadcadbdaaddddaccedeadebebebbdcbcabeeedbcedbda"
+        "ccceacdbeebdebdeaaddbaabbcaadceddbcdbabacaaaabcdccccaaedbcecadbe"
+        "eccbedeedbaadbdaebabcdbdebacbdabdcbabacbdeacbbebbabddcbababcadeb"
+        "edcdbddbaabbeedeecacceaaaceaeabeddcadbbacbbbddedcddcbeddebccebcc"
+        "cacdaaaceeeebecbbabbcbbbbbbbbcdaeeeccbeccaaabdddcbaccddacdecebeb"
+        "dcbcdbabdedddababcccbccadceebbcbbaecbaceabdcacbceaebbbacbeeeacbd"
+        "abadcecdadeaddababbaddadcdcdedaecdbeaeeddaccaeeaacbcbcccbcbecdca"
+        "baddbddcccbbccceaecacdbdeeccceceecbcadecacadbcdcaeaddbedaaabecec"
+        "beeccaadceddcbcdcdcceacaececbeedecbabeeaccdaadedaaacccddaabcbbae"
+        "edecbcdaeaebcaacbececbdacebebcbccaabeebcbacbedeeeeabecddebecaaed"
+        "bbeccdddcbaebadccdacabceeebdadbaebcecaeaddebaebcbeececbacecdcecd"
+        "eaceeadcceddeedaeaedbbebcdedeecccbdbadadaecbdceacbebdeeeaadeaace"
+        "ceeedeacaadadcbdedbbdbbaaedaebdaeeabbedadcebabbccebacdbbbacacede"
+        "babedaddceeaaeaeececacddbcecedbdbacdaaeeddcbaecadaacccdbeebbbcad"
+        "aaceedaababaabbcddaecdddcddbabcdbdeeaaeadbbdceeabeacdeceeabeddac"
+        "eebbdcededdecdabdbadedbddbedaeeaeabbadaaecbecabcdccdececcddeabbd"
+        "aedcbcabacaaaeedaebdacbaaadabddaeadbabecadcabebdeccccaeeccbbccae"
+        "eebbecdacbcbdcaccbdceaedaabdcaeeedddbcadacbebbcaacaacdeaeaddceae"
+        "ebbacaecabcbaaadcbecacddadaacdcdaeddcabdeecbcaccdeaadbbcdcebcdec"
+        "cacebeadaabadbbcbceccbdcaebcdaccadecbaedcaabdbdddbeceebdaebeebdc"
+        "bcacaeedbccedbcececbcabcbecbecbcebeacebdaccdbdceeebdccbceaabebdb"
+        "cbceaeeaecebdbbaaaedbeebbaedeedbaceaebbbbbbeddcababbdceeedcbcbcd"
+        "cbbcedeccbbcdbcecebceacaaaaaecadeeacbceeeedecbeeceeebbeeaccbbaac"
+        "accbacdbaedbdcbeeebbeacadcedcacaeecadcbcbdabbcdaeadcebeeeebcdcdd"
+        "daabaddaabcbeedacccbbadeeceecddbdeabeebaadacacecddcbdcecbbdcbbad"
+        "cdbbadecbbaebedbabdeddedcbcebaadcdadcaddcccacccacdecceddbeaeabea"
+        "bbdccebacccabcdecbdcaeaadebbbadaeeababdcecddeceebbddcaabcababeba"
+        "ddaedbbeecdaceacdacaaeabaeecebbbaeddbaceeccbedcdbdddbceabeecbbae"
+        "ccecdeceacdddddadeddbddbdcbbacabecbedebcdddcdbaaaececdccaacabcda"
+        "babcaadbbbeaccbacdbbadaccdcddbeaacdadceebdaeecaaedadedaeeecabcea"
+        "caadccdababaeebebbbbaadcbacddcdcbeedadbaaeeecddbcbabadeddaeddaad"
+        "dbdacecddedeacaeabbeeecebadbdecbcbdbbcbdbbaeaeaabedabaedbdccaace"
+        "ddbcbaebceaccdbeabeeaaaeeccdbccdebbdbbddaeecaeedcbddcedbdceecccd"
+        "dcdebbbadddbadaeccaaeedbcecdadbdecbbeaaeaeeecabcabceeeadcaeebece"
+        "cecacbdeccdabceececbdaeaaaadedbaaccbbbedcadaecbabbecadeadbaeaabb"
+        "baebeedabaadecedaeeaeeebddccaabccdccbbdeebcaedebeebedeccacebbaae"
+        "adeccbedceccbbcbcaceccadbacdbdddaebbadedcaeabcbbeadddebeccaebaae"
+        "eabdbbbeddecbaeecbebdbeacabbdaccecdaaceeaebcbbdabaadddbdcaecbbcc"
+        "accceddadeddbaddebbdececcddcecabeeadddcbeecbcacdcbbcebdcdaacddad"
+        "cceedadceeaccbadccbdbababccadeedbeeacdebcbbeddddececaeaaadacebdc"
+        "eacccdddecdcabbabceeddecceadebacecadbcecadabeadbacdedcebeeebeaeb"
+        "ceceadccdcadacdaecdacbdceadaaabadebdbdacbaaecedcecbaeacccabedcad"
+        "ddddadcacdddbeadcbcdceedccdacdbabcaeeeaeeaaddaabaccdcdbddcbabceb"
+        "abbcdeeeecccbaacaadececdbeebdddcbcdbaebdedccbacebeeeddbdcaaedbab"
+        "cbaadaabeacedeacbcbcbbedabbeaddcbbceeaddabcdcedbddcaccedbdceceec"
+        "edeabdbbbeceaaacdabeccdddbedbdcceeaaecddecbaebeecaacaeeecddcbeea"
+        "bdbabaaacedbddbadbbeaaaabaebebbccecbbadacdcaaadbacddeebddadcccdd"
+        "ddbaeddaaceeeaeedcdbbcdbaaaaadbdedabbaacbeaeaddedbeddbeddaebadec"
+        "cedcacbaabdaaedabcbebbedaedcaedbccecaeabeeaddacaddcbeaecdbcdcdba"
+        "badeccccecaadbbdbeecaeedebeccacddaacbeebdecedecaebdeebadeddbcabe"
+        "bbccbdabbaecbebaabbcaecaebdcddabacaeaacdeabbcaabaabdddabdbaeddcb"
+        "bedaeddbbdabdbadaccbaeccbebdaaabaabbbadcddaebdaedaaddabdcceaaaed"
+        "eacbbdedabaebcbcebaaccaaeaeeedbaecdedacbcdbdabdaecbadaeacccaadba"
+        "ccaadcbdcadbceadcedadebebdddebdbdbbcabebbedbbdcebcceeacdbcddadac"
+        "ecebcbdedabebacdbaeadecbbeeaadcbcabdccdcaaaabdcadbcdbecbcedbdeac"
+        "dbdadcacaddaadbbaeedcecbcbbecaddbeabeceddcabcecdecacadddbccecadc"
+        "cbeeedccdaaacbdccacbacddabddebcdddaebbabaacdbeeeecabdcaedeacebcd"
+        "dddacddeadbdaecbbcbcddbccaaababdbaebeecadeacccbdaddcdabcccacdcde"
+        "dcdbdbdebbdabacdccdacadccedadbbaaebdacecdaacedaeaaebdbbbdbddcedb"
+        "bdabadbdddecebcbecedeebdcddedadcbcbddeadaaacedbcedeccbbdcbdbbcde"
+        "cbdceecbdeecaeadaedadecaecdabadcecdbadddccbecabcbdcaddaaaaebdaeb"
+        "aeebbeabdbbaeeabdeddbababeadaceeadbedcceecbaaeebacdbbdadedaabdec"
+        "abcceceeedececeaeadddabaadddddccaaeebeaebabadaedacedbebccacdeddd"
+        "caadebadecaaacabeecadabbeceebdecdbeabdeadabadaebbacabddeaebeebec"
+        "dacaacaabaedcdccdadcdcbadececcedcdcedeadeaddaededabddceaebacdacc"
+        "ccdeeccacadcdbaaaddcdeddcddebbaebaaeecabcaeeacdaeadcbeabdceacacc"
+        "abeaaddbebaeeeebcacbadaddbbcdabbebeabdaacdbbbdacbaeebddcbebbdcde"
+        "addcadcabedacabccbdabdedaadddcddbeebbaccbaacccdbbcedceabeeabebac"
+        "baeecbbaadceacecaeaaabeccbaddeedeacbcbaacceeebedecadedbddcaabddd"
+        "accbbcaaddeeaededeccadeebaceabbddadbdbabdbdccddaadedaeecabdbedda"
+        "ddddcedbceeaededbabecabacebcceacaecceaabadccdadbddedecdeebebaaba"
+        "ddadebacadbbbcaccbbdacbedebcceeaecceecdcbbcdbeacbbbecbedbeadeced"
+        "cdcdcdcbbbdadebdceebadcaaecababdddaddbbdeddbedbcecabbdddacdacabd"
+        "ecaaacedebeacbecccaddbaccabcaecdcedcdaeabdcbeadedbaabedbbebaabdb"
+        "bdbbcebedcaaebdcbebdccdcbcaeeaeaeaadbddeeebccadbcbedacebcaecdeeb"
+        "eeddaddbabcddbecddbddbdaaacebcabcddeedeccacceebeaeceaccecadbcabb"
+        "bbbdacaaaddeebebbecabacbcbabebcdbbdcdebeecceccaccececebcdebbbeac"
+        "adaecebdcedccdddabcbcaeeaaebeabdebeecdcedaacdaacbaeedccbeaddadac"
+        "abebdcaeadaaebbdadbaddeeaeeadcaebaeddabcbdbececbcedcbdbecbceaaeb"
+        "dbcaccedeedaadebeddecbeabaeadbaebdcdaabedceedbbebeedbadbdeababcc"
+        "ceccdcdbeecddbecdeeaadcbebecabccbbeecceaddeebadeceebcacccbdedadc"
+        "ebceddeebdbceecbbeeabbcaaecccacccabeaddbdedbedaecbeaedadcbcabdec"
+        "ceeacdabcdbcaeaaadcdccacdbbbecadccbaedeeceacdcedababcaeecaabedea"
+        "bebecaaaaabddbbdbdcccebbdcaddccdeebbcabbacaceaddcedeaeaeaededbcc"
+        "ccecedbaeddddeceacbabeacacabbcceeeaeacadbddbeebeabdecaaceaadcaba"
+        "aeabcbbebcbbddbbbedebcdaaeccbebaaaedbbacbcebbcdacbdbcdeeeebeccbe"
+        "eaaaecbbeabbcbbadbaaceacaecebcdcaaaceabcecdabbdaaccdaeededcddead"
+        "ecceadbaedeaabbabecddcbdddeddaabbceccceceadbabcaddaeccccdededddb"
+        "cbababaacaccedaacccdaedecbdebeabcdbddaaebccbcbdecbabddceebacaedc"
+        "beedaeeabeaeecbceaacdcecaccceecedeeeaadcbebdcacedbadebbaaccdceee"
+        "eaddabdaeadddbdadbdbadbeeeebeeecebadcebcdeddaebeebdddbcbaeddcdda"
+        "deddbcacecacbeecdabcdaaebadeadadbdbeccbbadecbbeecceecdcdcdbaaedd"
+        "becaddceadeabbaedeeccbaeaabaeccaabaaadeedeeadeddcbaaecaeedaacaee"
+        "babbbddaedecadbdbbbbeeccbacebdddacbbecdbaeccbebecacbadcaceedcdde"
+        "eebaabbcdacbcaaecadceeaddeddcddbcedebbabddbdcbaeadbdaeeeedabeacc"
+        "acadecceeabeabecbddbdeadbbeccadeaeaaecdccabaeaaadadbcbadaabbaace"
+        "acabecbdccaadababaadbaedaccecabeecbebaccabdbddbdeeceadedaacbbede"
+        "dcceabddeddccedecabaccabedbeeaeeddebecaaedecbddcbbbabbbdccaeadac"
+        "dadbaccadbbccbaedbddaaeebacccccecdeaacaeebcaaddaeadeccbbaaabedcb"
+        "abceebecceddddeeebdababcccbacacabdadbcadcbadadeddaaceddddbbcdace"
+        "baeedeccdcbdadcecceebdbadeedceadecaeccedaeaeeeaeedddcabeecddacca"
+        "bbbeabdcdbabdabdaecedbebdcbdadceacbecebcaaaeeceeceededdbcabeadca"
+        "aceebaccbdceebadedcbbbbdccdedeedcbadceaeabdaddaedebcaceaababbead"
+        "bccdcceeacabdceabcdeddbbdadaacdeeecddededbdeccedcebbebaaadaccbcc"
+        "edccbedbdedebbbababeacbceededeeeceeebbdccccdbbeeceeeeedabeebccab"
+        "deddabcbcdaceadbadabaabbcecdcddbdbcaceaabebbeebcbaeddeacacbbeabc"
+        "ebdccdcdabeecbdcdecabaabbdceabaeecbebcbdbeeacceddacaaaecbcbcccde"
+        "dcadccdacebbccbdcadebadeaeacebebdbadcecebbaadeddeacaddcdebabadcd"
+        "cdababcaadbbdcccdcabadadbcadacecdecdacacbabbcddbeebbaaacebdadcbe"
+        "ccddaaedcccaebbcabccaeacdeaeccaabbbdeabbeceedeebecdbbadddabdebad"
+        "caaabeeeedbccadebacceebdacbcbdebabcbdeaaeeaeadcabddcaaaeaeeccdce"
+        "deaaadaedebdbcbdeabebceabcdedabcbbcebdeebbecbeeddbbcabbcedecdbad"
+        "cedcaeadcbbcadbebcbbdedaabedeaabeeedabbceeadbbceaddcebecadbeadbc"
+        "aebdbebaacbaeeaccebbadabddbbaadbecebaadaaeccaeeccbcceaebcbceebde"
+        "eeecedebbdbbaaadacebbdabbdbbbcbeadcbcbcbdcadeceedabceaeabcbcbbcb"
+        "debbccaddceddcddccdccaadbcdecacccbbdccadddcebdabcbebdaacadeabebd"
+        "beaaddbceacbcadbbdbbaeceadeebadbedbbadaeaacdeddaebdedaabccecedad"
+        "cabebbadcecacaeaceddcbddeadeedaddbeeaaebeedacbbeeeeedcaddcbbbccb"
+        "adbbccacdcdceababddeedddacadeadedabcaabaddddcbdceabbdbbeeedadedb"
+        "bdeaebccdbcebaedcebdbcdabedcbdededaedabcdcbdbacbabcceecdadbcdeca"
+        "beeedecacdeaecbcecaeebdaaaebcceeaddeecbbbcbaceddeaeaaabbbabeeddb"
+        "acdecdccbcacdeaedcaccadbcdacaacecaeaebdabbeaadbaaeebabbadbebecbc"
+        "abdaedcbadaeeaaeaceacebdbdaccbdebceadaabbabbcceeaadcbaceadaaecda"
+        "adaadaabbacebecddebcecddecdedcabcbbaaecebdbcdeceaedbedeaeebadded"
+        "abeedddbeebeeadeeeacbdbdeddaacdbccdbeedebacadcbcddbecababbbacbcc"
+        "cebeeaeedbdeeccbecabddeaaeadddacdceeecaddebeeedbacdcdbcccbabddbe"
+        "bbecebeecceaacadbeedbbadaeaccbdecabdbcaacaaebabdadddaaeaedcbeccd"
+        "cecaaacebaaaeeccccbdbecaecaddebaaadacbdbbddcbdccdcaccaedecddcdad"
+        "abedbdeabceaeddbbdbdecdbddbabeadecbaebaedaedbacccdcbbccddcabddae"
+        "ccbdbedeeaaecdbbababcedabaddaaacaadadacdbbcedecedebbbdcccbbcdbac"
+        "bbeacbaccbdaaaeeabdceacdecdbacbedecddbabdaaecdcddbcbecbbeccabadc"
+        "addccedceacebeacbadcebdadcebbdedabdbdbebbbdbbadeeebeacaeccbddeeb"
+        "baeeddddacbaedecababbdbcaccaedbeaccdbaddcaedaabdeddbcbdcebdcebcd"
+        "beeaceebbdaeddbbbeabecdeabceccbbdbbcbdaaeebaeaadaddbcdacdcdadeec"
+        "acddcdebabbebbedeadbeddbbcbdabeddbebbdcbbeaaacccecebeeaadbecbdda"
+        "cdbcccecbbebacbbdcddbbeeedcddddbbaaaadbcacbdbaabeccdcddbcbaccbab"
+        "aaaddaacbdacbdcabdeabccdccdcaccceaebbadbeeddcacbcedeadebaebeadbc"
+        "deccceadadbaedcbdbacbaeabaebcbeeaddbacdecbdceaabcecbbbcbcadbaaec"
+        "cdeedbdeeccbebecdcdabcebbaacaddecbdaedbaaacecbedbdebdadedeabeddd"
+        "ecadcdbbcddadbababddbbddeadbcabcbeedadabdcbdeecbcbdbbbbeaaaabbdb"
+        "adeaeeeeadedbdcdebbdddcbebecedeaaceedabcaddccdbcdaeddeceabeadbbb"
+        "dedbbceacdcdcadeaedcaaddeadbbeddaedaaccedbceeddbcbaebaacdadbebac"
+        "cceaddbaeaccaedaedeebaadcabcdbbaccbbeaececdabcabeedaaeecbaccdadc"
+        "dadceebeaaeaddccddedacdeceddacbbaeebabbbdbbbbccebecdcadacabbbacc"
+        "acbcaedeabbeecebedbcaaccbbcdabddeaabaecdbcacaeadbaddadbbbbcebaee"
+        "deeacbbccbbdaeceaacdddabbccacabaeaddcebebaecacabaccaecddbbaadddc"
+        "cecacccacddabdbbedbadbdadecadcaedeeedcbebdbdddceeddebbdbaeeccbce"
+        "bddbccaaecdebdaadbcdaeebbcecbebeddcececadcedaaacdaacadbecedcaaec"
+        "baddcccedcabcaabddcabacabdaeccebabeabdcdbbcbadecbcebdaacaeaccebc"
+        "addbdbabadadcaaacbaadbbdbeeaaebdbbcdcddbbeadaebeadbacccaacabcacd"
+        "bdeddbbebebaabadadbaaddecadedabdebebbaecaddbbcdbbaedadcaaccbbbce"
+        "eeeaebecbddcaeeebebdaedbebeaebeccaedddbeedbbadceacbdcbcceaaabdda"
+        "cacdcbadecebdabceccbcabbaaecccdcedbeedbdabaeedbeddabebdcebadccab"
+        "eaeaabdcccbaddeaacaababdddadcecdbbddebeacbdcdecebeeaedebebcebbae"
+        "edcbabcddcadaeeabcbddcdcccdceaccbabbcdadbececcecbbeecbccbacbdcdc"
+        "bcbbedadbacdbeadccbbaeacaeeccbaaedcbdbdabdcebacdabacaaebedbdcece"
+        "baadccddbcaaacbdebdadbbdaedacbebcebcadbeeaacebabdccdecdcbebbeded"
+        "cbabbadecceacbababccddeedcdedeeebdbcbcaceaceccbdedbcebedbcbaccac"
+        "cbddbdeadcccdbcdbcedbcdcccceacdeaabbbcccdbcdacceeaadaebcddceccdd"
+        "deaeeaadbaecbccecaeeabadecbecebeebcaadacbbadaadbeacebcedeacddcea"
+        "ccbeecaabdacaccecadeeaabaeaddacacededabeedcddbaacbeabaebeebeccbb"
+        "bbaccabdbdabbdcbacedeedacaaedaacdaebceacaebccebcaaacccbceadbbddd"
+        "caadcdedebddbdddcbeabdddbbaaddacbedcacaabddabeecaccbbeabeaddacaa"
+        "bcdaedaaeeaaaebebbbaabcdadcaebadabdeeabedcbedbdeddeedaecaaedaddb"
+        "cddcabaddeeadaebeeeceeaeddbbddcaceeedbdaccddaadaabeaadddeaddbeec"
+        "acedbbeebdbbddbacebbaddaacaacbdceacddaddccabcceaadeaabeabadbeeed"
+        "cbdbbaeecadadebecdabddcaeedbceebadedeaceddacbadcecdcceeeddacceed"
+        "ccdaacccbccdddccaabaecdcecdabbedaacadaecebdaceebbeaddcdbedccdcdd"
+        "deddcaeebeaaabbdccbbacacbceaecaebaaececaaaaeeeddadebbabacbbbceea"
+        "dcceeedeecebceacaabaeeadebbebabecdbeadbdbeecceeccedcdcecedcbccba"
+        "dbdbcbabecebabaeccbaadcadeeccabebdacbabccaaadeabdecbdabeacbaedab"
+        "abcbdabcabcceabdddaceebaebdaccbcdeabdbabdeedcdbcebeddcebaaaeeeae"
+        "bccbbdcccadddebdeddcebcabaccaddeaaaeedeacbbdedbecadcdaddddbedccc"
+        "aebcdeceacddcdeacccbebbbeecdadabcbcdeadaabdadcaabcdeecebeeeadecb"
+        "ddeeecdebbecedcdeebeeaabcedaddccacddaceabcabeddaeadbbaecacbaceda"
+        "dbeacdbedabaeaaadbccaaceaceebeeceeccabceebecedcadddbdbaabcaabaec"
+        "adbaaeaaaabbddabaceeeeededebdcaaccececbdbedaaddcaadecececdadddcd"
+        "bddeeccacddcddcaaccebaabdccaadbebbaebcabdbbdcdecebcdbdaceacdcdba"
+        "eababcadacaecabaeadcbaaabeeaddececddcdbeaaedcbcdabeeadaddccddbea"
+        "eabccdabeddabcbabbdeceadcbcbeabaeabdccbbdbbbeeedcdaddabcadbeebbb"
+        "ccdbaacbdeeaeddaecbbcccebeeabeddabbdccaacbdcdecdddccccebdaadeebe"
+        "dbecabbaadaedacdcbdeaebacceadacebabeeaeddeebceacebedababececadca"
+        "eebeacaccaeababaceadacebbcbedaabdebebcedebdaaddbdaabddcdeaccddde"
+        "daceabbbaeddcbdecbdaadbdbacedabdbcccabdabaccacbccaccadeeceaceaba"
+        "abeeecbaddbedbdeaeacbdcbeebabedacebbeddaeddcecaaaccddaccbdcdecac"
+        "bebaccebebbaccdcabecabcecacdacdecbcaedabecedebeeccdbccceabddedda"
+        "bddbbcbbabbbceecbbacbaadbabacbcacacecdcbccceeedcbdecdddbddbbdaea"
+        "ebaebbeadddeeeecdebadbaebcbecbcccebcbccaacdddcecbadbcbdceedddbdb"
+        "bbebccebebabbbdaadecbbdeebaaaeabcdeceebaedccdedcdaabbddededcaead"
+        "eccdbbcdceaebccebacebbdbaacaaddcdcaecccdbcbeabbcbeaaeabdcdbedbbb"
+        "beacdaebabedcdbbdceabcbbdeeeddccbdbbbdcbddccdccaacacecadebcacbee"
+        "edabaddecdcedbaeaecbacacbceecedbcceebdeaebaedabebcdaceacdeebbcdc"
+        "abdbadbeaccdccdccecdccebcaaadaabbbcebdbbcbcbbbcaaeabebcadecbcbed"
+        "ceaceebebaddbacacaadcdcaaaaddbeccbbdbcccdcebaecdeecbecaccccbddbc"
+        "becaccaeceacebdabbebcccccaceacedadaeaacddabdaabbeeadaeecbccedccd"
+        "beedcacedcdebbbaacdddbedcddbcdaccdaecdbbadedabaeaabbaccdedbacecc"
+        "dedbccdacccaaaeaebdcbcecbdadaabedcdbdaccebddcaebdbeabbaadecdaabb"
+        "edececaecdbaaeadaebebeacdcacccccecbdcdaebdbacbebeaeeaebddadaddda"
+        "cceaaaabeaccdadacbdcdbaecdeebdbedecadbacabaabceebcaadabecebedcae"
+        "beacebbaaaceabddddbababaaccebedabacbbecbeabaeacceeabdaaddacbaabd"
+        "cddccebbcecdeecbddebeadeabdabceaceaeddbeddccbdeccbddccdbcaedceca"
+        "ecbdcdcccacacaecacccecccccadadbeacbacccccedcdceadaeceacaddabdcae"
+        "cbddadbaabcdbaedbdcbbbdaddbbcaaaecedeecaacaebbdbcbaaeaeeabbbdceb"
+        "deacacdbdedeebabcdeaaccdcbcaecbbeaadbdbdbbdebcbbbbaebacdeeadedcb"
+        "beecabeebcecdeeaeaecddbbddccdbaddebdeddbeacecdbddecabebbbaacecee"
+        "bcbcedaeedddeddecdaaaedcaaccbabaadccababceddadebcacacabdeeecdbcb"
+        "ecbbbddacbbcebddabbbedcddcdaaaeceecbcaddbbececaaabebdcbebedecddb"
+        "abdceadcbcabbcaaebecbcccacecaabdccaccadabbdaabdebdbbcdceedcecdaa"
+        "ccbebeeceacebccccecaeadbabceaeabdbcbaedbbdeebdbbcaabaebcecaadbee"
+        "dedccacddaceeacbacacdeedccaaeeddbedeacccbeaeaccccddbbebadbbedccb"
+        "ecbbdabbbdeedbadcbadecadbdaecccccdbbddcdcdacbeabadacbdabaaedaded"
+        "ebcdbbadebbcedddaaabaeeceeaedacbcbacadcddabecbbcdaebeeedeabedcce"
+        "dddaaeadbdbdcdbeaecbcadbddedddbdaaddaecabaceeccbecedaabcadeaddcd"
+        "bbabcdabbbdceeaedbcbaabcdbeebeadbcabbbceebdebdebecddbeeecdaddadc"
+        "aceeabedebedadcbddecbabcbcddbebabecbeaececdadccbccaccabebacedcac"
+        "aedcdaeaaabeabaeadadacbceeeedbebdbbdbdcbdcdadeaabaaaedabcadeebbe"
+        "ccaacbeccbababbeeebaaebdcbaaadbcbdeccdbcdcdedaaedadaabcbcdeaedeb"
+        "aabaceecebadcebcebecdbeaeebadeddeabdcaddaccedecaeceaeeaecdaebddc"
+        "edbbcdeebccebacedacbdcdaaecbacbccedaccdacbeceebbbccacacbabeeaded"
+        "ebbeecedcaabcccbeaddcbaebcadedbacdcbabdcbcabeaebcdeecdaddaceaedd"
+        "acdcccaeccccacdbeadccbbacedbdabaacdccbcdbaadbcbadabeeedcaeaccbca"
+        "cccbadeebabccdecedadcbbeddbbbbeedbbedbcbbdebdaeaeacbdeeacedcbbbc"
+        "bdabdcbececbceacbeadcdebdaacbcdcdbcddbbdacaeabebdacbcdeebcdbaaaa"
+        "beaaeccbaeecbdbeaaaadadeeaeebacdaccbaceadbbbcbacbbeadcbcdabdbecc"
+        "cbccbcaabedeebccbaecbceecbddcdacbacceecddbccddbdebbeabeaecaddbde"
+        "eeecaceeebdcedabbbceccceccaabddeaeeeaedaabadddbebadababddceeebbc"
+        "accaedcbbdebdecacbcceeaeeaecaeeaddebededdbaaadbddaddadbcbceaaaaa"
+        "bebeeeceeaeecdabdbbceaceedebaeacabecdcaaabbcbcedaaedacbacccaadce"
+        "adacccaebcdccedbebbbcaaceadabcbadbcbdeabcbbecacdeceabcdaaebbbcac"
+        "caceaaddacdeedebcbbebccccadcdbebdededcccaaacebbadcadbdedebeebade"
+        "ceecddcbadcdacdedadbadcebbbdbddbabbabedcdcceeeacbaeedeccccddcdbd"
+        "ebabadabbccbaccdaeeeccacabacdccdddbcaaebbeabcdccdaccbbdbdedcbddb"
+        "dcdabebcaaddbcedaabbbbdebeceadbaedcecceddbcadcbbbccaabbaeeacedbd"
+        "eababdbdcabeadabbdeaadddedeababdccdadbdcabceadaabcdaadbeddadbebc"
+        "cbaedcabcdecbbbbcaeebcbcbeaeacacaeedddbdabbbdcdebadaedebdadcacde"
+        "bbdcaaebecedeabceeadeaccccabcceecaecbeeeabdceaacadcbaaadecbceaac"
+        "ceaddcccacbcdabbcbcbddabbcdecbcbcecbacebeeaeebbdbdeacedcdcdbccda"
+        "cdbbacbdcadbcedebedadebeccecaaadbceeebbcbbeadecaedbecebbecdcaadd"
+        "eddcedbdcaebbbeeaceebdeccdaabadbeeadbdcdecbeccbbcaedcaaeeeeaedba"
+        "cceeddbebcbaeccbebcbaedcbbabdeeeeacbedbbbbcceccaddbdccaeecaaaaba"
+        "cedeadcabeeeecccacaccdbedcbaacaedbbacabebdbdbedebbebacceaaadadac"
+        "acbeceaaeddadaadecbbaedabaceceebccadcdeedaeabdacbcaecbacbcbdaabd"
+        "eaecddbeaceddbcbdabaaccbdbecdcccdebdabddcaababdcdabccbdeadaaceca"
+        "bbcaeeacddedcdabdddadeccacbbbccdebcebaeddedbbedeebebbcbbcecbeede"
+        "aacbaccebdacddeceaceecbbecbbbedddceadebdbdaabccbcbcbaccbceeeeaec"
+        "dacdddeaeadabceeecabdeeceaddcabaecadcdcdbcbeacaeddceebcdadbdacbe"
+        "edbbcbbecbbaddbeedddeebaeedaddbeeddbdeabacdabbedecaaecddeabaebba"
+        "dbebeeeacaaabcaadebbddabceecbdebacdacbcebadbeaaddcaebddedaedccbb"
+        "eacbbdcaeaecdccaeceaaadedabbbbcacaeabedabeabbebebcdddebcebcddabc"
+        "edbbbbaccdcacaaeededdbbddcaceadedddaedbbcbdbdaaeddadeedaebccdcbe"
+        "dbaeddbbcdaceeabaabaddabdbdaaadedbcdeaaceeaaddddecbdbedadbadddac"
+        "bdaebedeabcabaaecbacdbcbcdbaecbcddbecbdcdeececacacdbaeeebebebcae"
+        "bcebedeeccdbaeaddcbcecbbbabaeeaceedaadaaecabbdeabcdcadeebeedaede"
+        "decceccaabbdbeacdcabbebbbecbcaabcdebdecdbddcdabcddcccecdaadcdbed"
+        "bedbcadbeecbdbeeacdabcdaacaacdcededdeedeebbbedecdbdeddcdadbaeead"
+        "ceaabcdaabdabdacacaaeaeececdbdbcbedabbdcdcccdcbbaabadeabcdeadada"
+        "dcadcbcacaadbeadcbaeacbbdaecebddbcabcedaaabbbabeeaaaecebeecedcba"
+        "dbbddeebebdbdcceccaeeaebdadeccddcbeeaebaddbbbaaaababeedbcedcbddc"
+        "cceadceeabdbaecbceddecadbbeeeebbbbbdbabdbdeaccbdcbebbdcaaaecdabe"
+        "aaccbdcbdaddddccdbeaaadaddbbbbddbedadebddceebebeecadadddecdaedcb"
+        "edbccdecedeeacaebccbadaaddabacdaabcbbdcabeadbbcdddeebbaceabbbeec"
+        "daeacbbecbedccdddbcbeccdbbabbcadebcaceaebeedbabeaedbdcecbbecdebd"
+        "adddecdabcbbccbbaeaaeaeddbcdbbbcdbededbadbeaabacbdccaebaadaedebc"
+        "bcddedcbaacacedacbbebcaccbcecdcdbddcaeaadeeeeedeabdbcdbaeeceeddb"
+        "cccbadabaaacadbedadaccdacdcadeaeecbeeccbacdacdceddeddeeadcbadbca"
+        "debcbeadeaaecadcdcecdbedcabeabedecbbecacbeaedecbeadbdeeadaaaacba"
+        "edeebacddcccadbeecaaaaaddcacaececadcadacdcdbabacbaddaacacdcbecde"
+        "edbaaeaeddaaccaabdabdeaecddccbdebbccebaadaddcaabdebebbbbcaeaadee"
+        "bececbcbadebabbecbccdabaeebaecdbdcabccddecdddeeedeebcaaeceebcbea"
+        "aabdcececaeeaeaacbcebcebbcdceddabcecaedbbabdeccbedeadecccaccbeca"
+        "cdacadbaaaadbaabbabdcbebbadbceedbcebccccedacdedcacdbbccddeeabeba"
+        "aeecccccbbcdabaaceabcebdecabdbbdbcddbcbebccbcacbbbeacaceacadddaa"
+        "eddcaacbddacddeeddebeecacaaacdbaadbdabceedaeaaaddbaedcbbcccdcebc"
+        "eddaabdcceebaaccbaccdbddabdecebdebddceadebebbbcedcdeedaeabdbaedd"
+        "bcabbbccaaabddccdbcbdcdaeaeaadcaaccedaccedebbcbaebedacdeadcaecdc"
+        "dccdbacbceccebdbacaddaaddcbcdeeabcdacbdecddeddcbadbddcdccceeaeee"
+        "eacecebccabaebcebcbedaecdabdebbdaeccbabaccddececcbbbebcabddabdcb"
+        "abaacccebeaedcadebcebcbceeceaadbcbccaaecabebabadbcbecbddbacdadee"
+        "deeebcceebceebbcccecbbcdbdaddbedbcbdadeedeabeacbdababaddccdeccbd"
+        "edabddecebcdbecbcebcbbbebaceabaacdededdebabaddbbeabebdccddcabedd"
+        "daecdaeebedcacbabeccdabeecabeddeaccaaaecdcdacbcecbceeceadedddeba"
+        "aebddcedaeeddbbabbcedcbbeccedddebbaeaabbeaeaebcdbbebaeccebcbbbcb"
+        "ccbbbdcddbabeddaeeadcacdceadcbedadaebabbedbadcadebdaeecccaecbdee"
+        "bdddebbacedcbbabeeadcebbcbcebebaddeecebceacbbabaecaabbbdbcceebec"
+        "caadbceaacabeaaaabacebcbeebbebbeeeaacceaacdadcaeebbaeeebdaeaacbb"
+        "bdaecddadacadbadddeeeaeacdaddbdeeeadceeacdaaabcbcacdbceedcdaedbd"
+        "dbadccedcccbcddbdcbccecaaeabdaeadceeeeabaddbcedddbdeaacebecadaac"
+        "dbcaaccebecdbdeacaaeebebeccbadeeabadcbddeccdceaadbccebdbdcbaedbd"
+        "bccccbbaacdebecaabcbdaacdbbaaabbeacecacdedebbabdbcaeaecdbeabdcab"
+        "edababceecdcaededacaeabcebbcdddabebdcaccdeedebdabadbdbaabebbaeab"
+        "eebbbcbcbbebeebcddadddacaddcbeedeaeeccedcdcbbaebadcddbbbbcdbcdee"
+        "acebadcaadddadbbbaebdecacaceaeaeebcccccdddecabaeccebccadecebebbb"
+        "dddadacaeebbcbceecbeddecdebdbdcdceabcdaacabcebbedceadacaecdebaba"
+        "acacbdcdccecaacccdeccdaacdddaddbbdbaeebdbaadcdaacaceadedbcbebded"
+        "dcdbdeadacebbabeedcbecacbdacceccaaddcbcdbbecdededecacaecdbaaadbc"
+        "ebcecceeaaaceabbbebebeeccbbcaadeeedebabccedaaecaabbdaedeeceacdba"
+        "eacecdacceacdbecbaebcdbcddeccacbdecddeaebeabaeaecbcabccaaeedeede"
+        "cacacadcccaeedaddaeebebdcbabecbacaacedbddaeeccdbcceebbbbaaadeace"
+        "aeccdcddeacbebabaadacdcabbaebdbecdccbccecbdedacaccddbbedabcaadbd"
+        "baddbcddbabceebebbbbdbbdeaeebabedeeabdccacedabbacedcabbdeeccbbcd"
+        "beedaadadccedcbacaccaedabedceeaabbbeecaabaedeeebcabeeaadebdbbeda"
+        "beaebddbccaedbbbdabcbddbdcaccebecbeedaeebbadedabedecebedcadddecd"
+        "debcbebddddbbdeebaeedbccdaaecccadadeddaabbeaabaeaddaebbdaacabdda"
+        "ccadacadbebcadcddceceeaacabcdedaacbeddabbedbdadbdabbaceaebdebeea"
+        "aacecaeccdeaaeecacdedbaeebbddcbbaaacbedcaeabccabcdbaaeeebddddded"
+        "abeebabcdabcadcdacdeeddcabbdebbdbaebdccebeaabdcdbbeacbababbbdaec"
+        "ecbcdeccedeeddbebebdcacededacbedeeeeeaeaddaabcbbabbcdecdcedcbacb"
+        "eacadcccceadbbaedbadbbecdaededbbbdacdcacebceccccbeaaddbcddbbdddb"
+        "abdaccdaddaaecbcbbbdbdcbceadcebecdddcaeebeeddbeddbdeeebaebbbdeac"
+        "cdeddcccbdeceeabaedbdeecddbcabcbebabccbdaddbcecdaadabdcceadbcbca"
+        "bcadcceabaeaaecccdcccdbcdbdceeadbecbecbdccedcaaabedddcdadabecaad"
+        "daddddddabebedccccbdeebbdcebdddceeedbdcdbbdeedbcbeadbdddddebaddd"
+        "acabbabceccbbecbedddcccaabdbaedbedecdcebecebdcaddaabcacdcacbebee"
+        "cbebdaacdbbbaaaacdacadeeecadbceaddadeeecbcdeccbacaeaaaeccbbadbdb"
+        "dcacaaadaeeeedeaddaedacbebbaeeacaadcedbacaeaebdedbadbaabdadeaebd"
+        "aaaaddecbeaceddaeeeaabdbeacccceddeaeeacdbcdacbceecabbdedceaeeade"
+        "addbddecbeeaaaccbababdbcabcbaedcedabbbddaadbacbccecacaaedcddacbb"
+        "bebaaebebdcdaddbcecbedbcbdcddededecceadaeedebeccadabceddcadecbee"
+        "babacbbeddacadaccdeaeccbacdacbebeddbcaccdceedadcdaaccaecdaacddbd"
+        "dbaaaccecbceedaecccabaaacdbbcacbaecaebedbdaaeadadeecebecebcbbded"
+        "dcbeeeeabecbaedbdadcbcdebadaabbadddeabbabaadeceeabaaadcdaceeabbc"
+        "ceeeedcbdcaedcaedcedeccdabeeeaeabebcbdeeeedcdceddbecdaaccebdbaaa"
+        "bdaebdacababecaebdddcaceadaaabbbedeedcaccdeaedecabeebbdabcbecedc"
+        "caeecdacdddeedbbdbdedaccaaecceeacccdcbbdaabadbadddbbdeaacebbadee"
+        "aeaeedcdbbcbeeccbceebccddadeecdaedbececdadbbbedbadcbcbeddccedbbd"
+        "abdacbaecebbcddacbebeaeaddbecbaebbcebceaddabddaddbebaeacebadebdd"
+        "ccebacebeecdcedebbcebdadedcebcacdbbaebbbbaaaebabbededbeeecccdbce"
+        "adbdbdedabbcbcddcbcecdbdccccbbdaabedbbebdccdbdddedbebddacceaebeb"
+        "ccdcaaaabdeaabbdbaeddddaacaebddabaaabcadcaddcddceaccdbdeccebbece"
+        "eabebcabbdcebaccddbccbcebbceeacadadddeebcaecdddcebdbebbccdcdaaed"
+        "adbebadbdaceacdacdcacaceaecbbceebbabaacadeceeedbdcaeedeeaeecaadd"
+        "bcbbcebdcadaeadaaadebebaddaecbbdadaedbcabeededcdaecccdeacacacedb"
+        "adbbcdecdcdedaaddebaccaabebdeaaccbbededdcddbabeebbbdbaaaeaccdada"
+        "dadbdbbcaaabccaccbcceedcceceedeabdaaddbebedbeccaaedbeceebedecabb"
+        "aebbbaaedecacbcdcabdcddcdbacceeeeacbaaeeecdeedcabadccacabdbadbcb"
+        "ebbdbecccdbcdcacceedcadebabcacdebcedcceecdbebdaeabdbcbbedaaecbaa"
+        "dbacbedcedceaecdbaeacacabebdbcecbeebecedeabecbcbecadcebebbcecacd"
+        "acdebcdeaecccbeabdedcdbbaebdbcdaabbdaaeabaeeeaebedddbbdaddeebcca"
+        "daebbdeabcdbdcebbdddaccdcababcdbceeacdaacdbbbcbadbecadbddacadcba"
+        "accdcbdcdbccadacbabebedabcbaebdcdeaebaeebbeceedbeabbcaddbdcdbebb"
+        "eeeacdcedecacbdadcbbdccbddbabbeeedcdebdadbaecebcdddeaebdedaaecbb"
+        "bbeecbebbedcaccaeabaedadbcceadbbcdbdbdcbcceacabbdbdadcebbdadbeaa"
+        "aebaacbadacebaccddacbcacbaeaeabeebbacecbadbaeaaedaaacacbaddceedc"
+        "cacdbbcadbdedebbeabdcdedadbcbaddccdebbcecbbceacaaadcdeebaeeeaaac"
+        "eeebeecadeeaadedeebbcbaccbbaedaecbbbbbadabcceeedeabceeacdebeeece"
+        "ceddeeaacebebaeaaedcedddbeaeaeeeabccbbbcdaeacabaaeeeaeaeeaccdeba"
+        "debeadedbcaedcbbcddeeccbeccebdebdcdeabbeeccadadbbddcbddaeedebdad"
+        "abceddaebdccbbbbbeecbdccbaeabdaababceecdeebbcdadbcddadaedbcedabe"
+        "daadadcddcdbaecabaeaadedbeacdcbbcdcedcbbddacdcddecaaeabbdbdcbede"
+        "cccacdecccdbedeaadbecacadaabdeaebcbdbcbccbbebdaacdbdecdecadacacb"
+        "abcbeeebcadadcbaeaeacaaeebeebeceeecdbbcdccacacaaedcdebcdcdcddcac"
+        "cbdcbabbeedaccedcbbabbdabbedbeabbedcaaccadddabdebebecdaeceeebbbd"
+        "ccbbdacbcaadbaddedeaaaedcecacdbaebddcececaaecbccbcbdcabedbcaebab"
+        "adeceaeaacbdabbdbddcbbdeccbdddaaccccabcbedadbcaedbbdcdddababceeb"
+        "aaaebcddbbcebaecbbddadccacacbbccadababbceaedbcbddbabaebabbaebaab"
+        "bacacccdacbaacbaddecbaeebbbabdacdbdcdcdddcaaaacdcebbccaacecaadad"
+        "ebdcaceaecdceacebdcebaacbddcdbcdeceeaaceebbbbcddebbaadebdceebdab"
+        "bbeeaeebeebaddceeadbebaaeeceabbadbedebdcbcbceceaaaddabdcbbceadaa"
+        "ceadeccbeebbcddacacdabedcbeedccbcebdaaccedbedbbecbdedecbcbceebea"
+        "bdbebeeaccbbcaaeaecaddcbbbacaddedebebaceeeaccceadbdeddebeddacdab"
+        "bceebecbdabedceaeecdbdeaeaeccaadbcadbddbbbcdbaecabedaededbbdbdcd"
+        "debebeaecabcebaceeabceddcddcddbbddccdeeededcbdbddbaeaeaedeaaaecc"
+        "ddbdccadbcdbaaaceadcbabeebcdbbdccbbcdecbbddcdcecdcdedabbdaccdcee"
+        "badedecdabeaabcaaeacaeccaebaaaaadccbbcaddbcdeebeabcacdadadacbddd"
+        "abacbccebebdbcedcdbbaaaeeadabcacedabebaacdebeaaacdecdaaaddccdcee"
+        "babceccdebacdcbabdbacccedbbadeecbccbccaeeacdbadbcdaadeaeabedebed"
+        "ebebacdbdecaddecdaacecdaaeecbeceaaceceeaacbcaecdcdaedabbeedbccdb"
+        "dabccaeeabacaacbcbbeeeeeddaddabacabadccdcccdcacbebbdcccdcbaebbaa"
+        "aaccaebebecadeaabccebddbaaaabceadcabedbdaabeceaedbaecaeceacdeded"
+        "beecdbaedbaaacabbdaabbebcceadaceacabdceaedacaedaedadadaadeabdcce"
+        "dedaacedcebbdadcabadccbedeecddaadaccebddddebbadacadbaaaaebcbcecd"
+        "dbccdaeeecaaebaecbdcbaacbeddcedacaccaceaccbaabacbecaaaaeeaabbcea"
+        "acaabdacaddeddaecacecaaaddaeeeddeccedbadaacbaddbeadacbbbaebcdebc"
+        "eddccbabbeebebcaaadeacadcbcdcaecbeddeccdabaebbcdcebaaeceddcabeac"
+        "cacecbcbebeaaeecbeeacdcabeeaebdcbdacacbececbadbbecacbcdeeebbcabb"
+        "dbaeddadcaacabcbbacaaaabddcdccaedaebbabcaaebaeeeebecdbbaceababea"
+        "bbdadacedbaeceacdbedecebdeeadecaeeeadbabeaadbbddddbebbdbbbceaedb"
+        "cadcdebdeeeeccedabbbbcabcaaeabeaceeddeeebceaeedeeeccebcbebbabcdb"
+        "ddcbcddbdccdccccceabcddbcadacbdcdcbbccdacacdcaceaeabedccedecbcae"
+        "caceecdcddaaddecedddcdaccaabcceadaaedeecedeaaebaebccbdaddcccadac"
+        "ceeddccdebaaccacdcadbccbdcacbdaaaabbaedcebadbeeaebcbcdacbbcdbabc"
+        "bbaecebebcccdcbdedebeddabacaedcdebbebcccbeadcddacaecaedadaecddcd"
+        "eebacaaeaeeddadabeaddceabdcebadaadbdcbddbedecbedbdecdbbededdaedc"
+        "acacdabcaebeebbabedeaaabbcaddceadcbecebbabaeceadcbcacebcbadccdbb"
+        "eeabbcadcaadceadcabacbeceaddacaedbaaaddbceddceeaeccebdcacdcdebed"
+        "eeadaaadbeeacdedcadbceaabdabcbddeadcaebeaaadeccceceedcbbeaaeaddd"
+        "eddaccbaeedbeeddccacdbebaaedeaccdbadaedaebbabdbdcdcaacaaccccbece"
+        "bdeecebeaeacaaeacdddecbdcdcadaaeedcaacedbbebeabbaddccececeedbdee"
+        "bdcaeeccaecbbbabdaaebbbdbcbdbaecdacceeedbbaaabddaadeeaccadddcaaa"
+        "ecaaacebadbbdedcbbceccdabbedcdbacabdcbdbdecebabdbbdbacdcbebbcaaa"
+        "dadecaaddeebacaecaadedeceacabbeeeacdccbaceacaddabccdeaabcbdeeeeb"
+        "dbadbcdbcacebcddaaecadadccdbbbdabebdcbcddadbeeeadebaaddcdbdeaabc"
+        "cbdedbceeeeebecdcecdbcbaacaaeaabedbeabceeceaaebaeeabbacbbabeacee"
+        "cdcddbaaddbeccdebdbbbccdaedcdcbadcccbcadaddccadcddedeebccaeaaada"
+        "bdbbbdeaebaeaaeceabcaebddecaddabeddebadcceeecceebbdcbceadeadebeb"
+        "ecdedddadaeedebbcdbbbcaaeedcbecdbeedcbeccddbcddbdcbddbedeeccddcd"
+        "caaccdccabcbacbbcacbcaacaaecdeadadcbcaccdbceecaeebadccdbbbebdcea"
+        "cdbecbdabbcadaccbcaaeaabeacdbddcaceacdebeecaacdadaacbdcabbabebdd"
+        "cadabedbecebdbebccaaabccbbdbadddedacadebaaeebcaecdeaceecdebccdde"
+        "debcabdabdcacedebdcebbdccecbabaeeceeedaeecbabccdceeacadbaaaadeec"
+        "ddbcdbcbbdcddaccdccbabdcdadbadaceceeddeedaaaaadeacceebaebacbdace"
+        "baeaaedadedebcdabbadbdaebbeecdeadacecbcadccdcadcaaebccccedbeaaec"
+        "cdcaededbdaeacbeaabbebecbcdbeeedebcaccceaddcacdbbabbbeedcdceaaba"
+        "bcecedbcccbeebadbedbbbbeebdcdacbddedddeebcbebbcddbdbeddadccaaebc"
+        "cdceadcbacabaaccdcacaccdaabddeacaacbbdeeaacadbabaeebabaabacdedae"
+        "daceeeabcdaaddadadcebaadebaeabddebeeedababaddbdbaedecdceedeebccb"
+        "babeadaaceddcecaedeabaddedaccedcebcaabcdbcdddbdaaaceaabdaccedbdd"
+        "ddadadbdcdebacbcaccababbaceadebbdbabcdbaebaeabeedbcedcbdabacacea"
+        "cedbbdcdbabeaabeadabdcbcaaebbcedbcebeacdebdaecdccbebaadaeadadead"
+        "ebbcdadcbedaacceabbdaabeedacedbdeaedacbccaacccbbcbacadacabdedaeb"
+        "ccddebeaaacbeadcdbbeeadeeeebbdeeedbbebeabaddaeecbbcadbeaebdacacd"
+        "acdbbbdeceaabceeeabdadbeeaaeddaceddbbdcbebaddadacaadcbabcebadeee"
+        "edeaeeddabebecedddddabaecdeabebdadbecdcaedaabcecccacbcabddaaaeda"
+        "dcceaeccebadbaadddabbcbedcbaeaccbaadbaaeecedaaceabbceeccacdecdad"
+        "daeeeeeaccaebbabdeeeeaccbcadbadddbaceceabccdcddaebaeaeeeadcbcbaa"
+        "ccdbdebccbaedeecdbcddadbdcaeecbbadbbebbddaaceaecccaeeeecccedbeee"
+        "eeaccdbabeecbdcdaceebadacbedededdbcdbcbbeeaebbdddbaddedbadbecebb"
+        "ebdecdadcadbeebaaebcbbbaacbdaedecaaadcccedbebcaceabceccaebacabed"
+        "eccccedeaadbdabaaaaacbcbabaeedddeeeedeacaeebabebccbccedaaedceaab"
+        "bbbacdbbecddeecebbabdadbecdbdabcacabaecdbddbdcadddaddeddcaadabbb"
+        "debadadccaaacbcaccbcbdcdbebaecadccbeedcdbccbecddbbbabaacbaddceed"
+        "cdcbaaebadcaebabcedcccaaebdaabbbedbbbbaabaceccbcdcbddaeebbeebaac"
+        "bddbbaaceebdabeccdeedbccaebbadcedccadceacacacddceeebaeebddacddaa"
+        "eeddadecdcdbdabceddccbdebdbceeadaebdeceeccabbbbbbcecdbeeaaeacace"
+        "adacecaebcbbcbcaeacddddadbceedeaaeddbdccbeaeedcaedaaabebeaedeedb"
+        "eaceacdeaaeeabeaabecaaecebdebbbbcedcdeaaaddcacbdeaebaccbebdbdbde"
+        "ecaddcdeecbccaeadabdedaaebedbcbbecebdaaebcecdcdababecbddadacceca"
+        "aacdeabaabeabaeabcbccdcaeeadbabecbbebacabeaaaaaeabbeceebbbaccaed"
+        "bbedbeceadcebceabdeaabbbbeabbdbddddcadeddaacdecdcdbebceacaadcaac"
+        "bbcabbbaadaeccccddeebdacbdebeccdabdcaedebccdceacdbbddeacdeebdecd"
+        "edbbdeaacabacbcabdeaeeceedcdedadeceabbccdddebaaaaedbdbaecacbbeeb"
+        "cbabaadddbccedcaacdebdbbcbbeccedebbdceebedddcabebaabcaeaaccedaba"
+        "eadabaabacddbaeedccbbaaeeecdddbedcedebdedaaedecaeabdccbdececaabe"
+        "abbbbedceeebdabbabdbbecebccbceeaeebaebeeacacbbdcedcdeaecbdabeabb"
+        "acebeabeabdebacbbdbceeddaddecdeeeedbdcdedecbcdccaebeaacebedeedca"
+        "ecccceaaaddacaedcbdbddddadbdcdeccbbbbaceeaccdbcacacaabddbebaeecc"
+        "caabdbcddeccdbcdddccacceeebddcabdbbdddeebaeebadbdecabbeebecbbbed"
+        "bdeedebeabececdcbdcbccccacbbcdbcdaebdadcddeeddabdaaadbccddcdabda"
+        "ebaaeabebdeadbbdeaeccacbcccceccecedbddeabddcaabbabebcdabbeadbbbc"
+        "aeedecbaaaabdbeddaaceeeebcadbadeddbcebdccccedcdbdaaebdeebaccaeba"
+        "ddecbbecacbeacadbdacccaaebcdbccbcbbdadceddbdbeddceaaaeceebbebbae"
+        "cceaecbacddaaaedcbabceddddeddcddadabeadeaeccddbbbdebadabaabbcbee"
+        "cbdebaecabaabdabbedcbadabbcdbdbedbbcadadabbedeebcaeabeeebdbbeadd"
+        "ecddbbaaadaceaeacaddabedbcddbeedbecadbbcddaaaebeebcaabdbedcacaee"
+        "bdedbcdaadebadcbaaeaeaecedbceeedaaeeaccdcebdeebabbcedeaeddadabcc"
+        "edaecdcacecbcabcaeebbdadccaebaddcbeabbebddccdbadbedaceebacadbedd"
+        "ceaaabddaeadcdeeaccabcdccccbaadadbdabdbbdeabbcccccdeeaacabbecbea"
+        "bbeaeeadebdcabcbebccaeddccaecbabdaddceabbdbaeebedbddbdccceddabbc"
+        "edacacbababcaadbdacbcdbddeadebdccadbccdcdebedaedbdebebebcaecabda"
+        "baabbdbcdaaaceebddcbebbdaaceeacdeedbddccdcddaeadbdbdbebdbeedccda"
+        "caecbdadbdcdebeadedeaccaebadccacaeceabddaebaaddbbedbbaaeabbcaabe"
+        "adabdacbbcbedecccabcddbedcdacabbbdebacdbebbccbcdaeebaabadadabbbc"
+        "bdedaccdcdbcadcebebaeccdceddcabadaeaddedeadadddacaeabdcbedbcecec"
+        "eceecdbdbaceecebcadbeeaaccaddbddcdabcdceaaebdebbdbceadcedbddcccd"
+        "bcbdabcedcbcdaadcbddabbbeedeeaddacbcdccebeaebcddeaebceaebddcbbeb"
+        "addcedaeeedddbdecaecbecdabdaadbdacbebdcacabdbbdbbbbaedbeacabaabc"
+        "ebeccebbddbbeddbcccccecacdbadecadeedcbbbeebbcabbabceecbedebeaebc"
+        "ebccdebbddbeebeadccebaadddcebaedcadcecadcddaecadacbaebecacceeced"
+        "ddecaeeabcaaaeeadcccaadbacdeacdcbaacaaebccecceeeeacacacaebeeebcc"
+        "aecadddedeebacaeaadabbaecebaadcdabeaabbecdddecceacdcaaaacaccabcc"
+        "dbadadbbbdbcbaddecabceeadcdebccdaabbacddeaddedaccedacdcaebeddccb"
+        "cdeaeaddbbdadececdcdeccaaeaeddcccacadcccdaeeeddbeaaedebaacbadeae"
+        "cecbbccbceebdddbceededdaaedecdbddbdcbddaaeccdbaaabebaebbdbcdedcc"
+        "beaeaedccdceecaeaacedbdbdadcaedababebdadeebedbcedeeeeddacadeccae"
+        "cbdbaccedaacbaeebcaabbbaadeebddacccacaadbaeddddaacdbcedbcdcddbec"
+        "dddcbdcebbabcabaedbecbcceeeccdbcabeadcebcdadeaceccbccbbaabebedea"
+        "caeeeeecdeabebeababaeeedbceecabaadbbbadcdbbeacbedeabcdaaadcdbdee"
+        "bdeedbeebeadaeccdebcebcdeadceeecabaaaeabebabbeacbeebcdbbcbbdeabb"
+        "eaaaedecacacbcecbbcbdecceedccdbbeabbbbcbecbbbdedeccdcabeaadbceda"
+        "ccdcaddeeeeeeaeeddaccebcaaaaebeebedecbaeecbedaccaaeebbdabebaecbd"
+        "edeceebdaaebbebaedbcbdbadbaecdccedaeceeebdbadbeaccaeabedabcdebbe"
+        "abcbcbaadcdeeedbccadbbdbeeaabbaeaeadceacaccddacdbaccebbeaccedebe"
+        "dddabbabcdccdcdacabacddabcbdddcdeceacdabbadadaabaebddcbdbcaacceb"
+        "dcdebdeaabdacdecbeabebdbbbedcaebbccdbeedabecdbaeadedcbbeaacaeadb"
+        "ddedbcbbbcabcdeadadbabadccaeebbbaaaebaeddebebcdbccdbdcceabaaadac"
+        "dcaccecbacdbbaadeaacdebceabdaccecdcedcdacdeacdbebaadcceababdbebc"
+        "cbbaeabbcbeebbaacceebabbbddaddedaecdebacbadbceabadaecabdbdcbdceb"
+        "badabddbdaeaededbcaeaddacceebbbecbeadeeeddceddddcaeecaccdbeababd"
+        "acaecaaacbcabccebcdbdabcacdcadadbbbdddbabdbcaaccedaddecbabedaeee"
+        "eadeeedbceecdeaddebddccdecbcbdaaddececdeecbbecabdeaaebbecebdbedc"
+        "ccdeaacccdbcbbcebcdbcaddecdeeedebccbcbbdbcbddbccdcebeadbeecdbecc"
+        "caacdaeabeeeeadecdbaaacbeaebeadcbbccdcedcdcbbcdedcddbdacbddcbcdd"
+        "aeeecdcecebddebabaeacaedcbcbdcabdddccababbdcbdeecbddbdeecdedeadd"
+        "ecddddbdadcacccdbaccbcbbcbbedcceaaebdbeebddecceeaabedbaceedbaaeb"
+        "dcedeeaecdcacbcdccaaeadaaadaeebeccebedaadeedaeaaecadcceecbabacbb"
+        "aabdacdadddcdbcaebeeacaeccbebedcccedabccccccdacdbebaeaacaccecbbb"
+        "bdeccaaedaddcdebeecadadbecdccbcdbbaeaaaabebdaaabeaeaaabcaceadaab"
+        "aeceededbebbaabebbececaaddebbbeaddbbdabacceadcdeccecdabcdaddbabb"
+        "deaabeeddeccbccaceecbbaaacaabdcbbabcccbcbcdbdebaccacdcaddebbebca"
+        "aabddbadaeeebccabbaeeeaaedebbaebdcdeebebaadddabccdcecaddcbeeddae"
+        "abdbddaaabbeeededabcbedadbedbccacbcbeabaddaaccaaeaddcadbcecadebe"
+        "edbcabcddcebebcaeaecebabbbddabcddcbeadbebdcdbbeedeaccaacbeaeccee"
+        "dbebceecabecdddbcbdcbdbaeabaacbbdeeadadcdbecbaecbcdedecdaddbacec"
+        "ebbeedbeacecaeeacdedddcbadaadbccdbabbaddbeeedcdaccbcbeeaadcbcaad"
+        "ccbbdeabccaceddaacdaeadaccaecacebbaddaceadcbdbebbcdaddcbcaebaecb"
+        "ceacabdbdebedbdccdbeeddbaeabadbeabcbbcacceebbcbebddabeecdcdeecee"
+        "ceccbcbeebeeceebccebaeecbcebebccdeacacaaebabadccabcbeaddecaeabbb"
+        "ebccccbaabccccdbcbcedeaacabbbaadeabbddbedeabcdbcededcddedbbddaca"
+        "adcaedcadcbedbeadcddbdbbececdeaddbedbaadddaceabcedcadbebbdadbebc"
+        "ddddeabeababebeadebbecacabebdbcdaccaecbbedaddcadbbadedcceaddbbde"
+        "dcdecdeeaeebeddbbcebeaacdbcdaabcceaddeccbbacbdedcceceababdbbcddb"
+        "abdaedabdddebabecddbebddeedaeacaeaacbdaddcdaaeddbaadaebaebacdaca"
+        "bdbcadeceaeebdbebabbaebabdaaccebdddbaeabdddbeedcdbbdebcacadbcbca"
+        "bcabdaecddcbebbddbeeeddcaeadbaaecdaaebcbcadacadacbeccdddaaabccda"
+        "caadbcebcceecdacbebbebdddcacdbecaecaceddaadadaeaaceeecbaebdeabec"
+        "aeeabeecbdcebddccdddccddccecdbdceabadadadeadadadcadcebeaccceeaaa"
+        "dabebbebdeaadcdeecaaabbccceeecdbedaaebdabedaddbcccdbeecbdabcdaea"
+        "daabebddddcacabbababaacacaabbeacdebdaacacadbcccdbecccdeadbcbaacc"
+        "eeccaebeadbaedaceeedaecbccdbdbecdaddebbbeadeecccabbeeccbabbbeced"
+        "adecbaabcedadebbdbddeceebbacbeaaabaaddaccddbdcbebbcbeaeabaabddbb"
+        "acdcbbaabebbaacecaadcabbdadeaceaaeacedaabceadbeecbcbbbdeacaaadca"
+        "bdaecbcbceeabbbcdaedaabcdecdadebadeedbdebddbcaedcdccdadbaabebbbb"
+        "decbdaeacdaaabacddbbeedecceadacedbcbecabbabaeecbaeeedbdbecabacee"
+        "ebaecbeababdbeeaadbecbaecbddbedadabbcdcabadbccedecbcbbaaccbdecce"
+        "edeeacdcdeeeeceeddceecebcaeacaeaecdccebaadceeddabaceacebbedcbdee"
+        "eaebcecddacddabaaaddcdcdbbebbebaebbcbbeabebaccbbababbbeacacdaecc"
+        "bdbaabccabaacbcbbedaababebdcdceacaaccdeabdecaaeddcadcecccdbcdcea"
+        "eeacdcaadeeccbbbaceaadcacaadaadcabdbdaebbbbdcaaeededdbcaeecaddbd"
+        "ccedeecdedddaebebbabcaeacdeebcaeeadecbbebbcbbcbebecdeccaaadbcdbb"
+        "aadeaaeeeaecccddcbbeeabadceacbbcdedeadcceebeccdbedaacdebeccbaabd"
+        "caccdedabeaeeeeaddeeecceabcbececeddbdacebdcaeaadbceaeedddccdadda"
+        "dcdccdbaeeaadaadbecdabaadececbaedaacabddbbacacabbbecbedababdeace"
+        "eaaddeccdbabccabadbcdcabacccbeaccccdcddbbececbeaddabcbeaddbcbcdc"
+        "adabadbbcddecaddaebaabaedecddedccdbacbbbdeeacdadacccbdedeadddbde"
+        "ecbbbcddeebadcceddbaddcacbaadcdebedacededdecbbcbecdcabaaabdebdce"
+        "eedcddcebdcdeadaceeacebeadebbbcddddbdacbaedccbeeaecccaacceeabadc"
+        "cdebaebbabdbbccbeecccbbeadaedacceceeebcaecddbcdcdaacdeadcdadedde"
+        "ccdaabbdbeccbadedccbbcdcadbebabbddcdbcaeddecbdbddebaebabedacecce"
+        "bcdbedaceeaedccbbebdacecaddaaaeabaacbbedeceeeebaaccddbabcebabbcc"
+        "aebbaabaccababeedbccdeacadbbcddbbccdecddadccddaddcacacecbeabedce"
+        "abdbbceaacaaccebadaadacabdcedebcbccacaaddaedaeceabaeaadbacdabbed"
+        "cededcbdcdcdebbeecbcadeceeccacadbcdaaeedcccdcdabdaddabdadcceadab"
+        "bcbdebccbddbebdbdddbdeecaaaadaaedbdccaccebbaadbacbcaeeecbeceacec"
+        "eeecacddabbbdebdebeaceacaacceaceabeeabaddccebabddbdeecabceacdeab"
+        "ceacddadbcdaadabcbdcebbcddddaecdbdeaccadcdceadbbbbedcbeaebbbadac"
+        "bbedabcbcedaccbbdbebeebbbeeecbdbdbaecbdcbaccaeadeebdbcceadedadda"
+        "caceddeabacaddddecbeedcdedebccaeecceeeebceeaebacbbedadaeaddabbbe"
+        "dadbaaecacdeebdaecdcdeeccddcabadeccdbcebcaccceaacbebbbdcceddeccc"
+        "baadcccbdbbaecaaaeaacacaabcbcacbecdecbabcdedbdecaccccdadedcbbebe"
+        "ddeabaeedbeeaeaaaddbbaaaeeeeeaedeebdabcabebabccecbadacdcedeacbcb"
+        "eebadcdeecacceadcabcccccbbcdeeaaacbebdcadeecaebbbbbbcbabbabbddbb"
+        "ecceabdedbccabdeeeabaecddeccbbddbeeacacecdcbdccbaebceeaaeeecaeda"
+        "aaacceccdcbeddcabaedeeabbeabeddaedcebdeebcedabebdcaacbcebcbaabde"
+        "ebabcebeceadccadadbdbcbecaddaeedecbcedaaccbbdbaaccdddeebacecbddd"
+        "caadbebdbddeeacbaeabdcbabccbaaecbceaacacbcdceabcaaedbbeccacaacdb"
+        "cccddeebcdeaabbbcbaeedabacebbdeeaecbcbaceccbccabadabbbceedaaaaee"
+        "ebecaadbeeacdceeddbabeeaaedbbccabaeabcecaaeebddbdbcdcadacbedeaeb"
+        "aecbcaebeadcbdcaaadaaeedcbaeebaaeadbeaadcdcabdbbcaeedccabbacebec"
+        "dedbaeacddbcbdaddedbcdacbbceecceeecbebddeaeabeadeddebeccbdddddbe"
+        "bdacbbabadaadcacaebebadececeddbadccbebcbeabeaebdaccbbeacdcbabebb"
+        "adbcdaecdadabeadeaabcdbadcbdcdedabacdcabdeaeadaeeeddccaceacebdbb"
+        "acabbcbbddeaebcdcecaaecbebaeadbdbaaacbebebeeadecbdebacdaacbdbecd"
+        "abedcebecddceeabcbeededbceedaccebcbbaeaeeccbcedcbceccabedcebaebd"
+        "baadaabbbddccecccbedeeecbbcaaeecbddbbeabbdddeeaaabccbaaedebeddae"
+        "cebcacdaccddcaecbdbeeebabecddbbbddcebcacbaddaaaedbbcbcbabcaebbdc"
+        "bdddedecbdecbeddcdcdcbbbdcdaccacdaaacbaccadeedccadbcddaaebccbebc"
+        "cedbaedcabeaddbdaacedeedaabaceddaabeaacedddaebbcadebbeaeddbaabae"
+        "dbaceedececceaeedbeecacccdbbcceeadeaadedcdaaaadebecbddaccccecbad"
+        "eaddeadacddddceeaeadeecccdaebdcbdbceadabbcecaebdadcdddebcaeaccda"
+        "ddcebbcbeceebcbaaceccdeeaeadbebeebecadcbccccaaaabdceeaaacadeddab"
+        "abbccccebebbabecebabeecbdadcbcabaaccecdbdbebbacbbacbdedbebebcbba"
+        "adbbabcbeaadadbbbadcaaccebacaddbadbeaebcdeccbeddedccaadadadbddde"
+        "aabedeeebccccceedacaddccbaebcaacebcdaeeaaeaaaaaaeeeacebeadaaabdc"
+        "accaccbdaaeedbbcacbbeeccedeadaedebedbacaddedcebcbadaeabbbaceacae"
+        "ccdcceaeebceaceedbdcbceecbcaebbbdccadabeadbdcceccbebcbaeedceceba"
+        "ebaaaebeedbcedcdeeaddbecaddcbbbebcacacaccdbbeaaadccbdddbcddccded"
+        "eaeccaecabaecaeedbdeddaccdeedadcbcccebaeceaaaadbcadcdcddaeeadebc"
+        "dbbbebebdedacedabcbcaaaedcbabacedccacabbeadebacaeacbbecbeaedbaaa"
+        "dbadcaeddaaeeabcbbecbabcacbceadbabddbedbedbeacaaaababdedabdbcded"
+        "cbcabbbccaeecbecececedbaeccdabbaeaeebbbdedacabacadecddaebacbaadb"
+        "eebaeadcdadecbeeccdaeccbeadcadaebbdcdbaacadadaedaacceaceccbeecce"
+        "ededcedbddacceacdbcdeababbaccbaadacbeeeeecaedbbaccceebceadecebca"
+        "abeacddacaeddcbcedddcaecdbcddeabbecaabccaaacaabbaeddaedeadbcadde"
+        "daaabbeeedbbbdacbddbbacacbaddcaabebdddbcdbccccadeddcdcaeccedbaeb"
+        "bcdababedecbaadeacababeecbbcadbcddabdcdbaeeecdcedbedeeedceaebcdb"
+        "abbadabccddeccadccaccecccdcbeeacdbebddeecbcbabdebbabaadbdeceacca"
+        "edeccadbcccaacccaeaaabeeeeddbbbaeaaedcaacbeadcdcbeaedeccceaedaac"
+        "bbdedaaecbdeaedcccebaeaabdedbdccccbdacabbcacbbbdaadeddeacbeeeced"
+        "aeaaedddeebdcedbdadddbceeccdccceeaccdcdecceddcaecaddaeadebabaead"
+        "ecabedadcdddecbedbddeaabcbccdbecdadcaaaaeecabcccbebdacbdedbaacac"
+        "cdebbeabcbbbaadcdeaeabbeabdadebeabecdedbdaddaacddccdbcebcacaeaad"
+        "cecccccdedeecedeceeadbaadacbbcbdbadabdcaeaacceeeadcaeccbaeecccbd"
+        "eabdabedadddaabbbbaadabbdccabebbcabaaaeecdcecbeddaaecabedcdaecee"
+        "cdbabeedebcaccaabbbdcaeebacacbadddbaeabcedeabbccbdaecdccdbeabdab"
+        "bcaabcbadcebdcaaeeeadbeaccadaeeadadcaeceedcdacbecddeedddebddcecb"
+        "aaedacaeeedabaddaceecbacdedcacdedaacdeddebcdbaaadddecdcabedecbab"
+        "ebbbeecbceaecdeedcdddbaaaadaecbdabeeaabbcaaaaaecbaaebdcaccbadced"
+        "acaeabdbdaaebebeedabcdadbbebadeecdaeaacccceaaabbdacacbecabccecac"
+        "dddeaccdbdcacbddeeaadabebbdabbaeceebbedacdcadedcadbccbdcdaadaeca"
+        "dcaedbeaaeddabedabdeadcdbdebcbadcbbcacbacadbbdbbbedbcedddddcbaec"
+        "cbeedaaeaacbbbcaeadaeabedbbecebeacbbceeeeceebacabddcaedbbbddbaee"
+        "eeaeecdbaaedebdbdedddaeaaabcbbbbbecdaacabcaddbccacaeeeadeaddaabd"
+        "ebaacbdccbccdaeabaddaaeacbcdadaceedcdbadcdedecdcbcaacacdaaabaabb"
+        "ddcaaaacdebcedcacbddcbeeddacceeeacaddadddbbeebabaecbbedbdedeaadb"
+        "aecaecbcddcccecceeebeadaeccdeabdeedecdacebdecdcbceadbccccbddaebb"
+        "acccaeaedbccbacbccdaaebaedaedaeceedcdbbaebcdbdaacdcdebbcddaeedcd"
+        "bbbaaabacccaeebabceceaeeceabebddcddaebdbaeaadbadebdabbdcbecdcdbc"
+        "dcbcdcabaabcecbaeddabbceadbbebaeeeaddbbaddeabbcdcdbacbbddecddeea"
+        "adcebcccdeaebccbaedbddcbeddceeabdaecedddeabacdbbabececdbaaabacdd"
+        "eddaddeacaecdaeaeaedeebedeacebebcacdcdcbcccabbbeccdaebcdcbcdaaca"
+        "dbdeabaddabbcbedebdecbdcaeeaccbddeacaeeeabeaadaeeebebeeecbdbbbda"
+        "ddcdbedbdabcdecdaccbbeddeaabbedcdddbbeccdbdacdedaaeeaacadbcdcbcb"
+        "aabdedbecdadabcbeccaaeaeeacbcbbbbeebeaabebdadacbdeebccaadbebdaeb"
+        "bcddcccddadaacabedcaedebcaaaeaeceaaaceadaeaeacaecaaebdcceaacaade"
+        "cdcccaceedddcaedceeddeaacdedaaaececdbdcccaaceeaedaabdbaedddaccde"
+        "dddccdebacebdadabcebeeedebecbcaccaaaecdabdbbccbadedbcbdecedddaac"
+        "aadccdaeadaebeadbadacbbabdedadacdacceacaaacdbccceccbebdacaceedac"
+        "edbdcbacddbbcabbdcdbdcbdaccadddbbbedacaeddaadacbadabcbbedcabaada"
+        "cebccdceceabeeaeddedcecbccabdcadadcbbacbccbebaedbaadebbdeabdedbe"
+        "eccedbbadccacbdaaaeacddbbcaebeebcacedebecdabaeeecdbbcbeeadcadcbb"
+        "dbdebbddbcbbbbeeccdbeaeddabbcceeecbdacccecccdeeaeaaddccdcebdeded"
+        "acdaecbcbcecaabeceaacdbcbdeeaaeebcbbcabbecedeedecbbceebeadabedee"
+        "abeeaadeedeacbbedebceecedeaadbeddaceeeabccaabbbdacbabceedbbebebb"
+        "eeabceddeadeecbdeebbceeaeeddcbaceeadbcdeebceabccbeebaeacadebacde"
+        "dceeaeedbcdedccbceddaeaaeeabdcbebeaabaebeccaedbccbdbbcdbcbeebdaa"
+        "aecdeddaeaebebadbabeacacacceccccadecadcdbdbcabdecaccdcbbeaceeacc"
+        "ccbecabdbbbbddbbaaeeccbbcabaaeabadedadccaedaeaacecedebebbdcbedbb"
+        "deddadeccebebadcebbebecaacddeccebdcbcaadccbdbcdccbdedabdbdecceab"
+        "ddcacddbbecbcdcbdbcaecaeabeabaaeadddcabacbedadaabbbcdaeacceadbad"
+        "debdeccceaabdeaaeccdcacabeadbcaadecbbdcebcbdaaebedbabadbeadadbbd"
+        "eaeaccceeadebcedaacbaebeddabddeeebeaaeadaaabecbbeceddcabcecdadab"
+        "bdbaabdededdeceeccbceaebdbbabbabddaeedccdcddeceeaebceeecceecbdbc"
+        "dccddeecbdddacdeaedbeabbdeedbcceceacebbddeceeedddecabdbadeecaddb"
+        "ccbabeddaccdecbadcedcbedebcedaedadcdbebdedebeeebcaccaaecbddcadee"
+        "dbeacbebabeeaaaeeddbccdbdebeddbdbbeeacbddbcbccdcbbcdabceaacbdcce"
+        "edebaabbeebcaddbbeaeebcddadeceaceeadecccacdcacbebdbaebeeeebdacbb"
+        "adccdcbaeacbaceeddadaccdacdebeccacdedbceacaaeebbbbebadedcdeadcbd"
+        "cdbdccacadcacdecccbeabedccbddbdeccdbacaacaacbbaaecedbcdadeeeaccd"
+        "becdaacdeeaecbdeddcdbccddeedbadacdabbecdeedcbcedcccedcbbcaeaacac"
+        "dbbdeaeaacdeabdebcacbcaccaaaebacbaaecddaaceadaecbbaedbedebbceeed"
+        "dccedbbdeebdecddcebeebebcacebdcdecbebebecbdcbaeebedcbedcdaaaedba"
+        "bdceeaddaaaeceedceadacacdeeabedddebdadabbaedecbcadbabcbacaaeaecd"
+        "bccbacdbedbcabdedcaaabbdebeaeacdacbbeddadcbbcceedcbceadaacdbdcec"
+        "ddbacddeeadbdacebddadddeddcdddbbaebaccddbaddabbddbddabdbcedacbad"
+        "eaaccdabadacebbccbacebbebaadaeaaacaedbaaadadcdaddaabdbedeadaddae"
+        "cdecdbaeaabceeedcddbaabdddaebbbcededdddcbbddecacbdbbdeaebebbbcea"
+        "eaedbacbcecacceeebedbcaeeadeaaeeadbeceabcbadcacedacddeaedaedccec"
+        "cedecbbaabeadcecadddecdbedeececbcccaaebacedebacbcaccdcabbcaebaee"
+        "eeeeecddbdeadbedeabbeeaadaadbadadaacdaeadaebcdadcbbaedcccbaaadec"
+        "cbaddcbdaebabdbedebedcaecbbabcaadeebebdbedaaaeeaaeaebbbaddeabcbd"
+        "dbebadceeddebdeaebcacedbbaceebaddacdebddccbecdbbaaeddadbdadabace"
+        "ecbbcceecdbcbeaaeacaeeecaaaeccebbcaaaaebbdbaaebcaecececcdceacaea"
+        "dadeecdcebcbeccdaccddadacbecebeccbececacaadbeebabadadaecacddeeed"
+        "dbdebdbeecaeeadacdcbccabbeeeaabacadccbdcdaeeaaedddbddcdaceeaedcb"
+        "ecdbdbbaecbcadcbbebccabaddbcaddcdccddaeeddcaccddaabadbbadedbdcac"
+        "aaabbedecbbaacebbeeacddaeeccedddddabacedbbdbcacddcbdecbacdebbdbc"
+        "cdcabccebdedeadbcbdaaaeeccadceedcbbaadeeaceeaeaaddbacbaaaaedacec"
+        "aaebaabdaabbdceabaaeadedddaceeaaedbccaabbadebbbebecadccbbdbadabc"
+        "ccaaadcdebdadcaeeacedaaedbdaddeabacbeeaeacddcbdadbdaabbaaacebdee"
+        "eeeaadbaaedbbcebceecdadccdebdebebdccedbadebeeddaaacdcacdeabdcceb"
+        "cedcbcebadddceeabbadddcaaeddcaadabeaebedeaaccbacedadeeeccbaeecae"
+        "caddcbaabdcdcbccaebeaabaddabcccdaedbbecbccdbdedcababceddcebbeaab"
+        "eeededbecaeabedeeabeeddadebadbeedddadbbdccbbbabbcaeeaceaeabdceea"
+        "eeeeedacedeaadcadacbcbdcccbadeddedbbdcdcaeebbbdacdcacbbeaddddbad"
+        "edcacdeedddacceccbdcadeecdddeccddbdeabeadadeecdeceabdaeceecebdac"
+        "bcaccabdaaabcdddaacdadacdbadcedbcaaddebdaebbedbcbeddaaccaeeecded"
+        "ebdbbeaeacdcbdebdbccdabbdbbcbedeaabecccecddaacaacccdaeaaaabaabcc"
+        "ceceecebeacaccbbeaeeabaacecaeeaedcadbdbcdedbbccaccaaccdbaadddbbb"
+        "debacdbbaddecdaeaabbcbebdedbaedcaebbbcabccebbceddbdebbcdeacabcea"
+        "edebcaeccacbebdbdeeccbbaacdbdecbabecbbdbccecbdaedabeadcdcaacbdda"
+        "bebbbdccbdecedeedaddbcadadecabadaeccdaaaeabeadeaeaadbdaaaecebaba"
+        "cbbbddaccacebbebcbdaaeaccedeebaeeedaebebbebebebeedabddbbcccedaae"
+        "bcdeddddbbeacaaeadbadacebadadcdabbbabccceeeadebabcadacceccbdbbec"
+        "dedebbddaaedecbbdedacdbbaedecacbdecbaeaeccadaddacdcadecccdbaeacc"
+        "bbccddcabbdcdadccbadcebceacdcdabaaadaeaddbecbeceaddcbdeedceaceec"
+        "abcdaccbbebcceecadbdbbaacccedddddbcebcaadeaeeaceaabdceddadbadbdb"
+        "cbcccbbecbcbebcbeeeabcdcbdbaeddddbeedbbbbcacdbeccceceadbdacbabbb"
+        "ecaecbddcbedebaeeebddcdcadadccceccccacaeebaabaecaaabbdddcaecadda"
+        "ddecbebccceadeadbbaecddeddaabcbebeabebaadbccdaddebbdeedddeaaecda"
+        "bdabdbcdeecebdecdbcddadcbedbebcecdcdaddeeadcbbbedeaddcaadaeeaccc"
+        "eeccebcecbccadacccccbacdcdddaeaeedaccdeecbaaddcdedcdaaeabcbbacbc"
+        "cbaecddccabcbbacaecacaebecbabededacecdaeeacddbcbdaddaedeadabacca"
+        "dcbcdbbaeabbabebceadbadcbaceebacebcaaacdecbccbdbbbbadbdccedabecd"
+        "cbbcaaeccbccaeabecabaaabbdcdbccbddebddcccabaeadaecdcdadceecadcbb"
+        "bacbbbadcabebaccacbdecabacdbcbedddbccccebaecacabbaecceaeddabecee"
+        "cdedcadbdcbceddcacdcebaadcadbecaceedacabecdcdcddbbeccecbdedecbee"
+        "cbadcbadabaadeaecacddabbcecdcabeceeccaeaacddaeceeeeaaaeadeddcaea"
+        "cbddabcbdecaaccbeaedcbcadecbaeabdccddbaeddbedabacadeacccbbdaddee"
+        "adebeacacbebdeeeacceaebdceadabcccacdbdabeedacacbcbccbededdeabbeb"
+        "abcddbbccbbdbcaaedecadcadeaedbbdeceaeceeeaaedbddbeaadecedaedcaad"
+        "dcdcbbebbadaababaebdbeaaebaaedecdcccdbbadbeadcdecabcaabecadcbedd"
+        "acacecbdebccdcaadeaddacdaedadecdddaaeadbcecbceeeaaeebaeddcddabad"
+        "cedbcadaedebaabeaebedeabcbdcdcdacbeaccacdebacecabcdaeeadcdbacaca"
+        "cebcdcddbbeddababecaecdcbbeacacdebeaacdeeabaeeebaabdbaeecebcaddc"
+        "caeeddaeebbccadaaccbdcbcaadccbceaebbbbedcccbdbbbdbaebabddbbadeec"
+        "debdceebceedecaacceeaccddcebeddbcdecabdaadbbecbccdeaeaabceaadcbd"
+        "cdbdceaaceaddcdbbedeadbdaeadecabeaeecaaaadecaaaccabbbccabecbeeed"
+        "bcccdcccdbdbdccbbcceeabdcdaaacdecadddbcaccaccabbbcbaeedccabccccb"
+        "edaaadecdbabbadbdaebabeddeeccdedeedaebdbcbedeaaabebdeddcadaacabc"
+        "bbadbeddebedceccbdaebaabcceccdcaeeaebebaebceeeaeedcaddecacdeadcc"
+        "cbeddacdbacbdbececcbeddaacbeeaadbbcedcbceaaacbeabceabaedddcddcdc"
+        "dbaaaabcaadbbdabecaedadadcececceceabecacdcdbcbbbdeecdcdebbaeadbe"
+        "baabacbaadeabcaaeeccabeddeecceeeeeacbeeaebacadeacdbbdbaeedcbedab"
+        "bdabbadddcddcbcaacebcddbdbacceabaddbeeabacdaabbdcebacaeddbddeccc"
+        "baadbbdaaaedccbedecaacdcdaaddddededacceaddaecdaabbddcebabbbabbeb"
+        "abbdabcacbbedcdadacbcdcaabeecebbcbeabdabbbeecdecccddcebcdbaeeaae"
+        "dcbebcaaddbecaabdedcadecdabadbedcdcbcdacadebbedeabdabdedeceddbbc"
+        "ccadbacedaddbbebccaedbddebadccdbeadbaddbbabeeebddbcceceacbecdade"
+        "ecbcbccdedcdedecabaddddadcabcdaedadaedeaaaabcbceaeceeccabaeaaedd"
+        "bdcbdbbecdbeceebdbeddbbaabbabaabcabbbacbebdeecaecaceaeaabddcebab"
+        "aecceeeaeccacdbbcedbabcadbecdbcebacebdbbbaecedbaeccccdadbbeacdec"
+        "cbaceaaceeededceaacaeabdcceddeeacddbebddbdaceeceeecebebbdbecebeb"
+        "abceadbbbcaacdbbdadaaeabeeeddaabdbeccacdbebcbeccceedccebbdbbadbb"
+        "aeaeeedcaaadeacacbabcbadebeccbeaaddccdeceabbeceeadbeddbcebdcdeab"
+        "cbeabddcddeacccbaebbbeadceaebbbdaaaaceeedbcbababedcaeaddbdabdeab"
+        "bebbaaeccddcbcbddadcabcdeccccbabeacedeaccecedadbacddddceecccaddb"
+        "aeaddcedaebcaecddecbaeeaeaddacebabbdcaaaabadadadabbddadbceabdeca"
+        "ccceaacbdadaadecedddceeeeedcdeabccddbeccbbacccbeadbaaeedcebbcdde"
+        "cbcebebdaccadaaeabceadceacccdddbaeeeccdecbbeddcdebdcbcbcccadbaed"
+        "acacdacbdcadaeccdeeaaddbedbabdaedababdccccdbbebdcceaabdebcdebaea"
+        "bbcadeaddeeeeddabccdaecddeababaabedbbadcdebcaedabcbccccbadbcaace"
+        "ddeedaeddcbaceeadbdcbbdbcabebebbdeeebacccbdeadaaabdedeaebcdecabb"
+        "abdeaaaabeeadeceadbedcdaebbdbabadcbdcebdcbdbdcbcadcdadceddcceaaa"
+        "abaacabadacbbdeceedbaceccebebcdeedcedcaacdaabdeddaeebbdceaadcbad"
+        "eedcabddeccbcbeaeddedbabbbbbdccddabbcedbaddccddabccaeacadcdddadc"
+        "cabddaaeedaeebadbbababeabeaeaabddeaabcaedecdabbcdacbcebedceeabbe"
+        "bdddaadaaceeedddbdeccedbdabbbcbedacbbdabcbbbabbabcecdcacaadaacbb"
+        "eaeadaaddaaddeabedaccbbeddaadcbdaacaccdbbbcbdecdeedbacbcdbeeddaa"
+        "bcecbddcabaebcbccbebdcbdebecbedacabdacbabccbcaaabedeecadeabcbaac"
+        "adabbaacabcdccdebdeceddcacbddedaaaddadbbbcecdeeddbddbcccdebadabc"
+        "acceeacacdbdcaabdbacacdbdeddbbeeabdbecbebdaecbabecdbeeccdbcbbbad"
+        "ddaabeccaeecedeaaddeaeacdadbdecbcdecbbdebcadcadcadbbaedbeeadacec"
+        "bbaececabdeabababdacaedaabbbbaabdedeaeaedececebbcddebeadebbcbedc"
+        "aceeeddcadaaabebdbbeedeaccecdbeaebacdcbedbcddccacadcabceaddddabb"
+        "cabbccaeabeebebbcddddabdcdddbbdbebaddbcadadbeabebadddbeaadebddce"
+        "dddddbcaecaecaedceaebceaaacbaebcceadeceedbcebccaeebadcddbbadcada"
+        "eddaeacbeeebeacecddceaddbdecebcddcedddeabdacccabacaccaccaaaedbea"
+        "adbacdcaadadecadebbebcccdabebaddabdbcbcbccdbddaadeaeedeedeeceaea"
+        "aabddbbebcddbceadaccadbadecceccecabbccdbacedcdbcbcebadbadebcdedb"
+        "cdcbeabdaecbbbcbeadbebeadbeabceaabcedeedceabccbedeaacdadbecdbced"
+        "beeccadabccbdecccbedabbeacaabcabaebbbeaeeddcabcabbbccdabdbdbabbb"
+        "bdbbdeeeeedddadcccaddbeabadaccedcadbabdedddababccabdcbbdeeecedbd"
+        "bccbbadbcdaedccccaaaeaaaedcacecdbabaeedabbeeaacbebeedaccacaccebc"
+        "bdcadccceddbadbacacddcbbbbadeebeadbcbbdbbdceccbbaaeeaaecdbaababb"
+        "caeccaadecaaddedcdeddabacbbacaccbcedccbbdcbebdbcbcdadcdeaeeaeabc"
+        "acdaabaeebcccbccdbdabbddededccbecbeecabcdbdaecaccdcbbcaaacabdebc"
+        "bedebeecadbddcdcaceeeeeddcacdccdececbbbbecdcaaedbbdadbaacecdcecb"
+        "bbcdedaacdacbdccddbeeadeeaedbbabebacaaeccdadeeabdcdbacdbacbdcead"
+        "acdadbaaccbceeadcaecdceaaccddbabcadcabeeabadcdbddaddebbacbaadbee"
+        "bbbbccbadabaedeadbbacccbdecdedbebcbaeceaebedadbceccaccaceaeabdca"
+        "dadecccadadeedacdccadbabcbcecabeacceddaddececcdadeeceebdcbceedcb"
+        "aaeacbababbaceccbbbacaccccbcaebdebddbbbcadccebaacdadadbccacaeebc"
+        "edeededecbacdbdeceddaacaaeacdadcdcbaededdddeededdcaddcabbbedaebd"
+        "ebdcacbabecadbebeaadbbddedecdabdbcabcdeaaeaddddeedecaecbdccbbead"
+        "debeecacccbebadcbacaceaedcbdaabbdedaedabbcedabeedebebabbabbabdba"
+        "beedccdeaedeaaeecdbdebcabaaebeecceaeddbdbabccbaeedcadacecebbecdc"
+        "acbbabceececbebaeaadbdbdebeaaeecedcedadaddcbbcdbabdabacbaeecddea"
+        "bdebbddaeebdccbdccbcecbccdcbbbcdceaecdcccaabdeeceaabcdaadadcaebc"
+        "cceaacaabccacccdbdacdebaddbcaddebcbdddaabbeceaeeeccedcbbbdbccbdc"
+        "eeaedaeabdaeddeadbcdbcbcccddedcabbacedacccdcaecedccddeacdabecbab"
+        "daabdabdcdbeddcdcbebabeaececcdbeacaabddcbdaaadceaeeccdbaedcbceab"
+        "abbadbaacdeaebbccbbadddaeaaeecdeeecebabddbcebaacecdcaaaadcabdadd"
+        "bdebdbdaabaeeaaccdcacbaeadeccecbdccdbedaadaeddececeacdebcceabcdb"
+        "cecddceebdbabeadcdbdcaebcbdbddcdcbadbbddcacaeebaddeacbebebbbbcbc"
+        "bbcaeeaaedabbadabceabccacddacbbbedaadcdcedcccbeeddccbeabaecbaecd"
+        "eadacdeeebedabcaedabacbeedecdadaadbadbaebbbadadaeddaacbdacaadaaa"
+        "cdcababaabbcaaeeddccbbdcdcdceaaeddcbeaebddbadeaecaaccdeeaccdbcdd"
+        "edebcbedcadaddbbbacdacbaaabdbaeceebbdcdbeccbeaeeeeeceedcedeaebea"
+        "cdaecbadbadaaadbbaebaabbcdeedcaabddaecdcedebadccddbcbdabbedeabde"
+        "dbccaadeaadaceaedecadabcdebbaaceddeebcccdccbcccdbadbbdbdbdbcbdcc"
+        "ecbadcedbacbaadebaedaaeaeedaadcedcabccebbebeabddddcdcdbdaabcaada"
+        "ceddaeabcbbbadcbdbeaaedcceaeddbbbebeabaedebccceeebeeabacdabcddcd"
+        "dcddcbddcdadaadbbadeedabadbaaeeeeacbaeacdecabcbdccecdededdadddec"
+    ;
+    uint8_t out[65536];
+    size_t aux[65536];
+    size_t i;
+
+    for (i = 0; i < 1024; ++i) {
+        ASSERT_EQ(0, stree_encode(64, in + i * 64, out, aux));
+    }
+
+    ASSERT_EQ(0, stree_encode(65536, in, out, aux));
 
     return TEST_SUCCESS;
 }
@@ -177,6 +1218,7 @@ int main(void)
     RUN_TEST(test_stree_minimal);
     RUN_TEST(test_stree_minimal_2);
     RUN_TEST(test_stree_minimal_3);
+    RUN_TEST(test_stree_minimal_4);
     RUN_TEST(test_stree_long);
     RUN_TEST(test_stree_very_long);
 }