From: Geoffrey Allott Date: Sat, 20 Aug 2022 21:10:46 +0000 (+0100) Subject: working implementation of stree construction X-Git-Url: https://git.pointlesshacks.com/?a=commitdiff_plain;h=14f441a78f2a953070619873467811c895961d13;p=tANS.git working implementation of stree construction --- diff --git a/Makefile b/Makefile index e5d3cc7..6d8cdb2 100644 --- 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) diff --git a/src/stree.c b/src/stree.c index ff94e1d..8c71a17 100644 --- a/src/stree.c +++ b/src/stree.c @@ -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); diff --git a/test/test_stree.c b/test/test_stree.c index 7c5892a..6b03f95 100644 --- a/test/test_stree.c +++ b/test/test_stree.c @@ -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); }