/* CWP_not.cpp This program calculates a lower-bound on the number of ways the Chinese Wooden Puzzle can be solved such that no two pieces with the same colour touch each other, by combining all solutions for 3 by 10 and 5 by 6. For more details see http://www.iwriteiam.nl/D0701.html#9 Copyright (C) 2007 Frans Faase This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. GNU General Public License: http://www.iwriteiam.nl/GNU.txt */ #include #include #include #include #define NO_DEBUG #define NO_CHECK #define NO_NOISE 255 FILE *f_error = NULL; #ifdef DEBUG #define DEBUG_(S) S #define DEBUG_P(S) printf S #define DEBUG_N(S) PRINT_NUM_M(stdout, S) #define DEBUG_NP(S) PRINT_NUM_MP(stdout, S) #else #define DEBUG_(S) #define DEBUG_P(S) #define DEBUG_N(S) #define DEBUG_NP(S) #endif #define _DEBUG_(S) S #define _DEBUG_P(S) printf S #define _DEBUG_N(S) PRINT_NUM_M(stdout, S) #define _DEBUG_NP(S) PRINT_NUM_MP(stdout, S) #define NO_DEBUG_(S) #define NO_DEBUG_P(S) #define NO_DEBUG_N(S) #define NO_DEBUG_NP(S) #define ASSERT(C,M) if (C) { printf(M); fprintf(f_error, "%%");\ fprintf(f_error, M); fflush(f_error); { int *v = 0; *v = 0; }} #define ASSERT1(C,M,A1) if (C) { printf(M, A1); fprintf(f_error, "%%");\ fprintf(f_error, M, A1); fflush(f_error); { int *v = 0; *v = 0; }} #define ASSERT2(C,M,A1,A2) if (C) { printf(M, A1, A2); fprintf(f_error, "%%");\ fprintf(f_error, M, A1, A2); fflush(f_error); { int *v = 0; *v = 0; }} typedef unsigned char byte; typedef unsigned short int word; typedef unsigned long int longword; /*** MALLOC ***/ #define MALLOC(t) (t *)safe_malloc(sizeof(t)) #define CHAR_MALLOC(size) (char *)safe_malloc(size) #define ARRAY_MALLOC(t,size) (t *)safe_malloc(sizeof(t)*(size)) void *safe_malloc(longword size) { void *h = malloc(size); DEBUG_P(("safe_malloc(%ld)\n", (longword)size)); if (h == NULL) { printf("FATAL: Cannot allocate %ld bytes of dynamic memory\n", (longword)size); printf(" Program aborted.\n"); exit(1); } #ifdef NOISE { int i; char *s = h; for (i = 0; i < size; i++) *(s++) = NOISE; } #endif return h; } /*** DEFINITION BIG INTEGERS ***/ typedef unsigned char byte; typedef unsigned short word; #define RDIGITS 4 /* = nr digits per ndigit */ #define RADIX 10000 #define RADIX2 100000000 #define NR_NDIGITS 16 #define SIZE_OF_LEN(S) ((S) <= 0L ? 0L : (((S) - 1L) / (long)NR_NDIGITS + 1)) struct big_int { big_int() { sign = 1; size = 0; len = 0; ndigit = NULL; } byte size; /* * NR_DIGITD = nr ndigits allocated */ word len; /* = nr ndigits used */ char sign; word *ndigit; /* array of (size * NR_NDIGITS) ndigits */ }; #define CHECK #ifdef CHECK #define ASS_NDIGIT(S,I,V) ass_ndigit(S, I, V) #define ASS_RADIX(S,V) ass_radix(&S, V) #define NDIGIT(S,I) ndigit(S,I) #define CHECK_BIG_INT(S) check_big_int(S) void check_big_int(big_int *s) { int i; ASSERT2(s->len != s->size * NR_NDIGITS, "ERROR: inconsist %d %d\n", s->len, s->size); ASSERT1(s->len > 10000, "ERROR: s->len > 10000: %d\n", s->len); for (i = 0; i < s->len; i++) ASSERT2(s->ndigit[i] > RADIX, "ERROR: s->ndigit[%d] = %d\n", i, s->ndigit[i]); } void ass_ndigit(big_int *s, short i, long v) { CHECK_BIG_INT(s); ASSERT1(i >= (short)s->len, "ERROR: (ass_ndigit) i too large , %d\n", i); ASSERT1(i < 0, "ERROR: (ass_ndigit) i negative, %d\n", i); ASSERT1(v >= (long)RADIX, "ERROR: (ass_ndigit) value too large, %ld\n", v); ASSERT1(v < 0L, "ERROR: (ass_ndigit) value negative, %ld\n", v); s->ndigit[i] = (word)v; } void ass_radix(word *d, long v) { ASSERT1(v >= (long)RADIX, "ERROR: (ass_radix) value too large, %ld\n", v); ASSERT1(v < 0L, "ERROR: (ass_radix) value negative, %ld\n", v); *d = (word)v; } word ndigit(big_int *s, short i) { CHECK_BIG_INT(s); ASSERT1(i >= (short)s->len || i < 0, "ERROR: i out of range, %d\n", i); return s->ndigit[i]; } #else #define ASS_NDIGIT(S,I,V) S->ndigit[(word)(I)] = (word)(V) #define ASS_RADIX(D,V) D = (word)(V) #define NDIGIT(S,I) S->ndigit[(word)(I)] #define CHECK_BIG_INT(S) #endif /* AUXILARY BIG INT PROCEDURES */ word len(big_int *a) { word i; CHECK_BIG_INT(a); if (a->len == 0) return 0; for (i = a->len; i > 0 && a->ndigit[i - 1] == 0; i--); return i; } #define RESIZE(D,S) { if ((word)D->size < (S)) resize(D, S); } void resize(big_int *d, long size) { word i, *old; word old_len; DEBUG_P(("resize(%d, %ld)\n", (short)d->size, size)); ASSERT(size > 250L || size * (long)NR_NDIGITS > RADIX, "ERROR: Number to large\n"); ASSERT(size < 0L, "ERROR: negative size\n"); CHECK_BIG_INT(d); if (size <= (long)d->size) { printf("ERROR: resize - reducing size\n"); return; } old_len = d->len; old = d->ndigit; d->size = (word)size; d->len = NR_NDIGITS * (word)size; d->ndigit = ARRAY_MALLOC(word, d->len); for (i = 0; i < d->len; i++) d->ndigit[i] = 0; /* memcpy(new, d->ndigit, sizeof(word) * len);*/ for (i = 0; i < old_len; i++) ASS_NDIGIT(d, i, old[i]); for (i = old_len; i < d->len; i++) ASS_NDIGIT(d, i, 0); CHECK_BIG_INT(d); free(old); } /* ELEMENTARY BIG INT PROCEDURES */ void free_(big_int *d) { d->sign = 1; d->size = 0; d->len = 0; free(d->ndigit); d->ndigit = NULL; } void print_big_int(FILE *f, big_int *, bool, bool); void assign(big_int *d, big_int *s) { word i; CHECK_BIG_INT(d); CHECK_BIG_INT(s); RESIZE(d, s->size); /* memcpy(d->ndigit, s->ndigit, sizeof(word) * s->len); */ for (i = 0; i < s->len; i++) ASS_NDIGIT(d, i, NDIGIT(s, i)); for (i = s->len; i < d->len; i++) ASS_NDIGIT(d, i, 0); CHECK_BIG_INT(d); } bool big_int_is_zero(big_int *bi) { word i; for (i = 0; i < bi->len; i++) if (NDIGIT(bi, i) != 0) return false; return true; } void assign_word(big_int *bi, longword w) { word i; CHECK_BIG_INT(bi); DEBUG_P(("assign_word(bi, %d)\n", (short)w)); RESIZE(bi, 1); ASS_NDIGIT(bi, 0, w % RADIX); ASS_NDIGIT(bi, 1, w / RADIX); for (i = 2; i < bi->len; i++) ASS_NDIGIT(bi, i, 0); } void print_big_int(FILE *f, big_int *c, bool right_justified, bool abs) { short i; bool lead = true; if (!abs) fprintf(f, "%c", c->sign == 1 ? '+' : '-'); for (i = c->len - 1; i >= 0; i--) if (lead) if (NDIGIT(c, i) == 0 && i != 0) { if (right_justified) fprintf(f, " "); } else { if (right_justified) fprintf(f, "%*d", RDIGITS , NDIGIT(c, i)); else fprintf(f, "%d", NDIGIT(c, i)); lead = false; } else fprintf(f, "%0*d", RDIGITS, NDIGIT(c, i)); } void add_abs_times_to(big_int *s, big_int *a, word sh, word t) { long i; word carry = 0; long len_a, len_s, len_max; DEBUG_P(("add_abs_times_to(): ")); DEBUG_(print_big_int(stdout, s, FALSE, FALSE)); DEBUG_P((" + ")); DEBUG_(print_big_int(stdout, a, FALSE, FALSE)); DEBUG_P((" * %d * RADIX ^ %d\n", t, sh)); len_a = (long)len(a) + sh; len_s = (long)len(s); RESIZE(s, SIZE_OF_LEN(len_a)); len_max = len_a > len_s ? len_a : len_s; for (i = sh; i < len_max; i++) { longword temp; temp = (long)NDIGIT(s, i) + (long)carry + ((i - sh < len_a) ? (long)NDIGIT(a, i - sh) * (long)t : 0L); DEBUG_P((" %ld temp= %d, %ld", i, (short)NDIGIT(s, i), (long)temp)); ASSERT1(temp >= RADIX2, "ERROR: temp error1 %ld\n", temp); /* { printf("s->ndigit[%ld] = %ld\n", i, (long)NDIGIT(s, i)); printf("carry: %d\n", carry); printf("a->ndigit[%ld] = %ld\n", i - sh, (i - sh < len_a) ? (long)NDIGIT(a, i - sh) : 0L); printf("t = %ld\n", (long)t); printf("* = %ld\n", ((i - sh < len_a) ? (long)NDIGIT(a, i - sh) * (long)t : 0L)); exit(1); } */ ASS_NDIGIT(s, i, temp % (long)RADIX); ASS_RADIX(carry, temp / (long)RADIX); } ASSERT1(carry > RADIX, "ERROR: carry error2 %d\n", carry); if (carry > 0) { RESIZE(s, SIZE_OF_LEN(len_max + 1)); ASS_NDIGIT(s, i, carry); } DEBUG_P(("= ")); DEBUG_(print_big_int(stdout, s, FALSE, FALSE)); DEBUG_P(("\n")); } int comp_abs(big_int *a, big_int *b) { long sa = a->len, sb = b->len, s = sb, i; if (sa < sb) { for (i = sb - 1; i >= sa; i--) if (NDIGIT(b, i) > 0) return -1; s = sa; } else if (sb < sa) { for (i = sa - 1; i >= sb; i--) if (NDIGIT(a, i) > 0) return 1; s = sb; } for (i = s - 1; i >= 0; i--) if (NDIGIT(a, i) == NDIGIT(b, i)) /* continue */; else if (NDIGIT(a, i) > NDIGIT(b, i)) return 1; else return -1; return 0; } void sub_abs_times_to(big_int *s, big_int *a, word sh, word t) { long i; word borrow = 0; long len_s, len_a; DEBUG_P(("sub_abs_times_to(")); DEBUG_NP(s); DEBUG_NP(a); DEBUG_P((",%d ,%d)\n", sh, t)); len_s = len(s); len_a = (long)a->len; DEBUG_P(("len_s %ld, len_a %ld\n", len_s, len_a)); for (i = sh; i < len_s; i++) { longword sum = (longword)borrow + ( (i - sh < len_a) ? (longword)NDIGIT(a, i - sh) * t : 0L); DEBUG_P((" s->ndigit[%ld] = %ld, sum = %ld ", i, (longword)NDIGIT(s, i), sum)); if ((longword)NDIGIT(s, i) < sum) { longword temp = sum - (longword)NDIGIT(s, i); DEBUG_P(("temp = %ld\n", temp)); ASS_RADIX(borrow, (temp - 1)/RADIX + 1); ASS_NDIGIT(s, i, (long)borrow * (long)RADIX - temp); DEBUG_P((" s->ndigit[%ld] = %ld\n", i, (longword)NDIGIT(s, i))); } else { ASS_NDIGIT(s, i, NDIGIT(s, i) - sum); DEBUG_P((" s->ndigit[%ld] = %ld\n", i, (longword)NDIGIT(s, i))); borrow = 0; } } ASSERT(borrow > 0, "ERROR: borrow error\n"); DEBUG_P(("result: ")); DEBUG_NP(s); DEBUG_P(("\n")); } void exchange(big_int *a, big_int *b) { byte size; word len; char sign; word *ndigit; size = a->size; a->size = b->size; b->size = size; len = a->len; a->len = b->len; b->len = len; sign = a->sign; a->sign = b->sign; b->sign = sign; ndigit = a->ndigit; a->ndigit = b->ndigit; b->ndigit = ndigit; } void ass_add(big_int *a, big_int *b, bool change_sign) /* affects both large numbers! */ { int sign = change_sign ? -b->sign : b->sign; DEBUG_P(("ass_add(); %c", a->sign == 1 ? '+' : '-')); DEBUG_NP(a); DEBUG_P((" %c %c", change_sign ? '-' : '+', b->sign == 1 ? '+' : '-')); DEBUG_NP(b); if (a->sign == sign) add_abs_times_to(a, b, 0, 1); else if (comp_abs(a, b) > 0) sub_abs_times_to(a, b, 0, 1); else { sign = -a->sign; exchange(a, b); sub_abs_times_to(a, b, 0, 1); a->sign = sign; } DEBUG_P((" = %c", a->sign == 1 ? '+' : '-')); DEBUG_NP(a); DEBUG_P(("\n")); } union Sols { Sols() { nr = 0; } big_int* nr; Sols* sols; }; class SolsIterator { public: SolsIterator(Sols &sols) { _more = sols.sols != 0; if (!_more) return; _v[0] = &sols; for (int d = 0; d < 10; d++) { Sols* sols = _v[d]; int i; for (i = 0; i < 8; i++) if (sols->sols[i].sols != 0) break; _i[d] = i; _val[d] = '0' + i; _v[d+1] = &sols->sols[i]; } _val[10] = '\0'; } bool more() { return _more; } void next() { int d; for (d = 9; d >= 0; d--) { int i; for (i = _i[d] + 1; i < 8; i++) if (_v[d]->sols[i].sols != 0) break; if (i < 8) { _i[d] = i; _val[d] = '0' + i; _v[d+1] = &_v[d]->sols[i]; break; } } if (d < 0) { _more = false; return; } for (d++; d < 10; d++) { Sols* sols = _v[d]; int i; for (i = 0; i < 8; i++) if (sols->sols[i].sols != 0) break; _i[d] = i; _val[d] = '0' + i; _v[d+1] = &sols->sols[i]; } } const char* val() { return _val; } big_int* nr() { return _v[10]->nr; } private: bool _more; int _i[10]; char _val[11]; Sols* _v[11]; }; int count_add = 0; void add(Sols &sols, const char *val, big_int &nr) { if (*val == '\0') { if (sols.nr == 0) { sols.nr = new big_int(); fprintf(stderr, "."); count_add++; } ass_add(sols.nr, &nr, false); } else { if (sols.sols == 0) sols.sols = new Sols[8](); int s = *val - '0'; if (s < 0 || s > 7) { fprintf(stderr, "Error %c\n", *val); exit(0); } add(sols.sols[s], val + 1, nr); } } bool match(const char *a, int a_start, int a_inc, const char *b, int b_start, int b_inc, int l) { int i, ia, ib; for (i = 0, ia = a_start, ib = b_start; i < l; i++, ia += a_inc, ib += b_inc) if (a[ia] == b[ib]) return false; return true; } #define NR_SOL_3_10 1640 char sol_3_10[NR_SOL_3_10][31]; void add_sol_3_10(int &nr, const char *v) { for (int i = 0; i < 3; i++) for (int j = 0; j < 10; j++) sol_3_10[nr][i * 10 + j] = v[(i) * 10 + (j)]; sol_3_10[nr][30] = '\0'; printf("%s ", sol_3_10[nr]); nr++; for (int i = 0; i < 3; i++) for (int j = 0; j < 10; j++) sol_3_10[nr][i * 10 + j] = v[(2-i) * 10 + (j)]; sol_3_10[nr][30] = '\0'; printf("%s ", sol_3_10[nr]); nr++; for (int i = 0; i < 3; i++) for (int j = 0; j < 10; j++) sol_3_10[nr][i * 10 + j] = v[(i) * 10 + (9-j)]; sol_3_10[nr][30] = '\0'; printf("%s ", sol_3_10[nr]); nr++; for (int i = 0; i < 3; i++) for (int j = 0; j < 10; j++) sol_3_10[nr][i * 10 + j] = v[(2-i) * 10 + (9-j)]; sol_3_10[nr][30] = '\0'; printf("%s\n", sol_3_10[nr]); nr++; } char sol_5_6[3496][31]; void add_sol_5_6(int &nr, const char *v) { for (int i = 0; i < 5; i++) for (int j = 0; j < 6; j++) sol_5_6[nr][i * 6 + j] = v[(i) * 6 + (j)]; sol_5_6[nr][30] = '\0'; nr++; for (int i = 0; i < 5; i++) for (int j = 0; j < 6; j++) sol_5_6[nr][i * 6 + j] = v[(4-i) * 6 + (j)]; sol_5_6[nr][30] = '\0'; nr++; for (int i = 0; i < 5; i++) for (int j = 0; j < 6; j++) sol_5_6[nr][i * 6 + j] = v[(i) * 6 + (5-j)]; sol_5_6[nr][30] = '\0'; nr++; for (int i = 0; i < 5; i++) for (int j = 0; j < 6; j++) sol_5_6[nr][i * 6 + j] = v[(4-i) * 6 + (5-j)]; sol_5_6[nr][30] = '\0'; nr++; } int main(int argc, char *argv[]) { int i; i = 0; add_sol_3_10(i, "033334457701224465571122666577"); add_sol_3_10(i, "033334455501224467571122666777"); add_sol_3_10(i, "033334477701224467571122666555"); add_sol_3_10(i, "033334477501224467551122666775"); add_sol_3_10(i, "033334657701224465571122466577"); add_sol_3_10(i, "033334655501224467571122466777"); add_sol_3_10(i, "033334677701224467571122466555"); add_sol_3_10(i, "033334677501224467551122466775"); add_sol_3_10(i, "044333357701446225571166622577"); add_sol_3_10(i, "044333355501446227571166622777"); add_sol_3_10(i, "044333377701446227571166622555"); add_sol_3_10(i, "044333377501446227551166622775"); add_sol_3_10(i, "011446657701442265573333226577"); add_sol_3_10(i, "011446655501442267573333226777"); add_sol_3_10(i, "011446677701442267573333226555"); add_sol_3_10(i, "011446677501442267553333226775"); add_sol_3_10(i, "011442257701446225573333666577"); add_sol_3_10(i, "011442255501446227573333666777"); add_sol_3_10(i, "011442277701446227573333666555"); add_sol_3_10(i, "011442277501446227553333666775"); add_sol_3_10(i, "022114457702214465573333666577"); add_sol_3_10(i, "022114455502214467573333666777"); add_sol_3_10(i, "022114477702214467573333666555"); add_sol_3_10(i, "022114477502214467553333666775"); add_sol_3_10(i, "022114657702214465573333466577"); add_sol_3_10(i, "022114655502214467573333466777"); add_sol_3_10(i, "022114677702214467573333466555"); add_sol_3_10(i, "022114677502214467553333466775"); add_sol_3_10(i, "022411657702244165573333466577"); add_sol_3_10(i, "022411655502244167573333466777"); add_sol_3_10(i, "022411677702244167573333466555"); add_sol_3_10(i, "022411677502244167553333466775"); add_sol_3_10(i, "022466657702244165573333411577"); add_sol_3_10(i, "022466655502244167573333411777"); add_sol_3_10(i, "022466677702244167573333411555"); add_sol_3_10(i, "022466677502244167553333411775"); add_sol_3_10(i, "022466655502244767513333477711"); add_sol_3_10(i, "022666447702211654473333155577"); add_sol_3_10(i, "022666447702261154473333155577"); add_sol_3_10(i, "022777455502276744513333666411"); add_sol_3_10(i, "033336657704412265574411226577"); add_sol_3_10(i, "033336655504412267574411226777"); add_sol_3_10(i, "033336677704412267574411226555"); add_sol_3_10(i, "033336677504412267554411226775"); add_sol_3_10(i, "033332257704416225574411666577"); add_sol_3_10(i, "033332255504416227574411666777"); add_sol_3_10(i, "033332277704416227574411666555"); add_sol_3_10(i, "033332277504416227554411666775"); add_sol_3_10(i, "044771333305447116225557766622"); add_sol_3_10(i, "044772216605447221165557733336"); add_sol_3_10(i, "044772266605447226115557733331"); add_sol_3_10(i, "044773333605447221165557722166"); add_sol_3_10(i, "044773333105447226115557722666"); add_sol_3_10(i, "044776333305447611225557766122"); add_sol_3_10(i, "044776662205447116225557713333"); add_sol_3_10(i, "044776612205447611225557763333"); add_sol_3_10(i, "077722455507672244516663333411"); add_sol_3_10(i, "077744112207675441226665553333"); add_sol_3_10(i, "077744333307675441226665551122"); add_sol_3_10(i, "062215557706221154476633334477"); add_sol_3_10(i, "063333447706221154476622155577"); add_sol_3_10(i, "067744333306744511226677555122"); add_sol_3_10(i, "067755512206744511226677443333"); add_sol_3_10(i, "002246657711224465571333346577"); add_sol_3_10(i, "002246655511224467571333346777"); add_sol_3_10(i, "002246677711224467571333346555"); add_sol_3_10(i, "002246677511224467551333346775"); add_sol_3_10(i, "002266657711224465571333344577"); add_sol_3_10(i, "002266655511224467571333344777"); add_sol_3_10(i, "002266677711224467571333344555"); add_sol_3_10(i, "002266677511224467551333344775"); add_sol_3_10(i, "006662257711446225571443333577"); add_sol_3_10(i, "006662255511446227571443333777"); add_sol_3_10(i, "006662277711446227571443333555"); add_sol_3_10(i, "006662277511446227551443333775"); add_sol_3_10(i, "001446657722114465572233336577"); add_sol_3_10(i, "001446655522114467572233336777"); add_sol_3_10(i, "001446677722114467572233336555"); add_sol_3_10(i, "001446677522114467552233336775"); add_sol_3_10(i, "001133337722614455572266644577"); add_sol_3_10(i, "001133337722615554472266654477"); add_sol_3_10(i, "003333657722114465572214466577"); add_sol_3_10(i, "003333655522114467572214466777"); add_sol_3_10(i, "003333677722114467572214466555"); add_sol_3_10(i, "003333677522114467552214466775"); add_sol_3_10(i, "004433337722644155572266611577"); add_sol_3_10(i, "005771446622557114462257733336"); add_sol_3_10(i, "005773333622557114462257714466"); add_sol_3_10(i, "005776333322557644112257766441"); add_sol_3_10(i, "005776644122557644112257763333"); add_sol_3_10(i, "005551446622757114462277733336"); add_sol_3_10(i, "005553333622757114462277714466"); add_sol_3_10(i, "005556333322757644112277766441"); add_sol_3_10(i, "005556644122757644112277763333"); add_sol_3_10(i, "006114457722614455572266333377"); add_sol_3_10(i, "006115447722615554472266333377"); add_sol_3_10(i, "006333357722644115572266441577"); add_sol_3_10(i, "006333355522644117572266441777"); add_sol_3_10(i, "006333377722644117572266441555"); add_sol_3_10(i, "006333377522644117552266441775"); add_sol_3_10(i, "006433337722644155572266411577"); add_sol_3_10(i, "006633337722614455572261144577"); add_sol_3_10(i, "006633337722615554472261154477"); add_sol_3_10(i, "006644157722644115572263333577"); add_sol_3_10(i, "006644155522644117572263333777"); add_sol_3_10(i, "006644177722644117572263333555"); add_sol_3_10(i, "006644177522644117552263333775"); add_sol_3_10(i, "006641157722644155572264333377"); add_sol_3_10(i, "006664457722614455572211333377"); add_sol_3_10(i, "006665447722615554472211333377"); add_sol_3_10(i, "006661157722644155572244333377"); add_sol_3_10(i, "007771446622757114462255533336"); add_sol_3_10(i, "007773333622757114462255514466"); add_sol_3_10(i, "007776333322757644112255566441"); add_sol_3_10(i, "007776644122757644112255563333"); add_sol_3_10(i, "007744511622744555162277333366"); add_sol_3_10(i, "007744566622744555162277333311"); add_sol_3_10(i, "007733336622744555162277445116"); add_sol_3_10(i, "007733331122744555162277445666"); add_sol_3_10(i, "007751146622755514462277333346"); add_sol_3_10(i, "007751166622755514462277333344"); add_sol_3_10(i, "007754411622755544162277333366"); add_sol_3_10(i, "007754466622755544162277333311"); add_sol_3_10(i, "007733334422755514462277511666"); add_sol_3_10(i, "007733334622755514462277511466"); add_sol_3_10(i, "007733336622755544162277544116"); add_sol_3_10(i, "007733331122755544162277544666"); add_sol_3_10(i, "007751446622755114462277533336"); add_sol_3_10(i, "007753333622755114462277514466"); add_sol_3_10(i, "007756333322755644112277566441"); add_sol_3_10(i, "007756644122755644112277563333"); add_sol_3_10(i, "006115557766612254473333224477"); add_sol_3_10(i, "006225557766622154473333114477"); add_sol_3_10(i, "001122447766612254476333355577"); add_sol_3_10(i, "004412257764411225576663333577"); add_sol_3_10(i, "004412255564411227576663333777"); add_sol_3_10(i, "004412277764411227576663333555"); add_sol_3_10(i, "004412277564411227556663333775"); add_sol_3_10(i, "004433337764422155576662211577"); add_sol_3_10(i, "100446657711442265573333226577"); add_sol_3_10(i, "100446655511442267573333226777"); add_sol_3_10(i, "100446677711442267573333226555"); add_sol_3_10(i, "100446677511442267553333226775"); add_sol_3_10(i, "100442257711446225573333666577"); add_sol_3_10(i, "100442255511446227573333666777"); add_sol_3_10(i, "100442277711446227573333666555"); add_sol_3_10(i, "100442277511446227553333666775"); add_sol_3_10(i, "144006657711442265573333226577"); add_sol_3_10(i, "144006655511442267573333226777"); add_sol_3_10(i, "144006677711442267573333226555"); add_sol_3_10(i, "144006677511442267553333226775"); add_sol_3_10(i, "144002257711446225573333666577"); add_sol_3_10(i, "144002255511446227573333666777"); add_sol_3_10(i, "144002277711446227573333666555"); add_sol_3_10(i, "144002277511446227553333666775"); add_sol_3_10(i, "144660057711446225573333622577"); add_sol_3_10(i, "144660055511446227573333622777"); add_sol_3_10(i, "144660077711446227573333622555"); add_sol_3_10(i, "144660077511446227553333622775"); add_sol_3_10(i, "144662257711446225573333600577"); add_sol_3_10(i, "144662255511446227573333600777"); add_sol_3_10(i, "144662277711446227573333600555"); add_sol_3_10(i, "144662277511446227553333600775"); add_sol_3_10(i, "133335557711602254476660224477"); add_sol_3_10(i, "133330447711622054476662255577"); add_sol_3_10(i, "133335007711622554476662254477"); add_sol_3_10(i, "133335447711622554476662250077"); add_sol_3_10(i, "133335557711622054476662204477"); add_sol_3_10(i, "133337744511622744556662277005"); add_sol_3_10(i, "133337700511622744556662277445"); add_sol_3_10(i, "112233337761224455576660044577"); add_sol_3_10(i, "112233337761225554476660054477"); add_sol_3_10(i, "112233337761224455576664400577"); add_sol_3_10(i, "112233337761224450076664455577"); add_sol_3_10(i, "112233337761225004476665554477"); add_sol_3_10(i, "112233337761225440076665554477"); add_sol_3_10(i, "114333357761440225576664022577"); add_sol_3_10(i, "114333355561440227576664022777"); add_sol_3_10(i, "114333377761440227576664022555"); add_sol_3_10(i, "114333377561440227556664022775"); add_sol_3_10(i, "114333357761442205576664220577"); add_sol_3_10(i, "114333355561442207576664220777"); add_sol_3_10(i, "114333377761442207576664220555"); add_sol_3_10(i, "114333377561442207556664220775"); add_sol_3_10(i, "114333357761442255576664220077"); add_sol_3_10(i, "114333306615442270765554227776"); add_sol_3_10(i, "114666333315447670225554777022"); add_sol_3_10(i, "117772246615707224465550333346"); add_sol_3_10(i, "117772266615707224465550333344"); add_sol_3_10(i, "117776662215707446225550443333"); add_sol_3_10(i, "117774333315767440225556664022"); add_sol_3_10(i, "220114457722014465573333666577"); add_sol_3_10(i, "220114455522014467573333666777"); add_sol_3_10(i, "220114477722014467573333666555"); add_sol_3_10(i, "220114477522014467553333666775"); add_sol_3_10(i, "220114657722014465573333466577"); add_sol_3_10(i, "220114655522014467573333466777"); add_sol_3_10(i, "220114677722014467573333466555"); add_sol_3_10(i, "220114677522014467553333466775"); add_sol_3_10(i, "220411657722044165573333466577"); add_sol_3_10(i, "220411655522044167573333466777"); add_sol_3_10(i, "220411677722044167573333466555"); add_sol_3_10(i, "220411677522044167553333466775"); add_sol_3_10(i, "220466657722044165573333411577"); add_sol_3_10(i, "220466655522044167573333411777"); add_sol_3_10(i, "220466677722044167573333411555"); add_sol_3_10(i, "220466677522044167553333411775"); add_sol_3_10(i, "220666447722011654473333155577"); add_sol_3_10(i, "220666447722061154473333155577"); add_sol_3_10(i, "220065557722666154473333114477"); add_sol_3_10(i, "220011447722666154473333655577"); add_sol_3_10(i, "221004457722114465573333666577"); add_sol_3_10(i, "221004455522114467573333666777"); add_sol_3_10(i, "221004477722114467573333666555"); add_sol_3_10(i, "221004477522114467553333666775"); add_sol_3_10(i, "221004657722114465573333466577"); add_sol_3_10(i, "221004655522114467573333466777"); add_sol_3_10(i, "221004677722114467573333466555"); add_sol_3_10(i, "221004677522114467553333466775"); add_sol_3_10(i, "221446657722114465573333006577"); add_sol_3_10(i, "221446655522114467573333006777"); add_sol_3_10(i, "221446677722114467573333006555"); add_sol_3_10(i, "221446677522114467553333006775"); add_sol_3_10(i, "221440057722114465573333666577"); add_sol_3_10(i, "221440055522114467573333666777"); add_sol_3_10(i, "221440077722114467573333666555"); add_sol_3_10(i, "221440077522114467553333666775"); add_sol_3_10(i, "221555770622115447063333447766"); add_sol_3_10(i, "221555776622115447063333447706"); add_sol_3_10(i, "221666447722110654473333055577"); add_sol_3_10(i, "221660447722116054473333655577"); add_sol_3_10(i, "221665007722116554473333654477"); add_sol_3_10(i, "221665447722116554473333650077"); add_sol_3_10(i, "221665557722116054473333604477"); add_sol_3_10(i, "221667744522116744553333677005"); add_sol_3_10(i, "221667700522116744553333677445"); add_sol_3_10(i, "221144777622144570763333555066"); add_sol_3_10(i, "221155506622144570763333447776"); add_sol_3_10(i, "226665557722006154473333114477"); add_sol_3_10(i, "226665557722600154473333114477"); add_sol_3_10(i, "226660447722611054473333155577"); add_sol_3_10(i, "226665007722611554473333154477"); add_sol_3_10(i, "226665447722611554473333150077"); add_sol_3_10(i, "226665557722611054473333104477"); add_sol_3_10(i, "226667744522611744553333177005"); add_sol_3_10(i, "226667700522611744553333177445"); add_sol_3_10(i, "226660057722644115573333441577"); add_sol_3_10(i, "226660055522644117573333441777"); add_sol_3_10(i, "226660077722644117573333441555"); add_sol_3_10(i, "226660077522644117553333441775"); add_sol_3_10(i, "226661157722644105573333440577"); add_sol_3_10(i, "226661155522644107573333440777"); add_sol_3_10(i, "226661177722644107573333440555"); add_sol_3_10(i, "226661177522644107553333440775"); add_sol_3_10(i, "226661157722644155573333440077"); add_sol_3_10(i, "226005557722666154473333114477"); add_sol_3_10(i, "220033337722614455576661144577"); add_sol_3_10(i, "220033337722615554476661154477"); add_sol_3_10(i, "220044157722644115576663333577"); add_sol_3_10(i, "220044155522644117576663333777"); add_sol_3_10(i, "220044177722644117576663333555"); add_sol_3_10(i, "220044177522644117556663333775"); add_sol_3_10(i, "220041157722644155576664333377"); add_sol_3_10(i, "221133337722614455576660044577"); add_sol_3_10(i, "221133337722615554476660054477"); add_sol_3_10(i, "221133337722614455576664400577"); add_sol_3_10(i, "221133337722614450076664455577"); add_sol_3_10(i, "221133337722615004476665554477"); add_sol_3_10(i, "221133337722615440076665554477"); add_sol_3_10(i, "223333447722601154476660155577"); add_sol_3_10(i, "223333447722610054476661155577"); add_sol_3_10(i, "223333057722614405576661144577"); add_sol_3_10(i, "223333055522614407576661144777"); add_sol_3_10(i, "223333077722614407576661144555"); add_sol_3_10(i, "223333077522614407556661144775"); add_sol_3_10(i, "223333007722614455576661144577"); add_sol_3_10(i, "223333007722615554476661154477"); add_sol_3_10(i, "223333447722615554476661150077"); add_sol_3_10(i, "224433337722644155576660011577"); add_sol_3_10(i, "224400157722644115576663333577"); add_sol_3_10(i, "224400155522644117576663333777"); add_sol_3_10(i, "224400177722644117576663333555"); add_sol_3_10(i, "224400177522644117556663333775"); add_sol_3_10(i, "224411057722644105576663333577"); add_sol_3_10(i, "224411055522644107576663333777"); add_sol_3_10(i, "224411077722644107576663333555"); add_sol_3_10(i, "224411077522644107556663333775"); add_sol_3_10(i, "224411007722644155576663333577"); add_sol_3_10(i, "333322447700612254476661155577"); add_sol_3_10(i, "333311447700622154476662255577"); add_sol_3_10(i, "333322447766612254476001155577"); add_sol_3_10(i, "333311447766622154476002255577"); add_sol_3_10(i, "333322447760012254476661155577"); add_sol_3_10(i, "333311447760022154476662255577"); add_sol_3_10(i, "440012257764411225576663333577"); add_sol_3_10(i, "440012255564411227576663333777"); add_sol_3_10(i, "440012277764411227576663333555"); add_sol_3_10(i, "440012277564411227556663333775"); add_sol_3_10(i, "440033337764422155576662211577"); add_sol_3_10(i, "441102257764410225576663333577"); add_sol_3_10(i, "441102255564410227576663333777"); add_sol_3_10(i, "441102277764410227576663333555"); add_sol_3_10(i, "441102277564410227556663333775"); add_sol_3_10(i, "441122057764412205576663333577"); add_sol_3_10(i, "441122055564412207576663333777"); add_sol_3_10(i, "441122077764412207576663333555"); add_sol_3_10(i, "441122077564412207556663333775"); add_sol_3_10(i, "441122007764412255576663333577"); add_sol_3_10(i, "443333057764422105576662211577"); add_sol_3_10(i, "443333055564422107576662211777"); add_sol_3_10(i, "443333077764422107576662211555"); add_sol_3_10(i, "443333077564422107556662211775"); add_sol_3_10(i, "443333007764422155576662211577"); add_sol_3_10(i, "443333157764422115576662200577"); add_sol_3_10(i, "443333155564422117576662200777"); add_sol_3_10(i, "443333177764422117576662200555"); add_sol_3_10(i, "443333177564422117556662200775"); add_sol_3_10(i, "500772216655447221165447733336"); add_sol_3_10(i, "500773333655447221165447722166"); add_sol_3_10(i, "577033334655701224465771122466"); add_sol_3_10(i, "577011446655701442265773333226"); add_sol_3_10(i, "577022114655702214465773333466"); add_sol_3_10(i, "577022411655702244165773333466"); add_sol_3_10(i, "577033336655704412265774411226"); add_sol_3_10(i, "577002246655711224465771333346"); add_sol_3_10(i, "577001446655722114465772233336"); add_sol_3_10(i, "577003333655722114465772214466"); add_sol_3_10(i, "577100446655711442265773333226"); add_sol_3_10(i, "577144006655711442265773333226"); add_sol_3_10(i, "577220114655722014465773333466"); add_sol_3_10(i, "577220411655722044165773333466"); add_sol_3_10(i, "577221004655722114465773333466"); add_sol_3_10(i, "577221446655722114465773333006"); add_sol_3_10(i, "555033334675701224467771122466"); add_sol_3_10(i, "555011446675701442267773333226"); add_sol_3_10(i, "555022114675702214467773333466"); add_sol_3_10(i, "555022411675702244167773333466"); add_sol_3_10(i, "555033336675704412267774411226"); add_sol_3_10(i, "555002246675711224467771333346"); add_sol_3_10(i, "555001446675722114467772233336"); add_sol_3_10(i, "555003333675722114467772214466"); add_sol_3_10(i, "555133334675711224467770022466"); add_sol_3_10(i, "555100446675711442267773333226"); add_sol_3_10(i, "555144006675711442267773333226"); add_sol_3_10(i, "555112246675701224467770333346"); add_sol_3_10(i, "555221446675722114467770033336"); add_sol_3_10(i, "555223333675722114467770014466"); add_sol_3_10(i, "555220114675722014467773333466"); add_sol_3_10(i, "555220411675722044167773333466"); add_sol_3_10(i, "555221004675722114467773333466"); add_sol_3_10(i, "555221446675722114467773333006"); add_sol_3_10(i, "555333322675701442267770114466"); add_sol_3_10(i, "555333346675702214467770221146"); add_sol_3_10(i, "555333346675702244167770224116"); add_sol_3_10(i, "555333322675711442267771004466"); add_sol_3_10(i, "555333322675711442267771440066"); add_sol_3_10(i, "555333346675722014467772201146"); add_sol_3_10(i, "555333346675722044167772204116"); add_sol_3_10(i, "555333346675722114467772210046"); add_sol_3_10(i, "555333300675722114467772214466"); add_sol_3_10(i, "555441122675704412267770333366"); add_sol_3_10(i, "602215557760221154476633334477"); add_sol_3_10(i, "603333447760221154476622155577"); add_sol_3_10(i, "600221157764422155576644333377"); add_sol_3_10(i, "600333357764411225576644122577"); add_sol_3_10(i, "611004457761224455576622333377"); add_sol_3_10(i, "611005447761225554476622333377"); add_sol_3_10(i, "611440057761224455576622333377"); add_sol_3_10(i, "611445557761224450076622333377"); add_sol_3_10(i, "611555447761225004476622333377"); add_sol_3_10(i, "611555447761225440076622333377"); add_sol_3_10(i, "611402257761440225576643333577"); add_sol_3_10(i, "611422057761442205576643333577"); add_sol_3_10(i, "611422007761442255576643333577"); add_sol_3_10(i, "622114457762214455576600333377"); add_sol_3_10(i, "622115447762215554476600333377"); add_sol_3_10(i, "622333357762244115576600441577"); add_sol_3_10(i, "622433337762244155576600411577"); add_sol_3_10(i, "622004457762214455576611333377"); add_sol_3_10(i, "622005447762215554476611333377"); add_sol_3_10(i, "622440057762214455576611333377"); add_sol_3_10(i, "622445557762214450076611333377"); add_sol_3_10(i, "622555447762215004476611333377"); add_sol_3_10(i, "622555447762215440076611333377"); add_sol_3_10(i, "622015557762201154476633334477"); add_sol_3_10(i, "622115557762210054476633334477"); add_sol_3_10(i, "622114457762214405576633330577"); add_sol_3_10(i, "622114457762214455576633330077"); add_sol_3_10(i, "622115007762215554476633334477"); add_sol_3_10(i, "622115447762215554476633330077"); add_sol_3_10(i, "622001157762244155576644333377"); add_sol_3_10(i, "622333357762244115576644001577"); add_sol_3_10(i, "622333357762244105576644110577"); add_sol_3_10(i, "622333357762244155576644110077"); add_sol_3_10(i, "633335557760012254476611224477"); add_sol_3_10(i, "633335557761102254476610224477"); add_sol_3_10(i, "633330447761122054476612255577"); add_sol_3_10(i, "633335007761122554476612254477"); add_sol_3_10(i, "633335447761122554476612250077"); add_sol_3_10(i, "633335557761122054476612204477"); add_sol_3_10(i, "633330057764411225576644122577"); add_sol_3_10(i, "633332257764411225576644100577"); add_sol_3_10(i, "640012257764411225576643333577"); add_sol_3_10(i, "640033337764422155576642211577"); add_sol_3_10(i, "641102257764410225576643333577"); add_sol_3_10(i, "641122057764412205576643333577"); add_sol_3_10(i, "641122007764412255576643333577"); add_sol_3_10(i, "643333057764422105576642211577"); add_sol_3_10(i, "643333007764422155576642211577"); add_sol_3_10(i, "643333157764422115576642200577"); if (i != NR_SOL_3_10) { printf("%d\n", i); return 0; } i = 0; add_sol_5_6(i, "022777022757144556114456333366"); add_sol_5_6(i, "055522045622144677114667333377"); add_sol_5_6(i, "055577045667144677114622333322"); add_sol_5_6(i, "066422064422164577115557333377"); add_sol_5_6(i, "066622064422144577115557333377"); add_sol_5_6(i, "066677065557144577114422333322"); add_sol_5_6(i, "077722075722155466115446333346"); add_sol_5_6(i, "077766075746155446115422333322"); add_sol_5_6(i, "077722075722155666115446333344"); add_sol_5_6(i, "077566075556177446114422333322"); add_sol_5_6(i, "033335022455122445116747666777"); add_sol_5_6(i, "077555074453177443116223666223"); add_sol_5_6(i, "033336015666115577225447224477"); add_sol_5_6(i, "066777016747116544225554223333"); add_sol_5_6(i, "022666022677115557144577443333"); add_sol_5_6(i, "033335011455221445226747666777"); add_sol_5_6(i, "022777022757333355114456144666"); add_sol_5_6(i, "033331044511445566227576227776"); add_sol_5_6(i, "066611044613445773225573225773"); add_sol_5_6(i, "066611044613445553227573227773"); add_sol_5_6(i, "066611044613447773227573225553"); add_sol_5_6(i, "066611044613447753227553227753"); add_sol_5_6(i, "022666022677445557144577113333"); add_sol_5_6(i, "066622043622443577413557113577"); add_sol_5_6(i, "066622043622443555413757113777"); add_sol_5_6(i, "066622043622443777413757113555"); add_sol_5_6(i, "066622043622443775413755113775"); add_sol_5_6(i, "055522045622441677411667333377"); add_sol_5_6(i, "055577045667441677411622333322"); add_sol_5_6(i, "011223041223447773457673555666"); add_sol_5_6(i, "022113022413577443557643577666"); add_sol_5_6(i, "022311022314577344557346577666"); add_sol_5_6(i, "022666022346577344557314577311"); add_sol_5_6(i, "022666022643577443557413577113"); add_sol_5_6(i, "062211062213566773554473544773"); add_sol_5_6(i, "066611022613522773554473544773"); add_sol_5_6(i, "066611064413577443557223577223"); add_sol_5_6(i, "011666051677555447224477223333"); add_sol_5_6(i, "011666051643555443227473227773"); add_sol_5_6(i, "022666022677555447154477113333"); add_sol_5_6(i, "022666022643555443157473117773"); add_sol_5_6(i, "022113022413555443757643777666"); add_sol_5_6(i, "022311022314555344757346777666"); add_sol_5_6(i, "022666022346555344757314777311"); add_sol_5_6(i, "022666022643555443757413777113"); add_sol_5_6(i, "066611064413555443757223777223"); add_sol_5_6(i, "033334052244552246757116777166"); add_sol_5_6(i, "033331052211552244757446777666"); add_sol_5_6(i, "033331052211552246757446777466"); add_sol_5_6(i, "033334052244552241757611777666"); add_sol_5_6(i, "013333011777622747622544665554"); add_sol_5_6(i, "015554011544622747622777663333"); add_sol_5_6(i, "022777022747611544615554663333"); add_sol_5_6(i, "031122035122635577635447664477"); add_sol_5_6(i, "032211032215637755637445667744"); add_sol_5_6(i, "034477035447635577635122661122"); add_sol_5_6(i, "037744037445637755632215662211"); add_sol_5_6(i, "033335022455622445611747661777"); add_sol_5_6(i, "045551044511674722677722663333"); add_sol_5_6(i, "044773054473655773652213662211"); add_sol_5_6(i, "077722074722644511645551663333"); add_sol_5_6(i, "077555074453677443611223661223"); add_sol_5_6(i, "077722076722666445114455133335"); add_sol_5_6(i, "011777016747666544225554223333"); add_sol_5_6(i, "077711076741666544225554223333"); add_sol_5_6(i, "022777022747666445116455133335"); add_sol_5_6(i, "013333011777666747226544225554"); add_sol_5_6(i, "015554011544666747226777223333"); add_sol_5_6(i, "022777022747661445611455633335"); add_sol_5_6(i, "033335011455661445622747622777"); add_sol_5_6(i, "061144061443665773225573225773"); add_sol_5_6(i, "061144061443665553227573227773"); add_sol_5_6(i, "061144061443667773227573225553"); add_sol_5_6(i, "061144061443667753227553227753"); add_sol_5_6(i, "061153061553667753227443227744"); add_sol_5_6(i, "063511063551663577223447224477"); add_sol_5_6(i, "063577063557663577223441224411"); add_sol_5_6(i, "063555063757663777223441224411"); add_sol_5_6(i, "063777063757663555223441224411"); add_sol_5_6(i, "063775063755663775223441224411"); add_sol_5_6(i, "064411063441663577223557223577"); add_sol_5_6(i, "064477063447663577223551223511"); add_sol_5_6(i, "064411063441663555223757223777"); add_sol_5_6(i, "064411063441663777223757223555"); add_sol_5_6(i, "064411063441663775223755223775"); add_sol_5_6(i, "065773065573665773221443221144"); add_sol_5_6(i, "065553067573667773221443221144"); add_sol_5_6(i, "067773067573665553221443221144"); add_sol_5_6(i, "067744067443667753221553221153"); add_sol_5_6(i, "067753067553667753221443221144"); add_sol_5_6(i, "022777022747666544615554113333"); add_sol_5_6(i, "051122055122654477666447333377"); add_sol_5_6(i, "054477055447651177666122333322"); add_sol_5_6(i, "057722055722657744666441333311"); add_sol_5_6(i, "057722055722657711666441333344"); add_sol_5_6(i, "055522075722677744666441333311"); add_sol_5_6(i, "055522075722677711666441333344"); add_sol_5_6(i, "077722075722655544666441333311"); add_sol_5_6(i, "077722075722655511666441333344"); add_sol_5_6(i, "077445074455677115666122333322"); add_sol_5_6(i, "077445074455677225666221333311"); add_sol_5_6(i, "077522075522677544666441333311"); add_sol_5_6(i, "077522075522677511666441333344"); add_sol_5_6(i, "051122055122757466777446333346"); add_sol_5_6(i, "051166055146757446777422333322"); add_sol_5_6(i, "051122055122757666777446333344"); add_sol_5_6(i, "054466055446757116777122333322"); add_sol_5_6(i, "054411055441757226777226333366"); add_sol_5_6(i, "054466055446757226777221333311"); add_sol_5_6(i, "054411055441757666777622333322"); add_sol_5_6(i, "056622055622757644777441333311"); add_sol_5_6(i, "056622055622757611777441333344"); add_sol_5_6(i, "066445064455767115777122333322"); add_sol_5_6(i, "066445064455767225777221333311"); add_sol_5_6(i, "066522065522767544777441333311"); add_sol_5_6(i, "066522065522767511777441333344"); add_sol_5_6(i, "022113022413777443757643555666"); add_sol_5_6(i, "022311022314777344757346555666"); add_sol_5_6(i, "022666022346777344757314555311"); add_sol_5_6(i, "022666022643777443757413555113"); add_sol_5_6(i, "066611064413777443757223555223"); add_sol_5_6(i, "013333011666775556744522774422"); add_sol_5_6(i, "022166022116774456744555773333"); add_sol_5_6(i, "022666022611774451744555773333"); add_sol_5_6(i, "022113022513775563744563774466"); add_sol_5_6(i, "022663022563775563744513774411"); add_sol_5_6(i, "022611022613776653744553774453"); add_sol_5_6(i, "022166022116775446755544773333"); add_sol_5_6(i, "022664022644775641755511773333"); add_sol_5_6(i, "022666022644775441755511773333"); add_sol_5_6(i, "022666022611775441755544773333"); add_sol_5_6(i, "022113022413775443755643775666"); add_sol_5_6(i, "022311022314775344755346775666"); add_sol_5_6(i, "022666022346775344755314775311"); add_sol_5_6(i, "022666022643775443755413775113"); add_sol_5_6(i, "033331055511775226744226774466"); add_sol_5_6(i, "033331055511775666744622774422"); add_sol_5_6(i, "045551044511774622766622773333"); add_sol_5_6(i, "066611062213772253744553774453"); add_sol_5_6(i, "066622064422775441755511773333"); add_sol_5_6(i, "066611064413775443755223775223"); add_sol_5_6(i, "063333066622774422744511775551"); add_sol_5_6(i, "063333066611775551744522774422"); add_sol_5_6(i, "004466144563115563227573227773"); add_sol_5_6(i, "005773155573116773226443226644"); add_sol_5_6(i, "005663155563117763227443227744"); add_sol_5_6(i, "005666155677115447224477223333"); add_sol_5_6(i, "005666155643115443227473227773"); add_sol_5_6(i, "003333166777116747226544225554"); add_sol_5_6(i, "005554166544116747226777223333"); add_sol_5_6(i, "003333115666155677225447224477"); add_sol_5_6(i, "004477115447155677225666223333"); add_sol_5_6(i, "006777116747166544225554223333"); add_sol_5_6(i, "003333115554166544226747226777"); add_sol_5_6(i, "003577113557143577443622466622"); add_sol_5_6(i, "003555113757143777443622466622"); add_sol_5_6(i, "003777113757143555443622466622"); add_sol_5_6(i, "003775113755143775443622466622"); add_sol_5_6(i, "003333115554122544622747666777"); add_sol_5_6(i, "007773227573225563144563114466"); add_sol_5_6(i, "006644226443226773155573115773"); add_sol_5_6(i, "007744227443227763155563115663"); add_sol_5_6(i, "003333224477225447155677115666"); add_sol_5_6(i, "007773227473225443155643115666"); add_sol_5_6(i, "003333226777226747166544115554"); add_sol_5_6(i, "005554226544226747166777113333"); add_sol_5_6(i, "004477225447225577115666133336"); add_sol_5_6(i, "003333225554226544116747166777"); add_sol_5_6(i, "003333225554221544611747666777"); add_sol_5_6(i, "001144221443225773655573666773"); add_sol_5_6(i, "004666314456311455322757322777"); add_sol_5_6(i, "006665316455311445322747322777"); add_sol_5_6(i, "001577311557344577364422366622"); add_sol_5_6(i, "001555311757344777364422366622"); add_sol_5_6(i, "001777311757344555364422366622"); add_sol_5_6(i, "001775311755344775364422366622"); add_sol_5_6(i, "001622311622356677355447354477"); add_sol_5_6(i, "001466311446357746355722357722"); add_sol_5_6(i, "001666311446357744355722357722"); add_sol_5_6(i, "001466311446355546375722377722"); add_sol_5_6(i, "001666311446355544375722377722"); add_sol_5_6(i, "001777311747362244362254366555"); add_sol_5_6(i, "001577311557364577364422366422"); add_sol_5_6(i, "001555311757364777364422366422"); add_sol_5_6(i, "001777311757364555364422366422"); add_sol_5_6(i, "001775311755364775364422366422"); add_sol_5_6(i, "001555311654366644322747322777"); add_sol_5_6(i, "001777311747366644322654322555"); add_sol_5_6(i, "001466311446377746375722355522"); add_sol_5_6(i, "001666311446377744375722355522"); add_sol_5_6(i, "001622311622377665374455377445"); add_sol_5_6(i, "001666311226377225374455377445"); add_sol_5_6(i, "001466311446377546375522377522"); add_sol_5_6(i, "001666311446377544375522377522"); add_sol_5_6(i, "004477311447351677355622356622"); add_sol_5_6(i, "006622311622351677355447354477"); add_sol_5_6(i, "004477311447361577365522366522"); add_sol_5_6(i, "004477322447322577315556311666"); add_sol_5_6(i, "004411322441322577365557366677"); add_sol_5_6(i, "004477322447322577365551366611"); add_sol_5_6(i, "002266342256344556314757311777"); add_sol_5_6(i, "001555341156344666374722377722"); add_sol_5_6(i, "001666341156344555374722377722"); add_sol_5_6(i, "002211342251344556374756377766"); add_sol_5_6(i, "002266342256344556374751377711"); add_sol_5_6(i, "006665346155344115374722377722"); add_sol_5_6(i, "004422344622311677315667355577"); add_sol_5_6(i, "004477344667311677315622355522"); add_sol_5_6(i, "004416344116357766355722357722"); add_sol_5_6(i, "004466344116357716355722357722"); add_sol_5_6(i, "004416344116355566375722377722"); add_sol_5_6(i, "004466344116355516375722377722"); add_sol_5_6(i, "004422344122361177365557366577"); add_sol_5_6(i, "004422344622366677315557311577"); add_sol_5_6(i, "004411344651366655322757322777"); add_sol_5_6(i, "004416344116377766375722355522"); add_sol_5_6(i, "004466344116377716375722355522"); add_sol_5_6(i, "004422344122377116375556377566"); add_sol_5_6(i, "004411344221377226375556377566"); add_sol_5_6(i, "004466344226377226375551377511"); add_sol_5_6(i, "004422344622377666375551377511"); add_sol_5_6(i, "004416344116377566375522377522"); add_sol_5_6(i, "004466344116377516375522377522"); add_sol_5_6(i, "004422344622377611376651377555"); add_sol_5_6(i, "001122344122364477365557366577"); add_sol_5_6(i, "004777344757342255312256311666"); add_sol_5_6(i, "004622344622346677315557311577"); add_sol_5_6(i, "004577344557341577311622366622"); add_sol_5_6(i, "004555344757341777311622366622"); add_sol_5_6(i, "004777344757341555311622366622"); add_sol_5_6(i, "004775344755341775311622366622"); add_sol_5_6(i, "004666344156341155322757322777"); add_sol_5_6(i, "004777344757341155322156322666"); add_sol_5_6(i, "004777344767346665322155322115"); add_sol_5_6(i, "004115344155346665322767322777"); add_sol_5_6(i, "004611344651346655322757322777"); add_sol_5_6(i, "004777344757346655322651322611"); add_sol_5_6(i, "004577344557341577361122366622"); add_sol_5_6(i, "004555344757341777361122366622"); add_sol_5_6(i, "004777344757341555361122366622"); add_sol_5_6(i, "004775344755341775361122366622"); add_sol_5_6(i, "004777344757342255362251366611"); add_sol_5_6(i, "004115344155346665376722377722"); add_sol_5_6(i, "007722366722367711364451344555"); add_sol_5_6(i, "001122366122364477365447355577"); add_sol_5_6(i, "004477366447361177365122355522"); add_sol_5_6(i, "007722366722367744365441355511"); add_sol_5_6(i, "007722366722367711365441355544"); add_sol_5_6(i, "001555361154366644322747322777"); add_sol_5_6(i, "006664376744377745322155322115"); add_sol_5_6(i, "006665376755377745322144322114"); add_sol_5_6(i, "006665376755377745322441322411"); add_sol_5_6(i, "005322455322445366147376117776"); add_sol_5_6(i, "003333455522445122747116777666"); add_sol_5_6(i, "003333455511445221747226777666"); add_sol_5_6(i, "003333455522445622747611777661"); add_sol_5_6(i, "003333455511445661747622777622"); add_sol_5_6(i, "005116455316445366747322777322"); add_sol_5_6(i, "005223455223445113747613777666"); add_sol_5_6(i, "005223455223445663747613777611"); add_sol_5_6(i, "005322455322445366747316777116"); add_sol_5_6(i, "005322455322445311747316777666"); add_sol_5_6(i, "005611455613445663747223777223"); add_sol_5_6(i, "005666455316445311747322777322"); add_sol_5_6(i, "005666455613445113747223777223"); add_sol_5_6(i, "007776447376544366551322511322"); add_sol_5_6(i, "002211442213644773655573665773"); add_sol_5_6(i, "004477511447551677566622333322"); add_sol_5_6(i, "004422544622551677511667333377"); add_sol_5_6(i, "004477544667551677511622333322"); add_sol_5_6(i, "001122577122557466577446333346"); add_sol_5_6(i, "001166577146557446577422333322"); add_sol_5_6(i, "001122577122557666577446333344"); add_sol_5_6(i, "004466577446557116577122333322"); add_sol_5_6(i, "004411577441557226577226333366"); add_sol_5_6(i, "004466577446557226577221333311"); add_sol_5_6(i, "004411577441557666577622333322"); add_sol_5_6(i, "006622577622557644577441333311"); add_sol_5_6(i, "006622577622557611577441333344"); add_sol_5_6(i, "001223511223557763544763447766"); add_sol_5_6(i, "001122555122654477666447333377"); add_sol_5_6(i, "004477555447651177666122333322"); add_sol_5_6(i, "007722555722657744666441333311"); add_sol_5_6(i, "007722555722657711666441333344"); add_sol_5_6(i, "001122555122757466777446333346"); add_sol_5_6(i, "001166555146757446777422333322"); add_sol_5_6(i, "001122555122757666777446333344"); add_sol_5_6(i, "004466555446757116777122333322"); add_sol_5_6(i, "004411555441757226777226333366"); add_sol_5_6(i, "004466555446757226777221333311"); add_sol_5_6(i, "004411555441757666777622333322"); add_sol_5_6(i, "006622555622757644777441333311"); add_sol_5_6(i, "006622555622757611777441333344"); add_sol_5_6(i, "001577611557644577664422333322"); add_sol_5_6(i, "001555611757644777664422333322"); add_sol_5_6(i, "001777611757644555664422333322"); add_sol_5_6(i, "001775611755644775664422333322"); add_sol_5_6(i, "004411622441622577665557333377"); add_sol_5_6(i, "004477622447622577665551333311"); add_sol_5_6(i, "004577644557641577661122333322"); add_sol_5_6(i, "004555644757641777661122333322"); add_sol_5_6(i, "004777644757641555661122333322"); add_sol_5_6(i, "004775644755641775661122333322"); add_sol_5_6(i, "004777644757642255662251333311"); add_sol_5_6(i, "006577666557144577114422333322"); add_sol_5_6(i, "006555666757144777114422333322"); add_sol_5_6(i, "006777666757144555114422333322"); add_sol_5_6(i, "006775666755144775114422333322"); add_sol_5_6(i, "006777666747333344221154221555"); add_sol_5_6(i, "006223666223775553744513774411"); add_sol_5_6(i, "004411666441226577225557333377"); add_sol_5_6(i, "004477666447226577225551333311"); add_sol_5_6(i, "003333666511776551744522774422"); add_sol_5_6(i, "001122664122644577645557333377"); add_sol_5_6(i, "002211662213644773654473555773"); add_sol_5_6(i, "003333666777622747122544115554"); add_sol_5_6(i, "005554666544622747122777113333"); add_sol_5_6(i, "003333666777611747221544225554"); add_sol_5_6(i, "005554666544611747221777223333"); add_sol_5_6(i, "001122666122644577445557333377"); add_sol_5_6(i, "001122666122654477555447333377"); add_sol_5_6(i, "004477666447651177555122333322"); add_sol_5_6(i, "007722666722657744555441333311"); add_sol_5_6(i, "007722666722657711555441333344"); add_sol_5_6(i, "001777611747666544225554223333"); add_sol_5_6(i, "004411644513666553227573227773"); add_sol_5_6(i, "005773655573666773221443221144"); add_sol_5_6(i, "001122777122747566445556433336"); add_sol_5_6(i, "003333777622747622445661455511"); add_sol_5_6(i, "003333777666747116445122455522"); add_sol_5_6(i, "003333777666747226445221455511"); add_sol_5_6(i, "003333777661747611445622455522"); add_sol_5_6(i, "001122777122757466555446333346"); add_sol_5_6(i, "001166777146757446555422333322"); add_sol_5_6(i, "001122777122757666555446333344"); add_sol_5_6(i, "004466777446757116555122333322"); add_sol_5_6(i, "004411777441757226555226333366"); add_sol_5_6(i, "004466777446757226555221333311"); add_sol_5_6(i, "004411777441757666555622333322"); add_sol_5_6(i, "006622777622757644555441333311"); add_sol_5_6(i, "006622777622757611555441333344"); add_sol_5_6(i, "001555771156744666774422333322"); add_sol_5_6(i, "001666771156744555774422333322"); add_sol_5_6(i, "002211772251744556774456333366"); add_sol_5_6(i, "002266772256744556774451333311"); add_sol_5_6(i, "006665776155744115774422333322"); add_sol_5_6(i, "001122775122755466775446333346"); add_sol_5_6(i, "001166775146755446775422333322"); add_sol_5_6(i, "001122775122755666775446333344"); add_sol_5_6(i, "004466775446755116775122333322"); add_sol_5_6(i, "004411775441755226775226333366"); add_sol_5_6(i, "004466775446755226775221333311"); add_sol_5_6(i, "004411775441755666775622333322"); add_sol_5_6(i, "006622775622755644775441333311"); add_sol_5_6(i, "006622775622755611775441333344"); add_sol_5_6(i, "006115776155766445774422333322"); add_sol_5_6(i, "003333774422744522776551666511"); add_sol_5_6(i, "155577115447064477066622333322"); add_sol_5_6(i, "166622114622044577045557333377"); add_sol_5_6(i, "133336115666005577225447224477"); add_sol_5_6(i, "166777116747006544225554223333"); add_sol_5_6(i, "133335110455220445226747666777"); add_sol_5_6(i, "144666114456333355220757220777"); add_sol_5_6(i, "133335112255442205644707666777"); add_sol_5_6(i, "133335112255642205644707664777"); add_sol_5_6(i, "100777116747666544225554223333"); add_sol_5_6(i, "133335116455666445220747220777"); add_sol_5_6(i, "133335110455660445622747622777"); add_sol_5_6(i, "133335114455660445670722677722"); add_sol_5_6(i, "113333015666055677225447224477"); add_sol_5_6(i, "114477015447055677225666223333"); add_sol_5_6(i, "116777016747066544225554223333"); add_sol_5_6(i, "113333015554066544226747226777"); add_sol_5_6(i, "113577013557043577443622466622"); add_sol_5_6(i, "113555013757043777443622466622"); add_sol_5_6(i, "113777013757043555443622466622"); add_sol_5_6(i, "113775013755043775443622466622"); add_sol_5_6(i, "113333015554022544622747666777"); add_sol_5_6(i, "114477315447305577305622366622"); add_sol_5_6(i, "114666314456300455322757322777"); add_sol_5_6(i, "116665316455300445322747322777"); add_sol_5_6(i, "114666314456322455322757300777"); add_sol_5_6(i, "116665316455322445322747300777"); add_sol_5_6(i, "110066314456344556322757322777"); add_sol_5_6(i, "110022314422344577365557366677"); add_sol_5_6(i, "110577310557344577364422366622"); add_sol_5_6(i, "110555310757344777364422366622"); add_sol_5_6(i, "110777310757344555364422366622"); add_sol_5_6(i, "110775310755344775364422366622"); add_sol_5_6(i, "110077315557344577364422366622"); add_sol_5_6(i, "116622314622344677345557300577"); add_sol_5_6(i, "110022314622344677345667355577"); add_sol_5_6(i, "110077314667344677345622355522"); add_sol_5_6(i, "116622314622344677345007355577"); add_sol_5_6(i, "110622310622356677355447354477"); add_sol_5_6(i, "110466310446357746355722357722"); add_sol_5_6(i, "110666310446357744355722357722"); add_sol_5_6(i, "114477310447350677355622356622"); add_sol_5_6(i, "116022316022356677355447354477"); add_sol_5_6(i, "116622316022356077355447354477"); add_sol_5_6(i, "116622310622350677355447354477"); add_sol_5_6(i, "114477315447355577300622366622"); add_sol_5_6(i, "114477315447355577322006322666"); add_sol_5_6(i, "114477315447355577322666322006"); add_sol_5_6(i, "114477315447355577322600322666"); add_sol_5_6(i, "114466315446355506322707322777"); add_sol_5_6(i, "114477315447355577366622300622"); add_sol_5_6(i, "114477315447355577366622360022"); add_sol_5_6(i, "114477315447355577360022366622"); add_sol_5_6(i, "110466310446355546375722377722"); add_sol_5_6(i, "110666310446355544375722377722"); add_sol_5_6(i, "114477315447355677305622306622"); add_sol_5_6(i, "116622315622355677305447304477"); add_sol_5_6(i, "114477315447355077365022366622"); add_sol_5_6(i, "110022315422355446375746377766"); add_sol_5_6(i, "110044315446355666375722377722"); add_sol_5_6(i, "110046315446355466375722377722"); add_sol_5_6(i, "114466315446355006375722377722"); add_sol_5_6(i, "110777310747362244362254366555"); add_sol_5_6(i, "110577310557364577364422366422"); add_sol_5_6(i, "110555310757364777364422366422"); add_sol_5_6(i, "110777310757364555364422366422"); add_sol_5_6(i, "110775310755364775364422366422"); add_sol_5_6(i, "110077315557364577364422366422"); add_sol_5_6(i, "114477310447360577365522366522"); add_sol_5_6(i, "114477315447365577365022366022"); add_sol_5_6(i, "110555310654366644322747322777"); add_sol_5_6(i, "110777310747366644322654322555"); add_sol_5_6(i, "116005316455366445322747322777"); add_sol_5_6(i, "116555316054366044322747322777"); add_sol_5_6(i, "116555316450366440322747322777"); add_sol_5_6(i, "116777316747366044322054322555"); add_sol_5_6(i, "116777316747366445322455322005"); add_sol_5_6(i, "116777316747366440322450322555"); add_sol_5_6(i, "110466310446377746375722355522"); add_sol_5_6(i, "110666310446377744375722355522"); add_sol_5_6(i, "110622310622377665374455377445"); add_sol_5_6(i, "110666310226377225374455377445"); add_sol_5_6(i, "110466310446377546375522377522"); add_sol_5_6(i, "110666310446377544375522377522"); add_sol_5_6(i, "110022314422377446375556377566"); add_sol_5_6(i, "113022413022443577643557666577"); add_sol_5_6(i, "113022413022443555643757666777"); add_sol_5_6(i, "113022413022443777643757666555"); add_sol_5_6(i, "113022413022443775643755666775"); add_sol_5_6(i, "113577413557443577643022666022"); add_sol_5_6(i, "113555413757443777643022666022"); add_sol_5_6(i, "113777413757443555643022666022"); add_sol_5_6(i, "113775413755443775643022666022"); add_sol_5_6(i, "113333412200442277645557666577"); add_sol_5_6(i, "113333417770447570645522666522"); add_sol_5_6(i, "114477510447550677566622333322"); add_sol_5_6(i, "114477516447556077566022333322"); add_sol_5_6(i, "110223510223557763544763447766"); add_sol_5_6(i, "112203512203557763544763447766"); add_sol_5_6(i, "112266512263557763544703447703"); add_sol_5_6(i, "113333516660557760544722447722"); add_sol_5_6(i, "113333517770557670544622446622"); add_sol_5_6(i, "110022614422644577665557333377"); add_sol_5_6(i, "110577610557644577664422333322"); add_sol_5_6(i, "110555610757644777664422333322"); add_sol_5_6(i, "110777610757644555664422333322"); add_sol_5_6(i, "110775610755644775664422333322"); add_sol_5_6(i, "110077615557644577664422333322"); add_sol_5_6(i, "114477615447655577660022333322"); add_sol_5_6(i, "114477615447655077665022333322"); add_sol_5_6(i, "110777610747666544225554223333"); add_sol_5_6(i, "113333615554666544220747220777"); add_sol_5_6(i, "115466155446075746077722333322"); add_sol_5_6(i, "115666155446075744077722333322"); add_sol_5_6(i, "114466177446075556077522333322"); add_sol_5_6(i, "117776147376044366054322555322"); add_sol_5_6(i, "114223144223047773057673555666"); add_sol_5_6(i, "114466144563005563227573227773"); add_sol_5_6(i, "115773155573006773226443226644"); add_sol_5_6(i, "115663155563007763227443227744"); add_sol_5_6(i, "115666155677005447224477223333"); add_sol_5_6(i, "115666155643005443227473227773"); add_sol_5_6(i, "113333166777006747226544225554"); add_sol_5_6(i, "115554166544006747226777223333"); add_sol_5_6(i, "110066144563445563227573227773"); add_sol_5_6(i, "113333144777445707225506225666"); add_sol_5_6(i, "113333144577445557220677220666"); add_sol_5_6(i, "113333144500445566227576227776"); add_sol_5_6(i, "113333144555447756227006227766"); add_sol_5_6(i, "117776147576445566400522333322"); add_sol_5_6(i, "117776147076445066455522333322"); add_sol_5_6(i, "110223140223447773457673555666"); add_sol_5_6(i, "112203142203447773457673555666"); add_sol_5_6(i, "117776147376440366450322555322"); add_sol_5_6(i, "113333122777522707554406544666"); add_sol_5_6(i, "117776147376544366554322500322"); add_sol_5_6(i, "114466144063577063557223577223"); add_sol_5_6(i, "114406144306577366557322577322"); add_sol_5_6(i, "114422144322577306557306577366"); add_sol_5_6(i, "114422144322577360557360577366"); add_sol_5_6(i, "114422144322577366557306577306"); add_sol_5_6(i, "114466144360577360557322577322"); add_sol_5_6(i, "114466144306577306557322577322"); add_sol_5_6(i, "114223144223547773557673500666"); add_sol_5_6(i, "110666150677555447224477223333"); add_sol_5_6(i, "110666150643555443227473227773"); add_sol_5_6(i, "113333154477555447220677220666"); add_sol_5_6(i, "117773157473555443220643220666"); add_sol_5_6(i, "114466144063555063757223777223"); add_sol_5_6(i, "114406144306555366757322777322"); add_sol_5_6(i, "114422144322555306757306777366"); add_sol_5_6(i, "114422144322555360757360777366"); add_sol_5_6(i, "114422144322555366757306777306"); add_sol_5_6(i, "114466144360555360757322777322"); add_sol_5_6(i, "114466144306555306757322777322"); add_sol_5_6(i, "110044156443556663757223777223"); add_sol_5_6(i, "112266152263554463757443777003"); add_sol_5_6(i, "113333150022554422757446777666"); add_sol_5_6(i, "113333152200552244757446777666"); add_sol_5_6(i, "113333152200552246757446777466"); add_sol_5_6(i, "116644156443556003757223777223"); add_sol_5_6(i, "116644156443556223757223777003"); add_sol_5_6(i, "113333100777622747622544665554"); add_sol_5_6(i, "115554100544622747622777663333"); add_sol_5_6(i, "113333122777622747600544665554"); add_sol_5_6(i, "115554122544622747600777663333"); add_sol_5_6(i, "110044122443622773655573665773"); add_sol_5_6(i, "113333122777622747655544665004"); add_sol_5_6(i, "115773155573622773622443660044"); add_sol_5_6(i, "115004155544622747622777663333"); add_sol_5_6(i, "113333100777666747226544225554"); add_sol_5_6(i, "115554100544666747226777223333"); add_sol_5_6(i, "115773155573666773226443220044"); add_sol_5_6(i, "115004155544666747226777223333"); add_sol_5_6(i, "114466144063777063757223555223"); add_sol_5_6(i, "114406144306777366757322555322"); add_sol_5_6(i, "114422144322777306757306555366"); add_sol_5_6(i, "114422144322777360757360555366"); add_sol_5_6(i, "114422144322777366757306555306"); add_sol_5_6(i, "114466144360777360757322555322"); add_sol_5_6(i, "114466144306777306757322555322"); add_sol_5_6(i, "113333100666775556744522774422"); add_sol_5_6(i, "110066133336775556744522774422"); add_sol_5_6(i, "114422144522775556700666773333"); add_sol_5_6(i, "114422144522775556733336770066"); add_sol_5_6(i, "114466144226775226755500773333"); add_sol_5_6(i, "114422144622775666755500773333"); add_sol_5_6(i, "114466144063775063755223775223"); add_sol_5_6(i, "114406144306775366755322775322"); add_sol_5_6(i, "114422144322775306755306775366"); add_sol_5_6(i, "114422144322775360755360775366"); add_sol_5_6(i, "114422144322775366755306775306"); add_sol_5_6(i, "114466144360775360755322775322"); add_sol_5_6(i, "114466144306775306755322775322"); add_sol_5_6(i, "113333155500775226744226774466"); add_sol_5_6(i, "113333155500775666744622774422"); add_sol_5_6(i, "115223155223775063744063774466"); add_sol_5_6(i, "115306155306775366744322774422"); add_sol_5_6(i, "115322155322775306744306774466"); add_sol_5_6(i, "115322155322775360744360774466"); add_sol_5_6(i, "115322155322775366744306774406"); add_sol_5_6(i, "115366155360775360744322774422"); add_sol_5_6(i, "115366155306775306744322774422"); add_sol_5_6(i, "223333224477011447051677555666"); add_sol_5_6(i, "227773227473011443051643555666"); add_sol_5_6(i, "223333225554011544016747666777"); add_sol_5_6(i, "221144221443065773065573665773"); add_sol_5_6(i, "221144221443065553067573667773"); add_sol_5_6(i, "221144221443067773067573665553"); add_sol_5_6(i, "221144221443067753067553667753"); add_sol_5_6(i, "221153221553067753067443667744"); add_sol_5_6(i, "225773225573065773061443661144"); add_sol_5_6(i, "225553227573067773061443661144"); add_sol_5_6(i, "227773227573065553061443661144"); add_sol_5_6(i, "227744227443067753061553661153"); add_sol_5_6(i, "227753227553067753061443661144"); add_sol_5_6(i, "223333225554001544611747666777"); add_sol_5_6(i, "221144221443005773655573666773"); add_sol_5_6(i, "220777220757144556114456333366"); add_sol_5_6(i, "223333225554100544116747666777"); add_sol_5_6(i, "223333224400144577116557666577"); add_sol_5_6(i, "223333224400144555116757666777"); add_sol_5_6(i, "223333224450144550116757666777"); add_sol_5_6(i, "223333224400144777116757666555"); add_sol_5_6(i, "223333224400144775116755666775"); add_sol_5_6(i, "223333225004155544116747666777"); add_sol_5_6(i, "223005223455113445613747666777"); add_sol_5_6(i, "223555223054113044613747666777"); add_sol_5_6(i, "223555223450113440613747666777"); add_sol_5_6(i, "223777223747113044613054666555"); add_sol_5_6(i, "223777223747113445613455666005"); add_sol_5_6(i, "223777223747113440613450666555"); add_sol_5_6(i, "223333225004115544615747666777"); add_sol_5_6(i, "223333225554110544610747666777"); add_sol_5_6(i, "223333227744117445617755666005"); add_sol_5_6(i, "223333227744117440617750666555"); add_sol_5_6(i, "224555224453117473617773666003"); add_sol_5_6(i, "220666220677115557144577443333"); add_sol_5_6(i, "225666225506115707144777443333"); add_sol_5_6(i, "227773227573115563144563440066"); add_sol_5_6(i, "227776227576115566144500443333"); add_sol_5_6(i, "227766227006117756144555443333"); add_sol_5_6(i, "220044226443116773156673555773"); add_sol_5_6(i, "223333224477110447150677555666"); add_sol_5_6(i, "223333226777116747156644555004"); add_sol_5_6(i, "226644226443116773150073555773"); add_sol_5_6(i, "227773227473110443150643555666"); add_sol_5_6(i, "227773227073114063154463555466"); add_sol_5_6(i, "227773227473114463154063555066"); add_sol_5_6(i, "227773227473114403154603555666"); add_sol_5_6(i, "227744227443117763150063555663"); add_sol_5_6(i, "227744227443117763156663555003"); add_sol_5_6(i, "221555221154333344006747666777"); add_sol_5_6(i, "221555221154333344666747600777"); add_sol_5_6(i, "221555221154333344600747666777"); add_sol_5_6(i, "223333221100441577644557666577"); add_sol_5_6(i, "223333221100441555644757666777"); add_sol_5_6(i, "223333221150441550644757666777"); add_sol_5_6(i, "223333221100441777644757666555"); add_sol_5_6(i, "223333221100441775644755666775"); add_sol_5_6(i, "223333224477500447551677511666"); add_sol_5_6(i, "227773227473500443551643511666"); add_sol_5_6(i, "223333221777511707554406544666"); add_sol_5_6(i, "223333224477511447551677500666"); add_sol_5_6(i, "227773227473511443551643500666"); add_sol_5_6(i, "223333224477544007551677511666"); add_sol_5_6(i, "220113220413577443557643577666"); add_sol_5_6(i, "220666220643577443557413577113"); add_sol_5_6(i, "221103221403577443557643577666"); add_sol_5_6(i, "221144221443577063557063577663"); add_sol_5_6(i, "221144221443577603557603577663"); add_sol_5_6(i, "221144221443577663557603577603"); add_sol_5_6(i, "221144221443577663557063577063"); add_sol_5_6(i, "221143221443577463557063577066"); add_sol_5_6(i, "221143221443577403557603577666"); add_sol_5_6(i, "223333220044577446557116577166"); add_sol_5_6(i, "223333220044577441557611577666"); add_sol_5_6(i, "223333220011577441557644577666"); add_sol_5_6(i, "223333220011577641557644577664"); add_sol_5_6(i, "223333221100577144557446577666"); add_sol_5_6(i, "223333221100577146557446577466"); add_sol_5_6(i, "223333224411577441557006577666"); add_sol_5_6(i, "223333224400577446557116577166"); add_sol_5_6(i, "223333224411577441557666577006"); add_sol_5_6(i, "223333224400577441557611577666"); add_sol_5_6(i, "223333224411577441557600577666"); add_sol_5_6(i, "223333226611577641557644577004"); add_sol_5_6(i, "224113224413577463557063577066"); add_sol_5_6(i, "224113224413577403557603577666"); add_sol_5_6(i, "221144221443555773650073666773"); add_sol_5_6(i, "223333227711555741657744666004"); add_sol_5_6(i, "220113220413555443757643777666"); add_sol_5_6(i, "220666220643555443757413777113"); add_sol_5_6(i, "221103221403555443757643777666"); add_sol_5_6(i, "221144221443555063757063777663"); add_sol_5_6(i, "221144221443555603757603777663"); add_sol_5_6(i, "221144221443555663757603777603"); add_sol_5_6(i, "221144221443555663757063777063"); add_sol_5_6(i, "221143221443555463757063777066"); add_sol_5_6(i, "221143221443555403757603777666"); add_sol_5_6(i, "223333220044555446757116777166"); add_sol_5_6(i, "223333220044555441757611777666"); add_sol_5_6(i, "223333220011555441757644777666"); add_sol_5_6(i, "223333220011555641757644777664"); add_sol_5_6(i, "223333221100555144757446777666"); add_sol_5_6(i, "223333221100555146757446777466"); add_sol_5_6(i, "223333224411555441757006777666"); add_sol_5_6(i, "223333224400555446757116777166"); add_sol_5_6(i, "223333224411555441757666777006"); add_sol_5_6(i, "223333224400555441757611777666"); add_sol_5_6(i, "223333224411555441757600777666"); add_sol_5_6(i, "223333226611555641757644777004"); add_sol_5_6(i, "224113224413555463757063777066"); add_sol_5_6(i, "224113224413555403757603777666"); add_sol_5_6(i, "221144221443605773605573665773"); add_sol_5_6(i, "221144221443605553607573667773"); add_sol_5_6(i, "221144221443607773607573665553"); add_sol_5_6(i, "221144221443607753607553667753"); add_sol_5_6(i, "221153221553607753607443667744"); add_sol_5_6(i, "225773225573605773601443661144"); add_sol_5_6(i, "225553227573607773601443661144"); add_sol_5_6(i, "227773227573605553601443661144"); add_sol_5_6(i, "227744227443607753601553661153"); add_sol_5_6(i, "227753227553607753601443661144"); add_sol_5_6(i, "223333225554600544611747661777"); add_sol_5_6(i, "221144221443600773655573665773"); add_sol_5_6(i, "223333220777610747611544665554"); add_sol_5_6(i, "225773225573615773611443660044"); add_sol_5_6(i, "225004225544615747611777663333"); add_sol_5_6(i, "225554220544610747611777663333"); add_sol_5_6(i, "225553227573617773611443660044"); add_sol_5_6(i, "227773227573615553611443660044"); add_sol_5_6(i, "227744227443617753611553660053"); add_sol_5_6(i, "227753227553617753611443660044"); add_sol_5_6(i, "227744227445617755611005663333"); add_sol_5_6(i, "227744227440617750611555663333"); add_sol_5_6(i, "227744227443617703611503665553"); add_sol_5_6(i, "223333221777611747600544665554"); add_sol_5_6(i, "225554221544611747600777663333"); add_sol_5_6(i, "220044221443611773655573665773"); add_sol_5_6(i, "223333221777611747655544665004"); add_sol_5_6(i, "220777220747611544615554663333"); add_sol_5_6(i, "223333225554611544610747660777"); add_sol_5_6(i, "223333221100641577644557664577"); add_sol_5_6(i, "223333221100641555644757664777"); add_sol_5_6(i, "223333221150641550644757664777"); add_sol_5_6(i, "223333221100641777644757664555"); add_sol_5_6(i, "223333221100641775644755664775"); add_sol_5_6(i, "223333224400644577611557661577"); add_sol_5_6(i, "223333224400644555611757661777"); add_sol_5_6(i, "223333224450644550611757661777"); add_sol_5_6(i, "223333224400644777611757661555"); add_sol_5_6(i, "223333224400644775611755661775"); add_sol_5_6(i, "223333225004655544611747661777"); add_sol_5_6(i, "225004225544675741677711663333"); add_sol_5_6(i, "225554220544670741677711663333"); add_sol_5_6(i, "221144221443665773605573605773"); add_sol_5_6(i, "221144221443665553607573607773"); add_sol_5_6(i, "221144221443667773607573605553"); add_sol_5_6(i, "221144221443667753607553607753"); add_sol_5_6(i, "221153221553667753607443607744"); add_sol_5_6(i, "225773225573665773601443601144"); add_sol_5_6(i, "225553227573667773601443601144"); add_sol_5_6(i, "227773227573665553601443601144"); add_sol_5_6(i, "227744227443667753601553601153"); add_sol_5_6(i, "227753227553667753601443601144"); add_sol_5_6(i, "223005223455663445613747611777"); add_sol_5_6(i, "223555223054663044613747611777"); add_sol_5_6(i, "223555223450663440613747611777"); add_sol_5_6(i, "223777223747663044613054611555"); add_sol_5_6(i, "223777223747663445613455611005"); add_sol_5_6(i, "223777223747663440613450611555"); add_sol_5_6(i, "223333225004665544615747611777"); add_sol_5_6(i, "223333225554660544610747611777"); add_sol_5_6(i, "223333227744667445617755611005"); add_sol_5_6(i, "223333227744667440617750611555"); add_sol_5_6(i, "224555224453667473617773611003"); add_sol_5_6(i, "223333225554661544611747600777"); add_sol_5_6(i, "220777220747661445611455633335"); add_sol_5_6(i, "223333220777660747611544615554"); add_sol_5_6(i, "225773225573665773611443610044"); add_sol_5_6(i, "225004225544665747611777613333"); add_sol_5_6(i, "225554220544660747611777613333"); add_sol_5_6(i, "225553227573667773611443610044"); add_sol_5_6(i, "227773227573665553611443610044"); add_sol_5_6(i, "227744227443667753611553610053"); add_sol_5_6(i, "227753227553667753611443610044"); add_sol_5_6(i, "227744227445667755611005613333"); add_sol_5_6(i, "227744227440667750611555613333"); add_sol_5_6(i, "227744227443667703611503615553"); add_sol_5_6(i, "221144221443665773655573600773"); add_sol_5_6(i, "221144221443666773650073555773"); add_sol_5_6(i, "223333227711666741657744555004"); add_sol_5_6(i, "220113220413777443757643555666"); add_sol_5_6(i, "220666220643777443757413555113"); add_sol_5_6(i, "221103221403777443757643555666"); add_sol_5_6(i, "221144221443777063757063555663"); add_sol_5_6(i, "221144221443777603757603555663"); add_sol_5_6(i, "221144221443777663757603555603"); add_sol_5_6(i, "221144221443777663757063555063"); add_sol_5_6(i, "221143221443777463757063555066"); add_sol_5_6(i, "221143221443777403757603555666"); add_sol_5_6(i, "223333220044777446757116555166"); add_sol_5_6(i, "223333220044777441757611555666"); add_sol_5_6(i, "223333220011777441757644555666"); add_sol_5_6(i, "223333220011777641757644555664"); add_sol_5_6(i, "223333221100777144757446555666"); add_sol_5_6(i, "223333221100777146757446555466"); add_sol_5_6(i, "223333224411777441757006555666"); add_sol_5_6(i, "223333224400777446757116555166"); add_sol_5_6(i, "223333224411777441757666555006"); add_sol_5_6(i, "223333224400777441757611555666"); add_sol_5_6(i, "223333224411777441757600555666"); add_sol_5_6(i, "223333226611777641757644555004"); add_sol_5_6(i, "224113224413777463757063555066"); add_sol_5_6(i, "224113224413777403757603555666"); add_sol_5_6(i, "221166221446774456700555773333"); add_sol_5_6(i, "221144221446775556700566773333"); add_sol_5_6(i, "221144221443775553700563776663"); add_sol_5_6(i, "221144221443776663700563775553"); add_sol_5_6(i, "223333221555771156700446774466"); add_sol_5_6(i, "223333221666771146700544775554"); add_sol_5_6(i, "224466221446771156700555773333"); add_sol_5_6(i, "225666225546775144700114773333"); add_sol_5_6(i, "225666225546775441700411773333"); add_sol_5_6(i, "225554221544771146700666773333"); add_sol_5_6(i, "226644226445776155700115773333"); add_sol_5_6(i, "226644226443776113700513775553"); add_sol_5_6(i, "226664226544775541700511773333"); add_sol_5_6(i, "225554221544771146733336770066"); add_sol_5_6(i, "220166220116774456744555773333"); add_sol_5_6(i, "220666220611774451744555773333"); add_sol_5_6(i, "221166221006774456744555773333"); add_sol_5_6(i, "220113220513775563744563774466"); add_sol_5_6(i, "221103221503775563744563774466"); add_sol_5_6(i, "221166221563775563744503774403"); add_sol_5_6(i, "223333220555770156744116774466"); add_sol_5_6(i, "223333221555771156744006774466"); add_sol_5_6(i, "225113225513775063744063774466"); add_sol_5_6(i, "220166220116775446755544773333"); add_sol_5_6(i, "220664220644775641755511773333"); add_sol_5_6(i, "220666220644775441755511773333"); add_sol_5_6(i, "220666220611775441755544773333"); add_sol_5_6(i, "221144221443775663755563770063"); add_sol_5_6(i, "221143221443775463755563770066"); add_sol_5_6(i, "221166221006775446755544773333"); add_sol_5_6(i, "221144221446775006755566773333"); add_sol_5_6(i, "221144221446775666755500773333"); add_sol_5_6(i, "221146221446775466755500773333"); add_sol_5_6(i, "221144221443775003755563776663"); add_sol_5_6(i, "224113224413775463755563770066"); add_sol_5_6(i, "224116224416775466755500773333"); add_sol_5_6(i, "224666224406775401755511773333"); add_sol_5_6(i, "224666224416775411755500773333"); add_sol_5_6(i, "226664226044775041755511773333"); add_sol_5_6(i, "220044221443771163755563775663"); add_sol_5_6(i, "220044226443776663755513775113"); add_sol_5_6(i, "221144221443770063755563775663"); add_sol_5_6(i, "221144221443776663755563775003"); add_sol_5_6(i, "223333220114770144755546775666"); add_sol_5_6(i, "223333220411770441755546775666"); add_sol_5_6(i, "223333221004771144755546775666"); add_sol_5_6(i, "223333221666771146755544775004"); add_sol_5_6(i, "226644226443776003755513775113"); add_sol_5_6(i, "226644226443776113755513775003"); add_sol_5_6(i, "220113220413775443755643775666"); add_sol_5_6(i, "220666220643775443755413775113"); add_sol_5_6(i, "221103221403775443755643775666"); add_sol_5_6(i, "221144221443775063755063775663"); add_sol_5_6(i, "221144221443775603755603775663"); add_sol_5_6(i, "221144221443775663755603775603"); add_sol_5_6(i, "221144221443775663755063775063"); add_sol_5_6(i, "221143221443775463755063775066"); add_sol_5_6(i, "221143221443775403755603775666"); add_sol_5_6(i, "223333220044775446755116775166"); add_sol_5_6(i, "223333220044775441755611775666"); add_sol_5_6(i, "223333220011775441755644775666"); add_sol_5_6(i, "223333220011775641755644775664"); add_sol_5_6(i, "223333221100775144755446775666"); add_sol_5_6(i, "223333221100775146755446775466"); add_sol_5_6(i, "223333224411775441755006775666"); add_sol_5_6(i, "223333224400775446755116775166"); add_sol_5_6(i, "223333224411775441755666775006"); add_sol_5_6(i, "223333224400775441755611775666"); add_sol_5_6(i, "223333224411775441755600775666"); add_sol_5_6(i, "223333226611775641755644775004"); add_sol_5_6(i, "224113224413775463755063775066"); add_sol_5_6(i, "224113224413775403755603775666"); add_sol_5_6(i, "225004225544775641766611773333"); add_sol_5_6(i, "225554220544770641766611773333"); add_sol_5_6(i, "220044226445776155766115773333"); add_sol_5_6(i, "220044226443776113766513775553"); add_sol_5_6(i, "223333226115776155766445770044"); add_sol_5_6(i, "223333226011776041766544775554"); add_sol_5_6(i, "223333226110776140766544775554"); add_sol_5_6(i, "225553226513776113766443770044"); add_sol_5_6(i, "225554226544776041766011773333"); add_sol_5_6(i, "225554226544776140766110773333"); add_sol_5_6(i, "300777322757322556344156441166"); add_sol_5_6(i, "322777322757300556344156441166"); add_sol_5_6(i, "311555312254302244306747666777"); add_sol_5_6(i, "322555322154301144306747666777"); add_sol_5_6(i, "322777322747301144306154666555"); add_sol_5_6(i, "322005322455311445316747666777"); add_sol_5_6(i, "322555322054311044316747666777"); add_sol_5_6(i, "322555322450311440316747666777"); add_sol_5_6(i, "322777322747311044316054666555"); add_sol_5_6(i, "322777322747311445316455666005"); add_sol_5_6(i, "322777322747311440316450666555"); add_sol_5_6(i, "322114322144377745376755666005"); add_sol_5_6(i, "322115322155377745376744666004"); add_sol_5_6(i, "322114322144377740376750666555"); add_sol_5_6(i, "311555312254362244360747660777"); add_sol_5_6(i, "322777322747360044361154661555"); add_sol_5_6(i, "322555322154361144360747660777"); add_sol_5_6(i, "322777322747361144360154660555"); add_sol_5_6(i, "433335442255142205116707666777"); add_sol_5_6(i, "433335442255642205611707661777"); if (i != 3496) { printf("%d\n", i); return 0; } long c = 0; Sols sols[6]; big_int one; assign_word(&one, 1L); // First step: for (int i = 0; i < NR_SOL_3_10; i++) { add(sols[1], sol_3_10[i] + 20, one); } for (int i = 0; i < 3496; i++) { fprintf(stderr, " %d", i); const char* vi = sol_5_6[i]; for (int j = 0; j < 3496; j++) { const char* vj = sol_5_6[j]; if ( vi[0] != vj[24] && vi[1] != vj[25] && vi[2] != vj[26] && vi[3] != vj[27] && vi[4] != vj[28] && vi[5] != vj[29]) { c++; char r[11]; r[0] = vi[29]; r[1] = vi[23]; r[2] = vi[17]; r[3] = vi[11]; r[4] = vi[5]; r[5] = vj[29]; r[6] = vj[23]; r[7] = vj[17]; r[8] = vj[11]; r[9] = vj[5]; r[10] = '\0'; add(sols[2], r, one); } } } fprintf(stdout, "\n\n"); big_int sum; long l = 0; for (SolsIterator it(sols[1]); it.more(); it.next()) { printf("%s ", it.val()); print_big_int(stdout, it.nr(), false, true); printf("\n"); l++; ass_add(&sum, it.nr(), false); } printf("\nStep %d, total = ", 1); print_big_int(stdout, &sum, false, true); printf(" (in %ld)\n\n", l); //fprintf(stdout, "\n\n%ld\n%ld\n%ld\n", c, count_add, 3496L * 3496L); //print_big_int(stdout, &sum, false, true); //printf("\n%ld\n", c2); // Remaining steps for (int step = 1; step < 5; step++) { long elem = 1; for (SolsIterator it(sols[step]); it.more(); it.next(), elem++) { fprintf(stderr, "\nstep %d, elem %d:", step, elem); const char* val = it.val(); for (int i = 0; i < NR_SOL_3_10; i++) { const char* s = sol_3_10[i]; if ( val[0] != s[0] && val[1] != s[1] && val[2] != s[2] && val[3] != s[3] && val[4] != s[4] && val[5] != s[5] && val[6] != s[6] && val[7] != s[7] && val[8] != s[8] && val[9] != s[9]) { add(sols[step+1], s + 20, *it.nr()); } } fprintf(stderr, "-"); if (step < 4) { for (int i = 0; i < 3496; i++) { //fprintf(stderr, " %d", i); const char* vi = sol_5_6[i]; if ( val[0] != vi[24] && val[1] != vi[18] && val[2] != vi[12] && val[3] != vi[6] && val[4] != vi[0]) { for (int j = 0; j < 3496; j++) { const char* vj = sol_5_6[j]; if ( vi[0] != vj[24] && vi[1] != vj[25] && vi[2] != vj[26] && vi[3] != vj[27] && vi[4] != vj[28] && vi[5] != vj[29] && val[5] != vj[24] && val[6] != vj[18] && val[7] != vj[12] && val[8] != vj[6] && val[9] != vj[0]) { c++; char r[11]; r[0] = vi[29]; r[1] = vi[23]; r[2] = vi[17]; r[3] = vi[11]; r[4] = vi[5]; r[5] = vj[29]; r[6] = vj[23]; r[7] = vj[17]; r[8] = vj[11]; r[9] = vj[5]; r[10] = '\0'; add(sols[step+2], r, *it.nr()); } } } } } fprintf(stderr, "\n"); } printf("---\n"); big_int sum; long l = 0; for (SolsIterator it(sols[step+1]); it.more(); it.next()) { printf("%s ", it.val()); print_big_int(stdout, it.nr(), false, true); printf("\n"); l++; ass_add(&sum, it.nr(), false); } printf("\nStep %d, total = ", step+1); print_big_int(stdout, &sum, false, true); printf(" (in %ld)\n\n", l); } return 0; }