00001: #include <stdio.h>
00002: #include <unistd.h>
00003: #include <time.h>
00004: 
00005: #define NUM_PCS 12
00006: #define START 4
00007: #define NUM_BITS 60
00008: #define NUM_HI_BITS 32
00009: #define NUM_LO_BITS 32
00010: 
00011: 
00012: int percent = 0;
00013: int partsUsed = 0;
00014: int numSolutions = 0;
00015: clock_t startTime;
00016: double correction[] = { 1.26, 1.05, 1, 0.94, 0.97, 1.005, 0.985, 0.94, 0.95, 1 };
00017: 
00018: 
00019: 
00020: extern void solve();
00021: 
00022: extern void doSolve(int start, long long startMask, long long puzzle, int partsUsed);
00023: extern void altDoSolve(int start, long long startMask, long long puzzle, int partsUsed);
00024: 
00025: extern void doSolve32(int start, int startMask, int puzzle, int partsUsed);
00026: extern void altDoSolve32(int start, int startMask, int puzzle, int partsUsed);
00027: 
00028: 
00029: int main(int argc, char**argv)
00030: {
00031:   clock_t startTime = clock();
00032: 
00033:   solve();
00034: 
00035:   printf("\ndone. %ld seconds, %ld solutions.\n", 
00036:          (clock()-startTime)/1000000, numSolutions);
00037: }
00038: 
00039: 
00040: 
00041: 
00042: 
00043: void solve()
00044: {
00045:   doSolve(4, 1<<4, 0x80490080ll, 0x1l);
00046:   doSolve(4, 1<<4, 0xba0ll, 0x1l);
00047:   doSolve(4, 1<<4, 0x20070020ll, 0x1l);
00048:   doSolve(4, 1<<4, 0x100920100ll, 0x1l);
00049:   doSolve(4, 1<<4, 0x201240200ll, 0x1l);
00050:   doSolve(4, 1<<4, 0x100380100ll, 0x1l);
00051:   doSolve(4, 1<<4, 0x80490080000ll, 0x1l);
00052:   doSolve(4, 1<<4, 0xba0000ll, 0x1l);
00053:   altDoSolve(4, 1<<4, 0x20070020000ll, 0x1l);
00054:   altDoSolve(4, 1<<4, 0x100920100000ll, 0x1l);
00055:   altDoSolve(4, 1<<4, 0x100380100000ll, 0x1l);
00056:   altDoSolve(4, 1<<4, 0xba0000000ll, 0x1l);
00057: 
00058: }
00059: 
00060: 
00061: void doSolve(int start, long long startMask, long long puzzle, int partsUsed)
00062: {
00063:   for (;(puzzle & startMask) && start < NUM_LO_BITS; start++, startMask <<= 1);
00064: 
00065:   if(start == NUM_LO_BITS) {
00066:     doSolve32(0, 1, puzzle>>NUM_LO_BITS, partsUsed);
00067:     return;
00068:   }
00069: 
00070:   switch(start) {
00071:    case 4:
00072:       if (partsUsed & 0x2l) goto piece2at4;
00073:       if(!(puzzle & 0x480090010ll))
00074:         doSolve(5, 0x20ll, puzzle | 0x480090010ll,
00075:                    partsUsed | 0x2l);
00076:       if(!(puzzle & 0x400480090ll))
00077:         doSolve(5, 0x20ll, puzzle | 0x400480090ll,
00078:                    partsUsed | 0x2l);
00079:       if(!(puzzle & 0x1330ll))
00080:         doSolve(5, 0x20ll, puzzle | 0x1330ll,
00081:                    partsUsed | 0x2l);
00082:       if(!(puzzle & 0x1990ll))
00083:         doSolve(5, 0x20ll, puzzle | 0x1990ll,
00084:                    partsUsed | 0x2l);
00085:       if(!(puzzle & 0x40060030ll))
00086:         doSolve(5, 0x20ll, puzzle | 0x40060030ll,
00087:                    partsUsed | 0x2l);
00088:       if(!(puzzle & 0x60030010ll))
00089:         doSolve(5, 0x20ll, puzzle | 0x60030010ll,
00090:                    partsUsed | 0x2l);
00091:     piece2at4:
00092:       if (partsUsed & 0x4l) goto piece3at4;
00093:       if(!(puzzle & 0x10490010ll))
00094:         doSolve(5, 0x20ll, puzzle | 0x10490010ll,
00095:                    partsUsed | 0x4l);
00096:       if(!(puzzle & 0x10070010ll))
00097:         doSolve(5, 0x20ll, puzzle | 0x10070010ll,
00098:                    partsUsed | 0x4l);
00099:       if(!(puzzle & 0x80080490ll))
00100:         doSolve(5, 0x20ll, puzzle | 0x80080490ll,
00101:                    partsUsed | 0x4l);
00102:       if(!(puzzle & 0x790ll))
00103:         doSolve(5, 0x20ll, puzzle | 0x790ll,
00104:                    partsUsed | 0x4l);
00105:       if(!(puzzle & 0x970ll))
00106:         doSolve(5, 0x20ll, puzzle | 0x970ll,
00107:                    partsUsed | 0x4l);
00108:       if(!(puzzle & 0x20020070ll))
00109:         doSolve(5, 0x20ll, puzzle | 0x20020070ll,
00110:                    partsUsed | 0x4l);
00111:     piece3at4:
00112:       if (partsUsed & 0x8l) goto piece4at4;
00113:       if(!(puzzle & 0x400490010ll))
00114:         doSolve(5, 0x20ll, puzzle | 0x400490010ll,
00115:                    partsUsed | 0x8l);
00116:       if(!(puzzle & 0x480080090ll))
00117:         doSolve(5, 0x20ll, puzzle | 0x480080090ll,
00118:                    partsUsed | 0x8l);
00119:       if(!(puzzle & 0x1930ll))
00120:         doSolve(5, 0x20ll, puzzle | 0x1930ll,
00121:                    partsUsed | 0x8l);
00122:       if(!(puzzle & 0x1390ll))
00123:         doSolve(5, 0x20ll, puzzle | 0x1390ll,
00124:                    partsUsed | 0x8l);
00125:       if(!(puzzle & 0x40070010ll))
00126:         doSolve(5, 0x20ll, puzzle | 0x40070010ll,
00127:                    partsUsed | 0x8l);
00128:       if(!(puzzle & 0x60020030ll))
00129:         doSolve(5, 0x20ll, puzzle | 0x60020030ll,
00130:                    partsUsed | 0x8l);
00131:     piece4at4:
00132:       if (partsUsed & 0x10l) goto piece5at4;
00133:       if (!(puzzle & 0x2490ll)) {
00134:          if(!(puzzle & 0x6590ll))
00135:            doSolve(5, 0x20ll, puzzle | 0x6590ll,
00136:                    partsUsed | 0x10l);
00137:          if(!(puzzle & 0x2082490ll))
00138:            doSolve(5, 0x20ll, puzzle | 0x2082490ll,
00139:                    partsUsed | 0x10l);
00140:          if(!(puzzle & 0x2cb0ll))
00141:            doSolve(5, 0x20ll, puzzle | 0x2cb0ll,
00142:                    partsUsed | 0x10l);
00143:       }
00144:       if(!(puzzle & 0x90010090010ll))
00145:         doSolve(5, 0x20ll, puzzle | 0x90010090010ll,
00146:                    partsUsed | 0x10l);
00147:       if(!(puzzle & 0x80090080090ll))
00148:         doSolve(5, 0x20ll, puzzle | 0x80090080090ll,
00149:                    partsUsed | 0x10l);
00150:       if(!(puzzle & 0x412490ll))
00151:         doSolve(5, 0x20ll, puzzle | 0x412490ll,
00152:                    partsUsed | 0x10l);
00153:       if(!(puzzle & 0x10090010090ll))
00154:         doSolve(5, 0x20ll, puzzle | 0x10090010090ll,
00155:                    partsUsed | 0x10l);
00156:       if(!(puzzle & 0x4d30ll))
00157:         doSolve(5, 0x20ll, puzzle | 0x4d30ll,
00158:                    partsUsed | 0x10l);
00159:       if(!(puzzle & 0x2490410ll))
00160:         doSolve(5, 0x20ll, puzzle | 0x2490410ll,
00161:                    partsUsed | 0x10l);
00162:       if(!(puzzle & 0x30010030010ll))
00163:         doSolve(5, 0x20ll, puzzle | 0x30010030010ll,
00164:                    partsUsed | 0x10l);
00165:       if(!(puzzle & 0x10030010030ll))
00166:         doSolve(5, 0x20ll, puzzle | 0x10030010030ll,
00167:                    partsUsed | 0x10l);
00168:       if(!(puzzle & 0x20030020030ll))
00169:         doSolve(5, 0x20ll, puzzle | 0x20030020030ll,
00170:                    partsUsed | 0x10l);
00171:     piece5at4:
00172:       if (partsUsed & 0x20l) goto piece6at4;
00173:       if (!(puzzle & 0x10010010010ll)) {
00174:          if(!(puzzle & 0x10010010090ll))
00175:            doSolve(5, 0x20ll, puzzle | 0x10010010090ll,
00176:                    partsUsed | 0x20l);
00177:          if(!(puzzle & 0x90010010010ll))
00178:            doSolve(5, 0x20ll, puzzle | 0x90010010010ll,
00179:                    partsUsed | 0x20l);
00180:          if(!(puzzle & 0x10010010030ll))
00181:            doSolve(5, 0x20ll, puzzle | 0x10010010030ll,
00182:                    partsUsed | 0x20l);
00183:          if(!(puzzle & 0x30010010010ll))
00184:            doSolve(5, 0x20ll, puzzle | 0x30010010010ll,
00185:                    partsUsed | 0x20l);
00186:       }
00187:       if (!(puzzle & 0x2490ll)) {
00188:          if(!(puzzle & 0x2002490ll))
00189:            doSolve(5, 0x20ll, puzzle | 0x2002490ll,
00190:                    partsUsed | 0x20l);
00191:          if(!(puzzle & 0x24b0ll))
00192:            doSolve(5, 0x20ll, puzzle | 0x24b0ll,
00193:                    partsUsed | 0x20l);
00194:          if(!(puzzle & 0x12490ll))
00195:            doSolve(5, 0x20ll, puzzle | 0x12490ll,
00196:                    partsUsed | 0x20l);
00197:          if(!(puzzle & 0x6490ll))
00198:            doSolve(5, 0x20ll, puzzle | 0x6490ll,
00199:                    partsUsed | 0x20l);
00200:       }
00201:       if(!(puzzle & 0x2490010ll))
00202:         doSolve(5, 0x20ll, puzzle | 0x2490010ll,
00203:                    partsUsed | 0x20l);
00204:       if(!(puzzle & 0x4930ll))
00205:         doSolve(5, 0x20ll, puzzle | 0x4930ll,
00206:                    partsUsed | 0x20l);
00207:       if(!(puzzle & 0x80080080090ll))
00208:         doSolve(5, 0x20ll, puzzle | 0x80080080090ll,
00209:                    partsUsed | 0x20l);
00210:       if(!(puzzle & 0x20020020030ll))
00211:         doSolve(5, 0x20ll, puzzle | 0x20020020030ll,
00212:                    partsUsed | 0x20l);
00213:     piece6at4:
00214:       if (partsUsed & 0x40l) goto piece7at4;
00215:       if (!(puzzle & 0x10010010010ll)) {
00216:          if(!(puzzle & 0x10010090010ll))
00217:            doSolve(5, 0x20ll, puzzle | 0x10010090010ll,
00218:                    partsUsed | 0x40l);
00219:          if(!(puzzle & 0x10090010010ll))
00220:            doSolve(5, 0x20ll, puzzle | 0x10090010010ll,
00221:                    partsUsed | 0x40l);
00222:          if(!(puzzle & 0x10010030010ll))
00223:            doSolve(5, 0x20ll, puzzle | 0x10010030010ll,
00224:                    partsUsed | 0x40l);
00225:          if(!(puzzle & 0x10030010010ll))
00226:            doSolve(5, 0x20ll, puzzle | 0x10030010010ll,
00227:                    partsUsed | 0x40l);
00228:       }
00229:       if (!(puzzle & 0x2490ll)) {
00230:          if(!(puzzle & 0x402490ll))
00231:            doSolve(5, 0x20ll, puzzle | 0x402490ll,
00232:                    partsUsed | 0x40l);
00233:          if(!(puzzle & 0x2590ll))
00234:            doSolve(5, 0x20ll, puzzle | 0x2590ll,
00235:                    partsUsed | 0x40l);
00236:          if(!(puzzle & 0x82490ll))
00237:            doSolve(5, 0x20ll, puzzle | 0x82490ll,
00238:                    partsUsed | 0x40l);
00239:          if(!(puzzle & 0x2c90ll))
00240:            doSolve(5, 0x20ll, puzzle | 0x2c90ll,
00241:                    partsUsed | 0x40l);
00242:       }
00243:     piece7at4:
00244:       if (partsUsed & 0x80l) goto piece8at4;
00245:       if(!(puzzle & 0x90010090ll))
00246:         doSolve(5, 0x20ll, puzzle | 0x90010090ll,
00247:                    partsUsed | 0x80l);
00248:       if(!(puzzle & 0x90080090ll))
00249:         doSolve(5, 0x20ll, puzzle | 0x90080090ll,
00250:                    partsUsed | 0x80l);
00251:       if(!(puzzle & 0x490410ll))
00252:         doSolve(5, 0x20ll, puzzle | 0x490410ll,
00253:                    partsUsed | 0x80l);
00254:       if(!(puzzle & 0x410490ll))
00255:         doSolve(5, 0x20ll, puzzle | 0x410490ll,
00256:                    partsUsed | 0x80l);
00257:       if(!(puzzle & 0x2f0ll))
00258:         doSolve(5, 0x20ll, puzzle | 0x2f0ll,
00259:                    partsUsed | 0x80l);
00260:       if(!(puzzle & 0xcb0ll))
00261:         doSolve(5, 0x20ll, puzzle | 0xcb0ll,
00262:                    partsUsed | 0x80l);
00263:       if(!(puzzle & 0xd30ll))
00264:         doSolve(5, 0x20ll, puzzle | 0xd30ll,
00265:                    partsUsed | 0x80l);
00266:       if(!(puzzle & 0x3d0ll))
00267:         doSolve(5, 0x20ll, puzzle | 0x3d0ll,
00268:                    partsUsed | 0x80l);
00269:       if(!(puzzle & 0x30020030ll))
00270:         doSolve(5, 0x20ll, puzzle | 0x30020030ll,
00271:                    partsUsed | 0x80l);
00272:       if(!(puzzle & 0x30010030ll))
00273:         doSolve(5, 0x20ll, puzzle | 0x30010030ll,
00274:                    partsUsed | 0x80l);
00275:       if(!(puzzle & 0x70050ll))
00276:         doSolve(5, 0x20ll, puzzle | 0x70050ll,
00277:                    partsUsed | 0x80l);
00278:       if(!(puzzle & 0x50070ll))
00279:         doSolve(5, 0x20ll, puzzle | 0x50070ll,
00280:                    partsUsed | 0x80l);
00281:     piece8at4:
00282:       if (partsUsed & 0x100l) goto piece9at4;
00283:       if(!(puzzle & 0x100130ll))
00284:         doSolve(5, 0x20ll, puzzle | 0x100130ll,
00285:                    partsUsed | 0x100l);
00286:       if(!(puzzle & 0x130010ll))
00287:         doSolve(5, 0x20ll, puzzle | 0x130010ll,
00288:                    partsUsed | 0x100l);
00289:       if(!(puzzle & 0x200b0ll))
00290:         doSolve(5, 0x20ll, puzzle | 0x200b0ll,
00291:                    partsUsed | 0x100l);
00292:       if(!(puzzle & 0x90030ll))
00293:         doSolve(5, 0x20ll, puzzle | 0x90030ll,
00294:                    partsUsed | 0x100l);
00295:       if(!(puzzle & 0x180090ll))
00296:         doSolve(5, 0x20ll, puzzle | 0x180090ll,
00297:                    partsUsed | 0x100l);
00298:       if(!(puzzle & 0x10190ll))
00299:         doSolve(5, 0x20ll, puzzle | 0x10190ll,
00300:                    partsUsed | 0x100l);
00301:     piece9at4:
00302:       if (partsUsed & 0x200l) goto piece10at4;
00303:       if(!(puzzle & 0x80490010ll))
00304:         doSolve(5, 0x20ll, puzzle | 0x80490010ll,
00305:                    partsUsed | 0x200l);
00306:       if(!(puzzle & 0x80480090ll))
00307:         doSolve(5, 0x20ll, puzzle | 0x80480090ll,
00308:                    partsUsed | 0x200l);
00309:       if(!(puzzle & 0xb30ll))
00310:         doSolve(5, 0x20ll, puzzle | 0xb30ll,
00311:                    partsUsed | 0x200l);
00312:       if(!(puzzle & 0xb90ll))
00313:         doSolve(5, 0x20ll, puzzle | 0xb90ll,
00314:                    partsUsed | 0x200l);
00315:       if(!(puzzle & 0x20060030ll))
00316:         doSolve(5, 0x20ll, puzzle | 0x20060030ll,
00317:                    partsUsed | 0x200l);
00318:       if(!(puzzle & 0x20070010ll))
00319:         doSolve(5, 0x20ll, puzzle | 0x20070010ll,
00320:                    partsUsed | 0x200l);
00321:     piece10at4:
00322:       if (partsUsed & 0x400l) goto piece11at4;
00323:       if (!(puzzle & 0x80090ll)) {
00324:          if(!(puzzle & 0x10090090ll))
00325:            doSolve(5, 0x20ll, puzzle | 0x10090090ll,
00326:                    partsUsed | 0x400l);
00327:          if(!(puzzle & 0x490090ll))
00328:            doSolve(5, 0x20ll, puzzle | 0x490090ll,
00329:                    partsUsed | 0x400l);
00330:          if(!(puzzle & 0x480490ll))
00331:            doSolve(5, 0x20ll, puzzle | 0x480490ll,
00332:                    partsUsed | 0x400l);
00333:          if(!(puzzle & 0x90490ll))
00334:            doSolve(5, 0x20ll, puzzle | 0x90490ll,
00335:                    partsUsed | 0x400l);
00336:          if(!(puzzle & 0x80090090ll))
00337:            doSolve(5, 0x20ll, puzzle | 0x80090090ll,
00338:                    partsUsed | 0x400l);
00339:       }
00340:       if (!(puzzle & 0x130ll)) {
00341:          if(!(puzzle & 0x370ll))
00342:            doSolve(5, 0x20ll, puzzle | 0x370ll,
00343:                    partsUsed | 0x400l);
00344:          if(!(puzzle & 0x1f0ll))
00345:            doSolve(5, 0x20ll, puzzle | 0x1f0ll,
00346:                    partsUsed | 0x400l);
00347:          if(!(puzzle & 0x5b0ll))
00348:            doSolve(5, 0x20ll, puzzle | 0x5b0ll,
00349:                    partsUsed | 0x400l);
00350:          if(!(puzzle & 0x9b0ll))
00351:            doSolve(5, 0x20ll, puzzle | 0x9b0ll,
00352:                    partsUsed | 0x400l);
00353:          if(!(puzzle & 0x3b0ll))
00354:            doSolve(5, 0x20ll, puzzle | 0x3b0ll,
00355:                    partsUsed | 0x400l);
00356:       }
00357:       if (!(puzzle & 0x10010010ll)) {
00358:          if(!(puzzle & 0x90090010ll))
00359:            doSolve(5, 0x20ll, puzzle | 0x90090010ll,
00360:                    partsUsed | 0x400l);
00361:          if(!(puzzle & 0x10030030ll))
00362:            doSolve(5, 0x20ll, puzzle | 0x10030030ll,
00363:                    partsUsed | 0x400l);
00364:          if(!(puzzle & 0x30030010ll))
00365:            doSolve(5, 0x20ll, puzzle | 0x30030010ll,
00366:                    partsUsed | 0x400l);
00367:       }
00368:       if (!(puzzle & 0x20030ll)) {
00369:          if(!(puzzle & 0x20030030ll))
00370:            doSolve(5, 0x20ll, puzzle | 0x20030030ll,
00371:                    partsUsed | 0x400l);
00372:          if(!(puzzle & 0x70030ll))
00373:            doSolve(5, 0x20ll, puzzle | 0x70030ll,
00374:                    partsUsed | 0x400l);
00375:          if(!(puzzle & 0x30070ll))
00376:            doSolve(5, 0x20ll, puzzle | 0x30070ll,
00377:                    partsUsed | 0x400l);
00378:          if(!(puzzle & 0x60070ll))
00379:            doSolve(5, 0x20ll, puzzle | 0x60070ll,
00380:                    partsUsed | 0x400l);
00381:       }
00382:       if(!(puzzle & 0xd90ll))
00383:         doSolve(5, 0x20ll, puzzle | 0xd90ll,
00384:                    partsUsed | 0x400l);
00385:     piece11at4:
00386:       if (partsUsed & 0x800l) goto piece12at4;
00387:       if (!(puzzle & 0x10030ll)) {
00388:          if(!(puzzle & 0x101b0ll))
00389:            doSolve(5, 0x20ll, puzzle | 0x101b0ll,
00390:                    partsUsed | 0x800l);
00391:          if(!(puzzle & 0xb0030ll))
00392:            doSolve(5, 0x20ll, puzzle | 0xb0030ll,
00393:                    partsUsed | 0x800l);
00394:          if(!(puzzle & 0x300b0ll))
00395:            doSolve(5, 0x20ll, puzzle | 0x300b0ll,
00396:                    partsUsed | 0x800l);
00397:          if(!(puzzle & 0x30130ll))
00398:            doSolve(5, 0x20ll, puzzle | 0x30130ll,
00399:                    partsUsed | 0x800l);
00400:          if(!(puzzle & 0x130030ll))
00401:            doSolve(5, 0x20ll, puzzle | 0x130030ll,
00402:                    partsUsed | 0x800l);
00403:          if(!(puzzle & 0x900b0ll))
00404:            doSolve(5, 0x20ll, puzzle | 0x900b0ll,
00405:                    partsUsed | 0x800l);
00406:       }
00407:       if (!(puzzle & 0x100110ll)) {
00408:          if(!(puzzle & 0x180190ll))
00409:            doSolve(5, 0x20ll, puzzle | 0x180190ll,
00410:                    partsUsed | 0x800l);
00411:          if(!(puzzle & 0x120130ll))
00412:            doSolve(5, 0x20ll, puzzle | 0x120130ll,
00413:                    partsUsed | 0x800l);
00414:          if(!(puzzle & 0x1001b0ll))
00415:            doSolve(5, 0x20ll, puzzle | 0x1001b0ll,
00416:                    partsUsed | 0x800l);
00417:       }
00418:       if (!(puzzle & 0x80090ll)) {
00419:          if(!(puzzle & 0xb0090ll))
00420:            doSolve(5, 0x20ll, puzzle | 0xb0090ll,
00421:                    partsUsed | 0x800l);
00422:          if(!(puzzle & 0x90190ll))
00423:            doSolve(5, 0x20ll, puzzle | 0x90190ll,
00424:                    partsUsed | 0x800l);
00425:          if(!(puzzle & 0x801b0ll))
00426:            doSolve(5, 0x20ll, puzzle | 0x801b0ll,
00427:                    partsUsed | 0x800l);
00428:          if(!(puzzle & 0x190090ll))
00429:            doSolve(5, 0x20ll, puzzle | 0x190090ll,
00430:                    partsUsed | 0x800l);
00431:       }
00432:       if(!(puzzle & 0x201b0ll))
00433:         doSolve(5, 0x20ll, puzzle | 0x201b0ll,
00434:                    partsUsed | 0x800l);
00435:       if(!(puzzle & 0x1b0010ll))
00436:         doSolve(5, 0x20ll, puzzle | 0x1b0010ll,
00437:                    partsUsed | 0x800l);
00438:     piece12at4:
00439:     break;
00440:    case 5:
00441:       if (partsUsed & 0x2l) goto piece2at5;
00442:       if(!(puzzle & 0x5e0ll))
00443:         doSolve(6, 0x40ll, puzzle | 0x5e0ll,
00444:                    partsUsed | 0x2l);
00445:       if(!(puzzle & 0x10030060ll))
00446:         doSolve(6, 0x40ll, puzzle | 0x10030060ll,
00447:                    partsUsed | 0x2l);
00448:       if(!(puzzle & 0x900120020ll))
00449:         doSolve(6, 0x40ll, puzzle | 0x900120020ll,
00450:                    partsUsed | 0x2l);
00451:       if(!(puzzle & 0x800900120ll))
00452:         doSolve(6, 0x40ll, puzzle | 0x800900120ll,
00453:                    partsUsed | 0x2l);
00454:     piece2at5:
00455:       if (partsUsed & 0x4l) goto piece3at5;
00456:       if(!(puzzle & 0x1d20ll))
00457:         doSolve(6, 0x40ll, puzzle | 0x1d20ll,
00458:                    partsUsed | 0x4l);
00459:       if(!(puzzle & 0x100100920ll))
00460:         doSolve(6, 0x40ll, puzzle | 0x100100920ll,
00461:                    partsUsed | 0x4l);
00462:       if(!(puzzle & 0x70020020ll))
00463:         doSolve(6, 0x40ll, puzzle | 0x70020020ll,
00464:                    partsUsed | 0x4l);
00465:       if(!(puzzle & 0x20920020ll))
00466:         doSolve(6, 0x40ll, puzzle | 0x20920020ll,
00467:                    partsUsed | 0x4l);
00468:     piece3at5:
00469:       if (partsUsed & 0x8l) goto piece4at5;
00470:       if(!(puzzle & 0xd60ll))
00471:         doSolve(6, 0x40ll, puzzle | 0xd60ll,
00472:                    partsUsed | 0x8l);
00473:       if(!(puzzle & 0x30020060ll))
00474:         doSolve(6, 0x40ll, puzzle | 0x30020060ll,
00475:                    partsUsed | 0x8l);
00476:       if(!(puzzle & 0x800920020ll))
00477:         doSolve(6, 0x40ll, puzzle | 0x800920020ll,
00478:                    partsUsed | 0x8l);
00479:       if(!(puzzle & 0x900100120ll))
00480:         doSolve(6, 0x40ll, puzzle | 0x900100120ll,
00481:                    partsUsed | 0x8l);
00482:     piece4at5:
00483:       if (partsUsed & 0x10l) goto piece5at5;
00484:       if (!(puzzle & 0x4920ll)) {
00485:          if(!(puzzle & 0x69a0ll))
00486:            doSolve(6, 0x40ll, puzzle | 0x69a0ll,
00487:                    partsUsed | 0x10l);
00488:          if(!(puzzle & 0x824920ll))
00489:            doSolve(6, 0x40ll, puzzle | 0x824920ll,
00490:                    partsUsed | 0x10l);
00491:          if(!(puzzle & 0xcb20ll))
00492:            doSolve(6, 0x40ll, puzzle | 0xcb20ll,
00493:                    partsUsed | 0x10l);
00494:          if(!(puzzle & 0x4104920ll))
00495:            doSolve(6, 0x40ll, puzzle | 0x4104920ll,
00496:                    partsUsed | 0x10l);
00497:          if(!(puzzle & 0x5960ll))
00498:            doSolve(6, 0x40ll, puzzle | 0x5960ll,
00499:                    partsUsed | 0x10l);
00500:       }
00501:       if (!(puzzle & 0x20020020020ll)) {
00502:          if(!(puzzle & 0x30020030020ll))
00503:            doSolve(6, 0x40ll, puzzle | 0x30020030020ll,
00504:                    partsUsed | 0x10l);
00505:          if(!(puzzle & 0x120020120020ll))
00506:            doSolve(6, 0x40ll, puzzle | 0x120020120020ll,
00507:                    partsUsed | 0x10l);
00508:          if(!(puzzle & 0x20120020120ll))
00509:            doSolve(6, 0x40ll, puzzle | 0x20120020120ll,
00510:                    partsUsed | 0x10l);
00511:          if(!(puzzle & 0x60020060020ll))
00512:            doSolve(6, 0x40ll, puzzle | 0x60020060020ll,
00513:                    partsUsed | 0x10l);
00514:          if(!(puzzle & 0x20060020060ll))
00515:            doSolve(6, 0x40ll, puzzle | 0x20060020060ll,
00516:                    partsUsed | 0x10l);
00517:       }
00518:       if(!(puzzle & 0x100120100120ll))
00519:         doSolve(6, 0x40ll, puzzle | 0x100120100120ll,
00520:                    partsUsed | 0x10l);
00521:       if(!(puzzle & 0x9a60ll))
00522:         doSolve(6, 0x40ll, puzzle | 0x9a60ll,
00523:                    partsUsed | 0x10l);
00524:       if(!(puzzle & 0x4920820ll))
00525:         doSolve(6, 0x40ll, puzzle | 0x4920820ll,
00526:                    partsUsed | 0x10l);
00527:       if(!(puzzle & 0x40060040060ll))
00528:         doSolve(6, 0x40ll, puzzle | 0x40060040060ll,
00529:                    partsUsed | 0x10l);
00530:     piece5at5:
00531:       if (partsUsed & 0x20l) goto piece6at5;
00532:       if (!(puzzle & 0x4920ll)) {
00533:          if(!(puzzle & 0x6920ll))
00534:            doSolve(6, 0x40ll, puzzle | 0x6920ll,
00535:                    partsUsed | 0x20l);
00536:          if(!(puzzle & 0x4004920ll))
00537:            doSolve(6, 0x40ll, puzzle | 0x4004920ll,
00538:                    partsUsed | 0x20l);
00539:          if(!(puzzle & 0x4960ll))
00540:            doSolve(6, 0x40ll, puzzle | 0x4960ll,
00541:                    partsUsed | 0x20l);
00542:          if(!(puzzle & 0x24920ll))
00543:            doSolve(6, 0x40ll, puzzle | 0x24920ll,
00544:                    partsUsed | 0x20l);
00545:          if(!(puzzle & 0xc920ll))
00546:            doSolve(6, 0x40ll, puzzle | 0xc920ll,
00547:                    partsUsed | 0x20l);
00548:       }
00549:       if (!(puzzle & 0x20020020020ll)) {
00550:          if(!(puzzle & 0x30020020020ll))
00551:            doSolve(6, 0x40ll, puzzle | 0x30020020020ll,
00552:                    partsUsed | 0x20l);
00553:          if(!(puzzle & 0x20020020120ll))
00554:            doSolve(6, 0x40ll, puzzle | 0x20020020120ll,
00555:                    partsUsed | 0x20l);
00556:          if(!(puzzle & 0x120020020020ll))
00557:            doSolve(6, 0x40ll, puzzle | 0x120020020020ll,
00558:                    partsUsed | 0x20l);
00559:          if(!(puzzle & 0x20020020060ll))
00560:            doSolve(6, 0x40ll, puzzle | 0x20020020060ll,
00561:                    partsUsed | 0x20l);
00562:          if(!(puzzle & 0x60020020020ll))
00563:            doSolve(6, 0x40ll, puzzle | 0x60020020020ll,
00564:                    partsUsed | 0x20l);
00565:       }
00566:       if(!(puzzle & 0x4920020ll))
00567:         doSolve(6, 0x40ll, puzzle | 0x4920020ll,
00568:                    partsUsed | 0x20l);
00569:       if(!(puzzle & 0x9260ll))
00570:         doSolve(6, 0x40ll, puzzle | 0x9260ll,
00571:                    partsUsed | 0x20l);
00572:       if(!(puzzle & 0x100100100120ll))
00573:         doSolve(6, 0x40ll, puzzle | 0x100100100120ll,
00574:                    partsUsed | 0x20l);
00575:       if(!(puzzle & 0x40040040060ll))
00576:         doSolve(6, 0x40ll, puzzle | 0x40040040060ll,
00577:                    partsUsed | 0x20l);
00578:     piece6at5:
00579:       if (partsUsed & 0x40l) goto piece7at5;
00580:       if (!(puzzle & 0x4920ll)) {
00581:          if(!(puzzle & 0x49a0ll))
00582:            doSolve(6, 0x40ll, puzzle | 0x49a0ll,
00583:                    partsUsed | 0x40l);
00584:          if(!(puzzle & 0x4d20ll))
00585:            doSolve(6, 0x40ll, puzzle | 0x4d20ll,
00586:                    partsUsed | 0x40l);
00587:          if(!(puzzle & 0x804920ll))
00588:            doSolve(6, 0x40ll, puzzle | 0x804920ll,
00589:                    partsUsed | 0x40l);
00590:          if(!(puzzle & 0x4b20ll))
00591:            doSolve(6, 0x40ll, puzzle | 0x4b20ll,
00592:                    partsUsed | 0x40l);
00593:          if(!(puzzle & 0x104920ll))
00594:            doSolve(6, 0x40ll, puzzle | 0x104920ll,
00595:                    partsUsed | 0x40l);
00596:          if(!(puzzle & 0x5920ll))
00597:            doSolve(6, 0x40ll, puzzle | 0x5920ll,
00598:                    partsUsed | 0x40l);
00599:       }
00600:       if (!(puzzle & 0x20020020020ll)) {
00601:          if(!(puzzle & 0x20020030020ll))
00602:            doSolve(6, 0x40ll, puzzle | 0x20020030020ll,
00603:                    partsUsed | 0x40l);
00604:          if(!(puzzle & 0x20030020020ll))
00605:            doSolve(6, 0x40ll, puzzle | 0x20030020020ll,
00606:                    partsUsed | 0x40l);
00607:          if(!(puzzle & 0x20020120020ll))
00608:            doSolve(6, 0x40ll, puzzle | 0x20020120020ll,
00609:                    partsUsed | 0x40l);
00610:          if(!(puzzle & 0x20120020020ll))
00611:            doSolve(6, 0x40ll, puzzle | 0x20120020020ll,
00612:                    partsUsed | 0x40l);
00613:          if(!(puzzle & 0x20020060020ll))
00614:            doSolve(6, 0x40ll, puzzle | 0x20020060020ll,
00615:                    partsUsed | 0x40l);
00616:          if(!(puzzle & 0x20060020020ll))
00617:            doSolve(6, 0x40ll, puzzle | 0x20060020020ll,
00618:                    partsUsed | 0x40l);
00619:       }
00620:     piece7at5:
00621:       if (partsUsed & 0x80l) goto piece8at5;
00622:       if(!(puzzle & 0x120020120ll))
00623:         doSolve(6, 0x40ll, puzzle | 0x120020120ll,
00624:                    partsUsed | 0x80l);
00625:       if(!(puzzle & 0x120100120ll))
00626:         doSolve(6, 0x40ll, puzzle | 0x120100120ll,
00627:                    partsUsed | 0x80l);
00628:       if(!(puzzle & 0x920820ll))
00629:         doSolve(6, 0x40ll, puzzle | 0x920820ll,
00630:                    partsUsed | 0x80l);
00631:       if(!(puzzle & 0x820920ll))
00632:         doSolve(6, 0x40ll, puzzle | 0x820920ll,
00633:                    partsUsed | 0x80l);
00634:       if(!(puzzle & 0x1960ll))
00635:         doSolve(6, 0x40ll, puzzle | 0x1960ll,
00636:                    partsUsed | 0x80l);
00637:       if(!(puzzle & 0x1a60ll))
00638:         doSolve(6, 0x40ll, puzzle | 0x1a60ll,
00639:                    partsUsed | 0x80l);
00640:       if(!(puzzle & 0x60040060ll))
00641:         doSolve(6, 0x40ll, puzzle | 0x60040060ll,
00642:                    partsUsed | 0x80l);
00643:       if(!(puzzle & 0x60020060ll))
00644:         doSolve(6, 0x40ll, puzzle | 0x60020060ll,
00645:                    partsUsed | 0x80l);
00646:     piece8at5:
00647:       if (partsUsed & 0x100l) goto piece9at5;
00648:       if(!(puzzle & 0x801a0ll))
00649:         doSolve(6, 0x40ll, puzzle | 0x801a0ll,
00650:                    partsUsed | 0x100l);
00651:       if(!(puzzle & 0x30120ll))
00652:         doSolve(6, 0x40ll, puzzle | 0x30120ll,
00653:                    partsUsed | 0x100l);
00654:       if(!(puzzle & 0x20320ll))
00655:         doSolve(6, 0x40ll, puzzle | 0x20320ll,
00656:                    partsUsed | 0x100l);
00657:       if(!(puzzle & 0x1a0020ll))
00658:         doSolve(6, 0x40ll, puzzle | 0x1a0020ll,
00659:                    partsUsed | 0x100l);
00660:       if(!(puzzle & 0x120060ll))
00661:         doSolve(6, 0x40ll, puzzle | 0x120060ll,
00662:                    partsUsed | 0x100l);
00663:       if(!(puzzle & 0x260020ll))
00664:         doSolve(6, 0x40ll, puzzle | 0x260020ll,
00665:                    partsUsed | 0x100l);
00666:       if(!(puzzle & 0x40160ll))
00667:         doSolve(6, 0x40ll, puzzle | 0x40160ll,
00668:                    partsUsed | 0x100l);
00669:       if(!(puzzle & 0x300120ll))
00670:         doSolve(6, 0x40ll, puzzle | 0x300120ll,
00671:                    partsUsed | 0x100l);
00672:       if(!(puzzle & 0x200260ll))
00673:         doSolve(6, 0x40ll, puzzle | 0x200260ll,
00674:                    partsUsed | 0x100l);
00675:     piece9at5:
00676:       if (partsUsed & 0x200l) goto piece10at5;
00677:       if (!(puzzle & 0x1a0ll)) {
00678:          if(!(puzzle & 0x13a0ll))
00679:            doSolve(6, 0x40ll, puzzle | 0x13a0ll,
00680:                    partsUsed | 0x200l);
00681:          if(!(puzzle & 0x7a0ll))
00682:            doSolve(6, 0x40ll, puzzle | 0x7a0ll,
00683:                    partsUsed | 0x200l);
00684:          if(!(puzzle & 0x9e0ll))
00685:            doSolve(6, 0x40ll, puzzle | 0x9e0ll,
00686:                    partsUsed | 0x200l);
00687:          if(!(puzzle & 0x19a0ll))
00688:            doSolve(6, 0x40ll, puzzle | 0x19a0ll,
00689:                    partsUsed | 0x200l);
00690:       }
00691:       if (!(puzzle & 0x20020020ll)) {
00692:          if(!(puzzle & 0x20030060ll))
00693:            doSolve(6, 0x40ll, puzzle | 0x20030060ll,
00694:                    partsUsed | 0x200l);
00695:          if(!(puzzle & 0x60030020ll))
00696:            doSolve(6, 0x40ll, puzzle | 0x60030020ll,
00697:                    partsUsed | 0x200l);
00698:          if(!(puzzle & 0x30060020ll))
00699:            doSolve(6, 0x40ll, puzzle | 0x30060020ll,
00700:                    partsUsed | 0x200l);
00701:       }
00702:       if(!(puzzle & 0xf20ll))
00703:         doSolve(6, 0x40ll, puzzle | 0xf20ll,
00704:                    partsUsed | 0x200l);
00705:       if(!(puzzle & 0x10070020ll))
00706:         doSolve(6, 0x40ll, puzzle | 0x10070020ll,
00707:                    partsUsed | 0x200l);
00708:       if(!(puzzle & 0x40070020ll))
00709:         doSolve(6, 0x40ll, puzzle | 0x40070020ll,
00710:                    partsUsed | 0x200l);
00711:       if(!(puzzle & 0x100920020ll))
00712:         doSolve(6, 0x40ll, puzzle | 0x100920020ll,
00713:                    partsUsed | 0x200l);
00714:       if(!(puzzle & 0x100900120ll))
00715:         doSolve(6, 0x40ll, puzzle | 0x100900120ll,
00716:                    partsUsed | 0x200l);
00717:     piece10at5:
00718:       if (partsUsed & 0x400l) goto piece11at5;
00719:       if (!(puzzle & 0x100120ll)) {
00720:          if(!(puzzle & 0x20120120ll))
00721:            doSolve(6, 0x40ll, puzzle | 0x20120120ll,
00722:                    partsUsed | 0x400l);
00723:          if(!(puzzle & 0x920120ll))
00724:            doSolve(6, 0x40ll, puzzle | 0x920120ll,
00725:                    partsUsed | 0x400l);
00726:          if(!(puzzle & 0x900920ll))
00727:            doSolve(6, 0x40ll, puzzle | 0x900920ll,
00728:                    partsUsed | 0x400l);
00729:          if(!(puzzle & 0x120920ll))
00730:            doSolve(6, 0x40ll, puzzle | 0x120920ll,
00731:                    partsUsed | 0x400l);
00732:          if(!(puzzle & 0x100120120ll))
00733:            doSolve(6, 0x40ll, puzzle | 0x100120120ll,
00734:                    partsUsed | 0x400l);
00735:       }
00736:       if (!(puzzle & 0x20020020ll)) {
00737:          if(!(puzzle & 0x120120020ll))
00738:            doSolve(6, 0x40ll, puzzle | 0x120120020ll,
00739:                    partsUsed | 0x400l);
00740:          if(!(puzzle & 0x20060060ll))
00741:            doSolve(6, 0x40ll, puzzle | 0x20060060ll,
00742:                    partsUsed | 0x400l);
00743:          if(!(puzzle & 0x60060020ll))
00744:            doSolve(6, 0x40ll, puzzle | 0x60060020ll,
00745:                    partsUsed | 0x400l);
00746:       }
00747:       if (!(puzzle & 0x320ll)) {
00748:          if(!(puzzle & 0xb60ll))
00749:            doSolve(6, 0x40ll, puzzle | 0xb60ll,
00750:                    partsUsed | 0x400l);
00751:          if(!(puzzle & 0x1360ll))
00752:            doSolve(6, 0x40ll, puzzle | 0x1360ll,
00753:                    partsUsed | 0x400l);
00754:          if(!(puzzle & 0x1b20ll))
00755:            doSolve(6, 0x40ll, puzzle | 0x1b20ll,
00756:                    partsUsed | 0x400l);
00757:       }
00758:       if(!(puzzle & 0x3e0ll))
00759:         doSolve(6, 0x40ll, puzzle | 0x3e0ll,
00760:                    partsUsed | 0x400l);
00761:       if(!(puzzle & 0xda0ll))
00762:         doSolve(6, 0x40ll, puzzle | 0xda0ll,
00763:                    partsUsed | 0x400l);
00764:       if(!(puzzle & 0x70060ll))
00765:         doSolve(6, 0x40ll, puzzle | 0x70060ll,
00766:                    partsUsed | 0x400l);
00767:       if(!(puzzle & 0x30030020ll))
00768:         doSolve(6, 0x40ll, puzzle | 0x30030020ll,
00769:                    partsUsed | 0x400l);
00770:       if(!(puzzle & 0x40060060ll))
00771:         doSolve(6, 0x40ll, puzzle | 0x40060060ll,
00772:                    partsUsed | 0x400l);
00773:     piece11at5:
00774:       if (partsUsed & 0x800l) goto piece12at5;
00775:       if (!(puzzle & 0x180020ll)) {
00776:          if(!(puzzle & 0x1b0020ll))
00777:            doSolve(6, 0x40ll, puzzle | 0x1b0020ll,
00778:                    partsUsed | 0x800l);
00779:          if(!(puzzle & 0x1a0120ll))
00780:            doSolve(6, 0x40ll, puzzle | 0x1a0120ll,
00781:                    partsUsed | 0x800l);
00782:          if(!(puzzle & 0x1801a0ll))
00783:            doSolve(6, 0x40ll, puzzle | 0x1801a0ll,
00784:                    partsUsed | 0x800l);
00785:       }
00786:       if (!(puzzle & 0x20120ll)) {
00787:          if(!(puzzle & 0x130120ll))
00788:            doSolve(6, 0x40ll, puzzle | 0x130120ll,
00789:                    partsUsed | 0x800l);
00790:          if(!(puzzle & 0x1201a0ll))
00791:            doSolve(6, 0x40ll, puzzle | 0x1201a0ll,
00792:                    partsUsed | 0x800l);
00793:          if(!(puzzle & 0x20360ll))
00794:            doSolve(6, 0x40ll, puzzle | 0x20360ll,
00795:                    partsUsed | 0x800l);
00796:          if(!(puzzle & 0x160120ll))
00797:            doSolve(6, 0x40ll, puzzle | 0x160120ll,
00798:                    partsUsed | 0x800l);
00799:          if(!(puzzle & 0x60160ll))
00800:            doSolve(6, 0x40ll, puzzle | 0x60160ll,
00801:                    partsUsed | 0x800l);
00802:          if(!(puzzle & 0x120320ll))
00803:            doSolve(6, 0x40ll, puzzle | 0x120320ll,
00804:                    partsUsed | 0x800l);
00805:          if(!(puzzle & 0x320120ll))
00806:            doSolve(6, 0x40ll, puzzle | 0x320120ll,
00807:                    partsUsed | 0x800l);
00808:          if(!(puzzle & 0x120160ll))
00809:            doSolve(6, 0x40ll, puzzle | 0x120160ll,
00810:                    partsUsed | 0x800l);
00811:       }
00812:       if (!(puzzle & 0x40060ll)) {
00813:          if(!(puzzle & 0x160060ll))
00814:            doSolve(6, 0x40ll, puzzle | 0x160060ll,
00815:                    partsUsed | 0x800l);
00816:          if(!(puzzle & 0x240260ll))
00817:            doSolve(6, 0x40ll, puzzle | 0x240260ll,
00818:                    partsUsed | 0x800l);
00819:          if(!(puzzle & 0x60260ll))
00820:            doSolve(6, 0x40ll, puzzle | 0x60260ll,
00821:                    partsUsed | 0x800l);
00822:          if(!(puzzle & 0x260060ll))
00823:            doSolve(6, 0x40ll, puzzle | 0x260060ll,
00824:                    partsUsed | 0x800l);
00825:          if(!(puzzle & 0x40360ll))
00826:            doSolve(6, 0x40ll, puzzle | 0x40360ll,
00827:                    partsUsed | 0x800l);
00828:       }
00829:       if (!(puzzle & 0x320ll)) {
00830:          if(!(puzzle & 0x300320ll))
00831:            doSolve(6, 0x40ll, puzzle | 0x300320ll,
00832:                    partsUsed | 0x800l);
00833:          if(!(puzzle & 0x200360ll))
00834:            doSolve(6, 0x40ll, puzzle | 0x200360ll,
00835:                    partsUsed | 0x800l);
00836:          if(!(puzzle & 0x100360ll))
00837:            doSolve(6, 0x40ll, puzzle | 0x100360ll,
00838:                    partsUsed | 0x800l);
00839:       }
00840:       if(!(puzzle & 0x360020ll))
00841:         doSolve(6, 0x40ll, puzzle | 0x360020ll,
00842:                    partsUsed | 0x800l);
00843:     piece12at5:
00844:     break;
00845:    case 6:
00846:       if (partsUsed & 0x2l) goto piece2at6;
00847:       if(!(puzzle & 0xf40ll))
00848:         doSolve(7, 0x80ll, puzzle | 0xf40ll,
00849:                    partsUsed | 0x2l);
00850:       if(!(puzzle & 0x30060040ll))
00851:         doSolve(7, 0x80ll, puzzle | 0x30060040ll,
00852:                    partsUsed | 0x2l);
00853:       if(!(puzzle & 0x1200240040ll))
00854:         doSolve(7, 0x80ll, puzzle | 0x1200240040ll,
00855:                    partsUsed | 0x2l);
00856:       if(!(puzzle & 0x1001200240ll))
00857:         doSolve(7, 0x80ll, puzzle | 0x1001200240ll,
00858:                    partsUsed | 0x2l);
00859:     piece2at6:
00860:       if (partsUsed & 0x4l) goto piece3at6;
00861:       if(!(puzzle & 0x13c0ll))
00862:         doSolve(7, 0x80ll, puzzle | 0x13c0ll,
00863:                    partsUsed | 0x4l);
00864:       if(!(puzzle & 0x200201240ll))
00865:         doSolve(7, 0x80ll, puzzle | 0x200201240ll,
00866:                    partsUsed | 0x4l);
00867:       if(!(puzzle & 0x40070040ll))
00868:         doSolve(7, 0x80ll, puzzle | 0x40070040ll,
00869:                    partsUsed | 0x4l);
00870:       if(!(puzzle & 0x41240040ll))
00871:         doSolve(7, 0x80ll, puzzle | 0x41240040ll,
00872:                    partsUsed | 0x4l);
00873:     piece3at6:
00874:       if (partsUsed & 0x8l) goto piece4at6;
00875:       if(!(puzzle & 0x7c0ll))
00876:         doSolve(7, 0x80ll, puzzle | 0x7c0ll,
00877:                    partsUsed | 0x8l);
00878:       if(!(puzzle & 0x10070040ll))
00879:         doSolve(7, 0x80ll, puzzle | 0x10070040ll,
00880:                    partsUsed | 0x8l);
00881:       if(!(puzzle & 0x1001240040ll))
00882:         doSolve(7, 0x80ll, puzzle | 0x1001240040ll,
00883:                    partsUsed | 0x8l);
00884:       if(!(puzzle & 0x1200200240ll))
00885:         doSolve(7, 0x80ll, puzzle | 0x1200200240ll,
00886:                    partsUsed | 0x8l);
00887:     piece4at6:
00888:       if (partsUsed & 0x10l) goto piece5at6;
00889:       if (!(puzzle & 0x9240ll)) {
00890:          if(!(puzzle & 0xd340ll))
00891:            doSolve(7, 0x80ll, puzzle | 0xd340ll,
00892:                    partsUsed | 0x10l);
00893:          if(!(puzzle & 0x1049240ll))
00894:            doSolve(7, 0x80ll, puzzle | 0x1049240ll,
00895:                    partsUsed | 0x10l);
00896:          if(!(puzzle & 0x8209240ll))
00897:            doSolve(7, 0x80ll, puzzle | 0x8209240ll,
00898:                    partsUsed | 0x10l);
00899:       }
00900:       if (!(puzzle & 0x40040040040ll)) {
00901:          if(!(puzzle & 0x60040060040ll))
00902:            doSolve(7, 0x80ll, puzzle | 0x60040060040ll,
00903:                    partsUsed | 0x10l);
00904:          if(!(puzzle & 0x240040240040ll))
00905:            doSolve(7, 0x80ll, puzzle | 0x240040240040ll,
00906:                    partsUsed | 0x10l);
00907:          if(!(puzzle & 0x40240040240ll))
00908:            doSolve(7, 0x80ll, puzzle | 0x40240040240ll,
00909:                    partsUsed | 0x10l);
00910:       }
00911:       if(!(puzzle & 0x200240200240ll))
00912:         doSolve(7, 0x80ll, puzzle | 0x200240200240ll,
00913:                    partsUsed | 0x10l);
00914:       if(!(puzzle & 0x9241040ll))
00915:         doSolve(7, 0x80ll, puzzle | 0x9241040ll,
00916:                    partsUsed | 0x10l);
00917:     piece5at6:
00918:       if (partsUsed & 0x20l) goto piece6at6;
00919:       if (!(puzzle & 0x9240ll)) {
00920:          if(!(puzzle & 0xd240ll))
00921:            doSolve(7, 0x80ll, puzzle | 0xd240ll,
00922:                    partsUsed | 0x20l);
00923:          if(!(puzzle & 0x8009240ll))
00924:            doSolve(7, 0x80ll, puzzle | 0x8009240ll,
00925:                    partsUsed | 0x20l);
00926:          if(!(puzzle & 0x49240ll))
00927:            doSolve(7, 0x80ll, puzzle | 0x49240ll,
00928:                    partsUsed | 0x20l);
00929:       }
00930:       if (!(puzzle & 0x40040040040ll)) {
00931:          if(!(puzzle & 0x60040040040ll))
00932:            doSolve(7, 0x80ll, puzzle | 0x60040040040ll,
00933:                    partsUsed | 0x20l);
00934:          if(!(puzzle & 0x40040040240ll))
00935:            doSolve(7, 0x80ll, puzzle | 0x40040040240ll,
00936:                    partsUsed | 0x20l);
00937:          if(!(puzzle & 0x240040040040ll))
00938:            doSolve(7, 0x80ll, puzzle | 0x240040040040ll,
00939:                    partsUsed | 0x20l);
00940:       }
00941:       if(!(puzzle & 0x9240040ll))
00942:         doSolve(7, 0x80ll, puzzle | 0x9240040ll,
00943:                    partsUsed | 0x20l);
00944:       if(!(puzzle & 0x200200200240ll))
00945:         doSolve(7, 0x80ll, puzzle | 0x200200200240ll,
00946:                    partsUsed | 0x20l);
00947:     piece6at6:
00948:       if (partsUsed & 0x40l) goto piece7at6;
00949:       if (!(puzzle & 0x9240ll)) {
00950:          if(!(puzzle & 0x9340ll))
00951:            doSolve(7, 0x80ll, puzzle | 0x9340ll,
00952:                    partsUsed | 0x40l);
00953:          if(!(puzzle & 0x9a40ll))
00954:            doSolve(7, 0x80ll, puzzle | 0x9a40ll,
00955:                    partsUsed | 0x40l);
00956:          if(!(puzzle & 0x1009240ll))
00957:            doSolve(7, 0x80ll, puzzle | 0x1009240ll,
00958:                    partsUsed | 0x40l);
00959:          if(!(puzzle & 0x209240ll))
00960:            doSolve(7, 0x80ll, puzzle | 0x209240ll,
00961:                    partsUsed | 0x40l);
00962:       }
00963:       if (!(puzzle & 0x40040040040ll)) {
00964:          if(!(puzzle & 0x40040060040ll))
00965:            doSolve(7, 0x80ll, puzzle | 0x40040060040ll,
00966:                    partsUsed | 0x40l);
00967:          if(!(puzzle & 0x40060040040ll))
00968:            doSolve(7, 0x80ll, puzzle | 0x40060040040ll,
00969:                    partsUsed | 0x40l);
00970:          if(!(puzzle & 0x40040240040ll))
00971:            doSolve(7, 0x80ll, puzzle | 0x40040240040ll,
00972:                    partsUsed | 0x40l);
00973:          if(!(puzzle & 0x40240040040ll))
00974:            doSolve(7, 0x80ll, puzzle | 0x40240040040ll,
00975:                    partsUsed | 0x40l);
00976:       }
00977:     piece7at6:
00978:       if (partsUsed & 0x80l) goto piece8at6;
00979:       if(!(puzzle & 0x240040240ll))
00980:         doSolve(7, 0x80ll, puzzle | 0x240040240ll,
00981:                    partsUsed | 0x80l);
00982:       if(!(puzzle & 0x240200240ll))
00983:         doSolve(7, 0x80ll, puzzle | 0x240200240ll,
00984:                    partsUsed | 0x80l);
00985:       if(!(puzzle & 0x1241040ll))
00986:         doSolve(7, 0x80ll, puzzle | 0x1241040ll,
00987:                    partsUsed | 0x80l);
00988:       if(!(puzzle & 0x1041240ll))
00989:         doSolve(7, 0x80ll, puzzle | 0x1041240ll,
00990:                    partsUsed | 0x80l);
00991:     piece8at6:
00992:       if (partsUsed & 0x100l) goto piece9at6;
00993:       if(!(puzzle & 0x340040ll))
00994:         doSolve(7, 0x80ll, puzzle | 0x340040ll,
00995:                    partsUsed | 0x100l);
00996:       if(!(puzzle & 0x100340ll))
00997:         doSolve(7, 0x80ll, puzzle | 0x100340ll,
00998:                    partsUsed | 0x100l);
00999:       if(!(puzzle & 0x60240ll))
01000:         doSolve(7, 0x80ll, puzzle | 0x60240ll,
01001:                    partsUsed | 0x100l);
01002:     piece9at6:
01003:       if (partsUsed & 0x200l) goto piece10at6;
01004:       if(!(puzzle & 0xbc0ll))
01005:         doSolve(7, 0x80ll, puzzle | 0xbc0ll,
01006:                    partsUsed | 0x200l);
01007:       if(!(puzzle & 0x20070040ll))
01008:         doSolve(7, 0x80ll, puzzle | 0x20070040ll,
01009:                    partsUsed | 0x200l);
01010:       if(!(puzzle & 0x201240040ll))
01011:         doSolve(7, 0x80ll, puzzle | 0x201240040ll,
01012:                    partsUsed | 0x200l);
01013:       if(!(puzzle & 0x201200240ll))
01014:         doSolve(7, 0x80ll, puzzle | 0x201200240ll,
01015:                    partsUsed | 0x200l);
01016:     piece10at6:
01017:       if (partsUsed & 0x400l) goto piece11at6;
01018:       if (!(puzzle & 0x1240ll)) {
01019:          if(!(puzzle & 0x1b40ll))
01020:            doSolve(7, 0x80ll, puzzle | 0x1b40ll,
01021:                    partsUsed | 0x400l);
01022:          if(!(puzzle & 0x1201240ll))
01023:            doSolve(7, 0x80ll, puzzle | 0x1201240ll,
01024:                    partsUsed | 0x400l);
01025:          if(!(puzzle & 0x241240ll))
01026:            doSolve(7, 0x80ll, puzzle | 0x241240ll,
01027:                    partsUsed | 0x400l);
01028:       }
01029:       if (!(puzzle & 0x40040040ll)) {
01030:          if(!(puzzle & 0x60060040ll))
01031:            doSolve(7, 0x80ll, puzzle | 0x60060040ll,
01032:                    partsUsed | 0x400l);
01033:          if(!(puzzle & 0x40240240ll))
01034:            doSolve(7, 0x80ll, puzzle | 0x40240240ll,
01035:                    partsUsed | 0x400l);
01036:          if(!(puzzle & 0x240240040ll))
01037:            doSolve(7, 0x80ll, puzzle | 0x240240040ll,
01038:                    partsUsed | 0x400l);
01039:       }
01040:       if(!(puzzle & 0x1240240ll))
01041:         doSolve(7, 0x80ll, puzzle | 0x1240240ll,
01042:                    partsUsed | 0x400l);
01043:       if(!(puzzle & 0x200240240ll))
01044:         doSolve(7, 0x80ll, puzzle | 0x200240240ll,
01045:                    partsUsed | 0x400l);
01046:     piece11at6:
01047:       if (partsUsed & 0x800l) goto piece12at6;
01048:       if (!(puzzle & 0x300040ll)) {
01049:          if(!(puzzle & 0x360040ll))
01050:            doSolve(7, 0x80ll, puzzle | 0x360040ll,
01051:                    partsUsed | 0x800l);
01052:          if(!(puzzle & 0x340240ll))
01053:            doSolve(7, 0x80ll, puzzle | 0x340240ll,
01054:                    partsUsed | 0x800l);
01055:          if(!(puzzle & 0x300340ll))
01056:            doSolve(7, 0x80ll, puzzle | 0x300340ll,
01057:                    partsUsed | 0x800l);
01058:       }
01059:       if(!(puzzle & 0x260240ll))
01060:         doSolve(7, 0x80ll, puzzle | 0x260240ll,
01061:                    partsUsed | 0x800l);
01062:       if(!(puzzle & 0x240340ll))
01063:         doSolve(7, 0x80ll, puzzle | 0x240340ll,
01064:                    partsUsed | 0x800l);
01065:     piece12at6:
01066:     break;
01067:    case 7:
01068:       if (partsUsed & 0x2l) goto piece2at7;
01069:       if(!(puzzle & 0x10090480ll))
01070:         doSolve(8, 0x100ll, puzzle | 0x10090480ll,
01071:                    partsUsed | 0x2l);
01072:       if(!(puzzle & 0x2400480080ll))
01073:         doSolve(8, 0x100ll, puzzle | 0x2400480080ll,
01074:                    partsUsed | 0x2l);
01075:       if(!(puzzle & 0x2002400480ll))
01076:         doSolve(8, 0x100ll, puzzle | 0x2002400480ll,
01077:                    partsUsed | 0x2l);
01078:       if(!(puzzle & 0x9980ll))
01079:         doSolve(8, 0x100ll, puzzle | 0x9980ll,
01080:                    partsUsed | 0x2l);
01081:       if(!(puzzle & 0xcc80ll))
01082:         doSolve(8, 0x100ll, puzzle | 0xcc80ll,
01083:                    partsUsed | 0x2l);
01084:       if(!(puzzle & 0x200300180ll))
01085:         doSolve(8, 0x100ll, puzzle | 0x200300180ll,
01086:                    partsUsed | 0x2l);
01087:       if(!(puzzle & 0x300180080ll))
01088:         doSolve(8, 0x100ll, puzzle | 0x300180080ll,
01089:                    partsUsed | 0x2l);
01090:     piece2at7:
01091:       if (partsUsed & 0x4l) goto piece3at7;
01092:       if (!(puzzle & 0x80080080ll)) {
01093:          if(!(puzzle & 0x490080080ll))
01094:            doSolve(8, 0x100ll, puzzle | 0x490080080ll,
01095:                    partsUsed | 0x4l);
01096:          if(!(puzzle & 0x82480080ll))
01097:            doSolve(8, 0x100ll, puzzle | 0x82480080ll,
01098:                    partsUsed | 0x4l);
01099:          if(!(puzzle & 0x80380080ll))
01100:            doSolve(8, 0x100ll, puzzle | 0x80380080ll,
01101:                    partsUsed | 0x4l);
01102:       }
01103:       if(!(puzzle & 0x400402480ll))
01104:         doSolve(8, 0x100ll, puzzle | 0x400402480ll,
01105:                    partsUsed | 0x4l);
01106:       if(!(puzzle & 0x3c80ll))
01107:         doSolve(8, 0x100ll, puzzle | 0x3c80ll,
01108:                    partsUsed | 0x4l);
01109:       if(!(puzzle & 0x4b80ll))
01110:         doSolve(8, 0x100ll, puzzle | 0x4b80ll,
01111:                    partsUsed | 0x4l);
01112:       if(!(puzzle & 0x100100380ll))
01113:         doSolve(8, 0x100ll, puzzle | 0x100100380ll,
01114:                    partsUsed | 0x4l);
01115:     piece3at7:
01116:       if (partsUsed & 0x8l) goto piece4at7;
01117:       if(!(puzzle & 0x90080480ll))
01118:         doSolve(8, 0x100ll, puzzle | 0x90080480ll,
01119:                    partsUsed | 0x8l);
01120:       if(!(puzzle & 0x2002480080ll))
01121:         doSolve(8, 0x100ll, puzzle | 0x2002480080ll,
01122:                    partsUsed | 0x8l);
01123:       if(!(puzzle & 0x2400400480ll))
01124:         doSolve(8, 0x100ll, puzzle | 0x2400400480ll,
01125:                    partsUsed | 0x8l);
01126:       if(!(puzzle & 0xc980ll))
01127:         doSolve(8, 0x100ll, puzzle | 0xc980ll,
01128:                    partsUsed | 0x8l);
01129:       if(!(puzzle & 0x9c80ll))
01130:         doSolve(8, 0x100ll, puzzle | 0x9c80ll,
01131:                    partsUsed | 0x8l);
01132:       if(!(puzzle & 0x200380080ll))
01133:         doSolve(8, 0x100ll, puzzle | 0x200380080ll,
01134:                    partsUsed | 0x8l);
01135:       if(!(puzzle & 0x300100180ll))
01136:         doSolve(8, 0x100ll, puzzle | 0x300100180ll,
01137:                    partsUsed | 0x8l);
01138:     piece4at7:
01139:       if (partsUsed & 0x10l) goto piece5at7;
01140:       if (!(puzzle & 0x80080080080ll)) {
01141:          if(!(puzzle & 0x80480080480ll))
01142:            doSolve(8, 0x100ll, puzzle | 0x80480080480ll,
01143:                    partsUsed | 0x10l);
01144:          if(!(puzzle & 0x180080180080ll))
01145:            doSolve(8, 0x100ll, puzzle | 0x180080180080ll,
01146:                    partsUsed | 0x10l);
01147:          if(!(puzzle & 0x80180080180ll))
01148:            doSolve(8, 0x100ll, puzzle | 0x80180080180ll,
01149:                    partsUsed | 0x10l);
01150:       }
01151:       if(!(puzzle & 0x2492080ll))
01152:         doSolve(8, 0x100ll, puzzle | 0x2492080ll,
01153:                    partsUsed | 0x10l);
01154:       if(!(puzzle & 0x90080090080ll))
01155:         doSolve(8, 0x100ll, puzzle | 0x90080090080ll,
01156:                    partsUsed | 0x10l);
01157:       if(!(puzzle & 0x480080480080ll))
01158:         doSolve(8, 0x100ll, puzzle | 0x480080480080ll,
01159:                    partsUsed | 0x10l);
01160:       if(!(puzzle & 0x400480400480ll))
01161:         doSolve(8, 0x100ll, puzzle | 0x400480400480ll,
01162:                    partsUsed | 0x10l);
01163:       if(!(puzzle & 0x100180100180ll))
01164:         doSolve(8, 0x100ll, puzzle | 0x100180100180ll,
01165:                    partsUsed | 0x10l);
01166:     piece5at7:
01167:       if (partsUsed & 0x20l) goto piece6at7;
01168:       if (!(puzzle & 0x80080080080ll)) {
01169:          if(!(puzzle & 0x90080080080ll))
01170:            doSolve(8, 0x100ll, puzzle | 0x90080080080ll,
01171:                    partsUsed | 0x20l);
01172:          if(!(puzzle & 0x80080080480ll))
01173:            doSolve(8, 0x100ll, puzzle | 0x80080080480ll,
01174:                    partsUsed | 0x20l);
01175:          if(!(puzzle & 0x480080080080ll))
01176:            doSolve(8, 0x100ll, puzzle | 0x480080080080ll,
01177:                    partsUsed | 0x20l);
01178:          if(!(puzzle & 0x80080080180ll))
01179:            doSolve(8, 0x100ll, puzzle | 0x80080080180ll,
01180:                    partsUsed | 0x20l);
01181:          if(!(puzzle & 0x180080080080ll))
01182:            doSolve(8, 0x100ll, puzzle | 0x180080080080ll,
01183:                    partsUsed | 0x20l);
01184:       }
01185:       if(!(puzzle & 0x400400400480ll))
01186:         doSolve(8, 0x100ll, puzzle | 0x400400400480ll,
01187:                    partsUsed | 0x20l);
01188:       if(!(puzzle & 0x100100100180ll))
01189:         doSolve(8, 0x100ll, puzzle | 0x100100100180ll,
01190:                    partsUsed | 0x20l);
01191:     piece6at7:
01192:       if (partsUsed & 0x40l) goto piece7at7;
01193:       if (!(puzzle & 0x80080080080ll)) {
01194:          if(!(puzzle & 0x80090080080ll))
01195:            doSolve(8, 0x100ll, puzzle | 0x80090080080ll,
01196:                    partsUsed | 0x40l);
01197:          if(!(puzzle & 0x80080480080ll))
01198:            doSolve(8, 0x100ll, puzzle | 0x80080480080ll,
01199:                    partsUsed | 0x40l);
01200:          if(!(puzzle & 0x80480080080ll))
01201:            doSolve(8, 0x100ll, puzzle | 0x80480080080ll,
01202:                    partsUsed | 0x40l);
01203:          if(!(puzzle & 0x80080180080ll))
01204:            doSolve(8, 0x100ll, puzzle | 0x80080180080ll,
01205:                    partsUsed | 0x40l);
01206:          if(!(puzzle & 0x80180080080ll))
01207:            doSolve(8, 0x100ll, puzzle | 0x80180080080ll,
01208:                    partsUsed | 0x40l);
01209:       }
01210:       if(!(puzzle & 0x2490080ll))
01211:         doSolve(8, 0x100ll, puzzle | 0x2490080ll,
01212:                    partsUsed | 0x40l);
01213:       if(!(puzzle & 0x80080090080ll))
01214:         doSolve(8, 0x100ll, puzzle | 0x80080090080ll,
01215:                    partsUsed | 0x40l);
01216:     piece7at7:
01217:       if (partsUsed & 0x80l) goto piece8at7;
01218:       if(!(puzzle & 0x480080480ll))
01219:         doSolve(8, 0x100ll, puzzle | 0x480080480ll,
01220:                    partsUsed | 0x80l);
01221:       if(!(puzzle & 0x480400480ll))
01222:         doSolve(8, 0x100ll, puzzle | 0x480400480ll,
01223:                    partsUsed | 0x80l);
01224:       if(!(puzzle & 0x2482080ll))
01225:         doSolve(8, 0x100ll, puzzle | 0x2482080ll,
01226:                    partsUsed | 0x80l);
01227:       if(!(puzzle & 0x2082480ll))
01228:         doSolve(8, 0x100ll, puzzle | 0x2082480ll,
01229:                    partsUsed | 0x80l);
01230:       if(!(puzzle & 0x1780ll))
01231:         doSolve(8, 0x100ll, puzzle | 0x1780ll,
01232:                    partsUsed | 0x80l);
01233:       if(!(puzzle & 0x6580ll))
01234:         doSolve(8, 0x100ll, puzzle | 0x6580ll,
01235:                    partsUsed | 0x80l);
01236:       if(!(puzzle & 0x6980ll))
01237:         doSolve(8, 0x100ll, puzzle | 0x6980ll,
01238:                    partsUsed | 0x80l);
01239:       if(!(puzzle & 0x1e80ll))
01240:         doSolve(8, 0x100ll, puzzle | 0x1e80ll,
01241:                    partsUsed | 0x80l);
01242:       if(!(puzzle & 0x180100180ll))
01243:         doSolve(8, 0x100ll, puzzle | 0x180100180ll,
01244:                    partsUsed | 0x80l);
01245:       if(!(puzzle & 0x180080180ll))
01246:         doSolve(8, 0x100ll, puzzle | 0x180080180ll,
01247:                    partsUsed | 0x80l);
01248:       if(!(puzzle & 0x380280ll))
01249:         doSolve(8, 0x100ll, puzzle | 0x380280ll,
01250:                    partsUsed | 0x80l);
01251:       if(!(puzzle & 0x280380ll))
01252:         doSolve(8, 0x100ll, puzzle | 0x280380ll,
01253:                    partsUsed | 0x80l);
01254:     piece8at7:
01255:       if (partsUsed & 0x100l) goto piece9at7;
01256:       if(!(puzzle & 0x120180ll))
01257:         doSolve(8, 0x100ll, puzzle | 0x120180ll,
01258:                    partsUsed | 0x100l);
01259:       if(!(puzzle & 0x100580ll))
01260:         doSolve(8, 0x100ll, puzzle | 0x100580ll,
01261:                    partsUsed | 0x100l);
01262:       if(!(puzzle & 0xb0080ll))
01263:         doSolve(8, 0x100ll, puzzle | 0xb0080ll,
01264:                    partsUsed | 0x100l);
01265:       if(!(puzzle & 0x980080ll))
01266:         doSolve(8, 0x100ll, puzzle | 0x980080ll,
01267:                    partsUsed | 0x100l);
01268:       if(!(puzzle & 0x480180ll))
01269:         doSolve(8, 0x100ll, puzzle | 0x480180ll,
01270:                    partsUsed | 0x100l);
01271:       if(!(puzzle & 0xc00480ll))
01272:         doSolve(8, 0x100ll, puzzle | 0xc00480ll,
01273:                    partsUsed | 0x100l);
01274:       if(!(puzzle & 0x80c80ll))
01275:         doSolve(8, 0x100ll, puzzle | 0x80c80ll,
01276:                    partsUsed | 0x100l);
01277:       if(!(puzzle & 0x800980ll))
01278:         doSolve(8, 0x100ll, puzzle | 0x800980ll,
01279:                    partsUsed | 0x100l);
01280:     piece9at7:
01281:       if (partsUsed & 0x200l) goto piece10at7;
01282:       if (!(puzzle & 0x80080080ll)) {
01283:          if(!(puzzle & 0x80090480ll))
01284:            doSolve(8, 0x100ll, puzzle | 0x80090480ll,
01285:                    partsUsed | 0x200l);
01286:          if(!(puzzle & 0x90480080ll))
01287:            doSolve(8, 0x100ll, puzzle | 0x90480080ll,
01288:                    partsUsed | 0x200l);
01289:          if(!(puzzle & 0x480090080ll))
01290:            doSolve(8, 0x100ll, puzzle | 0x480090080ll,
01291:                    partsUsed | 0x200l);
01292:       }
01293:       if (!(puzzle & 0x480080ll)) {
01294:          if(!(puzzle & 0x400490080ll))
01295:            doSolve(8, 0x100ll, puzzle | 0x400490080ll,
01296:                    partsUsed | 0x200l);
01297:          if(!(puzzle & 0x10490080ll))
01298:            doSolve(8, 0x100ll, puzzle | 0x10490080ll,
01299:                    partsUsed | 0x200l);
01300:          if(!(puzzle & 0x402480080ll))
01301:            doSolve(8, 0x100ll, puzzle | 0x402480080ll,
01302:                    partsUsed | 0x200l);
01303:       }
01304:       if(!(puzzle & 0x5980ll))
01305:         doSolve(8, 0x100ll, puzzle | 0x5980ll,
01306:                    partsUsed | 0x200l);
01307:       if(!(puzzle & 0x5c80ll))
01308:         doSolve(8, 0x100ll, puzzle | 0x5c80ll,
01309:                    partsUsed | 0x200l);
01310:       if(!(puzzle & 0x402400480ll))
01311:         doSolve(8, 0x100ll, puzzle | 0x402400480ll,
01312:                    partsUsed | 0x200l);
01313:       if(!(puzzle & 0x100300180ll))
01314:         doSolve(8, 0x100ll, puzzle | 0x100300180ll,
01315:                    partsUsed | 0x200l);
01316:       if(!(puzzle & 0x100380080ll))
01317:         doSolve(8, 0x100ll, puzzle | 0x100380080ll,
01318:                    partsUsed | 0x200l);
01319:     piece10at7:
01320:       if (partsUsed & 0x400l) goto piece11at7;
01321:       if (!(puzzle & 0x400480ll)) {
01322:          if(!(puzzle & 0x80480480ll))
01323:            doSolve(8, 0x100ll, puzzle | 0x80480480ll,
01324:                    partsUsed | 0x400l);
01325:          if(!(puzzle & 0x2480480ll))
01326:            doSolve(8, 0x100ll, puzzle | 0x2480480ll,
01327:                    partsUsed | 0x400l);
01328:          if(!(puzzle & 0x2402480ll))
01329:            doSolve(8, 0x100ll, puzzle | 0x2402480ll,
01330:                    partsUsed | 0x400l);
01331:          if(!(puzzle & 0x482480ll))
01332:            doSolve(8, 0x100ll, puzzle | 0x482480ll,
01333:                    partsUsed | 0x400l);
01334:          if(!(puzzle & 0x400480480ll))
01335:            doSolve(8, 0x100ll, puzzle | 0x400480480ll,
01336:                    partsUsed | 0x400l);
01337:       }
01338:       if (!(puzzle & 0x980ll)) {
01339:          if(!(puzzle & 0x1b80ll))
01340:            doSolve(8, 0x100ll, puzzle | 0x1b80ll,
01341:                    partsUsed | 0x400l);
01342:          if(!(puzzle & 0xf80ll))
01343:            doSolve(8, 0x100ll, puzzle | 0xf80ll,
01344:                    partsUsed | 0x400l);
01345:          if(!(puzzle & 0x2d80ll))
01346:            doSolve(8, 0x100ll, puzzle | 0x2d80ll,
01347:                    partsUsed | 0x400l);
01348:          if(!(puzzle & 0x4d80ll))
01349:            doSolve(8, 0x100ll, puzzle | 0x4d80ll,
01350:                    partsUsed | 0x400l);
01351:          if(!(puzzle & 0x1d80ll))
01352:            doSolve(8, 0x100ll, puzzle | 0x1d80ll,
01353:                    partsUsed | 0x400l);
01354:       }
01355:       if (!(puzzle & 0x80080080ll)) {
01356:          if(!(puzzle & 0x480480080ll))
01357:            doSolve(8, 0x100ll, puzzle | 0x480480080ll,
01358:                    partsUsed | 0x400l);
01359:          if(!(puzzle & 0x80180180ll))
01360:            doSolve(8, 0x100ll, puzzle | 0x80180180ll,
01361:                    partsUsed | 0x400l);
01362:          if(!(puzzle & 0x180180080ll))
01363:            doSolve(8, 0x100ll, puzzle | 0x180180080ll,
01364:                    partsUsed | 0x400l);
01365:       }
01366:       if (!(puzzle & 0x100180ll)) {
01367:          if(!(puzzle & 0x100180180ll))
01368:            doSolve(8, 0x100ll, puzzle | 0x100180180ll,
01369:                    partsUsed | 0x400l);
01370:          if(!(puzzle & 0x380180ll))
01371:            doSolve(8, 0x100ll, puzzle | 0x380180ll,
01372:                    partsUsed | 0x400l);
01373:          if(!(puzzle & 0x180380ll))
01374:            doSolve(8, 0x100ll, puzzle | 0x180380ll,
01375:                    partsUsed | 0x400l);
01376:          if(!(puzzle & 0x300380ll))
01377:            doSolve(8, 0x100ll, puzzle | 0x300380ll,
01378:                    partsUsed | 0x400l);
01379:       }
01380:       if(!(puzzle & 0x90090080ll))
01381:         doSolve(8, 0x100ll, puzzle | 0x90090080ll,
01382:                    partsUsed | 0x400l);
01383:       if(!(puzzle & 0x490480ll))
01384:         doSolve(8, 0x100ll, puzzle | 0x490480ll,
01385:                    partsUsed | 0x400l);
01386:       if(!(puzzle & 0x6c80ll))
01387:         doSolve(8, 0x100ll, puzzle | 0x6c80ll,
01388:                    partsUsed | 0x400l);
01389:     piece11at7:
01390:       if (partsUsed & 0x800l) goto piece12at7;
01391:       if (!(puzzle & 0x180080ll)) {
01392:          if(!(puzzle & 0x1b0080ll))
01393:            doSolve(8, 0x100ll, puzzle | 0x1b0080ll,
01394:                    partsUsed | 0x800l);
01395:          if(!(puzzle & 0x1a0180ll))
01396:            doSolve(8, 0x100ll, puzzle | 0x1a0180ll,
01397:                    partsUsed | 0x800l);
01398:          if(!(puzzle & 0x190180ll))
01399:            doSolve(8, 0x100ll, puzzle | 0x190180ll,
01400:                    partsUsed | 0x800l);
01401:          if(!(puzzle & 0x580180ll))
01402:            doSolve(8, 0x100ll, puzzle | 0x580180ll,
01403:                    partsUsed | 0x800l);
01404:          if(!(puzzle & 0x580480ll))
01405:            doSolve(8, 0x100ll, puzzle | 0x580480ll,
01406:                    partsUsed | 0x800l);
01407:          if(!(puzzle & 0x180580ll))
01408:            doSolve(8, 0x100ll, puzzle | 0x180580ll,
01409:                    partsUsed | 0x800l);
01410:          if(!(puzzle & 0x180980ll))
01411:            doSolve(8, 0x100ll, puzzle | 0x180980ll,
01412:                    partsUsed | 0x800l);
01413:          if(!(puzzle & 0x980180ll))
01414:            doSolve(8, 0x100ll, puzzle | 0x980180ll,
01415:                    partsUsed | 0x800l);
01416:          if(!(puzzle & 0xd80080ll))
01417:            doSolve(8, 0x100ll, puzzle | 0xd80080ll,
01418:                    partsUsed | 0x800l);
01419:       }
01420:       if (!(puzzle & 0xc80ll)) {
01421:          if(!(puzzle & 0x80d80ll))
01422:            doSolve(8, 0x100ll, puzzle | 0x80d80ll,
01423:                    partsUsed | 0x800l);
01424:          if(!(puzzle & 0xc00c80ll))
01425:            doSolve(8, 0x100ll, puzzle | 0xc00c80ll,
01426:                    partsUsed | 0x800l);
01427:          if(!(puzzle & 0x480c80ll))
01428:            doSolve(8, 0x100ll, puzzle | 0x480c80ll,
01429:                    partsUsed | 0x800l);
01430:          if(!(puzzle & 0x800d80ll))
01431:            doSolve(8, 0x100ll, puzzle | 0x800d80ll,
01432:                    partsUsed | 0x800l);
01433:          if(!(puzzle & 0x100d80ll))
01434:            doSolve(8, 0x100ll, puzzle | 0x100d80ll,
01435:                    partsUsed | 0x800l);
01436:          if(!(puzzle & 0x400d80ll))
01437:            doSolve(8, 0x100ll, puzzle | 0x400d80ll,
01438:                    partsUsed | 0x800l);
01439:       }
01440:       if(!(puzzle & 0x900980ll))
01441:         doSolve(8, 0x100ll, puzzle | 0x900980ll,
01442:                    partsUsed | 0x800l);
01443:       if(!(puzzle & 0xc80480ll))
01444:         doSolve(8, 0x100ll, puzzle | 0xc80480ll,
01445:                    partsUsed | 0x800l);
01446:       if(!(puzzle & 0x480580ll))
01447:         doSolve(8, 0x100ll, puzzle | 0x480580ll,
01448:                    partsUsed | 0x800l);
01449:     piece12at7:
01450:     break;
01451:    case 8:
01452:       if (partsUsed & 0x2l) goto piece2at8;
01453:       if(!(puzzle & 0x20120900ll))
01454:         doSolve(9, 0x200ll, puzzle | 0x20120900ll,
01455:                    partsUsed | 0x2l);
01456:       if(!(puzzle & 0x2f00ll))
01457:         doSolve(9, 0x200ll, puzzle | 0x2f00ll,
01458:                    partsUsed | 0x2l);
01459:       if(!(puzzle & 0x80180300ll))
01460:         doSolve(9, 0x200ll, puzzle | 0x80180300ll,
01461:                    partsUsed | 0x2l);
01462:       if(!(puzzle & 0x4800900100ll))
01463:         doSolve(9, 0x200ll, puzzle | 0x4800900100ll,
01464:                    partsUsed | 0x2l);
01465:       if(!(puzzle & 0x4004800900ll))
01466:         doSolve(9, 0x200ll, puzzle | 0x4004800900ll,
01467:                    partsUsed | 0x2l);
01468:     piece2at8:
01469:       if (partsUsed & 0x4l) goto piece3at8;
01470:       if (!(puzzle & 0x100100100ll)) {
01471:          if(!(puzzle & 0x920100100ll))
01472:            doSolve(9, 0x200ll, puzzle | 0x920100100ll,
01473:                    partsUsed | 0x4l);
01474:          if(!(puzzle & 0x380100100ll))
01475:            doSolve(9, 0x200ll, puzzle | 0x380100100ll,
01476:                    partsUsed | 0x4l);
01477:          if(!(puzzle & 0x104900100ll))
01478:            doSolve(9, 0x200ll, puzzle | 0x104900100ll,
01479:                    partsUsed | 0x4l);
01480:       }
01481:       if(!(puzzle & 0xe900ll))
01482:         doSolve(9, 0x200ll, puzzle | 0xe900ll,
01483:                    partsUsed | 0x4l);
01484:       if(!(puzzle & 0x800804900ll))
01485:         doSolve(9, 0x200ll, puzzle | 0x800804900ll,
01486:                    partsUsed | 0x4l);
01487:     piece3at8:
01488:       if (partsUsed & 0x8l) goto piece4at8;
01489:       if(!(puzzle & 0x120100900ll))
01490:         doSolve(9, 0x200ll, puzzle | 0x120100900ll,
01491:                    partsUsed | 0x8l);
01492:       if(!(puzzle & 0x180100300ll))
01493:         doSolve(9, 0x200ll, puzzle | 0x180100300ll,
01494:                    partsUsed | 0x8l);
01495:       if(!(puzzle & 0x6b00ll))
01496:         doSolve(9, 0x200ll, puzzle | 0x6b00ll,
01497:                    partsUsed | 0x8l);
01498:       if(!(puzzle & 0x4004900100ll))
01499:         doSolve(9, 0x200ll, puzzle | 0x4004900100ll,
01500:                    partsUsed | 0x8l);
01501:       if(!(puzzle & 0x4800800900ll))
01502:         doSolve(9, 0x200ll, puzzle | 0x4800800900ll,
01503:                    partsUsed | 0x8l);
01504:     piece4at8:
01505:       if (partsUsed & 0x10l) goto piece5at8;
01506:       if (!(puzzle & 0x100100100100ll)) {
01507:          if(!(puzzle & 0x180100180100ll))
01508:            doSolve(9, 0x200ll, puzzle | 0x180100180100ll,
01509:                    partsUsed | 0x10l);
01510:          if(!(puzzle & 0x900100900100ll))
01511:            doSolve(9, 0x200ll, puzzle | 0x900100900100ll,
01512:                    partsUsed | 0x10l);
01513:          if(!(puzzle & 0x100900100900ll))
01514:            doSolve(9, 0x200ll, puzzle | 0x100900100900ll,
01515:                    partsUsed | 0x10l);
01516:          if(!(puzzle & 0x300100300100ll))
01517:            doSolve(9, 0x200ll, puzzle | 0x300100300100ll,
01518:                    partsUsed | 0x10l);
01519:          if(!(puzzle & 0x100300100300ll))
01520:            doSolve(9, 0x200ll, puzzle | 0x100300100300ll,
01521:                    partsUsed | 0x10l);
01522:       }
01523:       if(!(puzzle & 0x4924100ll))
01524:         doSolve(9, 0x200ll, puzzle | 0x4924100ll,
01525:                    partsUsed | 0x10l);
01526:       if(!(puzzle & 0x120100120100ll))
01527:         doSolve(9, 0x200ll, puzzle | 0x120100120100ll,
01528:                    partsUsed | 0x10l);
01529:       if(!(puzzle & 0x800900800900ll))
01530:         doSolve(9, 0x200ll, puzzle | 0x800900800900ll,
01531:                    partsUsed | 0x10l);
01532:       if(!(puzzle & 0x200300200300ll))
01533:         doSolve(9, 0x200ll, puzzle | 0x200300200300ll,
01534:                    partsUsed | 0x10l);
01535:     piece5at8:
01536:       if (partsUsed & 0x20l) goto piece6at8;
01537:       if (!(puzzle & 0x100100100100ll)) {
01538:          if(!(puzzle & 0x120100100100ll))
01539:            doSolve(9, 0x200ll, puzzle | 0x120100100100ll,
01540:                    partsUsed | 0x20l);
01541:          if(!(puzzle & 0x180100100100ll))
01542:            doSolve(9, 0x200ll, puzzle | 0x180100100100ll,
01543:                    partsUsed | 0x20l);
01544:          if(!(puzzle & 0x100100100900ll))
01545:            doSolve(9, 0x200ll, puzzle | 0x100100100900ll,
01546:                    partsUsed | 0x20l);
01547:          if(!(puzzle & 0x900100100100ll))
01548:            doSolve(9, 0x200ll, puzzle | 0x900100100100ll,
01549:                    partsUsed | 0x20l);
01550:          if(!(puzzle & 0x100100100300ll))
01551:            doSolve(9, 0x200ll, puzzle | 0x100100100300ll,
01552:                    partsUsed | 0x20l);
01553:          if(!(puzzle & 0x300100100100ll))
01554:            doSolve(9, 0x200ll, puzzle | 0x300100100100ll,
01555:                    partsUsed | 0x20l);
01556:       }
01557:       if(!(puzzle & 0x800800800900ll))
01558:         doSolve(9, 0x200ll, puzzle | 0x800800800900ll,
01559:                    partsUsed | 0x20l);
01560:       if(!(puzzle & 0x200200200300ll))
01561:         doSolve(9, 0x200ll, puzzle | 0x200200200300ll,
01562:                    partsUsed | 0x20l);
01563:     piece6at8:
01564:       if (partsUsed & 0x40l) goto piece7at8;
01565:       if (!(puzzle & 0x100100100100ll)) {
01566:          if(!(puzzle & 0x100120100100ll))
01567:            doSolve(9, 0x200ll, puzzle | 0x100120100100ll,
01568:                    partsUsed | 0x40l);
01569:          if(!(puzzle & 0x100100180100ll))
01570:            doSolve(9, 0x200ll, puzzle | 0x100100180100ll,
01571:                    partsUsed | 0x40l);
01572:          if(!(puzzle & 0x100180100100ll))
01573:            doSolve(9, 0x200ll, puzzle | 0x100180100100ll,
01574:                    partsUsed | 0x40l);
01575:          if(!(puzzle & 0x100100900100ll))
01576:            doSolve(9, 0x200ll, puzzle | 0x100100900100ll,
01577:                    partsUsed | 0x40l);
01578:          if(!(puzzle & 0x100900100100ll))
01579:            doSolve(9, 0x200ll, puzzle | 0x100900100100ll,
01580:                    partsUsed | 0x40l);
01581:          if(!(puzzle & 0x100100300100ll))
01582:            doSolve(9, 0x200ll, puzzle | 0x100100300100ll,
01583:                    partsUsed | 0x40l);
01584:          if(!(puzzle & 0x100300100100ll))
01585:            doSolve(9, 0x200ll, puzzle | 0x100300100100ll,
01586:                    partsUsed | 0x40l);
01587:       }
01588:       if(!(puzzle & 0x4920100ll))
01589:         doSolve(9, 0x200ll, puzzle | 0x4920100ll,
01590:                    partsUsed | 0x40l);
01591:       if(!(puzzle & 0x100100120100ll))
01592:         doSolve(9, 0x200ll, puzzle | 0x100100120100ll,
01593:                    partsUsed | 0x40l);
01594:     piece7at8:
01595:       if (partsUsed & 0x80l) goto piece8at8;
01596:       if(!(puzzle & 0x900100900ll))
01597:         doSolve(9, 0x200ll, puzzle | 0x900100900ll,
01598:                    partsUsed | 0x80l);
01599:       if(!(puzzle & 0x900800900ll))
01600:         doSolve(9, 0x200ll, puzzle | 0x900800900ll,
01601:                    partsUsed | 0x80l);
01602:       if(!(puzzle & 0x4904100ll))
01603:         doSolve(9, 0x200ll, puzzle | 0x4904100ll,
01604:                    partsUsed | 0x80l);
01605:       if(!(puzzle & 0x4104900ll))
01606:         doSolve(9, 0x200ll, puzzle | 0x4104900ll,
01607:                    partsUsed | 0x80l);
01608:       if(!(puzzle & 0xcb00ll))
01609:         doSolve(9, 0x200ll, puzzle | 0xcb00ll,
01610:                    partsUsed | 0x80l);
01611:       if(!(puzzle & 0xd300ll))
01612:         doSolve(9, 0x200ll, puzzle | 0xd300ll,
01613:                    partsUsed | 0x80l);
01614:       if(!(puzzle & 0x300200300ll))
01615:         doSolve(9, 0x200ll, puzzle | 0x300200300ll,
01616:                    partsUsed | 0x80l);
01617:       if(!(puzzle & 0x300100300ll))
01618:         doSolve(9, 0x200ll, puzzle | 0x300100300ll,
01619:                    partsUsed | 0x80l);
01620:     piece8at8:
01621:       if (partsUsed & 0x100l) goto piece9at8;
01622:       if(!(puzzle & 0x190100ll))
01623:         doSolve(9, 0x200ll, puzzle | 0x190100ll,
01624:                    partsUsed | 0x100l);
01625:       if(!(puzzle & 0x180900ll))
01626:         doSolve(9, 0x200ll, puzzle | 0x180900ll,
01627:                    partsUsed | 0x100l);
01628:       if(!(puzzle & 0x240300ll))
01629:         doSolve(9, 0x200ll, puzzle | 0x240300ll,
01630:                    partsUsed | 0x100l);
01631:       if(!(puzzle & 0x200b00ll))
01632:         doSolve(9, 0x200ll, puzzle | 0x200b00ll,
01633:                    partsUsed | 0x100l);
01634:       if(!(puzzle & 0x160100ll))
01635:         doSolve(9, 0x200ll, puzzle | 0x160100ll,
01636:                    partsUsed | 0x100l);
01637:       if(!(puzzle & 0x400d00ll))
01638:         doSolve(9, 0x200ll, puzzle | 0x400d00ll,
01639:                    partsUsed | 0x100l);
01640:       if(!(puzzle & 0xd00100ll))
01641:         doSolve(9, 0x200ll, puzzle | 0xd00100ll,
01642:                    partsUsed | 0x100l);
01643:       if(!(puzzle & 0x900300ll))
01644:         doSolve(9, 0x200ll, puzzle | 0x900300ll,
01645:                    partsUsed | 0x100l);
01646:       if(!(puzzle & 0x1300100ll))
01647:         doSolve(9, 0x200ll, puzzle | 0x1300100ll,
01648:                    partsUsed | 0x100l);
01649:       if(!(puzzle & 0x1800900ll))
01650:         doSolve(9, 0x200ll, puzzle | 0x1800900ll,
01651:                    partsUsed | 0x100l);
01652:       if(!(puzzle & 0x101900ll))
01653:         doSolve(9, 0x200ll, puzzle | 0x101900ll,
01654:                    partsUsed | 0x100l);
01655:       if(!(puzzle & 0x1001300ll))
01656:         doSolve(9, 0x200ll, puzzle | 0x1001300ll,
01657:                    partsUsed | 0x100l);
01658:     piece9at8:
01659:       if (partsUsed & 0x200l) goto piece10at8;
01660:       if (!(puzzle & 0x100100100ll)) {
01661:          if(!(puzzle & 0x100120900ll))
01662:            doSolve(9, 0x200ll, puzzle | 0x100120900ll,
01663:                    partsUsed | 0x200l);
01664:          if(!(puzzle & 0x120900100ll))
01665:            doSolve(9, 0x200ll, puzzle | 0x120900100ll,
01666:                    partsUsed | 0x200l);
01667:          if(!(puzzle & 0x900120100ll))
01668:            doSolve(9, 0x200ll, puzzle | 0x900120100ll,
01669:                    partsUsed | 0x200l);
01670:          if(!(puzzle & 0x100180300ll))
01671:            doSolve(9, 0x200ll, puzzle | 0x100180300ll,
01672:                    partsUsed | 0x200l);
01673:          if(!(puzzle & 0x300180100ll))
01674:            doSolve(9, 0x200ll, puzzle | 0x300180100ll,
01675:                    partsUsed | 0x200l);
01676:          if(!(puzzle & 0x180300100ll))
01677:            doSolve(9, 0x200ll, puzzle | 0x180300100ll,
01678:                    partsUsed | 0x200l);
01679:       }
01680:       if (!(puzzle & 0x900100ll)) {
01681:          if(!(puzzle & 0x800920100ll))
01682:            doSolve(9, 0x200ll, puzzle | 0x800920100ll,
01683:                    partsUsed | 0x200l);
01684:          if(!(puzzle & 0x20920100ll))
01685:            doSolve(9, 0x200ll, puzzle | 0x20920100ll,
01686:                    partsUsed | 0x200l);
01687:          if(!(puzzle & 0x804900100ll))
01688:            doSolve(9, 0x200ll, puzzle | 0x804900100ll,
01689:                    partsUsed | 0x200l);
01690:       }
01691:       if (!(puzzle & 0xd00ll)) {
01692:          if(!(puzzle & 0x9d00ll))
01693:            doSolve(9, 0x200ll, puzzle | 0x9d00ll,
01694:                    partsUsed | 0x200l);
01695:          if(!(puzzle & 0x3d00ll))
01696:            doSolve(9, 0x200ll, puzzle | 0x3d00ll,
01697:                    partsUsed | 0x200l);
01698:          if(!(puzzle & 0x4f00ll))
01699:            doSolve(9, 0x200ll, puzzle | 0x4f00ll,
01700:                    partsUsed | 0x200l);
01701:          if(!(puzzle & 0xcd00ll))
01702:            doSolve(9, 0x200ll, puzzle | 0xcd00ll,
01703:                    partsUsed | 0x200l);
01704:       }
01705:       if(!(puzzle & 0x7900ll))
01706:         doSolve(9, 0x200ll, puzzle | 0x7900ll,
01707:                    partsUsed | 0x200l);
01708:       if(!(puzzle & 0x80380100ll))
01709:         doSolve(9, 0x200ll, puzzle | 0x80380100ll,
01710:                    partsUsed | 0x200l);
01711:       if(!(puzzle & 0x200380100ll))
01712:         doSolve(9, 0x200ll, puzzle | 0x200380100ll,
01713:                    partsUsed | 0x200l);
01714:       if(!(puzzle & 0x804800900ll))
01715:         doSolve(9, 0x200ll, puzzle | 0x804800900ll,
01716:                    partsUsed | 0x200l);
01717:     piece10at8:
01718:       if (partsUsed & 0x400l) goto piece11at8;
01719:       if (!(puzzle & 0x800900ll)) {
01720:          if(!(puzzle & 0x100900900ll))
01721:            doSolve(9, 0x200ll, puzzle | 0x100900900ll,
01722:                    partsUsed | 0x400l);
01723:          if(!(puzzle & 0x4900900ll))
01724:            doSolve(9, 0x200ll, puzzle | 0x4900900ll,
01725:                    partsUsed | 0x400l);
01726:          if(!(puzzle & 0x4804900ll))
01727:            doSolve(9, 0x200ll, puzzle | 0x4804900ll,
01728:                    partsUsed | 0x400l);
01729:          if(!(puzzle & 0x904900ll))
01730:            doSolve(9, 0x200ll, puzzle | 0x904900ll,
01731:                    partsUsed | 0x400l);
01732:          if(!(puzzle & 0x800900900ll))
01733:            doSolve(9, 0x200ll, puzzle | 0x800900900ll,
01734:                    partsUsed | 0x400l);
01735:       }
01736:       if (!(puzzle & 0x100100100ll)) {
01737:          if(!(puzzle & 0x900900100ll))
01738:            doSolve(9, 0x200ll, puzzle | 0x900900100ll,
01739:                    partsUsed | 0x400l);
01740:          if(!(puzzle & 0x100300300ll))
01741:            doSolve(9, 0x200ll, puzzle | 0x100300300ll,
01742:                    partsUsed | 0x400l);
01743:          if(!(puzzle & 0x300300100ll))
01744:            doSolve(9, 0x200ll, puzzle | 0x300300100ll,
01745:                    partsUsed | 0x400l);
01746:       }
01747:       if (!(puzzle & 0x1900ll)) {
01748:          if(!(puzzle & 0x5b00ll))
01749:            doSolve(9, 0x200ll, puzzle | 0x5b00ll,
01750:                    partsUsed | 0x400l);
01751:          if(!(puzzle & 0x9b00ll))
01752:            doSolve(9, 0x200ll, puzzle | 0x9b00ll,
01753:                    partsUsed | 0x400l);
01754:          if(!(puzzle & 0xd900ll))
01755:            doSolve(9, 0x200ll, puzzle | 0xd900ll,
01756:                    partsUsed | 0x400l);
01757:       }
01758:       if(!(puzzle & 0x120120100ll))
01759:         doSolve(9, 0x200ll, puzzle | 0x120120100ll,
01760:                    partsUsed | 0x400l);
01761:       if(!(puzzle & 0x920900ll))
01762:         doSolve(9, 0x200ll, puzzle | 0x920900ll,
01763:                    partsUsed | 0x400l);
01764:       if(!(puzzle & 0x1f00ll))
01765:         doSolve(9, 0x200ll, puzzle | 0x1f00ll,
01766:                    partsUsed | 0x400l);
01767:       if(!(puzzle & 0x6d00ll))
01768:         doSolve(9, 0x200ll, puzzle | 0x6d00ll,
01769:                    partsUsed | 0x400l);
01770:       if(!(puzzle & 0x380300ll))
01771:         doSolve(9, 0x200ll, puzzle | 0x380300ll,
01772:                    partsUsed | 0x400l);
01773:       if(!(puzzle & 0x180180100ll))
01774:         doSolve(9, 0x200ll, puzzle | 0x180180100ll,
01775:                    partsUsed | 0x400l);
01776:       if(!(puzzle & 0x200300300ll))
01777:         doSolve(9, 0x200ll, puzzle | 0x200300300ll,
01778:                    partsUsed | 0x400l);
01779:     piece11at8:
01780:       if (partsUsed & 0x800l) goto piece12at8;
01781:       if (!(puzzle & 0x120100ll)) {
01782:          if(!(puzzle & 0x1b0100ll))
01783:            doSolve(9, 0x200ll, puzzle | 0x1b0100ll,
01784:                    partsUsed | 0x800l);
01785:          if(!(puzzle & 0x360100ll))
01786:            doSolve(9, 0x200ll, puzzle | 0x360100ll,
01787:                    partsUsed | 0x800l);
01788:          if(!(puzzle & 0x320300ll))
01789:            doSolve(9, 0x200ll, puzzle | 0x320300ll,
01790:                    partsUsed | 0x800l);
01791:       }
01792:       if (!(puzzle & 0x100300ll)) {
01793:          if(!(puzzle & 0x340300ll))
01794:            doSolve(9, 0x200ll, puzzle | 0x340300ll,
01795:                    partsUsed | 0x800l);
01796:          if(!(puzzle & 0x101b00ll))
01797:            doSolve(9, 0x200ll, puzzle | 0x101b00ll,
01798:                    partsUsed | 0x800l);
01799:          if(!(puzzle & 0xb00300ll))
01800:            doSolve(9, 0x200ll, puzzle | 0xb00300ll,
01801:                    partsUsed | 0x800l);
01802:          if(!(puzzle & 0x300b00ll))
01803:            doSolve(9, 0x200ll, puzzle | 0x300b00ll,
01804:                    partsUsed | 0x800l);
01805:          if(!(puzzle & 0x301300ll))
01806:            doSolve(9, 0x200ll, puzzle | 0x301300ll,
01807:                    partsUsed | 0x800l);
01808:          if(!(puzzle & 0x1300300ll))
01809:            doSolve(9, 0x200ll, puzzle | 0x1300300ll,
01810:                    partsUsed | 0x800l);
01811:          if(!(puzzle & 0x900b00ll))
01812:            doSolve(9, 0x200ll, puzzle | 0x900b00ll,
01813:                    partsUsed | 0x800l);
01814:       }
01815:       if (!(puzzle & 0xc00100ll)) {
01816:          if(!(puzzle & 0xd80100ll))
01817:            doSolve(9, 0x200ll, puzzle | 0xd80100ll,
01818:                    partsUsed | 0x800l);
01819:          if(!(puzzle & 0xd00900ll))
01820:            doSolve(9, 0x200ll, puzzle | 0xd00900ll,
01821:                    partsUsed | 0x800l);
01822:          if(!(puzzle & 0xc00d00ll))
01823:            doSolve(9, 0x200ll, puzzle | 0xc00d00ll,
01824:                    partsUsed | 0x800l);
01825:       }
01826:       if (!(puzzle & 0x800900ll)) {
01827:          if(!(puzzle & 0x980900ll))
01828:            doSolve(9, 0x200ll, puzzle | 0x980900ll,
01829:                    partsUsed | 0x800l);
01830:          if(!(puzzle & 0x900d00ll))
01831:            doSolve(9, 0x200ll, puzzle | 0x900d00ll,
01832:                    partsUsed | 0x800l);
01833:          if(!(puzzle & 0x1801900ll))
01834:            doSolve(9, 0x200ll, puzzle | 0x1801900ll,
01835:                    partsUsed | 0x800l);
01836:          if(!(puzzle & 0xb00900ll))
01837:            doSolve(9, 0x200ll, puzzle | 0xb00900ll,
01838:                    partsUsed | 0x800l);
01839:          if(!(puzzle & 0x901900ll))
01840:            doSolve(9, 0x200ll, puzzle | 0x901900ll,
01841:                    partsUsed | 0x800l);
01842:          if(!(puzzle & 0x801b00ll))
01843:            doSolve(9, 0x200ll, puzzle | 0x801b00ll,
01844:                    partsUsed | 0x800l);
01845:          if(!(puzzle & 0x1900900ll))
01846:            doSolve(9, 0x200ll, puzzle | 0x1900900ll,
01847:                    partsUsed | 0x800l);
01848:       }
01849:       if (!(puzzle & 0x1300ll)) {
01850:          if(!(puzzle & 0x1201300ll))
01851:            doSolve(9, 0x200ll, puzzle | 0x1201300ll,
01852:                    partsUsed | 0x800l);
01853:          if(!(puzzle & 0x1001b00ll))
01854:            doSolve(9, 0x200ll, puzzle | 0x1001b00ll,
01855:                    partsUsed | 0x800l);
01856:          if(!(puzzle & 0x201b00ll))
01857:            doSolve(9, 0x200ll, puzzle | 0x201b00ll,
01858:                    partsUsed | 0x800l);
01859:       }
01860:       if(!(puzzle & 0x1b00100ll))
01861:         doSolve(9, 0x200ll, puzzle | 0x1b00100ll,
01862:                    partsUsed | 0x800l);
01863:     piece12at8:
01864:     break;
01865:    case 9:
01866:       if (partsUsed & 0x2l) goto piece2at9;
01867:       if(!(puzzle & 0x40241200ll))
01868:         doSolve(10, 0x400ll, puzzle | 0x40241200ll,
01869:                    partsUsed | 0x2l);
01870:       if(!(puzzle & 0x7a00ll))
01871:         doSolve(10, 0x400ll, puzzle | 0x7a00ll,
01872:                    partsUsed | 0x2l);
01873:       if(!(puzzle & 0x180300200ll))
01874:         doSolve(10, 0x400ll, puzzle | 0x180300200ll,
01875:                    partsUsed | 0x2l);
01876:       if(!(puzzle & 0x9001200200ll))
01877:         doSolve(10, 0x400ll, puzzle | 0x9001200200ll,
01878:                    partsUsed | 0x2l);
01879:       if(!(puzzle & 0x8009001200ll))
01880:         doSolve(10, 0x400ll, puzzle | 0x8009001200ll,
01881:                    partsUsed | 0x2l);
01882:     piece2at9:
01883:       if (partsUsed & 0x4l) goto piece3at9;
01884:       if (!(puzzle & 0x200200200ll)) {
01885:          if(!(puzzle & 0x1240200200ll))
01886:            doSolve(10, 0x400ll, puzzle | 0x1240200200ll,
01887:                    partsUsed | 0x4l);
01888:          if(!(puzzle & 0x200380200ll))
01889:            doSolve(10, 0x400ll, puzzle | 0x200380200ll,
01890:                    partsUsed | 0x4l);
01891:          if(!(puzzle & 0x209200200ll))
01892:            doSolve(10, 0x400ll, puzzle | 0x209200200ll,
01893:                    partsUsed | 0x4l);
01894:       }
01895:       if(!(puzzle & 0x9e00ll))
01896:         doSolve(10, 0x400ll, puzzle | 0x9e00ll,
01897:                    partsUsed | 0x4l);
01898:       if(!(puzzle & 0x1001009200ll))
01899:         doSolve(10, 0x400ll, puzzle | 0x1001009200ll,
01900:                    partsUsed | 0x4l);
01901:     piece3at9:
01902:       if (partsUsed & 0x8l) goto piece4at9;
01903:       if(!(puzzle & 0x240201200ll))
01904:         doSolve(10, 0x400ll, puzzle | 0x240201200ll,
01905:                    partsUsed | 0x8l);
01906:       if(!(puzzle & 0x3e00ll))
01907:         doSolve(10, 0x400ll, puzzle | 0x3e00ll,
01908:                    partsUsed | 0x8l);
01909:       if(!(puzzle & 0x80380200ll))
01910:         doSolve(10, 0x400ll, puzzle | 0x80380200ll,
01911:                    partsUsed | 0x8l);
01912:       if(!(puzzle & 0x8009200200ll))
01913:         doSolve(10, 0x400ll, puzzle | 0x8009200200ll,
01914:                    partsUsed | 0x8l);
01915:       if(!(puzzle & 0x9001001200ll))
01916:         doSolve(10, 0x400ll, puzzle | 0x9001001200ll,
01917:                    partsUsed | 0x8l);
01918:     piece4at9:
01919:       if (partsUsed & 0x10l) goto piece5at9;
01920:       if (!(puzzle & 0x200200200200ll)) {
01921:          if(!(puzzle & 0x300200300200ll))
01922:            doSolve(10, 0x400ll, puzzle | 0x300200300200ll,
01923:                    partsUsed | 0x10l);
01924:          if(!(puzzle & 0x1200201200200ll))
01925:            doSolve(10, 0x400ll, puzzle | 0x1200201200200ll,
01926:                    partsUsed | 0x10l);
01927:          if(!(puzzle & 0x201200201200ll))
01928:            doSolve(10, 0x400ll, puzzle | 0x201200201200ll,
01929:                    partsUsed | 0x10l);
01930:       }
01931:       if(!(puzzle & 0x9248200ll))
01932:         doSolve(10, 0x400ll, puzzle | 0x9248200ll,
01933:                    partsUsed | 0x10l);
01934:       if(!(puzzle & 0x240200240200ll))
01935:         doSolve(10, 0x400ll, puzzle | 0x240200240200ll,
01936:                    partsUsed | 0x10l);
01937:       if(!(puzzle & 0x1001201001200ll))
01938:         doSolve(10, 0x400ll, puzzle | 0x1001201001200ll,
01939:                    partsUsed | 0x10l);
01940:     piece5at9:
01941:       if (partsUsed & 0x20l) goto piece6at9;
01942:       if (!(puzzle & 0x200200200200ll)) {
01943:          if(!(puzzle & 0x240200200200ll))
01944:            doSolve(10, 0x400ll, puzzle | 0x240200200200ll,
01945:                    partsUsed | 0x20l);
01946:          if(!(puzzle & 0x300200200200ll))
01947:            doSolve(10, 0x400ll, puzzle | 0x300200200200ll,
01948:                    partsUsed | 0x20l);
01949:          if(!(puzzle & 0x200200201200ll))
01950:            doSolve(10, 0x400ll, puzzle | 0x200200201200ll,
01951:                    partsUsed | 0x20l);
01952:          if(!(puzzle & 0x1200200200200ll))
01953:            doSolve(10, 0x400ll, puzzle | 0x1200200200200ll,
01954:                    partsUsed | 0x20l);
01955:       }
01956:       if(!(puzzle & 0x1001001001200ll))
01957:         doSolve(10, 0x400ll, puzzle | 0x1001001001200ll,
01958:                    partsUsed | 0x20l);
01959:     piece6at9:
01960:       if (partsUsed & 0x40l) goto piece7at9;
01961:       if (!(puzzle & 0x200200200200ll)) {
01962:          if(!(puzzle & 0x200240200200ll))
01963:            doSolve(10, 0x400ll, puzzle | 0x200240200200ll,
01964:                    partsUsed | 0x40l);
01965:          if(!(puzzle & 0x200200300200ll))
01966:            doSolve(10, 0x400ll, puzzle | 0x200200300200ll,
01967:                    partsUsed | 0x40l);
01968:          if(!(puzzle & 0x200300200200ll))
01969:            doSolve(10, 0x400ll, puzzle | 0x200300200200ll,
01970:                    partsUsed | 0x40l);
01971:          if(!(puzzle & 0x200201200200ll))
01972:            doSolve(10, 0x400ll, puzzle | 0x200201200200ll,
01973:                    partsUsed | 0x40l);
01974:          if(!(puzzle & 0x201200200200ll))
01975:            doSolve(10, 0x400ll, puzzle | 0x201200200200ll,
01976:                    partsUsed | 0x40l);
01977:       }
01978:       if(!(puzzle & 0x9240200ll))
01979:         doSolve(10, 0x400ll, puzzle | 0x9240200ll,
01980:                    partsUsed | 0x40l);
01981:       if(!(puzzle & 0x200200240200ll))
01982:         doSolve(10, 0x400ll, puzzle | 0x200200240200ll,
01983:                    partsUsed | 0x40l);
01984:     piece7at9:
01985:       if (partsUsed & 0x80l) goto piece8at9;
01986:       if(!(puzzle & 0x1200201200ll))
01987:         doSolve(10, 0x400ll, puzzle | 0x1200201200ll,
01988:                    partsUsed | 0x80l);
01989:       if(!(puzzle & 0x1201001200ll))
01990:         doSolve(10, 0x400ll, puzzle | 0x1201001200ll,
01991:                    partsUsed | 0x80l);
01992:       if(!(puzzle & 0x9208200ll))
01993:         doSolve(10, 0x400ll, puzzle | 0x9208200ll,
01994:                    partsUsed | 0x80l);
01995:       if(!(puzzle & 0x8209200ll))
01996:         doSolve(10, 0x400ll, puzzle | 0x8209200ll,
01997:                    partsUsed | 0x80l);
01998:     piece8at9:
01999:       if (partsUsed & 0x100l) goto piece9at9;
02000:       if(!(puzzle & 0x320200ll))
02001:         doSolve(10, 0x400ll, puzzle | 0x320200ll,
02002:                    partsUsed | 0x100l);
02003:       if(!(puzzle & 0x301200ll))
02004:         doSolve(10, 0x400ll, puzzle | 0x301200ll,
02005:                    partsUsed | 0x100l);
02006:       if(!(puzzle & 0x801a00ll))
02007:         doSolve(10, 0x400ll, puzzle | 0x801a00ll,
02008:                    partsUsed | 0x100l);
02009:       if(!(puzzle & 0x1a00200ll))
02010:         doSolve(10, 0x400ll, puzzle | 0x1a00200ll,
02011:                    partsUsed | 0x100l);
02012:     piece9at9:
02013:       if (partsUsed & 0x200l) goto piece10at9;
02014:       if (!(puzzle & 0x200200200ll)) {
02015:          if(!(puzzle & 0x200241200ll))
02016:            doSolve(10, 0x400ll, puzzle | 0x200241200ll,
02017:                    partsUsed | 0x200l);
02018:          if(!(puzzle & 0x241200200ll))
02019:            doSolve(10, 0x400ll, puzzle | 0x241200200ll,
02020:                    partsUsed | 0x200l);
02021:          if(!(puzzle & 0x1200240200ll))
02022:            doSolve(10, 0x400ll, puzzle | 0x1200240200ll,
02023:                    partsUsed | 0x200l);
02024:       }
02025:       if (!(puzzle & 0x1200200ll)) {
02026:          if(!(puzzle & 0x1001240200ll))
02027:            doSolve(10, 0x400ll, puzzle | 0x1001240200ll,
02028:                    partsUsed | 0x200l);
02029:          if(!(puzzle & 0x41240200ll))
02030:            doSolve(10, 0x400ll, puzzle | 0x41240200ll,
02031:                    partsUsed | 0x200l);
02032:          if(!(puzzle & 0x1009200200ll))
02033:            doSolve(10, 0x400ll, puzzle | 0x1009200200ll,
02034:                    partsUsed | 0x200l);
02035:       }
02036:       if(!(puzzle & 0x5e00ll))
02037:         doSolve(10, 0x400ll, puzzle | 0x5e00ll,
02038:                    partsUsed | 0x200l);
02039:       if(!(puzzle & 0x100380200ll))
02040:         doSolve(10, 0x400ll, puzzle | 0x100380200ll,
02041:                    partsUsed | 0x200l);
02042:       if(!(puzzle & 0x1009001200ll))
02043:         doSolve(10, 0x400ll, puzzle | 0x1009001200ll,
02044:                    partsUsed | 0x200l);
02045:     piece10at9:
02046:       if (partsUsed & 0x400l) goto piece11at9;
02047:       if (!(puzzle & 0x9200ll)) {
02048:          if(!(puzzle & 0xda00ll))
02049:            doSolve(10, 0x400ll, puzzle | 0xda00ll,
02050:                    partsUsed | 0x400l);
02051:          if(!(puzzle & 0x9009200ll))
02052:            doSolve(10, 0x400ll, puzzle | 0x9009200ll,
02053:                    partsUsed | 0x400l);
02054:          if(!(puzzle & 0x1209200ll))
02055:            doSolve(10, 0x400ll, puzzle | 0x1209200ll,
02056:                    partsUsed | 0x400l);
02057:       }
02058:       if (!(puzzle & 0x200200200ll)) {
02059:          if(!(puzzle & 0x300300200ll))
02060:            doSolve(10, 0x400ll, puzzle | 0x300300200ll,
02061:                    partsUsed | 0x400l);
02062:          if(!(puzzle & 0x201201200ll))
02063:            doSolve(10, 0x400ll, puzzle | 0x201201200ll,
02064:                    partsUsed | 0x400l);
02065:          if(!(puzzle & 0x1201200200ll))
02066:            doSolve(10, 0x400ll, puzzle | 0x1201200200ll,
02067:                    partsUsed | 0x400l);
02068:       }
02069:       if(!(puzzle & 0x240240200ll))
02070:         doSolve(10, 0x400ll, puzzle | 0x240240200ll,
02071:                    partsUsed | 0x400l);
02072:       if(!(puzzle & 0x1241200ll))
02073:         doSolve(10, 0x400ll, puzzle | 0x1241200ll,
02074:                    partsUsed | 0x400l);
02075:       if(!(puzzle & 0x9201200ll))
02076:         doSolve(10, 0x400ll, puzzle | 0x9201200ll,
02077:                    partsUsed | 0x400l);
02078:       if(!(puzzle & 0x1001201200ll))
02079:         doSolve(10, 0x400ll, puzzle | 0x1001201200ll,
02080:                    partsUsed | 0x400l);
02081:     piece11at9:
02082:       if (partsUsed & 0x800l) goto piece12at9;
02083:       if (!(puzzle & 0x300200ll)) {
02084:          if(!(puzzle & 0x360200ll))
02085:            doSolve(10, 0x400ll, puzzle | 0x360200ll,
02086:                    partsUsed | 0x800l);
02087:          if(!(puzzle & 0x1b00200ll))
02088:            doSolve(10, 0x400ll, puzzle | 0x1b00200ll,
02089:                    partsUsed | 0x800l);
02090:          if(!(puzzle & 0x1301200ll))
02091:            doSolve(10, 0x400ll, puzzle | 0x1301200ll,
02092:                    partsUsed | 0x800l);
02093:       }
02094:       if (!(puzzle & 0x1001200ll)) {
02095:          if(!(puzzle & 0x1a01200ll))
02096:            doSolve(10, 0x400ll, puzzle | 0x1a01200ll,
02097:                    partsUsed | 0x800l);
02098:          if(!(puzzle & 0x1801a00ll))
02099:            doSolve(10, 0x400ll, puzzle | 0x1801a00ll,
02100:                    partsUsed | 0x800l);
02101:          if(!(puzzle & 0x1201a00ll))
02102:            doSolve(10, 0x400ll, puzzle | 0x1201a00ll,
02103:                    partsUsed | 0x800l);
02104:       }
02105:     piece12at9:
02106:     break;
02107:    case 10:
02108:       if (partsUsed & 0x2l) goto piece2at10;
02109:       if(!(puzzle & 0x90480400ll))
02110:         doSolve(11, 0x800ll, puzzle | 0x90480400ll,
02111:                    partsUsed | 0x2l);
02112:       if(!(puzzle & 0x80482400ll))
02113:         doSolve(11, 0x800ll, puzzle | 0x80482400ll,
02114:                    partsUsed | 0x2l);
02115:       if(!(puzzle & 0x1001800c00ll))
02116:         doSolve(11, 0x800ll, puzzle | 0x1001800c00ll,
02117:                    partsUsed | 0x2l);
02118:       if(!(puzzle & 0x1800c00400ll))
02119:         doSolve(11, 0x800ll, puzzle | 0x1800c00400ll,
02120:                    partsUsed | 0x2l);
02121:     piece2at10:
02122:       if (partsUsed & 0x4l) goto piece3at10;
02123:       if (!(puzzle & 0x400400400ll)) {
02124:          if(!(puzzle & 0x400490400ll))
02125:            doSolve(11, 0x800ll, puzzle | 0x400490400ll,
02126:                    partsUsed | 0x4l);
02127:          if(!(puzzle & 0x2480400400ll))
02128:            doSolve(11, 0x800ll, puzzle | 0x2480400400ll,
02129:                    partsUsed | 0x4l);
02130:          if(!(puzzle & 0x401c00400ll))
02131:            doSolve(11, 0x800ll, puzzle | 0x401c00400ll,
02132:                    partsUsed | 0x4l);
02133:       }
02134:       if(!(puzzle & 0x800801c00ll))
02135:         doSolve(11, 0x800ll, puzzle | 0x800801c00ll,
02136:                    partsUsed | 0x4l);
02137:     piece3at10:
02138:       if (partsUsed & 0x8l) goto piece4at10;
02139:       if(!(puzzle & 0x10490400ll))
02140:         doSolve(11, 0x800ll, puzzle | 0x10490400ll,
02141:                    partsUsed | 0x8l);
02142:       if(!(puzzle & 0x480402400ll))
02143:         doSolve(11, 0x800ll, puzzle | 0x480402400ll,
02144:                    partsUsed | 0x8l);
02145:       if(!(puzzle & 0x1001c00400ll))
02146:         doSolve(11, 0x800ll, puzzle | 0x1001c00400ll,
02147:                    partsUsed | 0x8l);
02148:       if(!(puzzle & 0x1800800c00ll))
02149:         doSolve(11, 0x800ll, puzzle | 0x1800800c00ll,
02150:                    partsUsed | 0x8l);
02151:     piece4at10:
02152:       if (partsUsed & 0x10l) goto piece5at10;
02153:       if (!(puzzle & 0x400400400400ll)) {
02154:          if(!(puzzle & 0x480400480400ll))
02155:            doSolve(11, 0x800ll, puzzle | 0x480400480400ll,
02156:                    partsUsed | 0x10l);
02157:          if(!(puzzle & 0x2400402400400ll))
02158:            doSolve(11, 0x800ll, puzzle | 0x2400402400400ll,
02159:                    partsUsed | 0x10l);
02160:          if(!(puzzle & 0x402400402400ll))
02161:            doSolve(11, 0x800ll, puzzle | 0x402400402400ll,
02162:                    partsUsed | 0x10l);
02163:          if(!(puzzle & 0xc00400c00400ll))
02164:            doSolve(11, 0x800ll, puzzle | 0xc00400c00400ll,
02165:                    partsUsed | 0x10l);
02166:          if(!(puzzle & 0x400c00400c00ll))
02167:            doSolve(11, 0x800ll, puzzle | 0x400c00400c00ll,
02168:                    partsUsed | 0x10l);
02169:       }
02170:       if(!(puzzle & 0x2002402002400ll))
02171:         doSolve(11, 0x800ll, puzzle | 0x2002402002400ll,
02172:                    partsUsed | 0x10l);
02173:       if(!(puzzle & 0x800c00800c00ll))
02174:         doSolve(11, 0x800ll, puzzle | 0x800c00800c00ll,
02175:                    partsUsed | 0x10l);
02176:     piece5at10:
02177:       if (partsUsed & 0x20l) goto piece6at10;
02178:       if (!(puzzle & 0x400400400400ll)) {
02179:          if(!(puzzle & 0x480400400400ll))
02180:            doSolve(11, 0x800ll, puzzle | 0x480400400400ll,
02181:                    partsUsed | 0x20l);
02182:          if(!(puzzle & 0x400400402400ll))
02183:            doSolve(11, 0x800ll, puzzle | 0x400400402400ll,
02184:                    partsUsed | 0x20l);
02185:          if(!(puzzle & 0x2400400400400ll))
02186:            doSolve(11, 0x800ll, puzzle | 0x2400400400400ll,
02187:                    partsUsed | 0x20l);
02188:          if(!(puzzle & 0x400400400c00ll))
02189:            doSolve(11, 0x800ll, puzzle | 0x400400400c00ll,
02190:                    partsUsed | 0x20l);
02191:          if(!(puzzle & 0xc00400400400ll))
02192:            doSolve(11, 0x800ll, puzzle | 0xc00400400400ll,
02193:                    partsUsed | 0x20l);
02194:       }
02195:       if(!(puzzle & 0x2002002002400ll))
02196:         doSolve(11, 0x800ll, puzzle | 0x2002002002400ll,
02197:                    partsUsed | 0x20l);
02198:       if(!(puzzle & 0x800800800c00ll))
02199:         doSolve(11, 0x800ll, puzzle | 0x800800800c00ll,
02200:                    partsUsed | 0x20l);
02201:     piece6at10:
02202:       if (partsUsed & 0x40l) goto piece7at10;
02203:       if (!(puzzle & 0x400400400400ll)) {
02204:          if(!(puzzle & 0x400480400400ll))
02205:            doSolve(11, 0x800ll, puzzle | 0x400480400400ll,
02206:                    partsUsed | 0x40l);
02207:          if(!(puzzle & 0x400402400400ll))
02208:            doSolve(11, 0x800ll, puzzle | 0x400402400400ll,
02209:                    partsUsed | 0x40l);
02210:          if(!(puzzle & 0x402400400400ll))
02211:            doSolve(11, 0x800ll, puzzle | 0x402400400400ll,
02212:                    partsUsed | 0x40l);
02213:          if(!(puzzle & 0x400400c00400ll))
02214:            doSolve(11, 0x800ll, puzzle | 0x400400c00400ll,
02215:                    partsUsed | 0x40l);
02216:          if(!(puzzle & 0x400c00400400ll))
02217:            doSolve(11, 0x800ll, puzzle | 0x400c00400400ll,
02218:                    partsUsed | 0x40l);
02219:       }
02220:       if(!(puzzle & 0x2490400ll))
02221:         doSolve(11, 0x800ll, puzzle | 0x2490400ll,
02222:                    partsUsed | 0x40l);
02223:       if(!(puzzle & 0x400400480400ll))
02224:         doSolve(11, 0x800ll, puzzle | 0x400400480400ll,
02225:                    partsUsed | 0x40l);
02226:     piece7at10:
02227:       if (partsUsed & 0x80l) goto piece8at10;
02228:       if(!(puzzle & 0x2400402400ll))
02229:         doSolve(11, 0x800ll, puzzle | 0x2400402400ll,
02230:                    partsUsed | 0x80l);
02231:       if(!(puzzle & 0x2402002400ll))
02232:         doSolve(11, 0x800ll, puzzle | 0x2402002400ll,
02233:                    partsUsed | 0x80l);
02234:       if(!(puzzle & 0xbc00ll))
02235:         doSolve(11, 0x800ll, puzzle | 0xbc00ll,
02236:                    partsUsed | 0x80l);
02237:       if(!(puzzle & 0xf400ll))
02238:         doSolve(11, 0x800ll, puzzle | 0xf400ll,
02239:                    partsUsed | 0x80l);
02240:       if(!(puzzle & 0xc00800c00ll))
02241:         doSolve(11, 0x800ll, puzzle | 0xc00800c00ll,
02242:                    partsUsed | 0x80l);
02243:       if(!(puzzle & 0xc00400c00ll))
02244:         doSolve(11, 0x800ll, puzzle | 0xc00400c00ll,
02245:                    partsUsed | 0x80l);
02246:       if(!(puzzle & 0x1c01400ll))
02247:         doSolve(11, 0x800ll, puzzle | 0x1c01400ll,
02248:                    partsUsed | 0x80l);
02249:       if(!(puzzle & 0x1401c00ll))
02250:         doSolve(11, 0x800ll, puzzle | 0x1401c00ll,
02251:                    partsUsed | 0x80l);
02252:     piece8at10:
02253:       if (partsUsed & 0x100l) goto piece9at10;
02254:       if(!(puzzle & 0x900c00ll))
02255:         doSolve(11, 0x800ll, puzzle | 0x900c00ll,
02256:                    partsUsed | 0x100l);
02257:       if(!(puzzle & 0x802c00ll))
02258:         doSolve(11, 0x800ll, puzzle | 0x802c00ll,
02259:                    partsUsed | 0x100l);
02260:       if(!(puzzle & 0x580400ll))
02261:         doSolve(11, 0x800ll, puzzle | 0x580400ll,
02262:                    partsUsed | 0x100l);
02263:       if(!(puzzle & 0x4c00400ll))
02264:         doSolve(11, 0x800ll, puzzle | 0x4c00400ll,
02265:                    partsUsed | 0x100l);
02266:       if(!(puzzle & 0x2400c00ll))
02267:         doSolve(11, 0x800ll, puzzle | 0x2400c00ll,
02268:                    partsUsed | 0x100l);
02269:       if(!(puzzle & 0x6002400ll))
02270:         doSolve(11, 0x800ll, puzzle | 0x6002400ll,
02271:                    partsUsed | 0x100l);
02272:       if(!(puzzle & 0x406400ll))
02273:         doSolve(11, 0x800ll, puzzle | 0x406400ll,
02274:                    partsUsed | 0x100l);
02275:       if(!(puzzle & 0x4004c00ll))
02276:         doSolve(11, 0x800ll, puzzle | 0x4004c00ll,
02277:                    partsUsed | 0x100l);
02278:     piece9at10:
02279:       if (partsUsed & 0x200l) goto piece10at10;
02280:       if (!(puzzle & 0x480400ll)) {
02281:          if(!(puzzle & 0x80490400ll))
02282:            doSolve(11, 0x800ll, puzzle | 0x80490400ll,
02283:                    partsUsed | 0x200l);
02284:          if(!(puzzle & 0x400482400ll))
02285:            doSolve(11, 0x800ll, puzzle | 0x400482400ll,
02286:                    partsUsed | 0x200l);
02287:          if(!(puzzle & 0x2002480400ll))
02288:            doSolve(11, 0x800ll, puzzle | 0x2002480400ll,
02289:                    partsUsed | 0x200l);
02290:          if(!(puzzle & 0x2400480400ll))
02291:            doSolve(11, 0x800ll, puzzle | 0x2400480400ll,
02292:                    partsUsed | 0x200l);
02293:          if(!(puzzle & 0x82480400ll))
02294:            doSolve(11, 0x800ll, puzzle | 0x82480400ll,
02295:                    partsUsed | 0x200l);
02296:       }
02297:       if(!(puzzle & 0x482400400ll))
02298:         doSolve(11, 0x800ll, puzzle | 0x482400400ll,
02299:                    partsUsed | 0x200l);
02300:       if(!(puzzle & 0x801800c00ll))
02301:         doSolve(11, 0x800ll, puzzle | 0x801800c00ll,
02302:                    partsUsed | 0x200l);
02303:       if(!(puzzle & 0x801c00400ll))
02304:         doSolve(11, 0x800ll, puzzle | 0x801c00400ll,
02305:                    partsUsed | 0x200l);
02306:     piece10at10:
02307:       if (partsUsed & 0x400l) goto piece11at10;
02308:       if (!(puzzle & 0x2400400ll)) {
02309:          if(!(puzzle & 0x402402400ll))
02310:            doSolve(11, 0x800ll, puzzle | 0x402402400ll,
02311:                    partsUsed | 0x400l);
02312:          if(!(puzzle & 0x2402400400ll))
02313:            doSolve(11, 0x800ll, puzzle | 0x2402400400ll,
02314:                    partsUsed | 0x400l);
02315:          if(!(puzzle & 0x2002402400ll))
02316:            doSolve(11, 0x800ll, puzzle | 0x2002402400ll,
02317:                    partsUsed | 0x400l);
02318:       }
02319:       if (!(puzzle & 0x4c00ll)) {
02320:          if(!(puzzle & 0xdc00ll))
02321:            doSolve(11, 0x800ll, puzzle | 0xdc00ll,
02322:                    partsUsed | 0x400l);
02323:          if(!(puzzle & 0x7c00ll))
02324:            doSolve(11, 0x800ll, puzzle | 0x7c00ll,
02325:                    partsUsed | 0x400l);
02326:          if(!(puzzle & 0xec00ll))
02327:            doSolve(11, 0x800ll, puzzle | 0xec00ll,
02328:                    partsUsed | 0x400l);
02329:       }
02330:       if (!(puzzle & 0xc00400ll)) {
02331:          if(!(puzzle & 0x800c00c00ll))
02332:            doSolve(11, 0x800ll, puzzle | 0x800c00c00ll,
02333:                    partsUsed | 0x400l);
02334:          if(!(puzzle & 0x400c00c00ll))
02335:            doSolve(11, 0x800ll, puzzle | 0x400c00c00ll,
02336:                    partsUsed | 0x400l);
02337:          if(!(puzzle & 0x1c00c00ll))
02338:            doSolve(11, 0x800ll, puzzle | 0x1c00c00ll,
02339:                    partsUsed | 0x400l);
02340:          if(!(puzzle & 0xc00c00400ll))
02341:            doSolve(11, 0x800ll, puzzle | 0xc00c00400ll,
02342:                    partsUsed | 0x400l);
02343:          if(!(puzzle & 0xc01c00ll))
02344:            doSolve(11, 0x800ll, puzzle | 0xc01c00ll,
02345:                    partsUsed | 0x400l);
02346:       }
02347:       if(!(puzzle & 0x480480400ll))
02348:         doSolve(11, 0x800ll, puzzle | 0x480480400ll,
02349:                    partsUsed | 0x400l);
02350:       if(!(puzzle & 0x2482400ll))
02351:         doSolve(11, 0x800ll, puzzle | 0x2482400ll,
02352:                    partsUsed | 0x400l);
02353:       if(!(puzzle & 0x1801c00ll))
02354:         doSolve(11, 0x800ll, puzzle | 0x1801c00ll,
02355:                    partsUsed | 0x400l);
02356:     piece11at10:
02357:       if (partsUsed & 0x800l) goto piece12at10;
02358:       if (!(puzzle & 0xc00400ll)) {
02359:          if(!(puzzle & 0xd80400ll))
02360:            doSolve(11, 0x800ll, puzzle | 0xd80400ll,
02361:                    partsUsed | 0x800l);
02362:          if(!(puzzle & 0xd00c00ll))
02363:            doSolve(11, 0x800ll, puzzle | 0xd00c00ll,
02364:                    partsUsed | 0x800l);
02365:          if(!(puzzle & 0xc80c00ll))
02366:            doSolve(11, 0x800ll, puzzle | 0xc80c00ll,
02367:                    partsUsed | 0x800l);
02368:          if(!(puzzle & 0x2c00c00ll))
02369:            doSolve(11, 0x800ll, puzzle | 0x2c00c00ll,
02370:                    partsUsed | 0x800l);
02371:          if(!(puzzle & 0x2c02400ll))
02372:            doSolve(11, 0x800ll, puzzle | 0x2c02400ll,
02373:                    partsUsed | 0x800l);
02374:          if(!(puzzle & 0xc02c00ll))
02375:            doSolve(11, 0x800ll, puzzle | 0xc02c00ll,
02376:                    partsUsed | 0x800l);
02377:          if(!(puzzle & 0xc04c00ll))
02378:            doSolve(11, 0x800ll, puzzle | 0xc04c00ll,
02379:                    partsUsed | 0x800l);
02380:          if(!(puzzle & 0x4c00c00ll))
02381:            doSolve(11, 0x800ll, puzzle | 0x4c00c00ll,
02382:                    partsUsed | 0x800l);
02383:          if(!(puzzle & 0x6c00400ll))
02384:            doSolve(11, 0x800ll, puzzle | 0x6c00400ll,
02385:                    partsUsed | 0x800l);
02386:       }
02387:       if (!(puzzle & 0x6400ll)) {
02388:          if(!(puzzle & 0x406c00ll))
02389:            doSolve(11, 0x800ll, puzzle | 0x406c00ll,
02390:                    partsUsed | 0x800l);
02391:          if(!(puzzle & 0x6006400ll))
02392:            doSolve(11, 0x800ll, puzzle | 0x6006400ll,
02393:                    partsUsed | 0x800l);
02394:          if(!(puzzle & 0x2406400ll))
02395:            doSolve(11, 0x800ll, puzzle | 0x2406400ll,
02396:                    partsUsed | 0x800l);
02397:          if(!(puzzle & 0x4006c00ll))
02398:            doSolve(11, 0x800ll, puzzle | 0x4006c00ll,
02399:                    partsUsed | 0x800l);
02400:          if(!(puzzle & 0x806c00ll))
02401:            doSolve(11, 0x800ll, puzzle | 0x806c00ll,
02402:                    partsUsed | 0x800l);
02403:          if(!(puzzle & 0x2006c00ll))
02404:            doSolve(11, 0x800ll, puzzle | 0x2006c00ll,
02405:                    partsUsed | 0x800l);
02406:       }
02407:       if(!(puzzle & 0x4804c00ll))
02408:         doSolve(11, 0x800ll, puzzle | 0x4804c00ll,
02409:                    partsUsed | 0x800l);
02410:       if(!(puzzle & 0x6402400ll))
02411:         doSolve(11, 0x800ll, puzzle | 0x6402400ll,
02412:                    partsUsed | 0x800l);
02413:       if(!(puzzle & 0x2402c00ll))
02414:         doSolve(11, 0x800ll, puzzle | 0x2402c00ll,
02415:                    partsUsed | 0x800l);
02416:     piece12at10:
02417:     break;
02418:    case 11:
02419:       if (partsUsed & 0x2l) goto piece2at11;
02420:       if(!(puzzle & 0x400c01800ll))
02421:         doSolve(12, 0x1000ll, puzzle | 0x400c01800ll,
02422:                    partsUsed | 0x2l);
02423:       if(!(puzzle & 0x120900800ll))
02424:         doSolve(12, 0x1000ll, puzzle | 0x120900800ll,
02425:                    partsUsed | 0x2l);
02426:       if(!(puzzle & 0x100904800ll))
02427:         doSolve(12, 0x1000ll, puzzle | 0x100904800ll,
02428:                    partsUsed | 0x2l);
02429:     piece2at11:
02430:       if (partsUsed & 0x4l) goto piece3at11;
02431:       if (!(puzzle & 0x800800800ll)) {
02432:          if(!(puzzle & 0x800920800ll))
02433:            doSolve(12, 0x1000ll, puzzle | 0x800920800ll,
02434:                    partsUsed | 0x4l);
02435:          if(!(puzzle & 0x4900800800ll))
02436:            doSolve(12, 0x1000ll, puzzle | 0x4900800800ll,
02437:                    partsUsed | 0x4l);
02438:          if(!(puzzle & 0x1c00800800ll))
02439:            doSolve(12, 0x1000ll, puzzle | 0x1c00800800ll,
02440:                    partsUsed | 0x4l);
02441:       }
02442:     piece3at11:
02443:       if (partsUsed & 0x8l) goto piece4at11;
02444:       if(!(puzzle & 0x20920800ll))
02445:         doSolve(12, 0x1000ll, puzzle | 0x20920800ll,
02446:                    partsUsed | 0x8l);
02447:       if(!(puzzle & 0x900804800ll))
02448:         doSolve(12, 0x1000ll, puzzle | 0x900804800ll,
02449:                    partsUsed | 0x8l);
02450:       if(!(puzzle & 0xc00801800ll))
02451:         doSolve(12, 0x1000ll, puzzle | 0xc00801800ll,
02452:                    partsUsed | 0x8l);
02453:     piece4at11:
02454:       if (partsUsed & 0x10l) goto piece5at11;
02455:       if (!(puzzle & 0x800800800800ll)) {
02456:          if(!(puzzle & 0x900800900800ll))
02457:            doSolve(12, 0x1000ll, puzzle | 0x900800900800ll,
02458:                    partsUsed | 0x10l);
02459:          if(!(puzzle & 0xc00800c00800ll))
02460:            doSolve(12, 0x1000ll, puzzle | 0xc00800c00800ll,
02461:                    partsUsed | 0x10l);
02462:          if(!(puzzle & 0x4800804800800ll))
02463:            doSolve(12, 0x1000ll, puzzle | 0x4800804800800ll,
02464:                    partsUsed | 0x10l);
02465:          if(!(puzzle & 0x804800804800ll))
02466:            doSolve(12, 0x1000ll, puzzle | 0x804800804800ll,
02467:                    partsUsed | 0x10l);
02468:          if(!(puzzle & 0x1800801800800ll))
02469:            doSolve(12, 0x1000ll, puzzle | 0x1800801800800ll,
02470:                    partsUsed | 0x10l);
02471:          if(!(puzzle & 0x801800801800ll))
02472:            doSolve(12, 0x1000ll, puzzle | 0x801800801800ll,
02473:                    partsUsed | 0x10l);
02474:       }
02475:       if(!(puzzle & 0x4004804004800ll))
02476:         doSolve(12, 0x1000ll, puzzle | 0x4004804004800ll,
02477:                    partsUsed | 0x10l);
02478:       if(!(puzzle & 0x1001801001800ll))
02479:         doSolve(12, 0x1000ll, puzzle | 0x1001801001800ll,
02480:                    partsUsed | 0x10l);
02481:     piece5at11:
02482:       if (partsUsed & 0x20l) goto piece6at11;
02483:       if (!(puzzle & 0x800800800800ll)) {
02484:          if(!(puzzle & 0x900800800800ll))
02485:            doSolve(12, 0x1000ll, puzzle | 0x900800800800ll,
02486:                    partsUsed | 0x20l);
02487:          if(!(puzzle & 0xc00800800800ll))
02488:            doSolve(12, 0x1000ll, puzzle | 0xc00800800800ll,
02489:                    partsUsed | 0x20l);
02490:          if(!(puzzle & 0x800800804800ll))
02491:            doSolve(12, 0x1000ll, puzzle | 0x800800804800ll,
02492:                    partsUsed | 0x20l);
02493:          if(!(puzzle & 0x4800800800800ll))
02494:            doSolve(12, 0x1000ll, puzzle | 0x4800800800800ll,
02495:                    partsUsed | 0x20l);
02496:          if(!(puzzle & 0x800800801800ll))
02497:            doSolve(12, 0x1000ll, puzzle | 0x800800801800ll,
02498:                    partsUsed | 0x20l);
02499:          if(!(puzzle & 0x1800800800800ll))
02500:            doSolve(12, 0x1000ll, puzzle | 0x1800800800800ll,
02501:                    partsUsed | 0x20l);
02502:       }
02503:       if(!(puzzle & 0x4004004004800ll))
02504:         doSolve(12, 0x1000ll, puzzle | 0x4004004004800ll,
02505:                    partsUsed | 0x20l);
02506:       if(!(puzzle & 0x1001001001800ll))
02507:         doSolve(12, 0x1000ll, puzzle | 0x1001001001800ll,
02508:                    partsUsed | 0x20l);
02509:     piece6at11:
02510:       if (partsUsed & 0x40l) goto piece7at11;
02511:       if (!(puzzle & 0x800800800800ll)) {
02512:          if(!(puzzle & 0x800900800800ll))
02513:            doSolve(12, 0x1000ll, puzzle | 0x800900800800ll,
02514:                    partsUsed | 0x40l);
02515:          if(!(puzzle & 0x800800c00800ll))
02516:            doSolve(12, 0x1000ll, puzzle | 0x800800c00800ll,
02517:                    partsUsed | 0x40l);
02518:          if(!(puzzle & 0x800c00800800ll))
02519:            doSolve(12, 0x1000ll, puzzle | 0x800c00800800ll,
02520:                    partsUsed | 0x40l);
02521:          if(!(puzzle & 0x800804800800ll))
02522:            doSolve(12, 0x1000ll, puzzle | 0x800804800800ll,
02523:                    partsUsed | 0x40l);
02524:          if(!(puzzle & 0x804800800800ll))
02525:            doSolve(12, 0x1000ll, puzzle | 0x804800800800ll,
02526:                    partsUsed | 0x40l);
02527:          if(!(puzzle & 0x800801800800ll))
02528:            doSolve(12, 0x1000ll, puzzle | 0x800801800800ll,
02529:                    partsUsed | 0x40l);
02530:          if(!(puzzle & 0x801800800800ll))
02531:            doSolve(12, 0x1000ll, puzzle | 0x801800800800ll,
02532:                    partsUsed | 0x40l);
02533:       }
02534:       if(!(puzzle & 0x4920800ll))
02535:         doSolve(12, 0x1000ll, puzzle | 0x4920800ll,
02536:                    partsUsed | 0x40l);
02537:       if(!(puzzle & 0x800800900800ll))
02538:         doSolve(12, 0x1000ll, puzzle | 0x800800900800ll,
02539:                    partsUsed | 0x40l);
02540:     piece7at11:
02541:       if (partsUsed & 0x80l) goto piece8at11;
02542:       if(!(puzzle & 0x4800804800ll))
02543:         doSolve(12, 0x1000ll, puzzle | 0x4800804800ll,
02544:                    partsUsed | 0x80l);
02545:       if(!(puzzle & 0x4804004800ll))
02546:         doSolve(12, 0x1000ll, puzzle | 0x4804004800ll,
02547:                    partsUsed | 0x80l);
02548:       if(!(puzzle & 0x1801001800ll))
02549:         doSolve(12, 0x1000ll, puzzle | 0x1801001800ll,
02550:                    partsUsed | 0x80l);
02551:       if(!(puzzle & 0x1800801800ll))
02552:         doSolve(12, 0x1000ll, puzzle | 0x1800801800ll,
02553:                    partsUsed | 0x80l);
02554:     piece8at11:
02555:       if (partsUsed & 0x100l) goto piece9at11;
02556:       if(!(puzzle & 0xc80800ll))
02557:         doSolve(12, 0x1000ll, puzzle | 0xc80800ll,
02558:                    partsUsed | 0x100l);
02559:       if(!(puzzle & 0xc04800ll))
02560:         doSolve(12, 0x1000ll, puzzle | 0xc04800ll,
02561:                    partsUsed | 0x100l);
02562:       if(!(puzzle & 0x1201800ll))
02563:         doSolve(12, 0x1000ll, puzzle | 0x1201800ll,
02564:                    partsUsed | 0x100l);
02565:       if(!(puzzle & 0x1005800ll))
02566:         doSolve(12, 0x1000ll, puzzle | 0x1005800ll,
02567:                    partsUsed | 0x100l);
02568:       if(!(puzzle & 0xb00800ll))
02569:         doSolve(12, 0x1000ll, puzzle | 0xb00800ll,
02570:                    partsUsed | 0x100l);
02571:       if(!(puzzle & 0x2006800ll))
02572:         doSolve(12, 0x1000ll, puzzle | 0x2006800ll,
02573:                    partsUsed | 0x100l);
02574:       if(!(puzzle & 0x6800800ll))
02575:         doSolve(12, 0x1000ll, puzzle | 0x6800800ll,
02576:                    partsUsed | 0x100l);
02577:       if(!(puzzle & 0x4801800ll))
02578:         doSolve(12, 0x1000ll, puzzle | 0x4801800ll,
02579:                    partsUsed | 0x100l);
02580:       if(!(puzzle & 0x9800800ll))
02581:         doSolve(12, 0x1000ll, puzzle | 0x9800800ll,
02582:                    partsUsed | 0x100l);
02583:       if(!(puzzle & 0xc004800ll))
02584:         doSolve(12, 0x1000ll, puzzle | 0xc004800ll,
02585:                    partsUsed | 0x100l);
02586:       if(!(puzzle & 0x80c800ll))
02587:         doSolve(12, 0x1000ll, puzzle | 0x80c800ll,
02588:                    partsUsed | 0x100l);
02589:       if(!(puzzle & 0x8009800ll))
02590:         doSolve(12, 0x1000ll, puzzle | 0x8009800ll,
02591:                    partsUsed | 0x100l);
02592:     piece9at11:
02593:       if (partsUsed & 0x200l) goto piece10at11;
02594:       if (!(puzzle & 0x900800ll)) {
02595:          if(!(puzzle & 0x100920800ll))
02596:            doSolve(12, 0x1000ll, puzzle | 0x100920800ll,
02597:                    partsUsed | 0x200l);
02598:          if(!(puzzle & 0x800904800ll))
02599:            doSolve(12, 0x1000ll, puzzle | 0x800904800ll,
02600:                    partsUsed | 0x200l);
02601:          if(!(puzzle & 0x4004900800ll))
02602:            doSolve(12, 0x1000ll, puzzle | 0x4004900800ll,
02603:                    partsUsed | 0x200l);
02604:          if(!(puzzle & 0x4800900800ll))
02605:            doSolve(12, 0x1000ll, puzzle | 0x4800900800ll,
02606:                    partsUsed | 0x200l);
02607:          if(!(puzzle & 0x104900800ll))
02608:            doSolve(12, 0x1000ll, puzzle | 0x104900800ll,
02609:                    partsUsed | 0x200l);
02610:       }
02611:       if (!(puzzle & 0x800800800ll)) {
02612:          if(!(puzzle & 0x904800800ll))
02613:            doSolve(12, 0x1000ll, puzzle | 0x904800800ll,
02614:                    partsUsed | 0x200l);
02615:          if(!(puzzle & 0x800c01800ll))
02616:            doSolve(12, 0x1000ll, puzzle | 0x800c01800ll,
02617:                    partsUsed | 0x200l);
02618:          if(!(puzzle & 0x1800c00800ll))
02619:            doSolve(12, 0x1000ll, puzzle | 0x1800c00800ll,
02620:                    partsUsed | 0x200l);
02621:          if(!(puzzle & 0xc01800800ll))
02622:            doSolve(12, 0x1000ll, puzzle | 0xc01800800ll,
02623:                    partsUsed | 0x200l);
02624:       }
02625:       if(!(puzzle & 0x401c00800ll))
02626:         doSolve(12, 0x1000ll, puzzle | 0x401c00800ll,
02627:                    partsUsed | 0x200l);
02628:       if(!(puzzle & 0x1001c00800ll))
02629:         doSolve(12, 0x1000ll, puzzle | 0x1001c00800ll,
02630:                    partsUsed | 0x200l);
02631:     piece10at11:
02632:       if (partsUsed & 0x400l) goto piece11at11;
02633:       if (!(puzzle & 0x4800800ll)) {
02634:          if(!(puzzle & 0x804804800ll))
02635:            doSolve(12, 0x1000ll, puzzle | 0x804804800ll,
02636:                    partsUsed | 0x400l);
02637:          if(!(puzzle & 0x4804800800ll))
02638:            doSolve(12, 0x1000ll, puzzle | 0x4804800800ll,
02639:                    partsUsed | 0x400l);
02640:          if(!(puzzle & 0x4004804800ll))
02641:            doSolve(12, 0x1000ll, puzzle | 0x4004804800ll,
02642:                    partsUsed | 0x400l);
02643:       }
02644:       if (!(puzzle & 0x1800800ll)) {
02645:          if(!(puzzle & 0x1001801800ll))
02646:            doSolve(12, 0x1000ll, puzzle | 0x1001801800ll,
02647:                    partsUsed | 0x400l);
02648:          if(!(puzzle & 0x801801800ll))
02649:            doSolve(12, 0x1000ll, puzzle | 0x801801800ll,
02650:                    partsUsed | 0x400l);
02651:          if(!(puzzle & 0x1801800800ll))
02652:            doSolve(12, 0x1000ll, puzzle | 0x1801800800ll,
02653:                    partsUsed | 0x400l);
02654:       }
02655:       if(!(puzzle & 0x900900800ll))
02656:         doSolve(12, 0x1000ll, puzzle | 0x900900800ll,
02657:                    partsUsed | 0x400l);
02658:       if(!(puzzle & 0x4904800ll))
02659:         doSolve(12, 0x1000ll, puzzle | 0x4904800ll,
02660:                    partsUsed | 0x400l);
02661:       if(!(puzzle & 0xf800ll))
02662:         doSolve(12, 0x1000ll, puzzle | 0xf800ll,
02663:                    partsUsed | 0x400l);
02664:       if(!(puzzle & 0x1c01800ll))
02665:         doSolve(12, 0x1000ll, puzzle | 0x1c01800ll,
02666:                    partsUsed | 0x400l);
02667:       if(!(puzzle & 0xc00c00800ll))
02668:         doSolve(12, 0x1000ll, puzzle | 0xc00c00800ll,
02669:                    partsUsed | 0x400l);
02670:     piece11at11:
02671:       if (partsUsed & 0x800l) goto piece12at11;
02672:       if (!(puzzle & 0x900800ll)) {
02673:          if(!(puzzle & 0xd80800ll))
02674:            doSolve(12, 0x1000ll, puzzle | 0xd80800ll,
02675:                    partsUsed | 0x800l);
02676:          if(!(puzzle & 0x1b00800ll))
02677:            doSolve(12, 0x1000ll, puzzle | 0x1b00800ll,
02678:                    partsUsed | 0x800l);
02679:          if(!(puzzle & 0x1901800ll))
02680:            doSolve(12, 0x1000ll, puzzle | 0x1901800ll,
02681:                    partsUsed | 0x800l);
02682:       }
02683:       if (!(puzzle & 0x801800ll)) {
02684:          if(!(puzzle & 0x1a01800ll))
02685:            doSolve(12, 0x1000ll, puzzle | 0x1a01800ll,
02686:                    partsUsed | 0x800l);
02687:          if(!(puzzle & 0x80d800ll))
02688:            doSolve(12, 0x1000ll, puzzle | 0x80d800ll,
02689:                    partsUsed | 0x800l);
02690:          if(!(puzzle & 0x5801800ll))
02691:            doSolve(12, 0x1000ll, puzzle | 0x5801800ll,
02692:                    partsUsed | 0x800l);
02693:          if(!(puzzle & 0x1805800ll))
02694:            doSolve(12, 0x1000ll, puzzle | 0x1805800ll,
02695:                    partsUsed | 0x800l);
02696:          if(!(puzzle & 0x1809800ll))
02697:            doSolve(12, 0x1000ll, puzzle | 0x1809800ll,
02698:                    partsUsed | 0x800l);
02699:          if(!(puzzle & 0x9801800ll))
02700:            doSolve(12, 0x1000ll, puzzle | 0x9801800ll,
02701:                    partsUsed | 0x800l);
02702:          if(!(puzzle & 0x4805800ll))
02703:            doSolve(12, 0x1000ll, puzzle | 0x4805800ll,
02704:                    partsUsed | 0x800l);
02705:       }
02706:       if (!(puzzle & 0x6000800ll)) {
02707:          if(!(puzzle & 0x6c00800ll))
02708:            doSolve(12, 0x1000ll, puzzle | 0x6c00800ll,
02709:                    partsUsed | 0x800l);
02710:          if(!(puzzle & 0x6804800ll))
02711:            doSolve(12, 0x1000ll, puzzle | 0x6804800ll,
02712:                    partsUsed | 0x800l);
02713:          if(!(puzzle & 0x6006800ll))
02714:            doSolve(12, 0x1000ll, puzzle | 0x6006800ll,
02715:                    partsUsed | 0x800l);
02716:       }
02717:       if (!(puzzle & 0x4004800ll)) {
02718:          if(!(puzzle & 0x4c04800ll))
02719:            doSolve(12, 0x1000ll, puzzle | 0x4c04800ll,
02720:                    partsUsed | 0x800l);
02721:          if(!(puzzle & 0x4806800ll))
02722:            doSolve(12, 0x1000ll, puzzle | 0x4806800ll,
02723:                    partsUsed | 0x800l);
02724:          if(!(puzzle & 0xc00c800ll))
02725:            doSolve(12, 0x1000ll, puzzle | 0xc00c800ll,
02726:                    partsUsed | 0x800l);
02727:          if(!(puzzle & 0x5804800ll))
02728:            doSolve(12, 0x1000ll, puzzle | 0x5804800ll,
02729:                    partsUsed | 0x800l);
02730:          if(!(puzzle & 0x480c800ll))
02731:            doSolve(12, 0x1000ll, puzzle | 0x480c800ll,
02732:                    partsUsed | 0x800l);
02733:          if(!(puzzle & 0x400d800ll))
02734:            doSolve(12, 0x1000ll, puzzle | 0x400d800ll,
02735:                    partsUsed | 0x800l);
02736:          if(!(puzzle & 0xc804800ll))
02737:            doSolve(12, 0x1000ll, puzzle | 0xc804800ll,
02738:                    partsUsed | 0x800l);
02739:       }
02740:       if (!(puzzle & 0x9800ll)) {
02741:          if(!(puzzle & 0x9009800ll))
02742:            doSolve(12, 0x1000ll, puzzle | 0x9009800ll,
02743:                    partsUsed | 0x800l);
02744:          if(!(puzzle & 0x800d800ll))
02745:            doSolve(12, 0x1000ll, puzzle | 0x800d800ll,
02746:                    partsUsed | 0x800l);
02747:          if(!(puzzle & 0x100d800ll))
02748:            doSolve(12, 0x1000ll, puzzle | 0x100d800ll,
02749:                    partsUsed | 0x800l);
02750:       }
02751:       if(!(puzzle & 0xd800800ll))
02752:         doSolve(12, 0x1000ll, puzzle | 0xd800800ll,
02753:                    partsUsed | 0x800l);
02754:     piece12at11:
02755:     break;
02756:    case 12:
02757:       if (partsUsed & 0x2l) goto piece2at12;
02758:       if(!(puzzle & 0xc01801000ll))
02759:         doSolve(13, 0x2000ll, puzzle | 0xc01801000ll,
02760:                    partsUsed | 0x2l);
02761:       if(!(puzzle & 0x241201000ll))
02762:         doSolve(13, 0x2000ll, puzzle | 0x241201000ll,
02763:                    partsUsed | 0x2l);
02764:       if(!(puzzle & 0x201209000ll))
02765:         doSolve(13, 0x2000ll, puzzle | 0x201209000ll,
02766:                    partsUsed | 0x2l);
02767:     piece2at12:
02768:       if (partsUsed & 0x4l) goto piece3at12;
02769:       if (!(puzzle & 0x1001001000ll)) {
02770:          if(!(puzzle & 0x1001241000ll))
02771:            doSolve(13, 0x2000ll, puzzle | 0x1001241000ll,
02772:                    partsUsed | 0x4l);
02773:          if(!(puzzle & 0x9201001000ll))
02774:            doSolve(13, 0x2000ll, puzzle | 0x9201001000ll,
02775:                    partsUsed | 0x4l);
02776:          if(!(puzzle & 0x1001c01000ll))
02777:            doSolve(13, 0x2000ll, puzzle | 0x1001c01000ll,
02778:                    partsUsed | 0x4l);
02779:       }
02780:     piece3at12:
02781:       if (partsUsed & 0x8l) goto piece4at12;
02782:       if(!(puzzle & 0x401c01000ll))
02783:         doSolve(13, 0x2000ll, puzzle | 0x401c01000ll,
02784:                    partsUsed | 0x8l);
02785:       if(!(puzzle & 0x41241000ll))
02786:         doSolve(13, 0x2000ll, puzzle | 0x41241000ll,
02787:                    partsUsed | 0x8l);
02788:       if(!(puzzle & 0x1201009000ll))
02789:         doSolve(13, 0x2000ll, puzzle | 0x1201009000ll,
02790:                    partsUsed | 0x8l);
02791:     piece4at12:
02792:       if (partsUsed & 0x10l) goto piece5at12;
02793:       if (!(puzzle & 0x1001001001000ll)) {
02794:          if(!(puzzle & 0x1201001201000ll))
02795:            doSolve(13, 0x2000ll, puzzle | 0x1201001201000ll,
02796:                    partsUsed | 0x10l);
02797:          if(!(puzzle & 0x1801001801000ll))
02798:            doSolve(13, 0x2000ll, puzzle | 0x1801001801000ll,
02799:                    partsUsed | 0x10l);
02800:          if(!(puzzle & 0x9001009001000ll))
02801:            doSolve(13, 0x2000ll, puzzle | 0x9001009001000ll,
02802:                    partsUsed | 0x10l);
02803:          if(!(puzzle & 0x1009001009000ll))
02804:            doSolve(13, 0x2000ll, puzzle | 0x1009001009000ll,
02805:                    partsUsed | 0x10l);
02806:       }
02807:       if(!(puzzle & 0x8009008009000ll))
02808:         doSolve(13, 0x2000ll, puzzle | 0x8009008009000ll,
02809:                    partsUsed | 0x10l);
02810:     piece5at12:
02811:       if (partsUsed & 0x20l) goto piece6at12;
02812:       if (!(puzzle & 0x1001001001000ll)) {
02813:          if(!(puzzle & 0x1201001001000ll))
02814:            doSolve(13, 0x2000ll, puzzle | 0x1201001001000ll,
02815:                    partsUsed | 0x20l);
02816:          if(!(puzzle & 0x1801001001000ll))
02817:            doSolve(13, 0x2000ll, puzzle | 0x1801001001000ll,
02818:                    partsUsed | 0x20l);
02819:          if(!(puzzle & 0x1001001009000ll))
02820:            doSolve(13, 0x2000ll, puzzle | 0x1001001009000ll,
02821:                    partsUsed | 0x20l);
02822:          if(!(puzzle & 0x9001001001000ll))
02823:            doSolve(13, 0x2000ll, puzzle | 0x9001001001000ll,
02824:                    partsUsed | 0x20l);
02825:       }
02826:       if(!(puzzle & 0x8008008009000ll))
02827:         doSolve(13, 0x2000ll, puzzle | 0x8008008009000ll,
02828:                    partsUsed | 0x20l);
02829:     piece6at12:
02830:       if (partsUsed & 0x40l) goto piece7at12;
02831:       if (!(puzzle & 0x1001001001000ll)) {
02832:          if(!(puzzle & 0x1001201001000ll))
02833:            doSolve(13, 0x2000ll, puzzle | 0x1001201001000ll,
02834:                    partsUsed | 0x40l);
02835:          if(!(puzzle & 0x1001001801000ll))
02836:            doSolve(13, 0x2000ll, puzzle | 0x1001001801000ll,
02837:                    partsUsed | 0x40l);
02838:          if(!(puzzle & 0x1001801001000ll))
02839:            doSolve(13, 0x2000ll, puzzle | 0x1001801001000ll,
02840:                    partsUsed | 0x40l);
02841:          if(!(puzzle & 0x1001009001000ll))
02842:            doSolve(13, 0x2000ll, puzzle | 0x1001009001000ll,
02843:                    partsUsed | 0x40l);
02844:          if(!(puzzle & 0x1009001001000ll))
02845:            doSolve(13, 0x2000ll, puzzle | 0x1009001001000ll,
02846:                    partsUsed | 0x40l);
02847:       }
02848:       if(!(puzzle & 0x9241000ll))
02849:         doSolve(13, 0x2000ll, puzzle | 0x9241000ll,
02850:                    partsUsed | 0x40l);
02851:       if(!(puzzle & 0x1001001201000ll))
02852:         doSolve(13, 0x2000ll, puzzle | 0x1001001201000ll,
02853:                    partsUsed | 0x40l);
02854:     piece7at12:
02855:       if (partsUsed & 0x80l) goto piece8at12;
02856:       if(!(puzzle & 0x9001009000ll))
02857:         doSolve(13, 0x2000ll, puzzle | 0x9001009000ll,
02858:                    partsUsed | 0x80l);
02859:       if(!(puzzle & 0x9008009000ll))
02860:         doSolve(13, 0x2000ll, puzzle | 0x9008009000ll,
02861:                    partsUsed | 0x80l);
02862:     piece8at12:
02863:       if (partsUsed & 0x100l) goto piece9at12;
02864:       if(!(puzzle & 0x1901000ll))
02865:         doSolve(13, 0x2000ll, puzzle | 0x1901000ll,
02866:                    partsUsed | 0x100l);
02867:       if(!(puzzle & 0x1809000ll))
02868:         doSolve(13, 0x2000ll, puzzle | 0x1809000ll,
02869:                    partsUsed | 0x100l);
02870:       if(!(puzzle & 0x400d000ll))
02871:         doSolve(13, 0x2000ll, puzzle | 0x400d000ll,
02872:                    partsUsed | 0x100l);
02873:       if(!(puzzle & 0xd001000ll))
02874:         doSolve(13, 0x2000ll, puzzle | 0xd001000ll,
02875:                    partsUsed | 0x100l);
02876:     piece9at12:
02877:       if (partsUsed & 0x200l) goto piece10at12;
02878:       if (!(puzzle & 0x1201000ll)) {
02879:          if(!(puzzle & 0x201241000ll))
02880:            doSolve(13, 0x2000ll, puzzle | 0x201241000ll,
02881:                    partsUsed | 0x200l);
02882:          if(!(puzzle & 0x1001209000ll))
02883:            doSolve(13, 0x2000ll, puzzle | 0x1001209000ll,
02884:                    partsUsed | 0x200l);
02885:          if(!(puzzle & 0x8009201000ll))
02886:            doSolve(13, 0x2000ll, puzzle | 0x8009201000ll,
02887:                    partsUsed | 0x200l);
02888:          if(!(puzzle & 0x9001201000ll))
02889:            doSolve(13, 0x2000ll, puzzle | 0x9001201000ll,
02890:                    partsUsed | 0x200l);
02891:          if(!(puzzle & 0x209201000ll))
02892:            doSolve(13, 0x2000ll, puzzle | 0x209201000ll,
02893:                    partsUsed | 0x200l);
02894:       }
02895:       if(!(puzzle & 0x1209001000ll))
02896:         doSolve(13, 0x2000ll, puzzle | 0x1209001000ll,
02897:                    partsUsed | 0x200l);
02898:       if(!(puzzle & 0x801c01000ll))
02899:         doSolve(13, 0x2000ll, puzzle | 0x801c01000ll,
02900:                    partsUsed | 0x200l);
02901:     piece10at12:
02902:       if (partsUsed & 0x400l) goto piece11at12;
02903:       if (!(puzzle & 0x1001001000ll)) {
02904:          if(!(puzzle & 0x1801801000ll))
02905:            doSolve(13, 0x2000ll, puzzle | 0x1801801000ll,
02906:                    partsUsed | 0x400l);
02907:          if(!(puzzle & 0x1009009000ll))
02908:            doSolve(13, 0x2000ll, puzzle | 0x1009009000ll,
02909:                    partsUsed | 0x400l);
02910:          if(!(puzzle & 0x9009001000ll))
02911:            doSolve(13, 0x2000ll, puzzle | 0x9009001000ll,
02912:                    partsUsed | 0x400l);
02913:       }
02914:       if(!(puzzle & 0x1201201000ll))
02915:         doSolve(13, 0x2000ll, puzzle | 0x1201201000ll,
02916:                    partsUsed | 0x400l);
02917:       if(!(puzzle & 0x9209000ll))
02918:         doSolve(13, 0x2000ll, puzzle | 0x9209000ll,
02919:                    partsUsed | 0x400l);
02920:       if(!(puzzle & 0x8009009000ll))
02921:         doSolve(13, 0x2000ll, puzzle | 0x8009009000ll,
02922:                    partsUsed | 0x400l);
02923:     piece11at12:
02924:       if (partsUsed & 0x800l) goto piece12at12;
02925:       if (!(puzzle & 0x1801000ll)) {
02926:          if(!(puzzle & 0x1b01000ll))
02927:            doSolve(13, 0x2000ll, puzzle | 0x1b01000ll,
02928:                    partsUsed | 0x800l);
02929:          if(!(puzzle & 0xd801000ll))
02930:            doSolve(13, 0x2000ll, puzzle | 0xd801000ll,
02931:                    partsUsed | 0x800l);
02932:          if(!(puzzle & 0x9809000ll))
02933:            doSolve(13, 0x2000ll, puzzle | 0x9809000ll,
02934:                    partsUsed | 0x800l);
02935:       }
02936:       if (!(puzzle & 0x8009000ll)) {
02937:          if(!(puzzle & 0xd009000ll))
02938:            doSolve(13, 0x2000ll, puzzle | 0xd009000ll,
02939:                    partsUsed | 0x800l);
02940:          if(!(puzzle & 0xc00d000ll))
02941:            doSolve(13, 0x2000ll, puzzle | 0xc00d000ll,
02942:                    partsUsed | 0x800l);
02943:          if(!(puzzle & 0x900d000ll))
02944:            doSolve(13, 0x2000ll, puzzle | 0x900d000ll,
02945:                    partsUsed | 0x800l);
02946:       }
02947:     piece12at12:
02948:     break;
02949:    case 13:
02950:       if (partsUsed & 0x2l) goto piece2at13;
02951:       if(!(puzzle & 0x482402000ll))
02952:         doSolve(14, 0x4000ll, puzzle | 0x482402000ll,
02953:                    partsUsed | 0x2l);
02954:       if(!(puzzle & 0x800c006000ll))
02955:         doSolve(14, 0x4000ll, puzzle | 0x800c006000ll,
02956:                    partsUsed | 0x2l);
02957:       if(!(puzzle & 0xc006002000ll))
02958:         doSolve(14, 0x4000ll, puzzle | 0xc006002000ll,
02959:                    partsUsed | 0x2l);
02960:     piece2at13:
02961:       if (partsUsed & 0x4l) goto piece3at13;
02962:       if(!(puzzle & 0x400400e000ll))
02963:         doSolve(14, 0x4000ll, puzzle | 0x400400e000ll,
02964:                    partsUsed | 0x4l);
02965:       if(!(puzzle & 0x2002482000ll))
02966:         doSolve(14, 0x4000ll, puzzle | 0x2002482000ll,
02967:                    partsUsed | 0x4l);
02968:       if(!(puzzle & 0x200e002000ll))
02969:         doSolve(14, 0x4000ll, puzzle | 0x200e002000ll,
02970:                    partsUsed | 0x4l);
02971:     piece3at13:
02972:       if (partsUsed & 0x8l) goto piece4at13;
02973:       if(!(puzzle & 0x82482000ll))
02974:         doSolve(14, 0x4000ll, puzzle | 0x82482000ll,
02975:                    partsUsed | 0x8l);
02976:       if(!(puzzle & 0x800e002000ll))
02977:         doSolve(14, 0x4000ll, puzzle | 0x800e002000ll,
02978:                    partsUsed | 0x8l);
02979:       if(!(puzzle & 0xc004006000ll))
02980:         doSolve(14, 0x4000ll, puzzle | 0xc004006000ll,
02981:                    partsUsed | 0x8l);
02982:     piece4at13:
02983:       if (partsUsed & 0x10l) goto piece5at13;
02984:       if (!(puzzle & 0x2002002002000ll)) {
02985:          if(!(puzzle & 0x2402002402000ll))
02986:            doSolve(14, 0x4000ll, puzzle | 0x2402002402000ll,
02987:                    partsUsed | 0x10l);
02988:          if(!(puzzle & 0x6002006002000ll))
02989:            doSolve(14, 0x4000ll, puzzle | 0x6002006002000ll,
02990:                    partsUsed | 0x10l);
02991:          if(!(puzzle & 0x2006002006000ll))
02992:            doSolve(14, 0x4000ll, puzzle | 0x2006002006000ll,
02993:                    partsUsed | 0x10l);
02994:       }
02995:       if(!(puzzle & 0x4006004006000ll))
02996:         doSolve(14, 0x4000ll, puzzle | 0x4006004006000ll,
02997:                    partsUsed | 0x10l);
02998:     piece5at13:
02999:       if (partsUsed & 0x20l) goto piece6at13;
03000:       if (!(puzzle & 0x2002002002000ll)) {
03001:          if(!(puzzle & 0x2402002002000ll))
03002:            doSolve(14, 0x4000ll, puzzle | 0x2402002002000ll,
03003:                    partsUsed | 0x20l);
03004:          if(!(puzzle & 0x2002002006000ll))
03005:            doSolve(14, 0x4000ll, puzzle | 0x2002002006000ll,
03006:                    partsUsed | 0x20l);
03007:          if(!(puzzle & 0x6002002002000ll))
03008:            doSolve(14, 0x4000ll, puzzle | 0x6002002002000ll,
03009:                    partsUsed | 0x20l);
03010:       }
03011:       if(!(puzzle & 0x2492000ll))
03012:         doSolve(14, 0x4000ll, puzzle | 0x2492000ll,
03013:                    partsUsed | 0x20l);
03014:       if(!(puzzle & 0x4004004006000ll))
03015:         doSolve(14, 0x4000ll, puzzle | 0x4004004006000ll,
03016:                    partsUsed | 0x20l);
03017:     piece6at13:
03018:       if (partsUsed & 0x40l) goto piece7at13;
03019:       if (!(puzzle & 0x2002002002000ll)) {
03020:          if(!(puzzle & 0x2002402002000ll))
03021:            doSolve(14, 0x4000ll, puzzle | 0x2002402002000ll,
03022:                    partsUsed | 0x40l);
03023:          if(!(puzzle & 0x2002002402000ll))
03024:            doSolve(14, 0x4000ll, puzzle | 0x2002002402000ll,
03025:                    partsUsed | 0x40l);
03026:          if(!(puzzle & 0x2002006002000ll))
03027:            doSolve(14, 0x4000ll, puzzle | 0x2002006002000ll,
03028:                    partsUsed | 0x40l);
03029:          if(!(puzzle & 0x2006002002000ll))
03030:            doSolve(14, 0x4000ll, puzzle | 0x2006002002000ll,
03031:                    partsUsed | 0x40l);
03032:       }
03033:     piece7at13:
03034:       if (partsUsed & 0x80l) goto piece8at13;
03035:       if(!(puzzle & 0x6004006000ll))
03036:         doSolve(14, 0x4000ll, puzzle | 0x6004006000ll,
03037:                    partsUsed | 0x80l);
03038:       if(!(puzzle & 0x6002006000ll))
03039:         doSolve(14, 0x4000ll, puzzle | 0x6002006000ll,
03040:                    partsUsed | 0x80l);
03041:       if(!(puzzle & 0xe00a000ll))
03042:         doSolve(14, 0x4000ll, puzzle | 0xe00a000ll,
03043:                    partsUsed | 0x80l);
03044:       if(!(puzzle & 0xa00e000ll))
03045:         doSolve(14, 0x4000ll, puzzle | 0xa00e000ll,
03046:                    partsUsed | 0x80l);
03047:     piece8at13:
03048:       if (partsUsed & 0x100l) goto piece9at13;
03049:       if(!(puzzle & 0x4806000ll))
03050:         doSolve(14, 0x4000ll, puzzle | 0x4806000ll,
03051:                    partsUsed | 0x100l);
03052:       if(!(puzzle & 0x2c02000ll))
03053:         doSolve(14, 0x4000ll, puzzle | 0x2c02000ll,
03054:                    partsUsed | 0x100l);
03055:     piece9at13:
03056:       if (partsUsed & 0x200l) goto piece10at13;
03057:       if(!(puzzle & 0x402482000ll))
03058:         doSolve(14, 0x4000ll, puzzle | 0x402482000ll,
03059:                    partsUsed | 0x200l);
03060:       if(!(puzzle & 0x400c006000ll))
03061:         doSolve(14, 0x4000ll, puzzle | 0x400c006000ll,
03062:                    partsUsed | 0x200l);
03063:       if(!(puzzle & 0x400e002000ll))
03064:         doSolve(14, 0x4000ll, puzzle | 0x400e002000ll,
03065:                    partsUsed | 0x200l);
03066:     piece10at13:
03067:       if (partsUsed & 0x400l) goto piece11at13;
03068:       if (!(puzzle & 0x2002002000ll)) {
03069:          if(!(puzzle & 0x2402402000ll))
03070:            doSolve(14, 0x4000ll, puzzle | 0x2402402000ll,
03071:                    partsUsed | 0x400l);
03072:          if(!(puzzle & 0x2006006000ll))
03073:            doSolve(14, 0x4000ll, puzzle | 0x2006006000ll,
03074:                    partsUsed | 0x400l);
03075:          if(!(puzzle & 0x6006002000ll))
03076:            doSolve(14, 0x4000ll, puzzle | 0x6006002000ll,
03077:                    partsUsed | 0x400l);
03078:       }
03079:       if (!(puzzle & 0x4006000ll)) {
03080:          if(!(puzzle & 0x4006006000ll))
03081:            doSolve(14, 0x4000ll, puzzle | 0x4006006000ll,
03082:                    partsUsed | 0x400l);
03083:          if(!(puzzle & 0xe006000ll))
03084:            doSolve(14, 0x4000ll, puzzle | 0xe006000ll,
03085:                    partsUsed | 0x400l);
03086:          if(!(puzzle & 0x600e000ll))
03087:            doSolve(14, 0x4000ll, puzzle | 0x600e000ll,
03088:                    partsUsed | 0x400l);
03089:          if(!(puzzle & 0xc00e000ll))
03090:            doSolve(14, 0x4000ll, puzzle | 0xc00e000ll,
03091:                    partsUsed | 0x400l);
03092:       }
03093:     piece11at13:
03094:       if (partsUsed & 0x800l) goto piece12at13;
03095:       if (!(puzzle & 0x6002000ll)) {
03096:          if(!(puzzle & 0x6c02000ll))
03097:            doSolve(14, 0x4000ll, puzzle | 0x6c02000ll,
03098:                    partsUsed | 0x800l);
03099:          if(!(puzzle & 0x6806000ll))
03100:            doSolve(14, 0x4000ll, puzzle | 0x6806000ll,
03101:                    partsUsed | 0x800l);
03102:          if(!(puzzle & 0x6406000ll))
03103:            doSolve(14, 0x4000ll, puzzle | 0x6406000ll,
03104:                    partsUsed | 0x800l);
03105:       }
03106:     piece12at13:
03107:     break;
03108:    case 14:
03109:       if (partsUsed & 0x2l) goto piece2at14;
03110:       if(!(puzzle & 0x904804000ll))
03111:         doSolve(15, 0x8000ll, puzzle | 0x904804000ll,
03112:                    partsUsed | 0x2l);
03113:       if(!(puzzle & 0x200600c000ll))
03114:         doSolve(15, 0x8000ll, puzzle | 0x200600c000ll,
03115:                    partsUsed | 0x2l);
03116:     piece2at14:
03117:       if (partsUsed & 0x4l) goto piece3at14;
03118:       if(!(puzzle & 0x4004904000ll))
03119:         doSolve(15, 0x8000ll, puzzle | 0x4004904000ll,
03120:                    partsUsed | 0x4l);
03121:       if(!(puzzle & 0xe004004000ll))
03122:         doSolve(15, 0x8000ll, puzzle | 0xe004004000ll,
03123:                    partsUsed | 0x4l);
03124:     piece3at14:
03125:       if (partsUsed & 0x8l) goto piece4at14;
03126:       if(!(puzzle & 0x104904000ll))
03127:         doSolve(15, 0x8000ll, puzzle | 0x104904000ll,
03128:                    partsUsed | 0x8l);
03129:       if(!(puzzle & 0x600400c000ll))
03130:         doSolve(15, 0x8000ll, puzzle | 0x600400c000ll,
03131:                    partsUsed | 0x8l);
03132:     piece4at14:
03133:       if (partsUsed & 0x10l) goto piece5at14;
03134:       if (!(puzzle & 0x4004004004000ll)) {
03135:          if(!(puzzle & 0x4804004804000ll))
03136:            doSolve(15, 0x8000ll, puzzle | 0x4804004804000ll,
03137:                    partsUsed | 0x10l);
03138:          if(!(puzzle & 0x6004006004000ll))
03139:            doSolve(15, 0x8000ll, puzzle | 0x6004006004000ll,
03140:                    partsUsed | 0x10l);
03141:          if(!(puzzle & 0xc00400c004000ll))
03142:            doSolve(15, 0x8000ll, puzzle | 0xc00400c004000ll,
03143:                    partsUsed | 0x10l);
03144:          if(!(puzzle & 0x400c00400c000ll))
03145:            doSolve(15, 0x8000ll, puzzle | 0x400c00400c000ll,
03146:                    partsUsed | 0x10l);
03147:       }
03148:       if(!(puzzle & 0x800c00800c000ll))
03149:         doSolve(15, 0x8000ll, puzzle | 0x800c00800c000ll,
03150:                    partsUsed | 0x10l);
03151:     piece5at14:
03152:       if (partsUsed & 0x20l) goto piece6at14;
03153:       if (!(puzzle & 0x4004004004000ll)) {
03154:          if(!(puzzle & 0x4804004004000ll))
03155:            doSolve(15, 0x8000ll, puzzle | 0x4804004004000ll,
03156:                    partsUsed | 0x20l);
03157:          if(!(puzzle & 0x6004004004000ll))
03158:            doSolve(15, 0x8000ll, puzzle | 0x6004004004000ll,
03159:                    partsUsed | 0x20l);
03160:          if(!(puzzle & 0x400400400c000ll))
03161:            doSolve(15, 0x8000ll, puzzle | 0x400400400c000ll,
03162:                    partsUsed | 0x20l);
03163:          if(!(puzzle & 0xc004004004000ll))
03164:            doSolve(15, 0x8000ll, puzzle | 0xc004004004000ll,
03165:                    partsUsed | 0x20l);
03166:       }
03167:       if(!(puzzle & 0x4924000ll))
03168:         doSolve(15, 0x8000ll, puzzle | 0x4924000ll,
03169:                    partsUsed | 0x20l);
03170:       if(!(puzzle & 0x800800800c000ll))
03171:         doSolve(15, 0x8000ll, puzzle | 0x800800800c000ll,
03172:                    partsUsed | 0x20l);
03173:     piece6at14:
03174:       if (partsUsed & 0x40l) goto piece7at14;
03175:       if (!(puzzle & 0x4004004004000ll)) {
03176:          if(!(puzzle & 0x4004804004000ll))
03177:            doSolve(15, 0x8000ll, puzzle | 0x4004804004000ll,
03178:                    partsUsed | 0x40l);
03179:          if(!(puzzle & 0x4004004804000ll))
03180:            doSolve(15, 0x8000ll, puzzle | 0x4004004804000ll,
03181:                    partsUsed | 0x40l);
03182:          if(!(puzzle & 0x4004006004000ll))
03183:            doSolve(15, 0x8000ll, puzzle | 0x4004006004000ll,
03184:                    partsUsed | 0x40l);
03185:          if(!(puzzle & 0x4006004004000ll))
03186:            doSolve(15, 0x8000ll, puzzle | 0x4006004004000ll,
03187:                    partsUsed | 0x40l);
03188:          if(!(puzzle & 0x400400c004000ll))
03189:            doSolve(15, 0x8000ll, puzzle | 0x400400c004000ll,
03190:                    partsUsed | 0x40l);
03191:          if(!(puzzle & 0x400c004004000ll))
03192:            doSolve(15, 0x8000ll, puzzle | 0x400c004004000ll,
03193:                    partsUsed | 0x40l);
03194:       }
03195:     piece7at14:
03196:       if (partsUsed & 0x80l) goto piece8at14;
03197:       if(!(puzzle & 0xc00800c000ll))
03198:         doSolve(15, 0x8000ll, puzzle | 0xc00800c000ll,
03199:                    partsUsed | 0x80l);
03200:       if(!(puzzle & 0xc00400c000ll))
03201:         doSolve(15, 0x8000ll, puzzle | 0xc00400c000ll,
03202:                    partsUsed | 0x80l);
03203:     piece8at14:
03204:       if (partsUsed & 0x100l) goto piece9at14;
03205:       if(!(puzzle & 0x5804000ll))
03206:         doSolve(15, 0x8000ll, puzzle | 0x5804000ll,
03207:                    partsUsed | 0x100l);
03208:       if(!(puzzle & 0x6404000ll))
03209:         doSolve(15, 0x8000ll, puzzle | 0x6404000ll,
03210:                    partsUsed | 0x100l);
03211:       if(!(puzzle & 0x900c000ll))
03212:         doSolve(15, 0x8000ll, puzzle | 0x900c000ll,
03213:                    partsUsed | 0x100l);
03214:     piece9at14:
03215:       if (partsUsed & 0x200l) goto piece10at14;
03216:       if (!(puzzle & 0x4004004000ll)) {
03217:          if(!(puzzle & 0x400600c000ll))
03218:            doSolve(15, 0x8000ll, puzzle | 0x400600c000ll,
03219:                    partsUsed | 0x200l);
03220:          if(!(puzzle & 0xc006004000ll))
03221:            doSolve(15, 0x8000ll, puzzle | 0xc006004000ll,
03222:                    partsUsed | 0x200l);
03223:          if(!(puzzle & 0x600c004000ll))
03224:            doSolve(15, 0x8000ll, puzzle | 0x600c004000ll,
03225:                    partsUsed | 0x200l);
03226:       }
03227:       if(!(puzzle & 0x804904000ll))
03228:         doSolve(15, 0x8000ll, puzzle | 0x804904000ll,
03229:                    partsUsed | 0x200l);
03230:       if(!(puzzle & 0x200e004000ll))
03231:         doSolve(15, 0x8000ll, puzzle | 0x200e004000ll,
03232:                    partsUsed | 0x200l);
03233:       if(!(puzzle & 0x800e004000ll))
03234:         doSolve(15, 0x8000ll, puzzle | 0x800e004000ll,
03235:                    partsUsed | 0x200l);
03236:     piece10at14:
03237:       if (partsUsed & 0x400l) goto piece11at14;
03238:       if (!(puzzle & 0x4004004000ll)) {
03239:          if(!(puzzle & 0x4804804000ll))
03240:            doSolve(15, 0x8000ll, puzzle | 0x4804804000ll,
03241:                    partsUsed | 0x400l);
03242:          if(!(puzzle & 0x6006004000ll))
03243:            doSolve(15, 0x8000ll, puzzle | 0x6006004000ll,
03244:                    partsUsed | 0x400l);
03245:          if(!(puzzle & 0x400c00c000ll))
03246:            doSolve(15, 0x8000ll, puzzle | 0x400c00c000ll,
03247:                    partsUsed | 0x400l);
03248:          if(!(puzzle & 0xc00c004000ll))
03249:            doSolve(15, 0x8000ll, puzzle | 0xc00c004000ll,
03250:                    partsUsed | 0x400l);
03251:       }
03252:       if(!(puzzle & 0xe00c000ll))
03253:         doSolve(15, 0x8000ll, puzzle | 0xe00c000ll,
03254:                    partsUsed | 0x400l);
03255:       if(!(puzzle & 0x800c00c000ll))
03256:         doSolve(15, 0x8000ll, puzzle | 0x800c00c000ll,
03257:                    partsUsed | 0x400l);
03258:     piece11at14:
03259:       if (partsUsed & 0x800l) goto piece12at14;
03260:       if (!(puzzle & 0x4804000ll)) {
03261:          if(!(puzzle & 0x6c04000ll))
03262:            doSolve(15, 0x8000ll, puzzle | 0x6c04000ll,
03263:                    partsUsed | 0x800l);
03264:          if(!(puzzle & 0xd804000ll))
03265:            doSolve(15, 0x8000ll, puzzle | 0xd804000ll,
03266:                    partsUsed | 0x800l);
03267:          if(!(puzzle & 0xc80c000ll))
03268:            doSolve(15, 0x8000ll, puzzle | 0xc80c000ll,
03269:                    partsUsed | 0x800l);
03270:       }
03271:       if(!(puzzle & 0xd00c000ll))
03272:         doSolve(15, 0x8000ll, puzzle | 0xd00c000ll,
03273:                    partsUsed | 0x800l);
03274:     piece12at14:
03275:     break;
03276:    case 15:
03277:       if (partsUsed & 0x2l) goto piece2at15;
03278:       if(!(puzzle & 0x1209008000ll))
03279:         doSolve(16, 0x10000ll, puzzle | 0x1209008000ll,
03280:                    partsUsed | 0x2l);
03281:       if(!(puzzle & 0x600c008000ll))
03282:         doSolve(16, 0x10000ll, puzzle | 0x600c008000ll,
03283:                    partsUsed | 0x2l);
03284:     piece2at15:
03285:       if (partsUsed & 0x4l) goto piece3at15;
03286:       if(!(puzzle & 0x8009208000ll))
03287:         doSolve(16, 0x10000ll, puzzle | 0x8009208000ll,
03288:                    partsUsed | 0x4l);
03289:       if(!(puzzle & 0x800e008000ll))
03290:         doSolve(16, 0x10000ll, puzzle | 0x800e008000ll,
03291:                    partsUsed | 0x4l);
03292:     piece3at15:
03293:       if (partsUsed & 0x8l) goto piece4at15;
03294:       if(!(puzzle & 0x209208000ll))
03295:         doSolve(16, 0x10000ll, puzzle | 0x209208000ll,
03296:                    partsUsed | 0x8l);
03297:       if(!(puzzle & 0x200e008000ll))
03298:         doSolve(16, 0x10000ll, puzzle | 0x200e008000ll,
03299:                    partsUsed | 0x8l);
03300:     piece4at15:
03301:       if (partsUsed & 0x10l) goto piece5at15;
03302:       if(!(puzzle & 0x9008009008000ll))
03303:         doSolve(16, 0x10000ll, puzzle | 0x9008009008000ll,
03304:                    partsUsed | 0x10l);
03305:       if(!(puzzle & 0xc00800c008000ll))
03306:         doSolve(16, 0x10000ll, puzzle | 0xc00800c008000ll,
03307:                    partsUsed | 0x10l);
03308:     piece5at15:
03309:       if (partsUsed & 0x20l) goto piece6at15;
03310:       if(!(puzzle & 0x9248000ll))
03311:         doSolve(16, 0x10000ll, puzzle | 0x9248000ll,
03312:                    partsUsed | 0x20l);
03313:       if(!(puzzle & 0x9008008008000ll))
03314:         doSolve(16, 0x10000ll, puzzle | 0x9008008008000ll,
03315:                    partsUsed | 0x20l);
03316:       if(!(puzzle & 0xc008008008000ll))
03317:         doSolve(16, 0x10000ll, puzzle | 0xc008008008000ll,
03318:                    partsUsed | 0x20l);
03319:     piece6at15:
03320:       if (partsUsed & 0x40l) goto piece7at15;
03321:       if (!(puzzle & 0x8008008008000ll)) {
03322:          if(!(puzzle & 0x8009008008000ll))
03323:            doSolve(16, 0x10000ll, puzzle | 0x8009008008000ll,
03324:                    partsUsed | 0x40l);
03325:          if(!(puzzle & 0x8008009008000ll))
03326:            doSolve(16, 0x10000ll, puzzle | 0x8008009008000ll,
03327:                    partsUsed | 0x40l);
03328:          if(!(puzzle & 0x800800c008000ll))
03329:            doSolve(16, 0x10000ll, puzzle | 0x800800c008000ll,
03330:                    partsUsed | 0x40l);
03331:          if(!(puzzle & 0x800c008008000ll))
03332:            doSolve(16, 0x10000ll, puzzle | 0x800c008008000ll,
03333:                    partsUsed | 0x40l);
03334:       }
03335:     piece7at15:
03336:       if (partsUsed & 0x100l) goto piece9at15;
03337:       if(!(puzzle & 0xc808000ll))
03338:         doSolve(16, 0x10000ll, puzzle | 0xc808000ll,
03339:                    partsUsed | 0x100l);
03340:     piece9at15:
03341:       if (partsUsed & 0x200l) goto piece10at15;
03342:       if(!(puzzle & 0x1009208000ll))
03343:         doSolve(16, 0x10000ll, puzzle | 0x1009208000ll,
03344:                    partsUsed | 0x200l);
03345:       if(!(puzzle & 0x400e008000ll))
03346:         doSolve(16, 0x10000ll, puzzle | 0x400e008000ll,
03347:                    partsUsed | 0x200l);
03348:     piece10at15:
03349:       if (partsUsed & 0x400l) goto piece11at15;
03350:       if(!(puzzle & 0x9009008000ll))
03351:         doSolve(16, 0x10000ll, puzzle | 0x9009008000ll,
03352:                    partsUsed | 0x400l);
03353:       if(!(puzzle & 0xc00c008000ll))
03354:         doSolve(16, 0x10000ll, puzzle | 0xc00c008000ll,
03355:                    partsUsed | 0x400l);
03356:     piece11at15:
03357:       if (partsUsed & 0x800l) goto piece12at15;
03358:       if(!(puzzle & 0xd808000ll))
03359:         doSolve(16, 0x10000ll, puzzle | 0xd808000ll,
03360:                    partsUsed | 0x800l);
03361:     piece12at15:
03362:     break;
03363:    case 16:
03364:       if (partsUsed & 0x2l) goto piece2at16;
03365:       if(!(puzzle & 0x480090010000ll))
03366:         doSolve(17, 0x20000ll, puzzle | 0x480090010000ll,
03367:                    partsUsed | 0x2l);
03368:       if(!(puzzle & 0x400480090000ll))
03369:         doSolve(17, 0x20000ll, puzzle | 0x400480090000ll,
03370:                    partsUsed | 0x2l);
03371:       if(!(puzzle & 0x1330000ll))
03372:         doSolve(17, 0x20000ll, puzzle | 0x1330000ll,
03373:                    partsUsed | 0x2l);
03374:       if(!(puzzle & 0x1990000ll))
03375:         doSolve(17, 0x20000ll, puzzle | 0x1990000ll,
03376:                    partsUsed | 0x2l);
03377:       if(!(puzzle & 0x40060030000ll))
03378:         doSolve(17, 0x20000ll, puzzle | 0x40060030000ll,
03379:                    partsUsed | 0x2l);
03380:       if(!(puzzle & 0x60030010000ll))
03381:         doSolve(17, 0x20000ll, puzzle | 0x60030010000ll,
03382:                    partsUsed | 0x2l);
03383:     piece2at16:
03384:       if (partsUsed & 0x4l) goto piece3at16;
03385:       if(!(puzzle & 0x10490010000ll))
03386:         doSolve(17, 0x20000ll, puzzle | 0x10490010000ll,
03387:                    partsUsed | 0x4l);
03388:       if(!(puzzle & 0x10070010000ll))
03389:         doSolve(17, 0x20000ll, puzzle | 0x10070010000ll,
03390:                    partsUsed | 0x4l);
03391:       if(!(puzzle & 0x80080490000ll))
03392:         doSolve(17, 0x20000ll, puzzle | 0x80080490000ll,
03393:                    partsUsed | 0x4l);
03394:       if(!(puzzle & 0x790000ll))
03395:         doSolve(17, 0x20000ll, puzzle | 0x790000ll,
03396:                    partsUsed | 0x4l);
03397:       if(!(puzzle & 0x970000ll))
03398:         doSolve(17, 0x20000ll, puzzle | 0x970000ll,
03399:                    partsUsed | 0x4l);
03400:       if(!(puzzle & 0x20020070000ll))
03401:         doSolve(17, 0x20000ll, puzzle | 0x20020070000ll,
03402:                    partsUsed | 0x4l);
03403:     piece3at16:
03404:       if (partsUsed & 0x8l) goto piece4at16;
03405:       if(!(puzzle & 0x400490010000ll))
03406:         doSolve(17, 0x20000ll, puzzle | 0x400490010000ll,
03407:                    partsUsed | 0x8l);
03408:       if(!(puzzle & 0x480080090000ll))
03409:         doSolve(17, 0x20000ll, puzzle | 0x480080090000ll,
03410:                    partsUsed | 0x8l);
03411:       if(!(puzzle & 0x1930000ll))
03412:         doSolve(17, 0x20000ll, puzzle | 0x1930000ll,
03413:                    partsUsed | 0x8l);
03414:       if(!(puzzle & 0x1390000ll))
03415:         doSolve(17, 0x20000ll, puzzle | 0x1390000ll,
03416:                    partsUsed | 0x8l);
03417:       if(!(puzzle & 0x40070010000ll))
03418:         doSolve(17, 0x20000ll, puzzle | 0x40070010000ll,
03419:                    partsUsed | 0x8l);
03420:       if(!(puzzle & 0x60020030000ll))
03421:         doSolve(17, 0x20000ll, puzzle | 0x60020030000ll,
03422:                    partsUsed | 0x8l);
03423:     piece4at16:
03424:       if (partsUsed & 0x10l) goto piece5at16;
03425:       if (!(puzzle & 0x2490000ll)) {
03426:          if(!(puzzle & 0x6590000ll))
03427:            doSolve(17, 0x20000ll, puzzle | 0x6590000ll,
03428:                    partsUsed | 0x10l);
03429:          if(!(puzzle & 0x2082490000ll))
03430:            doSolve(17, 0x20000ll, puzzle | 0x2082490000ll,
03431:                    partsUsed | 0x10l);
03432:          if(!(puzzle & 0x2cb0000ll))
03433:            doSolve(17, 0x20000ll, puzzle | 0x2cb0000ll,
03434:                    partsUsed | 0x10l);
03435:       }
03436:       if(!(puzzle & 0x90010090010000ll))
03437:         doSolve(17, 0x20000ll, puzzle | 0x90010090010000ll,
03438:                    partsUsed | 0x10l);
03439:       if(!(puzzle & 0x80090080090000ll))
03440:         doSolve(17, 0x20000ll, puzzle | 0x80090080090000ll,
03441:                    partsUsed | 0x10l);
03442:       if(!(puzzle & 0x412490000ll))
03443:         doSolve(17, 0x20000ll, puzzle | 0x412490000ll,
03444:                    partsUsed | 0x10l);
03445:       if(!(puzzle & 0x10090010090000ll))
03446:         doSolve(17, 0x20000ll, puzzle | 0x10090010090000ll,
03447:                    partsUsed | 0x10l);
03448:       if(!(puzzle & 0x4d30000ll))
03449:         doSolve(17, 0x20000ll, puzzle | 0x4d30000ll,
03450:                    partsUsed | 0x10l);
03451:       if(!(puzzle & 0x2490410000ll))
03452:         doSolve(17, 0x20000ll, puzzle | 0x2490410000ll,
03453:                    partsUsed | 0x10l);
03454:       if(!(puzzle & 0x30010030010000ll))
03455:         doSolve(17, 0x20000ll, puzzle | 0x30010030010000ll,
03456:                    partsUsed | 0x10l);
03457:       if(!(puzzle & 0x10030010030000ll))
03458:         doSolve(17, 0x20000ll, puzzle | 0x10030010030000ll,
03459:                    partsUsed | 0x10l);
03460:       if(!(puzzle & 0x20030020030000ll))
03461:         doSolve(17, 0x20000ll, puzzle | 0x20030020030000ll,
03462:                    partsUsed | 0x10l);
03463:     piece5at16:
03464:       if (partsUsed & 0x20l) goto piece6at16;
03465:       if (!(puzzle & 0x10010010010000ll)) {
03466:          if(!(puzzle & 0x10010010090000ll))
03467:            doSolve(17, 0x20000ll, puzzle | 0x10010010090000ll,
03468:                    partsUsed | 0x20l);
03469:          if(!(puzzle & 0x90010010010000ll))
03470:            doSolve(17, 0x20000ll, puzzle | 0x90010010010000ll,
03471:                    partsUsed | 0x20l);
03472:          if(!(puzzle & 0x10010010030000ll))
03473:            doSolve(17, 0x20000ll, puzzle | 0x10010010030000ll,
03474:                    partsUsed | 0x20l);
03475:          if(!(puzzle & 0x30010010010000ll))
03476:            doSolve(17, 0x20000ll, puzzle | 0x30010010010000ll,
03477:                    partsUsed | 0x20l);
03478:       }
03479:       if (!(puzzle & 0x2490000ll)) {
03480:          if(!(puzzle & 0x2002490000ll))
03481:            doSolve(17, 0x20000ll, puzzle | 0x2002490000ll,
03482:                    partsUsed | 0x20l);
03483:          if(!(puzzle & 0x24b0000ll))
03484:            doSolve(17, 0x20000ll, puzzle | 0x24b0000ll,
03485:                    partsUsed | 0x20l);
03486:          if(!(puzzle & 0x12490000ll))
03487:            doSolve(17, 0x20000ll, puzzle | 0x12490000ll,
03488:                    partsUsed | 0x20l);
03489:          if(!(puzzle & 0x6490000ll))
03490:            doSolve(17, 0x20000ll, puzzle | 0x6490000ll,
03491:                    partsUsed | 0x20l);
03492:       }
03493:       if(!(puzzle & 0x2490010000ll))
03494:         doSolve(17, 0x20000ll, puzzle | 0x2490010000ll,
03495:                    partsUsed | 0x20l);
03496:       if(!(puzzle & 0x4930000ll))
03497:         doSolve(17, 0x20000ll, puzzle | 0x4930000ll,
03498:                    partsUsed | 0x20l);
03499:       if(!(puzzle & 0x80080080090000ll))
03500:         doSolve(17, 0x20000ll, puzzle | 0x80080080090000ll,
03501:                    partsUsed | 0x20l);
03502:       if(!(puzzle & 0x20020020030000ll))
03503:         doSolve(17, 0x20000ll, puzzle | 0x20020020030000ll,
03504:                    partsUsed | 0x20l);
03505:     piece6at16:
03506:       if (partsUsed & 0x40l) goto piece7at16;
03507:       if (!(puzzle & 0x10010010010000ll)) {
03508:          if(!(puzzle & 0x10010090010000ll))
03509:            doSolve(17, 0x20000ll, puzzle | 0x10010090010000ll,
03510:                    partsUsed | 0x40l);
03511:          if(!(puzzle & 0x10090010010000ll))
03512:            doSolve(17, 0x20000ll, puzzle | 0x10090010010000ll,
03513:                    partsUsed | 0x40l);
03514:          if(!(puzzle & 0x10010030010000ll))
03515:            doSolve(17, 0x20000ll, puzzle | 0x10010030010000ll,
03516:                    partsUsed | 0x40l);
03517:          if(!(puzzle & 0x10030010010000ll))
03518:            doSolve(17, 0x20000ll, puzzle | 0x10030010010000ll,
03519:                    partsUsed | 0x40l);
03520:       }
03521:       if (!(puzzle & 0x2490000ll)) {
03522:          if(!(puzzle & 0x402490000ll))
03523:            doSolve(17, 0x20000ll, puzzle | 0x402490000ll,
03524:                    partsUsed | 0x40l);
03525:          if(!(puzzle & 0x2590000ll))
03526:            doSolve(17, 0x20000ll, puzzle | 0x2590000ll,
03527:                    partsUsed | 0x40l);
03528:          if(!(puzzle & 0x82490000ll))
03529:            doSolve(17, 0x20000ll, puzzle | 0x82490000ll,
03530:                    partsUsed | 0x40l);
03531:          if(!(puzzle & 0x2c90000ll))
03532:            doSolve(17, 0x20000ll, puzzle | 0x2c90000ll,
03533:                    partsUsed | 0x40l);
03534:       }
03535:     piece7at16:
03536:       if (partsUsed & 0x80l) goto piece8at16;
03537:       if(!(puzzle & 0x90010090000ll))
03538:         doSolve(17, 0x20000ll, puzzle | 0x90010090000ll,
03539:                    partsUsed | 0x80l);
03540:       if(!(puzzle & 0x90080090000ll))
03541:         doSolve(17, 0x20000ll, puzzle | 0x90080090000ll,
03542:                    partsUsed | 0x80l);
03543:       if(!(puzzle & 0x490410000ll))
03544:         doSolve(17, 0x20000ll, puzzle | 0x490410000ll,
03545:                    partsUsed | 0x80l);
03546:       if(!(puzzle & 0x410490000ll))
03547:         doSolve(17, 0x20000ll, puzzle | 0x410490000ll,
03548:                    partsUsed | 0x80l);
03549:       if(!(puzzle & 0x2f0000ll))
03550:         doSolve(17, 0x20000ll, puzzle | 0x2f0000ll,
03551:                    partsUsed | 0x80l);
03552:       if(!(puzzle & 0xcb0000ll))
03553:         doSolve(17, 0x20000ll, puzzle | 0xcb0000ll,
03554:                    partsUsed | 0x80l);
03555:       if(!(puzzle & 0xd30000ll))
03556:         doSolve(17, 0x20000ll, puzzle | 0xd30000ll,
03557:                    partsUsed | 0x80l);
03558:       if(!(puzzle & 0x3d0000ll))
03559:         doSolve(17, 0x20000ll, puzzle | 0x3d0000ll,
03560:                    partsUsed | 0x80l);
03561:       if(!(puzzle & 0x30020030000ll))
03562:         doSolve(17, 0x20000ll, puzzle | 0x30020030000ll,
03563:                    partsUsed | 0x80l);
03564:       if(!(puzzle & 0x30010030000ll))
03565:         doSolve(17, 0x20000ll, puzzle | 0x30010030000ll,
03566:                    partsUsed | 0x80l);
03567:       if(!(puzzle & 0x70050000ll))
03568:         doSolve(17, 0x20000ll, puzzle | 0x70050000ll,
03569:                    partsUsed | 0x80l);
03570:       if(!(puzzle & 0x50070000ll))
03571:         doSolve(17, 0x20000ll, puzzle | 0x50070000ll,
03572:                    partsUsed | 0x80l);
03573:     piece8at16:
03574:       if (partsUsed & 0x100l) goto piece9at16;
03575:       if(!(puzzle & 0x100130000ll))
03576:         doSolve(17, 0x20000ll, puzzle | 0x100130000ll,
03577:                    partsUsed | 0x100l);
03578:       if(!(puzzle & 0x130010000ll))
03579:         doSolve(17, 0x20000ll, puzzle | 0x130010000ll,
03580:                    partsUsed | 0x100l);
03581:       if(!(puzzle & 0x200b0000ll))
03582:         doSolve(17, 0x20000ll, puzzle | 0x200b0000ll,
03583:                    partsUsed | 0x100l);
03584:       if(!(puzzle & 0x90030000ll))
03585:         doSolve(17, 0x20000ll, puzzle | 0x90030000ll,
03586:                    partsUsed | 0x100l);
03587:       if(!(puzzle & 0x180090000ll))
03588:         doSolve(17, 0x20000ll, puzzle | 0x180090000ll,
03589:                    partsUsed | 0x100l);
03590:       if(!(puzzle & 0x10190000ll))
03591:         doSolve(17, 0x20000ll, puzzle | 0x10190000ll,
03592:                    partsUsed | 0x100l);
03593:     piece9at16:
03594:       if (partsUsed & 0x200l) goto piece10at16;
03595:       if(!(puzzle & 0x80490010000ll))
03596:         doSolve(17, 0x20000ll, puzzle | 0x80490010000ll,
03597:                    partsUsed | 0x200l);
03598:       if(!(puzzle & 0x80480090000ll))
03599:         doSolve(17, 0x20000ll, puzzle | 0x80480090000ll,
03600:                    partsUsed | 0x200l);
03601:       if(!(puzzle & 0xb30000ll))
03602:         doSolve(17, 0x20000ll, puzzle | 0xb30000ll,
03603:                    partsUsed | 0x200l);
03604:       if(!(puzzle & 0xb90000ll))
03605:         doSolve(17, 0x20000ll, puzzle | 0xb90000ll,
03606:                    partsUsed | 0x200l);
03607:       if(!(puzzle & 0x20060030000ll))
03608:         doSolve(17, 0x20000ll, puzzle | 0x20060030000ll,
03609:                    partsUsed | 0x200l);
03610:       if(!(puzzle & 0x20070010000ll))
03611:         doSolve(17, 0x20000ll, puzzle | 0x20070010000ll,
03612:                    partsUsed | 0x200l);
03613:     piece10at16:
03614:       if (partsUsed & 0x400l) goto piece11at16;
03615:       if (!(puzzle & 0x80090000ll)) {
03616:          if(!(puzzle & 0x10090090000ll))
03617:            doSolve(17, 0x20000ll, puzzle | 0x10090090000ll,
03618:                    partsUsed | 0x400l);
03619:          if(!(puzzle & 0x490090000ll))
03620:            doSolve(17, 0x20000ll, puzzle | 0x490090000ll,
03621:                    partsUsed | 0x400l);
03622:          if(!(puzzle & 0x480490000ll))
03623:            doSolve(17, 0x20000ll, puzzle | 0x480490000ll,
03624:                    partsUsed | 0x400l);
03625:          if(!(puzzle & 0x90490000ll))
03626:            doSolve(17, 0x20000ll, puzzle | 0x90490000ll,
03627:                    partsUsed | 0x400l);
03628:          if(!(puzzle & 0x80090090000ll))
03629:            doSolve(17, 0x20000ll, puzzle | 0x80090090000ll,
03630:                    partsUsed | 0x400l);
03631:       }
03632:       if (!(puzzle & 0x130000ll)) {
03633:          if(!(puzzle & 0x370000ll))
03634:            doSolve(17, 0x20000ll, puzzle | 0x370000ll,
03635:                    partsUsed | 0x400l);
03636:          if(!(puzzle & 0x1f0000ll))
03637:            doSolve(17, 0x20000ll, puzzle | 0x1f0000ll,
03638:                    partsUsed | 0x400l);
03639:          if(!(puzzle & 0x5b0000ll))
03640:            doSolve(17, 0x20000ll, puzzle | 0x5b0000ll,
03641:                    partsUsed | 0x400l);
03642:          if(!(puzzle & 0x9b0000ll))
03643:            doSolve(17, 0x20000ll, puzzle | 0x9b0000ll,
03644:                    partsUsed | 0x400l);
03645:          if(!(puzzle & 0x3b0000ll))
03646:            doSolve(17, 0x20000ll, puzzle | 0x3b0000ll,
03647:                    partsUsed | 0x400l);
03648:       }
03649:       if (!(puzzle & 0x10010010000ll)) {
03650:          if(!(puzzle & 0x90090010000ll))
03651:            doSolve(17, 0x20000ll, puzzle | 0x90090010000ll,
03652:                    partsUsed | 0x400l);
03653:          if(!(puzzle & 0x10030030000ll))
03654:            doSolve(17, 0x20000ll, puzzle | 0x10030030000ll,
03655:                    partsUsed | 0x400l);
03656:          if(!(puzzle & 0x30030010000ll))
03657:            doSolve(17, 0x20000ll, puzzle | 0x30030010000ll,
03658:                    partsUsed | 0x400l);
03659:       }
03660:       if (!(puzzle & 0x20030000ll)) {
03661:          if(!(puzzle & 0x20030030000ll))
03662:            doSolve(17, 0x20000ll, puzzle | 0x20030030000ll,
03663:                    partsUsed | 0x400l);
03664:          if(!(puzzle & 0x70030000ll))
03665:            doSolve(17, 0x20000ll, puzzle | 0x70030000ll,
03666:                    partsUsed | 0x400l);
03667:          if(!(puzzle & 0x30070000ll))
03668:            doSolve(17, 0x20000ll, puzzle | 0x30070000ll,
03669:                    partsUsed | 0x400l);
03670:          if(!(puzzle & 0x60070000ll))
03671:            doSolve(17, 0x20000ll, puzzle | 0x60070000ll,
03672:                    partsUsed | 0x400l);
03673:       }
03674:       if(!(puzzle & 0xd90000ll))
03675:         doSolve(17, 0x20000ll, puzzle | 0xd90000ll,
03676:                    partsUsed | 0x400l);
03677:     piece11at16:
03678:       if (partsUsed & 0x800l) goto piece12at16;
03679:       if (!(puzzle & 0x10030000ll)) {
03680:          if(!(puzzle & 0x101b0000ll))
03681:            doSolve(17, 0x20000ll, puzzle | 0x101b0000ll,
03682:                    partsUsed | 0x800l);
03683:          if(!(puzzle & 0xb0030000ll))
03684:            doSolve(17, 0x20000ll, puzzle | 0xb0030000ll,
03685:                    partsUsed | 0x800l);
03686:          if(!(puzzle & 0x300b0000ll))
03687:            doSolve(17, 0x20000ll, puzzle | 0x300b0000ll,
03688:                    partsUsed | 0x800l);
03689:          if(!(puzzle & 0x30130000ll))
03690:            doSolve(17, 0x20000ll, puzzle | 0x30130000ll,
03691:                    partsUsed | 0x800l);
03692:          if(!(puzzle & 0x130030000ll))
03693:            doSolve(17, 0x20000ll, puzzle | 0x130030000ll,
03694:                    partsUsed | 0x800l);
03695:          if(!(puzzle & 0x900b0000ll))
03696:            doSolve(17, 0x20000ll, puzzle | 0x900b0000ll,
03697:                    partsUsed | 0x800l);
03698:       }
03699:       if (!(puzzle & 0x100110000ll)) {
03700:          if(!(puzzle & 0x180190000ll))
03701:            doSolve(17, 0x20000ll, puzzle | 0x180190000ll,
03702:                    partsUsed | 0x800l);
03703:          if(!(puzzle & 0x120130000ll))
03704:            doSolve(17, 0x20000ll, puzzle | 0x120130000ll,
03705:                    partsUsed | 0x800l);
03706:          if(!(puzzle & 0x1001b0000ll))
03707:            doSolve(17, 0x20000ll, puzzle | 0x1001b0000ll,
03708:                    partsUsed | 0x800l);
03709:       }
03710:       if (!(puzzle & 0x80090000ll)) {
03711:          if(!(puzzle & 0xb0090000ll))
03712:            doSolve(17, 0x20000ll, puzzle | 0xb0090000ll,
03713:                    partsUsed | 0x800l);
03714:          if(!(puzzle & 0x90190000ll))
03715:            doSolve(17, 0x20000ll, puzzle | 0x90190000ll,
03716:                    partsUsed | 0x800l);
03717:          if(!(puzzle & 0x801b0000ll))
03718:            doSolve(17, 0x20000ll, puzzle | 0x801b0000ll,
03719:                    partsUsed | 0x800l);
03720:          if(!(puzzle & 0x190090000ll))
03721:            doSolve(17, 0x20000ll, puzzle | 0x190090000ll,
03722:                    partsUsed | 0x800l);
03723:       }
03724:       if(!(puzzle & 0x201b0000ll))
03725:         doSolve(17, 0x20000ll, puzzle | 0x201b0000ll,
03726:                    partsUsed | 0x800l);
03727:       if(!(puzzle & 0x1b0010000ll))
03728:         doSolve(17, 0x20000ll, puzzle | 0x1b0010000ll,
03729:                    partsUsed | 0x800l);
03730:     piece12at16:
03731:     break;
03732:    case 17:
03733:       if (partsUsed & 0x2l) goto piece2at17;
03734:       if(!(puzzle & 0x5e0000ll))
03735:         doSolve(18, 0x40000ll, puzzle | 0x5e0000ll,
03736:                    partsUsed | 0x2l);
03737:       if(!(puzzle & 0x10030060000ll))
03738:         doSolve(18, 0x40000ll, puzzle | 0x10030060000ll,
03739:                    partsUsed | 0x2l);
03740:       if(!(puzzle & 0x900120020000ll))
03741:         doSolve(18, 0x40000ll, puzzle | 0x900120020000ll,
03742:                    partsUsed | 0x2l);
03743:       if(!(puzzle & 0x800900120000ll))
03744:         doSolve(18, 0x40000ll, puzzle | 0x800900120000ll,
03745:                    partsUsed | 0x2l);
03746:     piece2at17:
03747:       if (partsUsed & 0x4l) goto piece3at17;
03748:       if(!(puzzle & 0x1d20000ll))
03749:         doSolve(18, 0x40000ll, puzzle | 0x1d20000ll,
03750:                    partsUsed | 0x4l);
03751:       if(!(puzzle & 0x100100920000ll))
03752:         doSolve(18, 0x40000ll, puzzle | 0x100100920000ll,
03753:                    partsUsed | 0x4l);
03754:       if(!(puzzle & 0x70020020000ll))
03755:         doSolve(18, 0x40000ll, puzzle | 0x70020020000ll,
03756:                    partsUsed | 0x4l);
03757:       if(!(puzzle & 0x20920020000ll))
03758:         doSolve(18, 0x40000ll, puzzle | 0x20920020000ll,
03759:                    partsUsed | 0x4l);
03760:     piece3at17:
03761:       if (partsUsed & 0x8l) goto piece4at17;
03762:       if(!(puzzle & 0xd60000ll))
03763:         doSolve(18, 0x40000ll, puzzle | 0xd60000ll,
03764:                    partsUsed | 0x8l);
03765:       if(!(puzzle & 0x30020060000ll))
03766:         doSolve(18, 0x40000ll, puzzle | 0x30020060000ll,
03767:                    partsUsed | 0x8l);
03768:       if(!(puzzle & 0x800920020000ll))
03769:         doSolve(18, 0x40000ll, puzzle | 0x800920020000ll,
03770:                    partsUsed | 0x8l);
03771:       if(!(puzzle & 0x900100120000ll))
03772:         doSolve(18, 0x40000ll, puzzle | 0x900100120000ll,
03773:                    partsUsed | 0x8l);
03774:     piece4at17:
03775:       if (partsUsed & 0x10l) goto piece5at17;
03776:       if (!(puzzle & 0x4920000ll)) {
03777:          if(!(puzzle & 0x69a0000ll))
03778:            doSolve(18, 0x40000ll, puzzle | 0x69a0000ll,
03779:                    partsUsed | 0x10l);
03780:          if(!(puzzle & 0x824920000ll))
03781:            doSolve(18, 0x40000ll, puzzle | 0x824920000ll,
03782:                    partsUsed | 0x10l);
03783:          if(!(puzzle & 0xcb20000ll))
03784:            doSolve(18, 0x40000ll, puzzle | 0xcb20000ll,
03785:                    partsUsed | 0x10l);
03786:          if(!(puzzle & 0x4104920000ll))
03787:            doSolve(18, 0x40000ll, puzzle | 0x4104920000ll,
03788:                    partsUsed | 0x10l);
03789:          if(!(puzzle & 0x5960000ll))
03790:            doSolve(18, 0x40000ll, puzzle | 0x5960000ll,
03791:                    partsUsed | 0x10l);
03792:       }
03793:       if (!(puzzle & 0x20020020020000ll)) {
03794:          if(!(puzzle & 0x30020030020000ll))
03795:            doSolve(18, 0x40000ll, puzzle | 0x30020030020000ll,
03796:                    partsUsed | 0x10l);
03797:          if(!(puzzle & 0x120020120020000ll))
03798:            doSolve(18, 0x40000ll, puzzle | 0x120020120020000ll,
03799:                    partsUsed | 0x10l);
03800:          if(!(puzzle & 0x20120020120000ll))
03801:            doSolve(18, 0x40000ll, puzzle | 0x20120020120000ll,
03802:                    partsUsed | 0x10l);
03803:          if(!(puzzle & 0x60020060020000ll))
03804:            doSolve(18, 0x40000ll, puzzle | 0x60020060020000ll,
03805:                    partsUsed | 0x10l);
03806:          if(!(puzzle & 0x20060020060000ll))
03807:            doSolve(18, 0x40000ll, puzzle | 0x20060020060000ll,
03808:                    partsUsed | 0x10l);
03809:       }
03810:       if(!(puzzle & 0x100120100120000ll))
03811:         doSolve(18, 0x40000ll, puzzle | 0x100120100120000ll,
03812:                    partsUsed | 0x10l);
03813:       if(!(puzzle & 0x9a60000ll))
03814:         doSolve(18, 0x40000ll, puzzle | 0x9a60000ll,
03815:                    partsUsed | 0x10l);
03816:       if(!(puzzle & 0x4920820000ll))
03817:         doSolve(18, 0x40000ll, puzzle | 0x4920820000ll,
03818:                    partsUsed | 0x10l);
03819:       if(!(puzzle & 0x40060040060000ll))
03820:         doSolve(18, 0x40000ll, puzzle | 0x40060040060000ll,
03821:                    partsUsed | 0x10l);
03822:     piece5at17:
03823:       if (partsUsed & 0x20l) goto piece6at17;
03824:       if (!(puzzle & 0x4920000ll)) {
03825:          if(!(puzzle & 0x6920000ll))
03826:            doSolve(18, 0x40000ll, puzzle | 0x6920000ll,
03827:                    partsUsed | 0x20l);
03828:          if(!(puzzle & 0x4004920000ll))
03829:            doSolve(18, 0x40000ll, puzzle | 0x4004920000ll,
03830:                    partsUsed | 0x20l);
03831:          if(!(puzzle & 0x4960000ll))
03832:            doSolve(18, 0x40000ll, puzzle | 0x4960000ll,
03833:                    partsUsed | 0x20l);
03834:          if(!(puzzle & 0x24920000ll))
03835:            doSolve(18, 0x40000ll, puzzle | 0x24920000ll,
03836:                    partsUsed | 0x20l);
03837:          if(!(puzzle & 0xc920000ll))
03838:            doSolve(18, 0x40000ll, puzzle | 0xc920000ll,
03839:                    partsUsed | 0x20l);
03840:       }
03841:       if (!(puzzle & 0x20020020020000ll)) {
03842:          if(!(puzzle & 0x30020020020000ll))
03843:            doSolve(18, 0x40000ll, puzzle | 0x30020020020000ll,
03844:                    partsUsed | 0x20l);
03845:          if(!(puzzle & 0x20020020120000ll))
03846:            doSolve(18, 0x40000ll, puzzle | 0x20020020120000ll,
03847:                    partsUsed | 0x20l);
03848:          if(!(puzzle & 0x120020020020000ll))
03849:            doSolve(18, 0x40000ll, puzzle | 0x120020020020000ll,
03850:                    partsUsed | 0x20l);
03851:          if(!(puzzle & 0x20020020060000ll))
03852:            doSolve(18, 0x40000ll, puzzle | 0x20020020060000ll,
03853:                    partsUsed | 0x20l);
03854:          if(!(puzzle & 0x60020020020000ll))
03855:            doSolve(18, 0x40000ll, puzzle | 0x60020020020000ll,
03856:                    partsUsed | 0x20l);
03857:       }
03858:       if(!(puzzle & 0x4920020000ll))
03859:         doSolve(18, 0x40000ll, puzzle | 0x4920020000ll,
03860:                    partsUsed | 0x20l);
03861:       if(!(puzzle & 0x9260000ll))
03862:         doSolve(18, 0x40000ll, puzzle | 0x9260000ll,
03863:                    partsUsed | 0x20l);
03864:       if(!(puzzle & 0x100100100120000ll))
03865:         doSolve(18, 0x40000ll, puzzle | 0x100100100120000ll,
03866:                    partsUsed | 0x20l);
03867:       if(!(puzzle & 0x40040040060000ll))
03868:         doSolve(18, 0x40000ll, puzzle | 0x40040040060000ll,
03869:                    partsUsed | 0x20l);
03870:     piece6at17:
03871:       if (partsUsed & 0x40l) goto piece7at17;
03872:       if (!(puzzle & 0x4920000ll)) {
03873:          if(!(puzzle & 0x49a0000ll))
03874:            doSolve(18, 0x40000ll, puzzle | 0x49a0000ll,
03875:                    partsUsed | 0x40l);
03876:          if(!(puzzle & 0x4d20000ll))
03877:            doSolve(18, 0x40000ll, puzzle | 0x4d20000ll,
03878:                    partsUsed | 0x40l);
03879:          if(!(puzzle & 0x804920000ll))
03880:            doSolve(18, 0x40000ll, puzzle | 0x804920000ll,
03881:                    partsUsed | 0x40l);
03882:          if(!(puzzle & 0x4b20000ll))
03883:            doSolve(18, 0x40000ll, puzzle | 0x4b20000ll,
03884:                    partsUsed | 0x40l);
03885:          if(!(puzzle & 0x104920000ll))
03886:            doSolve(18, 0x40000ll, puzzle | 0x104920000ll,
03887:                    partsUsed | 0x40l);
03888:          if(!(puzzle & 0x5920000ll))
03889:            doSolve(18, 0x40000ll, puzzle | 0x5920000ll,
03890:                    partsUsed | 0x40l);
03891:       }
03892:       if (!(puzzle & 0x20020020020000ll)) {
03893:          if(!(puzzle & 0x20020030020000ll))
03894:            doSolve(18, 0x40000ll, puzzle | 0x20020030020000ll,
03895:                    partsUsed | 0x40l);
03896:          if(!(puzzle & 0x20030020020000ll))
03897:            doSolve(18, 0x40000ll, puzzle | 0x20030020020000ll,
03898:                    partsUsed | 0x40l);
03899:          if(!(puzzle & 0x20020120020000ll))
03900:            doSolve(18, 0x40000ll, puzzle | 0x20020120020000ll,
03901:                    partsUsed | 0x40l);
03902:          if(!(puzzle & 0x20120020020000ll))
03903:            doSolve(18, 0x40000ll, puzzle | 0x20120020020000ll,
03904:                    partsUsed | 0x40l);
03905:          if(!(puzzle & 0x20020060020000ll))
03906:            doSolve(18, 0x40000ll, puzzle | 0x20020060020000ll,
03907:                    partsUsed | 0x40l);
03908:          if(!(puzzle & 0x20060020020000ll))
03909:            doSolve(18, 0x40000ll, puzzle | 0x20060020020000ll,
03910:                    partsUsed | 0x40l);
03911:       }
03912:     piece7at17:
03913:       if (partsUsed & 0x80l) goto piece8at17;
03914:       if(!(puzzle & 0x120020120000ll))
03915:         doSolve(18, 0x40000ll, puzzle | 0x120020120000ll,
03916:                    partsUsed | 0x80l);
03917:       if(!(puzzle & 0x120100120000ll))
03918:         doSolve(18, 0x40000ll, puzzle | 0x120100120000ll,
03919:                    partsUsed | 0x80l);
03920:       if(!(puzzle & 0x920820000ll))
03921:         doSolve(18, 0x40000ll, puzzle | 0x920820000ll,
03922:                    partsUsed | 0x80l);
03923:       if(!(puzzle & 0x820920000ll))
03924:         doSolve(18, 0x40000ll, puzzle | 0x820920000ll,
03925:                    partsUsed | 0x80l);
03926:       if(!(puzzle & 0x1960000ll))
03927:         doSolve(18, 0x40000ll, puzzle | 0x1960000ll,
03928:                    partsUsed | 0x80l);
03929:       if(!(puzzle & 0x1a60000ll))
03930:         doSolve(18, 0x40000ll, puzzle | 0x1a60000ll,
03931:                    partsUsed | 0x80l);
03932:       if(!(puzzle & 0x60040060000ll))
03933:         doSolve(18, 0x40000ll, puzzle | 0x60040060000ll,
03934:                    partsUsed | 0x80l);
03935:       if(!(puzzle & 0x60020060000ll))
03936:         doSolve(18, 0x40000ll, puzzle | 0x60020060000ll,
03937:                    partsUsed | 0x80l);
03938:     piece8at17:
03939:       if (partsUsed & 0x100l) goto piece9at17;
03940:       if(!(puzzle & 0x801a0000ll))
03941:         doSolve(18, 0x40000ll, puzzle | 0x801a0000ll,
03942:                    partsUsed | 0x100l);
03943:       if(!(puzzle & 0x30120000ll))
03944:         doSolve(18, 0x40000ll, puzzle | 0x30120000ll,
03945:                    partsUsed | 0x100l);
03946:       if(!(puzzle & 0x20320000ll))
03947:         doSolve(18, 0x40000ll, puzzle | 0x20320000ll,
03948:                    partsUsed | 0x100l);
03949:       if(!(puzzle & 0x1a0020000ll))
03950:         doSolve(18, 0x40000ll, puzzle | 0x1a0020000ll,
03951:                    partsUsed | 0x100l);
03952:       if(!(puzzle & 0x120060000ll))
03953:         doSolve(18, 0x40000ll, puzzle | 0x120060000ll,
03954:                    partsUsed | 0x100l);
03955:       if(!(puzzle & 0x260020000ll))
03956:         doSolve(18, 0x40000ll, puzzle | 0x260020000ll,
03957:                    partsUsed | 0x100l);
03958:       if(!(puzzle & 0x40160000ll))
03959:         doSolve(18, 0x40000ll, puzzle | 0x40160000ll,
03960:                    partsUsed | 0x100l);
03961:       if(!(puzzle & 0x300120000ll))
03962:         doSolve(18, 0x40000ll, puzzle | 0x300120000ll,
03963:                    partsUsed | 0x100l);
03964:       if(!(puzzle & 0x200260000ll))
03965:         doSolve(18, 0x40000ll, puzzle | 0x200260000ll,
03966:                    partsUsed | 0x100l);
03967:     piece9at17:
03968:       if (partsUsed & 0x200l) goto piece10at17;
03969:       if (!(puzzle & 0x1a0000ll)) {
03970:          if(!(puzzle & 0x13a0000ll))
03971:            doSolve(18, 0x40000ll, puzzle | 0x13a0000ll,
03972:                    partsUsed | 0x200l);
03973:          if(!(puzzle & 0x7a0000ll))
03974:            doSolve(18, 0x40000ll, puzzle | 0x7a0000ll,
03975:                    partsUsed | 0x200l);
03976:          if(!(puzzle & 0x9e0000ll))
03977:            doSolve(18, 0x40000ll, puzzle | 0x9e0000ll,
03978:                    partsUsed | 0x200l);
03979:          if(!(puzzle & 0x19a0000ll))
03980:            doSolve(18, 0x40000ll, puzzle | 0x19a0000ll,
03981:                    partsUsed | 0x200l);
03982:       }
03983:       if (!(puzzle & 0x20020020000ll)) {
03984:          if(!(puzzle & 0x20030060000ll))
03985:            doSolve(18, 0x40000ll, puzzle | 0x20030060000ll,
03986:                    partsUsed | 0x200l);
03987:          if(!(puzzle & 0x60030020000ll))
03988:            doSolve(18, 0x40000ll, puzzle | 0x60030020000ll,
03989:                    partsUsed | 0x200l);
03990:          if(!(puzzle & 0x30060020000ll))
03991:            doSolve(18, 0x40000ll, puzzle | 0x30060020000ll,
03992:                    partsUsed | 0x200l);
03993:       }
03994:       if(!(puzzle & 0xf20000ll))
03995:         doSolve(18, 0x40000ll, puzzle | 0xf20000ll,
03996:                    partsUsed | 0x200l);
03997:       if(!(puzzle & 0x10070020000ll))
03998:         doSolve(18, 0x40000ll, puzzle | 0x10070020000ll,
03999:                    partsUsed | 0x200l);
04000:       if(!(puzzle & 0x40070020000ll))
04001:         doSolve(18, 0x40000ll, puzzle | 0x40070020000ll,
04002:                    partsUsed | 0x200l);
04003:       if(!(puzzle & 0x100920020000ll))
04004:         doSolve(18, 0x40000ll, puzzle | 0x100920020000ll,
04005:                    partsUsed | 0x200l);
04006:       if(!(puzzle & 0x100900120000ll))
04007:         doSolve(18, 0x40000ll, puzzle | 0x100900120000ll,
04008:                    partsUsed | 0x200l);
04009:     piece10at17:
04010:       if (partsUsed & 0x400l) goto piece11at17;
04011:       if (!(puzzle & 0x100120000ll)) {
04012:          if(!(puzzle & 0x20120120000ll))
04013:            doSolve(18, 0x40000ll, puzzle | 0x20120120000ll,
04014:                    partsUsed | 0x400l);
04015:          if(!(puzzle & 0x920120000ll))
04016:            doSolve(18, 0x40000ll, puzzle | 0x920120000ll,
04017:                    partsUsed | 0x400l);
04018:          if(!(puzzle & 0x900920000ll))
04019:            doSolve(18, 0x40000ll, puzzle | 0x900920000ll,
04020:                    partsUsed | 0x400l);
04021:          if(!(puzzle & 0x120920000ll))
04022:            doSolve(18, 0x40000ll, puzzle | 0x120920000ll,
04023:                    partsUsed | 0x400l);
04024:          if(!(puzzle & 0x100120120000ll))
04025:            doSolve(18, 0x40000ll, puzzle | 0x100120120000ll,
04026:                    partsUsed | 0x400l);
04027:       }
04028:       if (!(puzzle & 0x20020020000ll)) {
04029:          if(!(puzzle & 0x120120020000ll))
04030:            doSolve(18, 0x40000ll, puzzle | 0x120120020000ll,
04031:                    partsUsed | 0x400l);
04032:          if(!(puzzle & 0x20060060000ll))
04033:            doSolve(18, 0x40000ll, puzzle | 0x20060060000ll,
04034:                    partsUsed | 0x400l);
04035:          if(!(puzzle & 0x60060020000ll))
04036:            doSolve(18, 0x40000ll, puzzle | 0x60060020000ll,
04037:                    partsUsed | 0x400l);
04038:       }
04039:       if (!(puzzle & 0x320000ll)) {
04040:          if(!(puzzle & 0xb60000ll))
04041:            doSolve(18, 0x40000ll, puzzle | 0xb60000ll,
04042:                    partsUsed | 0x400l);
04043:          if(!(puzzle & 0x1360000ll))
04044:            doSolve(18, 0x40000ll, puzzle | 0x1360000ll,
04045:                    partsUsed | 0x400l);
04046:          if(!(puzzle & 0x1b20000ll))
04047:            doSolve(18, 0x40000ll, puzzle | 0x1b20000ll,
04048:                    partsUsed | 0x400l);
04049:       }
04050:       if(!(puzzle & 0x3e0000ll))
04051:         doSolve(18, 0x40000ll, puzzle | 0x3e0000ll,
04052:                    partsUsed | 0x400l);
04053:       if(!(puzzle & 0xda0000ll))
04054:         doSolve(18, 0x40000ll, puzzle | 0xda0000ll,
04055:                    partsUsed | 0x400l);
04056:       if(!(puzzle & 0x70060000ll))
04057:         doSolve(18, 0x40000ll, puzzle | 0x70060000ll,
04058:                    partsUsed | 0x400l);
04059:       if(!(puzzle & 0x30030020000ll))
04060:         doSolve(18, 0x40000ll, puzzle | 0x30030020000ll,
04061:                    partsUsed | 0x400l);
04062:       if(!(puzzle & 0x40060060000ll))
04063:         doSolve(18, 0x40000ll, puzzle | 0x40060060000ll,
04064:                    partsUsed | 0x400l);
04065:     piece11at17:
04066:       if (partsUsed & 0x800l) goto piece12at17;
04067:       if (!(puzzle & 0x180020000ll)) {
04068:          if(!(puzzle & 0x1b0020000ll))
04069:            doSolve(18, 0x40000ll, puzzle | 0x1b0020000ll,
04070:                    partsUsed | 0x800l);
04071:          if(!(puzzle & 0x1a0120000ll))
04072:            doSolve(18, 0x40000ll, puzzle | 0x1a0120000ll,
04073:                    partsUsed | 0x800l);
04074:          if(!(puzzle & 0x1801a0000ll))
04075:            doSolve(18, 0x40000ll, puzzle | 0x1801a0000ll,
04076:                    partsUsed | 0x800l);
04077:       }
04078:       if (!(puzzle & 0x20120000ll)) {
04079:          if(!(puzzle & 0x130120000ll))
04080:            doSolve(18, 0x40000ll, puzzle | 0x130120000ll,
04081:                    partsUsed | 0x800l);
04082:          if(!(puzzle & 0x1201a0000ll))
04083:            doSolve(18, 0x40000ll, puzzle | 0x1201a0000ll,
04084:                    partsUsed | 0x800l);
04085:          if(!(puzzle & 0x20360000ll))
04086:            doSolve(18, 0x40000ll, puzzle | 0x20360000ll,
04087:                    partsUsed | 0x800l);
04088:          if(!(puzzle & 0x160120000ll))
04089:            doSolve(18, 0x40000ll, puzzle | 0x160120000ll,
04090:                    partsUsed | 0x800l);
04091:          if(!(puzzle & 0x60160000ll))
04092:            doSolve(18, 0x40000ll, puzzle | 0x60160000ll,
04093:                    partsUsed | 0x800l);
04094:          if(!(puzzle & 0x120320000ll))
04095:            doSolve(18, 0x40000ll, puzzle | 0x120320000ll,
04096:                    partsUsed | 0x800l);
04097:          if(!(puzzle & 0x320120000ll))
04098:            doSolve(18, 0x40000ll, puzzle | 0x320120000ll,
04099:                    partsUsed | 0x800l);
04100:          if(!(puzzle & 0x120160000ll))
04101:            doSolve(18, 0x40000ll, puzzle | 0x120160000ll,
04102:                    partsUsed | 0x800l);
04103:       }
04104:       if (!(puzzle & 0x40060000ll)) {
04105:          if(!(puzzle & 0x160060000ll))
04106:            doSolve(18, 0x40000ll, puzzle | 0x160060000ll,
04107:                    partsUsed | 0x800l);
04108:          if(!(puzzle & 0x240260000ll))
04109:            doSolve(18, 0x40000ll, puzzle | 0x240260000ll,
04110:                    partsUsed | 0x800l);
04111:          if(!(puzzle & 0x60260000ll))
04112:            doSolve(18, 0x40000ll, puzzle | 0x60260000ll,
04113:                    partsUsed | 0x800l);
04114:          if(!(puzzle & 0x260060000ll))
04115:            doSolve(18, 0x40000ll, puzzle | 0x260060000ll,
04116:                    partsUsed | 0x800l);
04117:          if(!(puzzle & 0x40360000ll))
04118:            doSolve(18, 0x40000ll, puzzle | 0x40360000ll,
04119:                    partsUsed | 0x800l);
04120:       }
04121:       if (!(puzzle & 0x320000ll)) {
04122:          if(!(puzzle & 0x300320000ll))
04123:            doSolve(18, 0x40000ll, puzzle | 0x300320000ll,
04124:                    partsUsed | 0x800l);
04125:          if(!(puzzle & 0x200360000ll))
04126:            doSolve(18, 0x40000ll, puzzle | 0x200360000ll,
04127:                    partsUsed | 0x800l);
04128:          if(!(puzzle & 0x100360000ll))
04129:            doSolve(18, 0x40000ll, puzzle | 0x100360000ll,
04130:                    partsUsed | 0x800l);
04131:       }
04132:       if(!(puzzle & 0x360020000ll))
04133:         doSolve(18, 0x40000ll, puzzle | 0x360020000ll,
04134:                    partsUsed | 0x800l);
04135:     piece12at17:
04136:     break;
04137:    case 18:
04138:       if (partsUsed & 0x2l) goto piece2at18;
04139:       if(!(puzzle & 0xf40000ll))
04140:         doSolve(19, 0x80000ll, puzzle | 0xf40000ll,
04141:                    partsUsed | 0x2l);
04142:       if(!(puzzle & 0x30060040000ll))
04143:         doSolve(19, 0x80000ll, puzzle | 0x30060040000ll,
04144:                    partsUsed | 0x2l);
04145:       if(!(puzzle & 0x1200240040000ll))
04146:         doSolve(19, 0x80000ll, puzzle | 0x1200240040000ll,
04147:                    partsUsed | 0x2l);
04148:       if(!(puzzle & 0x1001200240000ll))
04149:         doSolve(19, 0x80000ll, puzzle | 0x1001200240000ll,
04150:                    partsUsed | 0x2l);
04151:     piece2at18:
04152:       if (partsUsed & 0x4l) goto piece3at18;
04153:       if(!(puzzle & 0x13c0000ll))
04154:         doSolve(19, 0x80000ll, puzzle | 0x13c0000ll,
04155:                    partsUsed | 0x4l);
04156:       if(!(puzzle & 0x200201240000ll))
04157:         doSolve(19, 0x80000ll, puzzle | 0x200201240000ll,
04158:                    partsUsed | 0x4l);
04159:       if(!(puzzle & 0x40070040000ll))
04160:         doSolve(19, 0x80000ll, puzzle | 0x40070040000ll,
04161:                    partsUsed | 0x4l);
04162:       if(!(puzzle & 0x41240040000ll))
04163:         doSolve(19, 0x80000ll, puzzle | 0x41240040000ll,
04164:                    partsUsed | 0x4l);
04165:     piece3at18:
04166:       if (partsUsed & 0x8l) goto piece4at18;
04167:       if(!(puzzle & 0x7c0000ll))
04168:         doSolve(19, 0x80000ll, puzzle | 0x7c0000ll,
04169:                    partsUsed | 0x8l);
04170:       if(!(puzzle & 0x10070040000ll))
04171:         doSolve(19, 0x80000ll, puzzle | 0x10070040000ll,
04172:                    partsUsed | 0x8l);
04173:       if(!(puzzle & 0x1001240040000ll))
04174:         doSolve(19, 0x80000ll, puzzle | 0x1001240040000ll,
04175:                    partsUsed | 0x8l);
04176:       if(!(puzzle & 0x1200200240000ll))
04177:         doSolve(19, 0x80000ll, puzzle | 0x1200200240000ll,
04178:                    partsUsed | 0x8l);
04179:     piece4at18:
04180:       if (partsUsed & 0x10l) goto piece5at18;
04181:       if (!(puzzle & 0x9240000ll)) {
04182:          if(!(puzzle & 0xd340000ll))
04183:            doSolve(19, 0x80000ll, puzzle | 0xd340000ll,
04184:                    partsUsed | 0x10l);
04185:          if(!(puzzle & 0x1049240000ll))
04186:            doSolve(19, 0x80000ll, puzzle | 0x1049240000ll,
04187:                    partsUsed | 0x10l);
04188:          if(!(puzzle & 0x8209240000ll))
04189:            doSolve(19, 0x80000ll, puzzle | 0x8209240000ll,
04190:                    partsUsed | 0x10l);
04191:       }
04192:       if (!(puzzle & 0x40040040040000ll)) {
04193:          if(!(puzzle & 0x60040060040000ll))
04194:            doSolve(19, 0x80000ll, puzzle | 0x60040060040000ll,
04195:                    partsUsed | 0x10l);
04196:          if(!(puzzle & 0x240040240040000ll))
04197:            doSolve(19, 0x80000ll, puzzle | 0x240040240040000ll,
04198:                    partsUsed | 0x10l);
04199:          if(!(puzzle & 0x40240040240000ll))
04200:            doSolve(19, 0x80000ll, puzzle | 0x40240040240000ll,
04201:                    partsUsed | 0x10l);
04202:       }
04203:       if(!(puzzle & 0x200240200240000ll))
04204:         doSolve(19, 0x80000ll, puzzle | 0x200240200240000ll,
04205:                    partsUsed | 0x10l);
04206:       if(!(puzzle & 0x9241040000ll))
04207:         doSolve(19, 0x80000ll, puzzle | 0x9241040000ll,
04208:                    partsUsed | 0x10l);
04209:     piece5at18:
04210:       if (partsUsed & 0x20l) goto piece6at18;
04211:       if (!(puzzle & 0x9240000ll)) {
04212:          if(!(puzzle & 0xd240000ll))
04213:            doSolve(19, 0x80000ll, puzzle | 0xd240000ll,
04214:                    partsUsed | 0x20l);
04215:          if(!(puzzle & 0x8009240000ll))
04216:            doSolve(19, 0x80000ll, puzzle | 0x8009240000ll,
04217:                    partsUsed | 0x20l);
04218:          if(!(puzzle & 0x49240000ll))
04219:            doSolve(19, 0x80000ll, puzzle | 0x49240000ll,
04220:                    partsUsed | 0x20l);
04221:       }
04222:       if (!(puzzle & 0x40040040040000ll)) {
04223:          if(!(puzzle & 0x60040040040000ll))
04224:            doSolve(19, 0x80000ll, puzzle | 0x60040040040000ll,
04225:                    partsUsed | 0x20l);
04226:          if(!(puzzle & 0x40040040240000ll))
04227:            doSolve(19, 0x80000ll, puzzle | 0x40040040240000ll,
04228:                    partsUsed | 0x20l);
04229:          if(!(puzzle & 0x240040040040000ll))
04230:            doSolve(19, 0x80000ll, puzzle | 0x240040040040000ll,
04231:                    partsUsed | 0x20l);
04232:       }
04233:       if(!(puzzle & 0x9240040000ll))
04234:         doSolve(19, 0x80000ll, puzzle | 0x9240040000ll,
04235:                    partsUsed | 0x20l);
04236:       if(!(puzzle & 0x200200200240000ll))
04237:         doSolve(19, 0x80000ll, puzzle | 0x200200200240000ll,
04238:                    partsUsed | 0x20l);
04239:     piece6at18:
04240:       if (partsUsed & 0x40l) goto piece7at18;
04241:       if (!(puzzle & 0x9240000ll)) {
04242:          if(!(puzzle & 0x9340000ll))
04243:            doSolve(19, 0x80000ll, puzzle | 0x9340000ll,
04244:                    partsUsed | 0x40l);
04245:          if(!(puzzle & 0x9a40000ll))
04246:            doSolve(19, 0x80000ll, puzzle | 0x9a40000ll,
04247:                    partsUsed | 0x40l);
04248:          if(!(puzzle & 0x1009240000ll))
04249:            doSolve(19, 0x80000ll, puzzle | 0x1009240000ll,
04250:                    partsUsed | 0x40l);
04251:          if(!(puzzle & 0x209240000ll))
04252:            doSolve(19, 0x80000ll, puzzle | 0x209240000ll,
04253:                    partsUsed | 0x40l);
04254:       }
04255:       if (!(puzzle & 0x40040040040000ll)) {
04256:          if(!(puzzle & 0x40040060040000ll))
04257:            doSolve(19, 0x80000ll, puzzle | 0x40040060040000ll,
04258:                    partsUsed | 0x40l);
04259:          if(!(puzzle & 0x40060040040000ll))
04260:            doSolve(19, 0x80000ll, puzzle | 0x40060040040000ll,
04261:                    partsUsed | 0x40l);
04262:          if(!(puzzle & 0x40040240040000ll))
04263:            doSolve(19, 0x80000ll, puzzle | 0x40040240040000ll,
04264:                    partsUsed | 0x40l);
04265:          if(!(puzzle & 0x40240040040000ll))
04266:            doSolve(19, 0x80000ll, puzzle | 0x40240040040000ll,
04267:                    partsUsed | 0x40l);
04268:       }
04269:     piece7at18:
04270:       if (partsUsed & 0x80l) goto piece8at18;
04271:       if(!(puzzle & 0x240040240000ll))
04272:         doSolve(19, 0x80000ll, puzzle | 0x240040240000ll,
04273:                    partsUsed | 0x80l);
04274:       if(!(puzzle & 0x240200240000ll))
04275:         doSolve(19, 0x80000ll, puzzle | 0x240200240000ll,
04276:                    partsUsed | 0x80l);
04277:       if(!(puzzle & 0x1241040000ll))
04278:         doSolve(19, 0x80000ll, puzzle | 0x1241040000ll,
04279:                    partsUsed | 0x80l);
04280:       if(!(puzzle & 0x1041240000ll))
04281:         doSolve(19, 0x80000ll, puzzle | 0x1041240000ll,
04282:                    partsUsed | 0x80l);
04283:     piece8at18:
04284:       if (partsUsed & 0x100l) goto piece9at18;
04285:       if(!(puzzle & 0x340040000ll))
04286:         doSolve(19, 0x80000ll, puzzle | 0x340040000ll,
04287:                    partsUsed | 0x100l);
04288:       if(!(puzzle & 0x100340000ll))
04289:         doSolve(19, 0x80000ll, puzzle | 0x100340000ll,
04290:                    partsUsed | 0x100l);
04291:       if(!(puzzle & 0x60240000ll))
04292:         doSolve(19, 0x80000ll, puzzle | 0x60240000ll,
04293:                    partsUsed | 0x100l);
04294:     piece9at18:
04295:       if (partsUsed & 0x200l) goto piece10at18;
04296:       if(!(puzzle & 0xbc0000ll))
04297:         doSolve(19, 0x80000ll, puzzle | 0xbc0000ll,
04298:                    partsUsed | 0x200l);
04299:       if(!(puzzle & 0x20070040000ll))
04300:         doSolve(19, 0x80000ll, puzzle | 0x20070040000ll,
04301:                    partsUsed | 0x200l);
04302:       if(!(puzzle & 0x201240040000ll))
04303:         doSolve(19, 0x80000ll, puzzle | 0x201240040000ll,
04304:                    partsUsed | 0x200l);
04305:       if(!(puzzle & 0x201200240000ll))
04306:         doSolve(19, 0x80000ll, puzzle | 0x201200240000ll,
04307:                    partsUsed | 0x200l);
04308:     piece10at18:
04309:       if (partsUsed & 0x400l) goto piece11at18;
04310:       if (!(puzzle & 0x1240000ll)) {
04311:          if(!(puzzle & 0x1b40000ll))
04312:            doSolve(19, 0x80000ll, puzzle | 0x1b40000ll,
04313:                    partsUsed | 0x400l);
04314:          if(!(puzzle & 0x1201240000ll))
04315:            doSolve(19, 0x80000ll, puzzle | 0x1201240000ll,
04316:                    partsUsed | 0x400l);
04317:          if(!(puzzle & 0x241240000ll))
04318:            doSolve(19, 0x80000ll, puzzle | 0x241240000ll,
04319:                    partsUsed | 0x400l);
04320:       }
04321:       if (!(puzzle & 0x40040040000ll)) {
04322:          if(!(puzzle & 0x60060040000ll))
04323:            doSolve(19, 0x80000ll, puzzle | 0x60060040000ll,
04324:                    partsUsed | 0x400l);
04325:          if(!(puzzle & 0x40240240000ll))
04326:            doSolve(19, 0x80000ll, puzzle | 0x40240240000ll,
04327:                    partsUsed | 0x400l);
04328:          if(!(puzzle & 0x240240040000ll))
04329:            doSolve(19, 0x80000ll, puzzle | 0x240240040000ll,
04330:                    partsUsed | 0x400l);
04331:       }
04332:       if(!(puzzle & 0x1240240000ll))
04333:         doSolve(19, 0x80000ll, puzzle | 0x1240240000ll,
04334:                    partsUsed | 0x400l);
04335:       if(!(puzzle & 0x200240240000ll))
04336:         doSolve(19, 0x80000ll, puzzle | 0x200240240000ll,
04337:                    partsUsed | 0x400l);
04338:     piece11at18:
04339:       if (partsUsed & 0x800l) goto piece12at18;
04340:       if (!(puzzle & 0x300040000ll)) {
04341:          if(!(puzzle & 0x360040000ll))
04342:            doSolve(19, 0x80000ll, puzzle | 0x360040000ll,
04343:                    partsUsed | 0x800l);
04344:          if(!(puzzle & 0x340240000ll))
04345:            doSolve(19, 0x80000ll, puzzle | 0x340240000ll,
04346:                    partsUsed | 0x800l);
04347:          if(!(puzzle & 0x300340000ll))
04348:            doSolve(19, 0x80000ll, puzzle | 0x300340000ll,
04349:                    partsUsed | 0x800l);
04350:       }
04351:       if(!(puzzle & 0x260240000ll))
04352:         doSolve(19, 0x80000ll, puzzle | 0x260240000ll,
04353:                    partsUsed | 0x800l);
04354:       if(!(puzzle & 0x240340000ll))
04355:         doSolve(19, 0x80000ll, puzzle | 0x240340000ll,
04356:                    partsUsed | 0x800l);
04357:     piece12at18:
04358:     break;
04359:    case 19:
04360:       if (partsUsed & 0x2l) goto piece2at19;
04361:       if(!(puzzle & 0x10090480000ll))
04362:         doSolve(20, 0x100000ll, puzzle | 0x10090480000ll,
04363:                    partsUsed | 0x2l);
04364:       if(!(puzzle & 0x2400480080000ll))
04365:         doSolve(20, 0x100000ll, puzzle | 0x2400480080000ll,
04366:                    partsUsed | 0x2l);
04367:       if(!(puzzle & 0x2002400480000ll))
04368:         doSolve(20, 0x100000ll, puzzle | 0x2002400480000ll,
04369:                    partsUsed | 0x2l);
04370:       if(!(puzzle & 0x9980000ll))
04371:         doSolve(20, 0x100000ll, puzzle | 0x9980000ll,
04372:                    partsUsed | 0x2l);
04373:       if(!(puzzle & 0xcc80000ll))
04374:         doSolve(20, 0x100000ll, puzzle | 0xcc80000ll,
04375:                    partsUsed | 0x2l);
04376:       if(!(puzzle & 0x200300180000ll))
04377:         doSolve(20, 0x100000ll, puzzle | 0x200300180000ll,
04378:                    partsUsed | 0x2l);
04379:       if(!(puzzle & 0x300180080000ll))
04380:         doSolve(20, 0x100000ll, puzzle | 0x300180080000ll,
04381:                    partsUsed | 0x2l);
04382:     piece2at19:
04383:       if (partsUsed & 0x4l) goto piece3at19;
04384:       if (!(puzzle & 0x80080080000ll)) {
04385:          if(!(puzzle & 0x490080080000ll))
04386:            doSolve(20, 0x100000ll, puzzle | 0x490080080000ll,
04387:                    partsUsed | 0x4l);
04388:          if(!(puzzle & 0x82480080000ll))
04389:            doSolve(20, 0x100000ll, puzzle | 0x82480080000ll,
04390:                    partsUsed | 0x4l);
04391:          if(!(puzzle & 0x80380080000ll))
04392:            doSolve(20, 0x100000ll, puzzle | 0x80380080000ll,
04393:                    partsUsed | 0x4l);
04394:       }
04395:       if(!(puzzle & 0x400402480000ll))
04396:         doSolve(20, 0x100000ll, puzzle | 0x400402480000ll,
04397:                    partsUsed | 0x4l);
04398:       if(!(puzzle & 0x3c80000ll))
04399:         doSolve(20, 0x100000ll, puzzle | 0x3c80000ll,
04400:                    partsUsed | 0x4l);
04401:       if(!(puzzle & 0x4b80000ll))
04402:         doSolve(20, 0x100000ll, puzzle | 0x4b80000ll,
04403:                    partsUsed | 0x4l);
04404:       if(!(puzzle & 0x100100380000ll))
04405:         doSolve(20, 0x100000ll, puzzle | 0x100100380000ll,
04406:                    partsUsed | 0x4l);
04407:     piece3at19:
04408:       if (partsUsed & 0x8l) goto piece4at19;
04409:       if(!(puzzle & 0x90080480000ll))
04410:         doSolve(20, 0x100000ll, puzzle | 0x90080480000ll,
04411:                    partsUsed | 0x8l);
04412:       if(!(puzzle & 0x2002480080000ll))
04413:         doSolve(20, 0x100000ll, puzzle | 0x2002480080000ll,
04414:                    partsUsed | 0x8l);
04415:       if(!(puzzle & 0x2400400480000ll))
04416:         doSolve(20, 0x100000ll, puzzle | 0x2400400480000ll,
04417:                    partsUsed | 0x8l);
04418:       if(!(puzzle & 0xc980000ll))
04419:         doSolve(20, 0x100000ll, puzzle | 0xc980000ll,
04420:                    partsUsed | 0x8l);
04421:       if(!(puzzle & 0x9c80000ll))
04422:         doSolve(20, 0x100000ll, puzzle | 0x9c80000ll,
04423:                    partsUsed | 0x8l);
04424:       if(!(puzzle & 0x200380080000ll))
04425:         doSolve(20, 0x100000ll, puzzle | 0x200380080000ll,
04426:                    partsUsed | 0x8l);
04427:       if(!(puzzle & 0x300100180000ll))
04428:         doSolve(20, 0x100000ll, puzzle | 0x300100180000ll,
04429:                    partsUsed | 0x8l);
04430:     piece4at19:
04431:       if (partsUsed & 0x10l) goto piece5at19;
04432:       if (!(puzzle & 0x80080080080000ll)) {
04433:          if(!(puzzle & 0x80480080480000ll))
04434:            doSolve(20, 0x100000ll, puzzle | 0x80480080480000ll,
04435:                    partsUsed | 0x10l);
04436:          if(!(puzzle & 0x180080180080000ll))
04437:            doSolve(20, 0x100000ll, puzzle | 0x180080180080000ll,
04438:                    partsUsed | 0x10l);
04439:          if(!(puzzle & 0x80180080180000ll))
04440:            doSolve(20, 0x100000ll, puzzle | 0x80180080180000ll,
04441:                    partsUsed | 0x10l);
04442:       }
04443:       if(!(puzzle & 0x2492080000ll))
04444:         doSolve(20, 0x100000ll, puzzle | 0x2492080000ll,
04445:                    partsUsed | 0x10l);
04446:       if(!(puzzle & 0x90080090080000ll))
04447:         doSolve(20, 0x100000ll, puzzle | 0x90080090080000ll,
04448:                    partsUsed | 0x10l);
04449:       if(!(puzzle & 0x480080480080000ll))
04450:         doSolve(20, 0x100000ll, puzzle | 0x480080480080000ll,
04451:                    partsUsed | 0x10l);
04452:       if(!(puzzle & 0x400480400480000ll))
04453:         doSolve(20, 0x100000ll, puzzle | 0x400480400480000ll,
04454:                    partsUsed | 0x10l);
04455:       if(!(puzzle & 0x100180100180000ll))
04456:         doSolve(20, 0x100000ll, puzzle | 0x100180100180000ll,
04457:                    partsUsed | 0x10l);
04458:     piece5at19:
04459:       if (partsUsed & 0x20l) goto piece6at19;
04460:       if (!(puzzle & 0x80080080080000ll)) {
04461:          if(!(puzzle & 0x90080080080000ll))
04462:            doSolve(20, 0x100000ll, puzzle | 0x90080080080000ll,
04463:                    partsUsed | 0x20l);
04464:          if(!(puzzle & 0x80080080480000ll))
04465:            doSolve(20, 0x100000ll, puzzle | 0x80080080480000ll,
04466:                    partsUsed | 0x20l);
04467:          if(!(puzzle & 0x480080080080000ll))
04468:            doSolve(20, 0x100000ll, puzzle | 0x480080080080000ll,
04469:                    partsUsed | 0x20l);
04470:          if(!(puzzle & 0x80080080180000ll))
04471:            doSolve(20, 0x100000ll, puzzle | 0x80080080180000ll,
04472:                    partsUsed | 0x20l);
04473:          if(!(puzzle & 0x180080080080000ll))
04474:            doSolve(20, 0x100000ll, puzzle | 0x180080080080000ll,
04475:                    partsUsed | 0x20l);
04476:       }
04477:       if(!(puzzle & 0x400400400480000ll))
04478:         doSolve(20, 0x100000ll, puzzle | 0x400400400480000ll,
04479:                    partsUsed | 0x20l);
04480:       if(!(puzzle & 0x100100100180000ll))
04481:         doSolve(20, 0x100000ll, puzzle | 0x100100100180000ll,
04482:                    partsUsed | 0x20l);
04483:     piece6at19:
04484:       if (partsUsed & 0x40l) goto piece7at19;
04485:       if (!(puzzle & 0x80080080080000ll)) {
04486:          if(!(puzzle & 0x80090080080000ll))
04487:            doSolve(20, 0x100000ll, puzzle | 0x80090080080000ll,
04488:                    partsUsed | 0x40l);
04489:          if(!(puzzle & 0x80080480080000ll))
04490:            doSolve(20, 0x100000ll, puzzle | 0x80080480080000ll,
04491:                    partsUsed | 0x40l);
04492:          if(!(puzzle & 0x80480080080000ll))
04493:            doSolve(20, 0x100000ll, puzzle | 0x80480080080000ll,
04494:                    partsUsed | 0x40l);
04495:          if(!(puzzle & 0x80080180080000ll))
04496:            doSolve(20, 0x100000ll, puzzle | 0x80080180080000ll,
04497:                    partsUsed | 0x40l);
04498:          if(!(puzzle & 0x80180080080000ll))
04499:            doSolve(20, 0x100000ll, puzzle | 0x80180080080000ll,
04500:                    partsUsed | 0x40l);
04501:       }
04502:       if(!(puzzle & 0x2490080000ll))
04503:         doSolve(20, 0x100000ll, puzzle | 0x2490080000ll,
04504:                    partsUsed | 0x40l);
04505:       if(!(puzzle & 0x80080090080000ll))
04506:         doSolve(20, 0x100000ll, puzzle | 0x80080090080000ll,
04507:                    partsUsed | 0x40l);
04508:     piece7at19:
04509:       if (partsUsed & 0x80l) goto piece8at19;
04510:       if(!(puzzle & 0x480080480000ll))
04511:         doSolve(20, 0x100000ll, puzzle | 0x480080480000ll,
04512:                    partsUsed | 0x80l);
04513:       if(!(puzzle & 0x480400480000ll))
04514:         doSolve(20, 0x100000ll, puzzle | 0x480400480000ll,
04515:                    partsUsed | 0x80l);
04516:       if(!(puzzle & 0x2482080000ll))
04517:         doSolve(20, 0x100000ll, puzzle | 0x2482080000ll,
04518:                    partsUsed | 0x80l);
04519:       if(!(puzzle & 0x2082480000ll))
04520:         doSolve(20, 0x100000ll, puzzle | 0x2082480000ll,
04521:                    partsUsed | 0x80l);
04522:       if(!(puzzle & 0x1780000ll))
04523:         doSolve(20, 0x100000ll, puzzle | 0x1780000ll,
04524:                    partsUsed | 0x80l);
04525:       if(!(puzzle & 0x6580000ll))
04526:         doSolve(20, 0x100000ll, puzzle | 0x6580000ll,
04527:                    partsUsed | 0x80l);
04528:       if(!(puzzle & 0x6980000ll))
04529:         doSolve(20, 0x100000ll, puzzle | 0x6980000ll,
04530:                    partsUsed | 0x80l);
04531:       if(!(puzzle & 0x1e80000ll))
04532:         doSolve(20, 0x100000ll, puzzle | 0x1e80000ll,
04533:                    partsUsed | 0x80l);
04534:       if(!(puzzle & 0x180100180000ll))
04535:         doSolve(20, 0x100000ll, puzzle | 0x180100180000ll,
04536:                    partsUsed | 0x80l);
04537:       if(!(puzzle & 0x180080180000ll))
04538:         doSolve(20, 0x100000ll, puzzle | 0x180080180000ll,
04539:                    partsUsed | 0x80l);
04540:       if(!(puzzle & 0x380280000ll))
04541:         doSolve(20, 0x100000ll, puzzle | 0x380280000ll,
04542:                    partsUsed | 0x80l);
04543:       if(!(puzzle & 0x280380000ll))
04544:         doSolve(20, 0x100000ll, puzzle | 0x280380000ll,
04545:                    partsUsed | 0x80l);
04546:     piece8at19:
04547:       if (partsUsed & 0x100l) goto piece9at19;
04548:       if(!(puzzle & 0x120180000ll))
04549:         doSolve(20, 0x100000ll, puzzle | 0x120180000ll,
04550:                    partsUsed | 0x100l);
04551:       if(!(puzzle & 0x100580000ll))
04552:         doSolve(20, 0x100000ll, puzzle | 0x100580000ll,
04553:                    partsUsed | 0x100l);
04554:       if(!(puzzle & 0xb0080000ll))
04555:         doSolve(20, 0x100000ll, puzzle | 0xb0080000ll,
04556:                    partsUsed | 0x100l);
04557:       if(!(puzzle & 0x980080000ll))
04558:         doSolve(20, 0x100000ll, puzzle | 0x980080000ll,
04559:                    partsUsed | 0x100l);
04560:       if(!(puzzle & 0x480180000ll))
04561:         doSolve(20, 0x100000ll, puzzle | 0x480180000ll,
04562:                    partsUsed | 0x100l);
04563:       if(!(puzzle & 0xc00480000ll))
04564:         doSolve(20, 0x100000ll, puzzle | 0xc00480000ll,
04565:                    partsUsed | 0x100l);
04566:       if(!(puzzle & 0x80c80000ll))
04567:         doSolve(20, 0x100000ll, puzzle | 0x80c80000ll,
04568:                    partsUsed | 0x100l);
04569:       if(!(puzzle & 0x800980000ll))
04570:         doSolve(20, 0x100000ll, puzzle | 0x800980000ll,
04571:                    partsUsed | 0x100l);
04572:     piece9at19:
04573:       if (partsUsed & 0x200l) goto piece10at19;
04574:       if (!(puzzle & 0x80080080000ll)) {
04575:          if(!(puzzle & 0x80090480000ll))
04576:            doSolve(20, 0x100000ll, puzzle | 0x80090480000ll,
04577:                    partsUsed | 0x200l);
04578:          if(!(puzzle & 0x90480080000ll))
04579:            doSolve(20, 0x100000ll, puzzle | 0x90480080000ll,
04580:                    partsUsed | 0x200l);
04581:          if(!(puzzle & 0x480090080000ll))
04582:            doSolve(20, 0x100000ll, puzzle | 0x480090080000ll,
04583:                    partsUsed | 0x200l);
04584:       }
04585:       if (!(puzzle & 0x480080000ll)) {
04586:          if(!(puzzle & 0x400490080000ll))
04587:            doSolve(20, 0x100000ll, puzzle | 0x400490080000ll,
04588:                    partsUsed | 0x200l);
04589:          if(!(puzzle & 0x10490080000ll))
04590:            doSolve(20, 0x100000ll, puzzle | 0x10490080000ll,
04591:                    partsUsed | 0x200l);
04592:          if(!(puzzle & 0x402480080000ll))
04593:            doSolve(20, 0x100000ll, puzzle | 0x402480080000ll,
04594:                    partsUsed | 0x200l);
04595:       }
04596:       if(!(puzzle & 0x5980000ll))
04597:         doSolve(20, 0x100000ll, puzzle | 0x5980000ll,
04598:                    partsUsed | 0x200l);
04599:       if(!(puzzle & 0x5c80000ll))
04600:         doSolve(20, 0x100000ll, puzzle | 0x5c80000ll,
04601:                    partsUsed | 0x200l);
04602:       if(!(puzzle & 0x402400480000ll))
04603:         doSolve(20, 0x100000ll, puzzle | 0x402400480000ll,
04604:                    partsUsed | 0x200l);
04605:       if(!(puzzle & 0x100300180000ll))
04606:         doSolve(20, 0x100000ll, puzzle | 0x100300180000ll,
04607:                    partsUsed | 0x200l);
04608:       if(!(puzzle & 0x100380080000ll))
04609:         doSolve(20, 0x100000ll, puzzle | 0x100380080000ll,
04610:                    partsUsed | 0x200l);
04611:     piece10at19:
04612:       if (partsUsed & 0x400l) goto piece11at19;
04613:       if (!(puzzle & 0x400480000ll)) {
04614:          if(!(puzzle & 0x80480480000ll))
04615:            doSolve(20, 0x100000ll, puzzle | 0x80480480000ll,
04616:                    partsUsed | 0x400l);
04617:          if(!(puzzle & 0x2480480000ll))
04618:            doSolve(20, 0x100000ll, puzzle | 0x2480480000ll,
04619:                    partsUsed | 0x400l);
04620:          if(!(puzzle & 0x2402480000ll))
04621:            doSolve(20, 0x100000ll, puzzle | 0x2402480000ll,
04622:                    partsUsed | 0x400l);
04623:          if(!(puzzle & 0x482480000ll))
04624:            doSolve(20, 0x100000ll, puzzle | 0x482480000ll,
04625:                    partsUsed | 0x400l);
04626:          if(!(puzzle & 0x400480480000ll))
04627:            doSolve(20, 0x100000ll, puzzle | 0x400480480000ll,
04628:                    partsUsed | 0x400l);
04629:       }
04630:       if (!(puzzle & 0x980000ll)) {
04631:          if(!(puzzle & 0x1b80000ll))
04632:            doSolve(20, 0x100000ll, puzzle | 0x1b80000ll,
04633:                    partsUsed | 0x400l);
04634:          if(!(puzzle & 0xf80000ll))
04635:            doSolve(20, 0x100000ll, puzzle | 0xf80000ll,
04636:                    partsUsed | 0x400l);
04637:          if(!(puzzle & 0x2d80000ll))
04638:            doSolve(20, 0x100000ll, puzzle | 0x2d80000ll,
04639:                    partsUsed | 0x400l);
04640:          if(!(puzzle & 0x4d80000ll))
04641:            doSolve(20, 0x100000ll, puzzle | 0x4d80000ll,
04642:                    partsUsed | 0x400l);
04643:          if(!(puzzle & 0x1d80000ll))
04644:            doSolve(20, 0x100000ll, puzzle | 0x1d80000ll,
04645:                    partsUsed | 0x400l);
04646:       }
04647:       if (!(puzzle & 0x80080080000ll)) {
04648:          if(!(puzzle & 0x480480080000ll))
04649:            doSolve(20, 0x100000ll, puzzle | 0x480480080000ll,
04650:                    partsUsed | 0x400l);
04651:          if(!(puzzle & 0x80180180000ll))
04652:            doSolve(20, 0x100000ll, puzzle | 0x80180180000ll,
04653:                    partsUsed | 0x400l);
04654:          if(!(puzzle & 0x180180080000ll))
04655:            doSolve(20, 0x100000ll, puzzle | 0x180180080000ll,
04656:                    partsUsed | 0x400l);
04657:       }
04658:       if (!(puzzle & 0x100180000ll)) {
04659:          if(!(puzzle & 0x100180180000ll))
04660:            doSolve(20, 0x100000ll, puzzle | 0x100180180000ll,
04661:                    partsUsed | 0x400l);
04662:          if(!(puzzle & 0x380180000ll))
04663:            doSolve(20, 0x100000ll, puzzle | 0x380180000ll,
04664:                    partsUsed | 0x400l);
04665:          if(!(puzzle & 0x180380000ll))
04666:            doSolve(20, 0x100000ll, puzzle | 0x180380000ll,
04667:                    partsUsed | 0x400l);
04668:          if(!(puzzle & 0x300380000ll))
04669:            doSolve(20, 0x100000ll, puzzle | 0x300380000ll,
04670:                    partsUsed | 0x400l);
04671:       }
04672:       if(!(puzzle & 0x90090080000ll))
04673:         doSolve(20, 0x100000ll, puzzle | 0x90090080000ll,
04674:                    partsUsed | 0x400l);
04675:       if(!(puzzle & 0x490480000ll))
04676:         doSolve(20, 0x100000ll, puzzle | 0x490480000ll,
04677:                    partsUsed | 0x400l);
04678:       if(!(puzzle & 0x6c80000ll))
04679:         doSolve(20, 0x100000ll, puzzle | 0x6c80000ll,
04680:                    partsUsed | 0x400l);
04681:     piece11at19:
04682:       if (partsUsed & 0x800l) goto piece12at19;
04683:       if (!(puzzle & 0x180080000ll)) {
04684:          if(!(puzzle & 0x1b0080000ll))
04685:            doSolve(20, 0x100000ll, puzzle | 0x1b0080000ll,
04686:                    partsUsed | 0x800l);
04687:          if(!(puzzle & 0x1a0180000ll))
04688:            doSolve(20, 0x100000ll, puzzle | 0x1a0180000ll,
04689:                    partsUsed | 0x800l);
04690:          if(!(puzzle & 0x190180000ll))
04691:            doSolve(20, 0x100000ll, puzzle | 0x190180000ll,
04692:                    partsUsed | 0x800l);
04693:          if(!(puzzle & 0x580180000ll))
04694:            doSolve(20, 0x100000ll, puzzle | 0x580180000ll,
04695:                    partsUsed | 0x800l);
04696:          if(!(puzzle & 0x580480000ll))
04697:            doSolve(20, 0x100000ll, puzzle | 0x580480000ll,
04698:                    partsUsed | 0x800l);
04699:          if(!(puzzle & 0x180580000ll))
04700:            doSolve(20, 0x100000ll, puzzle | 0x180580000ll,
04701:                    partsUsed | 0x800l);
04702:          if(!(puzzle & 0x180980000ll))
04703:            doSolve(20, 0x100000ll, puzzle | 0x180980000ll,
04704:                    partsUsed | 0x800l);
04705:          if(!(puzzle & 0x980180000ll))
04706:            doSolve(20, 0x100000ll, puzzle | 0x980180000ll,
04707:                    partsUsed | 0x800l);
04708:          if(!(puzzle & 0xd80080000ll))
04709:            doSolve(20, 0x100000ll, puzzle | 0xd80080000ll,
04710:                    partsUsed | 0x800l);
04711:       }
04712:       if (!(puzzle & 0xc80000ll)) {
04713:          if(!(puzzle & 0x80d80000ll))
04714:            doSolve(20, 0x100000ll, puzzle | 0x80d80000ll,
04715:                    partsUsed | 0x800l);
04716:          if(!(puzzle & 0xc00c80000ll))
04717:            doSolve(20, 0x100000ll, puzzle | 0xc00c80000ll,
04718:                    partsUsed | 0x800l);
04719:          if(!(puzzle & 0x480c80000ll))
04720:            doSolve(20, 0x100000ll, puzzle | 0x480c80000ll,
04721:                    partsUsed | 0x800l);
04722:          if(!(puzzle & 0x800d80000ll))
04723:            doSolve(20, 0x100000ll, puzzle | 0x800d80000ll,
04724:                    partsUsed | 0x800l);
04725:          if(!(puzzle & 0x100d80000ll))
04726:            doSolve(20, 0x100000ll, puzzle | 0x100d80000ll,
04727:                    partsUsed | 0x800l);
04728:          if(!(puzzle & 0x400d80000ll))
04729:            doSolve(20, 0x100000ll, puzzle | 0x400d80000ll,
04730:                    partsUsed | 0x800l);
04731:       }
04732:       if(!(puzzle & 0x900980000ll))
04733:         doSolve(20, 0x100000ll, puzzle | 0x900980000ll,
04734:                    partsUsed | 0x800l);
04735:       if(!(puzzle & 0xc80480000ll))
04736:         doSolve(20, 0x100000ll, puzzle | 0xc80480000ll,
04737:                    partsUsed | 0x800l);
04738:       if(!(puzzle & 0x480580000ll))
04739:         doSolve(20, 0x100000ll, puzzle | 0x480580000ll,
04740:                    partsUsed | 0x800l);
04741:     piece12at19:
04742:     break;
04743:    case 20:
04744:       if (partsUsed & 0x2l) goto piece2at20;
04745:       if(!(puzzle & 0x20120900000ll))
04746:         doSolve(21, 0x200000ll, puzzle | 0x20120900000ll,
04747:                    partsUsed | 0x2l);
04748:       if(!(puzzle & 0x2f00000ll))
04749:         doSolve(21, 0x200000ll, puzzle | 0x2f00000ll,
04750:                    partsUsed | 0x2l);
04751:       if(!(puzzle & 0x80180300000ll))
04752:         doSolve(21, 0x200000ll, puzzle | 0x80180300000ll,
04753:                    partsUsed | 0x2l);
04754:       if(!(puzzle & 0x4800900100000ll))
04755:         doSolve(21, 0x200000ll, puzzle | 0x4800900100000ll,
04756:                    partsUsed | 0x2l);
04757:       if(!(puzzle & 0x4004800900000ll))
04758:         doSolve(21, 0x200000ll, puzzle | 0x4004800900000ll,
04759:                    partsUsed | 0x2l);
04760:     piece2at20:
04761:       if (partsUsed & 0x4l) goto piece3at20;
04762:       if (!(puzzle & 0x100100100000ll)) {
04763:          if(!(puzzle & 0x920100100000ll))
04764:            doSolve(21, 0x200000ll, puzzle | 0x920100100000ll,
04765:                    partsUsed | 0x4l);
04766:          if(!(puzzle & 0x380100100000ll))
04767:            doSolve(21, 0x200000ll, puzzle | 0x380100100000ll,
04768:                    partsUsed | 0x4l);
04769:          if(!(puzzle & 0x104900100000ll))
04770:            doSolve(21, 0x200000ll, puzzle | 0x104900100000ll,
04771:                    partsUsed | 0x4l);
04772:       }
04773:       if(!(puzzle & 0xe900000ll))
04774:         doSolve(21, 0x200000ll, puzzle | 0xe900000ll,
04775:                    partsUsed | 0x4l);
04776:       if(!(puzzle & 0x800804900000ll))
04777:         doSolve(21, 0x200000ll, puzzle | 0x800804900000ll,
04778:                    partsUsed | 0x4l);
04779:     piece3at20:
04780:       if (partsUsed & 0x8l) goto piece4at20;
04781:       if(!(puzzle & 0x120100900000ll))
04782:         doSolve(21, 0x200000ll, puzzle | 0x120100900000ll,
04783:                    partsUsed | 0x8l);
04784:       if(!(puzzle & 0x180100300000ll))
04785:         doSolve(21, 0x200000ll, puzzle | 0x180100300000ll,
04786:                    partsUsed | 0x8l);
04787:       if(!(puzzle & 0x6b00000ll))
04788:         doSolve(21, 0x200000ll, puzzle | 0x6b00000ll,
04789:                    partsUsed | 0x8l);
04790:       if(!(puzzle & 0x4004900100000ll))
04791:         doSolve(21, 0x200000ll, puzzle | 0x4004900100000ll,
04792:                    partsUsed | 0x8l);
04793:       if(!(puzzle & 0x4800800900000ll))
04794:         doSolve(21, 0x200000ll, puzzle | 0x4800800900000ll,
04795:                    partsUsed | 0x8l);
04796:     piece4at20:
04797:       if (partsUsed & 0x10l) goto piece5at20;
04798:       if (!(puzzle & 0x100100100100000ll)) {
04799:          if(!(puzzle & 0x180100180100000ll))
04800:            doSolve(21, 0x200000ll, puzzle | 0x180100180100000ll,
04801:                    partsUsed | 0x10l);
04802:          if(!(puzzle & 0x900100900100000ll))
04803:            doSolve(21, 0x200000ll, puzzle | 0x900100900100000ll,
04804:                    partsUsed | 0x10l);
04805:          if(!(puzzle & 0x100900100900000ll))
04806:            doSolve(21, 0x200000ll, puzzle | 0x100900100900000ll,
04807:                    partsUsed | 0x10l);
04808:          if(!(puzzle & 0x300100300100000ll))
04809:            doSolve(21, 0x200000ll, puzzle | 0x300100300100000ll,
04810:                    partsUsed | 0x10l);
04811:          if(!(puzzle & 0x100300100300000ll))
04812:            doSolve(21, 0x200000ll, puzzle | 0x100300100300000ll,
04813:                    partsUsed | 0x10l);
04814:       }
04815:       if(!(puzzle & 0x4924100000ll))
04816:         doSolve(21, 0x200000ll, puzzle | 0x4924100000ll,
04817:                    partsUsed | 0x10l);
04818:       if(!(puzzle & 0x120100120100000ll))
04819:         doSolve(21, 0x200000ll, puzzle | 0x120100120100000ll,
04820:                    partsUsed | 0x10l);
04821:       if(!(puzzle & 0x800900800900000ll))
04822:         doSolve(21, 0x200000ll, puzzle | 0x800900800900000ll,
04823:                    partsUsed | 0x10l);
04824:       if(!(puzzle & 0x200300200300000ll))
04825:         doSolve(21, 0x200000ll, puzzle | 0x200300200300000ll,
04826:                    partsUsed | 0x10l);
04827:     piece5at20:
04828:       if (partsUsed & 0x20l) goto piece6at20;
04829:       if (!(puzzle & 0x100100100100000ll)) {
04830:          if(!(puzzle & 0x120100100100000ll))
04831:            doSolve(21, 0x200000ll, puzzle | 0x120100100100000ll,
04832:                    partsUsed | 0x20l);
04833:          if(!(puzzle & 0x180100100100000ll))
04834:            doSolve(21, 0x200000ll, puzzle | 0x180100100100000ll,
04835:                    partsUsed | 0x20l);
04836:          if(!(puzzle & 0x100100100900000ll))
04837:            doSolve(21, 0x200000ll, puzzle | 0x100100100900000ll,
04838:                    partsUsed | 0x20l);
04839:          if(!(puzzle & 0x900100100100000ll))
04840:            doSolve(21, 0x200000ll, puzzle | 0x900100100100000ll,
04841:                    partsUsed | 0x20l);
04842:          if(!(puzzle & 0x100100100300000ll))
04843:            doSolve(21, 0x200000ll, puzzle | 0x100100100300000ll,
04844:                    partsUsed | 0x20l);
04845:          if(!(puzzle & 0x300100100100000ll))
04846:            doSolve(21, 0x200000ll, puzzle | 0x300100100100000ll,
04847:                    partsUsed | 0x20l);
04848:       }
04849:       if(!(puzzle & 0x800800800900000ll))
04850:         doSolve(21, 0x200000ll, puzzle | 0x800800800900000ll,
04851:                    partsUsed | 0x20l);
04852:       if(!(puzzle & 0x200200200300000ll))
04853:         doSolve(21, 0x200000ll, puzzle | 0x200200200300000ll,
04854:                    partsUsed | 0x20l);
04855:     piece6at20:
04856:       if (partsUsed & 0x40l) goto piece7at20;
04857:       if (!(puzzle & 0x100100100100000ll)) {
04858:          if(!(puzzle & 0x100120100100000ll))
04859:            doSolve(21, 0x200000ll, puzzle | 0x100120100100000ll,
04860:                    partsUsed | 0x40l);
04861:          if(!(puzzle & 0x100100180100000ll))
04862:            doSolve(21, 0x200000ll, puzzle | 0x100100180100000ll,
04863:                    partsUsed | 0x40l);
04864:          if(!(puzzle & 0x100180100100000ll))
04865:            doSolve(21, 0x200000ll, puzzle | 0x100180100100000ll,
04866:                    partsUsed | 0x40l);
04867:          if(!(puzzle & 0x100100900100000ll))
04868:            doSolve(21, 0x200000ll, puzzle | 0x100100900100000ll,
04869:                    partsUsed | 0x40l);
04870:          if(!(puzzle & 0x100900100100000ll))
04871:            doSolve(21, 0x200000ll, puzzle | 0x100900100100000ll,
04872:                    partsUsed | 0x40l);
04873:          if(!(puzzle & 0x100100300100000ll))
04874:            doSolve(21, 0x200000ll, puzzle | 0x100100300100000ll,
04875:                    partsUsed | 0x40l);
04876:          if(!(puzzle & 0x100300100100000ll))
04877:            doSolve(21, 0x200000ll, puzzle | 0x100300100100000ll,
04878:                    partsUsed | 0x40l);
04879:       }
04880:       if(!(puzzle & 0x4920100000ll))
04881:         doSolve(21, 0x200000ll, puzzle | 0x4920100000ll,
04882:                    partsUsed | 0x40l);
04883:       if(!(puzzle & 0x100100120100000ll))
04884:         doSolve(21, 0x200000ll, puzzle | 0x100100120100000ll,
04885:                    partsUsed | 0x40l);
04886:     piece7at20:
04887:       if (partsUsed & 0x80l) goto piece8at20;
04888:       if(!(puzzle & 0x900100900000ll))
04889:         doSolve(21, 0x200000ll, puzzle | 0x900100900000ll,
04890:                    partsUsed | 0x80l);
04891:       if(!(puzzle & 0x900800900000ll))
04892:         doSolve(21, 0x200000ll, puzzle | 0x900800900000ll,
04893:                    partsUsed | 0x80l);
04894:       if(!(puzzle & 0x4904100000ll))
04895:         doSolve(21, 0x200000ll, puzzle | 0x4904100000ll,
04896:                    partsUsed | 0x80l);
04897:       if(!(puzzle & 0x4104900000ll))
04898:         doSolve(21, 0x200000ll, puzzle | 0x4104900000ll,
04899:                    partsUsed | 0x80l);
04900:       if(!(puzzle & 0xcb00000ll))
04901:         doSolve(21, 0x200000ll, puzzle | 0xcb00000ll,
04902:                    partsUsed | 0x80l);
04903:       if(!(puzzle & 0xd300000ll))
04904:         doSolve(21, 0x200000ll, puzzle | 0xd300000ll,
04905:                    partsUsed | 0x80l);
04906:       if(!(puzzle & 0x300200300000ll))
04907:         doSolve(21, 0x200000ll, puzzle | 0x300200300000ll,
04908:                    partsUsed | 0x80l);
04909:       if(!(puzzle & 0x300100300000ll))
04910:         doSolve(21, 0x200000ll, puzzle | 0x300100300000ll,
04911:                    partsUsed | 0x80l);
04912:     piece8at20:
04913:       if (partsUsed & 0x100l) goto piece9at20;
04914:       if(!(puzzle & 0x190100000ll))
04915:         doSolve(21, 0x200000ll, puzzle | 0x190100000ll,
04916:                    partsUsed | 0x100l);
04917:       if(!(puzzle & 0x180900000ll))
04918:         doSolve(21, 0x200000ll, puzzle | 0x180900000ll,
04919:                    partsUsed | 0x100l);
04920:       if(!(puzzle & 0x240300000ll))
04921:         doSolve(21, 0x200000ll, puzzle | 0x240300000ll,
04922:                    partsUsed | 0x100l);
04923:       if(!(puzzle & 0x200b00000ll))
04924:         doSolve(21, 0x200000ll, puzzle | 0x200b00000ll,
04925:                    partsUsed | 0x100l);
04926:       if(!(puzzle & 0x160100000ll))
04927:         doSolve(21, 0x200000ll, puzzle | 0x160100000ll,
04928:                    partsUsed | 0x100l);
04929:       if(!(puzzle & 0x400d00000ll))
04930:         doSolve(21, 0x200000ll, puzzle | 0x400d00000ll,
04931:                    partsUsed | 0x100l);
04932:       if(!(puzzle & 0xd00100000ll))
04933:         doSolve(21, 0x200000ll, puzzle | 0xd00100000ll,
04934:                    partsUsed | 0x100l);
04935:       if(!(puzzle & 0x900300000ll))
04936:         doSolve(21, 0x200000ll, puzzle | 0x900300000ll,
04937:                    partsUsed | 0x100l);
04938:       if(!(puzzle & 0x1300100000ll))
04939:         doSolve(21, 0x200000ll, puzzle | 0x1300100000ll,
04940:                    partsUsed | 0x100l);
04941:       if(!(puzzle & 0x1800900000ll))
04942:         doSolve(21, 0x200000ll, puzzle | 0x1800900000ll,
04943:                    partsUsed | 0x100l);
04944:       if(!(puzzle & 0x101900000ll))
04945:         doSolve(21, 0x200000ll, puzzle | 0x101900000ll,
04946:                    partsUsed | 0x100l);
04947:       if(!(puzzle & 0x1001300000ll))
04948:         doSolve(21, 0x200000ll, puzzle | 0x1001300000ll,
04949:                    partsUsed | 0x100l);
04950:     piece9at20:
04951:       if (partsUsed & 0x200l) goto piece10at20;
04952:       if (!(puzzle & 0x100100100000ll)) {
04953:          if(!(puzzle & 0x100120900000ll))
04954:            doSolve(21, 0x200000ll, puzzle | 0x100120900000ll,
04955:                    partsUsed | 0x200l);
04956:          if(!(puzzle & 0x120900100000ll))
04957:            doSolve(21, 0x200000ll, puzzle | 0x120900100000ll,
04958:                    partsUsed | 0x200l);
04959:          if(!(puzzle & 0x900120100000ll))
04960:            doSolve(21, 0x200000ll, puzzle | 0x900120100000ll,
04961:                    partsUsed | 0x200l);
04962:          if(!(puzzle & 0x100180300000ll))
04963:            doSolve(21, 0x200000ll, puzzle | 0x100180300000ll,
04964:                    partsUsed | 0x200l);
04965:          if(!(puzzle & 0x300180100000ll))
04966:            doSolve(21, 0x200000ll, puzzle | 0x300180100000ll,
04967:                    partsUsed | 0x200l);
04968:          if(!(puzzle & 0x180300100000ll))
04969:            doSolve(21, 0x200000ll, puzzle | 0x180300100000ll,
04970:                    partsUsed | 0x200l);
04971:       }
04972:       if (!(puzzle & 0x900100000ll)) {
04973:          if(!(puzzle & 0x800920100000ll))
04974:            doSolve(21, 0x200000ll, puzzle | 0x800920100000ll,
04975:                    partsUsed | 0x200l);
04976:          if(!(puzzle & 0x20920100000ll))
04977:            doSolve(21, 0x200000ll, puzzle | 0x20920100000ll,
04978:                    partsUsed | 0x200l);
04979:          if(!(puzzle & 0x804900100000ll))
04980:            doSolve(21, 0x200000ll, puzzle | 0x804900100000ll,
04981:                    partsUsed | 0x200l);
04982:       }
04983:       if (!(puzzle & 0xd00000ll)) {
04984:          if(!(puzzle & 0x9d00000ll))
04985:            doSolve(21, 0x200000ll, puzzle | 0x9d00000ll,
04986:                    partsUsed | 0x200l);
04987:          if(!(puzzle & 0x3d00000ll))
04988:            doSolve(21, 0x200000ll, puzzle | 0x3d00000ll,
04989:                    partsUsed | 0x200l);
04990:          if(!(puzzle & 0x4f00000ll))
04991:            doSolve(21, 0x200000ll, puzzle | 0x4f00000ll,
04992:                    partsUsed | 0x200l);
04993:          if(!(puzzle & 0xcd00000ll))
04994:            doSolve(21, 0x200000ll, puzzle | 0xcd00000ll,
04995:                    partsUsed | 0x200l);
04996:       }
04997:       if(!(puzzle & 0x7900000ll))
04998:         doSolve(21, 0x200000ll, puzzle | 0x7900000ll,
04999:                    partsUsed | 0x200l);
05000:       if(!(puzzle & 0x80380100000ll))
05001:         doSolve(21, 0x200000ll, puzzle | 0x80380100000ll,
05002:                    partsUsed | 0x200l);
05003:       if(!(puzzle & 0x200380100000ll))
05004:         doSolve(21, 0x200000ll, puzzle | 0x200380100000ll,
05005:                    partsUsed | 0x200l);
05006:       if(!(puzzle & 0x804800900000ll))
05007:         doSolve(21, 0x200000ll, puzzle | 0x804800900000ll,
05008:                    partsUsed | 0x200l);
05009:     piece10at20:
05010:       if (partsUsed & 0x400l) goto piece11at20;
05011:       if (!(puzzle & 0x800900000ll)) {
05012:          if(!(puzzle & 0x100900900000ll))
05013:            doSolve(21, 0x200000ll, puzzle | 0x100900900000ll,
05014:                    partsUsed | 0x400l);
05015:          if(!(puzzle & 0x4900900000ll))
05016:            doSolve(21, 0x200000ll, puzzle | 0x4900900000ll,
05017:                    partsUsed | 0x400l);
05018:          if(!(puzzle & 0x4804900000ll))
05019:            doSolve(21, 0x200000ll, puzzle | 0x4804900000ll,
05020:                    partsUsed | 0x400l);
05021:          if(!(puzzle & 0x904900000ll))
05022:            doSolve(21, 0x200000ll, puzzle | 0x904900000ll,
05023:                    partsUsed | 0x400l);
05024:          if(!(puzzle & 0x800900900000ll))
05025:            doSolve(21, 0x200000ll, puzzle | 0x800900900000ll,
05026:                    partsUsed | 0x400l);
05027:       }
05028:       if (!(puzzle & 0x100100100000ll)) {
05029:          if(!(puzzle & 0x900900100000ll))
05030:            doSolve(21, 0x200000ll, puzzle | 0x900900100000ll,
05031:                    partsUsed | 0x400l);
05032:          if(!(puzzle & 0x100300300000ll))
05033:            doSolve(21, 0x200000ll, puzzle | 0x100300300000ll,
05034:                    partsUsed | 0x400l);
05035:          if(!(puzzle & 0x300300100000ll))
05036:            doSolve(21, 0x200000ll, puzzle | 0x300300100000ll,
05037:                    partsUsed | 0x400l);
05038:       }
05039:       if (!(puzzle & 0x1900000ll)) {
05040:          if(!(puzzle & 0x5b00000ll))
05041:            doSolve(21, 0x200000ll, puzzle | 0x5b00000ll,
05042:                    partsUsed | 0x400l);
05043:          if(!(puzzle & 0x9b00000ll))
05044:            doSolve(21, 0x200000ll, puzzle | 0x9b00000ll,
05045:                    partsUsed | 0x400l);
05046:          if(!(puzzle & 0xd900000ll))
05047:            doSolve(21, 0x200000ll, puzzle | 0xd900000ll,
05048:                    partsUsed | 0x400l);
05049:       }
05050:       if(!(puzzle & 0x120120100000ll))
05051:         doSolve(21, 0x200000ll, puzzle | 0x120120100000ll,
05052:                    partsUsed | 0x400l);
05053:       if(!(puzzle & 0x920900000ll))
05054:         doSolve(21, 0x200000ll, puzzle | 0x920900000ll,
05055:                    partsUsed | 0x400l);
05056:       if(!(puzzle & 0x1f00000ll))
05057:         doSolve(21, 0x200000ll, puzzle | 0x1f00000ll,
05058:                    partsUsed | 0x400l);
05059:       if(!(puzzle & 0x6d00000ll))
05060:         doSolve(21, 0x200000ll, puzzle | 0x6d00000ll,
05061:                    partsUsed | 0x400l);
05062:       if(!(puzzle & 0x380300000ll))
05063:         doSolve(21, 0x200000ll, puzzle | 0x380300000ll,
05064:                    partsUsed | 0x400l);
05065:       if(!(puzzle & 0x180180100000ll))
05066:         doSolve(21, 0x200000ll, puzzle | 0x180180100000ll,
05067:                    partsUsed | 0x400l);
05068:       if(!(puzzle & 0x200300300000ll))
05069:         doSolve(21, 0x200000ll, puzzle | 0x200300300000ll,
05070:                    partsUsed | 0x400l);
05071:     piece11at20:
05072:       if (partsUsed & 0x800l) goto piece12at20;
05073:       if (!(puzzle & 0x120100000ll)) {
05074:          if(!(puzzle & 0x1b0100000ll))
05075:            doSolve(21, 0x200000ll, puzzle | 0x1b0100000ll,
05076:                    partsUsed | 0x800l);
05077:          if(!(puzzle & 0x360100000ll))
05078:            doSolve(21, 0x200000ll, puzzle | 0x360100000ll,
05079:                    partsUsed | 0x800l);
05080:          if(!(puzzle & 0x320300000ll))
05081:            doSolve(21, 0x200000ll, puzzle | 0x320300000ll,
05082:                    partsUsed | 0x800l);
05083:       }
05084:       if (!(puzzle & 0x100300000ll)) {
05085:          if(!(puzzle & 0x340300000ll))
05086:            doSolve(21, 0x200000ll, puzzle | 0x340300000ll,
05087:                    partsUsed | 0x800l);
05088:          if(!(puzzle & 0x101b00000ll))
05089:            doSolve(21, 0x200000ll, puzzle | 0x101b00000ll,
05090:                    partsUsed | 0x800l);
05091:          if(!(puzzle & 0xb00300000ll))
05092:            doSolve(21, 0x200000ll, puzzle | 0xb00300000ll,
05093:                    partsUsed | 0x800l);
05094:          if(!(puzzle & 0x300b00000ll))
05095:            doSolve(21, 0x200000ll, puzzle | 0x300b00000ll,
05096:                    partsUsed | 0x800l);
05097:          if(!(puzzle & 0x301300000ll))
05098:            doSolve(21, 0x200000ll, puzzle | 0x301300000ll,
05099:                    partsUsed | 0x800l);
05100:          if(!(puzzle & 0x1300300000ll))
05101:            doSolve(21, 0x200000ll, puzzle | 0x1300300000ll,
05102:                    partsUsed | 0x800l);
05103:          if(!(puzzle & 0x900b00000ll))
05104:            doSolve(21, 0x200000ll, puzzle | 0x900b00000ll,
05105:                    partsUsed | 0x800l);
05106:       }
05107:       if (!(puzzle & 0xc00100000ll)) {
05108:          if(!(puzzle & 0xd80100000ll))
05109:            doSolve(21, 0x200000ll, puzzle | 0xd80100000ll,
05110:                    partsUsed | 0x800l);
05111:          if(!(puzzle & 0xd00900000ll))
05112:            doSolve(21, 0x200000ll, puzzle | 0xd00900000ll,
05113:                    partsUsed | 0x800l);
05114:          if(!(puzzle & 0xc00d00000ll))
05115:            doSolve(21, 0x200000ll, puzzle | 0xc00d00000ll,
05116:                    partsUsed | 0x800l);
05117:       }
05118:       if (!(puzzle & 0x800900000ll)) {
05119:          if(!(puzzle & 0x980900000ll))
05120:            doSolve(21, 0x200000ll, puzzle | 0x980900000ll,
05121:                    partsUsed | 0x800l);
05122:          if(!(puzzle & 0x900d00000ll))
05123:            doSolve(21, 0x200000ll, puzzle | 0x900d00000ll,
05124:                    partsUsed | 0x800l);
05125:          if(!(puzzle & 0x1801900000ll))
05126:            doSolve(21, 0x200000ll, puzzle | 0x1801900000ll,
05127:                    partsUsed | 0x800l);
05128:          if(!(puzzle & 0xb00900000ll))
05129:            doSolve(21, 0x200000ll, puzzle | 0xb00900000ll,
05130:                    partsUsed | 0x800l);
05131:          if(!(puzzle & 0x901900000ll))
05132:            doSolve(21, 0x200000ll, puzzle | 0x901900000ll,
05133:                    partsUsed | 0x800l);
05134:          if(!(puzzle & 0x801b00000ll))
05135:            doSolve(21, 0x200000ll, puzzle | 0x801b00000ll,
05136:                    partsUsed | 0x800l);
05137:          if(!(puzzle & 0x1900900000ll))
05138:            doSolve(21, 0x200000ll, puzzle | 0x1900900000ll,
05139:                    partsUsed | 0x800l);
05140:       }
05141:       if (!(puzzle & 0x1300000ll)) {
05142:          if(!(puzzle & 0x1201300000ll))
05143:            doSolve(21, 0x200000ll, puzzle | 0x1201300000ll,
05144:                    partsUsed | 0x800l);
05145:          if(!(puzzle & 0x1001b00000ll))
05146:            doSolve(21, 0x200000ll, puzzle | 0x1001b00000ll,
05147:                    partsUsed | 0x800l);
05148:          if(!(puzzle & 0x201b00000ll))
05149:            doSolve(21, 0x200000ll, puzzle | 0x201b00000ll,
05150:                    partsUsed | 0x800l);
05151:       }
05152:       if(!(puzzle & 0x1b00100000ll))
05153:         doSolve(21, 0x200000ll, puzzle | 0x1b00100000ll,
05154:                    partsUsed | 0x800l);
05155:     piece12at20:
05156:     break;
05157:    case 21:
05158:       if (partsUsed & 0x2l) goto piece2at21;
05159:       if(!(puzzle & 0x40241200000ll))
05160:         doSolve(22, 0x400000ll, puzzle | 0x40241200000ll,
05161:                    partsUsed | 0x2l);
05162:       if(!(puzzle & 0x7a00000ll))
05163:         doSolve(22, 0x400000ll, puzzle | 0x7a00000ll,
05164:                    partsUsed | 0x2l);
05165:       if(!(puzzle & 0x180300200000ll))
05166:         doSolve(22, 0x400000ll, puzzle | 0x180300200000ll,
05167:                    partsUsed | 0x2l);
05168:       if(!(puzzle & 0x9001200200000ll))
05169:         doSolve(22, 0x400000ll, puzzle | 0x9001200200000ll,
05170:                    partsUsed | 0x2l);
05171:       if(!(puzzle & 0x8009001200000ll))
05172:         doSolve(22, 0x400000ll, puzzle | 0x8009001200000ll,
05173:                    partsUsed | 0x2l);
05174:     piece2at21:
05175:       if (partsUsed & 0x4l) goto piece3at21;
05176:       if (!(puzzle & 0x200200200000ll)) {
05177:          if(!(puzzle & 0x1240200200000ll))
05178:            doSolve(22, 0x400000ll, puzzle | 0x1240200200000ll,
05179:                    partsUsed | 0x4l);
05180:          if(!(puzzle & 0x200380200000ll))
05181:            doSolve(22, 0x400000ll, puzzle | 0x200380200000ll,
05182:                    partsUsed | 0x4l);
05183:          if(!(puzzle & 0x209200200000ll))
05184:            doSolve(22, 0x400000ll, puzzle | 0x209200200000ll,
05185:                    partsUsed | 0x4l);
05186:       }
05187:       if(!(puzzle & 0x9e00000ll))
05188:         doSolve(22, 0x400000ll, puzzle | 0x9e00000ll,
05189:                    partsUsed | 0x4l);
05190:       if(!(puzzle & 0x1001009200000ll))
05191:         doSolve(22, 0x400000ll, puzzle | 0x1001009200000ll,
05192:                    partsUsed | 0x4l);
05193:     piece3at21:
05194:       if (partsUsed & 0x8l) goto piece4at21;
05195:       if(!(puzzle & 0x240201200000ll))
05196:         doSolve(22, 0x400000ll, puzzle | 0x240201200000ll,
05197:                    partsUsed | 0x8l);
05198:       if(!(puzzle & 0x3e00000ll))
05199:         doSolve(22, 0x400000ll, puzzle | 0x3e00000ll,
05200:                    partsUsed | 0x8l);
05201:       if(!(puzzle & 0x80380200000ll))
05202:         doSolve(22, 0x400000ll, puzzle | 0x80380200000ll,
05203:                    partsUsed | 0x8l);
05204:       if(!(puzzle & 0x8009200200000ll))
05205:         doSolve(22, 0x400000ll, puzzle | 0x8009200200000ll,
05206:                    partsUsed | 0x8l);
05207:       if(!(puzzle & 0x9001001200000ll))
05208:         doSolve(22, 0x400000ll, puzzle | 0x9001001200000ll,
05209:                    partsUsed | 0x8l);
05210:     piece4at21:
05211:       if (partsUsed & 0x10l) goto piece5at21;
05212:       if (!(puzzle & 0x200200200200000ll)) {
05213:          if(!(puzzle & 0x300200300200000ll))
05214:            doSolve(22, 0x400000ll, puzzle | 0x300200300200000ll,
05215:                    partsUsed | 0x10l);
05216:          if(!(puzzle & 0x1200201200200000ll))
05217:            doSolve(22, 0x400000ll, puzzle | 0x1200201200200000ll,
05218:                    partsUsed | 0x10l);
05219:          if(!(puzzle & 0x201200201200000ll))
05220:            doSolve(22, 0x400000ll, puzzle | 0x201200201200000ll,
05221:                    partsUsed | 0x10l);
05222:       }
05223:       if(!(puzzle & 0x9248200000ll))
05224:         doSolve(22, 0x400000ll, puzzle | 0x9248200000ll,
05225:                    partsUsed | 0x10l);
05226:       if(!(puzzle & 0x240200240200000ll))
05227:         doSolve(22, 0x400000ll, puzzle | 0x240200240200000ll,
05228:                    partsUsed | 0x10l);
05229:       if(!(puzzle & 0x1001201001200000ll))
05230:         doSolve(22, 0x400000ll, puzzle | 0x1001201001200000ll,
05231:                    partsUsed | 0x10l);
05232:     piece5at21:
05233:       if (partsUsed & 0x20l) goto piece6at21;
05234:       if (!(puzzle & 0x200200200200000ll)) {
05235:          if(!(puzzle & 0x240200200200000ll))
05236:            doSolve(22, 0x400000ll, puzzle | 0x240200200200000ll,
05237:                    partsUsed | 0x20l);
05238:          if(!(puzzle & 0x300200200200000ll))
05239:            doSolve(22, 0x400000ll, puzzle | 0x300200200200000ll,
05240:                    partsUsed | 0x20l);
05241:          if(!(puzzle & 0x200200201200000ll))
05242:            doSolve(22, 0x400000ll, puzzle | 0x200200201200000ll,
05243:                    partsUsed | 0x20l);
05244:          if(!(puzzle & 0x1200200200200000ll))
05245:            doSolve(22, 0x400000ll, puzzle | 0x1200200200200000ll,
05246:                    partsUsed | 0x20l);
05247:       }
05248:       if(!(puzzle & 0x1001001001200000ll))
05249:         doSolve(22, 0x400000ll, puzzle | 0x1001001001200000ll,
05250:                    partsUsed | 0x20l);
05251:     piece6at21:
05252:       if (partsUsed & 0x40l) goto piece7at21;
05253:       if (!(puzzle & 0x200200200200000ll)) {
05254:          if(!(puzzle & 0x200240200200000ll))
05255:            doSolve(22, 0x400000ll, puzzle | 0x200240200200000ll,
05256:                    partsUsed | 0x40l);
05257:          if(!(puzzle & 0x200200300200000ll))
05258:            doSolve(22, 0x400000ll, puzzle | 0x200200300200000ll,
05259:                    partsUsed | 0x40l);
05260:          if(!(puzzle & 0x200300200200000ll))
05261:            doSolve(22, 0x400000ll, puzzle | 0x200300200200000ll,
05262:                    partsUsed | 0x40l);
05263:          if(!(puzzle & 0x200201200200000ll))
05264:            doSolve(22, 0x400000ll, puzzle | 0x200201200200000ll,
05265:                    partsUsed | 0x40l);
05266:          if(!(puzzle & 0x201200200200000ll))
05267:            doSolve(22, 0x400000ll, puzzle | 0x201200200200000ll,
05268:                    partsUsed | 0x40l);
05269:       }
05270:       if(!(puzzle & 0x9240200000ll))
05271:         doSolve(22, 0x400000ll, puzzle | 0x9240200000ll,
05272:                    partsUsed | 0x40l);
05273:       if(!(puzzle & 0x200200240200000ll))
05274:         doSolve(22, 0x400000ll, puzzle | 0x200200240200000ll,
05275:                    partsUsed | 0x40l);
05276:     piece7at21:
05277:       if (partsUsed & 0x80l) goto piece8at21;
05278:       if(!(puzzle & 0x1200201200000ll))
05279:         doSolve(22, 0x400000ll, puzzle | 0x1200201200000ll,
05280:                    partsUsed | 0x80l);
05281:       if(!(puzzle & 0x1201001200000ll))
05282:         doSolve(22, 0x400000ll, puzzle | 0x1201001200000ll,
05283:                    partsUsed | 0x80l);
05284:       if(!(puzzle & 0x9208200000ll))
05285:         doSolve(22, 0x400000ll, puzzle | 0x9208200000ll,
05286:                    partsUsed | 0x80l);
05287:       if(!(puzzle & 0x8209200000ll))
05288:         doSolve(22, 0x400000ll, puzzle | 0x8209200000ll,
05289:                    partsUsed | 0x80l);
05290:     piece8at21:
05291:       if (partsUsed & 0x100l) goto piece9at21;
05292:       if(!(puzzle & 0x320200000ll))
05293:         doSolve(22, 0x400000ll, puzzle | 0x320200000ll,
05294:                    partsUsed | 0x100l);
05295:       if(!(puzzle & 0x301200000ll))
05296:         doSolve(22, 0x400000ll, puzzle | 0x301200000ll,
05297:                    partsUsed | 0x100l);
05298:       if(!(puzzle & 0x801a00000ll))
05299:         doSolve(22, 0x400000ll, puzzle | 0x801a00000ll,
05300:                    partsUsed | 0x100l);
05301:       if(!(puzzle & 0x1a00200000ll))
05302:         doSolve(22, 0x400000ll, puzzle | 0x1a00200000ll,
05303:                    partsUsed | 0x100l);
05304:     piece9at21:
05305:       if (partsUsed & 0x200l) goto piece10at21;
05306:       if (!(puzzle & 0x200200200000ll)) {
05307:          if(!(puzzle & 0x200241200000ll))
05308:            doSolve(22, 0x400000ll, puzzle | 0x200241200000ll,
05309:                    partsUsed | 0x200l);
05310:          if(!(puzzle & 0x241200200000ll))
05311:            doSolve(22, 0x400000ll, puzzle | 0x241200200000ll,
05312:                    partsUsed | 0x200l);
05313:          if(!(puzzle & 0x1200240200000ll))
05314:            doSolve(22, 0x400000ll, puzzle | 0x1200240200000ll,
05315:                    partsUsed | 0x200l);
05316:       }
05317:       if (!(puzzle & 0x1200200000ll)) {
05318:          if(!(puzzle & 0x1001240200000ll))
05319:            doSolve(22, 0x400000ll, puzzle | 0x1001240200000ll,
05320:                    partsUsed | 0x200l);
05321:          if(!(puzzle & 0x41240200000ll))
05322:            doSolve(22, 0x400000ll, puzzle | 0x41240200000ll,
05323:                    partsUsed | 0x200l);
05324:          if(!(puzzle & 0x1009200200000ll))
05325:            doSolve(22, 0x400000ll, puzzle | 0x1009200200000ll,
05326:                    partsUsed | 0x200l);
05327:       }
05328:       if(!(puzzle & 0x5e00000ll))
05329:         doSolve(22, 0x400000ll, puzzle | 0x5e00000ll,
05330:                    partsUsed | 0x200l);
05331:       if(!(puzzle & 0x100380200000ll))
05332:         doSolve(22, 0x400000ll, puzzle | 0x100380200000ll,
05333:                    partsUsed | 0x200l);
05334:       if(!(puzzle & 0x1009001200000ll))
05335:         doSolve(22, 0x400000ll, puzzle | 0x1009001200000ll,
05336:                    partsUsed | 0x200l);
05337:     piece10at21:
05338:       if (partsUsed & 0x400l) goto piece11at21;
05339:       if (!(puzzle & 0x9200000ll)) {
05340:          if(!(puzzle & 0xda00000ll))
05341:            doSolve(22, 0x400000ll, puzzle | 0xda00000ll,
05342:                    partsUsed | 0x400l);
05343:          if(!(puzzle & 0x9009200000ll))
05344:            doSolve(22, 0x400000ll, puzzle | 0x9009200000ll,
05345:                    partsUsed | 0x400l);
05346:          if(!(puzzle & 0x1209200000ll))
05347:            doSolve(22, 0x400000ll, puzzle | 0x1209200000ll,
05348:                    partsUsed | 0x400l);
05349:       }
05350:       if (!(puzzle & 0x200200200000ll)) {
05351:          if(!(puzzle & 0x300300200000ll))
05352:            doSolve(22, 0x400000ll, puzzle | 0x300300200000ll,
05353:                    partsUsed | 0x400l);
05354:          if(!(puzzle & 0x201201200000ll))
05355:            doSolve(22, 0x400000ll, puzzle | 0x201201200000ll,
05356:                    partsUsed | 0x400l);
05357:          if(!(puzzle & 0x1201200200000ll))
05358:            doSolve(22, 0x400000ll, puzzle | 0x1201200200000ll,
05359:                    partsUsed | 0x400l);
05360:       }
05361:       if(!(puzzle & 0x240240200000ll))
05362:         doSolve(22, 0x400000ll, puzzle | 0x240240200000ll,
05363:                    partsUsed | 0x400l);
05364:       if(!(puzzle & 0x1241200000ll))
05365:         doSolve(22, 0x400000ll, puzzle | 0x1241200000ll,
05366:                    partsUsed | 0x400l);
05367:       if(!(puzzle & 0x9201200000ll))
05368:         doSolve(22, 0x400000ll, puzzle | 0x9201200000ll,
05369:                    partsUsed | 0x400l);
05370:       if(!(puzzle & 0x1001201200000ll))
05371:         doSolve(22, 0x400000ll, puzzle | 0x1001201200000ll,
05372:                    partsUsed | 0x400l);
05373:     piece11at21:
05374:       if (partsUsed & 0x800l) goto piece12at21;
05375:       if (!(puzzle & 0x300200000ll)) {
05376:          if(!(puzzle & 0x360200000ll))
05377:            doSolve(22, 0x400000ll, puzzle | 0x360200000ll,
05378:                    partsUsed | 0x800l);
05379:          if(!(puzzle & 0x1b00200000ll))
05380:            doSolve(22, 0x400000ll, puzzle | 0x1b00200000ll,
05381:                    partsUsed | 0x800l);
05382:          if(!(puzzle & 0x1301200000ll))
05383:            doSolve(22, 0x400000ll, puzzle | 0x1301200000ll,
05384:                    partsUsed | 0x800l);
05385:       }
05386:       if (!(puzzle & 0x1001200000ll)) {
05387:          if(!(puzzle & 0x1a01200000ll))
05388:            doSolve(22, 0x400000ll, puzzle | 0x1a01200000ll,
05389:                    partsUsed | 0x800l);
05390:          if(!(puzzle & 0x1801a00000ll))
05391:            doSolve(22, 0x400000ll, puzzle | 0x1801a00000ll,
05392:                    partsUsed | 0x800l);
05393:          if(!(puzzle & 0x1201a00000ll))
05394:            doSolve(22, 0x400000ll, puzzle | 0x1201a00000ll,
05395:                    partsUsed | 0x800l);
05396:       }
05397:     piece12at21:
05398:     break;
05399:    case 22:
05400:       if (partsUsed & 0x2l) goto piece2at22;
05401:       if(!(puzzle & 0x90480400000ll))
05402:         doSolve(23, 0x800000ll, puzzle | 0x90480400000ll,
05403:                    partsUsed | 0x2l);
05404:       if(!(puzzle & 0x80482400000ll))
05405:         doSolve(23, 0x800000ll, puzzle | 0x80482400000ll,
05406:                    partsUsed | 0x2l);
05407:       if(!(puzzle & 0x1001800c00000ll))
05408:         doSolve(23, 0x800000ll, puzzle | 0x1001800c00000ll,
05409:                    partsUsed | 0x2l);
05410:       if(!(puzzle & 0x1800c00400000ll))
05411:         doSolve(23, 0x800000ll, puzzle | 0x1800c00400000ll,
05412:                    partsUsed | 0x2l);
05413:     piece2at22:
05414:       if (partsUsed & 0x4l) goto piece3at22;
05415:       if (!(puzzle & 0x400400400000ll)) {
05416:          if(!(puzzle & 0x400490400000ll))
05417:            doSolve(23, 0x800000ll, puzzle | 0x400490400000ll,
05418:                    partsUsed | 0x4l);
05419:          if(!(puzzle & 0x2480400400000ll))
05420:            doSolve(23, 0x800000ll, puzzle | 0x2480400400000ll,
05421:                    partsUsed | 0x4l);
05422:          if(!(puzzle & 0x401c00400000ll))
05423:            doSolve(23, 0x800000ll, puzzle | 0x401c00400000ll,
05424:                    partsUsed | 0x4l);
05425:       }
05426:       if(!(puzzle & 0x800801c00000ll))
05427:         doSolve(23, 0x800000ll, puzzle | 0x800801c00000ll,
05428:                    partsUsed | 0x4l);
05429:     piece3at22:
05430:       if (partsUsed & 0x8l) goto piece4at22;
05431:       if(!(puzzle & 0x10490400000ll))
05432:         doSolve(23, 0x800000ll, puzzle | 0x10490400000ll,
05433:                    partsUsed | 0x8l);
05434:       if(!(puzzle & 0x480402400000ll))
05435:         doSolve(23, 0x800000ll, puzzle | 0x480402400000ll,
05436:                    partsUsed | 0x8l);
05437:       if(!(puzzle & 0x1001c00400000ll))
05438:         doSolve(23, 0x800000ll, puzzle | 0x1001c00400000ll,
05439:                    partsUsed | 0x8l);
05440:       if(!(puzzle & 0x1800800c00000ll))
05441:         doSolve(23, 0x800000ll, puzzle | 0x1800800c00000ll,
05442:                    partsUsed | 0x8l);
05443:     piece4at22:
05444:       if (partsUsed & 0x10l) goto piece5at22;
05445:       if (!(puzzle & 0x400400400400000ll)) {
05446:          if(!(puzzle & 0x480400480400000ll))
05447:            doSolve(23, 0x800000ll, puzzle | 0x480400480400000ll,
05448:                    partsUsed | 0x10l);
05449:          if(!(puzzle & 0x2400402400400000ll))
05450:            doSolve(23, 0x800000ll, puzzle | 0x2400402400400000ll,
05451:                    partsUsed | 0x10l);
05452:          if(!(puzzle & 0x402400402400000ll))
05453:            doSolve(23, 0x800000ll, puzzle | 0x402400402400000ll,
05454:                    partsUsed | 0x10l);
05455:          if(!(puzzle & 0xc00400c00400000ll))
05456:            doSolve(23, 0x800000ll, puzzle | 0xc00400c00400000ll,
05457:                    partsUsed | 0x10l);
05458:          if(!(puzzle & 0x400c00400c00000ll))
05459:            doSolve(23, 0x800000ll, puzzle | 0x400c00400c00000ll,
05460:                    partsUsed | 0x10l);
05461:       }
05462:       if(!(puzzle & 0x2002402002400000ll))
05463:         doSolve(23, 0x800000ll, puzzle | 0x2002402002400000ll,
05464:                    partsUsed | 0x10l);
05465:       if(!(puzzle & 0x800c00800c00000ll))
05466:         doSolve(23, 0x800000ll, puzzle | 0x800c00800c00000ll,
05467:                    partsUsed | 0x10l);
05468:     piece5at22:
05469:       if (partsUsed & 0x20l) goto piece6at22;
05470:       if (!(puzzle & 0x400400400400000ll)) {
05471:          if(!(puzzle & 0x480400400400000ll))
05472:            doSolve(23, 0x800000ll, puzzle | 0x480400400400000ll,
05473:                    partsUsed | 0x20l);
05474:          if(!(puzzle & 0x400400402400000ll))
05475:            doSolve(23, 0x800000ll, puzzle | 0x400400402400000ll,
05476:                    partsUsed | 0x20l);
05477:          if(!(puzzle & 0x2400400400400000ll))
05478:            doSolve(23, 0x800000ll, puzzle | 0x2400400400400000ll,
05479:                    partsUsed | 0x20l);
05480:          if(!(puzzle & 0x400400400c00000ll))
05481:            doSolve(23, 0x800000ll, puzzle | 0x400400400c00000ll,
05482:                    partsUsed | 0x20l);
05483:          if(!(puzzle & 0xc00400400400000ll))
05484:            doSolve(23, 0x800000ll, puzzle | 0xc00400400400000ll,
05485:                    partsUsed | 0x20l);
05486:       }
05487:       if(!(puzzle & 0x2002002002400000ll))
05488:         doSolve(23, 0x800000ll, puzzle | 0x2002002002400000ll,
05489:                    partsUsed | 0x20l);
05490:       if(!(puzzle & 0x800800800c00000ll))
05491:         doSolve(23, 0x800000ll, puzzle | 0x800800800c00000ll,
05492:                    partsUsed | 0x20l);
05493:     piece6at22:
05494:       if (partsUsed & 0x40l) goto piece7at22;
05495:       if (!(puzzle & 0x400400400400000ll)) {
05496:          if(!(puzzle & 0x400480400400000ll))
05497:            doSolve(23, 0x800000ll, puzzle | 0x400480400400000ll,
05498:                    partsUsed | 0x40l);
05499:          if(!(puzzle & 0x400402400400000ll))
05500:            doSolve(23, 0x800000ll, puzzle | 0x400402400400000ll,
05501:                    partsUsed | 0x40l);
05502:          if(!(puzzle & 0x402400400400000ll))
05503:            doSolve(23, 0x800000ll, puzzle | 0x402400400400000ll,
05504:                    partsUsed | 0x40l);
05505:          if(!(puzzle & 0x400400c00400000ll))
05506:            doSolve(23, 0x800000ll, puzzle | 0x400400c00400000ll,
05507:                    partsUsed | 0x40l);
05508:          if(!(puzzle & 0x400c00400400000ll))
05509:            doSolve(23, 0x800000ll, puzzle | 0x400c00400400000ll,
05510:                    partsUsed | 0x40l);
05511:       }
05512:       if(!(puzzle & 0x2490400000ll))
05513:         doSolve(23, 0x800000ll, puzzle | 0x2490400000ll,
05514:                    partsUsed | 0x40l);
05515:       if(!(puzzle & 0x400400480400000ll))
05516:         doSolve(23, 0x800000ll, puzzle | 0x400400480400000ll,
05517:                    partsUsed | 0x40l);
05518:     piece7at22:
05519:       if (partsUsed & 0x80l) goto piece8at22;
05520:       if(!(puzzle & 0x2400402400000ll))
05521:         doSolve(23, 0x800000ll, puzzle | 0x2400402400000ll,
05522:                    partsUsed | 0x80l);
05523:       if(!(puzzle & 0x2402002400000ll))
05524:         doSolve(23, 0x800000ll, puzzle | 0x2402002400000ll,
05525:                    partsUsed | 0x80l);
05526:       if(!(puzzle & 0xbc00000ll))
05527:         doSolve(23, 0x800000ll, puzzle | 0xbc00000ll,
05528:                    partsUsed | 0x80l);
05529:       if(!(puzzle & 0xf400000ll))
05530:         doSolve(23, 0x800000ll, puzzle | 0xf400000ll,
05531:                    partsUsed | 0x80l);
05532:       if(!(puzzle & 0xc00800c00000ll))
05533:         doSolve(23, 0x800000ll, puzzle | 0xc00800c00000ll,
05534:                    partsUsed | 0x80l);
05535:       if(!(puzzle & 0xc00400c00000ll))
05536:         doSolve(23, 0x800000ll, puzzle | 0xc00400c00000ll,
05537:                    partsUsed | 0x80l);
05538:       if(!(puzzle & 0x1c01400000ll))
05539:         doSolve(23, 0x800000ll, puzzle | 0x1c01400000ll,
05540:                    partsUsed | 0x80l);
05541:       if(!(puzzle & 0x1401c00000ll))
05542:         doSolve(23, 0x800000ll, puzzle | 0x1401c00000ll,
05543:                    partsUsed | 0x80l);
05544:     piece8at22:
05545:       if (partsUsed & 0x100l) goto piece9at22;
05546:       if(!(puzzle & 0x900c00000ll))
05547:         doSolve(23, 0x800000ll, puzzle | 0x900c00000ll,
05548:                    partsUsed | 0x100l);
05549:       if(!(puzzle & 0x802c00000ll))
05550:         doSolve(23, 0x800000ll, puzzle | 0x802c00000ll,
05551:                    partsUsed | 0x100l);
05552:       if(!(puzzle & 0x580400000ll))
05553:         doSolve(23, 0x800000ll, puzzle | 0x580400000ll,
05554:                    partsUsed | 0x100l);
05555:       if(!(puzzle & 0x4c00400000ll))
05556:         doSolve(23, 0x800000ll, puzzle | 0x4c00400000ll,
05557:                    partsUsed | 0x100l);
05558:       if(!(puzzle & 0x2400c00000ll))
05559:         doSolve(23, 0x800000ll, puzzle | 0x2400c00000ll,
05560:                    partsUsed | 0x100l);
05561:       if(!(puzzle & 0x6002400000ll))
05562:         doSolve(23, 0x800000ll, puzzle | 0x6002400000ll,
05563:                    partsUsed | 0x100l);
05564:       if(!(puzzle & 0x406400000ll))
05565:         doSolve(23, 0x800000ll, puzzle | 0x406400000ll,
05566:                    partsUsed | 0x100l);
05567:       if(!(puzzle & 0x4004c00000ll))
05568:         doSolve(23, 0x800000ll, puzzle | 0x4004c00000ll,
05569:                    partsUsed | 0x100l);
05570:     piece9at22:
05571:       if (partsUsed & 0x200l) goto piece10at22;
05572:       if (!(puzzle & 0x480400000ll)) {
05573:          if(!(puzzle & 0x80490400000ll))
05574:            doSolve(23, 0x800000ll, puzzle | 0x80490400000ll,
05575:                    partsUsed | 0x200l);
05576:          if(!(puzzle & 0x400482400000ll))
05577:            doSolve(23, 0x800000ll, puzzle | 0x400482400000ll,
05578:                    partsUsed | 0x200l);
05579:          if(!(puzzle & 0x2002480400000ll))
05580:            doSolve(23, 0x800000ll, puzzle | 0x2002480400000ll,
05581:                    partsUsed | 0x200l);
05582:          if(!(puzzle & 0x2400480400000ll))
05583:            doSolve(23, 0x800000ll, puzzle | 0x2400480400000ll,
05584:                    partsUsed | 0x200l);
05585:          if(!(puzzle & 0x82480400000ll))
05586:            doSolve(23, 0x800000ll, puzzle | 0x82480400000ll,
05587:                    partsUsed | 0x200l);
05588:       }
05589:       if(!(puzzle & 0x482400400000ll))
05590:         doSolve(23, 0x800000ll, puzzle | 0x482400400000ll,
05591:                    partsUsed | 0x200l);
05592:       if(!(puzzle & 0x801800c00000ll))
05593:         doSolve(23, 0x800000ll, puzzle | 0x801800c00000ll,
05594:                    partsUsed | 0x200l);
05595:       if(!(puzzle & 0x801c00400000ll))
05596:         doSolve(23, 0x800000ll, puzzle | 0x801c00400000ll,
05597:                    partsUsed | 0x200l);
05598:     piece10at22:
05599:       if (partsUsed & 0x400l) goto piece11at22;
05600:       if (!(puzzle & 0x2400400000ll)) {
05601:          if(!(puzzle & 0x402402400000ll))
05602:            doSolve(23, 0x800000ll, puzzle | 0x402402400000ll,
05603:                    partsUsed | 0x400l);
05604:          if(!(puzzle & 0x2402400400000ll))
05605:            doSolve(23, 0x800000ll, puzzle | 0x2402400400000ll,
05606:                    partsUsed | 0x400l);
05607:          if(!(puzzle & 0x2002402400000ll))
05608:            doSolve(23, 0x800000ll, puzzle | 0x2002402400000ll,
05609:                    partsUsed | 0x400l);
05610:       }
05611:       if (!(puzzle & 0x4c00000ll)) {
05612:          if(!(puzzle & 0xdc00000ll))
05613:            doSolve(23, 0x800000ll, puzzle | 0xdc00000ll,
05614:                    partsUsed | 0x400l);
05615:          if(!(puzzle & 0x7c00000ll))
05616:            doSolve(23, 0x800000ll, puzzle | 0x7c00000ll,
05617:                    partsUsed | 0x400l);
05618:          if(!(puzzle & 0xec00000ll))
05619:            doSolve(23, 0x800000ll, puzzle | 0xec00000ll,
05620:                    partsUsed | 0x400l);
05621:       }
05622:       if (!(puzzle & 0xc00400000ll)) {
05623:          if(!(puzzle & 0x800c00c00000ll))
05624:            doSolve(23, 0x800000ll, puzzle | 0x800c00c00000ll,
05625:                    partsUsed | 0x400l);
05626:          if(!(puzzle & 0x400c00c00000ll))
05627:            doSolve(23, 0x800000ll, puzzle | 0x400c00c00000ll,
05628:                    partsUsed | 0x400l);
05629:          if(!(puzzle & 0x1c00c00000ll))
05630:            doSolve(23, 0x800000ll, puzzle | 0x1c00c00000ll,
05631:                    partsUsed | 0x400l);
05632:          if(!(puzzle & 0xc00c00400000ll))
05633:            doSolve(23, 0x800000ll, puzzle | 0xc00c00400000ll,
05634:                    partsUsed | 0x400l);
05635:          if(!(puzzle & 0xc01c00000ll))
05636:            doSolve(23, 0x800000ll, puzzle | 0xc01c00000ll,
05637:                    partsUsed | 0x400l);
05638:       }
05639:       if(!(puzzle & 0x480480400000ll))
05640:         doSolve(23, 0x800000ll, puzzle | 0x480480400000ll,
05641:                    partsUsed | 0x400l);
05642:       if(!(puzzle & 0x2482400000ll))
05643:         doSolve(23, 0x800000ll, puzzle | 0x2482400000ll,
05644:                    partsUsed | 0x400l);
05645:       if(!(puzzle & 0x1801c00000ll))
05646:         doSolve(23, 0x800000ll, puzzle | 0x1801c00000ll,
05647:                    partsUsed | 0x400l);
05648:     piece11at22:
05649:       if (partsUsed & 0x800l) goto piece12at22;
05650:       if (!(puzzle & 0xc00400000ll)) {
05651:          if(!(puzzle & 0xd80400000ll))
05652:            doSolve(23, 0x800000ll, puzzle | 0xd80400000ll,
05653:                    partsUsed | 0x800l);
05654:          if(!(puzzle & 0xd00c00000ll))
05655:            doSolve(23, 0x800000ll, puzzle | 0xd00c00000ll,
05656:                    partsUsed | 0x800l);
05657:          if(!(puzzle & 0xc80c00000ll))
05658:            doSolve(23, 0x800000ll, puzzle | 0xc80c00000ll,
05659:                    partsUsed | 0x800l);
05660:          if(!(puzzle & 0x2c00c00000ll))
05661:            doSolve(23, 0x800000ll, puzzle | 0x2c00c00000ll,
05662:                    partsUsed | 0x800l);
05663:          if(!(puzzle & 0x2c02400000ll))
05664:            doSolve(23, 0x800000ll, puzzle | 0x2c02400000ll,
05665:                    partsUsed | 0x800l);
05666:          if(!(puzzle & 0xc02c00000ll))
05667:            doSolve(23, 0x800000ll, puzzle | 0xc02c00000ll,
05668:                    partsUsed | 0x800l);
05669:          if(!(puzzle & 0xc04c00000ll))
05670:            doSolve(23, 0x800000ll, puzzle | 0xc04c00000ll,
05671:                    partsUsed | 0x800l);
05672:          if(!(puzzle & 0x4c00c00000ll))
05673:            doSolve(23, 0x800000ll, puzzle | 0x4c00c00000ll,
05674:                    partsUsed | 0x800l);
05675:          if(!(puzzle & 0x6c00400000ll))
05676:            doSolve(23, 0x800000ll, puzzle | 0x6c00400000ll,
05677:                    partsUsed | 0x800l);
05678:       }
05679:       if (!(puzzle & 0x6400000ll)) {
05680:          if(!(puzzle & 0x406c00000ll))
05681:            doSolve(23, 0x800000ll, puzzle | 0x406c00000ll,
05682:                    partsUsed | 0x800l);
05683:          if(!(puzzle & 0x6006400000ll))
05684:            doSolve(23, 0x800000ll, puzzle | 0x6006400000ll,
05685:                    partsUsed | 0x800l);
05686:          if(!(puzzle & 0x2406400000ll))
05687:            doSolve(23, 0x800000ll, puzzle | 0x2406400000ll,
05688:                    partsUsed | 0x800l);
05689:          if(!(puzzle & 0x4006c00000ll))
05690:            doSolve(23, 0x800000ll, puzzle | 0x4006c00000ll,
05691:                    partsUsed | 0x800l);
05692:          if(!(puzzle & 0x806c00000ll))
05693:            doSolve(23, 0x800000ll, puzzle | 0x806c00000ll,
05694:                    partsUsed | 0x800l);
05695:          if(!(puzzle & 0x2006c00000ll))
05696:            doSolve(23, 0x800000ll, puzzle | 0x2006c00000ll,
05697:                    partsUsed | 0x800l);
05698:       }
05699:       if(!(puzzle & 0x4804c00000ll))
05700:         doSolve(23, 0x800000ll, puzzle | 0x4804c00000ll,
05701:                    partsUsed | 0x800l);
05702:       if(!(puzzle & 0x6402400000ll))
05703:         doSolve(23, 0x800000ll, puzzle | 0x6402400000ll,
05704:                    partsUsed | 0x800l);
05705:       if(!(puzzle & 0x2402c00000ll))
05706:         doSolve(23, 0x800000ll, puzzle | 0x2402c00000ll,
05707:                    partsUsed | 0x800l);
05708:     piece12at22:
05709:     break;
05710:    case 23:
05711:       if (partsUsed & 0x2l) goto piece2at23;
05712:       if(!(puzzle & 0x400c01800000ll))
05713:         doSolve(24, 0x1000000ll, puzzle | 0x400c01800000ll,
05714:                    partsUsed | 0x2l);
05715:       if(!(puzzle & 0x120900800000ll))
05716:         doSolve(24, 0x1000000ll, puzzle | 0x120900800000ll,
05717:                    partsUsed | 0x2l);
05718:       if(!(puzzle & 0x100904800000ll))
05719:         doSolve(24, 0x1000000ll, puzzle | 0x100904800000ll,
05720:                    partsUsed | 0x2l);
05721:     piece2at23:
05722:       if (partsUsed & 0x4l) goto piece3at23;
05723:       if (!(puzzle & 0x800800800000ll)) {
05724:          if(!(puzzle & 0x800920800000ll))
05725:            doSolve(24, 0x1000000ll, puzzle | 0x800920800000ll,
05726:                    partsUsed | 0x4l);
05727:          if(!(puzzle & 0x4900800800000ll))
05728:            doSolve(24, 0x1000000ll, puzzle | 0x4900800800000ll,
05729:                    partsUsed | 0x4l);
05730:          if(!(puzzle & 0x1c00800800000ll))
05731:            doSolve(24, 0x1000000ll, puzzle | 0x1c00800800000ll,
05732:                    partsUsed | 0x4l);
05733:       }
05734:     piece3at23:
05735:       if (partsUsed & 0x8l) goto piece4at23;
05736:       if(!(puzzle & 0x20920800000ll))
05737:         doSolve(24, 0x1000000ll, puzzle | 0x20920800000ll,
05738:                    partsUsed | 0x8l);
05739:       if(!(puzzle & 0x900804800000ll))
05740:         doSolve(24, 0x1000000ll, puzzle | 0x900804800000ll,
05741:                    partsUsed | 0x8l);
05742:       if(!(puzzle & 0xc00801800000ll))
05743:         doSolve(24, 0x1000000ll, puzzle | 0xc00801800000ll,
05744:                    partsUsed | 0x8l);
05745:     piece4at23:
05746:       if (partsUsed & 0x10l) goto piece5at23;
05747:       if (!(puzzle & 0x800800800800000ll)) {
05748:          if(!(puzzle & 0x900800900800000ll))
05749:            doSolve(24, 0x1000000ll, puzzle | 0x900800900800000ll,
05750:                    partsUsed | 0x10l);
05751:          if(!(puzzle & 0xc00800c00800000ll))
05752:            doSolve(24, 0x1000000ll, puzzle | 0xc00800c00800000ll,
05753:                    partsUsed | 0x10l);
05754:          if(!(puzzle & 0x4800804800800000ll))
05755:            doSolve(24, 0x1000000ll, puzzle | 0x4800804800800000ll,
05756:                    partsUsed | 0x10l);
05757:          if(!(puzzle & 0x804800804800000ll))
05758:            doSolve(24, 0x1000000ll, puzzle | 0x804800804800000ll,
05759:                    partsUsed | 0x10l);
05760:          if(!(puzzle & 0x1800801800800000ll))
05761:            doSolve(24, 0x1000000ll, puzzle | 0x1800801800800000ll,
05762:                    partsUsed | 0x10l);
05763:          if(!(puzzle & 0x801800801800000ll))
05764:            doSolve(24, 0x1000000ll, puzzle | 0x801800801800000ll,
05765:                    partsUsed | 0x10l);
05766:       }
05767:       if(!(puzzle & 0x4004804004800000ll))
05768:         doSolve(24, 0x1000000ll, puzzle | 0x4004804004800000ll,
05769:                    partsUsed | 0x10l);
05770:       if(!(puzzle & 0x1001801001800000ll))
05771:         doSolve(24, 0x1000000ll, puzzle | 0x1001801001800000ll,
05772:                    partsUsed | 0x10l);
05773:     piece5at23:
05774:       if (partsUsed & 0x20l) goto piece6at23;
05775:       if (!(puzzle & 0x800800800800000ll)) {
05776:          if(!(puzzle & 0x900800800800000ll))
05777:            doSolve(24, 0x1000000ll, puzzle | 0x900800800800000ll,
05778:                    partsUsed | 0x20l);
05779:          if(!(puzzle & 0xc00800800800000ll))
05780:            doSolve(24, 0x1000000ll, puzzle | 0xc00800800800000ll,
05781:                    partsUsed | 0x20l);
05782:          if(!(puzzle & 0x800800804800000ll))
05783:            doSolve(24, 0x1000000ll, puzzle | 0x800800804800000ll,
05784:                    partsUsed | 0x20l);
05785:          if(!(puzzle & 0x4800800800800000ll))
05786:            doSolve(24, 0x1000000ll, puzzle | 0x4800800800800000ll,
05787:                    partsUsed | 0x20l);
05788:          if(!(puzzle & 0x800800801800000ll))
05789:            doSolve(24, 0x1000000ll, puzzle | 0x800800801800000ll,
05790:                    partsUsed | 0x20l);
05791:          if(!(puzzle & 0x1800800800800000ll))
05792:            doSolve(24, 0x1000000ll, puzzle | 0x1800800800800000ll,
05793:                    partsUsed | 0x20l);
05794:       }
05795:       if(!(puzzle & 0x4004004004800000ll))
05796:         doSolve(24, 0x1000000ll, puzzle | 0x4004004004800000ll,
05797:                    partsUsed | 0x20l);
05798:       if(!(puzzle & 0x1001001001800000ll))
05799:         doSolve(24, 0x1000000ll, puzzle | 0x1001001001800000ll,
05800:                    partsUsed | 0x20l);
05801:     piece6at23:
05802:       if (partsUsed & 0x40l) goto piece7at23;
05803:       if (!(puzzle & 0x800800800800000ll)) {
05804:          if(!(puzzle & 0x800900800800000ll))
05805:            doSolve(24, 0x1000000ll, puzzle | 0x800900800800000ll,
05806:                    partsUsed | 0x40l);
05807:          if(!(puzzle & 0x800800c00800000ll))
05808:            doSolve(24, 0x1000000ll, puzzle | 0x800800c00800000ll,
05809:                    partsUsed | 0x40l);
05810:          if(!(puzzle & 0x800c00800800000ll))
05811:            doSolve(24, 0x1000000ll, puzzle | 0x800c00800800000ll,
05812:                    partsUsed | 0x40l);
05813:          if(!(puzzle & 0x800804800800000ll))
05814:            doSolve(24, 0x1000000ll, puzzle | 0x800804800800000ll,
05815:                    partsUsed | 0x40l);
05816:          if(!(puzzle & 0x804800800800000ll))
05817:            doSolve(24, 0x1000000ll, puzzle | 0x804800800800000ll,
05818:                    partsUsed | 0x40l);
05819:          if(!(puzzle & 0x800801800800000ll))
05820:            doSolve(24, 0x1000000ll, puzzle | 0x800801800800000ll,
05821:                    partsUsed | 0x40l);
05822:          if(!(puzzle & 0x801800800800000ll))
05823:            doSolve(24, 0x1000000ll, puzzle | 0x801800800800000ll,
05824:                    partsUsed | 0x40l);
05825:       }
05826:       if(!(puzzle & 0x4920800000ll))
05827:         doSolve(24, 0x1000000ll, puzzle | 0x4920800000ll,
05828:                    partsUsed | 0x40l);
05829:       if(!(puzzle & 0x800800900800000ll))
05830:         doSolve(24, 0x1000000ll, puzzle | 0x800800900800000ll,
05831:                    partsUsed | 0x40l);
05832:     piece7at23:
05833:       if (partsUsed & 0x80l) goto piece8at23;
05834:       if(!(puzzle & 0x4800804800000ll))
05835:         doSolve(24, 0x1000000ll, puzzle | 0x4800804800000ll,
05836:                    partsUsed | 0x80l);
05837:       if(!(puzzle & 0x4804004800000ll))
05838:         doSolve(24, 0x1000000ll, puzzle | 0x4804004800000ll,
05839:                    partsUsed | 0x80l);
05840:       if(!(puzzle & 0x1801001800000ll))
05841:         doSolve(24, 0x1000000ll, puzzle | 0x1801001800000ll,
05842:                    partsUsed | 0x80l);
05843:       if(!(puzzle & 0x1800801800000ll))
05844:         doSolve(24, 0x1000000ll, puzzle | 0x1800801800000ll,
05845:                    partsUsed | 0x80l);
05846:     piece8at23:
05847:       if (partsUsed & 0x100l) goto piece9at23;
05848:       if(!(puzzle & 0xc80800000ll))
05849:         doSolve(24, 0x1000000ll, puzzle | 0xc80800000ll,
05850:                    partsUsed | 0x100l);
05851:       if(!(puzzle & 0xc04800000ll))
05852:         doSolve(24, 0x1000000ll, puzzle | 0xc04800000ll,
05853:                    partsUsed | 0x100l);
05854:       if(!(puzzle & 0x1201800000ll))
05855:         doSolve(24, 0x1000000ll, puzzle | 0x1201800000ll,
05856:                    partsUsed | 0x100l);
05857:       if(!(puzzle & 0x1005800000ll))
05858:         doSolve(24, 0x1000000ll, puzzle | 0x1005800000ll,
05859:                    partsUsed | 0x100l);
05860:       if(!(puzzle & 0xb00800000ll))
05861:         doSolve(24, 0x1000000ll, puzzle | 0xb00800000ll,
05862:                    partsUsed | 0x100l);
05863:       if(!(puzzle & 0x2006800000ll))
05864:         doSolve(24, 0x1000000ll, puzzle | 0x2006800000ll,
05865:                    partsUsed | 0x100l);
05866:       if(!(puzzle & 0x6800800000ll))
05867:         doSolve(24, 0x1000000ll, puzzle | 0x6800800000ll,
05868:                    partsUsed | 0x100l);
05869:       if(!(puzzle & 0x4801800000ll))
05870:         doSolve(24, 0x1000000ll, puzzle | 0x4801800000ll,
05871:                    partsUsed | 0x100l);
05872:       if(!(puzzle & 0x9800800000ll))
05873:         doSolve(24, 0x1000000ll, puzzle | 0x9800800000ll,
05874:                    partsUsed | 0x100l);
05875:       if(!(puzzle & 0xc004800000ll))
05876:         doSolve(24, 0x1000000ll, puzzle | 0xc004800000ll,
05877:                    partsUsed | 0x100l);
05878:       if(!(puzzle & 0x80c800000ll))
05879:         doSolve(24, 0x1000000ll, puzzle | 0x80c800000ll,
05880:                    partsUsed | 0x100l);
05881:       if(!(puzzle & 0x8009800000ll))
05882:         doSolve(24, 0x1000000ll, puzzle | 0x8009800000ll,
05883:                    partsUsed | 0x100l);
05884:     piece9at23:
05885:       if (partsUsed & 0x200l) goto piece10at23;
05886:       if (!(puzzle & 0x900800000ll)) {
05887:          if(!(puzzle & 0x100920800000ll))
05888:            doSolve(24, 0x1000000ll, puzzle | 0x100920800000ll,
05889:                    partsUsed | 0x200l);
05890:          if(!(puzzle & 0x800904800000ll))
05891:            doSolve(24, 0x1000000ll, puzzle | 0x800904800000ll,
05892:                    partsUsed | 0x200l);
05893:          if(!(puzzle & 0x4004900800000ll))
05894:            doSolve(24, 0x1000000ll, puzzle | 0x4004900800000ll,
05895:                    partsUsed | 0x200l);
05896:          if(!(puzzle & 0x4800900800000ll))
05897:            doSolve(24, 0x1000000ll, puzzle | 0x4800900800000ll,
05898:                    partsUsed | 0x200l);
05899:          if(!(puzzle & 0x104900800000ll))
05900:            doSolve(24, 0x1000000ll, puzzle | 0x104900800000ll,
05901:                    partsUsed | 0x200l);
05902:       }
05903:       if (!(puzzle & 0x800800800000ll)) {
05904:          if(!(puzzle & 0x904800800000ll))
05905:            doSolve(24, 0x1000000ll, puzzle | 0x904800800000ll,
05906:                    partsUsed | 0x200l);
05907:          if(!(puzzle & 0x800c01800000ll))
05908:            doSolve(24, 0x1000000ll, puzzle | 0x800c01800000ll,
05909:                    partsUsed | 0x200l);
05910:          if(!(puzzle & 0x1800c00800000ll))
05911:            doSolve(24, 0x1000000ll, puzzle | 0x1800c00800000ll,
05912:                    partsUsed | 0x200l);
05913:          if(!(puzzle & 0xc01800800000ll))
05914:            doSolve(24, 0x1000000ll, puzzle | 0xc01800800000ll,
05915:                    partsUsed | 0x200l);
05916:       }
05917:       if(!(puzzle & 0x401c00800000ll))
05918:         doSolve(24, 0x1000000ll, puzzle | 0x401c00800000ll,
05919:                    partsUsed | 0x200l);
05920:       if(!(puzzle & 0x1001c00800000ll))
05921:         doSolve(24, 0x1000000ll, puzzle | 0x1001c00800000ll,
05922:                    partsUsed | 0x200l);
05923:     piece10at23:
05924:       if (partsUsed & 0x400l) goto piece11at23;
05925:       if (!(puzzle & 0x4800800000ll)) {
05926:          if(!(puzzle & 0x804804800000ll))
05927:            doSolve(24, 0x1000000ll, puzzle | 0x804804800000ll,
05928:                    partsUsed | 0x400l);
05929:          if(!(puzzle & 0x4804800800000ll))
05930:            doSolve(24, 0x1000000ll, puzzle | 0x4804800800000ll,
05931:                    partsUsed | 0x400l);
05932:          if(!(puzzle & 0x4004804800000ll))
05933:            doSolve(24, 0x1000000ll, puzzle | 0x4004804800000ll,
05934:                    partsUsed | 0x400l);
05935:       }
05936:       if (!(puzzle & 0x1800800000ll)) {
05937:          if(!(puzzle & 0x1001801800000ll))
05938:            doSolve(24, 0x1000000ll, puzzle | 0x1001801800000ll,
05939:                    partsUsed | 0x400l);
05940:          if(!(puzzle & 0x801801800000ll))
05941:            doSolve(24, 0x1000000ll, puzzle | 0x801801800000ll,
05942:                    partsUsed | 0x400l);
05943:          if(!(puzzle & 0x1801800800000ll))
05944:            doSolve(24, 0x1000000ll, puzzle | 0x1801800800000ll,
05945:                    partsUsed | 0x400l);
05946:       }
05947:       if(!(puzzle & 0x900900800000ll))
05948:         doSolve(24, 0x1000000ll, puzzle | 0x900900800000ll,
05949:                    partsUsed | 0x400l);
05950:       if(!(puzzle & 0x4904800000ll))
05951:         doSolve(24, 0x1000000ll, puzzle | 0x4904800000ll,
05952:                    partsUsed | 0x400l);
05953:       if(!(puzzle & 0xf800000ll))
05954:         doSolve(24, 0x1000000ll, puzzle | 0xf800000ll,
05955:                    partsUsed | 0x400l);
05956:       if(!(puzzle & 0x1c01800000ll))
05957:         doSolve(24, 0x1000000ll, puzzle | 0x1c01800000ll,
05958:                    partsUsed | 0x400l);
05959:       if(!(puzzle & 0xc00c00800000ll))
05960:         doSolve(24, 0x1000000ll, puzzle | 0xc00c00800000ll,
05961:                    partsUsed | 0x400l);
05962:     piece11at23:
05963:       if (partsUsed & 0x800l) goto piece12at23;
05964:       if (!(puzzle & 0x900800000ll)) {
05965:          if(!(puzzle & 0xd80800000ll))
05966:            doSolve(24, 0x1000000ll, puzzle | 0xd80800000ll,
05967:                    partsUsed | 0x800l);
05968:          if(!(puzzle & 0x1b00800000ll))
05969:            doSolve(24, 0x1000000ll, puzzle | 0x1b00800000ll,
05970:                    partsUsed | 0x800l);
05971:          if(!(puzzle & 0x1901800000ll))
05972:            doSolve(24, 0x1000000ll, puzzle | 0x1901800000ll,
05973:                    partsUsed | 0x800l);
05974:       }
05975:       if (!(puzzle & 0x801800000ll)) {
05976:          if(!(puzzle & 0x1a01800000ll))
05977:            doSolve(24, 0x1000000ll, puzzle | 0x1a01800000ll,
05978:                    partsUsed | 0x800l);
05979:          if(!(puzzle & 0x80d800000ll))
05980:            doSolve(24, 0x1000000ll, puzzle | 0x80d800000ll,
05981:                    partsUsed | 0x800l);
05982:          if(!(puzzle & 0x5801800000ll))
05983:            doSolve(24, 0x1000000ll, puzzle | 0x5801800000ll,
05984:                    partsUsed | 0x800l);
05985:          if(!(puzzle & 0x1805800000ll))
05986:            doSolve(24, 0x1000000ll, puzzle | 0x1805800000ll,
05987:                    partsUsed | 0x800l);
05988:          if(!(puzzle & 0x1809800000ll))
05989:            doSolve(24, 0x1000000ll, puzzle | 0x1809800000ll,
05990:                    partsUsed | 0x800l);
05991:          if(!(puzzle & 0x9801800000ll))
05992:            doSolve(24, 0x1000000ll, puzzle | 0x9801800000ll,
05993:                    partsUsed | 0x800l);
05994:          if(!(puzzle & 0x4805800000ll))
05995:            doSolve(24, 0x1000000ll, puzzle | 0x4805800000ll,
05996:                    partsUsed | 0x800l);
05997:       }
05998:       if (!(puzzle & 0x6000800000ll)) {
05999:          if(!(puzzle & 0x6c00800000ll))
06000:            doSolve(24, 0x1000000ll, puzzle | 0x6c00800000ll,
06001:                    partsUsed | 0x800l);
06002:          if(!(puzzle & 0x6804800000ll))
06003:            doSolve(24, 0x1000000ll, puzzle | 0x6804800000ll,
06004:                    partsUsed | 0x800l);
06005:          if(!(puzzle & 0x6006800000ll))
06006:            doSolve(24, 0x1000000ll, puzzle | 0x6006800000ll,
06007:                    partsUsed | 0x800l);
06008:       }
06009:       if (!(puzzle & 0x4004800000ll)) {
06010:          if(!(puzzle & 0x4c04800000ll))
06011:            doSolve(24, 0x1000000ll, puzzle | 0x4c04800000ll,
06012:                    partsUsed | 0x800l);
06013:          if(!(puzzle & 0x4806800000ll))
06014:            doSolve(24, 0x1000000ll, puzzle | 0x4806800000ll,
06015:                    partsUsed | 0x800l);
06016:          if(!(puzzle & 0xc00c800000ll))
06017:            doSolve(24, 0x1000000ll, puzzle | 0xc00c800000ll,
06018:                    partsUsed | 0x800l);
06019:          if(!(puzzle & 0x5804800000ll))
06020:            doSolve(24, 0x1000000ll, puzzle | 0x5804800000ll,
06021:                    partsUsed | 0x800l);
06022:          if(!(puzzle & 0x480c800000ll))
06023:            doSolve(24, 0x1000000ll, puzzle | 0x480c800000ll,
06024:                    partsUsed | 0x800l);
06025:          if(!(puzzle & 0x400d800000ll))
06026:            doSolve(24, 0x1000000ll, puzzle | 0x400d800000ll,
06027:                    partsUsed | 0x800l);
06028:          if(!(puzzle & 0xc804800000ll))
06029:            doSolve(24, 0x1000000ll, puzzle | 0xc804800000ll,
06030:                    partsUsed | 0x800l);
06031:       }
06032:       if (!(puzzle & 0x9800000ll)) {
06033:          if(!(puzzle & 0x9009800000ll))
06034:            doSolve(24, 0x1000000ll, puzzle | 0x9009800000ll,
06035:                    partsUsed | 0x800l);
06036:          if(!(puzzle & 0x800d800000ll))
06037:            doSolve(24, 0x1000000ll, puzzle | 0x800d800000ll,
06038:                    partsUsed | 0x800l);
06039:          if(!(puzzle & 0x100d800000ll))
06040:            doSolve(24, 0x1000000ll, puzzle | 0x100d800000ll,
06041:                    partsUsed | 0x800l);
06042:       }
06043:       if(!(puzzle & 0xd800800000ll))
06044:         doSolve(24, 0x1000000ll, puzzle | 0xd800800000ll,
06045:                    partsUsed | 0x800l);
06046:     piece12at23:
06047:     break;
06048:    case 24:
06049:       if (partsUsed & 0x2l) goto piece2at24;
06050:       if(!(puzzle & 0xc01801000000ll))
06051:         doSolve(25, 0x2000000ll, puzzle | 0xc01801000000ll,
06052:                    partsUsed | 0x2l);
06053:       if(!(puzzle & 0x241201000000ll))
06054:         doSolve(25, 0x2000000ll, puzzle | 0x241201000000ll,
06055:                    partsUsed | 0x2l);
06056:       if(!(puzzle & 0x201209000000ll))
06057:         doSolve(25, 0x2000000ll, puzzle | 0x201209000000ll,
06058:                    partsUsed | 0x2l);
06059:     piece2at24:
06060:       if (partsUsed & 0x4l) goto piece3at24;
06061:       if (!(puzzle & 0x1001001000000ll)) {
06062:          if(!(puzzle & 0x1001241000000ll))
06063:            doSolve(25, 0x2000000ll, puzzle | 0x1001241000000ll,
06064:                    partsUsed | 0x4l);
06065:          if(!(puzzle & 0x9201001000000ll))
06066:            doSolve(25, 0x2000000ll, puzzle | 0x9201001000000ll,
06067:                    partsUsed | 0x4l);
06068:          if(!(puzzle & 0x1001c01000000ll))
06069:            doSolve(25, 0x2000000ll, puzzle | 0x1001c01000000ll,
06070:                    partsUsed | 0x4l);
06071:       }
06072:     piece3at24:
06073:       if (partsUsed & 0x8l) goto piece4at24;
06074:       if(!(puzzle & 0x401c01000000ll))
06075:         doSolve(25, 0x2000000ll, puzzle | 0x401c01000000ll,
06076:                    partsUsed | 0x8l);
06077:       if(!(puzzle & 0x41241000000ll))
06078:         doSolve(25, 0x2000000ll, puzzle | 0x41241000000ll,
06079:                    partsUsed | 0x8l);
06080:       if(!(puzzle & 0x1201009000000ll))
06081:         doSolve(25, 0x2000000ll, puzzle | 0x1201009000000ll,
06082:                    partsUsed | 0x8l);
06083:     piece4at24:
06084:       if (partsUsed & 0x10l) goto piece5at24;
06085:       if (!(puzzle & 0x1001001001000000ll)) {
06086:          if(!(puzzle & 0x1201001201000000ll))
06087:            doSolve(25, 0x2000000ll, puzzle | 0x1201001201000000ll,
06088:                    partsUsed | 0x10l);
06089:          if(!(puzzle & 0x1801001801000000ll))
06090:            doSolve(25, 0x2000000ll, puzzle | 0x1801001801000000ll,
06091:                    partsUsed | 0x10l);
06092:          if(!(puzzle & 0x9001009001000000ll))
06093:            doSolve(25, 0x2000000ll, puzzle | 0x9001009001000000ll,
06094:                    partsUsed | 0x10l);
06095:          if(!(puzzle & 0x1009001009000000ll))
06096:            doSolve(25, 0x2000000ll, puzzle | 0x1009001009000000ll,
06097:                    partsUsed | 0x10l);
06098:       }
06099:       if(!(puzzle & 0x8009008009000000ll))
06100:         doSolve(25, 0x2000000ll, puzzle | 0x8009008009000000ll,
06101:                    partsUsed | 0x10l);
06102:     piece5at24:
06103:       if (partsUsed & 0x20l) goto piece6at24;
06104:       if (!(puzzle & 0x1001001001000000ll)) {
06105:          if(!(puzzle & 0x1201001001000000ll))
06106:            doSolve(25, 0x2000000ll, puzzle | 0x1201001001000000ll,
06107:                    partsUsed | 0x20l);
06108:          if(!(puzzle & 0x1801001001000000ll))
06109:            doSolve(25, 0x2000000ll, puzzle | 0x1801001001000000ll,
06110:                    partsUsed | 0x20l);
06111:          if(!(puzzle & 0x1001001009000000ll))
06112:            doSolve(25, 0x2000000ll, puzzle | 0x1001001009000000ll,
06113:                    partsUsed | 0x20l);
06114:          if(!(puzzle & 0x9001001001000000ll))
06115:            doSolve(25, 0x2000000ll, puzzle | 0x9001001001000000ll,
06116:                    partsUsed | 0x20l);
06117:       }
06118:       if(!(puzzle & 0x8008008009000000ll))
06119:         doSolve(25, 0x2000000ll, puzzle | 0x8008008009000000ll,
06120:                    partsUsed | 0x20l);
06121:     piece6at24:
06122:       if (partsUsed & 0x40l) goto piece7at24;
06123:       if (!(puzzle & 0x1001001001000000ll)) {
06124:          if(!(puzzle & 0x1001201001000000ll))
06125:            doSolve(25, 0x2000000ll, puzzle | 0x1001201001000000ll,
06126:                    partsUsed | 0x40l);
06127:          if(!(puzzle & 0x1001001801000000ll))
06128:            doSolve(25, 0x2000000ll, puzzle | 0x1001001801000000ll,
06129:                    partsUsed | 0x40l);
06130:          if(!(puzzle & 0x1001801001000000ll))
06131:            doSolve(25, 0x2000000ll, puzzle | 0x1001801001000000ll,
06132:                    partsUsed | 0x40l);
06133:          if(!(puzzle & 0x1001009001000000ll))
06134:            doSolve(25, 0x2000000ll, puzzle | 0x1001009001000000ll,
06135:                    partsUsed | 0x40l);
06136:          if(!(puzzle & 0x1009001001000000ll))
06137:            doSolve(25, 0x2000000ll, puzzle | 0x1009001001000000ll,
06138:                    partsUsed | 0x40l);
06139:       }
06140:       if(!(puzzle & 0x9241000000ll))
06141:         doSolve(25, 0x2000000ll, puzzle | 0x9241000000ll,
06142:                    partsUsed | 0x40l);
06143:       if(!(puzzle & 0x1001001201000000ll))
06144:         doSolve(25, 0x2000000ll, puzzle | 0x1001001201000000ll,
06145:                    partsUsed | 0x40l);
06146:     piece7at24:
06147:       if (partsUsed & 0x80l) goto piece8at24;
06148:       if(!(puzzle & 0x9001009000000ll))
06149:         doSolve(25, 0x2000000ll, puzzle | 0x9001009000000ll,
06150:                    partsUsed | 0x80l);
06151:       if(!(puzzle & 0x9008009000000ll))
06152:         doSolve(25, 0x2000000ll, puzzle | 0x9008009000000ll,
06153:                    partsUsed | 0x80l);
06154:     piece8at24:
06155:       if (partsUsed & 0x100l) goto piece9at24;
06156:       if(!(puzzle & 0x1901000000ll))
06157:         doSolve(25, 0x2000000ll, puzzle | 0x1901000000ll,
06158:                    partsUsed | 0x100l);
06159:       if(!(puzzle & 0x1809000000ll))
06160:         doSolve(25, 0x2000000ll, puzzle | 0x1809000000ll,
06161:                    partsUsed | 0x100l);
06162:       if(!(puzzle & 0x400d000000ll))
06163:         doSolve(25, 0x2000000ll, puzzle | 0x400d000000ll,
06164:                    partsUsed | 0x100l);
06165:       if(!(puzzle & 0xd001000000ll))
06166:         doSolve(25, 0x2000000ll, puzzle | 0xd001000000ll,
06167:                    partsUsed | 0x100l);
06168:     piece9at24:
06169:       if (partsUsed & 0x200l) goto piece10at24;
06170:       if (!(puzzle & 0x1201000000ll)) {
06171:          if(!(puzzle & 0x201241000000ll))
06172:            doSolve(25, 0x2000000ll, puzzle | 0x201241000000ll,
06173:                    partsUsed | 0x200l);
06174:          if(!(puzzle & 0x1001209000000ll))
06175:            doSolve(25, 0x2000000ll, puzzle | 0x1001209000000ll,
06176:                    partsUsed | 0x200l);
06177:          if(!(puzzle & 0x8009201000000ll))
06178:            doSolve(25, 0x2000000ll, puzzle | 0x8009201000000ll,
06179:                    partsUsed | 0x200l);
06180:          if(!(puzzle & 0x9001201000000ll))
06181:            doSolve(25, 0x2000000ll, puzzle | 0x9001201000000ll,
06182:                    partsUsed | 0x200l);
06183:          if(!(puzzle & 0x209201000000ll))
06184:            doSolve(25, 0x2000000ll, puzzle | 0x209201000000ll,
06185:                    partsUsed | 0x200l);
06186:       }
06187:       if(!(puzzle & 0x1209001000000ll))
06188:         doSolve(25, 0x2000000ll, puzzle | 0x1209001000000ll,
06189:                    partsUsed | 0x200l);
06190:       if(!(puzzle & 0x801c01000000ll))
06191:         doSolve(25, 0x2000000ll, puzzle | 0x801c01000000ll,
06192:                    partsUsed | 0x200l);
06193:     piece10at24:
06194:       if (partsUsed & 0x400l) goto piece11at24;
06195:       if (!(puzzle & 0x1001001000000ll)) {
06196:          if(!(puzzle & 0x1801801000000ll))
06197:            doSolve(25, 0x2000000ll, puzzle | 0x1801801000000ll,
06198:                    partsUsed | 0x400l);
06199:          if(!(puzzle & 0x1009009000000ll))
06200:            doSolve(25, 0x2000000ll, puzzle | 0x1009009000000ll,
06201:                    partsUsed | 0x400l);
06202:          if(!(puzzle & 0x9009001000000ll))
06203:            doSolve(25, 0x2000000ll, puzzle | 0x9009001000000ll,
06204:                    partsUsed | 0x400l);
06205:       }
06206:       if(!(puzzle & 0x1201201000000ll))
06207:         doSolve(25, 0x2000000ll, puzzle | 0x1201201000000ll,
06208:                    partsUsed | 0x400l);
06209:       if(!(puzzle & 0x9209000000ll))
06210:         doSolve(25, 0x2000000ll, puzzle | 0x9209000000ll,
06211:                    partsUsed | 0x400l);
06212:       if(!(puzzle & 0x8009009000000ll))
06213:         doSolve(25, 0x2000000ll, puzzle | 0x8009009000000ll,
06214:                    partsUsed | 0x400l);
06215:     piece11at24:
06216:       if (partsUsed & 0x800l) goto piece12at24;
06217:       if (!(puzzle & 0x1801000000ll)) {
06218:          if(!(puzzle & 0x1b01000000ll))
06219:            doSolve(25, 0x2000000ll, puzzle | 0x1b01000000ll,
06220:                    partsUsed | 0x800l);
06221:          if(!(puzzle & 0xd801000000ll))
06222:            doSolve(25, 0x2000000ll, puzzle | 0xd801000000ll,
06223:                    partsUsed | 0x800l);
06224:          if(!(puzzle & 0x9809000000ll))
06225:            doSolve(25, 0x2000000ll, puzzle | 0x9809000000ll,
06226:                    partsUsed | 0x800l);
06227:       }
06228:       if (!(puzzle & 0x8009000000ll)) {
06229:          if(!(puzzle & 0xd009000000ll))
06230:            doSolve(25, 0x2000000ll, puzzle | 0xd009000000ll,
06231:                    partsUsed | 0x800l);
06232:          if(!(puzzle & 0xc00d000000ll))
06233:            doSolve(25, 0x2000000ll, puzzle | 0xc00d000000ll,
06234:                    partsUsed | 0x800l);
06235:          if(!(puzzle & 0x900d000000ll))
06236:            doSolve(25, 0x2000000ll, puzzle | 0x900d000000ll,
06237:                    partsUsed | 0x800l);
06238:       }
06239:     piece12at24:
06240:     break;
06241:    case 25:
06242:       if (partsUsed & 0x2l) goto piece2at25;
06243:       if(!(puzzle & 0x482402000000ll))
06244:         doSolve(26, 0x4000000ll, puzzle | 0x482402000000ll,
06245:                    partsUsed | 0x2l);
06246:       if(!(puzzle & 0x800c006000000ll))
06247:         doSolve(26, 0x4000000ll, puzzle | 0x800c006000000ll,
06248:                    partsUsed | 0x2l);
06249:       if(!(puzzle & 0xc006002000000ll))
06250:         doSolve(26, 0x4000000ll, puzzle | 0xc006002000000ll,
06251:                    partsUsed | 0x2l);
06252:     piece2at25:
06253:       if (partsUsed & 0x4l) goto piece3at25;
06254:       if(!(puzzle & 0x400400e000000ll))
06255:         doSolve(26, 0x4000000ll, puzzle | 0x400400e000000ll,
06256:                    partsUsed | 0x4l);
06257:       if(!(puzzle & 0x2002482000000ll))
06258:         doSolve(26, 0x4000000ll, puzzle | 0x2002482000000ll,
06259:                    partsUsed | 0x4l);
06260:       if(!(puzzle & 0x200e002000000ll))
06261:         doSolve(26, 0x4000000ll, puzzle | 0x200e002000000ll,
06262:                    partsUsed | 0x4l);
06263:     piece3at25:
06264:       if (partsUsed & 0x8l) goto piece4at25;
06265:       if(!(puzzle & 0x82482000000ll))
06266:         doSolve(26, 0x4000000ll, puzzle | 0x82482000000ll,
06267:                    partsUsed | 0x8l);
06268:       if(!(puzzle & 0x800e002000000ll))
06269:         doSolve(26, 0x4000000ll, puzzle | 0x800e002000000ll,
06270:                    partsUsed | 0x8l);
06271:       if(!(puzzle & 0xc004006000000ll))
06272:         doSolve(26, 0x4000000ll, puzzle | 0xc004006000000ll,
06273:                    partsUsed | 0x8l);
06274:     piece4at25:
06275:       if (partsUsed & 0x10l) goto piece5at25;
06276:       if (!(puzzle & 0x2002002002000000ll)) {
06277:          if(!(puzzle & 0x2402002402000000ll))
06278:            doSolve(26, 0x4000000ll, puzzle | 0x2402002402000000ll,
06279:                    partsUsed | 0x10l);
06280:          if(!(puzzle & 0x6002006002000000ll))
06281:            doSolve(26, 0x4000000ll, puzzle | 0x6002006002000000ll,
06282:                    partsUsed | 0x10l);
06283:          if(!(puzzle & 0x2006002006000000ll))
06284:            doSolve(26, 0x4000000ll, puzzle | 0x2006002006000000ll,
06285:                    partsUsed | 0x10l);
06286:       }
06287:       if(!(puzzle & 0x4006004006000000ll))
06288:         doSolve(26, 0x4000000ll, puzzle | 0x4006004006000000ll,
06289:                    partsUsed | 0x10l);
06290:     piece5at25:
06291:       if (partsUsed & 0x20l) goto piece6at25;
06292:       if (!(puzzle & 0x2002002002000000ll)) {
06293:          if(!(puzzle & 0x2402002002000000ll))
06294:            doSolve(26, 0x4000000ll, puzzle | 0x2402002002000000ll,
06295:                    partsUsed | 0x20l);
06296:          if(!(puzzle & 0x2002002006000000ll))
06297:            doSolve(26, 0x4000000ll, puzzle | 0x2002002006000000ll,
06298:                    partsUsed | 0x20l);
06299:          if(!(puzzle & 0x6002002002000000ll))
06300:            doSolve(26, 0x4000000ll, puzzle | 0x6002002002000000ll,
06301:                    partsUsed | 0x20l);
06302:       }
06303:       if(!(puzzle & 0x2492000000ll))
06304:         doSolve(26, 0x4000000ll, puzzle | 0x2492000000ll,
06305:                    partsUsed | 0x20l);
06306:       if(!(puzzle & 0x4004004006000000ll))
06307:         doSolve(26, 0x4000000ll, puzzle | 0x4004004006000000ll,
06308:                    partsUsed | 0x20l);
06309:     piece6at25:
06310:       if (partsUsed & 0x40l) goto piece7at25;
06311:       if (!(puzzle & 0x2002002002000000ll)) {
06312:          if(!(puzzle & 0x2002402002000000ll))
06313:            doSolve(26, 0x4000000ll, puzzle | 0x2002402002000000ll,
06314:                    partsUsed | 0x40l);
06315:          if(!(puzzle & 0x2002002402000000ll))
06316:            doSolve(26, 0x4000000ll, puzzle | 0x2002002402000000ll,
06317:                    partsUsed | 0x40l);
06318:          if(!(puzzle & 0x2002006002000000ll))
06319:            doSolve(26, 0x4000000ll, puzzle | 0x2002006002000000ll,
06320:                    partsUsed | 0x40l);
06321:          if(!(puzzle & 0x2006002002000000ll))
06322:            doSolve(26, 0x4000000ll, puzzle | 0x2006002002000000ll,
06323:                    partsUsed | 0x40l);
06324:       }
06325:     piece7at25:
06326:       if (partsUsed & 0x80l) goto piece8at25;
06327:       if(!(puzzle & 0x6004006000000ll))
06328:         doSolve(26, 0x4000000ll, puzzle | 0x6004006000000ll,
06329:                    partsUsed | 0x80l);
06330:       if(!(puzzle & 0x6002006000000ll))
06331:         doSolve(26, 0x4000000ll, puzzle | 0x6002006000000ll,
06332:                    partsUsed | 0x80l);
06333:       if(!(puzzle & 0xe00a000000ll))
06334:         doSolve(26, 0x4000000ll, puzzle | 0xe00a000000ll,
06335:                    partsUsed | 0x80l);
06336:       if(!(puzzle & 0xa00e000000ll))
06337:         doSolve(26, 0x4000000ll, puzzle | 0xa00e000000ll,
06338:                    partsUsed | 0x80l);
06339:     piece8at25:
06340:       if (partsUsed & 0x100l) goto piece9at25;
06341:       if(!(puzzle & 0x4806000000ll))
06342:         doSolve(26, 0x4000000ll, puzzle | 0x4806000000ll,
06343:                    partsUsed | 0x100l);
06344:       if(!(puzzle & 0x2c02000000ll))
06345:         doSolve(26, 0x4000000ll, puzzle | 0x2c02000000ll,
06346:                    partsUsed | 0x100l);
06347:     piece9at25:
06348:       if (partsUsed & 0x200l) goto piece10at25;
06349:       if(!(puzzle & 0x402482000000ll))
06350:         doSolve(26, 0x4000000ll, puzzle | 0x402482000000ll,
06351:                    partsUsed | 0x200l);
06352:       if(!(puzzle & 0x400c006000000ll))
06353:         doSolve(26, 0x4000000ll, puzzle | 0x400c006000000ll,
06354:                    partsUsed | 0x200l);
06355:       if(!(puzzle & 0x400e002000000ll))
06356:         doSolve(26, 0x4000000ll, puzzle | 0x400e002000000ll,
06357:                    partsUsed | 0x200l);
06358:     piece10at25:
06359:       if (partsUsed & 0x400l) goto piece11at25;
06360:       if (!(puzzle & 0x2002002000000ll)) {
06361:          if(!(puzzle & 0x2402402000000ll))
06362:            doSolve(26, 0x4000000ll, puzzle | 0x2402402000000ll,
06363:                    partsUsed | 0x400l);
06364:          if(!(puzzle & 0x2006006000000ll))
06365:            doSolve(26, 0x4000000ll, puzzle | 0x2006006000000ll,
06366:                    partsUsed | 0x400l);
06367:          if(!(puzzle & 0x6006002000000ll))
06368:            doSolve(26, 0x4000000ll, puzzle | 0x6006002000000ll,
06369:                    partsUsed | 0x400l);
06370:       }
06371:       if (!(puzzle & 0x4006000000ll)) {
06372:          if(!(puzzle & 0x4006006000000ll))
06373:            doSolve(26, 0x4000000ll, puzzle | 0x4006006000000ll,
06374:                    partsUsed | 0x400l);
06375:          if(!(puzzle & 0xe006000000ll))
06376:            doSolve(26, 0x4000000ll, puzzle | 0xe006000000ll,
06377:                    partsUsed | 0x400l);
06378:          if(!(puzzle & 0x600e000000ll))
06379:            doSolve(26, 0x4000000ll, puzzle | 0x600e000000ll,
06380:                    partsUsed | 0x400l);
06381:          if(!(puzzle & 0xc00e000000ll))
06382:            doSolve(26, 0x4000000ll, puzzle | 0xc00e000000ll,
06383:                    partsUsed | 0x400l);
06384:       }
06385:     piece11at25:
06386:       if (partsUsed & 0x800l) goto piece12at25;
06387:       if (!(puzzle & 0x6002000000ll)) {
06388:          if(!(puzzle & 0x6c02000000ll))
06389:            doSolve(26, 0x4000000ll, puzzle | 0x6c02000000ll,
06390:                    partsUsed | 0x800l);
06391:          if(!(puzzle & 0x6806000000ll))
06392:            doSolve(26, 0x4000000ll, puzzle | 0x6806000000ll,
06393:                    partsUsed | 0x800l);
06394:          if(!(puzzle & 0x6406000000ll))
06395:            doSolve(26, 0x4000000ll, puzzle | 0x6406000000ll,
06396:                    partsUsed | 0x800l);
06397:       }
06398:     piece12at25:
06399:     break;
06400:    case 26:
06401:       if (partsUsed & 0x2l) goto piece2at26;
06402:       if(!(puzzle & 0x904804000000ll))
06403:         doSolve(27, 0x8000000ll, puzzle | 0x904804000000ll,
06404:                    partsUsed | 0x2l);
06405:       if(!(puzzle & 0x200600c000000ll))
06406:         doSolve(27, 0x8000000ll, puzzle | 0x200600c000000ll,
06407:                    partsUsed | 0x2l);
06408:     piece2at26:
06409:       if (partsUsed & 0x4l) goto piece3at26;
06410:       if(!(puzzle & 0x4004904000000ll))
06411:         doSolve(27, 0x8000000ll, puzzle | 0x4004904000000ll,
06412:                    partsUsed | 0x4l);
06413:       if(!(puzzle & 0xe004004000000ll))
06414:         doSolve(27, 0x8000000ll, puzzle | 0xe004004000000ll,
06415:                    partsUsed | 0x4l);
06416:     piece3at26:
06417:       if (partsUsed & 0x8l) goto piece4at26;
06418:       if(!(puzzle & 0x104904000000ll))
06419:         doSolve(27, 0x8000000ll, puzzle | 0x104904000000ll,
06420:                    partsUsed | 0x8l);
06421:       if(!(puzzle & 0x600400c000000ll))
06422:         doSolve(27, 0x8000000ll, puzzle | 0x600400c000000ll,
06423:                    partsUsed | 0x8l);
06424:     piece4at26:
06425:       if (partsUsed & 0x10l) goto piece5at26;
06426:       if (!(puzzle & 0x4004004004000000ll)) {
06427:          if(!(puzzle & 0x4804004804000000ll))
06428:            doSolve(27, 0x8000000ll, puzzle | 0x4804004804000000ll,
06429:                    partsUsed | 0x10l);
06430:          if(!(puzzle & 0x6004006004000000ll))
06431:            doSolve(27, 0x8000000ll, puzzle | 0x6004006004000000ll,
06432:                    partsUsed | 0x10l);
06433:          if(!(puzzle & 0xc00400c004000000ll))
06434:            doSolve(27, 0x8000000ll, puzzle | 0xc00400c004000000ll,
06435:                    partsUsed | 0x10l);
06436:          if(!(puzzle & 0x400c00400c000000ll))
06437:            doSolve(27, 0x8000000ll, puzzle | 0x400c00400c000000ll,
06438:                    partsUsed | 0x10l);
06439:       }
06440:       if(!(puzzle & 0x800c00800c000000ll))
06441:         doSolve(27, 0x8000000ll, puzzle | 0x800c00800c000000ll,
06442:                    partsUsed | 0x10l);
06443:     piece5at26:
06444:       if (partsUsed & 0x20l) goto piece6at26;
06445:       if (!(puzzle & 0x4004004004000000ll)) {
06446:          if(!(puzzle & 0x4804004004000000ll))
06447:            doSolve(27, 0x8000000ll, puzzle | 0x4804004004000000ll,
06448:                    partsUsed | 0x20l);
06449:          if(!(puzzle & 0x6004004004000000ll))
06450:            doSolve(27, 0x8000000ll, puzzle | 0x6004004004000000ll,
06451:                    partsUsed | 0x20l);
06452:          if(!(puzzle & 0x400400400c000000ll))
06453:            doSolve(27, 0x8000000ll, puzzle | 0x400400400c000000ll,
06454:                    partsUsed | 0x20l);
06455:          if(!(puzzle & 0xc004004004000000ll))
06456:            doSolve(27, 0x8000000ll, puzzle | 0xc004004004000000ll,
06457:                    partsUsed | 0x20l);
06458:       }
06459:       if(!(puzzle & 0x4924000000ll))
06460:         doSolve(27, 0x8000000ll, puzzle | 0x4924000000ll,
06461:                    partsUsed | 0x20l);
06462:       if(!(puzzle & 0x800800800c000000ll))
06463:         doSolve(27, 0x8000000ll, puzzle | 0x800800800c000000ll,
06464:                    partsUsed | 0x20l);
06465:     piece6at26:
06466:       if (partsUsed & 0x40l) goto piece7at26;
06467:       if (!(puzzle & 0x4004004004000000ll)) {
06468:          if(!(puzzle & 0x4004804004000000ll))
06469:            doSolve(27, 0x8000000ll, puzzle | 0x4004804004000000ll,
06470:                    partsUsed | 0x40l);
06471:          if(!(puzzle & 0x4004004804000000ll))
06472:            doSolve(27, 0x8000000ll, puzzle | 0x4004004804000000ll,
06473:                    partsUsed | 0x40l);
06474:          if(!(puzzle & 0x4004006004000000ll))
06475:            doSolve(27, 0x8000000ll, puzzle | 0x4004006004000000ll,
06476:                    partsUsed | 0x40l);
06477:          if(!(puzzle & 0x4006004004000000ll))
06478:            doSolve(27, 0x8000000ll, puzzle | 0x4006004004000000ll,
06479:                    partsUsed | 0x40l);
06480:          if(!(puzzle & 0x400400c004000000ll))
06481:            doSolve(27, 0x8000000ll, puzzle | 0x400400c004000000ll,
06482:                    partsUsed | 0x40l);
06483:          if(!(puzzle & 0x400c004004000000ll))
06484:            doSolve(27, 0x8000000ll, puzzle | 0x400c004004000000ll,
06485:                    partsUsed | 0x40l);
06486:       }
06487:     piece7at26:
06488:       if (partsUsed & 0x80l) goto piece8at26;
06489:       if(!(puzzle & 0xc00800c000000ll))
06490:         doSolve(27, 0x8000000ll, puzzle | 0xc00800c000000ll,
06491:                    partsUsed | 0x80l);
06492:       if(!(puzzle & 0xc00400c000000ll))
06493:         doSolve(27, 0x8000000ll, puzzle | 0xc00400c000000ll,
06494:                    partsUsed | 0x80l);
06495:     piece8at26:
06496:       if (partsUsed & 0x100l) goto piece9at26;
06497:       if(!(puzzle & 0x5804000000ll))
06498:         doSolve(27, 0x8000000ll, puzzle | 0x5804000000ll,
06499:                    partsUsed | 0x100l);
06500:       if(!(puzzle & 0x6404000000ll))
06501:         doSolve(27, 0x8000000ll, puzzle | 0x6404000000ll,
06502:                    partsUsed | 0x100l);
06503:       if(!(puzzle & 0x900c000000ll))
06504:         doSolve(27, 0x8000000ll, puzzle | 0x900c000000ll,
06505:                    partsUsed | 0x100l);
06506:     piece9at26:
06507:       if (partsUsed & 0x200l) goto piece10at26;
06508:       if (!(puzzle & 0x4004004000000ll)) {
06509:          if(!(puzzle & 0x400600c000000ll))
06510:            doSolve(27, 0x8000000ll, puzzle | 0x400600c000000ll,
06511:                    partsUsed | 0x200l);
06512:          if(!(puzzle & 0xc006004000000ll))
06513:            doSolve(27, 0x8000000ll, puzzle | 0xc006004000000ll,
06514:                    partsUsed | 0x200l);
06515:          if(!(puzzle & 0x600c004000000ll))
06516:            doSolve(27, 0x8000000ll, puzzle | 0x600c004000000ll,
06517:                    partsUsed | 0x200l);
06518:       }
06519:       if(!(puzzle & 0x804904000000ll))
06520:         doSolve(27, 0x8000000ll, puzzle | 0x804904000000ll,
06521:                    partsUsed | 0x200l);
06522:       if(!(puzzle & 0x200e004000000ll))
06523:         doSolve(27, 0x8000000ll, puzzle | 0x200e004000000ll,
06524:                    partsUsed | 0x200l);
06525:       if(!(puzzle & 0x800e004000000ll))
06526:         doSolve(27, 0x8000000ll, puzzle | 0x800e004000000ll,
06527:                    partsUsed | 0x200l);
06528:     piece10at26:
06529:       if (partsUsed & 0x400l) goto piece11at26;
06530:       if (!(puzzle & 0x4004004000000ll)) {
06531:          if(!(puzzle & 0x4804804000000ll))
06532:            doSolve(27, 0x8000000ll, puzzle | 0x4804804000000ll,
06533:                    partsUsed | 0x400l);
06534:          if(!(puzzle & 0x6006004000000ll))
06535:            doSolve(27, 0x8000000ll, puzzle | 0x6006004000000ll,
06536:                    partsUsed | 0x400l);
06537:          if(!(puzzle & 0x400c00c000000ll))
06538:            doSolve(27, 0x8000000ll, puzzle | 0x400c00c000000ll,
06539:                    partsUsed | 0x400l);
06540:          if(!(puzzle & 0xc00c004000000ll))
06541:            doSolve(27, 0x8000000ll, puzzle | 0xc00c004000000ll,
06542:                    partsUsed | 0x400l);
06543:       }
06544:       if(!(puzzle & 0xe00c000000ll))
06545:         doSolve(27, 0x8000000ll, puzzle | 0xe00c000000ll,
06546:                    partsUsed | 0x400l);
06547:       if(!(puzzle & 0x800c00c000000ll))
06548:         doSolve(27, 0x8000000ll, puzzle | 0x800c00c000000ll,
06549:                    partsUsed | 0x400l);
06550:     piece11at26:
06551:       if (partsUsed & 0x800l) goto piece12at26;
06552:       if (!(puzzle & 0x4804000000ll)) {
06553:          if(!(puzzle & 0x6c04000000ll))
06554:            doSolve(27, 0x8000000ll, puzzle | 0x6c04000000ll,
06555:                    partsUsed | 0x800l);
06556:          if(!(puzzle & 0xd804000000ll))
06557:            doSolve(27, 0x8000000ll, puzzle | 0xd804000000ll,
06558:                    partsUsed | 0x800l);
06559:          if(!(puzzle & 0xc80c000000ll))
06560:            doSolve(27, 0x8000000ll, puzzle | 0xc80c000000ll,
06561:                    partsUsed | 0x800l);
06562:       }
06563:       if(!(puzzle & 0xd00c000000ll))
06564:         doSolve(27, 0x8000000ll, puzzle | 0xd00c000000ll,
06565:                    partsUsed | 0x800l);
06566:     piece12at26:
06567:     break;
06568:    case 27:
06569:       if (partsUsed & 0x2l) goto piece2at27;
06570:       if(!(puzzle & 0x1209008000000ll))
06571:         doSolve(28, 0x10000000ll, puzzle | 0x1209008000000ll,
06572:                    partsUsed | 0x2l);
06573:       if(!(puzzle & 0x600c008000000ll))
06574:         doSolve(28, 0x10000000ll, puzzle | 0x600c008000000ll,
06575:                    partsUsed | 0x2l);
06576:     piece2at27:
06577:       if (partsUsed & 0x4l) goto piece3at27;
06578:       if(!(puzzle & 0x8009208000000ll))
06579:         doSolve(28, 0x10000000ll, puzzle | 0x8009208000000ll,
06580:                    partsUsed | 0x4l);
06581:       if(!(puzzle & 0x800e008000000ll))
06582:         doSolve(28, 0x10000000ll, puzzle | 0x800e008000000ll,
06583:                    partsUsed | 0x4l);
06584:     piece3at27:
06585:       if (partsUsed & 0x8l) goto piece4at27;
06586:       if(!(puzzle & 0x209208000000ll))
06587:         doSolve(28, 0x10000000ll, puzzle | 0x209208000000ll,
06588:                    partsUsed | 0x8l);
06589:       if(!(puzzle & 0x200e008000000ll))
06590:         doSolve(28, 0x10000000ll, puzzle | 0x200e008000000ll,
06591:                    partsUsed | 0x8l);
06592:     piece4at27:
06593:       if (partsUsed & 0x10l) goto piece5at27;
06594:       if(!(puzzle & 0x9008009008000000ll))
06595:         doSolve(28, 0x10000000ll, puzzle | 0x9008009008000000ll,
06596:                    partsUsed | 0x10l);
06597:       if(!(puzzle & 0xc00800c008000000ll))
06598:         doSolve(28, 0x10000000ll, puzzle | 0xc00800c008000000ll,
06599:                    partsUsed | 0x10l);
06600:     piece5at27:
06601:       if (partsUsed & 0x20l) goto piece6at27;
06602:       if(!(puzzle & 0x9248000000ll))
06603:         doSolve(28, 0x10000000ll, puzzle | 0x9248000000ll,
06604:                    partsUsed | 0x20l);
06605:       if(!(puzzle & 0x9008008008000000ll))
06606:         doSolve(28, 0x10000000ll, puzzle | 0x9008008008000000ll,
06607:                    partsUsed | 0x20l);
06608:       if(!(puzzle & 0xc008008008000000ll))
06609:         doSolve(28, 0x10000000ll, puzzle | 0xc008008008000000ll,
06610:                    partsUsed | 0x20l);
06611:     piece6at27:
06612:       if (partsUsed & 0x40l) goto piece7at27;
06613:       if (!(puzzle & 0x8008008008000000ll)) {
06614:          if(!(puzzle & 0x8009008008000000ll))
06615:            doSolve(28, 0x10000000ll, puzzle | 0x8009008008000000ll,
06616:                    partsUsed | 0x40l);
06617:          if(!(puzzle & 0x8008009008000000ll))
06618:            doSolve(28, 0x10000000ll, puzzle | 0x8008009008000000ll,
06619:                    partsUsed | 0x40l);
06620:          if(!(puzzle & 0x800800c008000000ll))
06621:            doSolve(28, 0x10000000ll, puzzle | 0x800800c008000000ll,
06622:                    partsUsed | 0x40l);
06623:          if(!(puzzle & 0x800c008008000000ll))
06624:            doSolve(28, 0x10000000ll, puzzle | 0x800c008008000000ll,
06625:                    partsUsed | 0x40l);
06626:       }
06627:     piece7at27:
06628:       if (partsUsed & 0x100l) goto piece9at27;
06629:       if(!(puzzle & 0xc808000000ll))
06630:         doSolve(28, 0x10000000ll, puzzle | 0xc808000000ll,
06631:                    partsUsed | 0x100l);
06632:     piece9at27:
06633:       if (partsUsed & 0x200l) goto piece10at27;
06634:       if(!(puzzle & 0x1009208000000ll))
06635:         doSolve(28, 0x10000000ll, puzzle | 0x1009208000000ll,
06636:                    partsUsed | 0x200l);
06637:       if(!(puzzle & 0x400e008000000ll))
06638:         doSolve(28, 0x10000000ll, puzzle | 0x400e008000000ll,
06639:                    partsUsed | 0x200l);
06640:     piece10at27:
06641:       if (partsUsed & 0x400l) goto piece11at27;
06642:       if(!(puzzle & 0x9009008000000ll))
06643:         doSolve(28, 0x10000000ll, puzzle | 0x9009008000000ll,
06644:                    partsUsed | 0x400l);
06645:       if(!(puzzle & 0xc00c008000000ll))
06646:         doSolve(28, 0x10000000ll, puzzle | 0xc00c008000000ll,
06647:                    partsUsed | 0x400l);
06648:     piece11at27:
06649:       if (partsUsed & 0x800l) goto piece12at27;
06650:       if(!(puzzle & 0xd808000000ll))
06651:         doSolve(28, 0x10000000ll, puzzle | 0xd808000000ll,
06652:                    partsUsed | 0x800l);
06653:     piece12at27:
06654:     break;
06655:    case 28:
06656:       if (partsUsed & 0x2l) goto piece2at28;
06657:       if(!(puzzle & 0x480090010000000ll))
06658:         doSolve(29, 0x20000000ll, puzzle | 0x480090010000000ll,
06659:                    partsUsed | 0x2l);
06660:       if(!(puzzle & 0x400480090000000ll))
06661:         doSolve(29, 0x20000000ll, puzzle | 0x400480090000000ll,
06662:                    partsUsed | 0x2l);
06663:       if(!(puzzle & 0x1330000000ll))
06664:         doSolve(29, 0x20000000ll, puzzle | 0x1330000000ll,
06665:                    partsUsed | 0x2l);
06666:       if(!(puzzle & 0x1990000000ll))
06667:         doSolve(29, 0x20000000ll, puzzle | 0x1990000000ll,
06668:                    partsUsed | 0x2l);
06669:       if(!(puzzle & 0x40060030000000ll))
06670:         doSolve(29, 0x20000000ll, puzzle | 0x40060030000000ll,
06671:                    partsUsed | 0x2l);
06672:       if(!(puzzle & 0x60030010000000ll))
06673:         doSolve(29, 0x20000000ll, puzzle | 0x60030010000000ll,
06674:                    partsUsed | 0x2l);
06675:     piece2at28:
06676:       if (partsUsed & 0x4l) goto piece3at28;
06677:       if(!(puzzle & 0x10490010000000ll))
06678:         doSolve(29, 0x20000000ll, puzzle | 0x10490010000000ll,
06679:                    partsUsed | 0x4l);
06680:       if(!(puzzle & 0x10070010000000ll))
06681:         doSolve(29, 0x20000000ll, puzzle | 0x10070010000000ll,
06682:                    partsUsed | 0x4l);
06683:       if(!(puzzle & 0x80080490000000ll))
06684:         doSolve(29, 0x20000000ll, puzzle | 0x80080490000000ll,
06685:                    partsUsed | 0x4l);
06686:       if(!(puzzle & 0x790000000ll))
06687:         doSolve(29, 0x20000000ll, puzzle | 0x790000000ll,
06688:                    partsUsed | 0x4l);
06689:       if(!(puzzle & 0x970000000ll))
06690:         doSolve(29, 0x20000000ll, puzzle | 0x970000000ll,
06691:                    partsUsed | 0x4l);
06692:       if(!(puzzle & 0x20020070000000ll))
06693:         doSolve(29, 0x20000000ll, puzzle | 0x20020070000000ll,
06694:                    partsUsed | 0x4l);
06695:     piece3at28:
06696:       if (partsUsed & 0x8l) goto piece4at28;
06697:       if(!(puzzle & 0x400490010000000ll))
06698:         doSolve(29, 0x20000000ll, puzzle | 0x400490010000000ll,
06699:                    partsUsed | 0x8l);
06700:       if(!(puzzle & 0x480080090000000ll))
06701:         doSolve(29, 0x20000000ll, puzzle | 0x480080090000000ll,
06702:                    partsUsed | 0x8l);
06703:       if(!(puzzle & 0x1930000000ll))
06704:         doSolve(29, 0x20000000ll, puzzle | 0x1930000000ll,
06705:                    partsUsed | 0x8l);
06706:       if(!(puzzle & 0x1390000000ll))
06707:         doSolve(29, 0x20000000ll, puzzle | 0x1390000000ll,
06708:                    partsUsed | 0x8l);
06709:       if(!(puzzle & 0x40070010000000ll))
06710:         doSolve(29, 0x20000000ll, puzzle | 0x40070010000000ll,
06711:                    partsUsed | 0x8l);
06712:       if(!(puzzle & 0x60020030000000ll))
06713:         doSolve(29, 0x20000000ll, puzzle | 0x60020030000000ll,
06714:                    partsUsed | 0x8l);
06715:     piece4at28:
06716:       if (partsUsed & 0x10l) goto piece5at28;
06717:       if (!(puzzle & 0x2490000000ll)) {
06718:          if(!(puzzle & 0x412490000000ll))
06719:            doSolve(29, 0x20000000ll, puzzle | 0x412490000000ll,
06720:                    partsUsed | 0x10l);
06721:          if(!(puzzle & 0x6590000000ll))
06722:            doSolve(29, 0x20000000ll, puzzle | 0x6590000000ll,
06723:                    partsUsed | 0x10l);
06724:          if(!(puzzle & 0x2082490000000ll))
06725:            doSolve(29, 0x20000000ll, puzzle | 0x2082490000000ll,
06726:                    partsUsed | 0x10l);
06727:          if(!(puzzle & 0x2cb0000000ll))
06728:            doSolve(29, 0x20000000ll, puzzle | 0x2cb0000000ll,
06729:                    partsUsed | 0x10l);
06730:       }
06731:       if(!(puzzle & 0x4d30000000ll))
06732:         doSolve(29, 0x20000000ll, puzzle | 0x4d30000000ll,
06733:                    partsUsed | 0x10l);
06734:       if(!(puzzle & 0x2490410000000ll))
06735:         doSolve(29, 0x20000000ll, puzzle | 0x2490410000000ll,
06736:                    partsUsed | 0x10l);
06737:     piece5at28:
06738:       if (partsUsed & 0x20l) goto piece6at28;
06739:       if (!(puzzle & 0x2490000000ll)) {
06740:          if(!(puzzle & 0x2002490000000ll))
06741:            doSolve(29, 0x20000000ll, puzzle | 0x2002490000000ll,
06742:                    partsUsed | 0x20l);
06743:          if(!(puzzle & 0x24b0000000ll))
06744:            doSolve(29, 0x20000000ll, puzzle | 0x24b0000000ll,
06745:                    partsUsed | 0x20l);
06746:          if(!(puzzle & 0x12490000000ll))
06747:            doSolve(29, 0x20000000ll, puzzle | 0x12490000000ll,
06748:                    partsUsed | 0x20l);
06749:          if(!(puzzle & 0x6490000000ll))
06750:            doSolve(29, 0x20000000ll, puzzle | 0x6490000000ll,
06751:                    partsUsed | 0x20l);
06752:       }
06753:       if(!(puzzle & 0x2490010000000ll))
06754:         doSolve(29, 0x20000000ll, puzzle | 0x2490010000000ll,
06755:                    partsUsed | 0x20l);
06756:       if(!(puzzle & 0x4930000000ll))
06757:         doSolve(29, 0x20000000ll, puzzle | 0x4930000000ll,
06758:                    partsUsed | 0x20l);
06759:     piece6at28:
06760:       if (partsUsed & 0x40l) goto piece7at28;
06761:       if (!(puzzle & 0x2490000000ll)) {
06762:          if(!(puzzle & 0x402490000000ll))
06763:            doSolve(29, 0x20000000ll, puzzle | 0x402490000000ll,
06764:                    partsUsed | 0x40l);
06765:          if(!(puzzle & 0x2590000000ll))
06766:            doSolve(29, 0x20000000ll, puzzle | 0x2590000000ll,
06767:                    partsUsed | 0x40l);
06768:          if(!(puzzle & 0x82490000000ll))
06769:            doSolve(29, 0x20000000ll, puzzle | 0x82490000000ll,
06770:                    partsUsed | 0x40l);
06771:          if(!(puzzle & 0x2c90000000ll))
06772:            doSolve(29, 0x20000000ll, puzzle | 0x2c90000000ll,
06773:                    partsUsed | 0x40l);
06774:       }
06775:     piece7at28:
06776:       if (partsUsed & 0x80l) goto piece8at28;
06777:       if(!(puzzle & 0x90010090000000ll))
06778:         doSolve(29, 0x20000000ll, puzzle | 0x90010090000000ll,
06779:                    partsUsed | 0x80l);
06780:       if(!(puzzle & 0x90080090000000ll))
06781:         doSolve(29, 0x20000000ll, puzzle | 0x90080090000000ll,
06782:                    partsUsed | 0x80l);
06783:       if(!(puzzle & 0x490410000000ll))
06784:         doSolve(29, 0x20000000ll, puzzle | 0x490410000000ll,
06785:                    partsUsed | 0x80l);
06786:       if(!(puzzle & 0x410490000000ll))
06787:         doSolve(29, 0x20000000ll, puzzle | 0x410490000000ll,
06788:                    partsUsed | 0x80l);
06789:       if(!(puzzle & 0x2f0000000ll))
06790:         doSolve(29, 0x20000000ll, puzzle | 0x2f0000000ll,
06791:                    partsUsed | 0x80l);
06792:       if(!(puzzle & 0xcb0000000ll))
06793:         doSolve(29, 0x20000000ll, puzzle | 0xcb0000000ll,
06794:                    partsUsed | 0x80l);
06795:       if(!(puzzle & 0xd30000000ll))
06796:         doSolve(29, 0x20000000ll, puzzle | 0xd30000000ll,
06797:                    partsUsed | 0x80l);
06798:       if(!(puzzle & 0x3d0000000ll))
06799:         doSolve(29, 0x20000000ll, puzzle | 0x3d0000000ll,
06800:                    partsUsed | 0x80l);
06801:       if(!(puzzle & 0x30020030000000ll))
06802:         doSolve(29, 0x20000000ll, puzzle | 0x30020030000000ll,
06803:                    partsUsed | 0x80l);
06804:       if(!(puzzle & 0x30010030000000ll))
06805:         doSolve(29, 0x20000000ll, puzzle | 0x30010030000000ll,
06806:                    partsUsed | 0x80l);
06807:       if(!(puzzle & 0x70050000000ll))
06808:         doSolve(29, 0x20000000ll, puzzle | 0x70050000000ll,
06809:                    partsUsed | 0x80l);
06810:       if(!(puzzle & 0x50070000000ll))
06811:         doSolve(29, 0x20000000ll, puzzle | 0x50070000000ll,
06812:                    partsUsed | 0x80l);
06813:     piece8at28:
06814:       if (partsUsed & 0x100l) goto piece9at28;
06815:       if(!(puzzle & 0x100130000000ll))
06816:         doSolve(29, 0x20000000ll, puzzle | 0x100130000000ll,
06817:                    partsUsed | 0x100l);
06818:       if(!(puzzle & 0x130010000000ll))
06819:         doSolve(29, 0x20000000ll, puzzle | 0x130010000000ll,
06820:                    partsUsed | 0x100l);
06821:       if(!(puzzle & 0x200b0000000ll))
06822:         doSolve(29, 0x20000000ll, puzzle | 0x200b0000000ll,
06823:                    partsUsed | 0x100l);
06824:       if(!(puzzle & 0x90030000000ll))
06825:         doSolve(29, 0x20000000ll, puzzle | 0x90030000000ll,
06826:                    partsUsed | 0x100l);
06827:       if(!(puzzle & 0x180090000000ll))
06828:         doSolve(29, 0x20000000ll, puzzle | 0x180090000000ll,
06829:                    partsUsed | 0x100l);
06830:       if(!(puzzle & 0x10190000000ll))
06831:         doSolve(29, 0x20000000ll, puzzle | 0x10190000000ll,
06832:                    partsUsed | 0x100l);
06833:     piece9at28:
06834:       if (partsUsed & 0x200l) goto piece10at28;
06835:       if(!(puzzle & 0x80490010000000ll))
06836:         doSolve(29, 0x20000000ll, puzzle | 0x80490010000000ll,
06837:                    partsUsed | 0x200l);
06838:       if(!(puzzle & 0x80480090000000ll))
06839:         doSolve(29, 0x20000000ll, puzzle | 0x80480090000000ll,
06840:                    partsUsed | 0x200l);
06841:       if(!(puzzle & 0xb30000000ll))
06842:         doSolve(29, 0x20000000ll, puzzle | 0xb30000000ll,
06843:                    partsUsed | 0x200l);
06844:       if(!(puzzle & 0xb90000000ll))
06845:         doSolve(29, 0x20000000ll, puzzle | 0xb90000000ll,
06846:                    partsUsed | 0x200l);
06847:       if(!(puzzle & 0x20060030000000ll))
06848:         doSolve(29, 0x20000000ll, puzzle | 0x20060030000000ll,
06849:                    partsUsed | 0x200l);
06850:       if(!(puzzle & 0x20070010000000ll))
06851:         doSolve(29, 0x20000000ll, puzzle | 0x20070010000000ll,
06852:                    partsUsed | 0x200l);
06853:     piece10at28:
06854:       if (partsUsed & 0x400l) goto piece11at28;
06855:       if (!(puzzle & 0x80090000000ll)) {
06856:          if(!(puzzle & 0x10090090000000ll))
06857:            doSolve(29, 0x20000000ll, puzzle | 0x10090090000000ll,
06858:                    partsUsed | 0x400l);
06859:          if(!(puzzle & 0x490090000000ll))
06860:            doSolve(29, 0x20000000ll, puzzle | 0x490090000000ll,
06861:                    partsUsed | 0x400l);
06862:          if(!(puzzle & 0x480490000000ll))
06863:            doSolve(29, 0x20000000ll, puzzle | 0x480490000000ll,
06864:                    partsUsed | 0x400l);
06865:          if(!(puzzle & 0x90490000000ll))
06866:            doSolve(29, 0x20000000ll, puzzle | 0x90490000000ll,
06867:                    partsUsed | 0x400l);
06868:          if(!(puzzle & 0x80090090000000ll))
06869:            doSolve(29, 0x20000000ll, puzzle | 0x80090090000000ll,
06870:                    partsUsed | 0x400l);
06871:       }
06872:       if (!(puzzle & 0x130000000ll)) {
06873:          if(!(puzzle & 0x370000000ll))
06874:            doSolve(29, 0x20000000ll, puzzle | 0x370000000ll,
06875:                    partsUsed | 0x400l);
06876:          if(!(puzzle & 0x1f0000000ll))
06877:            doSolve(29, 0x20000000ll, puzzle | 0x1f0000000ll,
06878:                    partsUsed | 0x400l);
06879:          if(!(puzzle & 0x5b0000000ll))
06880:            doSolve(29, 0x20000000ll, puzzle | 0x5b0000000ll,
06881:                    partsUsed | 0x400l);
06882:          if(!(puzzle & 0x9b0000000ll))
06883:            doSolve(29, 0x20000000ll, puzzle | 0x9b0000000ll,
06884:                    partsUsed | 0x400l);
06885:          if(!(puzzle & 0x3b0000000ll))
06886:            doSolve(29, 0x20000000ll, puzzle | 0x3b0000000ll,
06887:                    partsUsed | 0x400l);
06888:       }
06889:       if (!(puzzle & 0x10010010000000ll)) {
06890:          if(!(puzzle & 0x90090010000000ll))
06891:            doSolve(29, 0x20000000ll, puzzle | 0x90090010000000ll,
06892:                    partsUsed | 0x400l);
06893:          if(!(puzzle & 0x10030030000000ll))
06894:            doSolve(29, 0x20000000ll, puzzle | 0x10030030000000ll,
06895:                    partsUsed | 0x400l);
06896:          if(!(puzzle & 0x30030010000000ll))
06897:            doSolve(29, 0x20000000ll, puzzle | 0x30030010000000ll,
06898:                    partsUsed | 0x400l);
06899:       }
06900:       if (!(puzzle & 0x20030000000ll)) {
06901:          if(!(puzzle & 0x20030030000000ll))
06902:            doSolve(29, 0x20000000ll, puzzle | 0x20030030000000ll,
06903:                    partsUsed | 0x400l);
06904:          if(!(puzzle & 0x70030000000ll))
06905:            doSolve(29, 0x20000000ll, puzzle | 0x70030000000ll,
06906:                    partsUsed | 0x400l);
06907:          if(!(puzzle & 0x30070000000ll))
06908:            doSolve(29, 0x20000000ll, puzzle | 0x30070000000ll,
06909:                    partsUsed | 0x400l);
06910:          if(!(puzzle & 0x60070000000ll))
06911:            doSolve(29, 0x20000000ll, puzzle | 0x60070000000ll,
06912:                    partsUsed | 0x400l);
06913:       }
06914:       if(!(puzzle & 0xd90000000ll))
06915:         doSolve(29, 0x20000000ll, puzzle | 0xd90000000ll,
06916:                    partsUsed | 0x400l);
06917:     piece11at28:
06918:       if (partsUsed & 0x800l) goto piece12at28;
06919:       if (!(puzzle & 0x10030000000ll)) {
06920:          if(!(puzzle & 0x101b0000000ll))
06921:            doSolve(29, 0x20000000ll, puzzle | 0x101b0000000ll,
06922:                    partsUsed | 0x800l);
06923:          if(!(puzzle & 0xb0030000000ll))
06924:            doSolve(29, 0x20000000ll, puzzle | 0xb0030000000ll,
06925:                    partsUsed | 0x800l);
06926:          if(!(puzzle & 0x300b0000000ll))
06927:            doSolve(29, 0x20000000ll, puzzle | 0x300b0000000ll,
06928:                    partsUsed | 0x800l);
06929:          if(!(puzzle & 0x30130000000ll))
06930:            doSolve(29, 0x20000000ll, puzzle | 0x30130000000ll,
06931:                    partsUsed | 0x800l);
06932:          if(!(puzzle & 0x130030000000ll))
06933:            doSolve(29, 0x20000000ll, puzzle | 0x130030000000ll,
06934:                    partsUsed | 0x800l);
06935:          if(!(puzzle & 0x900b0000000ll))
06936:            doSolve(29, 0x20000000ll, puzzle | 0x900b0000000ll,
06937:                    partsUsed | 0x800l);
06938:       }
06939:       if (!(puzzle & 0x100110000000ll)) {
06940:          if(!(puzzle & 0x180190000000ll))
06941:            doSolve(29, 0x20000000ll, puzzle | 0x180190000000ll,
06942:                    partsUsed | 0x800l);
06943:          if(!(puzzle & 0x120130000000ll))
06944:            doSolve(29, 0x20000000ll, puzzle | 0x120130000000ll,
06945:                    partsUsed | 0x800l);
06946:          if(!(puzzle & 0x1001b0000000ll))
06947:            doSolve(29, 0x20000000ll, puzzle | 0x1001b0000000ll,
06948:                    partsUsed | 0x800l);
06949:       }
06950:       if (!(puzzle & 0x80090000000ll)) {
06951:          if(!(puzzle & 0xb0090000000ll))
06952:            doSolve(29, 0x20000000ll, puzzle | 0xb0090000000ll,
06953:                    partsUsed | 0x800l);
06954:          if(!(puzzle & 0x90190000000ll))
06955:            doSolve(29, 0x20000000ll, puzzle | 0x90190000000ll,
06956:                    partsUsed | 0x800l);
06957:          if(!(puzzle & 0x801b0000000ll))
06958:            doSolve(29, 0x20000000ll, puzzle | 0x801b0000000ll,
06959:                    partsUsed | 0x800l);
06960:          if(!(puzzle & 0x190090000000ll))
06961:            doSolve(29, 0x20000000ll, puzzle | 0x190090000000ll,
06962:                    partsUsed | 0x800l);
06963:       }
06964:       if(!(puzzle & 0x201b0000000ll))
06965:         doSolve(29, 0x20000000ll, puzzle | 0x201b0000000ll,
06966:                    partsUsed | 0x800l);
06967:       if(!(puzzle & 0x1b0010000000ll))
06968:         doSolve(29, 0x20000000ll, puzzle | 0x1b0010000000ll,
06969:                    partsUsed | 0x800l);
06970:     piece12at28:
06971:     break;
06972:    case 29:
06973:       if (partsUsed & 0x2l) goto piece2at29;
06974:       if(!(puzzle & 0x5e0000000ll))
06975:         doSolve(30, 0x40000000ll, puzzle | 0x5e0000000ll,
06976:                    partsUsed | 0x2l);
06977:       if(!(puzzle & 0x10030060000000ll))
06978:         doSolve(30, 0x40000000ll, puzzle | 0x10030060000000ll,
06979:                    partsUsed | 0x2l);
06980:       if(!(puzzle & 0x900120020000000ll))
06981:         doSolve(30, 0x40000000ll, puzzle | 0x900120020000000ll,
06982:                    partsUsed | 0x2l);
06983:       if(!(puzzle & 0x800900120000000ll))
06984:         doSolve(30, 0x40000000ll, puzzle | 0x800900120000000ll,
06985:                    partsUsed | 0x2l);
06986:     piece2at29:
06987:       if (partsUsed & 0x4l) goto piece3at29;
06988:       if(!(puzzle & 0x1d20000000ll))
06989:         doSolve(30, 0x40000000ll, puzzle | 0x1d20000000ll,
06990:                    partsUsed | 0x4l);
06991:       if(!(puzzle & 0x100100920000000ll))
06992:         doSolve(30, 0x40000000ll, puzzle | 0x100100920000000ll,
06993:                    partsUsed | 0x4l);
06994:       if(!(puzzle & 0x70020020000000ll))
06995:         doSolve(30, 0x40000000ll, puzzle | 0x70020020000000ll,
06996:                    partsUsed | 0x4l);
06997:       if(!(puzzle & 0x20920020000000ll))
06998:         doSolve(30, 0x40000000ll, puzzle | 0x20920020000000ll,
06999:                    partsUsed | 0x4l);
07000:     piece3at29:
07001:       if (partsUsed & 0x8l) goto piece4at29;
07002:       if(!(puzzle & 0xd60000000ll))
07003:         doSolve(30, 0x40000000ll, puzzle | 0xd60000000ll,
07004:                    partsUsed | 0x8l);
07005:       if(!(puzzle & 0x30020060000000ll))
07006:         doSolve(30, 0x40000000ll, puzzle | 0x30020060000000ll,
07007:                    partsUsed | 0x8l);
07008:       if(!(puzzle & 0x800920020000000ll))
07009:         doSolve(30, 0x40000000ll, puzzle | 0x800920020000000ll,
07010:                    partsUsed | 0x8l);
07011:       if(!(puzzle & 0x900100120000000ll))
07012:         doSolve(30, 0x40000000ll, puzzle | 0x900100120000000ll,
07013:                    partsUsed | 0x8l);
07014:     piece4at29:
07015:       if (partsUsed & 0x10l) goto piece5at29;
07016:       if (!(puzzle & 0x4920000000ll)) {
07017:          if(!(puzzle & 0x69a0000000ll))
07018:            doSolve(30, 0x40000000ll, puzzle | 0x69a0000000ll,
07019:                    partsUsed | 0x10l);
07020:          if(!(puzzle & 0x824920000000ll))
07021:            doSolve(30, 0x40000000ll, puzzle | 0x824920000000ll,
07022:                    partsUsed | 0x10l);
07023:          if(!(puzzle & 0xcb20000000ll))
07024:            doSolve(30, 0x40000000ll, puzzle | 0xcb20000000ll,
07025:                    partsUsed | 0x10l);
07026:          if(!(puzzle & 0x4104920000000ll))
07027:            doSolve(30, 0x40000000ll, puzzle | 0x4104920000000ll,
07028:                    partsUsed | 0x10l);
07029:          if(!(puzzle & 0x5960000000ll))
07030:            doSolve(30, 0x40000000ll, puzzle | 0x5960000000ll,
07031:                    partsUsed | 0x10l);
07032:       }
07033:       if(!(puzzle & 0x9a60000000ll))
07034:         doSolve(30, 0x40000000ll, puzzle | 0x9a60000000ll,
07035:                    partsUsed | 0x10l);
07036:       if(!(puzzle & 0x4920820000000ll))
07037:         doSolve(30, 0x40000000ll, puzzle | 0x4920820000000ll,
07038:                    partsUsed | 0x10l);
07039:     piece5at29:
07040:       if (partsUsed & 0x20l) goto piece6at29;
07041:       if (!(puzzle & 0x4920000000ll)) {
07042:          if(!(puzzle & 0x6920000000ll))
07043:            doSolve(30, 0x40000000ll, puzzle | 0x6920000000ll,
07044:                    partsUsed | 0x20l);
07045:          if(!(puzzle & 0x4004920000000ll))
07046:            doSolve(30, 0x40000000ll, puzzle | 0x4004920000000ll,
07047:                    partsUsed | 0x20l);
07048:          if(!(puzzle & 0x4960000000ll))
07049:            doSolve(30, 0x40000000ll, puzzle | 0x4960000000ll,
07050:                    partsUsed | 0x20l);
07051:          if(!(puzzle & 0x24920000000ll))
07052:            doSolve(30, 0x40000000ll, puzzle | 0x24920000000ll,
07053:                    partsUsed | 0x20l);
07054:          if(!(puzzle & 0xc920000000ll))
07055:            doSolve(30, 0x40000000ll, puzzle | 0xc920000000ll,
07056:                    partsUsed | 0x20l);
07057:       }
07058:       if(!(puzzle & 0x4920020000000ll))
07059:         doSolve(30, 0x40000000ll, puzzle | 0x4920020000000ll,
07060:                    partsUsed | 0x20l);
07061:       if(!(puzzle & 0x9260000000ll))
07062:         doSolve(30, 0x40000000ll, puzzle | 0x9260000000ll,
07063:                    partsUsed | 0x20l);
07064:     piece6at29:
07065:       if (partsUsed & 0x40l) goto piece7at29;
07066:       if (!(puzzle & 0x4920000000ll)) {
07067:          if(!(puzzle & 0x49a0000000ll))
07068:            doSolve(30, 0x40000000ll, puzzle | 0x49a0000000ll,
07069:                    partsUsed | 0x40l);
07070:          if(!(puzzle & 0x4d20000000ll))
07071:            doSolve(30, 0x40000000ll, puzzle | 0x4d20000000ll,
07072:                    partsUsed | 0x40l);
07073:          if(!(puzzle & 0x804920000000ll))
07074:            doSolve(30, 0x40000000ll, puzzle | 0x804920000000ll,
07075:                    partsUsed | 0x40l);
07076:          if(!(puzzle & 0x4b20000000ll))
07077:            doSolve(30, 0x40000000ll, puzzle | 0x4b20000000ll,
07078:                    partsUsed | 0x40l);
07079:          if(!(puzzle & 0x104920000000ll))
07080:            doSolve(30, 0x40000000ll, puzzle | 0x104920000000ll,
07081:                    partsUsed | 0x40l);
07082:          if(!(puzzle & 0x5920000000ll))
07083:            doSolve(30, 0x40000000ll, puzzle | 0x5920000000ll,
07084:                    partsUsed | 0x40l);
07085:       }
07086:     piece7at29:
07087:       if (partsUsed & 0x80l) goto piece8at29;
07088:       if(!(puzzle & 0x120020120000000ll))
07089:         doSolve(30, 0x40000000ll, puzzle | 0x120020120000000ll,
07090:                    partsUsed | 0x80l);
07091:       if(!(puzzle & 0x120100120000000ll))
07092:         doSolve(30, 0x40000000ll, puzzle | 0x120100120000000ll,
07093:                    partsUsed | 0x80l);
07094:       if(!(puzzle & 0x920820000000ll))
07095:         doSolve(30, 0x40000000ll, puzzle | 0x920820000000ll,
07096:                    partsUsed | 0x80l);
07097:       if(!(puzzle & 0x820920000000ll))
07098:         doSolve(30, 0x40000000ll, puzzle | 0x820920000000ll,
07099:                    partsUsed | 0x80l);
07100:       if(!(puzzle & 0x1960000000ll))
07101:         doSolve(30, 0x40000000ll, puzzle | 0x1960000000ll,
07102:                    partsUsed | 0x80l);
07103:       if(!(puzzle & 0x1a60000000ll))
07104:         doSolve(30, 0x40000000ll, puzzle | 0x1a60000000ll,
07105:                    partsUsed | 0x80l);
07106:       if(!(puzzle & 0x60040060000000ll))
07107:         doSolve(30, 0x40000000ll, puzzle | 0x60040060000000ll,
07108:                    partsUsed | 0x80l);
07109:       if(!(puzzle & 0x60020060000000ll))
07110:         doSolve(30, 0x40000000ll, puzzle | 0x60020060000000ll,
07111:                    partsUsed | 0x80l);
07112:     piece8at29:
07113:       if (partsUsed & 0x100l) goto piece9at29;
07114:       if(!(puzzle & 0x801a0000000ll))
07115:         doSolve(30, 0x40000000ll, puzzle | 0x801a0000000ll,
07116:                    partsUsed | 0x100l);
07117:       if(!(puzzle & 0x30120000000ll))
07118:         doSolve(30, 0x40000000ll, puzzle | 0x30120000000ll,
07119:                    partsUsed | 0x100l);
07120:       if(!(puzzle & 0x20320000000ll))
07121:         doSolve(30, 0x40000000ll, puzzle | 0x20320000000ll,
07122:                    partsUsed | 0x100l);
07123:       if(!(puzzle & 0x1a0020000000ll))
07124:         doSolve(30, 0x40000000ll, puzzle | 0x1a0020000000ll,
07125:                    partsUsed | 0x100l);
07126:       if(!(puzzle & 0x120060000000ll))
07127:         doSolve(30, 0x40000000ll, puzzle | 0x120060000000ll,
07128:                    partsUsed | 0x100l);
07129:       if(!(puzzle & 0x260020000000ll))
07130:         doSolve(30, 0x40000000ll, puzzle | 0x260020000000ll,
07131:                    partsUsed | 0x100l);
07132:       if(!(puzzle & 0x40160000000ll))
07133:         doSolve(30, 0x40000000ll, puzzle | 0x40160000000ll,
07134:                    partsUsed | 0x100l);
07135:       if(!(puzzle & 0x300120000000ll))
07136:         doSolve(30, 0x40000000ll, puzzle | 0x300120000000ll,
07137:                    partsUsed | 0x100l);
07138:       if(!(puzzle & 0x200260000000ll))
07139:         doSolve(30, 0x40000000ll, puzzle | 0x200260000000ll,
07140:                    partsUsed | 0x100l);
07141:     piece9at29:
07142:       if (partsUsed & 0x200l) goto piece10at29;
07143:       if (!(puzzle & 0x1a0000000ll)) {
07144:          if(!(puzzle & 0x13a0000000ll))
07145:            doSolve(30, 0x40000000ll, puzzle | 0x13a0000000ll,
07146:                    partsUsed | 0x200l);
07147:          if(!(puzzle & 0x7a0000000ll))
07148:            doSolve(30, 0x40000000ll, puzzle | 0x7a0000000ll,
07149:                    partsUsed | 0x200l);
07150:          if(!(puzzle & 0x9e0000000ll))
07151:            doSolve(30, 0x40000000ll, puzzle | 0x9e0000000ll,
07152:                    partsUsed | 0x200l);
07153:          if(!(puzzle & 0x19a0000000ll))
07154:            doSolve(30, 0x40000000ll, puzzle | 0x19a0000000ll,
07155:                    partsUsed | 0x200l);
07156:       }
07157:       if (!(puzzle & 0x20020020000000ll)) {
07158:          if(!(puzzle & 0x20030060000000ll))
07159:            doSolve(30, 0x40000000ll, puzzle | 0x20030060000000ll,
07160:                    partsUsed | 0x200l);
07161:          if(!(puzzle & 0x60030020000000ll))
07162:            doSolve(30, 0x40000000ll, puzzle | 0x60030020000000ll,
07163:                    partsUsed | 0x200l);
07164:          if(!(puzzle & 0x30060020000000ll))
07165:            doSolve(30, 0x40000000ll, puzzle | 0x30060020000000ll,
07166:                    partsUsed | 0x200l);
07167:       }
07168:       if(!(puzzle & 0xf20000000ll))
07169:         doSolve(30, 0x40000000ll, puzzle | 0xf20000000ll,
07170:                    partsUsed | 0x200l);
07171:       if(!(puzzle & 0x10070020000000ll))
07172:         doSolve(30, 0x40000000ll, puzzle | 0x10070020000000ll,
07173:                    partsUsed | 0x200l);
07174:       if(!(puzzle & 0x40070020000000ll))
07175:         doSolve(30, 0x40000000ll, puzzle | 0x40070020000000ll,
07176:                    partsUsed | 0x200l);
07177:       if(!(puzzle & 0x100920020000000ll))
07178:         doSolve(30, 0x40000000ll, puzzle | 0x100920020000000ll,
07179:                    partsUsed | 0x200l);
07180:       if(!(puzzle & 0x100900120000000ll))
07181:         doSolve(30, 0x40000000ll, puzzle | 0x100900120000000ll,
07182:                    partsUsed | 0x200l);
07183:     piece10at29:
07184:       if (partsUsed & 0x400l) goto piece11at29;
07185:       if (!(puzzle & 0x100120000000ll)) {
07186:          if(!(puzzle & 0x20120120000000ll))
07187:            doSolve(30, 0x40000000ll, puzzle | 0x20120120000000ll,
07188:                    partsUsed | 0x400l);
07189:          if(!(puzzle & 0x920120000000ll))
07190:            doSolve(30, 0x40000000ll, puzzle | 0x920120000000ll,
07191:                    partsUsed | 0x400l);
07192:          if(!(puzzle & 0x900920000000ll))
07193:            doSolve(30, 0x40000000ll, puzzle | 0x900920000000ll,
07194:                    partsUsed | 0x400l);
07195:          if(!(puzzle & 0x120920000000ll))
07196:            doSolve(30, 0x40000000ll, puzzle | 0x120920000000ll,
07197:                    partsUsed | 0x400l);
07198:          if(!(puzzle & 0x100120120000000ll))
07199:            doSolve(30, 0x40000000ll, puzzle | 0x100120120000000ll,
07200:                    partsUsed | 0x400l);
07201:       }
07202:       if (!(puzzle & 0x20020020000000ll)) {
07203:          if(!(puzzle & 0x120120020000000ll))
07204:            doSolve(30, 0x40000000ll, puzzle | 0x120120020000000ll,
07205:                    partsUsed | 0x400l);
07206:          if(!(puzzle & 0x20060060000000ll))
07207:            doSolve(30, 0x40000000ll, puzzle | 0x20060060000000ll,
07208:                    partsUsed | 0x400l);
07209:          if(!(puzzle & 0x60060020000000ll))
07210:            doSolve(30, 0x40000000ll, puzzle | 0x60060020000000ll,
07211:                    partsUsed | 0x400l);
07212:       }
07213:       if (!(puzzle & 0x320000000ll)) {
07214:          if(!(puzzle & 0xb60000000ll))
07215:            doSolve(30, 0x40000000ll, puzzle | 0xb60000000ll,
07216:                    partsUsed | 0x400l);
07217:          if(!(puzzle & 0x1360000000ll))
07218:            doSolve(30, 0x40000000ll, puzzle | 0x1360000000ll,
07219:                    partsUsed | 0x400l);
07220:          if(!(puzzle & 0x1b20000000ll))
07221:            doSolve(30, 0x40000000ll, puzzle | 0x1b20000000ll,
07222:                    partsUsed | 0x400l);
07223:       }
07224:       if(!(puzzle & 0x3e0000000ll))
07225:         doSolve(30, 0x40000000ll, puzzle | 0x3e0000000ll,
07226:                    partsUsed | 0x400l);
07227:       if(!(puzzle & 0xda0000000ll))
07228:         doSolve(30, 0x40000000ll, puzzle | 0xda0000000ll,
07229:                    partsUsed | 0x400l);
07230:       if(!(puzzle & 0x70060000000ll))
07231:         doSolve(30, 0x40000000ll, puzzle | 0x70060000000ll,
07232:                    partsUsed | 0x400l);
07233:       if(!(puzzle & 0x30030020000000ll))
07234:         doSolve(30, 0x40000000ll, puzzle | 0x30030020000000ll,
07235:                    partsUsed | 0x400l);
07236:       if(!(puzzle & 0x40060060000000ll))
07237:         doSolve(30, 0x40000000ll, puzzle | 0x40060060000000ll,
07238:                    partsUsed | 0x400l);
07239:     piece11at29:
07240:       if (partsUsed & 0x800l) goto piece12at29;
07241:       if (!(puzzle & 0x180020000000ll)) {
07242:          if(!(puzzle & 0x1b0020000000ll))
07243:            doSolve(30, 0x40000000ll, puzzle | 0x1b0020000000ll,
07244:                    partsUsed | 0x800l);
07245:          if(!(puzzle & 0x1a0120000000ll))
07246:            doSolve(30, 0x40000000ll, puzzle | 0x1a0120000000ll,
07247:                    partsUsed | 0x800l);
07248:          if(!(puzzle & 0x1801a0000000ll))
07249:            doSolve(30, 0x40000000ll, puzzle | 0x1801a0000000ll,
07250:                    partsUsed | 0x800l);
07251:       }
07252:       if (!(puzzle & 0x20120000000ll)) {
07253:          if(!(puzzle & 0x130120000000ll))
07254:            doSolve(30, 0x40000000ll, puzzle | 0x130120000000ll,
07255:                    partsUsed | 0x800l);
07256:          if(!(puzzle & 0x1201a0000000ll))
07257:            doSolve(30, 0x40000000ll, puzzle | 0x1201a0000000ll,
07258:                    partsUsed | 0x800l);
07259:          if(!(puzzle & 0x20360000000ll))
07260:            doSolve(30, 0x40000000ll, puzzle | 0x20360000000ll,
07261:                    partsUsed | 0x800l);
07262:          if(!(puzzle & 0x160120000000ll))
07263:            doSolve(30, 0x40000000ll, puzzle | 0x160120000000ll,
07264:                    partsUsed | 0x800l);
07265:          if(!(puzzle & 0x60160000000ll))
07266:            doSolve(30, 0x40000000ll, puzzle | 0x60160000000ll,
07267:                    partsUsed | 0x800l);
07268:          if(!(puzzle & 0x120320000000ll))
07269:            doSolve(30, 0x40000000ll, puzzle | 0x120320000000ll,
07270:                    partsUsed | 0x800l);
07271:          if(!(puzzle & 0x320120000000ll))
07272:            doSolve(30, 0x40000000ll, puzzle | 0x320120000000ll,
07273:                    partsUsed | 0x800l);
07274:          if(!(puzzle & 0x120160000000ll))
07275:            doSolve(30, 0x40000000ll, puzzle | 0x120160000000ll,
07276:                    partsUsed | 0x800l);
07277:       }
07278:       if (!(puzzle & 0x40060000000ll)) {
07279:          if(!(puzzle & 0x160060000000ll))
07280:            doSolve(30, 0x40000000ll, puzzle | 0x160060000000ll,
07281:                    partsUsed | 0x800l);
07282:          if(!(puzzle & 0x240260000000ll))
07283:            doSolve(30, 0x40000000ll, puzzle | 0x240260000000ll,
07284:                    partsUsed | 0x800l);
07285:          if(!(puzzle & 0x60260000000ll))
07286:            doSolve(30, 0x40000000ll, puzzle | 0x60260000000ll,
07287:                    partsUsed | 0x800l);
07288:          if(!(puzzle & 0x260060000000ll))
07289:            doSolve(30, 0x40000000ll, puzzle | 0x260060000000ll,
07290:                    partsUsed | 0x800l);
07291:          if(!(puzzle & 0x40360000000ll))
07292:            doSolve(30, 0x40000000ll, puzzle | 0x40360000000ll,
07293:                    partsUsed | 0x800l);
07294:       }
07295:       if (!(puzzle & 0x320000000ll)) {
07296:          if(!(puzzle & 0x300320000000ll))
07297:            doSolve(30, 0x40000000ll, puzzle | 0x300320000000ll,
07298:                    partsUsed | 0x800l);
07299:          if(!(puzzle & 0x200360000000ll))
07300:            doSolve(30, 0x40000000ll, puzzle | 0x200360000000ll,
07301:                    partsUsed | 0x800l);
07302:          if(!(puzzle & 0x100360000000ll))
07303:            doSolve(30, 0x40000000ll, puzzle | 0x100360000000ll,
07304:                    partsUsed | 0x800l);
07305:       }
07306:       if(!(puzzle & 0x360020000000ll))
07307:         doSolve(30, 0x40000000ll, puzzle | 0x360020000000ll,
07308:                    partsUsed | 0x800l);
07309:     piece12at29:
07310:     break;
07311:    case 30:
07312:       if (partsUsed & 0x2l) goto piece2at30;
07313:       if(!(puzzle & 0xf40000000ll))
07314:         doSolve(31, 0x80000000ll, puzzle | 0xf40000000ll,
07315:                    partsUsed | 0x2l);
07316:       if(!(puzzle & 0x30060040000000ll))
07317:         doSolve(31, 0x80000000ll, puzzle | 0x30060040000000ll,
07318:                    partsUsed | 0x2l);
07319:       if(!(puzzle & 0x1200240040000000ll))
07320:         doSolve(31, 0x80000000ll, puzzle | 0x1200240040000000ll,
07321:                    partsUsed | 0x2l);
07322:       if(!(puzzle & 0x1001200240000000ll))
07323:         doSolve(31, 0x80000000ll, puzzle | 0x1001200240000000ll,
07324:                    partsUsed | 0x2l);
07325:     piece2at30:
07326:       if (partsUsed & 0x4l) goto piece3at30;
07327:       if(!(puzzle & 0x13c0000000ll))
07328:         doSolve(31, 0x80000000ll, puzzle | 0x13c0000000ll,
07329:                    partsUsed | 0x4l);
07330:       if(!(puzzle & 0x200201240000000ll))
07331:         doSolve(31, 0x80000000ll, puzzle | 0x200201240000000ll,
07332:                    partsUsed | 0x4l);
07333:       if(!(puzzle & 0x40070040000000ll))
07334:         doSolve(31, 0x80000000ll, puzzle | 0x40070040000000ll,
07335:                    partsUsed | 0x4l);
07336:       if(!(puzzle & 0x41240040000000ll))
07337:         doSolve(31, 0x80000000ll, puzzle | 0x41240040000000ll,
07338:                    partsUsed | 0x4l);
07339:     piece3at30:
07340:       if (partsUsed & 0x8l) goto piece4at30;
07341:       if(!(puzzle & 0x7c0000000ll))
07342:         doSolve(31, 0x80000000ll, puzzle | 0x7c0000000ll,
07343:                    partsUsed | 0x8l);
07344:       if(!(puzzle & 0x10070040000000ll))
07345:         doSolve(31, 0x80000000ll, puzzle | 0x10070040000000ll,
07346:                    partsUsed | 0x8l);
07347:       if(!(puzzle & 0x1001240040000000ll))
07348:         doSolve(31, 0x80000000ll, puzzle | 0x1001240040000000ll,
07349:                    partsUsed | 0x8l);
07350:       if(!(puzzle & 0x1200200240000000ll))
07351:         doSolve(31, 0x80000000ll, puzzle | 0x1200200240000000ll,
07352:                    partsUsed | 0x8l);
07353:     piece4at30:
07354:       if (partsUsed & 0x10l) goto piece5at30;
07355:       if (!(puzzle & 0x9240000000ll)) {
07356:          if(!(puzzle & 0xd340000000ll))
07357:            doSolve(31, 0x80000000ll, puzzle | 0xd340000000ll,
07358:                    partsUsed | 0x10l);
07359:          if(!(puzzle & 0x1049240000000ll))
07360:            doSolve(31, 0x80000000ll, puzzle | 0x1049240000000ll,
07361:                    partsUsed | 0x10l);
07362:          if(!(puzzle & 0x8209240000000ll))
07363:            doSolve(31, 0x80000000ll, puzzle | 0x8209240000000ll,
07364:                    partsUsed | 0x10l);
07365:       }
07366:       if(!(puzzle & 0x9241040000000ll))
07367:         doSolve(31, 0x80000000ll, puzzle | 0x9241040000000ll,
07368:                    partsUsed | 0x10l);
07369:     piece5at30:
07370:       if (partsUsed & 0x20l) goto piece6at30;
07371:       if (!(puzzle & 0x9240000000ll)) {
07372:          if(!(puzzle & 0xd240000000ll))
07373:            doSolve(31, 0x80000000ll, puzzle | 0xd240000000ll,
07374:                    partsUsed | 0x20l);
07375:          if(!(puzzle & 0x8009240000000ll))
07376:            doSolve(31, 0x80000000ll, puzzle | 0x8009240000000ll,
07377:                    partsUsed | 0x20l);
07378:          if(!(puzzle & 0x49240000000ll))
07379:            doSolve(31, 0x80000000ll, puzzle | 0x49240000000ll,
07380:                    partsUsed | 0x20l);
07381:       }
07382:       if(!(puzzle & 0x9240040000000ll))
07383:         doSolve(31, 0x80000000ll, puzzle | 0x9240040000000ll,
07384:                    partsUsed | 0x20l);
07385:     piece6at30:
07386:       if (partsUsed & 0x40l) goto piece7at30;
07387:       if (!(puzzle & 0x9240000000ll)) {
07388:          if(!(puzzle & 0x9340000000ll))
07389:            doSolve(31, 0x80000000ll, puzzle | 0x9340000000ll,
07390:                    partsUsed | 0x40l);
07391:          if(!(puzzle & 0x9a40000000ll))
07392:            doSolve(31, 0x80000000ll, puzzle | 0x9a40000000ll,
07393:                    partsUsed | 0x40l);
07394:          if(!(puzzle & 0x1009240000000ll))
07395:            doSolve(31, 0x80000000ll, puzzle | 0x1009240000000ll,
07396:                    partsUsed | 0x40l);
07397:          if(!(puzzle & 0x209240000000ll))
07398:            doSolve(31, 0x80000000ll, puzzle | 0x209240000000ll,
07399:                    partsUsed | 0x40l);
07400:       }
07401:     piece7at30:
07402:       if (partsUsed & 0x80l) goto piece8at30;
07403:       if(!(puzzle & 0x240040240000000ll))
07404:         doSolve(31, 0x80000000ll, puzzle | 0x240040240000000ll,
07405:                    partsUsed | 0x80l);
07406:       if(!(puzzle & 0x240200240000000ll))
07407:         doSolve(31, 0x80000000ll, puzzle | 0x240200240000000ll,
07408:                    partsUsed | 0x80l);
07409:       if(!(puzzle & 0x1241040000000ll))
07410:         doSolve(31, 0x80000000ll, puzzle | 0x1241040000000ll,
07411:                    partsUsed | 0x80l);
07412:       if(!(puzzle & 0x1041240000000ll))
07413:         doSolve(31, 0x80000000ll, puzzle | 0x1041240000000ll,
07414:                    partsUsed | 0x80l);
07415:     piece8at30:
07416:       if (partsUsed & 0x100l) goto piece9at30;
07417:       if(!(puzzle & 0x340040000000ll))
07418:         doSolve(31, 0x80000000ll, puzzle | 0x340040000000ll,
07419:                    partsUsed | 0x100l);
07420:       if(!(puzzle & 0x100340000000ll))
07421:         doSolve(31, 0x80000000ll, puzzle | 0x100340000000ll,
07422:                    partsUsed | 0x100l);
07423:       if(!(puzzle & 0x60240000000ll))
07424:         doSolve(31, 0x80000000ll, puzzle | 0x60240000000ll,
07425:                    partsUsed | 0x100l);
07426:     piece9at30:
07427:       if (partsUsed & 0x200l) goto piece10at30;
07428:       if(!(puzzle & 0xbc0000000ll))
07429:         doSolve(31, 0x80000000ll, puzzle | 0xbc0000000ll,
07430:                    partsUsed | 0x200l);
07431:       if(!(puzzle & 0x20070040000000ll))
07432:         doSolve(31, 0x80000000ll, puzzle | 0x20070040000000ll,
07433:                    partsUsed | 0x200l);
07434:       if(!(puzzle & 0x201240040000000ll))
07435:         doSolve(31, 0x80000000ll, puzzle | 0x201240040000000ll,
07436:                    partsUsed | 0x200l);
07437:       if(!(puzzle & 0x201200240000000ll))
07438:         doSolve(31, 0x80000000ll, puzzle | 0x201200240000000ll,
07439:                    partsUsed | 0x200l);
07440:     piece10at30:
07441:       if (partsUsed & 0x400l) goto piece11at30;
07442:       if (!(puzzle & 0x1240000000ll)) {
07443:          if(!(puzzle & 0x1b40000000ll))
07444:            doSolve(31, 0x80000000ll, puzzle | 0x1b40000000ll,
07445:                    partsUsed | 0x400l);
07446:          if(!(puzzle & 0x1201240000000ll))
07447:            doSolve(31, 0x80000000ll, puzzle | 0x1201240000000ll,
07448:                    partsUsed | 0x400l);
07449:          if(!(puzzle & 0x241240000000ll))
07450:            doSolve(31, 0x80000000ll, puzzle | 0x241240000000ll,
07451:                    partsUsed | 0x400l);
07452:       }
07453:       if (!(puzzle & 0x40040040000000ll)) {
07454:          if(!(puzzle & 0x60060040000000ll))
07455:            doSolve(31, 0x80000000ll, puzzle | 0x60060040000000ll,
07456:                    partsUsed | 0x400l);
07457:          if(!(puzzle & 0x40240240000000ll))
07458:            doSolve(31, 0x80000000ll, puzzle | 0x40240240000000ll,
07459:                    partsUsed | 0x400l);
07460:          if(!(puzzle & 0x240240040000000ll))
07461:            doSolve(31, 0x80000000ll, puzzle | 0x240240040000000ll,
07462:                    partsUsed | 0x400l);
07463:       }
07464:       if(!(puzzle & 0x1240240000000ll))
07465:         doSolve(31, 0x80000000ll, puzzle | 0x1240240000000ll,
07466:                    partsUsed | 0x400l);
07467:       if(!(puzzle & 0x200240240000000ll))
07468:         doSolve(31, 0x80000000ll, puzzle | 0x200240240000000ll,
07469:                    partsUsed | 0x400l);
07470:     piece11at30:
07471:       if (partsUsed & 0x800l) goto piece12at30;
07472:       if (!(puzzle & 0x300040000000ll)) {
07473:          if(!(puzzle & 0x360040000000ll))
07474:            doSolve(31, 0x80000000ll, puzzle | 0x360040000000ll,
07475:                    partsUsed | 0x800l);
07476:          if(!(puzzle & 0x340240000000ll))
07477:            doSolve(31, 0x80000000ll, puzzle | 0x340240000000ll,
07478:                    partsUsed | 0x800l);
07479:          if(!(puzzle & 0x300340000000ll))
07480:            doSolve(31, 0x80000000ll, puzzle | 0x300340000000ll,
07481:                    partsUsed | 0x800l);
07482:       }
07483:       if(!(puzzle & 0x260240000000ll))
07484:         doSolve(31, 0x80000000ll, puzzle | 0x260240000000ll,
07485:                    partsUsed | 0x800l);
07486:       if(!(puzzle & 0x240340000000ll))
07487:         doSolve(31, 0x80000000ll, puzzle | 0x240340000000ll,
07488:                    partsUsed | 0x800l);
07489:     piece12at30:
07490:     break;
07491:    case 31:
07492:       if (partsUsed & 0x2l) goto piece2at31;
07493:       if(!(puzzle & 0x10090480000000ll))
07494:         doSolve(32, 0x100000000ll, puzzle | 0x10090480000000ll,
07495:                    partsUsed | 0x2l);
07496:       if(!(puzzle & 0x2400480080000000ll))
07497:         doSolve(32, 0x100000000ll, puzzle | 0x2400480080000000ll,
07498:                    partsUsed | 0x2l);
07499:       if(!(puzzle & 0x2002400480000000ll))
07500:         doSolve(32, 0x100000000ll, puzzle | 0x2002400480000000ll,
07501:                    partsUsed | 0x2l);
07502:       if(!(puzzle & 0x9980000000ll))
07503:         doSolve(32, 0x100000000ll, puzzle | 0x9980000000ll,
07504:                    partsUsed | 0x2l);
07505:       if(!(puzzle & 0xcc80000000ll))
07506:         doSolve(32, 0x100000000ll, puzzle | 0xcc80000000ll,
07507:                    partsUsed | 0x2l);
07508:       if(!(puzzle & 0x200300180000000ll))
07509:         doSolve(32, 0x100000000ll, puzzle | 0x200300180000000ll,
07510:                    partsUsed | 0x2l);
07511:       if(!(puzzle & 0x300180080000000ll))
07512:         doSolve(32, 0x100000000ll, puzzle | 0x300180080000000ll,
07513:                    partsUsed | 0x2l);
07514:     piece2at31:
07515:       if (partsUsed & 0x4l) goto piece3at31;
07516:       if (!(puzzle & 0x80080080000000ll)) {
07517:          if(!(puzzle & 0x490080080000000ll))
07518:            doSolve(32, 0x100000000ll, puzzle | 0x490080080000000ll,
07519:                    partsUsed | 0x4l);
07520:          if(!(puzzle & 0x82480080000000ll))
07521:            doSolve(32, 0x100000000ll, puzzle | 0x82480080000000ll,
07522:                    partsUsed | 0x4l);
07523:          if(!(puzzle & 0x80380080000000ll))
07524:            doSolve(32, 0x100000000ll, puzzle | 0x80380080000000ll,
07525:                    partsUsed | 0x4l);
07526:       }
07527:       if(!(puzzle & 0x400402480000000ll))
07528:         doSolve(32, 0x100000000ll, puzzle | 0x400402480000000ll,
07529:                    partsUsed | 0x4l);
07530:       if(!(puzzle & 0x3c80000000ll))
07531:         doSolve(32, 0x100000000ll, puzzle | 0x3c80000000ll,
07532:                    partsUsed | 0x4l);
07533:       if(!(puzzle & 0x4b80000000ll))
07534:         doSolve(32, 0x100000000ll, puzzle | 0x4b80000000ll,
07535:                    partsUsed | 0x4l);
07536:       if(!(puzzle & 0x100100380000000ll))
07537:         doSolve(32, 0x100000000ll, puzzle | 0x100100380000000ll,
07538:                    partsUsed | 0x4l);
07539:     piece3at31:
07540:       if (partsUsed & 0x8l) goto piece4at31;
07541:       if(!(puzzle & 0x90080480000000ll))
07542:         doSolve(32, 0x100000000ll, puzzle | 0x90080480000000ll,
07543:                    partsUsed | 0x8l);
07544:       if(!(puzzle & 0x2002480080000000ll))
07545:         doSolve(32, 0x100000000ll, puzzle | 0x2002480080000000ll,
07546:                    partsUsed | 0x8l);
07547:       if(!(puzzle & 0x2400400480000000ll))
07548:         doSolve(32, 0x100000000ll, puzzle | 0x2400400480000000ll,
07549:                    partsUsed | 0x8l);
07550:       if(!(puzzle & 0xc980000000ll))
07551:         doSolve(32, 0x100000000ll, puzzle | 0xc980000000ll,
07552:                    partsUsed | 0x8l);
07553:       if(!(puzzle & 0x9c80000000ll))
07554:         doSolve(32, 0x100000000ll, puzzle | 0x9c80000000ll,
07555:                    partsUsed | 0x8l);
07556:       if(!(puzzle & 0x200380080000000ll))
07557:         doSolve(32, 0x100000000ll, puzzle | 0x200380080000000ll,
07558:                    partsUsed | 0x8l);
07559:       if(!(puzzle & 0x300100180000000ll))
07560:         doSolve(32, 0x100000000ll, puzzle | 0x300100180000000ll,
07561:                    partsUsed | 0x8l);
07562:     piece4at31:
07563:       if (partsUsed & 0x10l) goto piece5at31;
07564:       if(!(puzzle & 0x2492080000000ll))
07565:         doSolve(32, 0x100000000ll, puzzle | 0x2492080000000ll,
07566:                    partsUsed | 0x10l);
07567:     piece5at31:
07568:       if (partsUsed & 0x40l) goto piece7at31;
07569:       if(!(puzzle & 0x2490080000000ll))
07570:         doSolve(32, 0x100000000ll, puzzle | 0x2490080000000ll,
07571:                    partsUsed | 0x40l);
07572:     piece7at31:
07573:       if (partsUsed & 0x80l) goto piece8at31;
07574:       if(!(puzzle & 0x480080480000000ll))
07575:         doSolve(32, 0x100000000ll, puzzle | 0x480080480000000ll,
07576:                    partsUsed | 0x80l);
07577:       if(!(puzzle & 0x480400480000000ll))
07578:         doSolve(32, 0x100000000ll, puzzle | 0x480400480000000ll,
07579:                    partsUsed | 0x80l);
07580:       if(!(puzzle & 0x2482080000000ll))
07581:         doSolve(32, 0x100000000ll, puzzle | 0x2482080000000ll,
07582:                    partsUsed | 0x80l);
07583:       if(!(puzzle & 0x2082480000000ll))
07584:         doSolve(32, 0x100000000ll, puzzle | 0x2082480000000ll,
07585:                    partsUsed | 0x80l);
07586:       if(!(puzzle & 0x1780000000ll))
07587:         doSolve(32, 0x100000000ll, puzzle | 0x1780000000ll,
07588:                    partsUsed | 0x80l);
07589:       if(!(puzzle & 0x6580000000ll))
07590:         doSolve(32, 0x100000000ll, puzzle | 0x6580000000ll,
07591:                    partsUsed | 0x80l);
07592:       if(!(puzzle & 0x6980000000ll))
07593:         doSolve(32, 0x100000000ll, puzzle | 0x6980000000ll,
07594:                    partsUsed | 0x80l);
07595:       if(!(puzzle & 0x1e80000000ll))
07596:         doSolve(32, 0x100000000ll, puzzle | 0x1e80000000ll,
07597:                    partsUsed | 0x80l);
07598:       if(!(puzzle & 0x180100180000000ll))
07599:         doSolve(32, 0x100000000ll, puzzle | 0x180100180000000ll,
07600:                    partsUsed | 0x80l);
07601:       if(!(puzzle & 0x180080180000000ll))
07602:         doSolve(32, 0x100000000ll, puzzle | 0x180080180000000ll,
07603:                    partsUsed | 0x80l);
07604:       if(!(puzzle & 0x380280000000ll))
07605:         doSolve(32, 0x100000000ll, puzzle | 0x380280000000ll,
07606:                    partsUsed | 0x80l);
07607:       if(!(puzzle & 0x280380000000ll))
07608:         doSolve(32, 0x100000000ll, puzzle | 0x280380000000ll,
07609:                    partsUsed | 0x80l);
07610:     piece8at31:
07611:       if (partsUsed & 0x100l) goto piece9at31;
07612:       if(!(puzzle & 0x120180000000ll))
07613:         doSolve(32, 0x100000000ll, puzzle | 0x120180000000ll,
07614:                    partsUsed | 0x100l);
07615:       if(!(puzzle & 0x100580000000ll))
07616:         doSolve(32, 0x100000000ll, puzzle | 0x100580000000ll,
07617:                    partsUsed | 0x100l);
07618:       if(!(puzzle & 0xb0080000000ll))
07619:         doSolve(32, 0x100000000ll, puzzle | 0xb0080000000ll,
07620:                    partsUsed | 0x100l);
07621:       if(!(puzzle & 0x980080000000ll))
07622:         doSolve(32, 0x100000000ll, puzzle | 0x980080000000ll,
07623:                    partsUsed | 0x100l);
07624:       if(!(puzzle & 0x480180000000ll))
07625:         doSolve(32, 0x100000000ll, puzzle | 0x480180000000ll,
07626:                    partsUsed | 0x100l);
07627:       if(!(puzzle & 0xc00480000000ll))
07628:         doSolve(32, 0x100000000ll, puzzle | 0xc00480000000ll,
07629:                    partsUsed | 0x100l);
07630:       if(!(puzzle & 0x80c80000000ll))
07631:         doSolve(32, 0x100000000ll, puzzle | 0x80c80000000ll,
07632:                    partsUsed | 0x100l);
07633:       if(!(puzzle & 0x800980000000ll))
07634:         doSolve(32, 0x100000000ll, puzzle | 0x800980000000ll,
07635:                    partsUsed | 0x100l);
07636:     piece9at31:
07637:       if (partsUsed & 0x200l) goto piece10at31;
07638:       if (!(puzzle & 0x80080080000000ll)) {
07639:          if(!(puzzle & 0x80090480000000ll))
07640:            doSolve(32, 0x100000000ll, puzzle | 0x80090480000000ll,
07641:                    partsUsed | 0x200l);
07642:          if(!(puzzle & 0x90480080000000ll))
07643:            doSolve(32, 0x100000000ll, puzzle | 0x90480080000000ll,
07644:                    partsUsed | 0x200l);
07645:          if(!(puzzle & 0x480090080000000ll))
07646:            doSolve(32, 0x100000000ll, puzzle | 0x480090080000000ll,
07647:                    partsUsed | 0x200l);
07648:       }
07649:       if (!(puzzle & 0x480080000000ll)) {
07650:          if(!(puzzle & 0x400490080000000ll))
07651:            doSolve(32, 0x100000000ll, puzzle | 0x400490080000000ll,
07652:                    partsUsed | 0x200l);
07653:          if(!(puzzle & 0x10490080000000ll))
07654:            doSolve(32, 0x100000000ll, puzzle | 0x10490080000000ll,
07655:                    partsUsed | 0x200l);
07656:          if(!(puzzle & 0x402480080000000ll))
07657:            doSolve(32, 0x100000000ll, puzzle | 0x402480080000000ll,
07658:                    partsUsed | 0x200l);
07659:       }
07660:       if(!(puzzle & 0x5980000000ll))
07661:         doSolve(32, 0x100000000ll, puzzle | 0x5980000000ll,
07662:                    partsUsed | 0x200l);
07663:       if(!(puzzle & 0x5c80000000ll))
07664:         doSolve(32, 0x100000000ll, puzzle | 0x5c80000000ll,
07665:                    partsUsed | 0x200l);
07666:       if(!(puzzle & 0x402400480000000ll))
07667:         doSolve(32, 0x100000000ll, puzzle | 0x402400480000000ll,
07668:                    partsUsed | 0x200l);
07669:       if(!(puzzle & 0x100300180000000ll))
07670:         doSolve(32, 0x100000000ll, puzzle | 0x100300180000000ll,
07671:                    partsUsed | 0x200l);
07672:       if(!(puzzle & 0x100380080000000ll))
07673:         doSolve(32, 0x100000000ll, puzzle | 0x100380080000000ll,
07674:                    partsUsed | 0x200l);
07675:     piece10at31:
07676:       if (partsUsed & 0x400l) goto piece11at31;
07677:       if (!(puzzle & 0x400480000000ll)) {
07678:          if(!(puzzle & 0x80480480000000ll))
07679:            doSolve(32, 0x100000000ll, puzzle | 0x80480480000000ll,
07680:                    partsUsed | 0x400l);
07681:          if(!(puzzle & 0x2480480000000ll))
07682:            doSolve(32, 0x100000000ll, puzzle | 0x2480480000000ll,
07683:                    partsUsed | 0x400l);
07684:          if(!(puzzle & 0x2402480000000ll))
07685:            doSolve(32, 0x100000000ll, puzzle | 0x2402480000000ll,
07686:                    partsUsed | 0x400l);
07687:          if(!(puzzle & 0x482480000000ll))
07688:            doSolve(32, 0x100000000ll, puzzle | 0x482480000000ll,
07689:                    partsUsed | 0x400l);
07690:          if(!(puzzle & 0x400480480000000ll))
07691:            doSolve(32, 0x100000000ll, puzzle | 0x400480480000000ll,
07692:                    partsUsed | 0x400l);
07693:       }
07694:       if (!(puzzle & 0x980000000ll)) {
07695:          if(!(puzzle & 0x1b80000000ll))
07696:            doSolve(32, 0x100000000ll, puzzle | 0x1b80000000ll,
07697:                    partsUsed | 0x400l);
07698:          if(!(puzzle & 0xf80000000ll))
07699:            doSolve(32, 0x100000000ll, puzzle | 0xf80000000ll,
07700:                    partsUsed | 0x400l);
07701:          if(!(puzzle & 0x2d80000000ll))
07702:            doSolve(32, 0x100000000ll, puzzle | 0x2d80000000ll,
07703:                    partsUsed | 0x400l);
07704:          if(!(puzzle & 0x4d80000000ll))
07705:            doSolve(32, 0x100000000ll, puzzle | 0x4d80000000ll,
07706:                    partsUsed | 0x400l);
07707:          if(!(puzzle & 0x1d80000000ll))
07708:            doSolve(32, 0x100000000ll, puzzle | 0x1d80000000ll,
07709:                    partsUsed | 0x400l);
07710:       }
07711:       if (!(puzzle & 0x80080080000000ll)) {
07712:          if(!(puzzle & 0x480480080000000ll))
07713:            doSolve(32, 0x100000000ll, puzzle | 0x480480080000000ll,
07714:                    partsUsed | 0x400l);
07715:          if(!(puzzle & 0x80180180000000ll))
07716:            doSolve(32, 0x100000000ll, puzzle | 0x80180180000000ll,
07717:                    partsUsed | 0x400l);
07718:          if(!(puzzle & 0x180180080000000ll))
07719:            doSolve(32, 0x100000000ll, puzzle | 0x180180080000000ll,
07720:                    partsUsed | 0x400l);
07721:       }
07722:       if (!(puzzle & 0x100180000000ll)) {
07723:          if(!(puzzle & 0x100180180000000ll))
07724:            doSolve(32, 0x100000000ll, puzzle | 0x100180180000000ll,
07725:                    partsUsed | 0x400l);
07726:          if(!(puzzle & 0x380180000000ll))
07727:            doSolve(32, 0x100000000ll, puzzle | 0x380180000000ll,
07728:                    partsUsed | 0x400l);
07729:          if(!(puzzle & 0x180380000000ll))
07730:            doSolve(32, 0x100000000ll, puzzle | 0x180380000000ll,
07731:                    partsUsed | 0x400l);
07732:          if(!(puzzle & 0x300380000000ll))
07733:            doSolve(32, 0x100000000ll, puzzle | 0x300380000000ll,
07734:                    partsUsed | 0x400l);
07735:       }
07736:       if(!(puzzle & 0x90090080000000ll))
07737:         doSolve(32, 0x100000000ll, puzzle | 0x90090080000000ll,
07738:                    partsUsed | 0x400l);
07739:       if(!(puzzle & 0x490480000000ll))
07740:         doSolve(32, 0x100000000ll, puzzle | 0x490480000000ll,
07741:                    partsUsed | 0x400l);
07742:       if(!(puzzle & 0x6c80000000ll))
07743:         doSolve(32, 0x100000000ll, puzzle | 0x6c80000000ll,
07744:                    partsUsed | 0x400l);
07745:     piece11at31:
07746:       if (partsUsed & 0x800l) goto piece12at31;
07747:       if (!(puzzle & 0x180080000000ll)) {
07748:          if(!(puzzle & 0x1b0080000000ll))
07749:            doSolve(32, 0x100000000ll, puzzle | 0x1b0080000000ll,
07750:                    partsUsed | 0x800l);
07751:          if(!(puzzle & 0x1a0180000000ll))
07752:            doSolve(32, 0x100000000ll, puzzle | 0x1a0180000000ll,
07753:                    partsUsed | 0x800l);
07754:          if(!(puzzle & 0x190180000000ll))
07755:            doSolve(32, 0x100000000ll, puzzle | 0x190180000000ll,
07756:                    partsUsed | 0x800l);
07757:          if(!(puzzle & 0x580180000000ll))
07758:            doSolve(32, 0x100000000ll, puzzle | 0x580180000000ll,
07759:                    partsUsed | 0x800l);
07760:          if(!(puzzle & 0x580480000000ll))
07761:            doSolve(32, 0x100000000ll, puzzle | 0x580480000000ll,
07762:                    partsUsed | 0x800l);
07763:          if(!(puzzle & 0x180580000000ll))
07764:            doSolve(32, 0x100000000ll, puzzle | 0x180580000000ll,
07765:                    partsUsed | 0x800l);
07766:          if(!(puzzle & 0x180980000000ll))
07767:            doSolve(32, 0x100000000ll, puzzle | 0x180980000000ll,
07768:                    partsUsed | 0x800l);
07769:          if(!(puzzle & 0x980180000000ll))
07770:            doSolve(32, 0x100000000ll, puzzle | 0x980180000000ll,
07771:                    partsUsed | 0x800l);
07772:          if(!(puzzle & 0xd80080000000ll))
07773:            doSolve(32, 0x100000000ll, puzzle | 0xd80080000000ll,
07774:                    partsUsed | 0x800l);
07775:       }
07776:       if (!(puzzle & 0xc80000000ll)) {
07777:          if(!(puzzle & 0x80d80000000ll))
07778:            doSolve(32, 0x100000000ll, puzzle | 0x80d80000000ll,
07779:                    partsUsed | 0x800l);
07780:          if(!(puzzle & 0xc00c80000000ll))
07781:            doSolve(32, 0x100000000ll, puzzle | 0xc00c80000000ll,
07782:                    partsUsed | 0x800l);
07783:          if(!(puzzle & 0x480c80000000ll))
07784:            doSolve(32, 0x100000000ll, puzzle | 0x480c80000000ll,
07785:                    partsUsed | 0x800l);
07786:          if(!(puzzle & 0x800d80000000ll))
07787:            doSolve(32, 0x100000000ll, puzzle | 0x800d80000000ll,
07788:                    partsUsed | 0x800l);
07789:          if(!(puzzle & 0x100d80000000ll))
07790:            doSolve(32, 0x100000000ll, puzzle | 0x100d80000000ll,
07791:                    partsUsed | 0x800l);
07792:          if(!(puzzle & 0x400d80000000ll))
07793:            doSolve(32, 0x100000000ll, puzzle | 0x400d80000000ll,
07794:                    partsUsed | 0x800l);
07795:       }
07796:       if(!(puzzle & 0x900980000000ll))
07797:         doSolve(32, 0x100000000ll, puzzle | 0x900980000000ll,
07798:                    partsUsed | 0x800l);
07799:       if(!(puzzle & 0xc80480000000ll))
07800:         doSolve(32, 0x100000000ll, puzzle | 0xc80480000000ll,
07801:                    partsUsed | 0x800l);
07802:       if(!(puzzle & 0x480580000000ll))
07803:         doSolve(32, 0x100000000ll, puzzle | 0x480580000000ll,
07804:                    partsUsed | 0x800l);
07805:     piece12at31:
07806:     break;
07807:   }
07808: }
07809: 
07810: 
07811: void doSolve32(int start, int startMask, int puzzle, int partsUsed)
07812: {
07813:   for (;(puzzle & startMask) && start < NUM_HI_BITS; start++, startMask <<= 1);
07814:   if(partsUsed == (1<<12)-1) {
07815:     if(!(++numSolutions%4099)) { write(0, ".", 1); }
07816:     if(!((numSolutions) % (409963/10))) {
07817:       percent++;
07818:       printf("\r%d%% done, %ld seconds so far; expecting %.0lf seconds.\n", 
07819:              percent*10, (clock()-startTime)/1000000, ((double)(clock()-startTime)/100000/percent)*correction[percent-1]);
07820:       fflush(stdout);
07821:     }
07822:     return;
07823:   }
07824:   switch(start) {
07825:    case 0:
07826:       if (partsUsed & 0x2l) goto piece2at0at32;
07827:       if(!(puzzle & 0x201209l))
07828:         doSolve32(1, 0x2l, puzzle | 0x201209l, partsUsed | 0x2l);
07829:       if(!(puzzle & 0x2fl))
07830:         doSolve32(1, 0x2l, puzzle | 0x2fl, partsUsed | 0x2l);
07831:       if(!(puzzle & 0x801803l))
07832:         doSolve32(1, 0x2l, puzzle | 0x801803l, partsUsed | 0x2l);
07833:       if(!(puzzle & 0x48009001l))
07834:         doSolve32(1, 0x2l, puzzle | 0x48009001l, partsUsed | 0x2l);
07835:       if(!(puzzle & 0x40048009l))
07836:         doSolve32(1, 0x2l, puzzle | 0x40048009l, partsUsed | 0x2l);
07837:     piece2at0at32:
07838:       if (partsUsed & 0x4l) goto piece3at0at32;
07839:       if (!(puzzle & 0x1001001l)) {
07840:          if(!(puzzle & 0x9201001l))
07841:            doSolve32(1, 0x2l, puzzle | 0x9201001l, partsUsed | 0x4l);
07842:          if(!(puzzle & 0x3801001l))
07843:            doSolve32(1, 0x2l, puzzle | 0x3801001l, partsUsed | 0x4l);
07844:          if(!(puzzle & 0x1049001l))
07845:            doSolve32(1, 0x2l, puzzle | 0x1049001l, partsUsed | 0x4l);
07846:       }
07847:       if(!(puzzle & 0xe9l))
07848:         doSolve32(1, 0x2l, puzzle | 0xe9l, partsUsed | 0x4l);
07849:       if(!(puzzle & 0x8008049l))
07850:         doSolve32(1, 0x2l, puzzle | 0x8008049l, partsUsed | 0x4l);
07851:     piece3at0at32:
07852:       if (partsUsed & 0x8l) goto piece4at0at32;
07853:       if(!(puzzle & 0x1201009l))
07854:         doSolve32(1, 0x2l, puzzle | 0x1201009l, partsUsed | 0x8l);
07855:       if(!(puzzle & 0x1801003l))
07856:         doSolve32(1, 0x2l, puzzle | 0x1801003l, partsUsed | 0x8l);
07857:       if(!(puzzle & 0x6bl))
07858:         doSolve32(1, 0x2l, puzzle | 0x6bl, partsUsed | 0x8l);
07859:       if(!(puzzle & 0x40049001l))
07860:         doSolve32(1, 0x2l, puzzle | 0x40049001l, partsUsed | 0x8l);
07861:       if(!(puzzle & 0x48008009l))
07862:         doSolve32(1, 0x2l, puzzle | 0x48008009l, partsUsed | 0x8l);
07863:     piece4at0at32:
07864:       if (partsUsed & 0x10l) goto piece5at0at32;
07865:       if(!(puzzle & 0x49241l))
07866:         doSolve32(1, 0x2l, puzzle | 0x49241l, partsUsed | 0x10l);
07867:     piece5at0at32:
07868:       if (partsUsed & 0x40l) goto piece7at0at32;
07869:       if(!(puzzle & 0x49201l))
07870:         doSolve32(1, 0x2l, puzzle | 0x49201l, partsUsed | 0x40l);
07871:     piece7at0at32:
07872:       if (partsUsed & 0x80l) goto piece8at0at32;
07873:       if(!(puzzle & 0x9001009l))
07874:         doSolve32(1, 0x2l, puzzle | 0x9001009l, partsUsed | 0x80l);
07875:       if(!(puzzle & 0x9008009l))
07876:         doSolve32(1, 0x2l, puzzle | 0x9008009l, partsUsed | 0x80l);
07877:       if(!(puzzle & 0x49041l))
07878:         doSolve32(1, 0x2l, puzzle | 0x49041l, partsUsed | 0x80l);
07879:       if(!(puzzle & 0x41049l))
07880:         doSolve32(1, 0x2l, puzzle | 0x41049l, partsUsed | 0x80l);
07881:       if(!(puzzle & 0xcbl))
07882:         doSolve32(1, 0x2l, puzzle | 0xcbl, partsUsed | 0x80l);
07883:       if(!(puzzle & 0xd3l))
07884:         doSolve32(1, 0x2l, puzzle | 0xd3l, partsUsed | 0x80l);
07885:       if(!(puzzle & 0x3002003l))
07886:         doSolve32(1, 0x2l, puzzle | 0x3002003l, partsUsed | 0x80l);
07887:       if(!(puzzle & 0x3001003l))
07888:         doSolve32(1, 0x2l, puzzle | 0x3001003l, partsUsed | 0x80l);
07889:     piece8at0at32:
07890:       if (partsUsed & 0x100l) goto piece9at0at32;
07891:       if(!(puzzle & 0x1901l))
07892:         doSolve32(1, 0x2l, puzzle | 0x1901l, partsUsed | 0x100l);
07893:       if(!(puzzle & 0x1809l))
07894:         doSolve32(1, 0x2l, puzzle | 0x1809l, partsUsed | 0x100l);
07895:       if(!(puzzle & 0x2403l))
07896:         doSolve32(1, 0x2l, puzzle | 0x2403l, partsUsed | 0x100l);
07897:       if(!(puzzle & 0x200bl))
07898:         doSolve32(1, 0x2l, puzzle | 0x200bl, partsUsed | 0x100l);
07899:       if(!(puzzle & 0x1601l))
07900:         doSolve32(1, 0x2l, puzzle | 0x1601l, partsUsed | 0x100l);
07901:       if(!(puzzle & 0x400dl))
07902:         doSolve32(1, 0x2l, puzzle | 0x400dl, partsUsed | 0x100l);
07903:       if(!(puzzle & 0xd001l))
07904:         doSolve32(1, 0x2l, puzzle | 0xd001l, partsUsed | 0x100l);
07905:       if(!(puzzle & 0x9003l))
07906:         doSolve32(1, 0x2l, puzzle | 0x9003l, partsUsed | 0x100l);
07907:       if(!(puzzle & 0x13001l))
07908:         doSolve32(1, 0x2l, puzzle | 0x13001l, partsUsed | 0x100l);
07909:       if(!(puzzle & 0x18009l))
07910:         doSolve32(1, 0x2l, puzzle | 0x18009l, partsUsed | 0x100l);
07911:       if(!(puzzle & 0x1019l))
07912:         doSolve32(1, 0x2l, puzzle | 0x1019l, partsUsed | 0x100l);
07913:       if(!(puzzle & 0x10013l))
07914:         doSolve32(1, 0x2l, puzzle | 0x10013l, partsUsed | 0x100l);
07915:     piece9at0at32:
07916:       if (partsUsed & 0x200l) goto piece10at0at32;
07917:       if (!(puzzle & 0x1001001l)) {
07918:          if(!(puzzle & 0x1001209l))
07919:            doSolve32(1, 0x2l, puzzle | 0x1001209l, partsUsed | 0x200l);
07920:          if(!(puzzle & 0x1209001l))
07921:            doSolve32(1, 0x2l, puzzle | 0x1209001l, partsUsed | 0x200l);
07922:          if(!(puzzle & 0x9001201l))
07923:            doSolve32(1, 0x2l, puzzle | 0x9001201l, partsUsed | 0x200l);
07924:          if(!(puzzle & 0x1001803l))
07925:            doSolve32(1, 0x2l, puzzle | 0x1001803l, partsUsed | 0x200l);
07926:          if(!(puzzle & 0x3001801l))
07927:            doSolve32(1, 0x2l, puzzle | 0x3001801l, partsUsed | 0x200l);
07928:          if(!(puzzle & 0x1803001l))
07929:            doSolve32(1, 0x2l, puzzle | 0x1803001l, partsUsed | 0x200l);
07930:       }
07931:       if (!(puzzle & 0x9001l)) {
07932:          if(!(puzzle & 0x8009201l))
07933:            doSolve32(1, 0x2l, puzzle | 0x8009201l, partsUsed | 0x200l);
07934:          if(!(puzzle & 0x209201l))
07935:            doSolve32(1, 0x2l, puzzle | 0x209201l, partsUsed | 0x200l);
07936:          if(!(puzzle & 0x8049001l))
07937:            doSolve32(1, 0x2l, puzzle | 0x8049001l, partsUsed | 0x200l);
07938:       }
07939:       if (!(puzzle & 0xdl)) {
07940:          if(!(puzzle & 0x9dl))
07941:            doSolve32(1, 0x2l, puzzle | 0x9dl, partsUsed | 0x200l);
07942:          if(!(puzzle & 0x3dl))
07943:            doSolve32(1, 0x2l, puzzle | 0x3dl, partsUsed | 0x200l);
07944:          if(!(puzzle & 0x4fl))
07945:            doSolve32(1, 0x2l, puzzle | 0x4fl, partsUsed | 0x200l);
07946:          if(!(puzzle & 0xcdl))
07947:            doSolve32(1, 0x2l, puzzle | 0xcdl, partsUsed | 0x200l);
07948:       }
07949:       if(!(puzzle & 0x79l))
07950:         doSolve32(1, 0x2l, puzzle | 0x79l, partsUsed | 0x200l);
07951:       if(!(puzzle & 0x803801l))
07952:         doSolve32(1, 0x2l, puzzle | 0x803801l, partsUsed | 0x200l);
07953:       if(!(puzzle & 0x2003801l))
07954:         doSolve32(1, 0x2l, puzzle | 0x2003801l, partsUsed | 0x200l);
07955:       if(!(puzzle & 0x8048009l))
07956:         doSolve32(1, 0x2l, puzzle | 0x8048009l, partsUsed | 0x200l);
07957:     piece10at0at32:
07958:       if (partsUsed & 0x400l) goto piece11at0at32;
07959:       if (!(puzzle & 0x8009l)) {
07960:          if(!(puzzle & 0x1009009l))
07961:            doSolve32(1, 0x2l, puzzle | 0x1009009l, partsUsed | 0x400l);
07962:          if(!(puzzle & 0x49009l))
07963:            doSolve32(1, 0x2l, puzzle | 0x49009l, partsUsed | 0x400l);
07964:          if(!(puzzle & 0x48049l))
07965:            doSolve32(1, 0x2l, puzzle | 0x48049l, partsUsed | 0x400l);
07966:          if(!(puzzle & 0x9049l))
07967:            doSolve32(1, 0x2l, puzzle | 0x9049l, partsUsed | 0x400l);
07968:          if(!(puzzle & 0x8009009l))
07969:            doSolve32(1, 0x2l, puzzle | 0x8009009l, partsUsed | 0x400l);
07970:       }
07971:       if (!(puzzle & 0x1001001l)) {
07972:          if(!(puzzle & 0x9009001l))
07973:            doSolve32(1, 0x2l, puzzle | 0x9009001l, partsUsed | 0x400l);
07974:          if(!(puzzle & 0x1003003l))
07975:            doSolve32(1, 0x2l, puzzle | 0x1003003l, partsUsed | 0x400l);
07976:          if(!(puzzle & 0x3003001l))
07977:            doSolve32(1, 0x2l, puzzle | 0x3003001l, partsUsed | 0x400l);
07978:       }
07979:       if (!(puzzle & 0x19l)) {
07980:          if(!(puzzle & 0x5bl))
07981:            doSolve32(1, 0x2l, puzzle | 0x5bl, partsUsed | 0x400l);
07982:          if(!(puzzle & 0x9bl))
07983:            doSolve32(1, 0x2l, puzzle | 0x9bl, partsUsed | 0x400l);
07984:          if(!(puzzle & 0xd9l))
07985:            doSolve32(1, 0x2l, puzzle | 0xd9l, partsUsed | 0x400l);
07986:       }
07987:       if(!(puzzle & 0x1201201l))
07988:         doSolve32(1, 0x2l, puzzle | 0x1201201l, partsUsed | 0x400l);
07989:       if(!(puzzle & 0x9209l))
07990:         doSolve32(1, 0x2l, puzzle | 0x9209l, partsUsed | 0x400l);
07991:       if(!(puzzle & 0x1fl))
07992:         doSolve32(1, 0x2l, puzzle | 0x1fl, partsUsed | 0x400l);
07993:       if(!(puzzle & 0x6dl))
07994:         doSolve32(1, 0x2l, puzzle | 0x6dl, partsUsed | 0x400l);
07995:       if(!(puzzle & 0x3803l))
07996:         doSolve32(1, 0x2l, puzzle | 0x3803l, partsUsed | 0x400l);
07997:       if(!(puzzle & 0x1801801l))
07998:         doSolve32(1, 0x2l, puzzle | 0x1801801l, partsUsed | 0x400l);
07999:       if(!(puzzle & 0x2003003l))
08000:         doSolve32(1, 0x2l, puzzle | 0x2003003l, partsUsed | 0x400l);
08001:     piece11at0at32:
08002:       if (partsUsed & 0x800l) goto piece12at0at32;
08003:       if (!(puzzle & 0x1201l)) {
08004:          if(!(puzzle & 0x1b01l))
08005:            doSolve32(1, 0x2l, puzzle | 0x1b01l, partsUsed | 0x800l);
08006:          if(!(puzzle & 0x3601l))
08007:            doSolve32(1, 0x2l, puzzle | 0x3601l, partsUsed | 0x800l);
08008:          if(!(puzzle & 0x3203l))
08009:            doSolve32(1, 0x2l, puzzle | 0x3203l, partsUsed | 0x800l);
08010:       }
08011:       if (!(puzzle & 0x1003l)) {
08012:          if(!(puzzle & 0x3403l))
08013:            doSolve32(1, 0x2l, puzzle | 0x3403l, partsUsed | 0x800l);
08014:          if(!(puzzle & 0x101bl))
08015:            doSolve32(1, 0x2l, puzzle | 0x101bl, partsUsed | 0x800l);
08016:          if(!(puzzle & 0xb003l))
08017:            doSolve32(1, 0x2l, puzzle | 0xb003l, partsUsed | 0x800l);
08018:          if(!(puzzle & 0x300bl))
08019:            doSolve32(1, 0x2l, puzzle | 0x300bl, partsUsed | 0x800l);
08020:          if(!(puzzle & 0x3013l))
08021:            doSolve32(1, 0x2l, puzzle | 0x3013l, partsUsed | 0x800l);
08022:          if(!(puzzle & 0x13003l))
08023:            doSolve32(1, 0x2l, puzzle | 0x13003l, partsUsed | 0x800l);
08024:          if(!(puzzle & 0x900bl))
08025:            doSolve32(1, 0x2l, puzzle | 0x900bl, partsUsed | 0x800l);
08026:       }
08027:       if (!(puzzle & 0xc001l)) {
08028:          if(!(puzzle & 0xd801l))
08029:            doSolve32(1, 0x2l, puzzle | 0xd801l, partsUsed | 0x800l);
08030:          if(!(puzzle & 0xd009l))
08031:            doSolve32(1, 0x2l, puzzle | 0xd009l, partsUsed | 0x800l);
08032:          if(!(puzzle & 0xc00dl))
08033:            doSolve32(1, 0x2l, puzzle | 0xc00dl, partsUsed | 0x800l);
08034:       }
08035:       if (!(puzzle & 0x8009l)) {
08036:          if(!(puzzle & 0x9809l))
08037:            doSolve32(1, 0x2l, puzzle | 0x9809l, partsUsed | 0x800l);
08038:          if(!(puzzle & 0x900dl))
08039:            doSolve32(1, 0x2l, puzzle | 0x900dl, partsUsed | 0x800l);
08040:          if(!(puzzle & 0x18019l))
08041:            doSolve32(1, 0x2l, puzzle | 0x18019l, partsUsed | 0x800l);
08042:          if(!(puzzle & 0xb009l))
08043:            doSolve32(1, 0x2l, puzzle | 0xb009l, partsUsed | 0x800l);
08044:          if(!(puzzle & 0x9019l))
08045:            doSolve32(1, 0x2l, puzzle | 0x9019l, partsUsed | 0x800l);
08046:          if(!(puzzle & 0x801bl))
08047:            doSolve32(1, 0x2l, puzzle | 0x801bl, partsUsed | 0x800l);
08048:          if(!(puzzle & 0x19009l))
08049:            doSolve32(1, 0x2l, puzzle | 0x19009l, partsUsed | 0x800l);
08050:       }
08051:       if (!(puzzle & 0x13l)) {
08052:          if(!(puzzle & 0x12013l))
08053:            doSolve32(1, 0x2l, puzzle | 0x12013l, partsUsed | 0x800l);
08054:          if(!(puzzle & 0x1001bl))
08055:            doSolve32(1, 0x2l, puzzle | 0x1001bl, partsUsed | 0x800l);
08056:          if(!(puzzle & 0x201bl))
08057:            doSolve32(1, 0x2l, puzzle | 0x201bl, partsUsed | 0x800l);
08058:       }
08059:       if(!(puzzle & 0x1b001l))
08060:         doSolve32(1, 0x2l, puzzle | 0x1b001l, partsUsed | 0x800l);
08061:     piece12at0at32:
08062:     break;
08063:    case 1:
08064:       if (partsUsed & 0x2l) goto piece2at1at32;
08065:       if(!(puzzle & 0x402412l))
08066:         doSolve32(2, 0x4l, puzzle | 0x402412l, partsUsed | 0x2l);
08067:       if(!(puzzle & 0x7al))
08068:         doSolve32(2, 0x4l, puzzle | 0x7al, partsUsed | 0x2l);
08069:       if(!(puzzle & 0x1803002l))
08070:         doSolve32(2, 0x4l, puzzle | 0x1803002l, partsUsed | 0x2l);
08071:       if(!(puzzle & 0x90012002l))
08072:         doSolve32(2, 0x4l, puzzle | 0x90012002l, partsUsed | 0x2l);
08073:       if(!(puzzle & 0x80090012l))
08074:         doSolve32(2, 0x4l, puzzle | 0x80090012l, partsUsed | 0x2l);
08075:     piece2at1at32:
08076:       if (partsUsed & 0x4l) goto piece3at1at32;
08077:       if (!(puzzle & 0x2002002l)) {
08078:          if(!(puzzle & 0x12402002l))
08079:            doSolve32(2, 0x4l, puzzle | 0x12402002l, partsUsed | 0x4l);
08080:          if(!(puzzle & 0x2003802l))
08081:            doSolve32(2, 0x4l, puzzle | 0x2003802l, partsUsed | 0x4l);
08082:          if(!(puzzle & 0x2092002l))
08083:            doSolve32(2, 0x4l, puzzle | 0x2092002l, partsUsed | 0x4l);
08084:       }
08085:       if(!(puzzle & 0x9el))
08086:         doSolve32(2, 0x4l, puzzle | 0x9el, partsUsed | 0x4l);
08087:       if(!(puzzle & 0x10010092l))
08088:         doSolve32(2, 0x4l, puzzle | 0x10010092l, partsUsed | 0x4l);
08089:     piece3at1at32:
08090:       if (partsUsed & 0x8l) goto piece4at1at32;
08091:       if(!(puzzle & 0x2402012l))
08092:         doSolve32(2, 0x4l, puzzle | 0x2402012l, partsUsed | 0x8l);
08093:       if(!(puzzle & 0x3el))
08094:         doSolve32(2, 0x4l, puzzle | 0x3el, partsUsed | 0x8l);
08095:       if(!(puzzle & 0x803802l))
08096:         doSolve32(2, 0x4l, puzzle | 0x803802l, partsUsed | 0x8l);
08097:       if(!(puzzle & 0x80092002l))
08098:         doSolve32(2, 0x4l, puzzle | 0x80092002l, partsUsed | 0x8l);
08099:       if(!(puzzle & 0x90010012l))
08100:         doSolve32(2, 0x4l, puzzle | 0x90010012l, partsUsed | 0x8l);
08101:     piece4at1at32:
08102:       if (partsUsed & 0x10l) goto piece5at1at32;
08103:       if(!(puzzle & 0x92482l))
08104:         doSolve32(2, 0x4l, puzzle | 0x92482l, partsUsed | 0x10l);
08105:     piece5at1at32:
08106:       if (partsUsed & 0x40l) goto piece7at1at32;
08107:       if(!(puzzle & 0x92402l))
08108:         doSolve32(2, 0x4l, puzzle | 0x92402l, partsUsed | 0x40l);
08109:     piece7at1at32:
08110:       if (partsUsed & 0x80l) goto piece8at1at32;
08111:       if(!(puzzle & 0x12002012l))
08112:         doSolve32(2, 0x4l, puzzle | 0x12002012l, partsUsed | 0x80l);
08113:       if(!(puzzle & 0x12010012l))
08114:         doSolve32(2, 0x4l, puzzle | 0x12010012l, partsUsed | 0x80l);
08115:       if(!(puzzle & 0x92082l))
08116:         doSolve32(2, 0x4l, puzzle | 0x92082l, partsUsed | 0x80l);
08117:       if(!(puzzle & 0x82092l))
08118:         doSolve32(2, 0x4l, puzzle | 0x82092l, partsUsed | 0x80l);
08119:     piece8at1at32:
08120:       if (partsUsed & 0x100l) goto piece9at1at32;
08121:       if(!(puzzle & 0x3202l))
08122:         doSolve32(2, 0x4l, puzzle | 0x3202l, partsUsed | 0x100l);
08123:       if(!(puzzle & 0x3012l))
08124:         doSolve32(2, 0x4l, puzzle | 0x3012l, partsUsed | 0x100l);
08125:       if(!(puzzle & 0x801al))
08126:         doSolve32(2, 0x4l, puzzle | 0x801al, partsUsed | 0x100l);
08127:       if(!(puzzle & 0x1a002l))
08128:         doSolve32(2, 0x4l, puzzle | 0x1a002l, partsUsed | 0x100l);
08129:     piece9at1at32:
08130:       if (partsUsed & 0x200l) goto piece10at1at32;
08131:       if (!(puzzle & 0x2002002l)) {
08132:          if(!(puzzle & 0x2002412l))
08133:            doSolve32(2, 0x4l, puzzle | 0x2002412l, partsUsed | 0x200l);
08134:          if(!(puzzle & 0x2412002l))
08135:            doSolve32(2, 0x4l, puzzle | 0x2412002l, partsUsed | 0x200l);
08136:          if(!(puzzle & 0x12002402l))
08137:            doSolve32(2, 0x4l, puzzle | 0x12002402l, partsUsed | 0x200l);
08138:       }
08139:       if (!(puzzle & 0x12002l)) {
08140:          if(!(puzzle & 0x10012402l))
08141:            doSolve32(2, 0x4l, puzzle | 0x10012402l, partsUsed | 0x200l);
08142:          if(!(puzzle & 0x412402l))
08143:            doSolve32(2, 0x4l, puzzle | 0x412402l, partsUsed | 0x200l);
08144:          if(!(puzzle & 0x10092002l))
08145:            doSolve32(2, 0x4l, puzzle | 0x10092002l, partsUsed | 0x200l);
08146:       }
08147:       if(!(puzzle & 0x5el))
08148:         doSolve32(2, 0x4l, puzzle | 0x5el, partsUsed | 0x200l);
08149:       if(!(puzzle & 0x1003802l))
08150:         doSolve32(2, 0x4l, puzzle | 0x1003802l, partsUsed | 0x200l);
08151:       if(!(puzzle & 0x10090012l))
08152:         doSolve32(2, 0x4l, puzzle | 0x10090012l, partsUsed | 0x200l);
08153:     piece10at1at32:
08154:       if (partsUsed & 0x400l) goto piece11at1at32;
08155:       if (!(puzzle & 0x92l)) {
08156:          if(!(puzzle & 0xdal))
08157:            doSolve32(2, 0x4l, puzzle | 0xdal, partsUsed | 0x400l);
08158:          if(!(puzzle & 0x90092l))
08159:            doSolve32(2, 0x4l, puzzle | 0x90092l, partsUsed | 0x400l);
08160:          if(!(puzzle & 0x12092l))
08161:            doSolve32(2, 0x4l, puzzle | 0x12092l, partsUsed | 0x400l);
08162:       }
08163:       if (!(puzzle & 0x2002002l)) {
08164:          if(!(puzzle & 0x3003002l))
08165:            doSolve32(2, 0x4l, puzzle | 0x3003002l, partsUsed | 0x400l);
08166:          if(!(puzzle & 0x2012012l))
08167:            doSolve32(2, 0x4l, puzzle | 0x2012012l, partsUsed | 0x400l);
08168:          if(!(puzzle & 0x12012002l))
08169:            doSolve32(2, 0x4l, puzzle | 0x12012002l, partsUsed | 0x400l);
08170:       }
08171:       if(!(puzzle & 0x2402402l))
08172:         doSolve32(2, 0x4l, puzzle | 0x2402402l, partsUsed | 0x400l);
08173:       if(!(puzzle & 0x12412l))
08174:         doSolve32(2, 0x4l, puzzle | 0x12412l, partsUsed | 0x400l);
08175:       if(!(puzzle & 0x92012l))
08176:         doSolve32(2, 0x4l, puzzle | 0x92012l, partsUsed | 0x400l);
08177:       if(!(puzzle & 0x10012012l))
08178:         doSolve32(2, 0x4l, puzzle | 0x10012012l, partsUsed | 0x400l);
08179:     piece11at1at32:
08180:       if (partsUsed & 0x800l) goto piece12at1at32;
08181:       if (!(puzzle & 0x3002l)) {
08182:          if(!(puzzle & 0x3602l))
08183:            doSolve32(2, 0x4l, puzzle | 0x3602l, partsUsed | 0x800l);
08184:          if(!(puzzle & 0x1b002l))
08185:            doSolve32(2, 0x4l, puzzle | 0x1b002l, partsUsed | 0x800l);
08186:          if(!(puzzle & 0x13012l))
08187:            doSolve32(2, 0x4l, puzzle | 0x13012l, partsUsed | 0x800l);
08188:       }
08189:       if (!(puzzle & 0x10012l)) {
08190:          if(!(puzzle & 0x1a012l))
08191:            doSolve32(2, 0x4l, puzzle | 0x1a012l, partsUsed | 0x800l);
08192:          if(!(puzzle & 0x1801al))
08193:            doSolve32(2, 0x4l, puzzle | 0x1801al, partsUsed | 0x800l);
08194:          if(!(puzzle & 0x1201al))
08195:            doSolve32(2, 0x4l, puzzle | 0x1201al, partsUsed | 0x800l);
08196:       }
08197:     piece12at1at32:
08198:     break;
08199:    case 2:
08200:       if (partsUsed & 0x2l) goto piece2at2at32;
08201:       if(!(puzzle & 0x904804l))
08202:         doSolve32(3, 0x8l, puzzle | 0x904804l, partsUsed | 0x2l);
08203:       if(!(puzzle & 0x804824l))
08204:         doSolve32(3, 0x8l, puzzle | 0x804824l, partsUsed | 0x2l);
08205:       if(!(puzzle & 0x1001800cl))
08206:         doSolve32(3, 0x8l, puzzle | 0x1001800cl, partsUsed | 0x2l);
08207:       if(!(puzzle & 0x1800c004l))
08208:         doSolve32(3, 0x8l, puzzle | 0x1800c004l, partsUsed | 0x2l);
08209:     piece2at2at32:
08210:       if (partsUsed & 0x4l) goto piece3at2at32;
08211:       if (!(puzzle & 0x4004004l)) {
08212:          if(!(puzzle & 0x4004904l))
08213:            doSolve32(3, 0x8l, puzzle | 0x4004904l, partsUsed | 0x4l);
08214:          if(!(puzzle & 0x24804004l))
08215:            doSolve32(3, 0x8l, puzzle | 0x24804004l, partsUsed | 0x4l);
08216:          if(!(puzzle & 0x401c004l))
08217:            doSolve32(3, 0x8l, puzzle | 0x401c004l, partsUsed | 0x4l);
08218:       }
08219:       if(!(puzzle & 0x800801cl))
08220:         doSolve32(3, 0x8l, puzzle | 0x800801cl, partsUsed | 0x4l);
08221:     piece3at2at32:
08222:       if (partsUsed & 0x8l) goto piece4at2at32;
08223:       if(!(puzzle & 0x104904l))
08224:         doSolve32(3, 0x8l, puzzle | 0x104904l, partsUsed | 0x8l);
08225:       if(!(puzzle & 0x4804024l))
08226:         doSolve32(3, 0x8l, puzzle | 0x4804024l, partsUsed | 0x8l);
08227:       if(!(puzzle & 0x1001c004l))
08228:         doSolve32(3, 0x8l, puzzle | 0x1001c004l, partsUsed | 0x8l);
08229:       if(!(puzzle & 0x1800800cl))
08230:         doSolve32(3, 0x8l, puzzle | 0x1800800cl, partsUsed | 0x8l);
08231:     piece4at2at32:
08232:       if (partsUsed & 0x40l) goto piece7at2at32;
08233:       if(!(puzzle & 0x24904l))
08234:         doSolve32(3, 0x8l, puzzle | 0x24904l, partsUsed | 0x40l);
08235:     piece7at2at32:
08236:       if (partsUsed & 0x80l) goto piece8at2at32;
08237:       if(!(puzzle & 0x24004024l))
08238:         doSolve32(3, 0x8l, puzzle | 0x24004024l, partsUsed | 0x80l);
08239:       if(!(puzzle & 0x24020024l))
08240:         doSolve32(3, 0x8l, puzzle | 0x24020024l, partsUsed | 0x80l);
08241:       if(!(puzzle & 0xbcl))
08242:         doSolve32(3, 0x8l, puzzle | 0xbcl, partsUsed | 0x80l);
08243:       if(!(puzzle & 0xf4l))
08244:         doSolve32(3, 0x8l, puzzle | 0xf4l, partsUsed | 0x80l);
08245:       if(!(puzzle & 0xc00800cl))
08246:         doSolve32(3, 0x8l, puzzle | 0xc00800cl, partsUsed | 0x80l);
08247:       if(!(puzzle & 0xc00400cl))
08248:         doSolve32(3, 0x8l, puzzle | 0xc00400cl, partsUsed | 0x80l);
08249:       if(!(puzzle & 0x1c014l))
08250:         doSolve32(3, 0x8l, puzzle | 0x1c014l, partsUsed | 0x80l);
08251:       if(!(puzzle & 0x1401cl))
08252:         doSolve32(3, 0x8l, puzzle | 0x1401cl, partsUsed | 0x80l);
08253:     piece8at2at32:
08254:       if (partsUsed & 0x100l) goto piece9at2at32;
08255:       if(!(puzzle & 0x900cl))
08256:         doSolve32(3, 0x8l, puzzle | 0x900cl, partsUsed | 0x100l);
08257:       if(!(puzzle & 0x802cl))
08258:         doSolve32(3, 0x8l, puzzle | 0x802cl, partsUsed | 0x100l);
08259:       if(!(puzzle & 0x5804l))
08260:         doSolve32(3, 0x8l, puzzle | 0x5804l, partsUsed | 0x100l);
08261:       if(!(puzzle & 0x4c004l))
08262:         doSolve32(3, 0x8l, puzzle | 0x4c004l, partsUsed | 0x100l);
08263:       if(!(puzzle & 0x2400cl))
08264:         doSolve32(3, 0x8l, puzzle | 0x2400cl, partsUsed | 0x100l);
08265:       if(!(puzzle & 0x60024l))
08266:         doSolve32(3, 0x8l, puzzle | 0x60024l, partsUsed | 0x100l);
08267:       if(!(puzzle & 0x4064l))
08268:         doSolve32(3, 0x8l, puzzle | 0x4064l, partsUsed | 0x100l);
08269:       if(!(puzzle & 0x4004cl))
08270:         doSolve32(3, 0x8l, puzzle | 0x4004cl, partsUsed | 0x100l);
08271:     piece9at2at32:
08272:       if (partsUsed & 0x200l) goto piece10at2at32;
08273:       if (!(puzzle & 0x4804l)) {
08274:          if(!(puzzle & 0x804904l))
08275:            doSolve32(3, 0x8l, puzzle | 0x804904l, partsUsed | 0x200l);
08276:          if(!(puzzle & 0x4004824l))
08277:            doSolve32(3, 0x8l, puzzle | 0x4004824l, partsUsed | 0x200l);
08278:          if(!(puzzle & 0x20024804l))
08279:            doSolve32(3, 0x8l, puzzle | 0x20024804l, partsUsed | 0x200l);
08280:          if(!(puzzle & 0x24004804l))
08281:            doSolve32(3, 0x8l, puzzle | 0x24004804l, partsUsed | 0x200l);
08282:          if(!(puzzle & 0x824804l))
08283:            doSolve32(3, 0x8l, puzzle | 0x824804l, partsUsed | 0x200l);
08284:       }
08285:       if(!(puzzle & 0x4824004l))
08286:         doSolve32(3, 0x8l, puzzle | 0x4824004l, partsUsed | 0x200l);
08287:       if(!(puzzle & 0x801800cl))
08288:         doSolve32(3, 0x8l, puzzle | 0x801800cl, partsUsed | 0x200l);
08289:       if(!(puzzle & 0x801c004l))
08290:         doSolve32(3, 0x8l, puzzle | 0x801c004l, partsUsed | 0x200l);
08291:     piece10at2at32:
08292:       if (partsUsed & 0x400l) goto piece11at2at32;
08293:       if (!(puzzle & 0x24004l)) {
08294:          if(!(puzzle & 0x4024024l))
08295:            doSolve32(3, 0x8l, puzzle | 0x4024024l, partsUsed | 0x400l);
08296:          if(!(puzzle & 0x24024004l))
08297:            doSolve32(3, 0x8l, puzzle | 0x24024004l, partsUsed | 0x400l);
08298:          if(!(puzzle & 0x20024024l))
08299:            doSolve32(3, 0x8l, puzzle | 0x20024024l, partsUsed | 0x400l);
08300:       }
08301:       if (!(puzzle & 0x4cl)) {
08302:          if(!(puzzle & 0xdcl))
08303:            doSolve32(3, 0x8l, puzzle | 0xdcl, partsUsed | 0x400l);
08304:          if(!(puzzle & 0x7cl))
08305:            doSolve32(3, 0x8l, puzzle | 0x7cl, partsUsed | 0x400l);
08306:          if(!(puzzle & 0xecl))
08307:            doSolve32(3, 0x8l, puzzle | 0xecl, partsUsed | 0x400l);
08308:       }
08309:       if (!(puzzle & 0xc004l)) {
08310:          if(!(puzzle & 0x800c00cl))
08311:            doSolve32(3, 0x8l, puzzle | 0x800c00cl, partsUsed | 0x400l);
08312:          if(!(puzzle & 0x400c00cl))
08313:            doSolve32(3, 0x8l, puzzle | 0x400c00cl, partsUsed | 0x400l);
08314:          if(!(puzzle & 0x1c00cl))
08315:            doSolve32(3, 0x8l, puzzle | 0x1c00cl, partsUsed | 0x400l);
08316:          if(!(puzzle & 0xc00c004l))
08317:            doSolve32(3, 0x8l, puzzle | 0xc00c004l, partsUsed | 0x400l);
08318:          if(!(puzzle & 0xc01cl))
08319:            doSolve32(3, 0x8l, puzzle | 0xc01cl, partsUsed | 0x400l);
08320:       }
08321:       if(!(puzzle & 0x4804804l))
08322:         doSolve32(3, 0x8l, puzzle | 0x4804804l, partsUsed | 0x400l);
08323:       if(!(puzzle & 0x24824l))
08324:         doSolve32(3, 0x8l, puzzle | 0x24824l, partsUsed | 0x400l);
08325:       if(!(puzzle & 0x1801cl))
08326:         doSolve32(3, 0x8l, puzzle | 0x1801cl, partsUsed | 0x400l);
08327:     piece11at2at32:
08328:       if (partsUsed & 0x800l) goto piece12at2at32;
08329:       if (!(puzzle & 0xc004l)) {
08330:          if(!(puzzle & 0xd804l))
08331:            doSolve32(3, 0x8l, puzzle | 0xd804l, partsUsed | 0x800l);
08332:          if(!(puzzle & 0xd00cl))
08333:            doSolve32(3, 0x8l, puzzle | 0xd00cl, partsUsed | 0x800l);
08334:          if(!(puzzle & 0xc80cl))
08335:            doSolve32(3, 0x8l, puzzle | 0xc80cl, partsUsed | 0x800l);
08336:          if(!(puzzle & 0x2c00cl))
08337:            doSolve32(3, 0x8l, puzzle | 0x2c00cl, partsUsed | 0x800l);
08338:          if(!(puzzle & 0x2c024l))
08339:            doSolve32(3, 0x8l, puzzle | 0x2c024l, partsUsed | 0x800l);
08340:          if(!(puzzle & 0xc02cl))
08341:            doSolve32(3, 0x8l, puzzle | 0xc02cl, partsUsed | 0x800l);
08342:          if(!(puzzle & 0xc04cl))
08343:            doSolve32(3, 0x8l, puzzle | 0xc04cl, partsUsed | 0x800l);
08344:          if(!(puzzle & 0x4c00cl))
08345:            doSolve32(3, 0x8l, puzzle | 0x4c00cl, partsUsed | 0x800l);
08346:          if(!(puzzle & 0x6c004l))
08347:            doSolve32(3, 0x8l, puzzle | 0x6c004l, partsUsed | 0x800l);
08348:       }
08349:       if (!(puzzle & 0x64l)) {
08350:          if(!(puzzle & 0x406cl))
08351:            doSolve32(3, 0x8l, puzzle | 0x406cl, partsUsed | 0x800l);
08352:          if(!(puzzle & 0x60064l))
08353:            doSolve32(3, 0x8l, puzzle | 0x60064l, partsUsed | 0x800l);
08354:          if(!(puzzle & 0x24064l))
08355:            doSolve32(3, 0x8l, puzzle | 0x24064l, partsUsed | 0x800l);
08356:          if(!(puzzle & 0x4006cl))
08357:            doSolve32(3, 0x8l, puzzle | 0x4006cl, partsUsed | 0x800l);
08358:          if(!(puzzle & 0x806cl))
08359:            doSolve32(3, 0x8l, puzzle | 0x806cl, partsUsed | 0x800l);
08360:          if(!(puzzle & 0x2006cl))
08361:            doSolve32(3, 0x8l, puzzle | 0x2006cl, partsUsed | 0x800l);
08362:       }
08363:       if(!(puzzle & 0x4804cl))
08364:         doSolve32(3, 0x8l, puzzle | 0x4804cl, partsUsed | 0x800l);
08365:       if(!(puzzle & 0x64024l))
08366:         doSolve32(3, 0x8l, puzzle | 0x64024l, partsUsed | 0x800l);
08367:       if(!(puzzle & 0x2402cl))
08368:         doSolve32(3, 0x8l, puzzle | 0x2402cl, partsUsed | 0x800l);
08369:     piece12at2at32:
08370:     break;
08371:    case 3:
08372:       if (partsUsed & 0x2l) goto piece2at3at32;
08373:       if(!(puzzle & 0x400c018l))
08374:         doSolve32(4, 0x10l, puzzle | 0x400c018l, partsUsed | 0x2l);
08375:       if(!(puzzle & 0x1209008l))
08376:         doSolve32(4, 0x10l, puzzle | 0x1209008l, partsUsed | 0x2l);
08377:       if(!(puzzle & 0x1009048l))
08378:         doSolve32(4, 0x10l, puzzle | 0x1009048l, partsUsed | 0x2l);
08379:     piece2at3at32:
08380:       if (partsUsed & 0x4l) goto piece3at3at32;
08381:       if (!(puzzle & 0x8008008l)) {
08382:          if(!(puzzle & 0x8009208l))
08383:            doSolve32(4, 0x10l, puzzle | 0x8009208l, partsUsed | 0x4l);
08384:          if(!(puzzle & 0x49008008l))
08385:            doSolve32(4, 0x10l, puzzle | 0x49008008l, partsUsed | 0x4l);
08386:          if(!(puzzle & 0x1c008008l))
08387:            doSolve32(4, 0x10l, puzzle | 0x1c008008l, partsUsed | 0x4l);
08388:       }
08389:     piece3at3at32:
08390:       if (partsUsed & 0x8l) goto piece4at3at32;
08391:       if(!(puzzle & 0x209208l))
08392:         doSolve32(4, 0x10l, puzzle | 0x209208l, partsUsed | 0x8l);
08393:       if(!(puzzle & 0x9008048l))
08394:         doSolve32(4, 0x10l, puzzle | 0x9008048l, partsUsed | 0x8l);
08395:       if(!(puzzle & 0xc008018l))
08396:         doSolve32(4, 0x10l, puzzle | 0xc008018l, partsUsed | 0x8l);
08397:     piece4at3at32:
08398:       if (partsUsed & 0x40l) goto piece7at3at32;
08399:       if(!(puzzle & 0x49208l))
08400:         doSolve32(4, 0x10l, puzzle | 0x49208l, partsUsed | 0x40l);
08401:     piece7at3at32:
08402:       if (partsUsed & 0x80l) goto piece8at3at32;
08403:       if(!(puzzle & 0x48008048l))
08404:         doSolve32(4, 0x10l, puzzle | 0x48008048l, partsUsed | 0x80l);
08405:       if(!(puzzle & 0x48040048l))
08406:         doSolve32(4, 0x10l, puzzle | 0x48040048l, partsUsed | 0x80l);
08407:       if(!(puzzle & 0x18010018l))
08408:         doSolve32(4, 0x10l, puzzle | 0x18010018l, partsUsed | 0x80l);
08409:       if(!(puzzle & 0x18008018l))
08410:         doSolve32(4, 0x10l, puzzle | 0x18008018l, partsUsed | 0x80l);
08411:     piece8at3at32:
08412:       if (partsUsed & 0x100l) goto piece9at3at32;
08413:       if(!(puzzle & 0xc808l))
08414:         doSolve32(4, 0x10l, puzzle | 0xc808l, partsUsed | 0x100l);
08415:       if(!(puzzle & 0xc048l))
08416:         doSolve32(4, 0x10l, puzzle | 0xc048l, partsUsed | 0x100l);
08417:       if(!(puzzle & 0x12018l))
08418:         doSolve32(4, 0x10l, puzzle | 0x12018l, partsUsed | 0x100l);
08419:       if(!(puzzle & 0x10058l))
08420:         doSolve32(4, 0x10l, puzzle | 0x10058l, partsUsed | 0x100l);
08421:       if(!(puzzle & 0xb008l))
08422:         doSolve32(4, 0x10l, puzzle | 0xb008l, partsUsed | 0x100l);
08423:       if(!(puzzle & 0x20068l))
08424:         doSolve32(4, 0x10l, puzzle | 0x20068l, partsUsed | 0x100l);
08425:       if(!(puzzle & 0x68008l))
08426:         doSolve32(4, 0x10l, puzzle | 0x68008l, partsUsed | 0x100l);
08427:       if(!(puzzle & 0x48018l))
08428:         doSolve32(4, 0x10l, puzzle | 0x48018l, partsUsed | 0x100l);
08429:       if(!(puzzle & 0x98008l))
08430:         doSolve32(4, 0x10l, puzzle | 0x98008l, partsUsed | 0x100l);
08431:       if(!(puzzle & 0xc0048l))
08432:         doSolve32(4, 0x10l, puzzle | 0xc0048l, partsUsed | 0x100l);
08433:       if(!(puzzle & 0x80c8l))
08434:         doSolve32(4, 0x10l, puzzle | 0x80c8l, partsUsed | 0x100l);
08435:       if(!(puzzle & 0x80098l))
08436:         doSolve32(4, 0x10l, puzzle | 0x80098l, partsUsed | 0x100l);
08437:     piece9at3at32:
08438:       if (partsUsed & 0x200l) goto piece10at3at32;
08439:       if (!(puzzle & 0x9008l)) {
08440:          if(!(puzzle & 0x1009208l))
08441:            doSolve32(4, 0x10l, puzzle | 0x1009208l, partsUsed | 0x200l);
08442:          if(!(puzzle & 0x8009048l))
08443:            doSolve32(4, 0x10l, puzzle | 0x8009048l, partsUsed | 0x200l);
08444:          if(!(puzzle & 0x40049008l))
08445:            doSolve32(4, 0x10l, puzzle | 0x40049008l, partsUsed | 0x200l);
08446:          if(!(puzzle & 0x48009008l))
08447:            doSolve32(4, 0x10l, puzzle | 0x48009008l, partsUsed | 0x200l);
08448:          if(!(puzzle & 0x1049008l))
08449:            doSolve32(4, 0x10l, puzzle | 0x1049008l, partsUsed | 0x200l);
08450:       }
08451:       if (!(puzzle & 0x8008008l)) {
08452:          if(!(puzzle & 0x9048008l))
08453:            doSolve32(4, 0x10l, puzzle | 0x9048008l, partsUsed | 0x200l);
08454:          if(!(puzzle & 0x800c018l))
08455:            doSolve32(4, 0x10l, puzzle | 0x800c018l, partsUsed | 0x200l);
08456:          if(!(puzzle & 0x1800c008l))
08457:            doSolve32(4, 0x10l, puzzle | 0x1800c008l, partsUsed | 0x200l);
08458:          if(!(puzzle & 0xc018008l))
08459:            doSolve32(4, 0x10l, puzzle | 0xc018008l, partsUsed | 0x200l);
08460:       }
08461:       if(!(puzzle & 0x401c008l))
08462:         doSolve32(4, 0x10l, puzzle | 0x401c008l, partsUsed | 0x200l);
08463:       if(!(puzzle & 0x1001c008l))
08464:         doSolve32(4, 0x10l, puzzle | 0x1001c008l, partsUsed | 0x200l);
08465:     piece10at3at32:
08466:       if (partsUsed & 0x400l) goto piece11at3at32;
08467:       if (!(puzzle & 0x48008l)) {
08468:          if(!(puzzle & 0x8048048l))
08469:            doSolve32(4, 0x10l, puzzle | 0x8048048l, partsUsed | 0x400l);
08470:          if(!(puzzle & 0x48048008l))
08471:            doSolve32(4, 0x10l, puzzle | 0x48048008l, partsUsed | 0x400l);
08472:          if(!(puzzle & 0x40048048l))
08473:            doSolve32(4, 0x10l, puzzle | 0x40048048l, partsUsed | 0x400l);
08474:       }
08475:       if (!(puzzle & 0x18008l)) {
08476:          if(!(puzzle & 0x10018018l))
08477:            doSolve32(4, 0x10l, puzzle | 0x10018018l, partsUsed | 0x400l);
08478:          if(!(puzzle & 0x8018018l))
08479:            doSolve32(4, 0x10l, puzzle | 0x8018018l, partsUsed | 0x400l);
08480:          if(!(puzzle & 0x18018008l))
08481:            doSolve32(4, 0x10l, puzzle | 0x18018008l, partsUsed | 0x400l);
08482:       }
08483:       if(!(puzzle & 0x9009008l))
08484:         doSolve32(4, 0x10l, puzzle | 0x9009008l, partsUsed | 0x400l);
08485:       if(!(puzzle & 0x49048l))
08486:         doSolve32(4, 0x10l, puzzle | 0x49048l, partsUsed | 0x400l);
08487:       if(!(puzzle & 0xf8l))
08488:         doSolve32(4, 0x10l, puzzle | 0xf8l, partsUsed | 0x400l);
08489:       if(!(puzzle & 0x1c018l))
08490:         doSolve32(4, 0x10l, puzzle | 0x1c018l, partsUsed | 0x400l);
08491:       if(!(puzzle & 0xc00c008l))
08492:         doSolve32(4, 0x10l, puzzle | 0xc00c008l, partsUsed | 0x400l);
08493:     piece11at3at32:
08494:       if (partsUsed & 0x800l) goto piece12at3at32;
08495:       if (!(puzzle & 0x9008l)) {
08496:          if(!(puzzle & 0xd808l))
08497:            doSolve32(4, 0x10l, puzzle | 0xd808l, partsUsed | 0x800l);
08498:          if(!(puzzle & 0x1b008l))
08499:            doSolve32(4, 0x10l, puzzle | 0x1b008l, partsUsed | 0x800l);
08500:          if(!(puzzle & 0x19018l))
08501:            doSolve32(4, 0x10l, puzzle | 0x19018l, partsUsed | 0x800l);
08502:       }
08503:       if (!(puzzle & 0x8018l)) {
08504:          if(!(puzzle & 0x1a018l))
08505:            doSolve32(4, 0x10l, puzzle | 0x1a018l, partsUsed | 0x800l);
08506:          if(!(puzzle & 0x80d8l))
08507:            doSolve32(4, 0x10l, puzzle | 0x80d8l, partsUsed | 0x800l);
08508:          if(!(puzzle & 0x58018l))
08509:            doSolve32(4, 0x10l, puzzle | 0x58018l, partsUsed | 0x800l);
08510:          if(!(puzzle & 0x18058l))
08511:            doSolve32(4, 0x10l, puzzle | 0x18058l, partsUsed | 0x800l);
08512:          if(!(puzzle & 0x18098l))
08513:            doSolve32(4, 0x10l, puzzle | 0x18098l, partsUsed | 0x800l);
08514:          if(!(puzzle & 0x98018l))
08515:            doSolve32(4, 0x10l, puzzle | 0x98018l, partsUsed | 0x800l);
08516:          if(!(puzzle & 0x48058l))
08517:            doSolve32(4, 0x10l, puzzle | 0x48058l, partsUsed | 0x800l);
08518:       }
08519:       if (!(puzzle & 0x60008l)) {
08520:          if(!(puzzle & 0x6c008l))
08521:            doSolve32(4, 0x10l, puzzle | 0x6c008l, partsUsed | 0x800l);
08522:          if(!(puzzle & 0x68048l))
08523:            doSolve32(4, 0x10l, puzzle | 0x68048l, partsUsed | 0x800l);
08524:          if(!(puzzle & 0x60068l))
08525:            doSolve32(4, 0x10l, puzzle | 0x60068l, partsUsed | 0x800l);
08526:       }
08527:       if (!(puzzle & 0x40048l)) {
08528:          if(!(puzzle & 0x4c048l))
08529:            doSolve32(4, 0x10l, puzzle | 0x4c048l, partsUsed | 0x800l);
08530:          if(!(puzzle & 0x48068l))
08531:            doSolve32(4, 0x10l, puzzle | 0x48068l, partsUsed | 0x800l);
08532:          if(!(puzzle & 0xc00c8l))
08533:            doSolve32(4, 0x10l, puzzle | 0xc00c8l, partsUsed | 0x800l);
08534:          if(!(puzzle & 0x58048l))
08535:            doSolve32(4, 0x10l, puzzle | 0x58048l, partsUsed | 0x800l);
08536:          if(!(puzzle & 0x480c8l))
08537:            doSolve32(4, 0x10l, puzzle | 0x480c8l, partsUsed | 0x800l);
08538:          if(!(puzzle & 0x400d8l))
08539:            doSolve32(4, 0x10l, puzzle | 0x400d8l, partsUsed | 0x800l);
08540:          if(!(puzzle & 0xc8048l))
08541:            doSolve32(4, 0x10l, puzzle | 0xc8048l, partsUsed | 0x800l);
08542:       }
08543:       if (!(puzzle & 0x98l)) {
08544:          if(!(puzzle & 0x90098l))
08545:            doSolve32(4, 0x10l, puzzle | 0x90098l, partsUsed | 0x800l);
08546:          if(!(puzzle & 0x800d8l))
08547:            doSolve32(4, 0x10l, puzzle | 0x800d8l, partsUsed | 0x800l);
08548:          if(!(puzzle & 0x100d8l))
08549:            doSolve32(4, 0x10l, puzzle | 0x100d8l, partsUsed | 0x800l);
08550:       }
08551:       if(!(puzzle & 0xd8008l))
08552:         doSolve32(4, 0x10l, puzzle | 0xd8008l, partsUsed | 0x800l);
08553:     piece12at3at32:
08554:     break;
08555:    case 4:
08556:       if (partsUsed & 0x2l) goto piece2at4at32;
08557:       if(!(puzzle & 0xc018010l))
08558:         doSolve32(5, 0x20l, puzzle | 0xc018010l, partsUsed | 0x2l);
08559:       if(!(puzzle & 0x2412010l))
08560:         doSolve32(5, 0x20l, puzzle | 0x2412010l, partsUsed | 0x2l);
08561:       if(!(puzzle & 0x2012090l))
08562:         doSolve32(5, 0x20l, puzzle | 0x2012090l, partsUsed | 0x2l);
08563:     piece2at4at32:
08564:       if (partsUsed & 0x4l) goto piece3at4at32;
08565:       if (!(puzzle & 0x10010010l)) {
08566:          if(!(puzzle & 0x10012410l))
08567:            doSolve32(5, 0x20l, puzzle | 0x10012410l, partsUsed | 0x4l);
08568:          if(!(puzzle & 0x92010010l))
08569:            doSolve32(5, 0x20l, puzzle | 0x92010010l, partsUsed | 0x4l);
08570:          if(!(puzzle & 0x1001c010l))
08571:            doSolve32(5, 0x20l, puzzle | 0x1001c010l, partsUsed | 0x4l);
08572:       }
08573:     piece3at4at32:
08574:       if (partsUsed & 0x8l) goto piece4at4at32;
08575:       if(!(puzzle & 0x401c010l))
08576:         doSolve32(5, 0x20l, puzzle | 0x401c010l, partsUsed | 0x8l);
08577:       if(!(puzzle & 0x412410l))
08578:         doSolve32(5, 0x20l, puzzle | 0x412410l, partsUsed | 0x8l);
08579:       if(!(puzzle & 0x12010090l))
08580:         doSolve32(5, 0x20l, puzzle | 0x12010090l, partsUsed | 0x8l);
08581:     piece4at4at32:
08582:       if (partsUsed & 0x40l) goto piece7at4at32;
08583:       if(!(puzzle & 0x92410l))
08584:         doSolve32(5, 0x20l, puzzle | 0x92410l, partsUsed | 0x40l);
08585:     piece7at4at32:
08586:       if (partsUsed & 0x80l) goto piece8at4at32;
08587:       if(!(puzzle & 0x90010090l))
08588:         doSolve32(5, 0x20l, puzzle | 0x90010090l, partsUsed | 0x80l);
08589:       if(!(puzzle & 0x90080090l))
08590:         doSolve32(5, 0x20l, puzzle | 0x90080090l, partsUsed | 0x80l);
08591:     piece8at4at32:
08592:       if (partsUsed & 0x100l) goto piece9at4at32;
08593:       if(!(puzzle & 0x19010l))
08594:         doSolve32(5, 0x20l, puzzle | 0x19010l, partsUsed | 0x100l);
08595:       if(!(puzzle & 0x18090l))
08596:         doSolve32(5, 0x20l, puzzle | 0x18090l, partsUsed | 0x100l);
08597:       if(!(puzzle & 0x400d0l))
08598:         doSolve32(5, 0x20l, puzzle | 0x400d0l, partsUsed | 0x100l);
08599:       if(!(puzzle & 0xd0010l))
08600:         doSolve32(5, 0x20l, puzzle | 0xd0010l, partsUsed | 0x100l);
08601:     piece9at4at32:
08602:       if (partsUsed & 0x200l) goto piece10at4at32;
08603:       if (!(puzzle & 0x12010l)) {
08604:          if(!(puzzle & 0x2012410l))
08605:            doSolve32(5, 0x20l, puzzle | 0x2012410l, partsUsed | 0x200l);
08606:          if(!(puzzle & 0x10012090l))
08607:            doSolve32(5, 0x20l, puzzle | 0x10012090l, partsUsed | 0x200l);
08608:          if(!(puzzle & 0x80092010l))
08609:            doSolve32(5, 0x20l, puzzle | 0x80092010l, partsUsed | 0x200l);
08610:          if(!(puzzle & 0x90012010l))
08611:            doSolve32(5, 0x20l, puzzle | 0x90012010l, partsUsed | 0x200l);
08612:          if(!(puzzle & 0x2092010l))
08613:            doSolve32(5, 0x20l, puzzle | 0x2092010l, partsUsed | 0x200l);
08614:       }
08615:       if(!(puzzle & 0x12090010l))
08616:         doSolve32(5, 0x20l, puzzle | 0x12090010l, partsUsed | 0x200l);
08617:       if(!(puzzle & 0x801c010l))
08618:         doSolve32(5, 0x20l, puzzle | 0x801c010l, partsUsed | 0x200l);
08619:     piece10at4at32:
08620:       if (partsUsed & 0x400l) goto piece11at4at32;
08621:       if (!(puzzle & 0x10010010l)) {
08622:          if(!(puzzle & 0x18018010l))
08623:            doSolve32(5, 0x20l, puzzle | 0x18018010l, partsUsed | 0x400l);
08624:          if(!(puzzle & 0x10090090l))
08625:            doSolve32(5, 0x20l, puzzle | 0x10090090l, partsUsed | 0x400l);
08626:          if(!(puzzle & 0x90090010l))
08627:            doSolve32(5, 0x20l, puzzle | 0x90090010l, partsUsed | 0x400l);
08628:       }
08629:       if(!(puzzle & 0x12012010l))
08630:         doSolve32(5, 0x20l, puzzle | 0x12012010l, partsUsed | 0x400l);
08631:       if(!(puzzle & 0x92090l))
08632:         doSolve32(5, 0x20l, puzzle | 0x92090l, partsUsed | 0x400l);
08633:       if(!(puzzle & 0x80090090l))
08634:         doSolve32(5, 0x20l, puzzle | 0x80090090l, partsUsed | 0x400l);
08635:     piece11at4at32:
08636:       if (partsUsed & 0x800l) goto piece12at4at32;
08637:       if (!(puzzle & 0x18010l)) {
08638:          if(!(puzzle & 0x1b010l))
08639:            doSolve32(5, 0x20l, puzzle | 0x1b010l, partsUsed | 0x800l);
08640:          if(!(puzzle & 0xd8010l))
08641:            doSolve32(5, 0x20l, puzzle | 0xd8010l, partsUsed | 0x800l);
08642:          if(!(puzzle & 0x98090l))
08643:            doSolve32(5, 0x20l, puzzle | 0x98090l, partsUsed | 0x800l);
08644:       }
08645:       if (!(puzzle & 0x80090l)) {
08646:          if(!(puzzle & 0xd0090l))
08647:            doSolve32(5, 0x20l, puzzle | 0xd0090l, partsUsed | 0x800l);
08648:          if(!(puzzle & 0xc00d0l))
08649:            doSolve32(5, 0x20l, puzzle | 0xc00d0l, partsUsed | 0x800l);
08650:          if(!(puzzle & 0x900d0l))
08651:            doSolve32(5, 0x20l, puzzle | 0x900d0l, partsUsed | 0x800l);
08652:       }
08653:     piece12at4at32:
08654:     break;
08655:    case 5:
08656:       if (partsUsed & 0x2l) goto piece2at5at32;
08657:       if(!(puzzle & 0x4824020l))
08658:         doSolve32(6, 0x40l, puzzle | 0x4824020l, partsUsed | 0x2l);
08659:       if(!(puzzle & 0x800c0060l))
08660:         doSolve32(6, 0x40l, puzzle | 0x800c0060l, partsUsed | 0x2l);
08661:       if(!(puzzle & 0xc0060020l))
08662:         doSolve32(6, 0x40l, puzzle | 0xc0060020l, partsUsed | 0x2l);
08663:     piece2at5at32:
08664:       if (partsUsed & 0x4l) goto piece3at5at32;
08665:       if(!(puzzle & 0x400400e0l))
08666:         doSolve32(6, 0x40l, puzzle | 0x400400e0l, partsUsed | 0x4l);
08667:       if(!(puzzle & 0x20024820l))
08668:         doSolve32(6, 0x40l, puzzle | 0x20024820l, partsUsed | 0x4l);
08669:       if(!(puzzle & 0x200e0020l))
08670:         doSolve32(6, 0x40l, puzzle | 0x200e0020l, partsUsed | 0x4l);
08671:     piece3at5at32:
08672:       if (partsUsed & 0x8l) goto piece4at5at32;
08673:       if(!(puzzle & 0x824820l))
08674:         doSolve32(6, 0x40l, puzzle | 0x824820l, partsUsed | 0x8l);
08675:       if(!(puzzle & 0x800e0020l))
08676:         doSolve32(6, 0x40l, puzzle | 0x800e0020l, partsUsed | 0x8l);
08677:       if(!(puzzle & 0xc0040060l))
08678:         doSolve32(6, 0x40l, puzzle | 0xc0040060l, partsUsed | 0x8l);
08679:     piece4at5at32:
08680:       if (partsUsed & 0x20l) goto piece6at5at32;
08681:       if(!(puzzle & 0x24920l))
08682:         doSolve32(6, 0x40l, puzzle | 0x24920l, partsUsed | 0x20l);
08683:     piece6at5at32:
08684:       if (partsUsed & 0x80l) goto piece8at5at32;
08685:       if(!(puzzle & 0x60040060l))
08686:         doSolve32(6, 0x40l, puzzle | 0x60040060l, partsUsed | 0x80l);
08687:       if(!(puzzle & 0x60020060l))
08688:         doSolve32(6, 0x40l, puzzle | 0x60020060l, partsUsed | 0x80l);
08689:       if(!(puzzle & 0xe00a0l))
08690:         doSolve32(6, 0x40l, puzzle | 0xe00a0l, partsUsed | 0x80l);
08691:       if(!(puzzle & 0xa00e0l))
08692:         doSolve32(6, 0x40l, puzzle | 0xa00e0l, partsUsed | 0x80l);
08693:     piece8at5at32:
08694:       if (partsUsed & 0x100l) goto piece9at5at32;
08695:       if(!(puzzle & 0x48060l))
08696:         doSolve32(6, 0x40l, puzzle | 0x48060l, partsUsed | 0x100l);
08697:       if(!(puzzle & 0x2c020l))
08698:         doSolve32(6, 0x40l, puzzle | 0x2c020l, partsUsed | 0x100l);
08699:     piece9at5at32:
08700:       if (partsUsed & 0x200l) goto piece10at5at32;
08701:       if(!(puzzle & 0x4024820l))
08702:         doSolve32(6, 0x40l, puzzle | 0x4024820l, partsUsed | 0x200l);
08703:       if(!(puzzle & 0x400c0060l))
08704:         doSolve32(6, 0x40l, puzzle | 0x400c0060l, partsUsed | 0x200l);
08705:       if(!(puzzle & 0x400e0020l))
08706:         doSolve32(6, 0x40l, puzzle | 0x400e0020l, partsUsed | 0x200l);
08707:     piece10at5at32:
08708:       if (partsUsed & 0x400l) goto piece11at5at32;
08709:       if (!(puzzle & 0x20020020l)) {
08710:          if(!(puzzle & 0x24024020l))
08711:            doSolve32(6, 0x40l, puzzle | 0x24024020l, partsUsed | 0x400l);
08712:          if(!(puzzle & 0x20060060l))
08713:            doSolve32(6, 0x40l, puzzle | 0x20060060l, partsUsed | 0x400l);
08714:          if(!(puzzle & 0x60060020l))
08715:            doSolve32(6, 0x40l, puzzle | 0x60060020l, partsUsed | 0x400l);
08716:       }
08717:       if (!(puzzle & 0x40060l)) {
08718:          if(!(puzzle & 0x40060060l))
08719:            doSolve32(6, 0x40l, puzzle | 0x40060060l, partsUsed | 0x400l);
08720:          if(!(puzzle & 0xe0060l))
08721:            doSolve32(6, 0x40l, puzzle | 0xe0060l, partsUsed | 0x400l);
08722:          if(!(puzzle & 0x600e0l))
08723:            doSolve32(6, 0x40l, puzzle | 0x600e0l, partsUsed | 0x400l);
08724:          if(!(puzzle & 0xc00e0l))
08725:            doSolve32(6, 0x40l, puzzle | 0xc00e0l, partsUsed | 0x400l);
08726:       }
08727:     piece11at5at32:
08728:       if (partsUsed & 0x800l) goto piece12at5at32;
08729:       if (!(puzzle & 0x60020l)) {
08730:          if(!(puzzle & 0x6c020l))
08731:            doSolve32(6, 0x40l, puzzle | 0x6c020l, partsUsed | 0x800l);
08732:          if(!(puzzle & 0x68060l))
08733:            doSolve32(6, 0x40l, puzzle | 0x68060l, partsUsed | 0x800l);
08734:          if(!(puzzle & 0x64060l))
08735:            doSolve32(6, 0x40l, puzzle | 0x64060l, partsUsed | 0x800l);
08736:       }
08737:     piece12at5at32:
08738:     break;
08739:    case 6:
08740:       if (partsUsed & 0x2l) goto piece2at6at32;
08741:       if(!(puzzle & 0x9048040l))
08742:         doSolve32(7, 0x80l, puzzle | 0x9048040l, partsUsed | 0x2l);
08743:       if(!(puzzle & 0x200600c0l))
08744:         doSolve32(7, 0x80l, puzzle | 0x200600c0l, partsUsed | 0x2l);
08745:     piece2at6at32:
08746:       if (partsUsed & 0x4l) goto piece3at6at32;
08747:       if(!(puzzle & 0x40049040l))
08748:         doSolve32(7, 0x80l, puzzle | 0x40049040l, partsUsed | 0x4l);
08749:       if(!(puzzle & 0xe0040040l))
08750:         doSolve32(7, 0x80l, puzzle | 0xe0040040l, partsUsed | 0x4l);
08751:     piece3at6at32:
08752:       if (partsUsed & 0x8l) goto piece4at6at32;
08753:       if(!(puzzle & 0x1049040l))
08754:         doSolve32(7, 0x80l, puzzle | 0x1049040l, partsUsed | 0x8l);
08755:       if(!(puzzle & 0x600400c0l))
08756:         doSolve32(7, 0x80l, puzzle | 0x600400c0l, partsUsed | 0x8l);
08757:     piece4at6at32:
08758:       if (partsUsed & 0x20l) goto piece6at6at32;
08759:       if(!(puzzle & 0x49240l))
08760:         doSolve32(7, 0x80l, puzzle | 0x49240l, partsUsed | 0x20l);
08761:     piece6at6at32:
08762:       if (partsUsed & 0x80l) goto piece8at6at32;
08763:       if(!(puzzle & 0xc00800c0l))
08764:         doSolve32(7, 0x80l, puzzle | 0xc00800c0l, partsUsed | 0x80l);
08765:       if(!(puzzle & 0xc00400c0l))
08766:         doSolve32(7, 0x80l, puzzle | 0xc00400c0l, partsUsed | 0x80l);
08767:     piece8at6at32:
08768:       if (partsUsed & 0x100l) goto piece9at6at32;
08769:       if(!(puzzle & 0x58040l))
08770:         doSolve32(7, 0x80l, puzzle | 0x58040l, partsUsed | 0x100l);
08771:       if(!(puzzle & 0x64040l))
08772:         doSolve32(7, 0x80l, puzzle | 0x64040l, partsUsed | 0x100l);
08773:       if(!(puzzle & 0x900c0l))
08774:         doSolve32(7, 0x80l, puzzle | 0x900c0l, partsUsed | 0x100l);
08775:     piece9at6at32:
08776:       if (partsUsed & 0x200l) goto piece10at6at32;
08777:       if (!(puzzle & 0x40040040l)) {
08778:          if(!(puzzle & 0x400600c0l))
08779:            doSolve32(7, 0x80l, puzzle | 0x400600c0l, partsUsed | 0x200l);
08780:          if(!(puzzle & 0xc0060040l))
08781:            doSolve32(7, 0x80l, puzzle | 0xc0060040l, partsUsed | 0x200l);
08782:          if(!(puzzle & 0x600c0040l))
08783:            doSolve32(7, 0x80l, puzzle | 0x600c0040l, partsUsed | 0x200l);
08784:       }
08785:       if(!(puzzle & 0x8049040l))
08786:         doSolve32(7, 0x80l, puzzle | 0x8049040l, partsUsed | 0x200l);
08787:       if(!(puzzle & 0x200e0040l))
08788:         doSolve32(7, 0x80l, puzzle | 0x200e0040l, partsUsed | 0x200l);
08789:       if(!(puzzle & 0x800e0040l))
08790:         doSolve32(7, 0x80l, puzzle | 0x800e0040l, partsUsed | 0x200l);
08791:     piece10at6at32:
08792:       if (partsUsed & 0x400l) goto piece11at6at32;
08793:       if (!(puzzle & 0x40040040l)) {
08794:          if(!(puzzle & 0x48048040l))
08795:            doSolve32(7, 0x80l, puzzle | 0x48048040l, partsUsed | 0x400l);
08796:          if(!(puzzle & 0x60060040l))
08797:            doSolve32(7, 0x80l, puzzle | 0x60060040l, partsUsed | 0x400l);
08798:          if(!(puzzle & 0x400c00c0l))
08799:            doSolve32(7, 0x80l, puzzle | 0x400c00c0l, partsUsed | 0x400l);
08800:          if(!(puzzle & 0xc00c0040l))
08801:            doSolve32(7, 0x80l, puzzle | 0xc00c0040l, partsUsed | 0x400l);
08802:       }
08803:       if(!(puzzle & 0xe00c0l))
08804:         doSolve32(7, 0x80l, puzzle | 0xe00c0l, partsUsed | 0x400l);
08805:       if(!(puzzle & 0x800c00c0l))
08806:         doSolve32(7, 0x80l, puzzle | 0x800c00c0l, partsUsed | 0x400l);
08807:     piece11at6at32:
08808:       if (partsUsed & 0x800l) goto piece12at6at32;
08809:       if (!(puzzle & 0x48040l)) {
08810:          if(!(puzzle & 0x6c040l))
08811:            doSolve32(7, 0x80l, puzzle | 0x6c040l, partsUsed | 0x800l);
08812:          if(!(puzzle & 0xd8040l))
08813:            doSolve32(7, 0x80l, puzzle | 0xd8040l, partsUsed | 0x800l);
08814:          if(!(puzzle & 0xc80c0l))
08815:            doSolve32(7, 0x80l, puzzle | 0xc80c0l, partsUsed | 0x800l);
08816:       }
08817:       if(!(puzzle & 0xd00c0l))
08818:         doSolve32(7, 0x80l, puzzle | 0xd00c0l, partsUsed | 0x800l);
08819:     piece12at6at32:
08820:     break;
08821:    case 7:
08822:       if (partsUsed & 0x2l) goto piece2at7at32;
08823:       if(!(puzzle & 0x12090080l))
08824:         doSolve32(8, 0x100l, puzzle | 0x12090080l, partsUsed | 0x2l);
08825:       if(!(puzzle & 0x600c0080l))
08826:         doSolve32(8, 0x100l, puzzle | 0x600c0080l, partsUsed | 0x2l);
08827:     piece2at7at32:
08828:       if (partsUsed & 0x4l) goto piece3at7at32;
08829:       if(!(puzzle & 0x80092080l))
08830:         doSolve32(8, 0x100l, puzzle | 0x80092080l, partsUsed | 0x4l);
08831:       if(!(puzzle & 0x800e0080l))
08832:         doSolve32(8, 0x100l, puzzle | 0x800e0080l, partsUsed | 0x4l);
08833:     piece3at7at32:
08834:       if (partsUsed & 0x8l) goto piece4at7at32;
08835:       if(!(puzzle & 0x2092080l))
08836:         doSolve32(8, 0x100l, puzzle | 0x2092080l, partsUsed | 0x8l);
08837:       if(!(puzzle & 0x200e0080l))
08838:         doSolve32(8, 0x100l, puzzle | 0x200e0080l, partsUsed | 0x8l);
08839:     piece4at7at32:
08840:       if (partsUsed & 0x20l) goto piece6at7at32;
08841:       if(!(puzzle & 0x92480l))
08842:         doSolve32(8, 0x100l, puzzle | 0x92480l, partsUsed | 0x20l);
08843:     piece6at7at32:
08844:       if (partsUsed & 0x100l) goto piece9at7at32;
08845:       if(!(puzzle & 0xc8080l))
08846:         doSolve32(8, 0x100l, puzzle | 0xc8080l, partsUsed | 0x100l);
08847:     piece9at7at32:
08848:       if (partsUsed & 0x200l) goto piece10at7at32;
08849:       if(!(puzzle & 0x10092080l))
08850:         doSolve32(8, 0x100l, puzzle | 0x10092080l, partsUsed | 0x200l);
08851:       if(!(puzzle & 0x400e0080l))
08852:         doSolve32(8, 0x100l, puzzle | 0x400e0080l, partsUsed | 0x200l);
08853:     piece10at7at32:
08854:       if (partsUsed & 0x400l) goto piece11at7at32;
08855:       if(!(puzzle & 0x90090080l))
08856:         doSolve32(8, 0x100l, puzzle | 0x90090080l, partsUsed | 0x400l);
08857:       if(!(puzzle & 0xc00c0080l))
08858:         doSolve32(8, 0x100l, puzzle | 0xc00c0080l, partsUsed | 0x400l);
08859:     piece11at7at32:
08860:       if (partsUsed & 0x800l) goto piece12at7at32;
08861:       if(!(puzzle & 0xd8080l))
08862:         doSolve32(8, 0x100l, puzzle | 0xd8080l, partsUsed | 0x800l);
08863:     piece12at7at32:
08864:     break;
08865:    case 8:
08866:       if (partsUsed & 0x2l) goto piece2at8at32;
08867:       if(!(puzzle & 0x13300l))
08868:         doSolve32(9, 0x200l, puzzle | 0x13300l, partsUsed | 0x2l);
08869:       if(!(puzzle & 0x19900l))
08870:         doSolve32(9, 0x200l, puzzle | 0x19900l, partsUsed | 0x2l);
08871:     piece2at8at32:
08872:       if (partsUsed & 0x4l) goto piece3at8at32;
08873:       if(!(puzzle & 0x9700l))
08874:         doSolve32(9, 0x200l, puzzle | 0x9700l, partsUsed | 0x4l);
08875:       if(!(puzzle & 0x7900l))
08876:         doSolve32(9, 0x200l, puzzle | 0x7900l, partsUsed | 0x4l);
08877:     piece3at8at32:
08878:       if (partsUsed & 0x8l) goto piece4at8at32;
08879:       if(!(puzzle & 0x19300l))
08880:         doSolve32(9, 0x200l, puzzle | 0x19300l, partsUsed | 0x8l);
08881:       if(!(puzzle & 0x13900l))
08882:         doSolve32(9, 0x200l, puzzle | 0x13900l, partsUsed | 0x8l);
08883:     piece4at8at32:
08884:       if (partsUsed & 0x10l) goto piece5at8at32;
08885:       if (!(puzzle & 0x24900l)) {
08886:          if(!(puzzle & 0x4124900l))
08887:            doSolve32(9, 0x200l, puzzle | 0x4124900l, partsUsed | 0x10l);
08888:          if(!(puzzle & 0x65900l))
08889:            doSolve32(9, 0x200l, puzzle | 0x65900l, partsUsed | 0x10l);
08890:          if(!(puzzle & 0x20824900l))
08891:            doSolve32(9, 0x200l, puzzle | 0x20824900l, partsUsed | 0x10l);
08892:          if(!(puzzle & 0x2cb00l))
08893:            doSolve32(9, 0x200l, puzzle | 0x2cb00l, partsUsed | 0x10l);
08894:       }
08895:       if(!(puzzle & 0x4d300l))
08896:         doSolve32(9, 0x200l, puzzle | 0x4d300l, partsUsed | 0x10l);
08897:       if(!(puzzle & 0x24904100l))
08898:         doSolve32(9, 0x200l, puzzle | 0x24904100l, partsUsed | 0x10l);
08899:     piece5at8at32:
08900:       if (partsUsed & 0x20l) goto piece6at8at32;
08901:       if (!(puzzle & 0x24900l)) {
08902:          if(!(puzzle & 0x20024900l))
08903:            doSolve32(9, 0x200l, puzzle | 0x20024900l, partsUsed | 0x20l);
08904:          if(!(puzzle & 0x24b00l))
08905:            doSolve32(9, 0x200l, puzzle | 0x24b00l, partsUsed | 0x20l);
08906:          if(!(puzzle & 0x124900l))
08907:            doSolve32(9, 0x200l, puzzle | 0x124900l, partsUsed | 0x20l);
08908:          if(!(puzzle & 0x64900l))
08909:            doSolve32(9, 0x200l, puzzle | 0x64900l, partsUsed | 0x20l);
08910:       }
08911:       if(!(puzzle & 0x24900100l))
08912:         doSolve32(9, 0x200l, puzzle | 0x24900100l, partsUsed | 0x20l);
08913:       if(!(puzzle & 0x49300l))
08914:         doSolve32(9, 0x200l, puzzle | 0x49300l, partsUsed | 0x20l);
08915:     piece6at8at32:
08916:       if (partsUsed & 0x40l) goto piece7at8at32;
08917:       if (!(puzzle & 0x24900l)) {
08918:          if(!(puzzle & 0x4024900l))
08919:            doSolve32(9, 0x200l, puzzle | 0x4024900l, partsUsed | 0x40l);
08920:          if(!(puzzle & 0x25900l))
08921:            doSolve32(9, 0x200l, puzzle | 0x25900l, partsUsed | 0x40l);
08922:          if(!(puzzle & 0x824900l))
08923:            doSolve32(9, 0x200l, puzzle | 0x824900l, partsUsed | 0x40l);
08924:          if(!(puzzle & 0x2c900l))
08925:            doSolve32(9, 0x200l, puzzle | 0x2c900l, partsUsed | 0x40l);
08926:       }
08927:     piece7at8at32:
08928:       if (partsUsed & 0x80l) goto piece8at8at32;
08929:       if(!(puzzle & 0x4904100l))
08930:         doSolve32(9, 0x200l, puzzle | 0x4904100l, partsUsed | 0x80l);
08931:       if(!(puzzle & 0x4104900l))
08932:         doSolve32(9, 0x200l, puzzle | 0x4104900l, partsUsed | 0x80l);
08933:       if(!(puzzle & 0x2f00l))
08934:         doSolve32(9, 0x200l, puzzle | 0x2f00l, partsUsed | 0x80l);
08935:       if(!(puzzle & 0xcb00l))
08936:         doSolve32(9, 0x200l, puzzle | 0xcb00l, partsUsed | 0x80l);
08937:       if(!(puzzle & 0xd300l))
08938:         doSolve32(9, 0x200l, puzzle | 0xd300l, partsUsed | 0x80l);
08939:       if(!(puzzle & 0x3d00l))
08940:         doSolve32(9, 0x200l, puzzle | 0x3d00l, partsUsed | 0x80l);
08941:       if(!(puzzle & 0x700500l))
08942:         doSolve32(9, 0x200l, puzzle | 0x700500l, partsUsed | 0x80l);
08943:       if(!(puzzle & 0x500700l))
08944:         doSolve32(9, 0x200l, puzzle | 0x500700l, partsUsed | 0x80l);
08945:     piece8at8at32:
08946:       if (partsUsed & 0x100l) goto piece9at8at32;
08947:       if(!(puzzle & 0x1001300l))
08948:         doSolve32(9, 0x200l, puzzle | 0x1001300l, partsUsed | 0x100l);
08949:       if(!(puzzle & 0x1300100l))
08950:         doSolve32(9, 0x200l, puzzle | 0x1300100l, partsUsed | 0x100l);
08951:       if(!(puzzle & 0x200b00l))
08952:         doSolve32(9, 0x200l, puzzle | 0x200b00l, partsUsed | 0x100l);
08953:       if(!(puzzle & 0x900300l))
08954:         doSolve32(9, 0x200l, puzzle | 0x900300l, partsUsed | 0x100l);
08955:       if(!(puzzle & 0x1800900l))
08956:         doSolve32(9, 0x200l, puzzle | 0x1800900l, partsUsed | 0x100l);
08957:       if(!(puzzle & 0x101900l))
08958:         doSolve32(9, 0x200l, puzzle | 0x101900l, partsUsed | 0x100l);
08959:     piece9at8at32:
08960:       if (partsUsed & 0x200l) goto piece10at8at32;
08961:       if(!(puzzle & 0xb300l))
08962:         doSolve32(9, 0x200l, puzzle | 0xb300l, partsUsed | 0x200l);
08963:       if(!(puzzle & 0xb900l))
08964:         doSolve32(9, 0x200l, puzzle | 0xb900l, partsUsed | 0x200l);
08965:     piece10at8at32:
08966:       if (partsUsed & 0x400l) goto piece11at8at32;
08967:       if (!(puzzle & 0x800900l)) {
08968:          if(!(puzzle & 0x4900900l))
08969:            doSolve32(9, 0x200l, puzzle | 0x4900900l, partsUsed | 0x400l);
08970:          if(!(puzzle & 0x4804900l))
08971:            doSolve32(9, 0x200l, puzzle | 0x4804900l, partsUsed | 0x400l);
08972:          if(!(puzzle & 0x904900l))
08973:            doSolve32(9, 0x200l, puzzle | 0x904900l, partsUsed | 0x400l);
08974:       }
08975:       if (!(puzzle & 0x1300l)) {
08976:          if(!(puzzle & 0x3700l))
08977:            doSolve32(9, 0x200l, puzzle | 0x3700l, partsUsed | 0x400l);
08978:          if(!(puzzle & 0x1f00l))
08979:            doSolve32(9, 0x200l, puzzle | 0x1f00l, partsUsed | 0x400l);
08980:          if(!(puzzle & 0x5b00l))
08981:            doSolve32(9, 0x200l, puzzle | 0x5b00l, partsUsed | 0x400l);
08982:          if(!(puzzle & 0x9b00l))
08983:            doSolve32(9, 0x200l, puzzle | 0x9b00l, partsUsed | 0x400l);
08984:          if(!(puzzle & 0x3b00l))
08985:            doSolve32(9, 0x200l, puzzle | 0x3b00l, partsUsed | 0x400l);
08986:       }
08987:       if (!(puzzle & 0x200300l)) {
08988:          if(!(puzzle & 0x700300l))
08989:            doSolve32(9, 0x200l, puzzle | 0x700300l, partsUsed | 0x400l);
08990:          if(!(puzzle & 0x300700l))
08991:            doSolve32(9, 0x200l, puzzle | 0x300700l, partsUsed | 0x400l);
08992:          if(!(puzzle & 0x600700l))
08993:            doSolve32(9, 0x200l, puzzle | 0x600700l, partsUsed | 0x400l);
08994:       }
08995:       if(!(puzzle & 0xd900l))
08996:         doSolve32(9, 0x200l, puzzle | 0xd900l, partsUsed | 0x400l);
08997:     piece11at8at32:
08998:       if (partsUsed & 0x800l) goto piece12at8at32;
08999:       if (!(puzzle & 0x100300l)) {
09000:          if(!(puzzle & 0x101b00l))
09001:            doSolve32(9, 0x200l, puzzle | 0x101b00l, partsUsed | 0x800l);
09002:          if(!(puzzle & 0xb00300l))
09003:            doSolve32(9, 0x200l, puzzle | 0xb00300l, partsUsed | 0x800l);
09004:          if(!(puzzle & 0x300b00l))
09005:            doSolve32(9, 0x200l, puzzle | 0x300b00l, partsUsed | 0x800l);
09006:          if(!(puzzle & 0x301300l))
09007:            doSolve32(9, 0x200l, puzzle | 0x301300l, partsUsed | 0x800l);
09008:          if(!(puzzle & 0x1300300l))
09009:            doSolve32(9, 0x200l, puzzle | 0x1300300l, partsUsed | 0x800l);
09010:          if(!(puzzle & 0x900b00l))
09011:            doSolve32(9, 0x200l, puzzle | 0x900b00l, partsUsed | 0x800l);
09012:       }
09013:       if (!(puzzle & 0x1001100l)) {
09014:          if(!(puzzle & 0x1801900l))
09015:            doSolve32(9, 0x200l, puzzle | 0x1801900l, partsUsed | 0x800l);
09016:          if(!(puzzle & 0x1201300l))
09017:            doSolve32(9, 0x200l, puzzle | 0x1201300l, partsUsed | 0x800l);
09018:          if(!(puzzle & 0x1001b00l))
09019:            doSolve32(9, 0x200l, puzzle | 0x1001b00l, partsUsed | 0x800l);
09020:       }
09021:       if (!(puzzle & 0x800900l)) {
09022:          if(!(puzzle & 0xb00900l))
09023:            doSolve32(9, 0x200l, puzzle | 0xb00900l, partsUsed | 0x800l);
09024:          if(!(puzzle & 0x901900l))
09025:            doSolve32(9, 0x200l, puzzle | 0x901900l, partsUsed | 0x800l);
09026:          if(!(puzzle & 0x801b00l))
09027:            doSolve32(9, 0x200l, puzzle | 0x801b00l, partsUsed | 0x800l);
09028:          if(!(puzzle & 0x1900900l))
09029:            doSolve32(9, 0x200l, puzzle | 0x1900900l, partsUsed | 0x800l);
09030:       }
09031:       if(!(puzzle & 0x201b00l))
09032:         doSolve32(9, 0x200l, puzzle | 0x201b00l, partsUsed | 0x800l);
09033:       if(!(puzzle & 0x1b00100l))
09034:         doSolve32(9, 0x200l, puzzle | 0x1b00100l, partsUsed | 0x800l);
09035:     piece12at8at32:
09036:     break;
09037:    case 9:
09038:       if (partsUsed & 0x2l) goto piece2at9at32;
09039:       if(!(puzzle & 0x5e00l))
09040:         doSolve32(10, 0x400l, puzzle | 0x5e00l, partsUsed | 0x2l);
09041:     piece2at9at32:
09042:       if (partsUsed & 0x4l) goto piece3at9at32;
09043:       if(!(puzzle & 0x1d200l))
09044:         doSolve32(10, 0x400l, puzzle | 0x1d200l, partsUsed | 0x4l);
09045:     piece3at9at32:
09046:       if (partsUsed & 0x8l) goto piece4at9at32;
09047:       if(!(puzzle & 0xd600l))
09048:         doSolve32(10, 0x400l, puzzle | 0xd600l, partsUsed | 0x8l);
09049:     piece4at9at32:
09050:       if (partsUsed & 0x10l) goto piece5at9at32;
09051:       if (!(puzzle & 0x49200l)) {
09052:          if(!(puzzle & 0x69a00l))
09053:            doSolve32(10, 0x400l, puzzle | 0x69a00l, partsUsed | 0x10l);
09054:          if(!(puzzle & 0x8249200l))
09055:            doSolve32(10, 0x400l, puzzle | 0x8249200l, partsUsed | 0x10l);
09056:          if(!(puzzle & 0xcb200l))
09057:            doSolve32(10, 0x400l, puzzle | 0xcb200l, partsUsed | 0x10l);
09058:          if(!(puzzle & 0x41049200l))
09059:            doSolve32(10, 0x400l, puzzle | 0x41049200l, partsUsed | 0x10l);
09060:          if(!(puzzle & 0x59600l))
09061:            doSolve32(10, 0x400l, puzzle | 0x59600l, partsUsed | 0x10l);
09062:       }
09063:       if(!(puzzle & 0x9a600l))
09064:         doSolve32(10, 0x400l, puzzle | 0x9a600l, partsUsed | 0x10l);
09065:       if(!(puzzle & 0x49208200l))
09066:         doSolve32(10, 0x400l, puzzle | 0x49208200l, partsUsed | 0x10l);
09067:     piece5at9at32:
09068:       if (partsUsed & 0x20l) goto piece6at9at32;
09069:       if (!(puzzle & 0x49200l)) {
09070:          if(!(puzzle & 0x69200l))
09071:            doSolve32(10, 0x400l, puzzle | 0x69200l, partsUsed | 0x20l);
09072:          if(!(puzzle & 0x40049200l))
09073:            doSolve32(10, 0x400l, puzzle | 0x40049200l, partsUsed | 0x20l);
09074:          if(!(puzzle & 0x49600l))
09075:            doSolve32(10, 0x400l, puzzle | 0x49600l, partsUsed | 0x20l);
09076:          if(!(puzzle & 0x249200l))
09077:            doSolve32(10, 0x400l, puzzle | 0x249200l, partsUsed | 0x20l);
09078:          if(!(puzzle & 0xc9200l))
09079:            doSolve32(10, 0x400l, puzzle | 0xc9200l, partsUsed | 0x20l);
09080:       }
09081:       if(!(puzzle & 0x49200200l))
09082:         doSolve32(10, 0x400l, puzzle | 0x49200200l, partsUsed | 0x20l);
09083:       if(!(puzzle & 0x92600l))
09084:         doSolve32(10, 0x400l, puzzle | 0x92600l, partsUsed | 0x20l);
09085:     piece6at9at32:
09086:       if (partsUsed & 0x40l) goto piece7at9at32;
09087:       if (!(puzzle & 0x49200l)) {
09088:          if(!(puzzle & 0x49a00l))
09089:            doSolve32(10, 0x400l, puzzle | 0x49a00l, partsUsed | 0x40l);
09090:          if(!(puzzle & 0x4d200l))
09091:            doSolve32(10, 0x400l, puzzle | 0x4d200l, partsUsed | 0x40l);
09092:          if(!(puzzle & 0x8049200l))
09093:            doSolve32(10, 0x400l, puzzle | 0x8049200l, partsUsed | 0x40l);
09094:          if(!(puzzle & 0x4b200l))
09095:            doSolve32(10, 0x400l, puzzle | 0x4b200l, partsUsed | 0x40l);
09096:          if(!(puzzle & 0x1049200l))
09097:            doSolve32(10, 0x400l, puzzle | 0x1049200l, partsUsed | 0x40l);
09098:          if(!(puzzle & 0x59200l))
09099:            doSolve32(10, 0x400l, puzzle | 0x59200l, partsUsed | 0x40l);
09100:       }
09101:     piece7at9at32:
09102:       if (partsUsed & 0x80l) goto piece8at9at32;
09103:       if(!(puzzle & 0x9208200l))
09104:         doSolve32(10, 0x400l, puzzle | 0x9208200l, partsUsed | 0x80l);
09105:       if(!(puzzle & 0x8209200l))
09106:         doSolve32(10, 0x400l, puzzle | 0x8209200l, partsUsed | 0x80l);
09107:       if(!(puzzle & 0x19600l))
09108:         doSolve32(10, 0x400l, puzzle | 0x19600l, partsUsed | 0x80l);
09109:       if(!(puzzle & 0x1a600l))
09110:         doSolve32(10, 0x400l, puzzle | 0x1a600l, partsUsed | 0x80l);
09111:     piece8at9at32:
09112:       if (partsUsed & 0x100l) goto piece9at9at32;
09113:       if(!(puzzle & 0x801a00l))
09114:         doSolve32(10, 0x400l, puzzle | 0x801a00l, partsUsed | 0x100l);
09115:       if(!(puzzle & 0x301200l))
09116:         doSolve32(10, 0x400l, puzzle | 0x301200l, partsUsed | 0x100l);
09117:       if(!(puzzle & 0x203200l))
09118:         doSolve32(10, 0x400l, puzzle | 0x203200l, partsUsed | 0x100l);
09119:       if(!(puzzle & 0x1a00200l))
09120:         doSolve32(10, 0x400l, puzzle | 0x1a00200l, partsUsed | 0x100l);
09121:       if(!(puzzle & 0x1200600l))
09122:         doSolve32(10, 0x400l, puzzle | 0x1200600l, partsUsed | 0x100l);
09123:       if(!(puzzle & 0x2600200l))
09124:         doSolve32(10, 0x400l, puzzle | 0x2600200l, partsUsed | 0x100l);
09125:       if(!(puzzle & 0x401600l))
09126:         doSolve32(10, 0x400l, puzzle | 0x401600l, partsUsed | 0x100l);
09127:       if(!(puzzle & 0x3001200l))
09128:         doSolve32(10, 0x400l, puzzle | 0x3001200l, partsUsed | 0x100l);
09129:       if(!(puzzle & 0x2002600l))
09130:         doSolve32(10, 0x400l, puzzle | 0x2002600l, partsUsed | 0x100l);
09131:     piece9at9at32:
09132:       if (partsUsed & 0x200l) goto piece10at9at32;
09133:       if (!(puzzle & 0x1a00l)) {
09134:          if(!(puzzle & 0x13a00l))
09135:            doSolve32(10, 0x400l, puzzle | 0x13a00l, partsUsed | 0x200l);
09136:          if(!(puzzle & 0x7a00l))
09137:            doSolve32(10, 0x400l, puzzle | 0x7a00l, partsUsed | 0x200l);
09138:          if(!(puzzle & 0x9e00l))
09139:            doSolve32(10, 0x400l, puzzle | 0x9e00l, partsUsed | 0x200l);
09140:          if(!(puzzle & 0x19a00l))
09141:            doSolve32(10, 0x400l, puzzle | 0x19a00l, partsUsed | 0x200l);
09142:       }
09143:       if(!(puzzle & 0xf200l))
09144:         doSolve32(10, 0x400l, puzzle | 0xf200l, partsUsed | 0x200l);
09145:     piece10at9at32:
09146:       if (partsUsed & 0x400l) goto piece11at9at32;
09147:       if (!(puzzle & 0x1001200l)) {
09148:          if(!(puzzle & 0x9201200l))
09149:            doSolve32(10, 0x400l, puzzle | 0x9201200l, partsUsed | 0x400l);
09150:          if(!(puzzle & 0x9009200l))
09151:            doSolve32(10, 0x400l, puzzle | 0x9009200l, partsUsed | 0x400l);
09152:          if(!(puzzle & 0x1209200l))
09153:            doSolve32(10, 0x400l, puzzle | 0x1209200l, partsUsed | 0x400l);
09154:       }
09155:       if (!(puzzle & 0x3200l)) {
09156:          if(!(puzzle & 0xb600l))
09157:            doSolve32(10, 0x400l, puzzle | 0xb600l, partsUsed | 0x400l);
09158:          if(!(puzzle & 0x13600l))
09159:            doSolve32(10, 0x400l, puzzle | 0x13600l, partsUsed | 0x400l);
09160:          if(!(puzzle & 0x1b200l))
09161:            doSolve32(10, 0x400l, puzzle | 0x1b200l, partsUsed | 0x400l);
09162:       }
09163:       if(!(puzzle & 0x3e00l))
09164:         doSolve32(10, 0x400l, puzzle | 0x3e00l, partsUsed | 0x400l);
09165:       if(!(puzzle & 0xda00l))
09166:         doSolve32(10, 0x400l, puzzle | 0xda00l, partsUsed | 0x400l);
09167:       if(!(puzzle & 0x700600l))
09168:         doSolve32(10, 0x400l, puzzle | 0x700600l, partsUsed | 0x400l);
09169:     piece11at9at32:
09170:       if (partsUsed & 0x800l) goto piece12at9at32;
09171:       if (!(puzzle & 0x1800200l)) {
09172:          if(!(puzzle & 0x1b00200l))
09173:            doSolve32(10, 0x400l, puzzle | 0x1b00200l, partsUsed | 0x800l);
09174:          if(!(puzzle & 0x1a01200l))
09175:            doSolve32(10, 0x400l, puzzle | 0x1a01200l, partsUsed | 0x800l);
09176:          if(!(puzzle & 0x1801a00l))
09177:            doSolve32(10, 0x400l, puzzle | 0x1801a00l, partsUsed | 0x800l);
09178:       }
09179:       if (!(puzzle & 0x201200l)) {
09180:          if(!(puzzle & 0x1301200l))
09181:            doSolve32(10, 0x400l, puzzle | 0x1301200l, partsUsed | 0x800l);
09182:          if(!(puzzle & 0x1201a00l))
09183:            doSolve32(10, 0x400l, puzzle | 0x1201a00l, partsUsed | 0x800l);
09184:          if(!(puzzle & 0x203600l))
09185:            doSolve32(10, 0x400l, puzzle | 0x203600l, partsUsed | 0x800l);
09186:          if(!(puzzle & 0x1601200l))
09187:            doSolve32(10, 0x400l, puzzle | 0x1601200l, partsUsed | 0x800l);
09188:          if(!(puzzle & 0x601600l))
09189:            doSolve32(10, 0x400l, puzzle | 0x601600l, partsUsed | 0x800l);
09190:          if(!(puzzle & 0x1203200l))
09191:            doSolve32(10, 0x400l, puzzle | 0x1203200l, partsUsed | 0x800l);
09192:          if(!(puzzle & 0x3201200l))
09193:            doSolve32(10, 0x400l, puzzle | 0x3201200l, partsUsed | 0x800l);
09194:          if(!(puzzle & 0x1201600l))
09195:            doSolve32(10, 0x400l, puzzle | 0x1201600l, partsUsed | 0x800l);
09196:       }
09197:       if (!(puzzle & 0x400600l)) {
09198:          if(!(puzzle & 0x1600600l))
09199:            doSolve32(10, 0x400l, puzzle | 0x1600600l, partsUsed | 0x800l);
09200:          if(!(puzzle & 0x2402600l))
09201:            doSolve32(10, 0x400l, puzzle | 0x2402600l, partsUsed | 0x800l);
09202:          if(!(puzzle & 0x602600l))
09203:            doSolve32(10, 0x400l, puzzle | 0x602600l, partsUsed | 0x800l);
09204:          if(!(puzzle & 0x2600600l))
09205:            doSolve32(10, 0x400l, puzzle | 0x2600600l, partsUsed | 0x800l);
09206:          if(!(puzzle & 0x403600l))
09207:            doSolve32(10, 0x400l, puzzle | 0x403600l, partsUsed | 0x800l);
09208:       }
09209:       if (!(puzzle & 0x3200l)) {
09210:          if(!(puzzle & 0x3003200l))
09211:            doSolve32(10, 0x400l, puzzle | 0x3003200l, partsUsed | 0x800l);
09212:          if(!(puzzle & 0x2003600l))
09213:            doSolve32(10, 0x400l, puzzle | 0x2003600l, partsUsed | 0x800l);
09214:          if(!(puzzle & 0x1003600l))
09215:            doSolve32(10, 0x400l, puzzle | 0x1003600l, partsUsed | 0x800l);
09216:       }
09217:       if(!(puzzle & 0x3600200l))
09218:         doSolve32(10, 0x400l, puzzle | 0x3600200l, partsUsed | 0x800l);
09219:     piece12at9at32:
09220:     break;
09221:    case 10:
09222:       if (partsUsed & 0x2l) goto piece2at10at32;
09223:       if(!(puzzle & 0xf400l))
09224:         doSolve32(11, 0x800l, puzzle | 0xf400l, partsUsed | 0x2l);
09225:     piece2at10at32:
09226:       if (partsUsed & 0x4l) goto piece3at10at32;
09227:       if(!(puzzle & 0x13c00l))
09228:         doSolve32(11, 0x800l, puzzle | 0x13c00l, partsUsed | 0x4l);
09229:     piece3at10at32:
09230:       if (partsUsed & 0x8l) goto piece4at10at32;
09231:       if(!(puzzle & 0x7c00l))
09232:         doSolve32(11, 0x800l, puzzle | 0x7c00l, partsUsed | 0x8l);
09233:     piece4at10at32:
09234:       if (partsUsed & 0x10l) goto piece5at10at32;
09235:       if (!(puzzle & 0x92400l)) {
09236:          if(!(puzzle & 0xd3400l))
09237:            doSolve32(11, 0x800l, puzzle | 0xd3400l, partsUsed | 0x10l);
09238:          if(!(puzzle & 0x10492400l))
09239:            doSolve32(11, 0x800l, puzzle | 0x10492400l, partsUsed | 0x10l);
09240:          if(!(puzzle & 0x82092400l))
09241:            doSolve32(11, 0x800l, puzzle | 0x82092400l, partsUsed | 0x10l);
09242:       }
09243:       if(!(puzzle & 0x92410400l))
09244:         doSolve32(11, 0x800l, puzzle | 0x92410400l, partsUsed | 0x10l);
09245:     piece5at10at32:
09246:       if (partsUsed & 0x20l) goto piece6at10at32;
09247:       if (!(puzzle & 0x92400l)) {
09248:          if(!(puzzle & 0xd2400l))
09249:            doSolve32(11, 0x800l, puzzle | 0xd2400l, partsUsed | 0x20l);
09250:          if(!(puzzle & 0x80092400l))
09251:            doSolve32(11, 0x800l, puzzle | 0x80092400l, partsUsed | 0x20l);
09252:          if(!(puzzle & 0x492400l))
09253:            doSolve32(11, 0x800l, puzzle | 0x492400l, partsUsed | 0x20l);
09254:       }
09255:       if(!(puzzle & 0x92400400l))
09256:         doSolve32(11, 0x800l, puzzle | 0x92400400l, partsUsed | 0x20l);
09257:     piece6at10at32:
09258:       if (partsUsed & 0x40l) goto piece7at10at32;
09259:       if (!(puzzle & 0x92400l)) {
09260:          if(!(puzzle & 0x93400l))
09261:            doSolve32(11, 0x800l, puzzle | 0x93400l, partsUsed | 0x40l);
09262:          if(!(puzzle & 0x9a400l))
09263:            doSolve32(11, 0x800l, puzzle | 0x9a400l, partsUsed | 0x40l);
09264:          if(!(puzzle & 0x10092400l))
09265:            doSolve32(11, 0x800l, puzzle | 0x10092400l, partsUsed | 0x40l);
09266:          if(!(puzzle & 0x2092400l))
09267:            doSolve32(11, 0x800l, puzzle | 0x2092400l, partsUsed | 0x40l);
09268:       }
09269:     piece7at10at32:
09270:       if (partsUsed & 0x80l) goto piece8at10at32;
09271:       if(!(puzzle & 0x12410400l))
09272:         doSolve32(11, 0x800l, puzzle | 0x12410400l, partsUsed | 0x80l);
09273:       if(!(puzzle & 0x10412400l))
09274:         doSolve32(11, 0x800l, puzzle | 0x10412400l, partsUsed | 0x80l);
09275:     piece8at10at32:
09276:       if (partsUsed & 0x100l) goto piece9at10at32;
09277:       if(!(puzzle & 0x3400400l))
09278:         doSolve32(11, 0x800l, puzzle | 0x3400400l, partsUsed | 0x100l);
09279:       if(!(puzzle & 0x1003400l))
09280:         doSolve32(11, 0x800l, puzzle | 0x1003400l, partsUsed | 0x100l);
09281:       if(!(puzzle & 0x602400l))
09282:         doSolve32(11, 0x800l, puzzle | 0x602400l, partsUsed | 0x100l);
09283:     piece9at10at32:
09284:       if (partsUsed & 0x200l) goto piece10at10at32;
09285:       if(!(puzzle & 0xbc00l))
09286:         doSolve32(11, 0x800l, puzzle | 0xbc00l, partsUsed | 0x200l);
09287:     piece10at10at32:
09288:       if (partsUsed & 0x400l) goto piece11at10at32;
09289:       if (!(puzzle & 0x12400l)) {
09290:          if(!(puzzle & 0x1b400l))
09291:            doSolve32(11, 0x800l, puzzle | 0x1b400l, partsUsed | 0x400l);
09292:          if(!(puzzle & 0x12012400l))
09293:            doSolve32(11, 0x800l, puzzle | 0x12012400l, partsUsed | 0x400l);
09294:          if(!(puzzle & 0x2412400l))
09295:            doSolve32(11, 0x800l, puzzle | 0x2412400l, partsUsed | 0x400l);
09296:       }
09297:       if(!(puzzle & 0x12402400l))
09298:         doSolve32(11, 0x800l, puzzle | 0x12402400l, partsUsed | 0x400l);
09299:     piece11at10at32:
09300:       if (partsUsed & 0x800l) goto piece12at10at32;
09301:       if (!(puzzle & 0x3000400l)) {
09302:          if(!(puzzle & 0x3600400l))
09303:            doSolve32(11, 0x800l, puzzle | 0x3600400l, partsUsed | 0x800l);
09304:          if(!(puzzle & 0x3402400l))
09305:            doSolve32(11, 0x800l, puzzle | 0x3402400l, partsUsed | 0x800l);
09306:          if(!(puzzle & 0x3003400l))
09307:            doSolve32(11, 0x800l, puzzle | 0x3003400l, partsUsed | 0x800l);
09308:       }
09309:       if(!(puzzle & 0x2602400l))
09310:         doSolve32(11, 0x800l, puzzle | 0x2602400l, partsUsed | 0x800l);
09311:       if(!(puzzle & 0x2403400l))
09312:         doSolve32(11, 0x800l, puzzle | 0x2403400l, partsUsed | 0x800l);
09313:     piece12at10at32:
09314:     break;
09315:    case 11:
09316:       if (partsUsed & 0x2l) goto piece2at11at32;
09317:       if(!(puzzle & 0x99800l))
09318:         doSolve32(12, 0x1000l, puzzle | 0x99800l, partsUsed | 0x2l);
09319:       if(!(puzzle & 0xcc800l))
09320:         doSolve32(12, 0x1000l, puzzle | 0xcc800l, partsUsed | 0x2l);
09321:     piece2at11at32:
09322:       if (partsUsed & 0x4l) goto piece3at11at32;
09323:       if(!(puzzle & 0x4b800l))
09324:         doSolve32(12, 0x1000l, puzzle | 0x4b800l, partsUsed | 0x4l);
09325:       if(!(puzzle & 0x3c800l))
09326:         doSolve32(12, 0x1000l, puzzle | 0x3c800l, partsUsed | 0x4l);
09327:     piece3at11at32:
09328:       if (partsUsed & 0x8l) goto piece4at11at32;
09329:       if(!(puzzle & 0xc9800l))
09330:         doSolve32(12, 0x1000l, puzzle | 0xc9800l, partsUsed | 0x8l);
09331:       if(!(puzzle & 0x9c800l))
09332:         doSolve32(12, 0x1000l, puzzle | 0x9c800l, partsUsed | 0x8l);
09333:     piece4at11at32:
09334:       if (partsUsed & 0x10l) goto piece5at11at32;
09335:       if(!(puzzle & 0x24920800l))
09336:         doSolve32(12, 0x1000l, puzzle | 0x24920800l, partsUsed | 0x10l);
09337:     piece5at11at32:
09338:       if (partsUsed & 0x40l) goto piece7at11at32;
09339:       if(!(puzzle & 0x24900800l))
09340:         doSolve32(12, 0x1000l, puzzle | 0x24900800l, partsUsed | 0x40l);
09341:     piece7at11at32:
09342:       if (partsUsed & 0x80l) goto piece8at11at32;
09343:       if(!(puzzle & 0x24820800l))
09344:         doSolve32(12, 0x1000l, puzzle | 0x24820800l, partsUsed | 0x80l);
09345:       if(!(puzzle & 0x20824800l))
09346:         doSolve32(12, 0x1000l, puzzle | 0x20824800l, partsUsed | 0x80l);
09347:       if(!(puzzle & 0x17800l))
09348:         doSolve32(12, 0x1000l, puzzle | 0x17800l, partsUsed | 0x80l);
09349:       if(!(puzzle & 0x65800l))
09350:         doSolve32(12, 0x1000l, puzzle | 0x65800l, partsUsed | 0x80l);
09351:       if(!(puzzle & 0x69800l))
09352:         doSolve32(12, 0x1000l, puzzle | 0x69800l, partsUsed | 0x80l);
09353:       if(!(puzzle & 0x1e800l))
09354:         doSolve32(12, 0x1000l, puzzle | 0x1e800l, partsUsed | 0x80l);
09355:       if(!(puzzle & 0x3802800l))
09356:         doSolve32(12, 0x1000l, puzzle | 0x3802800l, partsUsed | 0x80l);
09357:       if(!(puzzle & 0x2803800l))
09358:         doSolve32(12, 0x1000l, puzzle | 0x2803800l, partsUsed | 0x80l);
09359:     piece8at11at32:
09360:       if (partsUsed & 0x100l) goto piece9at11at32;
09361:       if(!(puzzle & 0x1201800l))
09362:         doSolve32(12, 0x1000l, puzzle | 0x1201800l, partsUsed | 0x100l);
09363:       if(!(puzzle & 0x1005800l))
09364:         doSolve32(12, 0x1000l, puzzle | 0x1005800l, partsUsed | 0x100l);
09365:       if(!(puzzle & 0xb00800l))
09366:         doSolve32(12, 0x1000l, puzzle | 0xb00800l, partsUsed | 0x100l);
09367:       if(!(puzzle & 0x9800800l))
09368:         doSolve32(12, 0x1000l, puzzle | 0x9800800l, partsUsed | 0x100l);
09369:       if(!(puzzle & 0x4801800l))
09370:         doSolve32(12, 0x1000l, puzzle | 0x4801800l, partsUsed | 0x100l);
09371:       if(!(puzzle & 0xc004800l))
09372:         doSolve32(12, 0x1000l, puzzle | 0xc004800l, partsUsed | 0x100l);
09373:       if(!(puzzle & 0x80c800l))
09374:         doSolve32(12, 0x1000l, puzzle | 0x80c800l, partsUsed | 0x100l);
09375:       if(!(puzzle & 0x8009800l))
09376:         doSolve32(12, 0x1000l, puzzle | 0x8009800l, partsUsed | 0x100l);
09377:     piece9at11at32:
09378:       if (partsUsed & 0x200l) goto piece10at11at32;
09379:       if(!(puzzle & 0x59800l))
09380:         doSolve32(12, 0x1000l, puzzle | 0x59800l, partsUsed | 0x200l);
09381:       if(!(puzzle & 0x5c800l))
09382:         doSolve32(12, 0x1000l, puzzle | 0x5c800l, partsUsed | 0x200l);
09383:     piece10at11at32:
09384:       if (partsUsed & 0x400l) goto piece11at11at32;
09385:       if (!(puzzle & 0x4004800l)) {
09386:          if(!(puzzle & 0x4904800l))
09387:            doSolve32(12, 0x1000l, puzzle | 0x4904800l, partsUsed | 0x400l);
09388:          if(!(puzzle & 0x24804800l))
09389:            doSolve32(12, 0x1000l, puzzle | 0x24804800l, partsUsed | 0x400l);
09390:          if(!(puzzle & 0x24024800l))
09391:            doSolve32(12, 0x1000l, puzzle | 0x24024800l, partsUsed | 0x400l);
09392:          if(!(puzzle & 0x4824800l))
09393:            doSolve32(12, 0x1000l, puzzle | 0x4824800l, partsUsed | 0x400l);
09394:       }
09395:       if (!(puzzle & 0x9800l)) {
09396:          if(!(puzzle & 0x1b800l))
09397:            doSolve32(12, 0x1000l, puzzle | 0x1b800l, partsUsed | 0x400l);
09398:          if(!(puzzle & 0xf800l))
09399:            doSolve32(12, 0x1000l, puzzle | 0xf800l, partsUsed | 0x400l);
09400:          if(!(puzzle & 0x2d800l))
09401:            doSolve32(12, 0x1000l, puzzle | 0x2d800l, partsUsed | 0x400l);
09402:          if(!(puzzle & 0x4d800l))
09403:            doSolve32(12, 0x1000l, puzzle | 0x4d800l, partsUsed | 0x400l);
09404:          if(!(puzzle & 0x1d800l))
09405:            doSolve32(12, 0x1000l, puzzle | 0x1d800l, partsUsed | 0x400l);
09406:       }
09407:       if (!(puzzle & 0x1001800l)) {
09408:          if(!(puzzle & 0x3801800l))
09409:            doSolve32(12, 0x1000l, puzzle | 0x3801800l, partsUsed | 0x400l);
09410:          if(!(puzzle & 0x1803800l))
09411:            doSolve32(12, 0x1000l, puzzle | 0x1803800l, partsUsed | 0x400l);
09412:          if(!(puzzle & 0x3003800l))
09413:            doSolve32(12, 0x1000l, puzzle | 0x3003800l, partsUsed | 0x400l);
09414:       }
09415:       if(!(puzzle & 0x6c800l))
09416:         doSolve32(12, 0x1000l, puzzle | 0x6c800l, partsUsed | 0x400l);
09417:     piece11at11at32:
09418:       if (partsUsed & 0x800l) goto piece12at11at32;
09419:       if (!(puzzle & 0x1800800l)) {
09420:          if(!(puzzle & 0x1b00800l))
09421:            doSolve32(12, 0x1000l, puzzle | 0x1b00800l, partsUsed | 0x800l);
09422:          if(!(puzzle & 0x1a01800l))
09423:            doSolve32(12, 0x1000l, puzzle | 0x1a01800l, partsUsed | 0x800l);
09424:          if(!(puzzle & 0x1901800l))
09425:            doSolve32(12, 0x1000l, puzzle | 0x1901800l, partsUsed | 0x800l);
09426:          if(!(puzzle & 0x5801800l))
09427:            doSolve32(12, 0x1000l, puzzle | 0x5801800l, partsUsed | 0x800l);
09428:          if(!(puzzle & 0x5804800l))
09429:            doSolve32(12, 0x1000l, puzzle | 0x5804800l, partsUsed | 0x800l);
09430:          if(!(puzzle & 0x1805800l))
09431:            doSolve32(12, 0x1000l, puzzle | 0x1805800l, partsUsed | 0x800l);
09432:          if(!(puzzle & 0x1809800l))
09433:            doSolve32(12, 0x1000l, puzzle | 0x1809800l, partsUsed | 0x800l);
09434:          if(!(puzzle & 0x9801800l))
09435:            doSolve32(12, 0x1000l, puzzle | 0x9801800l, partsUsed | 0x800l);
09436:          if(!(puzzle & 0xd800800l))
09437:            doSolve32(12, 0x1000l, puzzle | 0xd800800l, partsUsed | 0x800l);
09438:       }
09439:       if (!(puzzle & 0xc800l)) {
09440:          if(!(puzzle & 0x80d800l))
09441:            doSolve32(12, 0x1000l, puzzle | 0x80d800l, partsUsed | 0x800l);
09442:          if(!(puzzle & 0xc00c800l))
09443:            doSolve32(12, 0x1000l, puzzle | 0xc00c800l, partsUsed | 0x800l);
09444:          if(!(puzzle & 0x480c800l))
09445:            doSolve32(12, 0x1000l, puzzle | 0x480c800l, partsUsed | 0x800l);
09446:          if(!(puzzle & 0x800d800l))
09447:            doSolve32(12, 0x1000l, puzzle | 0x800d800l, partsUsed | 0x800l);
09448:          if(!(puzzle & 0x100d800l))
09449:            doSolve32(12, 0x1000l, puzzle | 0x100d800l, partsUsed | 0x800l);
09450:          if(!(puzzle & 0x400d800l))
09451:            doSolve32(12, 0x1000l, puzzle | 0x400d800l, partsUsed | 0x800l);
09452:       }
09453:       if(!(puzzle & 0x9009800l))
09454:         doSolve32(12, 0x1000l, puzzle | 0x9009800l, partsUsed | 0x800l);
09455:       if(!(puzzle & 0xc804800l))
09456:         doSolve32(12, 0x1000l, puzzle | 0xc804800l, partsUsed | 0x800l);
09457:       if(!(puzzle & 0x4805800l))
09458:         doSolve32(12, 0x1000l, puzzle | 0x4805800l, partsUsed | 0x800l);
09459:     piece12at11at32:
09460:     break;
09461:    case 12:
09462:       if (partsUsed & 0x2l) goto piece2at12at32;
09463:       if(!(puzzle & 0x2f000l))
09464:         doSolve32(13, 0x2000l, puzzle | 0x2f000l, partsUsed | 0x2l);
09465:     piece2at12at32:
09466:       if (partsUsed & 0x4l) goto piece3at12at32;
09467:       if(!(puzzle & 0xe9000l))
09468:         doSolve32(13, 0x2000l, puzzle | 0xe9000l, partsUsed | 0x4l);
09469:     piece3at12at32:
09470:       if (partsUsed & 0x8l) goto piece4at12at32;
09471:       if(!(puzzle & 0x6b000l))
09472:         doSolve32(13, 0x2000l, puzzle | 0x6b000l, partsUsed | 0x8l);
09473:     piece4at12at32:
09474:       if (partsUsed & 0x10l) goto piece5at12at32;
09475:       if(!(puzzle & 0x49241000l))
09476:         doSolve32(13, 0x2000l, puzzle | 0x49241000l, partsUsed | 0x10l);
09477:     piece5at12at32:
09478:       if (partsUsed & 0x40l) goto piece7at12at32;
09479:       if(!(puzzle & 0x49201000l))
09480:         doSolve32(13, 0x2000l, puzzle | 0x49201000l, partsUsed | 0x40l);
09481:     piece7at12at32:
09482:       if (partsUsed & 0x80l) goto piece8at12at32;
09483:       if(!(puzzle & 0x49041000l))
09484:         doSolve32(13, 0x2000l, puzzle | 0x49041000l, partsUsed | 0x80l);
09485:       if(!(puzzle & 0x41049000l))
09486:         doSolve32(13, 0x2000l, puzzle | 0x41049000l, partsUsed | 0x80l);
09487:       if(!(puzzle & 0xcb000l))
09488:         doSolve32(13, 0x2000l, puzzle | 0xcb000l, partsUsed | 0x80l);
09489:       if(!(puzzle & 0xd3000l))
09490:         doSolve32(13, 0x2000l, puzzle | 0xd3000l, partsUsed | 0x80l);
09491:     piece8at12at32:
09492:       if (partsUsed & 0x100l) goto piece9at12at32;
09493:       if(!(puzzle & 0x1901000l))
09494:         doSolve32(13, 0x2000l, puzzle | 0x1901000l, partsUsed | 0x100l);
09495:       if(!(puzzle & 0x1809000l))
09496:         doSolve32(13, 0x2000l, puzzle | 0x1809000l, partsUsed | 0x100l);
09497:       if(!(puzzle & 0x2403000l))
09498:         doSolve32(13, 0x2000l, puzzle | 0x2403000l, partsUsed | 0x100l);
09499:       if(!(puzzle & 0x200b000l))
09500:         doSolve32(13, 0x2000l, puzzle | 0x200b000l, partsUsed | 0x100l);
09501:       if(!(puzzle & 0x1601000l))
09502:         doSolve32(13, 0x2000l, puzzle | 0x1601000l, partsUsed | 0x100l);
09503:       if(!(puzzle & 0x400d000l))
09504:         doSolve32(13, 0x2000l, puzzle | 0x400d000l, partsUsed | 0x100l);
09505:       if(!(puzzle & 0xd001000l))
09506:         doSolve32(13, 0x2000l, puzzle | 0xd001000l, partsUsed | 0x100l);
09507:       if(!(puzzle & 0x9003000l))
09508:         doSolve32(13, 0x2000l, puzzle | 0x9003000l, partsUsed | 0x100l);
09509:       if(!(puzzle & 0x13001000l))
09510:         doSolve32(13, 0x2000l, puzzle | 0x13001000l, partsUsed | 0x100l);
09511:       if(!(puzzle & 0x18009000l))
09512:         doSolve32(13, 0x2000l, puzzle | 0x18009000l, partsUsed | 0x100l);
09513:       if(!(puzzle & 0x1019000l))
09514:         doSolve32(13, 0x2000l, puzzle | 0x1019000l, partsUsed | 0x100l);
09515:       if(!(puzzle & 0x10013000l))
09516:         doSolve32(13, 0x2000l, puzzle | 0x10013000l, partsUsed | 0x100l);
09517:     piece9at12at32:
09518:       if (partsUsed & 0x200l) goto piece10at12at32;
09519:       if (!(puzzle & 0xd000l)) {
09520:          if(!(puzzle & 0x9d000l))
09521:            doSolve32(13, 0x2000l, puzzle | 0x9d000l, partsUsed | 0x200l);
09522:          if(!(puzzle & 0x3d000l))
09523:            doSolve32(13, 0x2000l, puzzle | 0x3d000l, partsUsed | 0x200l);
09524:          if(!(puzzle & 0x4f000l))
09525:            doSolve32(13, 0x2000l, puzzle | 0x4f000l, partsUsed | 0x200l);
09526:          if(!(puzzle & 0xcd000l))
09527:            doSolve32(13, 0x2000l, puzzle | 0xcd000l, partsUsed | 0x200l);
09528:       }
09529:       if(!(puzzle & 0x79000l))
09530:         doSolve32(13, 0x2000l, puzzle | 0x79000l, partsUsed | 0x200l);
09531:     piece10at12at32:
09532:       if (partsUsed & 0x400l) goto piece11at12at32;
09533:       if (!(puzzle & 0x8009000l)) {
09534:          if(!(puzzle & 0x9209000l))
09535:            doSolve32(13, 0x2000l, puzzle | 0x9209000l, partsUsed | 0x400l);
09536:          if(!(puzzle & 0x49009000l))
09537:            doSolve32(13, 0x2000l, puzzle | 0x49009000l, partsUsed | 0x400l);
09538:          if(!(puzzle & 0x48049000l))
09539:            doSolve32(13, 0x2000l, puzzle | 0x48049000l, partsUsed | 0x400l);
09540:          if(!(puzzle & 0x9049000l))
09541:            doSolve32(13, 0x2000l, puzzle | 0x9049000l, partsUsed | 0x400l);
09542:       }
09543:       if (!(puzzle & 0x19000l)) {
09544:          if(!(puzzle & 0x5b000l))
09545:            doSolve32(13, 0x2000l, puzzle | 0x5b000l, partsUsed | 0x400l);
09546:          if(!(puzzle & 0x9b000l))
09547:            doSolve32(13, 0x2000l, puzzle | 0x9b000l, partsUsed | 0x400l);
09548:          if(!(puzzle & 0xd9000l))
09549:            doSolve32(13, 0x2000l, puzzle | 0xd9000l, partsUsed | 0x400l);
09550:       }
09551:       if(!(puzzle & 0x1f000l))
09552:         doSolve32(13, 0x2000l, puzzle | 0x1f000l, partsUsed | 0x400l);
09553:       if(!(puzzle & 0x6d000l))
09554:         doSolve32(13, 0x2000l, puzzle | 0x6d000l, partsUsed | 0x400l);
09555:       if(!(puzzle & 0x3803000l))
09556:         doSolve32(13, 0x2000l, puzzle | 0x3803000l, partsUsed | 0x400l);
09557:     piece11at12at32:
09558:       if (partsUsed & 0x800l) goto piece12at12at32;
09559:       if (!(puzzle & 0x1201000l)) {
09560:          if(!(puzzle & 0x1b01000l))
09561:            doSolve32(13, 0x2000l, puzzle | 0x1b01000l, partsUsed | 0x800l);
09562:          if(!(puzzle & 0x3601000l))
09563:            doSolve32(13, 0x2000l, puzzle | 0x3601000l, partsUsed | 0x800l);
09564:          if(!(puzzle & 0x3203000l))
09565:            doSolve32(13, 0x2000l, puzzle | 0x3203000l, partsUsed | 0x800l);
09566:       }
09567:       if (!(puzzle & 0x1003000l)) {
09568:          if(!(puzzle & 0x3403000l))
09569:            doSolve32(13, 0x2000l, puzzle | 0x3403000l, partsUsed | 0x800l);
09570:          if(!(puzzle & 0x101b000l))
09571:            doSolve32(13, 0x2000l, puzzle | 0x101b000l, partsUsed | 0x800l);
09572:          if(!(puzzle & 0xb003000l))
09573:            doSolve32(13, 0x2000l, puzzle | 0xb003000l, partsUsed | 0x800l);
09574:          if(!(puzzle & 0x300b000l))
09575:            doSolve32(13, 0x2000l, puzzle | 0x300b000l, partsUsed | 0x800l);
09576:          if(!(puzzle & 0x3013000l))
09577:            doSolve32(13, 0x2000l, puzzle | 0x3013000l, partsUsed | 0x800l);
09578:          if(!(puzzle & 0x13003000l))
09579:            doSolve32(13, 0x2000l, puzzle | 0x13003000l, partsUsed | 0x800l);
09580:          if(!(puzzle & 0x900b000l))
09581:            doSolve32(13, 0x2000l, puzzle | 0x900b000l, partsUsed | 0x800l);
09582:       }
09583:       if (!(puzzle & 0xc001000l)) {
09584:          if(!(puzzle & 0xd801000l))
09585:            doSolve32(13, 0x2000l, puzzle | 0xd801000l, partsUsed | 0x800l);
09586:          if(!(puzzle & 0xd009000l))
09587:            doSolve32(13, 0x2000l, puzzle | 0xd009000l, partsUsed | 0x800l);
09588:          if(!(puzzle & 0xc00d000l))
09589:            doSolve32(13, 0x2000l, puzzle | 0xc00d000l, partsUsed | 0x800l);
09590:       }
09591:       if (!(puzzle & 0x8009000l)) {
09592:          if(!(puzzle & 0x9809000l))
09593:            doSolve32(13, 0x2000l, puzzle | 0x9809000l, partsUsed | 0x800l);
09594:          if(!(puzzle & 0x900d000l))
09595:            doSolve32(13, 0x2000l, puzzle | 0x900d000l, partsUsed | 0x800l);
09596:          if(!(puzzle & 0x18019000l))
09597:            doSolve32(13, 0x2000l, puzzle | 0x18019000l, partsUsed | 0x800l);
09598:          if(!(puzzle & 0xb009000l))
09599:            doSolve32(13, 0x2000l, puzzle | 0xb009000l, partsUsed | 0x800l);
09600:          if(!(puzzle & 0x9019000l))
09601:            doSolve32(13, 0x2000l, puzzle | 0x9019000l, partsUsed | 0x800l);
09602:          if(!(puzzle & 0x801b000l))
09603:            doSolve32(13, 0x2000l, puzzle | 0x801b000l, partsUsed | 0x800l);
09604:          if(!(puzzle & 0x19009000l))
09605:            doSolve32(13, 0x2000l, puzzle | 0x19009000l, partsUsed | 0x800l);
09606:       }
09607:       if (!(puzzle & 0x13000l)) {
09608:          if(!(puzzle & 0x12013000l))
09609:            doSolve32(13, 0x2000l, puzzle | 0x12013000l, partsUsed | 0x800l);
09610:          if(!(puzzle & 0x1001b000l))
09611:            doSolve32(13, 0x2000l, puzzle | 0x1001b000l, partsUsed | 0x800l);
09612:          if(!(puzzle & 0x201b000l))
09613:            doSolve32(13, 0x2000l, puzzle | 0x201b000l, partsUsed | 0x800l);
09614:       }
09615:       if(!(puzzle & 0x1b001000l))
09616:         doSolve32(13, 0x2000l, puzzle | 0x1b001000l, partsUsed | 0x800l);
09617:     piece12at12at32:
09618:     break;
09619:    case 13:
09620:       if (partsUsed & 0x2l) goto piece2at13at32;
09621:       if(!(puzzle & 0x7a000l))
09622:         doSolve32(14, 0x4000l, puzzle | 0x7a000l, partsUsed | 0x2l);
09623:     piece2at13at32:
09624:       if (partsUsed & 0x4l) goto piece3at13at32;
09625:       if(!(puzzle & 0x9e000l))
09626:         doSolve32(14, 0x4000l, puzzle | 0x9e000l, partsUsed | 0x4l);
09627:     piece3at13at32:
09628:       if (partsUsed & 0x8l) goto piece4at13at32;
09629:       if(!(puzzle & 0x3e000l))
09630:         doSolve32(14, 0x4000l, puzzle | 0x3e000l, partsUsed | 0x8l);
09631:     piece4at13at32:
09632:       if (partsUsed & 0x10l) goto piece5at13at32;
09633:       if(!(puzzle & 0x92482000l))
09634:         doSolve32(14, 0x4000l, puzzle | 0x92482000l, partsUsed | 0x10l);
09635:     piece5at13at32:
09636:       if (partsUsed & 0x40l) goto piece7at13at32;
09637:       if(!(puzzle & 0x92402000l))
09638:         doSolve32(14, 0x4000l, puzzle | 0x92402000l, partsUsed | 0x40l);
09639:     piece7at13at32:
09640:       if (partsUsed & 0x80l) goto piece8at13at32;
09641:       if(!(puzzle & 0x92082000l))
09642:         doSolve32(14, 0x4000l, puzzle | 0x92082000l, partsUsed | 0x80l);
09643:       if(!(puzzle & 0x82092000l))
09644:         doSolve32(14, 0x4000l, puzzle | 0x82092000l, partsUsed | 0x80l);
09645:     piece8at13at32:
09646:       if (partsUsed & 0x100l) goto piece9at13at32;
09647:       if(!(puzzle & 0x3202000l))
09648:         doSolve32(14, 0x4000l, puzzle | 0x3202000l, partsUsed | 0x100l);
09649:       if(!(puzzle & 0x3012000l))
09650:         doSolve32(14, 0x4000l, puzzle | 0x3012000l, partsUsed | 0x100l);
09651:       if(!(puzzle & 0x801a000l))
09652:         doSolve32(14, 0x4000l, puzzle | 0x801a000l, partsUsed | 0x100l);
09653:       if(!(puzzle & 0x1a002000l))
09654:         doSolve32(14, 0x4000l, puzzle | 0x1a002000l, partsUsed | 0x100l);
09655:     piece9at13at32:
09656:       if (partsUsed & 0x200l) goto piece10at13at32;
09657:       if(!(puzzle & 0x5e000l))
09658:         doSolve32(14, 0x4000l, puzzle | 0x5e000l, partsUsed | 0x200l);
09659:     piece10at13at32:
09660:       if (partsUsed & 0x400l) goto piece11at13at32;
09661:       if (!(puzzle & 0x10012000l)) {
09662:          if(!(puzzle & 0x12412000l))
09663:            doSolve32(14, 0x4000l, puzzle | 0x12412000l, partsUsed | 0x400l);
09664:          if(!(puzzle & 0x92012000l))
09665:            doSolve32(14, 0x4000l, puzzle | 0x92012000l, partsUsed | 0x400l);
09666:          if(!(puzzle & 0x90092000l))
09667:            doSolve32(14, 0x4000l, puzzle | 0x90092000l, partsUsed | 0x400l);
09668:          if(!(puzzle & 0x12092000l))
09669:            doSolve32(14, 0x4000l, puzzle | 0x12092000l, partsUsed | 0x400l);
09670:       }
09671:       if(!(puzzle & 0xda000l))
09672:         doSolve32(14, 0x4000l, puzzle | 0xda000l, partsUsed | 0x400l);
09673:     piece11at13at32:
09674:       if (partsUsed & 0x800l) goto piece12at13at32;
09675:       if (!(puzzle & 0x3002000l)) {
09676:          if(!(puzzle & 0x3602000l))
09677:            doSolve32(14, 0x4000l, puzzle | 0x3602000l, partsUsed | 0x800l);
09678:          if(!(puzzle & 0x1b002000l))
09679:            doSolve32(14, 0x4000l, puzzle | 0x1b002000l, partsUsed | 0x800l);
09680:          if(!(puzzle & 0x13012000l))
09681:            doSolve32(14, 0x4000l, puzzle | 0x13012000l, partsUsed | 0x800l);
09682:       }
09683:       if (!(puzzle & 0x10012000l)) {
09684:          if(!(puzzle & 0x1a012000l))
09685:            doSolve32(14, 0x4000l, puzzle | 0x1a012000l, partsUsed | 0x800l);
09686:          if(!(puzzle & 0x1801a000l))
09687:            doSolve32(14, 0x4000l, puzzle | 0x1801a000l, partsUsed | 0x800l);
09688:          if(!(puzzle & 0x1201a000l))
09689:            doSolve32(14, 0x4000l, puzzle | 0x1201a000l, partsUsed | 0x800l);
09690:       }
09691:     piece12at13at32:
09692:     break;
09693:    case 14:
09694:       if (partsUsed & 0x40l) goto piece7at14at32;
09695:       if(!(puzzle & 0x24904000l))
09696:         doSolve32(15, 0x8000l, puzzle | 0x24904000l, partsUsed | 0x40l);
09697:     piece7at14at32:
09698:       if (partsUsed & 0x80l) goto piece8at14at32;
09699:       if(!(puzzle & 0xbc000l))
09700:         doSolve32(15, 0x8000l, puzzle | 0xbc000l, partsUsed | 0x80l);
09701:       if(!(puzzle & 0xf4000l))
09702:         doSolve32(15, 0x8000l, puzzle | 0xf4000l, partsUsed | 0x80l);
09703:       if(!(puzzle & 0x1c014000l))
09704:         doSolve32(15, 0x8000l, puzzle | 0x1c014000l, partsUsed | 0x80l);
09705:       if(!(puzzle & 0x1401c000l))
09706:         doSolve32(15, 0x8000l, puzzle | 0x1401c000l, partsUsed | 0x80l);
09707:     piece8at14at32:
09708:       if (partsUsed & 0x100l) goto piece9at14at32;
09709:       if(!(puzzle & 0x900c000l))
09710:         doSolve32(15, 0x8000l, puzzle | 0x900c000l, partsUsed | 0x100l);
09711:       if(!(puzzle & 0x802c000l))
09712:         doSolve32(15, 0x8000l, puzzle | 0x802c000l, partsUsed | 0x100l);
09713:       if(!(puzzle & 0x5804000l))
09714:         doSolve32(15, 0x8000l, puzzle | 0x5804000l, partsUsed | 0x100l);
09715:       if(!(puzzle & 0x4c004000l))
09716:         doSolve32(15, 0x8000l, puzzle | 0x4c004000l, partsUsed | 0x100l);
09717:       if(!(puzzle & 0x2400c000l))
09718:         doSolve32(15, 0x8000l, puzzle | 0x2400c000l, partsUsed | 0x100l);
09719:       if(!(puzzle & 0x60024000l))
09720:         doSolve32(15, 0x8000l, puzzle | 0x60024000l, partsUsed | 0x100l);
09721:       if(!(puzzle & 0x4064000l))
09722:         doSolve32(15, 0x8000l, puzzle | 0x4064000l, partsUsed | 0x100l);
09723:       if(!(puzzle & 0x4004c000l))
09724:         doSolve32(15, 0x8000l, puzzle | 0x4004c000l, partsUsed | 0x100l);
09725:     piece9at14at32:
09726:       if (partsUsed & 0x400l) goto piece11at14at32;
09727:       if (!(puzzle & 0x4c000l)) {
09728:          if(!(puzzle & 0xdc000l))
09729:            doSolve32(15, 0x8000l, puzzle | 0xdc000l, partsUsed | 0x400l);
09730:          if(!(puzzle & 0x7c000l))
09731:            doSolve32(15, 0x8000l, puzzle | 0x7c000l, partsUsed | 0x400l);
09732:          if(!(puzzle & 0xec000l))
09733:            doSolve32(15, 0x8000l, puzzle | 0xec000l, partsUsed | 0x400l);
09734:       }
09735:       if (!(puzzle & 0x800c000l)) {
09736:          if(!(puzzle & 0x1c00c000l))
09737:            doSolve32(15, 0x8000l, puzzle | 0x1c00c000l, partsUsed | 0x400l);
09738:          if(!(puzzle & 0xc01c000l))
09739:            doSolve32(15, 0x8000l, puzzle | 0xc01c000l, partsUsed | 0x400l);
09740:          if(!(puzzle & 0x1801c000l))
09741:            doSolve32(15, 0x8000l, puzzle | 0x1801c000l, partsUsed | 0x400l);
09742:       }
09743:       if(!(puzzle & 0x24824000l))
09744:         doSolve32(15, 0x8000l, puzzle | 0x24824000l, partsUsed | 0x400l);
09745:     piece11at14at32:
09746:       if (partsUsed & 0x800l) goto piece12at14at32;
09747:       if (!(puzzle & 0xc004000l)) {
09748:          if(!(puzzle & 0xd804000l))
09749:            doSolve32(15, 0x8000l, puzzle | 0xd804000l, partsUsed | 0x800l);
09750:          if(!(puzzle & 0xd00c000l))
09751:            doSolve32(15, 0x8000l, puzzle | 0xd00c000l, partsUsed | 0x800l);
09752:          if(!(puzzle & 0xc80c000l))
09753:            doSolve32(15, 0x8000l, puzzle | 0xc80c000l, partsUsed | 0x800l);
09754:          if(!(puzzle & 0x2c00c000l))
09755:            doSolve32(15, 0x8000l, puzzle | 0x2c00c000l, partsUsed | 0x800l);
09756:          if(!(puzzle & 0x2c024000l))
09757:            doSolve32(15, 0x8000l, puzzle | 0x2c024000l, partsUsed | 0x800l);
09758:          if(!(puzzle & 0xc02c000l))
09759:            doSolve32(15, 0x8000l, puzzle | 0xc02c000l, partsUsed | 0x800l);
09760:          if(!(puzzle & 0xc04c000l))
09761:            doSolve32(15, 0x8000l, puzzle | 0xc04c000l, partsUsed | 0x800l);
09762:          if(!(puzzle & 0x4c00c000l))
09763:            doSolve32(15, 0x8000l, puzzle | 0x4c00c000l, partsUsed | 0x800l);
09764:          if(!(puzzle & 0x6c004000l))
09765:            doSolve32(15, 0x8000l, puzzle | 0x6c004000l, partsUsed | 0x800l);
09766:       }
09767:       if (!(puzzle & 0x64000l)) {
09768:          if(!(puzzle & 0x406c000l))
09769:            doSolve32(15, 0x8000l, puzzle | 0x406c000l, partsUsed | 0x800l);
09770:          if(!(puzzle & 0x60064000l))
09771:            doSolve32(15, 0x8000l, puzzle | 0x60064000l, partsUsed | 0x800l);
09772:          if(!(puzzle & 0x24064000l))
09773:            doSolve32(15, 0x8000l, puzzle | 0x24064000l, partsUsed | 0x800l);
09774:          if(!(puzzle & 0x4006c000l))
09775:            doSolve32(15, 0x8000l, puzzle | 0x4006c000l, partsUsed | 0x800l);
09776:          if(!(puzzle & 0x806c000l))
09777:            doSolve32(15, 0x8000l, puzzle | 0x806c000l, partsUsed | 0x800l);
09778:          if(!(puzzle & 0x2006c000l))
09779:            doSolve32(15, 0x8000l, puzzle | 0x2006c000l, partsUsed | 0x800l);
09780:       }
09781:       if(!(puzzle & 0x4804c000l))
09782:         doSolve32(15, 0x8000l, puzzle | 0x4804c000l, partsUsed | 0x800l);
09783:       if(!(puzzle & 0x64024000l))
09784:         doSolve32(15, 0x8000l, puzzle | 0x64024000l, partsUsed | 0x800l);
09785:       if(!(puzzle & 0x2402c000l))
09786:         doSolve32(15, 0x8000l, puzzle | 0x2402c000l, partsUsed | 0x800l);
09787:     piece12at14at32:
09788:     break;
09789:    case 15:
09790:       if (partsUsed & 0x40l) goto piece7at15at32;
09791:       if(!(puzzle & 0x49208000l))
09792:         doSolve32(16, 0x10000l, puzzle | 0x49208000l, partsUsed | 0x40l);
09793:     piece7at15at32:
09794:       if (partsUsed & 0x100l) goto piece9at15at32;
09795:       if(!(puzzle & 0xc808000l))
09796:         doSolve32(16, 0x10000l, puzzle | 0xc808000l, partsUsed | 0x100l);
09797:       if(!(puzzle & 0xc048000l))
09798:         doSolve32(16, 0x10000l, puzzle | 0xc048000l, partsUsed | 0x100l);
09799:       if(!(puzzle & 0x12018000l))
09800:         doSolve32(16, 0x10000l, puzzle | 0x12018000l, partsUsed | 0x100l);
09801:       if(!(puzzle & 0x10058000l))
09802:         doSolve32(16, 0x10000l, puzzle | 0x10058000l, partsUsed | 0x100l);
09803:       if(!(puzzle & 0xb008000l))
09804:         doSolve32(16, 0x10000l, puzzle | 0xb008000l, partsUsed | 0x100l);
09805:       if(!(puzzle & 0x20068000l))
09806:         doSolve32(16, 0x10000l, puzzle | 0x20068000l, partsUsed | 0x100l);
09807:       if(!(puzzle & 0x68008000l))
09808:         doSolve32(16, 0x10000l, puzzle | 0x68008000l, partsUsed | 0x100l);
09809:       if(!(puzzle & 0x48018000l))
09810:         doSolve32(16, 0x10000l, puzzle | 0x48018000l, partsUsed | 0x100l);
09811:       if(!(puzzle & 0x98008000l))
09812:         doSolve32(16, 0x10000l, puzzle | 0x98008000l, partsUsed | 0x100l);
09813:       if(!(puzzle & 0xc0048000l))
09814:         doSolve32(16, 0x10000l, puzzle | 0xc0048000l, partsUsed | 0x100l);
09815:       if(!(puzzle & 0x80c8000l))
09816:         doSolve32(16, 0x10000l, puzzle | 0x80c8000l, partsUsed | 0x100l);
09817:       if(!(puzzle & 0x80098000l))
09818:         doSolve32(16, 0x10000l, puzzle | 0x80098000l, partsUsed | 0x100l);
09819:     piece9at15at32:
09820:       if (partsUsed & 0x400l) goto piece11at15at32;
09821:       if(!(puzzle & 0x1c018000l))
09822:         doSolve32(16, 0x10000l, puzzle | 0x1c018000l, partsUsed | 0x400l);
09823:       if(!(puzzle & 0x49048000l))
09824:         doSolve32(16, 0x10000l, puzzle | 0x49048000l, partsUsed | 0x400l);
09825:       if(!(puzzle & 0xf8000l))
09826:         doSolve32(16, 0x10000l, puzzle | 0xf8000l, partsUsed | 0x400l);
09827:     piece11at15at32:
09828:       if (partsUsed & 0x800l) goto piece12at15at32;
09829:       if (!(puzzle & 0x9008000l)) {
09830:          if(!(puzzle & 0xd808000l))
09831:            doSolve32(16, 0x10000l, puzzle | 0xd808000l, partsUsed | 0x800l);
09832:          if(!(puzzle & 0x1b008000l))
09833:            doSolve32(16, 0x10000l, puzzle | 0x1b008000l, partsUsed | 0x800l);
09834:          if(!(puzzle & 0x19018000l))
09835:            doSolve32(16, 0x10000l, puzzle | 0x19018000l, partsUsed | 0x800l);
09836:       }
09837:       if (!(puzzle & 0x8018000l)) {
09838:          if(!(puzzle & 0x1a018000l))
09839:            doSolve32(16, 0x10000l, puzzle | 0x1a018000l, partsUsed | 0x800l);
09840:          if(!(puzzle & 0x80d8000l))
09841:            doSolve32(16, 0x10000l, puzzle | 0x80d8000l, partsUsed | 0x800l);
09842:          if(!(puzzle & 0x58018000l))
09843:            doSolve32(16, 0x10000l, puzzle | 0x58018000l, partsUsed | 0x800l);
09844:          if(!(puzzle & 0x18058000l))
09845:            doSolve32(16, 0x10000l, puzzle | 0x18058000l, partsUsed | 0x800l);
09846:          if(!(puzzle & 0x18098000l))
09847:            doSolve32(16, 0x10000l, puzzle | 0x18098000l, partsUsed | 0x800l);
09848:          if(!(puzzle & 0x98018000l))
09849:            doSolve32(16, 0x10000l, puzzle | 0x98018000l, partsUsed | 0x800l);
09850:          if(!(puzzle & 0x48058000l))
09851:            doSolve32(16, 0x10000l, puzzle | 0x48058000l, partsUsed | 0x800l);
09852:       }
09853:       if (!(puzzle & 0x60008000l)) {
09854:          if(!(puzzle & 0x6c008000l))
09855:            doSolve32(16, 0x10000l, puzzle | 0x6c008000l, partsUsed | 0x800l);
09856:          if(!(puzzle & 0x68048000l))
09857:            doSolve32(16, 0x10000l, puzzle | 0x68048000l, partsUsed | 0x800l);
09858:          if(!(puzzle & 0x60068000l))
09859:            doSolve32(16, 0x10000l, puzzle | 0x60068000l, partsUsed | 0x800l);
09860:       }
09861:       if (!(puzzle & 0x40048000l)) {
09862:          if(!(puzzle & 0x4c048000l))
09863:            doSolve32(16, 0x10000l, puzzle | 0x4c048000l, partsUsed | 0x800l);
09864:          if(!(puzzle & 0x48068000l))
09865:            doSolve32(16, 0x10000l, puzzle | 0x48068000l, partsUsed | 0x800l);
09866:          if(!(puzzle & 0xc00c8000l))
09867:            doSolve32(16, 0x10000l, puzzle | 0xc00c8000l, partsUsed | 0x800l);
09868:          if(!(puzzle & 0x58048000l))
09869:            doSolve32(16, 0x10000l, puzzle | 0x58048000l, partsUsed | 0x800l);
09870:          if(!(puzzle & 0x480c8000l))
09871:            doSolve32(16, 0x10000l, puzzle | 0x480c8000l, partsUsed | 0x800l);
09872:          if(!(puzzle & 0x400d8000l))
09873:            doSolve32(16, 0x10000l, puzzle | 0x400d8000l, partsUsed | 0x800l);
09874:          if(!(puzzle & 0xc8048000l))
09875:            doSolve32(16, 0x10000l, puzzle | 0xc8048000l, partsUsed | 0x800l);
09876:       }
09877:       if (!(puzzle & 0x98000l)) {
09878:          if(!(puzzle & 0x90098000l))
09879:            doSolve32(16, 0x10000l, puzzle | 0x90098000l, partsUsed | 0x800l);
09880:          if(!(puzzle & 0x800d8000l))
09881:            doSolve32(16, 0x10000l, puzzle | 0x800d8000l, partsUsed | 0x800l);
09882:          if(!(puzzle & 0x100d8000l))
09883:            doSolve32(16, 0x10000l, puzzle | 0x100d8000l, partsUsed | 0x800l);
09884:       }
09885:       if(!(puzzle & 0xd8008000l))
09886:         doSolve32(16, 0x10000l, puzzle | 0xd8008000l, partsUsed | 0x800l);
09887:     piece12at15at32:
09888:     break;
09889:    case 16:
09890:       if (partsUsed & 0x40l) goto piece7at16at32;
09891:       if(!(puzzle & 0x92410000l))
09892:         doSolve32(17, 0x20000l, puzzle | 0x92410000l, partsUsed | 0x40l);
09893:     piece7at16at32:
09894:       if (partsUsed & 0x100l) goto piece9at16at32;
09895:       if(!(puzzle & 0x19010000l))
09896:         doSolve32(17, 0x20000l, puzzle | 0x19010000l, partsUsed | 0x100l);
09897:       if(!(puzzle & 0x18090000l))
09898:         doSolve32(17, 0x20000l, puzzle | 0x18090000l, partsUsed | 0x100l);
09899:       if(!(puzzle & 0x400d0000l))
09900:         doSolve32(17, 0x20000l, puzzle | 0x400d0000l, partsUsed | 0x100l);
09901:       if(!(puzzle & 0xd0010000l))
09902:         doSolve32(17, 0x20000l, puzzle | 0xd0010000l, partsUsed | 0x100l);
09903:     piece9at16at32:
09904:       if (partsUsed & 0x400l) goto piece11at16at32;
09905:       if(!(puzzle & 0x92090000l))
09906:         doSolve32(17, 0x20000l, puzzle | 0x92090000l, partsUsed | 0x400l);
09907:     piece11at16at32:
09908:       if (partsUsed & 0x800l) goto piece12at16at32;
09909:       if (!(puzzle & 0x18010000l)) {
09910:          if(!(puzzle & 0x1b010000l))
09911:            doSolve32(17, 0x20000l, puzzle | 0x1b010000l, partsUsed | 0x800l);
09912:          if(!(puzzle & 0xd8010000l))
09913:            doSolve32(17, 0x20000l, puzzle | 0xd8010000l, partsUsed | 0x800l);
09914:          if(!(puzzle & 0x98090000l))
09915:            doSolve32(17, 0x20000l, puzzle | 0x98090000l, partsUsed | 0x800l);
09916:       }
09917:       if (!(puzzle & 0x80090000l)) {
09918:          if(!(puzzle & 0xd0090000l))
09919:            doSolve32(17, 0x20000l, puzzle | 0xd0090000l, partsUsed | 0x800l);
09920:          if(!(puzzle & 0xc00d0000l))
09921:            doSolve32(17, 0x20000l, puzzle | 0xc00d0000l, partsUsed | 0x800l);
09922:          if(!(puzzle & 0x900d0000l))
09923:            doSolve32(17, 0x20000l, puzzle | 0x900d0000l, partsUsed | 0x800l);
09924:       }
09925:     piece12at16at32:
09926:     break;
09927:    case 17:
09928:       if (partsUsed & 0x20l) goto piece6at17at32;
09929:       if(!(puzzle & 0x24920000l))
09930:         doSolve32(18, 0x40000l, puzzle | 0x24920000l, partsUsed | 0x20l);
09931:     piece6at17at32:
09932:       if (partsUsed & 0x80l) goto piece8at17at32;
09933:       if(!(puzzle & 0xe00a0000l))
09934:         doSolve32(18, 0x40000l, puzzle | 0xe00a0000l, partsUsed | 0x80l);
09935:       if(!(puzzle & 0xa00e0000l))
09936:         doSolve32(18, 0x40000l, puzzle | 0xa00e0000l, partsUsed | 0x80l);
09937:     piece8at17at32:
09938:       if (partsUsed & 0x100l) goto piece9at17at32;
09939:       if(!(puzzle & 0x48060000l))
09940:         doSolve32(18, 0x40000l, puzzle | 0x48060000l, partsUsed | 0x100l);
09941:       if(!(puzzle & 0x2c020000l))
09942:         doSolve32(18, 0x40000l, puzzle | 0x2c020000l, partsUsed | 0x100l);
09943:     piece9at17at32:
09944:       if (partsUsed & 0x400l) goto piece11at17at32;
09945:       if (!(puzzle & 0x40060000l)) {
09946:          if(!(puzzle & 0xe0060000l))
09947:            doSolve32(18, 0x40000l, puzzle | 0xe0060000l, partsUsed | 0x400l);
09948:          if(!(puzzle & 0x600e0000l))
09949:            doSolve32(18, 0x40000l, puzzle | 0x600e0000l, partsUsed | 0x400l);
09950:          if(!(puzzle & 0xc00e0000l))
09951:            doSolve32(18, 0x40000l, puzzle | 0xc00e0000l, partsUsed | 0x400l);
09952:       }
09953:     piece11at17at32:
09954:       if (partsUsed & 0x800l) goto piece12at17at32;
09955:       if (!(puzzle & 0x60020000l)) {
09956:          if(!(puzzle & 0x6c020000l))
09957:            doSolve32(18, 0x40000l, puzzle | 0x6c020000l, partsUsed | 0x800l);
09958:          if(!(puzzle & 0x68060000l))
09959:            doSolve32(18, 0x40000l, puzzle | 0x68060000l, partsUsed | 0x800l);
09960:          if(!(puzzle & 0x64060000l))
09961:            doSolve32(18, 0x40000l, puzzle | 0x64060000l, partsUsed | 0x800l);
09962:       }
09963:     piece12at17at32:
09964:     break;
09965:    case 18:
09966:       if (partsUsed & 0x20l) goto piece6at18at32;
09967:       if(!(puzzle & 0x49240000l))
09968:         doSolve32(19, 0x80000l, puzzle | 0x49240000l, partsUsed | 0x20l);
09969:     piece6at18at32:
09970:       if (partsUsed & 0x100l) goto piece9at18at32;
09971:       if(!(puzzle & 0x58040000l))
09972:         doSolve32(19, 0x80000l, puzzle | 0x58040000l, partsUsed | 0x100l);
09973:       if(!(puzzle & 0x64040000l))
09974:         doSolve32(19, 0x80000l, puzzle | 0x64040000l, partsUsed | 0x100l);
09975:       if(!(puzzle & 0x900c0000l))
09976:         doSolve32(19, 0x80000l, puzzle | 0x900c0000l, partsUsed | 0x100l);
09977:     piece9at18at32:
09978:       if (partsUsed & 0x400l) goto piece11at18at32;
09979:       if(!(puzzle & 0xe00c0000l))
09980:         doSolve32(19, 0x80000l, puzzle | 0xe00c0000l, partsUsed | 0x400l);
09981:     piece11at18at32:
09982:       if (partsUsed & 0x800l) goto piece12at18at32;
09983:       if (!(puzzle & 0x48040000l)) {
09984:          if(!(puzzle & 0x6c040000l))
09985:            doSolve32(19, 0x80000l, puzzle | 0x6c040000l, partsUsed | 0x800l);
09986:          if(!(puzzle & 0xd8040000l))
09987:            doSolve32(19, 0x80000l, puzzle | 0xd8040000l, partsUsed | 0x800l);
09988:          if(!(puzzle & 0xc80c0000l))
09989:            doSolve32(19, 0x80000l, puzzle | 0xc80c0000l, partsUsed | 0x800l);
09990:       }
09991:       if(!(puzzle & 0xd00c0000l))
09992:         doSolve32(19, 0x80000l, puzzle | 0xd00c0000l, partsUsed | 0x800l);
09993:     piece12at18at32:
09994:     break;
09995:    case 19:
09996:       if (partsUsed & 0x20l) goto piece6at19at32;
09997:       if(!(puzzle & 0x92480000l))
09998:         doSolve32(20, 0x100000l, puzzle | 0x92480000l, partsUsed | 0x20l);
09999:     piece6at19at32:
10000:       if (partsUsed & 0x100l) goto piece9at19at32;
10001:       if(!(puzzle & 0xc8080000l))
10002:         doSolve32(20, 0x100000l, puzzle | 0xc8080000l, partsUsed | 0x100l);
10003:     piece9at19at32:
10004:       if (partsUsed & 0x800l) goto piece12at19at32;
10005:       if(!(puzzle & 0xd8080000l))
10006:         doSolve32(20, 0x100000l, puzzle | 0xd8080000l, partsUsed | 0x800l);
10007:     piece12at19at32:
10008:     break;
10009:    case 20:
10010:       if (partsUsed & 0x2l) goto piece2at20at32;
10011:       if(!(puzzle & 0x13300000l))
10012:         doSolve32(21, 0x200000l, puzzle | 0x13300000l, partsUsed | 0x2l);
10013:       if(!(puzzle & 0x19900000l))
10014:         doSolve32(21, 0x200000l, puzzle | 0x19900000l, partsUsed | 0x2l);
10015:     piece2at20at32:
10016:       if (partsUsed & 0x4l) goto piece3at20at32;
10017:       if(!(puzzle & 0x9700000l))
10018:         doSolve32(21, 0x200000l, puzzle | 0x9700000l, partsUsed | 0x4l);
10019:       if(!(puzzle & 0x7900000l))
10020:         doSolve32(21, 0x200000l, puzzle | 0x7900000l, partsUsed | 0x4l);
10021:     piece3at20at32:
10022:       if (partsUsed & 0x8l) goto piece4at20at32;
10023:       if(!(puzzle & 0x19300000l))
10024:         doSolve32(21, 0x200000l, puzzle | 0x19300000l, partsUsed | 0x8l);
10025:       if(!(puzzle & 0x13900000l))
10026:         doSolve32(21, 0x200000l, puzzle | 0x13900000l, partsUsed | 0x8l);
10027:     piece4at20at32:
10028:       if (partsUsed & 0x10l) goto piece5at20at32;
10029:       if(!(puzzle & 0x2cb00000l))
10030:         doSolve32(21, 0x200000l, puzzle | 0x2cb00000l, partsUsed | 0x10l);
10031:       if(!(puzzle & 0x65900000l))
10032:         doSolve32(21, 0x200000l, puzzle | 0x65900000l, partsUsed | 0x10l);
10033:       if(!(puzzle & 0x4d300000l))
10034:         doSolve32(21, 0x200000l, puzzle | 0x4d300000l, partsUsed | 0x10l);
10035:     piece5at20at32:
10036:       if (partsUsed & 0x20l) goto piece6at20at32;
10037:       if(!(puzzle & 0x24b00000l))
10038:         doSolve32(21, 0x200000l, puzzle | 0x24b00000l, partsUsed | 0x20l);
10039:       if(!(puzzle & 0x64900000l))
10040:         doSolve32(21, 0x200000l, puzzle | 0x64900000l, partsUsed | 0x20l);
10041:       if(!(puzzle & 0x49300000l))
10042:         doSolve32(21, 0x200000l, puzzle | 0x49300000l, partsUsed | 0x20l);
10043:     piece6at20at32:
10044:       if (partsUsed & 0x40l) goto piece7at20at32;
10045:       if(!(puzzle & 0x25900000l))
10046:         doSolve32(21, 0x200000l, puzzle | 0x25900000l, partsUsed | 0x40l);
10047:       if(!(puzzle & 0x2c900000l))
10048:         doSolve32(21, 0x200000l, puzzle | 0x2c900000l, partsUsed | 0x40l);
10049:     piece7at20at32:
10050:       if (partsUsed & 0x80l) goto piece8at20at32;
10051:       if(!(puzzle & 0x3d00000l))
10052:         doSolve32(21, 0x200000l, puzzle | 0x3d00000l, partsUsed | 0x80l);
10053:       if(!(puzzle & 0x2f00000l))
10054:         doSolve32(21, 0x200000l, puzzle | 0x2f00000l, partsUsed | 0x80l);
10055:       if(!(puzzle & 0xcb00000l))
10056:         doSolve32(21, 0x200000l, puzzle | 0xcb00000l, partsUsed | 0x80l);
10057:       if(!(puzzle & 0xd300000l))
10058:         doSolve32(21, 0x200000l, puzzle | 0xd300000l, partsUsed | 0x80l);
10059:     piece8at20at32:
10060:       if (partsUsed & 0x200l) goto piece10at20at32;
10061:       if(!(puzzle & 0xb300000l))
10062:         doSolve32(21, 0x200000l, puzzle | 0xb300000l, partsUsed | 0x200l);
10063:       if(!(puzzle & 0xb900000l))
10064:         doSolve32(21, 0x200000l, puzzle | 0xb900000l, partsUsed | 0x200l);
10065:     piece10at20at32:
10066:       if (partsUsed & 0x400l) goto piece11at20at32;
10067:       if (!(puzzle & 0x1300000l)) {
10068:          if(!(puzzle & 0x3700000l))
10069:            doSolve32(21, 0x200000l, puzzle | 0x3700000l, partsUsed | 0x400l);
10070:          if(!(puzzle & 0x1f00000l))
10071:            doSolve32(21, 0x200000l, puzzle | 0x1f00000l, partsUsed | 0x400l);
10072:          if(!(puzzle & 0x5b00000l))
10073:            doSolve32(21, 0x200000l, puzzle | 0x5b00000l, partsUsed | 0x400l);
10074:          if(!(puzzle & 0x9b00000l))
10075:            doSolve32(21, 0x200000l, puzzle | 0x9b00000l, partsUsed | 0x400l);
10076:          if(!(puzzle & 0x3b00000l))
10077:            doSolve32(21, 0x200000l, puzzle | 0x3b00000l, partsUsed | 0x400l);
10078:       }
10079:       if(!(puzzle & 0xd900000l))
10080:         doSolve32(21, 0x200000l, puzzle | 0xd900000l, partsUsed | 0x400l);
10081:     piece11at20at32:
10082:     break;
10083:    case 21:
10084:       if (partsUsed & 0x2l) goto piece2at21at32;
10085:       if(!(puzzle & 0x5e00000l))
10086:         doSolve32(22, 0x400000l, puzzle | 0x5e00000l, partsUsed | 0x2l);
10087:     piece2at21at32:
10088:       if (partsUsed & 0x4l) goto piece3at21at32;
10089:       if(!(puzzle & 0x1d200000l))
10090:         doSolve32(22, 0x400000l, puzzle | 0x1d200000l, partsUsed | 0x4l);
10091:     piece3at21at32:
10092:       if (partsUsed & 0x8l) goto piece4at21at32;
10093:       if(!(puzzle & 0xd600000l))
10094:         doSolve32(22, 0x400000l, puzzle | 0xd600000l, partsUsed | 0x8l);
10095:     piece4at21at32:
10096:       if (partsUsed & 0x10l) goto piece5at21at32;
10097:       if (!(puzzle & 0x49200000l)) {
10098:          if(!(puzzle & 0x69a00000l))
10099:            doSolve32(22, 0x400000l, puzzle | 0x69a00000l, partsUsed | 0x10l);
10100:          if(!(puzzle & 0xcb200000l))
10101:            doSolve32(22, 0x400000l, puzzle | 0xcb200000l, partsUsed | 0x10l);
10102:          if(!(puzzle & 0x59600000l))
10103:            doSolve32(22, 0x400000l, puzzle | 0x59600000l, partsUsed | 0x10l);
10104:       }
10105:       if(!(puzzle & 0x9a600000l))
10106:         doSolve32(22, 0x400000l, puzzle | 0x9a600000l, partsUsed | 0x10l);
10107:     piece5at21at32:
10108:       if (partsUsed & 0x20l) goto piece6at21at32;
10109:       if (!(puzzle & 0x49200000l)) {
10110:          if(!(puzzle & 0x69200000l))
10111:            doSolve32(22, 0x400000l, puzzle | 0x69200000l, partsUsed | 0x20l);
10112:          if(!(puzzle & 0x49600000l))
10113:            doSolve32(22, 0x400000l, puzzle | 0x49600000l, partsUsed | 0x20l);
10114:          if(!(puzzle & 0xc9200000l))
10115:            doSolve32(22, 0x400000l, puzzle | 0xc9200000l, partsUsed | 0x20l);
10116:       }
10117:       if(!(puzzle & 0x92600000l))
10118:         doSolve32(22, 0x400000l, puzzle | 0x92600000l, partsUsed | 0x20l);
10119:     piece6at21at32:
10120:       if (partsUsed & 0x40l) goto piece7at21at32;
10121:       if (!(puzzle & 0x49200000l)) {
10122:          if(!(puzzle & 0x49a00000l))
10123:            doSolve32(22, 0x400000l, puzzle | 0x49a00000l, partsUsed | 0x40l);
10124:          if(!(puzzle & 0x4d200000l))
10125:            doSolve32(22, 0x400000l, puzzle | 0x4d200000l, partsUsed | 0x40l);
10126:          if(!(puzzle & 0x4b200000l))
10127:            doSolve32(22, 0x400000l, puzzle | 0x4b200000l, partsUsed | 0x40l);
10128:          if(!(puzzle & 0x59200000l))
10129:            doSolve32(22, 0x400000l, puzzle | 0x59200000l, partsUsed | 0x40l);
10130:       }
10131:     piece7at21at32:
10132:       if (partsUsed & 0x80l) goto piece8at21at32;
10133:       if(!(puzzle & 0x19600000l))
10134:         doSolve32(22, 0x400000l, puzzle | 0x19600000l, partsUsed | 0x80l);
10135:       if(!(puzzle & 0x1a600000l))
10136:         doSolve32(22, 0x400000l, puzzle | 0x1a600000l, partsUsed | 0x80l);
10137:     piece8at21at32:
10138:       if (partsUsed & 0x200l) goto piece10at21at32;
10139:       if (!(puzzle & 0x1a00000l)) {
10140:          if(!(puzzle & 0x13a00000l))
10141:            doSolve32(22, 0x400000l, puzzle | 0x13a00000l, partsUsed | 0x200l);
10142:          if(!(puzzle & 0x7a00000l))
10143:            doSolve32(22, 0x400000l, puzzle | 0x7a00000l, partsUsed | 0x200l);
10144:          if(!(puzzle & 0x9e00000l))
10145:            doSolve32(22, 0x400000l, puzzle | 0x9e00000l, partsUsed | 0x200l);
10146:          if(!(puzzle & 0x19a00000l))
10147:            doSolve32(22, 0x400000l, puzzle | 0x19a00000l, partsUsed | 0x200l);
10148:       }
10149:       if(!(puzzle & 0xf200000l))
10150:         doSolve32(22, 0x400000l, puzzle | 0xf200000l, partsUsed | 0x200l);
10151:     piece10at21at32:
10152:       if (partsUsed & 0x400l) goto piece11at21at32;
10153:       if (!(puzzle & 0x3200000l)) {
10154:          if(!(puzzle & 0xb600000l))
10155:            doSolve32(22, 0x400000l, puzzle | 0xb600000l, partsUsed | 0x400l);
10156:          if(!(puzzle & 0x13600000l))
10157:            doSolve32(22, 0x400000l, puzzle | 0x13600000l, partsUsed | 0x400l);
10158:          if(!(puzzle & 0x1b200000l))
10159:            doSolve32(22, 0x400000l, puzzle | 0x1b200000l, partsUsed | 0x400l);
10160:       }
10161:       if(!(puzzle & 0x3e00000l))
10162:         doSolve32(22, 0x400000l, puzzle | 0x3e00000l, partsUsed | 0x400l);
10163:       if(!(puzzle & 0xda00000l))
10164:         doSolve32(22, 0x400000l, puzzle | 0xda00000l, partsUsed | 0x400l);
10165:     piece11at21at32:
10166:     break;
10167:    case 22:
10168:       if (partsUsed & 0x2l) goto piece2at22at32;
10169:       if(!(puzzle & 0xf400000l))
10170:         doSolve32(23, 0x800000l, puzzle | 0xf400000l, partsUsed | 0x2l);
10171:     piece2at22at32:
10172:       if (partsUsed & 0x4l) goto piece3at22at32;
10173:       if(!(puzzle & 0x13c00000l))
10174:         doSolve32(23, 0x800000l, puzzle | 0x13c00000l, partsUsed | 0x4l);
10175:     piece3at22at32:
10176:       if (partsUsed & 0x8l) goto piece4at22at32;
10177:       if(!(puzzle & 0x7c00000l))
10178:         doSolve32(23, 0x800000l, puzzle | 0x7c00000l, partsUsed | 0x8l);
10179:     piece4at22at32:
10180:       if (partsUsed & 0x10l) goto piece5at22at32;
10181:       if(!(puzzle & 0xd3400000l))
10182:         doSolve32(23, 0x800000l, puzzle | 0xd3400000l, partsUsed | 0x10l);
10183:     piece5at22at32:
10184:       if (partsUsed & 0x20l) goto piece6at22at32;
10185:       if(!(puzzle & 0xd2400000l))
10186:         doSolve32(23, 0x800000l, puzzle | 0xd2400000l, partsUsed | 0x20l);
10187:     piece6at22at32:
10188:       if (partsUsed & 0x40l) goto piece7at22at32;
10189:       if(!(puzzle & 0x93400000l))
10190:         doSolve32(23, 0x800000l, puzzle | 0x93400000l, partsUsed | 0x40l);
10191:       if(!(puzzle & 0x9a400000l))
10192:         doSolve32(23, 0x800000l, puzzle | 0x9a400000l, partsUsed | 0x40l);
10193:     piece7at22at32:
10194:       if (partsUsed & 0x200l) goto piece10at22at32;
10195:       if(!(puzzle & 0xbc00000l))
10196:         doSolve32(23, 0x800000l, puzzle | 0xbc00000l, partsUsed | 0x200l);
10197:     piece10at22at32:
10198:       if (partsUsed & 0x400l) goto piece11at22at32;
10199:       if(!(puzzle & 0x1b400000l))
10200:         doSolve32(23, 0x800000l, puzzle | 0x1b400000l, partsUsed | 0x400l);
10201:     piece11at22at32:
10202:     break;
10203:    case 23:
10204:       if (partsUsed & 0x2l) goto piece2at23at32;
10205:       if(!(puzzle & 0x99800000l))
10206:         doSolve32(24, 0x1000000l, puzzle | 0x99800000l, partsUsed | 0x2l);
10207:       if(!(puzzle & 0xcc800000l))
10208:         doSolve32(24, 0x1000000l, puzzle | 0xcc800000l, partsUsed | 0x2l);
10209:     piece2at23at32:
10210:       if (partsUsed & 0x4l) goto piece3at23at32;
10211:       if(!(puzzle & 0x4b800000l))
10212:         doSolve32(24, 0x1000000l, puzzle | 0x4b800000l, partsUsed | 0x4l);
10213:       if(!(puzzle & 0x3c800000l))
10214:         doSolve32(24, 0x1000000l, puzzle | 0x3c800000l, partsUsed | 0x4l);
10215:     piece3at23at32:
10216:       if (partsUsed & 0x8l) goto piece4at23at32;
10217:       if(!(puzzle & 0xc9800000l))
10218:         doSolve32(24, 0x1000000l, puzzle | 0xc9800000l, partsUsed | 0x8l);
10219:       if(!(puzzle & 0x9c800000l))
10220:         doSolve32(24, 0x1000000l, puzzle | 0x9c800000l, partsUsed | 0x8l);
10221:     piece4at23at32:
10222:       if (partsUsed & 0x80l) goto piece8at23at32;
10223:       if(!(puzzle & 0x1e800000l))
10224:         doSolve32(24, 0x1000000l, puzzle | 0x1e800000l, partsUsed | 0x80l);
10225:       if(!(puzzle & 0x17800000l))
10226:         doSolve32(24, 0x1000000l, puzzle | 0x17800000l, partsUsed | 0x80l);
10227:       if(!(puzzle & 0x65800000l))
10228:         doSolve32(24, 0x1000000l, puzzle | 0x65800000l, partsUsed | 0x80l);
10229:       if(!(puzzle & 0x69800000l))
10230:         doSolve32(24, 0x1000000l, puzzle | 0x69800000l, partsUsed | 0x80l);
10231:     piece8at23at32:
10232:       if (partsUsed & 0x200l) goto piece10at23at32;
10233:       if(!(puzzle & 0x59800000l))
10234:         doSolve32(24, 0x1000000l, puzzle | 0x59800000l, partsUsed | 0x200l);
10235:       if(!(puzzle & 0x5c800000l))
10236:         doSolve32(24, 0x1000000l, puzzle | 0x5c800000l, partsUsed | 0x200l);
10237:     piece10at23at32:
10238:       if (partsUsed & 0x400l) goto piece11at23at32;
10239:       if (!(puzzle & 0x9800000l)) {
10240:          if(!(puzzle & 0x1b800000l))
10241:            doSolve32(24, 0x1000000l, puzzle | 0x1b800000l, partsUsed | 0x400l);
10242:          if(!(puzzle & 0xf800000l))
10243:            doSolve32(24, 0x1000000l, puzzle | 0xf800000l, partsUsed | 0x400l);
10244:          if(!(puzzle & 0x2d800000l))
10245:            doSolve32(24, 0x1000000l, puzzle | 0x2d800000l, partsUsed | 0x400l);
10246:          if(!(puzzle & 0x4d800000l))
10247:            doSolve32(24, 0x1000000l, puzzle | 0x4d800000l, partsUsed | 0x400l);
10248:          if(!(puzzle & 0x1d800000l))
10249:            doSolve32(24, 0x1000000l, puzzle | 0x1d800000l, partsUsed | 0x400l);
10250:       }
10251:       if(!(puzzle & 0x6c800000l))
10252:         doSolve32(24, 0x1000000l, puzzle | 0x6c800000l, partsUsed | 0x400l);
10253:     piece11at23at32:
10254:     break;
10255:    case 24:
10256:       if (partsUsed & 0x2l) goto piece2at24at32;
10257:       if(!(puzzle & 0x2f000000l))
10258:         doSolve32(25, 0x2000000l, puzzle | 0x2f000000l, partsUsed | 0x2l);
10259:     piece2at24at32:
10260:       if (partsUsed & 0x4l) goto piece3at24at32;
10261:       if(!(puzzle & 0xe9000000l))
10262:         doSolve32(25, 0x2000000l, puzzle | 0xe9000000l, partsUsed | 0x4l);
10263:     piece3at24at32:
10264:       if (partsUsed & 0x8l) goto piece4at24at32;
10265:       if(!(puzzle & 0x6b000000l))
10266:         doSolve32(25, 0x2000000l, puzzle | 0x6b000000l, partsUsed | 0x8l);
10267:     piece4at24at32:
10268:       if (partsUsed & 0x80l) goto piece8at24at32;
10269:       if(!(puzzle & 0xcb000000l))
10270:         doSolve32(25, 0x2000000l, puzzle | 0xcb000000l, partsUsed | 0x80l);
10271:       if(!(puzzle & 0xd3000000l))
10272:         doSolve32(25, 0x2000000l, puzzle | 0xd3000000l, partsUsed | 0x80l);
10273:     piece8at24at32:
10274:       if (partsUsed & 0x200l) goto piece10at24at32;
10275:       if (!(puzzle & 0xd000000l)) {
10276:          if(!(puzzle & 0x9d000000l))
10277:            doSolve32(25, 0x2000000l, puzzle | 0x9d000000l, partsUsed | 0x200l);
10278:          if(!(puzzle & 0x3d000000l))
10279:            doSolve32(25, 0x2000000l, puzzle | 0x3d000000l, partsUsed | 0x200l);
10280:          if(!(puzzle & 0x4f000000l))
10281:            doSolve32(25, 0x2000000l, puzzle | 0x4f000000l, partsUsed | 0x200l);
10282:          if(!(puzzle & 0xcd000000l))
10283:            doSolve32(25, 0x2000000l, puzzle | 0xcd000000l, partsUsed | 0x200l);
10284:       }
10285:       if(!(puzzle & 0x79000000l))
10286:         doSolve32(25, 0x2000000l, puzzle | 0x79000000l, partsUsed | 0x200l);
10287:     piece10at24at32:
10288:       if (partsUsed & 0x400l) goto piece11at24at32;
10289:       if (!(puzzle & 0x19000000l)) {
10290:          if(!(puzzle & 0x5b000000l))
10291:            doSolve32(25, 0x2000000l, puzzle | 0x5b000000l, partsUsed | 0x400l);
10292:          if(!(puzzle & 0x9b000000l))
10293:            doSolve32(25, 0x2000000l, puzzle | 0x9b000000l, partsUsed | 0x400l);
10294:          if(!(puzzle & 0xd9000000l))
10295:            doSolve32(25, 0x2000000l, puzzle | 0xd9000000l, partsUsed | 0x400l);
10296:       }
10297:       if(!(puzzle & 0x1f000000l))
10298:         doSolve32(25, 0x2000000l, puzzle | 0x1f000000l, partsUsed | 0x400l);
10299:       if(!(puzzle & 0x6d000000l))
10300:         doSolve32(25, 0x2000000l, puzzle | 0x6d000000l, partsUsed | 0x400l);
10301:     piece11at24at32:
10302:     break;
10303:    case 25:
10304:       if (partsUsed & 0x2l) goto piece2at25at32;
10305:       if(!(puzzle & 0x7a000000l))
10306:         doSolve32(26, 0x4000000l, puzzle | 0x7a000000l, partsUsed | 0x2l);
10307:     piece2at25at32:
10308:       if (partsUsed & 0x4l) goto piece3at25at32;
10309:       if(!(puzzle & 0x9e000000l))
10310:         doSolve32(26, 0x4000000l, puzzle | 0x9e000000l, partsUsed | 0x4l);
10311:     piece3at25at32:
10312:       if (partsUsed & 0x8l) goto piece4at25at32;
10313:       if(!(puzzle & 0x3e000000l))
10314:         doSolve32(26, 0x4000000l, puzzle | 0x3e000000l, partsUsed | 0x8l);
10315:     piece4at25at32:
10316:       if (partsUsed & 0x200l) goto piece10at25at32;
10317:       if(!(puzzle & 0x5e000000l))
10318:         doSolve32(26, 0x4000000l, puzzle | 0x5e000000l, partsUsed | 0x200l);
10319:     piece10at25at32:
10320:       if (partsUsed & 0x400l) goto piece11at25at32;
10321:       if(!(puzzle & 0xda000000l))
10322:         doSolve32(26, 0x4000000l, puzzle | 0xda000000l, partsUsed | 0x400l);
10323:     piece11at25at32:
10324:     break;
10325:    case 26:
10326:       if (partsUsed & 0x80l) goto piece8at26at32;
10327:       if(!(puzzle & 0xbc000000l))
10328:         doSolve32(27, 0x8000000l, puzzle | 0xbc000000l, partsUsed | 0x80l);
10329:       if(!(puzzle & 0xf4000000l))
10330:         doSolve32(27, 0x8000000l, puzzle | 0xf4000000l, partsUsed | 0x80l);
10331:     piece8at26at32:
10332:       if (partsUsed & 0x400l) goto piece11at26at32;
10333:       if (!(puzzle & 0x4c000000l)) {
10334:          if(!(puzzle & 0xdc000000l))
10335:            doSolve32(27, 0x8000000l, puzzle | 0xdc000000l, partsUsed | 0x400l);
10336:          if(!(puzzle & 0x7c000000l))
10337:            doSolve32(27, 0x8000000l, puzzle | 0x7c000000l, partsUsed | 0x400l);
10338:          if(!(puzzle & 0xec000000l))
10339:            doSolve32(27, 0x8000000l, puzzle | 0xec000000l, partsUsed | 0x400l);
10340:       }
10341:     piece11at26at32:
10342:     break;
10343:    case 27:
10344:       if (partsUsed & 0x400l) goto piece11at27at32;
10345:       if(!(puzzle & 0xf8000000l))
10346:         doSolve32(28, 0x10000000l, puzzle | 0xf8000000l, partsUsed | 0x400l);
10347:     piece11at27at32:
10348:     break;
10349:   }
10350: }
10351: 
10352: 
10353: void altDoSolve(int start, long long startMask, long long puzzle, int partsUsed)
10354: {
10355:   for (;(puzzle & startMask) && start < NUM_LO_BITS; start++, startMask <<= 1);
10356: 
10357:   if(start == NUM_LO_BITS) {
10358:     altDoSolve32(0, 1, puzzle>>NUM_LO_BITS, partsUsed);
10359:     return;
10360:   }
10361: 
10362:   switch(start) {
10363:    case 4:
10364:       if (partsUsed & 0x2l) goto altpiece2at4;
10365:       if(!(puzzle & 0x480090010ll))
10366:         altDoSolve(5, 0x20ll, puzzle | 0x480090010ll,
10367:                    partsUsed | 0x2l);
10368:       if(!(puzzle & 0x400480090ll))
10369:         altDoSolve(5, 0x20ll, puzzle | 0x400480090ll,
10370:                    partsUsed | 0x2l);
10371:       if(!(puzzle & 0x1330ll))
10372:         altDoSolve(5, 0x20ll, puzzle | 0x1330ll,
10373:                    partsUsed | 0x2l);
10374:       if(!(puzzle & 0x1990ll))
10375:         altDoSolve(5, 0x20ll, puzzle | 0x1990ll,
10376:                    partsUsed | 0x2l);
10377:       if(!(puzzle & 0x40060030ll))
10378:         altDoSolve(5, 0x20ll, puzzle | 0x40060030ll,
10379:                    partsUsed | 0x2l);
10380:       if(!(puzzle & 0x60030010ll))
10381:         altDoSolve(5, 0x20ll, puzzle | 0x60030010ll,
10382:                    partsUsed | 0x2l);
10383:     altpiece2at4:
10384:       if (partsUsed & 0x4l) goto altpiece3at4;
10385:       if(!(puzzle & 0x10490010ll))
10386:         altDoSolve(5, 0x20ll, puzzle | 0x10490010ll,
10387:                    partsUsed | 0x4l);
10388:       if(!(puzzle & 0x10070010ll))
10389:         altDoSolve(5, 0x20ll, puzzle | 0x10070010ll,
10390:                    partsUsed | 0x4l);
10391:       if(!(puzzle & 0x80080490ll))
10392:         altDoSolve(5, 0x20ll, puzzle | 0x80080490ll,
10393:                    partsUsed | 0x4l);
10394:       if(!(puzzle & 0x790ll))
10395:         altDoSolve(5, 0x20ll, puzzle | 0x790ll,
10396:                    partsUsed | 0x4l);
10397:       if(!(puzzle & 0x970ll))
10398:         altDoSolve(5, 0x20ll, puzzle | 0x970ll,
10399:                    partsUsed | 0x4l);
10400:       if(!(puzzle & 0x20020070ll))
10401:         altDoSolve(5, 0x20ll, puzzle | 0x20020070ll,
10402:                    partsUsed | 0x4l);
10403:     altpiece3at4:
10404:       if (partsUsed & 0x8l) goto altpiece4at4;
10405:       if(!(puzzle & 0x400490010ll))
10406:         altDoSolve(5, 0x20ll, puzzle | 0x400490010ll,
10407:                    partsUsed | 0x8l);
10408:       if(!(puzzle & 0x480080090ll))
10409:         altDoSolve(5, 0x20ll, puzzle | 0x480080090ll,
10410:                    partsUsed | 0x8l);
10411:       if(!(puzzle & 0x1930ll))
10412:         altDoSolve(5, 0x20ll, puzzle | 0x1930ll,
10413:                    partsUsed | 0x8l);
10414:       if(!(puzzle & 0x1390ll))
10415:         altDoSolve(5, 0x20ll, puzzle | 0x1390ll,
10416:                    partsUsed | 0x8l);
10417:       if(!(puzzle & 0x40070010ll))
10418:         altDoSolve(5, 0x20ll, puzzle | 0x40070010ll,
10419:                    partsUsed | 0x8l);
10420:       if(!(puzzle & 0x60020030ll))
10421:         altDoSolve(5, 0x20ll, puzzle | 0x60020030ll,
10422:                    partsUsed | 0x8l);
10423:     altpiece4at4:
10424:       if (partsUsed & 0x10l) goto altpiece5at4;
10425:       if (!(puzzle & 0x2490ll)) {
10426:          if(!(puzzle & 0x6590ll))
10427:            altDoSolve(5, 0x20ll, puzzle | 0x6590ll,
10428:                    partsUsed | 0x10l);
10429:          if(!(puzzle & 0x2082490ll))
10430:            altDoSolve(5, 0x20ll, puzzle | 0x2082490ll,
10431:                    partsUsed | 0x10l);
10432:          if(!(puzzle & 0x2cb0ll))
10433:            altDoSolve(5, 0x20ll, puzzle | 0x2cb0ll,
10434:                    partsUsed | 0x10l);
10435:       }
10436:       if(!(puzzle & 0x90010090010ll))
10437:         altDoSolve(5, 0x20ll, puzzle | 0x90010090010ll,
10438:                    partsUsed | 0x10l);
10439:       if(!(puzzle & 0x80090080090ll))
10440:         altDoSolve(5, 0x20ll, puzzle | 0x80090080090ll,
10441:                    partsUsed | 0x10l);
10442:       if(!(puzzle & 0x412490ll))
10443:         altDoSolve(5, 0x20ll, puzzle | 0x412490ll,
10444:                    partsUsed | 0x10l);
10445:       if(!(puzzle & 0x10090010090ll))
10446:         altDoSolve(5, 0x20ll, puzzle | 0x10090010090ll,
10447:                    partsUsed | 0x10l);
10448:       if(!(puzzle & 0x4d30ll))
10449:         altDoSolve(5, 0x20ll, puzzle | 0x4d30ll,
10450:                    partsUsed | 0x10l);
10451:       if(!(puzzle & 0x2490410ll))
10452:         altDoSolve(5, 0x20ll, puzzle | 0x2490410ll,
10453:                    partsUsed | 0x10l);
10454:       if(!(puzzle & 0x30010030010ll))
10455:         altDoSolve(5, 0x20ll, puzzle | 0x30010030010ll,
10456:                    partsUsed | 0x10l);
10457:       if(!(puzzle & 0x10030010030ll))
10458:         altDoSolve(5, 0x20ll, puzzle | 0x10030010030ll,
10459:                    partsUsed | 0x10l);
10460:       if(!(puzzle & 0x20030020030ll))
10461:         altDoSolve(5, 0x20ll, puzzle | 0x20030020030ll,
10462:                    partsUsed | 0x10l);
10463:     altpiece5at4:
10464:       if (partsUsed & 0x20l) goto altpiece6at4;
10465:       if (!(puzzle & 0x10010010010ll)) {
10466:          if(!(puzzle & 0x10010010090ll))
10467:            altDoSolve(5, 0x20ll, puzzle | 0x10010010090ll,
10468:                    partsUsed | 0x20l);
10469:          if(!(puzzle & 0x90010010010ll))
10470:            altDoSolve(5, 0x20ll, puzzle | 0x90010010010ll,
10471:                    partsUsed | 0x20l);
10472:          if(!(puzzle & 0x10010010030ll))
10473:            altDoSolve(5, 0x20ll, puzzle | 0x10010010030ll,
10474:                    partsUsed | 0x20l);
10475:          if(!(puzzle & 0x30010010010ll))
10476:            altDoSolve(5, 0x20ll, puzzle | 0x30010010010ll,
10477:                    partsUsed | 0x20l);
10478:       }
10479:       if (!(puzzle & 0x2490ll)) {
10480:          if(!(puzzle & 0x2002490ll))
10481:            altDoSolve(5, 0x20ll, puzzle | 0x2002490ll,
10482:                    partsUsed | 0x20l);
10483:          if(!(puzzle & 0x24b0ll))
10484:            altDoSolve(5, 0x20ll, puzzle | 0x24b0ll,
10485:                    partsUsed | 0x20l);
10486:          if(!(puzzle & 0x12490ll))
10487:            altDoSolve(5, 0x20ll, puzzle | 0x12490ll,
10488:                    partsUsed | 0x20l);
10489:          if(!(puzzle & 0x6490ll))
10490:            altDoSolve(5, 0x20ll, puzzle | 0x6490ll,
10491:                    partsUsed | 0x20l);
10492:       }
10493:       if(!(puzzle & 0x2490010ll))
10494:         altDoSolve(5, 0x20ll, puzzle | 0x2490010ll,
10495:                    partsUsed | 0x20l);
10496:       if(!(puzzle & 0x4930ll))
10497:         altDoSolve(5, 0x20ll, puzzle | 0x4930ll,
10498:                    partsUsed | 0x20l);
10499:       if(!(puzzle & 0x80080080090ll))
10500:         altDoSolve(5, 0x20ll, puzzle | 0x80080080090ll,
10501:                    partsUsed | 0x20l);
10502:       if(!(puzzle & 0x20020020030ll))
10503:         altDoSolve(5, 0x20ll, puzzle | 0x20020020030ll,
10504:                    partsUsed | 0x20l);
10505:     altpiece6at4:
10506:       if (partsUsed & 0x40l) goto altpiece7at4;
10507:       if (!(puzzle & 0x10010010010ll)) {
10508:          if(!(puzzle & 0x10010090010ll))
10509:            altDoSolve(5, 0x20ll, puzzle | 0x10010090010ll,
10510:                    partsUsed | 0x40l);
10511:          if(!(puzzle & 0x10090010010ll))
10512:            altDoSolve(5, 0x20ll, puzzle | 0x10090010010ll,
10513:                    partsUsed | 0x40l);
10514:          if(!(puzzle & 0x10010030010ll))
10515:            altDoSolve(5, 0x20ll, puzzle | 0x10010030010ll,
10516:                    partsUsed | 0x40l);
10517:          if(!(puzzle & 0x10030010010ll))
10518:            altDoSolve(5, 0x20ll, puzzle | 0x10030010010ll,
10519:                    partsUsed | 0x40l);
10520:       }
10521:       if (!(puzzle & 0x2490ll)) {
10522:          if(!(puzzle & 0x402490ll))
10523:            altDoSolve(5, 0x20ll, puzzle | 0x402490ll,
10524:                    partsUsed | 0x40l);
10525:          if(!(puzzle & 0x2590ll))
10526:            altDoSolve(5, 0x20ll, puzzle | 0x2590ll,
10527:                    partsUsed | 0x40l);
10528:          if(!(puzzle & 0x82490ll))
10529:            altDoSolve(5, 0x20ll, puzzle | 0x82490ll,
10530:                    partsUsed | 0x40l);
10531:          if(!(puzzle & 0x2c90ll))
10532:            altDoSolve(5, 0x20ll, puzzle | 0x2c90ll,
10533:                    partsUsed | 0x40l);
10534:       }
10535:     altpiece7at4:
10536:       if (partsUsed & 0x80l) goto altpiece8at4;
10537:       if(!(puzzle & 0x90010090ll))
10538:         altDoSolve(5, 0x20ll, puzzle | 0x90010090ll,
10539:                    partsUsed | 0x80l);
10540:       if(!(puzzle & 0x90080090ll))
10541:         altDoSolve(5, 0x20ll, puzzle | 0x90080090ll,
10542:                    partsUsed | 0x80l);
10543:       if(!(puzzle & 0x490410ll))
10544:         altDoSolve(5, 0x20ll, puzzle | 0x490410ll,
10545:                    partsUsed | 0x80l);
10546:       if(!(puzzle & 0x410490ll))
10547:         altDoSolve(5, 0x20ll, puzzle | 0x410490ll,
10548:                    partsUsed | 0x80l);
10549:       if(!(puzzle & 0x2f0ll))
10550:         altDoSolve(5, 0x20ll, puzzle | 0x2f0ll,
10551:                    partsUsed | 0x80l);
10552:       if(!(puzzle & 0xcb0ll))
10553:         altDoSolve(5, 0x20ll, puzzle | 0xcb0ll,
10554:                    partsUsed | 0x80l);
10555:       if(!(puzzle & 0xd30ll))
10556:         altDoSolve(5, 0x20ll, puzzle | 0xd30ll,
10557:                    partsUsed | 0x80l);
10558:       if(!(puzzle & 0x3d0ll))
10559:         altDoSolve(5, 0x20ll, puzzle | 0x3d0ll,
10560:                    partsUsed | 0x80l);
10561:       if(!(puzzle & 0x30020030ll))
10562:         altDoSolve(5, 0x20ll, puzzle | 0x30020030ll,
10563:                    partsUsed | 0x80l);
10564:       if(!(puzzle & 0x30010030ll))
10565:         altDoSolve(5, 0x20ll, puzzle | 0x30010030ll,
10566:                    partsUsed | 0x80l);
10567:       if(!(puzzle & 0x70050ll))
10568:         altDoSolve(5, 0x20ll, puzzle | 0x70050ll,
10569:                    partsUsed | 0x80l);
10570:       if(!(puzzle & 0x50070ll))
10571:         altDoSolve(5, 0x20ll, puzzle | 0x50070ll,
10572:                    partsUsed | 0x80l);
10573:     altpiece8at4:
10574:       if (partsUsed & 0x100l) goto altpiece9at4;
10575:       if(!(puzzle & 0x100130ll))
10576:         altDoSolve(5, 0x20ll, puzzle | 0x100130ll,
10577:                    partsUsed | 0x100l);
10578:       if(!(puzzle & 0x130010ll))
10579:         altDoSolve(5, 0x20ll, puzzle | 0x130010ll,
10580:                    partsUsed | 0x100l);
10581:       if(!(puzzle & 0x200b0ll))
10582:         altDoSolve(5, 0x20ll, puzzle | 0x200b0ll,
10583:                    partsUsed | 0x100l);
10584:       if(!(puzzle & 0x90030ll))
10585:         altDoSolve(5, 0x20ll, puzzle | 0x90030ll,
10586:                    partsUsed | 0x100l);
10587:       if(!(puzzle & 0x180090ll))
10588:         altDoSolve(5, 0x20ll, puzzle | 0x180090ll,
10589:                    partsUsed | 0x100l);
10590:       if(!(puzzle & 0x10190ll))
10591:         altDoSolve(5, 0x20ll, puzzle | 0x10190ll,
10592:                    partsUsed | 0x100l);
10593:     altpiece9at4:
10594:       if (partsUsed & 0x200l) goto altpiece10at4;
10595:       if(!(puzzle & 0x80490010ll))
10596:         altDoSolve(5, 0x20ll, puzzle | 0x80490010ll,
10597:                    partsUsed | 0x200l);
10598:       if(!(puzzle & 0x80480090ll))
10599:         altDoSolve(5, 0x20ll, puzzle | 0x80480090ll,
10600:                    partsUsed | 0x200l);
10601:       if(!(puzzle & 0xb30ll))
10602:         altDoSolve(5, 0x20ll, puzzle | 0xb30ll,
10603:                    partsUsed | 0x200l);
10604:       if(!(puzzle & 0xb90ll))
10605:         altDoSolve(5, 0x20ll, puzzle | 0xb90ll,
10606:                    partsUsed | 0x200l);
10607:       if(!(puzzle & 0x20060030ll))
10608:         altDoSolve(5, 0x20ll, puzzle | 0x20060030ll,
10609:                    partsUsed | 0x200l);
10610:       if(!(puzzle & 0x20070010ll))
10611:         altDoSolve(5, 0x20ll, puzzle | 0x20070010ll,
10612:                    partsUsed | 0x200l);
10613:     altpiece10at4:
10614:       if (partsUsed & 0x400l) goto altpiece11at4;
10615:       if (!(puzzle & 0x80090ll)) {
10616:          if(!(puzzle & 0x10090090ll))
10617:            altDoSolve(5, 0x20ll, puzzle | 0x10090090ll,
10618:                    partsUsed | 0x400l);
10619:          if(!(puzzle & 0x490090ll))
10620:            altDoSolve(5, 0x20ll, puzzle | 0x490090ll,
10621:                    partsUsed | 0x400l);
10622:          if(!(puzzle & 0x480490ll))
10623:            altDoSolve(5, 0x20ll, puzzle | 0x480490ll,
10624:                    partsUsed | 0x400l);
10625:          if(!(puzzle & 0x90490ll))
10626:            altDoSolve(5, 0x20ll, puzzle | 0x90490ll,
10627:                    partsUsed | 0x400l);
10628:          if(!(puzzle & 0x80090090ll))
10629:            altDoSolve(5, 0x20ll, puzzle | 0x80090090ll,
10630:                    partsUsed | 0x400l);
10631:       }
10632:       if (!(puzzle & 0x130ll)) {
10633:          if(!(puzzle & 0x370ll))
10634:            altDoSolve(5, 0x20ll, puzzle | 0x370ll,
10635:                    partsUsed | 0x400l);
10636:          if(!(puzzle & 0x1f0ll))
10637:            altDoSolve(5, 0x20ll, puzzle | 0x1f0ll,
10638:                    partsUsed | 0x400l);
10639:          if(!(puzzle & 0x5b0ll))
10640:            altDoSolve(5, 0x20ll, puzzle | 0x5b0ll,
10641:                    partsUsed | 0x400l);
10642:          if(!(puzzle & 0x9b0ll))
10643:            altDoSolve(5, 0x20ll, puzzle | 0x9b0ll,
10644:                    partsUsed | 0x400l);
10645:          if(!(puzzle & 0x3b0ll))
10646:            altDoSolve(5, 0x20ll, puzzle | 0x3b0ll,
10647:                    partsUsed | 0x400l);
10648:       }
10649:       if (!(puzzle & 0x10010010ll)) {
10650:          if(!(puzzle & 0x90090010ll))
10651:            altDoSolve(5, 0x20ll, puzzle | 0x90090010ll,
10652:                    partsUsed | 0x400l);
10653:          if(!(puzzle & 0x10030030ll))
10654:            altDoSolve(5, 0x20ll, puzzle | 0x10030030ll,
10655:                    partsUsed | 0x400l);
10656:          if(!(puzzle & 0x30030010ll))
10657:            altDoSolve(5, 0x20ll, puzzle | 0x30030010ll,
10658:                    partsUsed | 0x400l);
10659:       }
10660:       if (!(puzzle & 0x20030ll)) {
10661:          if(!(puzzle & 0x20030030ll))
10662:            altDoSolve(5, 0x20ll, puzzle | 0x20030030ll,
10663:                    partsUsed | 0x400l);
10664:          if(!(puzzle & 0x70030ll))
10665:            altDoSolve(5, 0x20ll, puzzle | 0x70030ll,
10666:                    partsUsed | 0x400l);
10667:          if(!(puzzle & 0x30070ll))
10668:            altDoSolve(5, 0x20ll, puzzle | 0x30070ll,
10669:                    partsUsed | 0x400l);
10670:          if(!(puzzle & 0x60070ll))
10671:            altDoSolve(5, 0x20ll, puzzle | 0x60070ll,
10672:                    partsUsed | 0x400l);
10673:       }
10674:       if(!(puzzle & 0xd90ll))
10675:         altDoSolve(5, 0x20ll, puzzle | 0xd90ll,
10676:                    partsUsed | 0x400l);
10677:     altpiece11at4:
10678:     break;
10679:    case 5:
10680:       if (partsUsed & 0x2l) goto altpiece2at5;
10681:       if(!(puzzle & 0x5e0ll))
10682:         altDoSolve(6, 0x40ll, puzzle | 0x5e0ll,
10683:                    partsUsed | 0x2l);
10684:       if(!(puzzle & 0x10030060ll))
10685:         altDoSolve(6, 0x40ll, puzzle | 0x10030060ll,
10686:                    partsUsed | 0x2l);
10687:       if(!(puzzle & 0x900120020ll))
10688:         altDoSolve(6, 0x40ll, puzzle | 0x900120020ll,
10689:                    partsUsed | 0x2l);
10690:       if(!(puzzle & 0x800900120ll))
10691:         altDoSolve(6, 0x40ll, puzzle | 0x800900120ll,
10692:                    partsUsed | 0x2l);
10693:     altpiece2at5:
10694:       if (partsUsed & 0x4l) goto altpiece3at5;
10695:       if(!(puzzle & 0x1d20ll))
10696:         altDoSolve(6, 0x40ll, puzzle | 0x1d20ll,
10697:                    partsUsed | 0x4l);
10698:       if(!(puzzle & 0x100100920ll))
10699:         altDoSolve(6, 0x40ll, puzzle | 0x100100920ll,
10700:                    partsUsed | 0x4l);
10701:       if(!(puzzle & 0x70020020ll))
10702:         altDoSolve(6, 0x40ll, puzzle | 0x70020020ll,
10703:                    partsUsed | 0x4l);
10704:       if(!(puzzle & 0x20920020ll))
10705:         altDoSolve(6, 0x40ll, puzzle | 0x20920020ll,
10706:                    partsUsed | 0x4l);
10707:     altpiece3at5:
10708:       if (partsUsed & 0x8l) goto altpiece4at5;
10709:       if(!(puzzle & 0xd60ll))
10710:         altDoSolve(6, 0x40ll, puzzle | 0xd60ll,
10711:                    partsUsed | 0x8l);
10712:       if(!(puzzle & 0x30020060ll))
10713:         altDoSolve(6, 0x40ll, puzzle | 0x30020060ll,
10714:                    partsUsed | 0x8l);
10715:       if(!(puzzle & 0x800920020ll))
10716:         altDoSolve(6, 0x40ll, puzzle | 0x800920020ll,
10717:                    partsUsed | 0x8l);
10718:       if(!(puzzle & 0x900100120ll))
10719:         altDoSolve(6, 0x40ll, puzzle | 0x900100120ll,
10720:                    partsUsed | 0x8l);
10721:     altpiece4at5:
10722:       if (partsUsed & 0x10l) goto altpiece5at5;
10723:       if (!(puzzle & 0x4920ll)) {
10724:          if(!(puzzle & 0x69a0ll))
10725:            altDoSolve(6, 0x40ll, puzzle | 0x69a0ll,
10726:                    partsUsed | 0x10l);
10727:          if(!(puzzle & 0x824920ll))
10728:            altDoSolve(6, 0x40ll, puzzle | 0x824920ll,
10729:                    partsUsed | 0x10l);
10730:          if(!(puzzle & 0xcb20ll))
10731:            altDoSolve(6, 0x40ll, puzzle | 0xcb20ll,
10732:                    partsUsed | 0x10l);
10733:          if(!(puzzle & 0x4104920ll))
10734:            altDoSolve(6, 0x40ll, puzzle | 0x4104920ll,
10735:                    partsUsed | 0x10l);
10736:          if(!(puzzle & 0x5960ll))
10737:            altDoSolve(6, 0x40ll, puzzle | 0x5960ll,
10738:                    partsUsed | 0x10l);
10739:       }
10740:       if (!(puzzle & 0x20020020020ll)) {
10741:          if(!(puzzle & 0x30020030020ll))
10742:            altDoSolve(6, 0x40ll, puzzle | 0x30020030020ll,
10743:                    partsUsed | 0x10l);
10744:          if(!(puzzle & 0x120020120020ll))
10745:            altDoSolve(6, 0x40ll, puzzle | 0x120020120020ll,
10746:                    partsUsed | 0x10l);
10747:          if(!(puzzle & 0x20120020120ll))
10748:            altDoSolve(6, 0x40ll, puzzle | 0x20120020120ll,
10749:                    partsUsed | 0x10l);
10750:          if(!(puzzle & 0x60020060020ll))
10751:            altDoSolve(6, 0x40ll, puzzle | 0x60020060020ll,
10752:                    partsUsed | 0x10l);
10753:          if(!(puzzle & 0x20060020060ll))
10754:            altDoSolve(6, 0x40ll, puzzle | 0x20060020060ll,
10755:                    partsUsed | 0x10l);
10756:       }
10757:       if(!(puzzle & 0x100120100120ll))
10758:         altDoSolve(6, 0x40ll, puzzle | 0x100120100120ll,
10759:                    partsUsed | 0x10l);
10760:       if(!(puzzle & 0x9a60ll))
10761:         altDoSolve(6, 0x40ll, puzzle | 0x9a60ll,
10762:                    partsUsed | 0x10l);
10763:       if(!(puzzle & 0x4920820ll))
10764:         altDoSolve(6, 0x40ll, puzzle | 0x4920820ll,
10765:                    partsUsed | 0x10l);
10766:       if(!(puzzle & 0x40060040060ll))
10767:         altDoSolve(6, 0x40ll, puzzle | 0x40060040060ll,
10768:                    partsUsed | 0x10l);
10769:     altpiece5at5:
10770:       if (partsUsed & 0x20l) goto altpiece6at5;
10771:       if (!(puzzle & 0x4920ll)) {
10772:          if(!(puzzle & 0x6920ll))
10773:            altDoSolve(6, 0x40ll, puzzle | 0x6920ll,
10774:                    partsUsed | 0x20l);
10775:          if(!(puzzle & 0x4004920ll))
10776:            altDoSolve(6, 0x40ll, puzzle | 0x4004920ll,
10777:                    partsUsed | 0x20l);
10778:          if(!(puzzle & 0x4960ll))
10779:            altDoSolve(6, 0x40ll, puzzle | 0x4960ll,
10780:                    partsUsed | 0x20l);
10781:          if(!(puzzle & 0x24920ll))
10782:            altDoSolve(6, 0x40ll, puzzle | 0x24920ll,
10783:                    partsUsed | 0x20l);
10784:          if(!(puzzle & 0xc920ll))
10785:            altDoSolve(6, 0x40ll, puzzle | 0xc920ll,
10786:                    partsUsed | 0x20l);
10787:       }
10788:       if (!(puzzle & 0x20020020020ll)) {
10789:          if(!(puzzle & 0x30020020020ll))
10790:            altDoSolve(6, 0x40ll, puzzle | 0x30020020020ll,
10791:                    partsUsed | 0x20l);
10792:          if(!(puzzle & 0x20020020120ll))
10793:            altDoSolve(6, 0x40ll, puzzle | 0x20020020120ll,
10794:                    partsUsed | 0x20l);
10795:          if(!(puzzle & 0x120020020020ll))
10796:            altDoSolve(6, 0x40ll, puzzle | 0x120020020020ll,
10797:                    partsUsed | 0x20l);
10798:          if(!(puzzle & 0x20020020060ll))
10799:            altDoSolve(6, 0x40ll, puzzle | 0x20020020060ll,
10800:                    partsUsed | 0x20l);
10801:          if(!(puzzle & 0x60020020020ll))
10802:            altDoSolve(6, 0x40ll, puzzle | 0x60020020020ll,
10803:                    partsUsed | 0x20l);
10804:       }
10805:       if(!(puzzle & 0x4920020ll))
10806:         altDoSolve(6, 0x40ll, puzzle | 0x4920020ll,
10807:                    partsUsed | 0x20l);
10808:       if(!(puzzle & 0x9260ll))
10809:         altDoSolve(6, 0x40ll, puzzle | 0x9260ll,
10810:                    partsUsed | 0x20l);
10811:       if(!(puzzle & 0x100100100120ll))
10812:         altDoSolve(6, 0x40ll, puzzle | 0x100100100120ll,
10813:                    partsUsed | 0x20l);
10814:       if(!(puzzle & 0x40040040060ll))
10815:         altDoSolve(6, 0x40ll, puzzle | 0x40040040060ll,
10816:                    partsUsed | 0x20l);
10817:     altpiece6at5:
10818:       if (partsUsed & 0x40l) goto altpiece7at5;
10819:       if (!(puzzle & 0x4920ll)) {
10820:          if(!(puzzle & 0x49a0ll))
10821:            altDoSolve(6, 0x40ll, puzzle | 0x49a0ll,
10822:                    partsUsed | 0x40l);
10823:          if(!(puzzle & 0x4d20ll))
10824:            altDoSolve(6, 0x40ll, puzzle | 0x4d20ll,
10825:                    partsUsed | 0x40l);
10826:          if(!(puzzle & 0x804920ll))
10827:            altDoSolve(6, 0x40ll, puzzle | 0x804920ll,
10828:                    partsUsed | 0x40l);
10829:          if(!(puzzle & 0x4b20ll))
10830:            altDoSolve(6, 0x40ll, puzzle | 0x4b20ll,
10831:                    partsUsed | 0x40l);
10832:          if(!(puzzle & 0x104920ll))
10833:            altDoSolve(6, 0x40ll, puzzle | 0x104920ll,
10834:                    partsUsed | 0x40l);
10835:          if(!(puzzle & 0x5920ll))
10836:            altDoSolve(6, 0x40ll, puzzle | 0x5920ll,
10837:                    partsUsed | 0x40l);
10838:       }
10839:       if (!(puzzle & 0x20020020020ll)) {
10840:          if(!(puzzle & 0x20020030020ll))
10841:            altDoSolve(6, 0x40ll, puzzle | 0x20020030020ll,
10842:                    partsUsed | 0x40l);
10843:          if(!(puzzle & 0x20030020020ll))
10844:            altDoSolve(6, 0x40ll, puzzle | 0x20030020020ll,
10845:                    partsUsed | 0x40l);
10846:          if(!(puzzle & 0x20020120020ll))
10847:            altDoSolve(6, 0x40ll, puzzle | 0x20020120020ll,
10848:                    partsUsed | 0x40l);
10849:          if(!(puzzle & 0x20120020020ll))
10850:            altDoSolve(6, 0x40ll, puzzle | 0x20120020020ll,
10851:                    partsUsed | 0x40l);
10852:          if(!(puzzle & 0x20020060020ll))
10853:            altDoSolve(6, 0x40ll, puzzle | 0x20020060020ll,
10854:                    partsUsed | 0x40l);
10855:          if(!(puzzle & 0x20060020020ll))
10856:            altDoSolve(6, 0x40ll, puzzle | 0x20060020020ll,
10857:                    partsUsed | 0x40l);
10858:       }
10859:     altpiece7at5:
10860:       if (partsUsed & 0x80l) goto altpiece8at5;
10861:       if(!(puzzle & 0x120020120ll))
10862:         altDoSolve(6, 0x40ll, puzzle | 0x120020120ll,
10863:                    partsUsed | 0x80l);
10864:       if(!(puzzle & 0x120100120ll))
10865:         altDoSolve(6, 0x40ll, puzzle | 0x120100120ll,
10866:                    partsUsed | 0x80l);
10867:       if(!(puzzle & 0x920820ll))
10868:         altDoSolve(6, 0x40ll, puzzle | 0x920820ll,
10869:                    partsUsed | 0x80l);
10870:       if(!(puzzle & 0x820920ll))
10871:         altDoSolve(6, 0x40ll, puzzle | 0x820920ll,
10872:                    partsUsed | 0x80l);
10873:       if(!(puzzle & 0x1960ll))
10874:         altDoSolve(6, 0x40ll, puzzle | 0x1960ll,
10875:                    partsUsed | 0x80l);
10876:       if(!(puzzle & 0x1a60ll))
10877:         altDoSolve(6, 0x40ll, puzzle | 0x1a60ll,
10878:                    partsUsed | 0x80l);
10879:       if(!(puzzle & 0x60040060ll))
10880:         altDoSolve(6, 0x40ll, puzzle | 0x60040060ll,
10881:                    partsUsed | 0x80l);
10882:       if(!(puzzle & 0x60020060ll))
10883:         altDoSolve(6, 0x40ll, puzzle | 0x60020060ll,
10884:                    partsUsed | 0x80l);
10885:     altpiece8at5:
10886:       if (partsUsed & 0x100l) goto altpiece9at5;
10887:       if(!(puzzle & 0x801a0ll))
10888:         altDoSolve(6, 0x40ll, puzzle | 0x801a0ll,
10889:                    partsUsed | 0x100l);
10890:       if(!(puzzle & 0x30120ll))
10891:         altDoSolve(6, 0x40ll, puzzle | 0x30120ll,
10892:                    partsUsed | 0x100l);
10893:       if(!(puzzle & 0x20320ll))
10894:         altDoSolve(6, 0x40ll, puzzle | 0x20320ll,
10895:                    partsUsed | 0x100l);
10896:       if(!(puzzle & 0x1a0020ll))
10897:         altDoSolve(6, 0x40ll, puzzle | 0x1a0020ll,
10898:                    partsUsed | 0x100l);
10899:       if(!(puzzle & 0x120060ll))
10900:         altDoSolve(6, 0x40ll, puzzle | 0x120060ll,
10901:                    partsUsed | 0x100l);
10902:       if(!(puzzle & 0x260020ll))
10903:         altDoSolve(6, 0x40ll, puzzle | 0x260020ll,
10904:                    partsUsed | 0x100l);
10905:       if(!(puzzle & 0x40160ll))
10906:         altDoSolve(6, 0x40ll, puzzle | 0x40160ll,
10907:                    partsUsed | 0x100l);
10908:       if(!(puzzle & 0x300120ll))
10909:         altDoSolve(6, 0x40ll, puzzle | 0x300120ll,
10910:                    partsUsed | 0x100l);
10911:       if(!(puzzle & 0x200260ll))
10912:         altDoSolve(6, 0x40ll, puzzle | 0x200260ll,
10913:                    partsUsed | 0x100l);
10914:     altpiece9at5:
10915:       if (partsUsed & 0x200l) goto altpiece10at5;
10916:       if (!(puzzle & 0x1a0ll)) {
10917:          if(!(puzzle & 0x13a0ll))
10918:            altDoSolve(6, 0x40ll, puzzle | 0x13a0ll,
10919:                    partsUsed | 0x200l);
10920:          if(!(puzzle & 0x7a0ll))
10921:            altDoSolve(6, 0x40ll, puzzle | 0x7a0ll,
10922:                    partsUsed | 0x200l);
10923:          if(!(puzzle & 0x9e0ll))
10924:            altDoSolve(6, 0x40ll, puzzle | 0x9e0ll,
10925:                    partsUsed | 0x200l);
10926:          if(!(puzzle & 0x19a0ll))
10927:            altDoSolve(6, 0x40ll, puzzle | 0x19a0ll,
10928:                    partsUsed | 0x200l);
10929:       }
10930:       if (!(puzzle & 0x20020020ll)) {
10931:          if(!(puzzle & 0x20030060ll))
10932:            altDoSolve(6, 0x40ll, puzzle | 0x20030060ll,
10933:                    partsUsed | 0x200l);
10934:          if(!(puzzle & 0x60030020ll))
10935:            altDoSolve(6, 0x40ll, puzzle | 0x60030020ll,
10936:                    partsUsed | 0x200l);
10937:          if(!(puzzle & 0x30060020ll))
10938:            altDoSolve(6, 0x40ll, puzzle | 0x30060020ll,
10939:                    partsUsed | 0x200l);
10940:       }
10941:       if(!(puzzle & 0xf20ll))
10942:         altDoSolve(6, 0x40ll, puzzle | 0xf20ll,
10943:                    partsUsed | 0x200l);
10944:       if(!(puzzle & 0x10070020ll))
10945:         altDoSolve(6, 0x40ll, puzzle | 0x10070020ll,
10946:                    partsUsed | 0x200l);
10947:       if(!(puzzle & 0x40070020ll))
10948:         altDoSolve(6, 0x40ll, puzzle | 0x40070020ll,
10949:                    partsUsed | 0x200l);
10950:       if(!(puzzle & 0x100920020ll))
10951:         altDoSolve(6, 0x40ll, puzzle | 0x100920020ll,
10952:                    partsUsed | 0x200l);
10953:       if(!(puzzle & 0x100900120ll))
10954:         altDoSolve(6, 0x40ll, puzzle | 0x100900120ll,
10955:                    partsUsed | 0x200l);
10956:     altpiece10at5:
10957:       if (partsUsed & 0x400l) goto altpiece11at5;
10958:       if (!(puzzle & 0x100120ll)) {
10959:          if(!(puzzle & 0x20120120ll))
10960:            altDoSolve(6, 0x40ll, puzzle | 0x20120120ll,
10961:                    partsUsed | 0x400l);
10962:          if(!(puzzle & 0x920120ll))
10963:            altDoSolve(6, 0x40ll, puzzle | 0x920120ll,
10964:                    partsUsed | 0x400l);
10965:          if(!(puzzle & 0x900920ll))
10966:            altDoSolve(6, 0x40ll, puzzle | 0x900920ll,
10967:                    partsUsed | 0x400l);
10968:          if(!(puzzle & 0x120920ll))
10969:            altDoSolve(6, 0x40ll, puzzle | 0x120920ll,
10970:                    partsUsed | 0x400l);
10971:          if(!(puzzle & 0x100120120ll))
10972:            altDoSolve(6, 0x40ll, puzzle | 0x100120120ll,
10973:                    partsUsed | 0x400l);
10974:       }
10975:       if (!(puzzle & 0x20020020ll)) {
10976:          if(!(puzzle & 0x120120020ll))
10977:            altDoSolve(6, 0x40ll, puzzle | 0x120120020ll,
10978:                    partsUsed | 0x400l);
10979:          if(!(puzzle & 0x20060060ll))
10980:            altDoSolve(6, 0x40ll, puzzle | 0x20060060ll,
10981:                    partsUsed | 0x400l);
10982:          if(!(puzzle & 0x60060020ll))
10983:            altDoSolve(6, 0x40ll, puzzle | 0x60060020ll,
10984:                    partsUsed | 0x400l);
10985:       }
10986:       if (!(puzzle & 0x320ll)) {
10987:          if(!(puzzle & 0xb60ll))
10988:            altDoSolve(6, 0x40ll, puzzle | 0xb60ll,
10989:                    partsUsed | 0x400l);
10990:          if(!(puzzle & 0x1360ll))
10991:            altDoSolve(6, 0x40ll, puzzle | 0x1360ll,
10992:                    partsUsed | 0x400l);
10993:          if(!(puzzle & 0x1b20ll))
10994:            altDoSolve(6, 0x40ll, puzzle | 0x1b20ll,
10995:                    partsUsed | 0x400l);
10996:       }
10997:       if(!(puzzle & 0x3e0ll))
10998:         altDoSolve(6, 0x40ll, puzzle | 0x3e0ll,
10999:                    partsUsed | 0x400l);
11000:       if(!(puzzle & 0xda0ll))
11001:         altDoSolve(6, 0x40ll, puzzle | 0xda0ll,
11002:                    partsUsed | 0x400l);
11003:       if(!(puzzle & 0x70060ll))
11004:         altDoSolve(6, 0x40ll, puzzle | 0x70060ll,
11005:                    partsUsed | 0x400l);
11006:       if(!(puzzle & 0x30030020ll))
11007:         altDoSolve(6, 0x40ll, puzzle | 0x30030020ll,
11008:                    partsUsed | 0x400l);
11009:       if(!(puzzle & 0x40060060ll))
11010:         altDoSolve(6, 0x40ll, puzzle | 0x40060060ll,
11011:                    partsUsed | 0x400l);
11012:     altpiece11at5:
11013:     break;
11014:    case 6:
11015:       if (partsUsed & 0x2l) goto altpiece2at6;
11016:       if(!(puzzle & 0xf40ll))
11017:         altDoSolve(7, 0x80ll, puzzle | 0xf40ll,
11018:                    partsUsed | 0x2l);
11019:       if(!(puzzle & 0x30060040ll))
11020:         altDoSolve(7, 0x80ll, puzzle | 0x30060040ll,
11021:                    partsUsed | 0x2l);
11022:       if(!(puzzle & 0x1200240040ll))
11023:         altDoSolve(7, 0x80ll, puzzle | 0x1200240040ll,
11024:                    partsUsed | 0x2l);
11025:       if(!(puzzle & 0x1001200240ll))
11026:         altDoSolve(7, 0x80ll, puzzle | 0x1001200240ll,
11027:                    partsUsed | 0x2l);
11028:     altpiece2at6:
11029:       if (partsUsed & 0x4l) goto altpiece3at6;
11030:       if(!(puzzle & 0x13c0ll))
11031:         altDoSolve(7, 0x80ll, puzzle | 0x13c0ll,
11032:                    partsUsed | 0x4l);
11033:       if(!(puzzle & 0x200201240ll))
11034:         altDoSolve(7, 0x80ll, puzzle | 0x200201240ll,
11035:                    partsUsed | 0x4l);
11036:       if(!(puzzle & 0x40070040ll))
11037:         altDoSolve(7, 0x80ll, puzzle | 0x40070040ll,
11038:                    partsUsed | 0x4l);
11039:       if(!(puzzle & 0x41240040ll))
11040:         altDoSolve(7, 0x80ll, puzzle | 0x41240040ll,
11041:                    partsUsed | 0x4l);
11042:     altpiece3at6:
11043:       if (partsUsed & 0x8l) goto altpiece4at6;
11044:       if(!(puzzle & 0x7c0ll))
11045:         altDoSolve(7, 0x80ll, puzzle | 0x7c0ll,
11046:                    partsUsed | 0x8l);
11047:       if(!(puzzle & 0x10070040ll))
11048:         altDoSolve(7, 0x80ll, puzzle | 0x10070040ll,
11049:                    partsUsed | 0x8l);
11050:       if(!(puzzle & 0x1001240040ll))
11051:         altDoSolve(7, 0x80ll, puzzle | 0x1001240040ll,
11052:                    partsUsed | 0x8l);
11053:       if(!(puzzle & 0x1200200240ll))
11054:         altDoSolve(7, 0x80ll, puzzle | 0x1200200240ll,
11055:                    partsUsed | 0x8l);
11056:     altpiece4at6:
11057:       if (partsUsed & 0x10l) goto altpiece5at6;
11058:       if (!(puzzle & 0x9240ll)) {
11059:          if(!(puzzle & 0xd340ll))
11060:            altDoSolve(7, 0x80ll, puzzle | 0xd340ll,
11061:                    partsUsed | 0x10l);
11062:          if(!(puzzle & 0x1049240ll))
11063:            altDoSolve(7, 0x80ll, puzzle | 0x1049240ll,
11064:                    partsUsed | 0x10l);
11065:          if(!(puzzle & 0x8209240ll))
11066:            altDoSolve(7, 0x80ll, puzzle | 0x8209240ll,
11067:                    partsUsed | 0x10l);
11068:       }
11069:       if (!(puzzle & 0x40040040040ll)) {
11070:          if(!(puzzle & 0x60040060040ll))
11071:            altDoSolve(7, 0x80ll, puzzle | 0x60040060040ll,
11072:                    partsUsed | 0x10l);
11073:          if(!(puzzle & 0x240040240040ll))
11074:            altDoSolve(7, 0x80ll, puzzle | 0x240040240040ll,
11075:                    partsUsed | 0x10l);
11076:          if(!(puzzle & 0x40240040240ll))
11077:            altDoSolve(7, 0x80ll, puzzle | 0x40240040240ll,
11078:                    partsUsed | 0x10l);
11079:       }
11080:       if(!(puzzle & 0x200240200240ll))
11081:         altDoSolve(7, 0x80ll, puzzle | 0x200240200240ll,
11082:                    partsUsed | 0x10l);
11083:       if(!(puzzle & 0x9241040ll))
11084:         altDoSolve(7, 0x80ll, puzzle | 0x9241040ll,
11085:                    partsUsed | 0x10l);
11086:     altpiece5at6:
11087:       if (partsUsed & 0x20l) goto altpiece6at6;
11088:       if (!(puzzle & 0x9240ll)) {
11089:          if(!(puzzle & 0xd240ll))
11090:            altDoSolve(7, 0x80ll, puzzle | 0xd240ll,
11091:                    partsUsed | 0x20l);
11092:          if(!(puzzle & 0x8009240ll))
11093:            altDoSolve(7, 0x80ll, puzzle | 0x8009240ll,
11094:                    partsUsed | 0x20l);
11095:          if(!(puzzle & 0x49240ll))
11096:            altDoSolve(7, 0x80ll, puzzle | 0x49240ll,
11097:                    partsUsed | 0x20l);
11098:       }
11099:       if (!(puzzle & 0x40040040040ll)) {
11100:          if(!(puzzle & 0x60040040040ll))
11101:            altDoSolve(7, 0x80ll, puzzle | 0x60040040040ll,
11102:                    partsUsed | 0x20l);
11103:          if(!(puzzle & 0x40040040240ll))
11104:            altDoSolve(7, 0x80ll, puzzle | 0x40040040240ll,
11105:                    partsUsed | 0x20l);
11106:          if(!(puzzle & 0x240040040040ll))
11107:            altDoSolve(7, 0x80ll, puzzle | 0x240040040040ll,
11108:                    partsUsed | 0x20l);
11109:       }
11110:       if(!(puzzle & 0x9240040ll))
11111:         altDoSolve(7, 0x80ll, puzzle | 0x9240040ll,
11112:                    partsUsed | 0x20l);
11113:       if(!(puzzle & 0x200200200240ll))
11114:         altDoSolve(7, 0x80ll, puzzle | 0x200200200240ll,
11115:                    partsUsed | 0x20l);
11116:     altpiece6at6:
11117:       if (partsUsed & 0x40l) goto altpiece7at6;
11118:       if (!(puzzle & 0x9240ll)) {
11119:          if(!(puzzle & 0x9340ll))
11120:            altDoSolve(7, 0x80ll, puzzle | 0x9340ll,
11121:                    partsUsed | 0x40l);
11122:          if(!(puzzle & 0x9a40ll))
11123:            altDoSolve(7, 0x80ll, puzzle | 0x9a40ll,
11124:                    partsUsed | 0x40l);
11125:          if(!(puzzle & 0x1009240ll))
11126:            altDoSolve(7, 0x80ll, puzzle | 0x1009240ll,
11127:                    partsUsed | 0x40l);
11128:          if(!(puzzle & 0x209240ll))
11129:            altDoSolve(7, 0x80ll, puzzle | 0x209240ll,
11130:                    partsUsed | 0x40l);
11131:       }
11132:       if (!(puzzle & 0x40040040040ll)) {
11133:          if(!(puzzle & 0x40040060040ll))
11134:            altDoSolve(7, 0x80ll, puzzle | 0x40040060040ll,
11135:                    partsUsed | 0x40l);
11136:          if(!(puzzle & 0x40060040040ll))
11137:            altDoSolve(7, 0x80ll, puzzle | 0x40060040040ll,
11138:                    partsUsed | 0x40l);
11139:          if(!(puzzle & 0x40040240040ll))
11140:            altDoSolve(7, 0x80ll, puzzle | 0x40040240040ll,
11141:                    partsUsed | 0x40l);
11142:          if(!(puzzle & 0x40240040040ll))
11143:            altDoSolve(7, 0x80ll, puzzle | 0x40240040040ll,
11144:                    partsUsed | 0x40l);
11145:       }
11146:     altpiece7at6:
11147:       if (partsUsed & 0x80l) goto altpiece8at6;
11148:       if(!(puzzle & 0x240040240ll))
11149:         altDoSolve(7, 0x80ll, puzzle | 0x240040240ll,
11150:                    partsUsed | 0x80l);
11151:       if(!(puzzle & 0x240200240ll))
11152:         altDoSolve(7, 0x80ll, puzzle | 0x240200240ll,
11153:                    partsUsed | 0x80l);
11154:       if(!(puzzle & 0x1241040ll))
11155:         altDoSolve(7, 0x80ll, puzzle | 0x1241040ll,
11156:                    partsUsed | 0x80l);
11157:       if(!(puzzle & 0x1041240ll))
11158:         altDoSolve(7, 0x80ll, puzzle | 0x1041240ll,
11159:                    partsUsed | 0x80l);
11160:     altpiece8at6:
11161:       if (partsUsed & 0x100l) goto altpiece9at6;
11162:       if(!(puzzle & 0x340040ll))
11163:         altDoSolve(7, 0x80ll, puzzle | 0x340040ll,
11164:                    partsUsed | 0x100l);
11165:       if(!(puzzle & 0x100340ll))
11166:         altDoSolve(7, 0x80ll, puzzle | 0x100340ll,
11167:                    partsUsed | 0x100l);
11168:       if(!(puzzle & 0x60240ll))
11169:         altDoSolve(7, 0x80ll, puzzle | 0x60240ll,
11170:                    partsUsed | 0x100l);
11171:     altpiece9at6:
11172:       if (partsUsed & 0x200l) goto altpiece10at6;
11173:       if(!(puzzle & 0xbc0ll))
11174:         altDoSolve(7, 0x80ll, puzzle | 0xbc0ll,
11175:                    partsUsed | 0x200l);
11176:       if(!(puzzle & 0x20070040ll))
11177:         altDoSolve(7, 0x80ll, puzzle | 0x20070040ll,
11178:                    partsUsed | 0x200l);
11179:       if(!(puzzle & 0x201240040ll))
11180:         altDoSolve(7, 0x80ll, puzzle | 0x201240040ll,
11181:                    partsUsed | 0x200l);
11182:       if(!(puzzle & 0x201200240ll))
11183:         altDoSolve(7, 0x80ll, puzzle | 0x201200240ll,
11184:                    partsUsed | 0x200l);
11185:     altpiece10at6:
11186:       if (partsUsed & 0x400l) goto altpiece11at6;
11187:       if (!(puzzle & 0x1240ll)) {
11188:          if(!(puzzle & 0x1b40ll))
11189:            altDoSolve(7, 0x80ll, puzzle | 0x1b40ll,
11190:                    partsUsed | 0x400l);
11191:          if(!(puzzle & 0x1201240ll))
11192:            altDoSolve(7, 0x80ll, puzzle | 0x1201240ll,
11193:                    partsUsed | 0x400l);
11194:          if(!(puzzle & 0x241240ll))
11195:            altDoSolve(7, 0x80ll, puzzle | 0x241240ll,
11196:                    partsUsed | 0x400l);
11197:       }
11198:       if (!(puzzle & 0x40040040ll)) {
11199:          if(!(puzzle & 0x60060040ll))
11200:            altDoSolve(7, 0x80ll, puzzle | 0x60060040ll,
11201:                    partsUsed | 0x400l);
11202:          if(!(puzzle & 0x40240240ll))
11203:            altDoSolve(7, 0x80ll, puzzle | 0x40240240ll,
11204:                    partsUsed | 0x400l);
11205:          if(!(puzzle & 0x240240040ll))
11206:            altDoSolve(7, 0x80ll, puzzle | 0x240240040ll,
11207:                    partsUsed | 0x400l);
11208:       }
11209:       if(!(puzzle & 0x1240240ll))
11210:         altDoSolve(7, 0x80ll, puzzle | 0x1240240ll,
11211:                    partsUsed | 0x400l);
11212:       if(!(puzzle & 0x200240240ll))
11213:         altDoSolve(7, 0x80ll, puzzle | 0x200240240ll,
11214:                    partsUsed | 0x400l);
11215:     altpiece11at6:
11216:     break;
11217:    case 7:
11218:       if (partsUsed & 0x2l) goto altpiece2at7;
11219:       if(!(puzzle & 0x10090480ll))
11220:         altDoSolve(8, 0x100ll, puzzle | 0x10090480ll,
11221:                    partsUsed | 0x2l);
11222:       if(!(puzzle & 0x2400480080ll))
11223:         altDoSolve(8, 0x100ll, puzzle | 0x2400480080ll,
11224:                    partsUsed | 0x2l);
11225:       if(!(puzzle & 0x2002400480ll))
11226:         altDoSolve(8, 0x100ll, puzzle | 0x2002400480ll,
11227:                    partsUsed | 0x2l);
11228:       if(!(puzzle & 0x9980ll))
11229:         altDoSolve(8, 0x100ll, puzzle | 0x9980ll,
11230:                    partsUsed | 0x2l);
11231:       if(!(puzzle & 0xcc80ll))
11232:         altDoSolve(8, 0x100ll, puzzle | 0xcc80ll,
11233:                    partsUsed | 0x2l);
11234:       if(!(puzzle & 0x200300180ll))
11235:         altDoSolve(8, 0x100ll, puzzle | 0x200300180ll,
11236:                    partsUsed | 0x2l);
11237:       if(!(puzzle & 0x300180080ll))
11238:         altDoSolve(8, 0x100ll, puzzle | 0x300180080ll,
11239:                    partsUsed | 0x2l);
11240:     altpiece2at7:
11241:       if (partsUsed & 0x4l) goto altpiece3at7;
11242:       if (!(puzzle & 0x80080080ll)) {
11243:          if(!(puzzle & 0x490080080ll))
11244:            altDoSolve(8, 0x100ll, puzzle | 0x490080080ll,
11245:                    partsUsed | 0x4l);
11246:          if(!(puzzle & 0x82480080ll))
11247:            altDoSolve(8, 0x100ll, puzzle | 0x82480080ll,
11248:                    partsUsed | 0x4l);
11249:          if(!(puzzle & 0x80380080ll))
11250:            altDoSolve(8, 0x100ll, puzzle | 0x80380080ll,
11251:                    partsUsed | 0x4l);
11252:       }
11253:       if(!(puzzle & 0x400402480ll))
11254:         altDoSolve(8, 0x100ll, puzzle | 0x400402480ll,
11255:                    partsUsed | 0x4l);
11256:       if(!(puzzle & 0x3c80ll))
11257:         altDoSolve(8, 0x100ll, puzzle | 0x3c80ll,
11258:                    partsUsed | 0x4l);
11259:       if(!(puzzle & 0x4b80ll))
11260:         altDoSolve(8, 0x100ll, puzzle | 0x4b80ll,
11261:                    partsUsed | 0x4l);
11262:       if(!(puzzle & 0x100100380ll))
11263:         altDoSolve(8, 0x100ll, puzzle | 0x100100380ll,
11264:                    partsUsed | 0x4l);
11265:     altpiece3at7:
11266:       if (partsUsed & 0x8l) goto altpiece4at7;
11267:       if(!(puzzle & 0x90080480ll))
11268:         altDoSolve(8, 0x100ll, puzzle | 0x90080480ll,
11269:                    partsUsed | 0x8l);
11270:       if(!(puzzle & 0x2002480080ll))
11271:         altDoSolve(8, 0x100ll, puzzle | 0x2002480080ll,
11272:                    partsUsed | 0x8l);
11273:       if(!(puzzle & 0x2400400480ll))
11274:         altDoSolve(8, 0x100ll, puzzle | 0x2400400480ll,
11275:                    partsUsed | 0x8l);
11276:       if(!(puzzle & 0xc980ll))
11277:         altDoSolve(8, 0x100ll, puzzle | 0xc980ll,
11278:                    partsUsed | 0x8l);
11279:       if(!(puzzle & 0x9c80ll))
11280:         altDoSolve(8, 0x100ll, puzzle | 0x9c80ll,
11281:                    partsUsed | 0x8l);
11282:       if(!(puzzle & 0x200380080ll))
11283:         altDoSolve(8, 0x100ll, puzzle | 0x200380080ll,
11284:                    partsUsed | 0x8l);
11285:       if(!(puzzle & 0x300100180ll))
11286:         altDoSolve(8, 0x100ll, puzzle | 0x300100180ll,
11287:                    partsUsed | 0x8l);
11288:     altpiece4at7:
11289:       if (partsUsed & 0x10l) goto altpiece5at7;
11290:       if (!(puzzle & 0x80080080080ll)) {
11291:          if(!(puzzle & 0x80480080480ll))
11292:            altDoSolve(8, 0x100ll, puzzle | 0x80480080480ll,
11293:                    partsUsed | 0x10l);
11294:          if(!(puzzle & 0x180080180080ll))
11295:            altDoSolve(8, 0x100ll, puzzle | 0x180080180080ll,
11296:                    partsUsed | 0x10l);
11297:          if(!(puzzle & 0x80180080180ll))
11298:            altDoSolve(8, 0x100ll, puzzle | 0x80180080180ll,
11299:                    partsUsed | 0x10l);
11300:       }
11301:       if(!(puzzle & 0x2492080ll))
11302:         altDoSolve(8, 0x100ll, puzzle | 0x2492080ll,
11303:                    partsUsed | 0x10l);
11304:       if(!(puzzle & 0x90080090080ll))
11305:         altDoSolve(8, 0x100ll, puzzle | 0x90080090080ll,
11306:                    partsUsed | 0x10l);
11307:       if(!(puzzle & 0x480080480080ll))
11308:         altDoSolve(8, 0x100ll, puzzle | 0x480080480080ll,
11309:                    partsUsed | 0x10l);
11310:       if(!(puzzle & 0x400480400480ll))
11311:         altDoSolve(8, 0x100ll, puzzle | 0x400480400480ll,
11312:                    partsUsed | 0x10l);
11313:       if(!(puzzle & 0x100180100180ll))
11314:         altDoSolve(8, 0x100ll, puzzle | 0x100180100180ll,
11315:                    partsUsed | 0x10l);
11316:     altpiece5at7:
11317:       if (partsUsed & 0x20l) goto altpiece6at7;
11318:       if (!(puzzle & 0x80080080080ll)) {
11319:          if(!(puzzle & 0x90080080080ll))
11320:            altDoSolve(8, 0x100ll, puzzle | 0x90080080080ll,
11321:                    partsUsed | 0x20l);
11322:          if(!(puzzle & 0x80080080480ll))
11323:            altDoSolve(8, 0x100ll, puzzle | 0x80080080480ll,
11324:                    partsUsed | 0x20l);
11325:          if(!(puzzle & 0x480080080080ll))
11326:            altDoSolve(8, 0x100ll, puzzle | 0x480080080080ll,
11327:                    partsUsed | 0x20l);
11328:          if(!(puzzle & 0x80080080180ll))
11329:            altDoSolve(8, 0x100ll, puzzle | 0x80080080180ll,
11330:                    partsUsed | 0x20l);
11331:          if(!(puzzle & 0x180080080080ll))
11332:            altDoSolve(8, 0x100ll, puzzle | 0x180080080080ll,
11333:                    partsUsed | 0x20l);
11334:       }
11335:       if(!(puzzle & 0x400400400480ll))
11336:         altDoSolve(8, 0x100ll, puzzle | 0x400400400480ll,
11337:                    partsUsed | 0x20l);
11338:       if(!(puzzle & 0x100100100180ll))
11339:         altDoSolve(8, 0x100ll, puzzle | 0x100100100180ll,
11340:                    partsUsed | 0x20l);
11341:     altpiece6at7:
11342:       if (partsUsed & 0x40l) goto altpiece7at7;
11343:       if (!(puzzle & 0x80080080080ll)) {
11344:          if(!(puzzle & 0x80090080080ll))
11345:            altDoSolve(8, 0x100ll, puzzle | 0x80090080080ll,
11346:                    partsUsed | 0x40l);
11347:          if(!(puzzle & 0x80080480080ll))
11348:            altDoSolve(8, 0x100ll, puzzle | 0x80080480080ll,
11349:                    partsUsed | 0x40l);
11350:          if(!(puzzle & 0x80480080080ll))
11351:            altDoSolve(8, 0x100ll, puzzle | 0x80480080080ll,
11352:                    partsUsed | 0x40l);
11353:          if(!(puzzle & 0x80080180080ll))
11354:            altDoSolve(8, 0x100ll, puzzle | 0x80080180080ll,
11355:                    partsUsed | 0x40l);
11356:          if(!(puzzle & 0x80180080080ll))
11357:            altDoSolve(8, 0x100ll, puzzle | 0x80180080080ll,
11358:                    partsUsed | 0x40l);
11359:       }
11360:       if(!(puzzle & 0x2490080ll))
11361:         altDoSolve(8, 0x100ll, puzzle | 0x2490080ll,
11362:                    partsUsed | 0x40l);
11363:       if(!(puzzle & 0x80080090080ll))
11364:         altDoSolve(8, 0x100ll, puzzle | 0x80080090080ll,
11365:                    partsUsed | 0x40l);
11366:     altpiece7at7:
11367:       if (partsUsed & 0x80l) goto altpiece8at7;
11368:       if(!(puzzle & 0x480080480ll))
11369:         altDoSolve(8, 0x100ll, puzzle | 0x480080480ll,
11370:                    partsUsed | 0x80l);
11371:       if(!(puzzle & 0x480400480ll))
11372:         altDoSolve(8, 0x100ll, puzzle | 0x480400480ll,
11373:                    partsUsed | 0x80l);
11374:       if(!(puzzle & 0x2482080ll))
11375:         altDoSolve(8, 0x100ll, puzzle | 0x2482080ll,
11376:                    partsUsed | 0x80l);
11377:       if(!(puzzle & 0x2082480ll))
11378:         altDoSolve(8, 0x100ll, puzzle | 0x2082480ll,
11379:                    partsUsed | 0x80l);
11380:       if(!(puzzle & 0x1780ll))
11381:         altDoSolve(8, 0x100ll, puzzle | 0x1780ll,
11382:                    partsUsed | 0x80l);
11383:       if(!(puzzle & 0x6580ll))
11384:         altDoSolve(8, 0x100ll, puzzle | 0x6580ll,
11385:                    partsUsed | 0x80l);
11386:       if(!(puzzle & 0x6980ll))
11387:         altDoSolve(8, 0x100ll, puzzle | 0x6980ll,
11388:                    partsUsed | 0x80l);
11389:       if(!(puzzle & 0x1e80ll))
11390:         altDoSolve(8, 0x100ll, puzzle | 0x1e80ll,
11391:                    partsUsed | 0x80l);
11392:       if(!(puzzle & 0x180100180ll))
11393:         altDoSolve(8, 0x100ll, puzzle | 0x180100180ll,
11394:                    partsUsed | 0x80l);
11395:       if(!(puzzle & 0x180080180ll))
11396:         altDoSolve(8, 0x100ll, puzzle | 0x180080180ll,
11397:                    partsUsed | 0x80l);
11398:       if(!(puzzle & 0x380280ll))
11399:         altDoSolve(8, 0x100ll, puzzle | 0x380280ll,
11400:                    partsUsed | 0x80l);
11401:       if(!(puzzle & 0x280380ll))
11402:         altDoSolve(8, 0x100ll, puzzle | 0x280380ll,
11403:                    partsUsed | 0x80l);
11404:     altpiece8at7:
11405:       if (partsUsed & 0x100l) goto altpiece9at7;
11406:       if(!(puzzle & 0x120180ll))
11407:         altDoSolve(8, 0x100ll, puzzle | 0x120180ll,
11408:                    partsUsed | 0x100l);
11409:       if(!(puzzle & 0x100580ll))
11410:         altDoSolve(8, 0x100ll, puzzle | 0x100580ll,
11411:                    partsUsed | 0x100l);
11412:       if(!(puzzle & 0xb0080ll))
11413:         altDoSolve(8, 0x100ll, puzzle | 0xb0080ll,
11414:                    partsUsed | 0x100l);
11415:       if(!(puzzle & 0x980080ll))
11416:         altDoSolve(8, 0x100ll, puzzle | 0x980080ll,
11417:                    partsUsed | 0x100l);
11418:       if(!(puzzle & 0x480180ll))
11419:         altDoSolve(8, 0x100ll, puzzle | 0x480180ll,
11420:                    partsUsed | 0x100l);
11421:       if(!(puzzle & 0xc00480ll))
11422:         altDoSolve(8, 0x100ll, puzzle | 0xc00480ll,
11423:                    partsUsed | 0x100l);
11424:       if(!(puzzle & 0x80c80ll))
11425:         altDoSolve(8, 0x100ll, puzzle | 0x80c80ll,
11426:                    partsUsed | 0x100l);
11427:       if(!(puzzle & 0x800980ll))
11428:         altDoSolve(8, 0x100ll, puzzle | 0x800980ll,
11429:                    partsUsed | 0x100l);
11430:     altpiece9at7:
11431:       if (partsUsed & 0x200l) goto altpiece10at7;
11432:       if (!(puzzle & 0x80080080ll)) {
11433:          if(!(puzzle & 0x80090480ll))
11434:            altDoSolve(8, 0x100ll, puzzle | 0x80090480ll,
11435:                    partsUsed | 0x200l);
11436:          if(!(puzzle & 0x90480080ll))
11437:            altDoSolve(8, 0x100ll, puzzle | 0x90480080ll,
11438:                    partsUsed | 0x200l);
11439:          if(!(puzzle & 0x480090080ll))
11440:            altDoSolve(8, 0x100ll, puzzle | 0x480090080ll,
11441:                    partsUsed | 0x200l);
11442:       }
11443:       if (!(puzzle & 0x480080ll)) {
11444:          if(!(puzzle & 0x400490080ll))
11445:            altDoSolve(8, 0x100ll, puzzle | 0x400490080ll,
11446:                    partsUsed | 0x200l);
11447:          if(!(puzzle & 0x10490080ll))
11448:            altDoSolve(8, 0x100ll, puzzle | 0x10490080ll,
11449:                    partsUsed | 0x200l);
11450:          if(!(puzzle & 0x402480080ll))
11451:            altDoSolve(8, 0x100ll, puzzle | 0x402480080ll,
11452:                    partsUsed | 0x200l);
11453:       }
11454:       if(!(puzzle & 0x5980ll))
11455:         altDoSolve(8, 0x100ll, puzzle | 0x5980ll,
11456:                    partsUsed | 0x200l);
11457:       if(!(puzzle & 0x5c80ll))
11458:         altDoSolve(8, 0x100ll, puzzle | 0x5c80ll,
11459:                    partsUsed | 0x200l);
11460:       if(!(puzzle & 0x402400480ll))
11461:         altDoSolve(8, 0x100ll, puzzle | 0x402400480ll,
11462:                    partsUsed | 0x200l);
11463:       if(!(puzzle & 0x100300180ll))
11464:         altDoSolve(8, 0x100ll, puzzle | 0x100300180ll,
11465:                    partsUsed | 0x200l);
11466:       if(!(puzzle & 0x100380080ll))
11467:         altDoSolve(8, 0x100ll, puzzle | 0x100380080ll,
11468:                    partsUsed | 0x200l);
11469:     altpiece10at7:
11470:       if (partsUsed & 0x400l) goto altpiece11at7;
11471:       if (!(puzzle & 0x400480ll)) {
11472:          if(!(puzzle & 0x80480480ll))
11473:            altDoSolve(8, 0x100ll, puzzle | 0x80480480ll,
11474:                    partsUsed | 0x400l);
11475:          if(!(puzzle & 0x2480480ll))
11476:            altDoSolve(8, 0x100ll, puzzle | 0x2480480ll,
11477:                    partsUsed | 0x400l);
11478:          if(!(puzzle & 0x2402480ll))
11479:            altDoSolve(8, 0x100ll, puzzle | 0x2402480ll,
11480:                    partsUsed | 0x400l);
11481:          if(!(puzzle & 0x482480ll))
11482:            altDoSolve(8, 0x100ll, puzzle | 0x482480ll,
11483:                    partsUsed | 0x400l);
11484:          if(!(puzzle & 0x400480480ll))
11485:            altDoSolve(8, 0x100ll, puzzle | 0x400480480ll,
11486:                    partsUsed | 0x400l);
11487:       }
11488:       if (!(puzzle & 0x980ll)) {
11489:          if(!(puzzle & 0x1b80ll))
11490:            altDoSolve(8, 0x100ll, puzzle | 0x1b80ll,
11491:                    partsUsed | 0x400l);
11492:          if(!(puzzle & 0xf80ll))
11493:            altDoSolve(8, 0x100ll, puzzle | 0xf80ll,
11494:                    partsUsed | 0x400l);
11495:          if(!(puzzle & 0x2d80ll))
11496:            altDoSolve(8, 0x100ll, puzzle | 0x2d80ll,
11497:                    partsUsed | 0x400l);
11498:          if(!(puzzle & 0x4d80ll))
11499:            altDoSolve(8, 0x100ll, puzzle | 0x4d80ll,
11500:                    partsUsed | 0x400l);
11501:          if(!(puzzle & 0x1d80ll))
11502:            altDoSolve(8, 0x100ll, puzzle | 0x1d80ll,
11503:                    partsUsed | 0x400l);
11504:       }
11505:       if (!(puzzle & 0x80080080ll)) {
11506:          if(!(puzzle & 0x480480080ll))
11507:            altDoSolve(8, 0x100ll, puzzle | 0x480480080ll,
11508:                    partsUsed | 0x400l);
11509:          if(!(puzzle & 0x80180180ll))
11510:            altDoSolve(8, 0x100ll, puzzle | 0x80180180ll,
11511:                    partsUsed | 0x400l);
11512:          if(!(puzzle & 0x180180080ll))
11513:            altDoSolve(8, 0x100ll, puzzle | 0x180180080ll,
11514:                    partsUsed | 0x400l);
11515:       }
11516:       if (!(puzzle & 0x100180ll)) {
11517:          if(!(puzzle & 0x100180180ll))
11518:            altDoSolve(8, 0x100ll, puzzle | 0x100180180ll,
11519:                    partsUsed | 0x400l);
11520:          if(!(puzzle & 0x380180ll))
11521:            altDoSolve(8, 0x100ll, puzzle | 0x380180ll,
11522:                    partsUsed | 0x400l);
11523:          if(!(puzzle & 0x180380ll))
11524:            altDoSolve(8, 0x100ll, puzzle | 0x180380ll,
11525:                    partsUsed | 0x400l);
11526:          if(!(puzzle & 0x300380ll))
11527:            altDoSolve(8, 0x100ll, puzzle | 0x300380ll,
11528:                    partsUsed | 0x400l);
11529:       }
11530:       if(!(puzzle & 0x90090080ll))
11531:         altDoSolve(8, 0x100ll, puzzle | 0x90090080ll,
11532:                    partsUsed | 0x400l);
11533:       if(!(puzzle & 0x490480ll))
11534:         altDoSolve(8, 0x100ll, puzzle | 0x490480ll,
11535:                    partsUsed | 0x400l);
11536:       if(!(puzzle & 0x6c80ll))
11537:         altDoSolve(8, 0x100ll, puzzle | 0x6c80ll,
11538:                    partsUsed | 0x400l);
11539:     altpiece11at7:
11540:     break;
11541:    case 8:
11542:       if (partsUsed & 0x2l) goto altpiece2at8;
11543:       if(!(puzzle & 0x20120900ll))
11544:         altDoSolve(9, 0x200ll, puzzle | 0x20120900ll,
11545:                    partsUsed | 0x2l);
11546:       if(!(puzzle & 0x2f00ll))
11547:         altDoSolve(9, 0x200ll, puzzle | 0x2f00ll,
11548:                    partsUsed | 0x2l);
11549:       if(!(puzzle & 0x80180300ll))
11550:         altDoSolve(9, 0x200ll, puzzle | 0x80180300ll,
11551:                    partsUsed | 0x2l);
11552:       if(!(puzzle & 0x4800900100ll))
11553:         altDoSolve(9, 0x200ll, puzzle | 0x4800900100ll,
11554:                    partsUsed | 0x2l);
11555:       if(!(puzzle & 0x4004800900ll))
11556:         altDoSolve(9, 0x200ll, puzzle | 0x4004800900ll,
11557:                    partsUsed | 0x2l);
11558:     altpiece2at8:
11559:       if (partsUsed & 0x4l) goto altpiece3at8;
11560:       if (!(puzzle & 0x100100100ll)) {
11561:          if(!(puzzle & 0x920100100ll))
11562:            altDoSolve(9, 0x200ll, puzzle | 0x920100100ll,
11563:                    partsUsed | 0x4l);
11564:          if(!(puzzle & 0x380100100ll))
11565:            altDoSolve(9, 0x200ll, puzzle | 0x380100100ll,
11566:                    partsUsed | 0x4l);
11567:          if(!(puzzle & 0x104900100ll))
11568:            altDoSolve(9, 0x200ll, puzzle | 0x104900100ll,
11569:                    partsUsed | 0x4l);
11570:       }
11571:       if(!(puzzle & 0xe900ll))
11572:         altDoSolve(9, 0x200ll, puzzle | 0xe900ll,
11573:                    partsUsed | 0x4l);
11574:       if(!(puzzle & 0x800804900ll))
11575:         altDoSolve(9, 0x200ll, puzzle | 0x800804900ll,
11576:                    partsUsed | 0x4l);
11577:     altpiece3at8:
11578:       if (partsUsed & 0x8l) goto altpiece4at8;
11579:       if(!(puzzle & 0x120100900ll))
11580:         altDoSolve(9, 0x200ll, puzzle | 0x120100900ll,
11581:                    partsUsed | 0x8l);
11582:       if(!(puzzle & 0x180100300ll))
11583:         altDoSolve(9, 0x200ll, puzzle | 0x180100300ll,
11584:                    partsUsed | 0x8l);
11585:       if(!(puzzle & 0x6b00ll))
11586:         altDoSolve(9, 0x200ll, puzzle | 0x6b00ll,
11587:                    partsUsed | 0x8l);
11588:       if(!(puzzle & 0x4004900100ll))
11589:         altDoSolve(9, 0x200ll, puzzle | 0x4004900100ll,
11590:                    partsUsed | 0x8l);
11591:       if(!(puzzle & 0x4800800900ll))
11592:         altDoSolve(9, 0x200ll, puzzle | 0x4800800900ll,
11593:                    partsUsed | 0x8l);
11594:     altpiece4at8:
11595:       if (partsUsed & 0x10l) goto altpiece5at8;
11596:       if (!(puzzle & 0x100100100100ll)) {
11597:          if(!(puzzle & 0x180100180100ll))
11598:            altDoSolve(9, 0x200ll, puzzle | 0x180100180100ll,
11599:                    partsUsed | 0x10l);
11600:          if(!(puzzle & 0x900100900100ll))
11601:            altDoSolve(9, 0x200ll, puzzle | 0x900100900100ll,
11602:                    partsUsed | 0x10l);
11603:          if(!(puzzle & 0x100900100900ll))
11604:            altDoSolve(9, 0x200ll, puzzle | 0x100900100900ll,
11605:                    partsUsed | 0x10l);
11606:          if(!(puzzle & 0x300100300100ll))
11607:            altDoSolve(9, 0x200ll, puzzle | 0x300100300100ll,
11608:                    partsUsed | 0x10l);
11609:          if(!(puzzle & 0x100300100300ll))
11610:            altDoSolve(9, 0x200ll, puzzle | 0x100300100300ll,
11611:                    partsUsed | 0x10l);
11612:       }
11613:       if(!(puzzle & 0x4924100ll))
11614:         altDoSolve(9, 0x200ll, puzzle | 0x4924100ll,
11615:                    partsUsed | 0x10l);
11616:       if(!(puzzle & 0x120100120100ll))
11617:         altDoSolve(9, 0x200ll, puzzle | 0x120100120100ll,
11618:                    partsUsed | 0x10l);
11619:       if(!(puzzle & 0x800900800900ll))
11620:         altDoSolve(9, 0x200ll, puzzle | 0x800900800900ll,
11621:                    partsUsed | 0x10l);
11622:       if(!(puzzle & 0x200300200300ll))
11623:         altDoSolve(9, 0x200ll, puzzle | 0x200300200300ll,
11624:                    partsUsed | 0x10l);
11625:     altpiece5at8:
11626:       if (partsUsed & 0x20l) goto altpiece6at8;
11627:       if (!(puzzle & 0x100100100100ll)) {
11628:          if(!(puzzle & 0x120100100100ll))
11629:            altDoSolve(9, 0x200ll, puzzle | 0x120100100100ll,
11630:                    partsUsed | 0x20l);
11631:          if(!(puzzle & 0x180100100100ll))
11632:            altDoSolve(9, 0x200ll, puzzle | 0x180100100100ll,
11633:                    partsUsed | 0x20l);
11634:          if(!(puzzle & 0x100100100900ll))
11635:            altDoSolve(9, 0x200ll, puzzle | 0x100100100900ll,
11636:                    partsUsed | 0x20l);
11637:          if(!(puzzle & 0x900100100100ll))
11638:            altDoSolve(9, 0x200ll, puzzle | 0x900100100100ll,
11639:                    partsUsed | 0x20l);
11640:          if(!(puzzle & 0x100100100300ll))
11641:            altDoSolve(9, 0x200ll, puzzle | 0x100100100300ll,
11642:                    partsUsed | 0x20l);
11643:          if(!(puzzle & 0x300100100100ll))
11644:            altDoSolve(9, 0x200ll, puzzle | 0x300100100100ll,
11645:                    partsUsed | 0x20l);
11646:       }
11647:       if(!(puzzle & 0x800800800900ll))
11648:         altDoSolve(9, 0x200ll, puzzle | 0x800800800900ll,
11649:                    partsUsed | 0x20l);
11650:       if(!(puzzle & 0x200200200300ll))
11651:         altDoSolve(9, 0x200ll, puzzle | 0x200200200300ll,
11652:                    partsUsed | 0x20l);
11653:     altpiece6at8:
11654:       if (partsUsed & 0x40l) goto altpiece7at8;
11655:       if (!(puzzle & 0x100100100100ll)) {
11656:          if(!(puzzle & 0x100120100100ll))
11657:            altDoSolve(9, 0x200ll, puzzle | 0x100120100100ll,
11658:                    partsUsed | 0x40l);
11659:          if(!(puzzle & 0x100100180100ll))
11660:            altDoSolve(9, 0x200ll, puzzle | 0x100100180100ll,
11661:                    partsUsed | 0x40l);
11662:          if(!(puzzle & 0x100180100100ll))
11663:            altDoSolve(9, 0x200ll, puzzle | 0x100180100100ll,
11664:                    partsUsed | 0x40l);
11665:          if(!(puzzle & 0x100100900100ll))
11666:            altDoSolve(9, 0x200ll, puzzle | 0x100100900100ll,
11667:                    partsUsed | 0x40l);
11668:          if(!(puzzle & 0x100900100100ll))
11669:            altDoSolve(9, 0x200ll, puzzle | 0x100900100100ll,
11670:                    partsUsed | 0x40l);
11671:          if(!(puzzle & 0x100100300100ll))
11672:            altDoSolve(9, 0x200ll, puzzle | 0x100100300100ll,
11673:                    partsUsed | 0x40l);
11674:          if(!(puzzle & 0x100300100100ll))
11675:            altDoSolve(9, 0x200ll, puzzle | 0x100300100100ll,
11676:                    partsUsed | 0x40l);
11677:       }
11678:       if(!(puzzle & 0x4920100ll))
11679:         altDoSolve(9, 0x200ll, puzzle | 0x4920100ll,
11680:                    partsUsed | 0x40l);
11681:       if(!(puzzle & 0x100100120100ll))
11682:         altDoSolve(9, 0x200ll, puzzle | 0x100100120100ll,
11683:                    partsUsed | 0x40l);
11684:     altpiece7at8:
11685:       if (partsUsed & 0x80l) goto altpiece8at8;
11686:       if(!(puzzle & 0x900100900ll))
11687:         altDoSolve(9, 0x200ll, puzzle | 0x900100900ll,
11688:                    partsUsed | 0x80l);
11689:       if(!(puzzle & 0x900800900ll))
11690:         altDoSolve(9, 0x200ll, puzzle | 0x900800900ll,
11691:                    partsUsed | 0x80l);
11692:       if(!(puzzle & 0x4904100ll))
11693:         altDoSolve(9, 0x200ll, puzzle | 0x4904100ll,
11694:                    partsUsed | 0x80l);
11695:       if(!(puzzle & 0x4104900ll))
11696:         altDoSolve(9, 0x200ll, puzzle | 0x4104900ll,
11697:                    partsUsed | 0x80l);
11698:       if(!(puzzle & 0xcb00ll))
11699:         altDoSolve(9, 0x200ll, puzzle | 0xcb00ll,
11700:                    partsUsed | 0x80l);
11701:       if(!(puzzle & 0xd300ll))
11702:         altDoSolve(9, 0x200ll, puzzle | 0xd300ll,
11703:                    partsUsed | 0x80l);
11704:       if(!(puzzle & 0x300200300ll))
11705:         altDoSolve(9, 0x200ll, puzzle | 0x300200300ll,
11706:                    partsUsed | 0x80l);
11707:       if(!(puzzle & 0x300100300ll))
11708:         altDoSolve(9, 0x200ll, puzzle | 0x300100300ll,
11709:                    partsUsed | 0x80l);
11710:     altpiece8at8:
11711:       if (partsUsed & 0x100l) goto altpiece9at8;
11712:       if(!(puzzle & 0x190100ll))
11713:         altDoSolve(9, 0x200ll, puzzle | 0x190100ll,
11714:                    partsUsed | 0x100l);
11715:       if(!(puzzle & 0x180900ll))
11716:         altDoSolve(9, 0x200ll, puzzle | 0x180900ll,
11717:                    partsUsed | 0x100l);
11718:       if(!(puzzle & 0x240300ll))
11719:         altDoSolve(9, 0x200ll, puzzle | 0x240300ll,
11720:                    partsUsed | 0x100l);
11721:       if(!(puzzle & 0x200b00ll))
11722:         altDoSolve(9, 0x200ll, puzzle | 0x200b00ll,
11723:                    partsUsed | 0x100l);
11724:       if(!(puzzle & 0x160100ll))
11725:         altDoSolve(9, 0x200ll, puzzle | 0x160100ll,
11726:                    partsUsed | 0x100l);
11727:       if(!(puzzle & 0x400d00ll))
11728:         altDoSolve(9, 0x200ll, puzzle | 0x400d00ll,
11729:                    partsUsed | 0x100l);
11730:       if(!(puzzle & 0xd00100ll))
11731:         altDoSolve(9, 0x200ll, puzzle | 0xd00100ll,
11732:                    partsUsed | 0x100l);
11733:       if(!(puzzle & 0x900300ll))
11734:         altDoSolve(9, 0x200ll, puzzle | 0x900300ll,
11735:                    partsUsed | 0x100l);
11736:       if(!(puzzle & 0x1300100ll))
11737:         altDoSolve(9, 0x200ll, puzzle | 0x1300100ll,
11738:                    partsUsed | 0x100l);
11739:       if(!(puzzle & 0x1800900ll))
11740:         altDoSolve(9, 0x200ll, puzzle | 0x1800900ll,
11741:                    partsUsed | 0x100l);
11742:       if(!(puzzle & 0x101900ll))
11743:         altDoSolve(9, 0x200ll, puzzle | 0x101900ll,
11744:                    partsUsed | 0x100l);
11745:       if(!(puzzle & 0x1001300ll))
11746:         altDoSolve(9, 0x200ll, puzzle | 0x1001300ll,
11747:                    partsUsed | 0x100l);
11748:     altpiece9at8:
11749:       if (partsUsed & 0x200l) goto altpiece10at8;
11750:       if (!(puzzle & 0x100100100ll)) {
11751:          if(!(puzzle & 0x100120900ll))
11752:            altDoSolve(9, 0x200ll, puzzle | 0x100120900ll,
11753:                    partsUsed | 0x200l);
11754:          if(!(puzzle & 0x120900100ll))
11755:            altDoSolve(9, 0x200ll, puzzle | 0x120900100ll,
11756:                    partsUsed | 0x200l);
11757:          if(!(puzzle & 0x900120100ll))
11758:            altDoSolve(9, 0x200ll, puzzle | 0x900120100ll,
11759:                    partsUsed | 0x200l);
11760:          if(!(puzzle & 0x100180300ll))
11761:            altDoSolve(9, 0x200ll, puzzle | 0x100180300ll,
11762:                    partsUsed | 0x200l);
11763:          if(!(puzzle & 0x300180100ll))
11764:            altDoSolve(9, 0x200ll, puzzle | 0x300180100ll,
11765:                    partsUsed | 0x200l);
11766:          if(!(puzzle & 0x180300100ll))
11767:            altDoSolve(9, 0x200ll, puzzle | 0x180300100ll,
11768:                    partsUsed | 0x200l);
11769:       }
11770:       if (!(puzzle & 0x900100ll)) {
11771:          if(!(puzzle & 0x800920100ll))
11772:            altDoSolve(9, 0x200ll, puzzle | 0x800920100ll,
11773:                    partsUsed | 0x200l);
11774:          if(!(puzzle & 0x20920100ll))
11775:            altDoSolve(9, 0x200ll, puzzle | 0x20920100ll,
11776:                    partsUsed | 0x200l);
11777:          if(!(puzzle & 0x804900100ll))
11778:            altDoSolve(9, 0x200ll, puzzle | 0x804900100ll,
11779:                    partsUsed | 0x200l);
11780:       }
11781:       if (!(puzzle & 0xd00ll)) {
11782:          if(!(puzzle & 0x9d00ll))
11783:            altDoSolve(9, 0x200ll, puzzle | 0x9d00ll,
11784:                    partsUsed | 0x200l);
11785:          if(!(puzzle & 0x3d00ll))
11786:            altDoSolve(9, 0x200ll, puzzle | 0x3d00ll,
11787:                    partsUsed | 0x200l);
11788:          if(!(puzzle & 0x4f00ll))
11789:            altDoSolve(9, 0x200ll, puzzle | 0x4f00ll,
11790:                    partsUsed | 0x200l);
11791:          if(!(puzzle & 0xcd00ll))
11792:            altDoSolve(9, 0x200ll, puzzle | 0xcd00ll,
11793:                    partsUsed | 0x200l);
11794:       }
11795:       if(!(puzzle & 0x7900ll))
11796:         altDoSolve(9, 0x200ll, puzzle | 0x7900ll,
11797:                    partsUsed | 0x200l);
11798:       if(!(puzzle & 0x80380100ll))
11799:         altDoSolve(9, 0x200ll, puzzle | 0x80380100ll,
11800:                    partsUsed | 0x200l);
11801:       if(!(puzzle & 0x200380100ll))
11802:         altDoSolve(9, 0x200ll, puzzle | 0x200380100ll,
11803:                    partsUsed | 0x200l);
11804:       if(!(puzzle & 0x804800900ll))
11805:         altDoSolve(9, 0x200ll, puzzle | 0x804800900ll,
11806:                    partsUsed | 0x200l);
11807:     altpiece10at8:
11808:       if (partsUsed & 0x400l) goto altpiece11at8;
11809:       if (!(puzzle & 0x800900ll)) {
11810:          if(!(puzzle & 0x100900900ll))
11811:            altDoSolve(9, 0x200ll, puzzle | 0x100900900ll,
11812:                    partsUsed | 0x400l);
11813:          if(!(puzzle & 0x4900900ll))
11814:            altDoSolve(9, 0x200ll, puzzle | 0x4900900ll,
11815:                    partsUsed | 0x400l);
11816:          if(!(puzzle & 0x4804900ll))
11817:            altDoSolve(9, 0x200ll, puzzle | 0x4804900ll,
11818:                    partsUsed | 0x400l);
11819:          if(!(puzzle & 0x904900ll))
11820:            altDoSolve(9, 0x200ll, puzzle | 0x904900ll,
11821:                    partsUsed | 0x400l);
11822:          if(!(puzzle & 0x800900900ll))
11823:            altDoSolve(9, 0x200ll, puzzle | 0x800900900ll,
11824:                    partsUsed | 0x400l);
11825:       }
11826:       if (!(puzzle & 0x100100100ll)) {
11827:          if(!(puzzle & 0x900900100ll))
11828:            altDoSolve(9, 0x200ll, puzzle | 0x900900100ll,
11829:                    partsUsed | 0x400l);
11830:          if(!(puzzle & 0x100300300ll))
11831:            altDoSolve(9, 0x200ll, puzzle | 0x100300300ll,
11832:                    partsUsed | 0x400l);
11833:          if(!(puzzle & 0x300300100ll))
11834:            altDoSolve(9, 0x200ll, puzzle | 0x300300100ll,
11835:                    partsUsed | 0x400l);
11836:       }
11837:       if (!(puzzle & 0x1900ll)) {
11838:          if(!(puzzle & 0x5b00ll))
11839:            altDoSolve(9, 0x200ll, puzzle | 0x5b00ll,
11840:                    partsUsed | 0x400l);
11841:          if(!(puzzle & 0x9b00ll))
11842:            altDoSolve(9, 0x200ll, puzzle | 0x9b00ll,
11843:                    partsUsed | 0x400l);
11844:          if(!(puzzle & 0xd900ll))
11845:            altDoSolve(9, 0x200ll, puzzle | 0xd900ll,
11846:                    partsUsed | 0x400l);
11847:       }
11848:       if(!(puzzle & 0x120120100ll))
11849:         altDoSolve(9, 0x200ll, puzzle | 0x120120100ll,
11850:                    partsUsed | 0x400l);
11851:       if(!(puzzle & 0x920900ll))
11852:         altDoSolve(9, 0x200ll, puzzle | 0x920900ll,
11853:                    partsUsed | 0x400l);
11854:       if(!(puzzle & 0x1f00ll))
11855:         altDoSolve(9, 0x200ll, puzzle | 0x1f00ll,
11856:                    partsUsed | 0x400l);
11857:       if(!(puzzle & 0x6d00ll))
11858:         altDoSolve(9, 0x200ll, puzzle | 0x6d00ll,
11859:                    partsUsed | 0x400l);
11860:       if(!(puzzle & 0x380300ll))
11861:         altDoSolve(9, 0x200ll, puzzle | 0x380300ll,
11862:                    partsUsed | 0x400l);
11863:       if(!(puzzle & 0x180180100ll))
11864:         altDoSolve(9, 0x200ll, puzzle | 0x180180100ll,
11865:                    partsUsed | 0x400l);
11866:       if(!(puzzle & 0x200300300ll))
11867:         altDoSolve(9, 0x200ll, puzzle | 0x200300300ll,
11868:                    partsUsed | 0x400l);
11869:     altpiece11at8:
11870:     break;
11871:    case 9:
11872:       if (partsUsed & 0x2l) goto altpiece2at9;
11873:       if(!(puzzle & 0x40241200ll))
11874:         altDoSolve(10, 0x400ll, puzzle | 0x40241200ll,
11875:                    partsUsed | 0x2l);
11876:       if(!(puzzle & 0x7a00ll))
11877:         altDoSolve(10, 0x400ll, puzzle | 0x7a00ll,
11878:                    partsUsed | 0x2l);
11879:       if(!(puzzle & 0x180300200ll))
11880:         altDoSolve(10, 0x400ll, puzzle | 0x180300200ll,
11881:                    partsUsed | 0x2l);
11882:       if(!(puzzle & 0x9001200200ll))
11883:         altDoSolve(10, 0x400ll, puzzle | 0x9001200200ll,
11884:                    partsUsed | 0x2l);
11885:       if(!(puzzle & 0x8009001200ll))
11886:         altDoSolve(10, 0x400ll, puzzle | 0x8009001200ll,
11887:                    partsUsed | 0x2l);
11888:     altpiece2at9:
11889:       if (partsUsed & 0x4l) goto altpiece3at9;
11890:       if (!(puzzle & 0x200200200ll)) {
11891:          if(!(puzzle & 0x1240200200ll))
11892:            altDoSolve(10, 0x400ll, puzzle | 0x1240200200ll,
11893:                    partsUsed | 0x4l);
11894:          if(!(puzzle & 0x200380200ll))
11895:            altDoSolve(10, 0x400ll, puzzle | 0x200380200ll,
11896:                    partsUsed | 0x4l);
11897:          if(!(puzzle & 0x209200200ll))
11898:            altDoSolve(10, 0x400ll, puzzle | 0x209200200ll,
11899:                    partsUsed | 0x4l);
11900:       }
11901:       if(!(puzzle & 0x9e00ll))
11902:         altDoSolve(10, 0x400ll, puzzle | 0x9e00ll,
11903:                    partsUsed | 0x4l);
11904:       if(!(puzzle & 0x1001009200ll))
11905:         altDoSolve(10, 0x400ll, puzzle | 0x1001009200ll,
11906:                    partsUsed | 0x4l);
11907:     altpiece3at9:
11908:       if (partsUsed & 0x8l) goto altpiece4at9;
11909:       if(!(puzzle & 0x240201200ll))
11910:         altDoSolve(10, 0x400ll, puzzle | 0x240201200ll,
11911:                    partsUsed | 0x8l);
11912:       if(!(puzzle & 0x3e00ll))
11913:         altDoSolve(10, 0x400ll, puzzle | 0x3e00ll,
11914:                    partsUsed | 0x8l);
11915:       if(!(puzzle & 0x80380200ll))
11916:         altDoSolve(10, 0x400ll, puzzle | 0x80380200ll,
11917:                    partsUsed | 0x8l);
11918:       if(!(puzzle & 0x8009200200ll))
11919:         altDoSolve(10, 0x400ll, puzzle | 0x8009200200ll,
11920:                    partsUsed | 0x8l);
11921:       if(!(puzzle & 0x9001001200ll))
11922:         altDoSolve(10, 0x400ll, puzzle | 0x9001001200ll,
11923:                    partsUsed | 0x8l);
11924:     altpiece4at9:
11925:       if (partsUsed & 0x10l) goto altpiece5at9;
11926:       if (!(puzzle & 0x200200200200ll)) {
11927:          if(!(puzzle & 0x300200300200ll))
11928:            altDoSolve(10, 0x400ll, puzzle | 0x300200300200ll,
11929:                    partsUsed | 0x10l);
11930:          if(!(puzzle & 0x1200201200200ll))
11931:            altDoSolve(10, 0x400ll, puzzle | 0x1200201200200ll,
11932:                    partsUsed | 0x10l);
11933:          if(!(puzzle & 0x201200201200ll))
11934:            altDoSolve(10, 0x400ll, puzzle | 0x201200201200ll,
11935:                    partsUsed | 0x10l);
11936:       }
11937:       if(!(puzzle & 0x9248200ll))
11938:         altDoSolve(10, 0x400ll, puzzle | 0x9248200ll,
11939:                    partsUsed | 0x10l);
11940:       if(!(puzzle & 0x240200240200ll))
11941:         altDoSolve(10, 0x400ll, puzzle | 0x240200240200ll,
11942:                    partsUsed | 0x10l);
11943:       if(!(puzzle & 0x1001201001200ll))
11944:         altDoSolve(10, 0x400ll, puzzle | 0x1001201001200ll,
11945:                    partsUsed | 0x10l);
11946:     altpiece5at9:
11947:       if (partsUsed & 0x20l) goto altpiece6at9;
11948:       if (!(puzzle & 0x200200200200ll)) {
11949:          if(!(puzzle & 0x240200200200ll))
11950:            altDoSolve(10, 0x400ll, puzzle | 0x240200200200ll,
11951:                    partsUsed | 0x20l);
11952:          if(!(puzzle & 0x300200200200ll))
11953:            altDoSolve(10, 0x400ll, puzzle | 0x300200200200ll,
11954:                    partsUsed | 0x20l);
11955:          if(!(puzzle & 0x200200201200ll))
11956:            altDoSolve(10, 0x400ll, puzzle | 0x200200201200ll,
11957:                    partsUsed | 0x20l);
11958:          if(!(puzzle & 0x1200200200200ll))
11959:            altDoSolve(10, 0x400ll, puzzle | 0x1200200200200ll,
11960:                    partsUsed | 0x20l);
11961:       }
11962:       if(!(puzzle & 0x1001001001200ll))
11963:         altDoSolve(10, 0x400ll, puzzle | 0x1001001001200ll,
11964:                    partsUsed | 0x20l);
11965:     altpiece6at9:
11966:       if (partsUsed & 0x40l) goto altpiece7at9;
11967:       if (!(puzzle & 0x200200200200ll)) {
11968:          if(!(puzzle & 0x200240200200ll))
11969:            altDoSolve(10, 0x400ll, puzzle | 0x200240200200ll,
11970:                    partsUsed | 0x40l);
11971:          if(!(puzzle & 0x200200300200ll))
11972:            altDoSolve(10, 0x400ll, puzzle | 0x200200300200ll,
11973:                    partsUsed | 0x40l);
11974:          if(!(puzzle & 0x200300200200ll))
11975:            altDoSolve(10, 0x400ll, puzzle | 0x200300200200ll,
11976:                    partsUsed | 0x40l);
11977:          if(!(puzzle & 0x200201200200ll))
11978:            altDoSolve(10, 0x400ll, puzzle | 0x200201200200ll,
11979:                    partsUsed | 0x40l);
11980:          if(!(puzzle & 0x201200200200ll))
11981:            altDoSolve(10, 0x400ll, puzzle | 0x201200200200ll,
11982:                    partsUsed | 0x40l);
11983:       }
11984:       if(!(puzzle & 0x9240200ll))
11985:         altDoSolve(10, 0x400ll, puzzle | 0x9240200ll,
11986:                    partsUsed | 0x40l);
11987:       if(!(puzzle & 0x200200240200ll))
11988:         altDoSolve(10, 0x400ll, puzzle | 0x200200240200ll,
11989:                    partsUsed | 0x40l);
11990:     altpiece7at9:
11991:       if (partsUsed & 0x80l) goto altpiece8at9;
11992:       if(!(puzzle & 0x1200201200ll))
11993:         altDoSolve(10, 0x400ll, puzzle | 0x1200201200ll,
11994:                    partsUsed | 0x80l);
11995:       if(!(puzzle & 0x1201001200ll))
11996:         altDoSolve(10, 0x400ll, puzzle | 0x1201001200ll,
11997:                    partsUsed | 0x80l);
11998:       if(!(puzzle & 0x9208200ll))
11999:         altDoSolve(10, 0x400ll, puzzle | 0x9208200ll,
12000:                    partsUsed | 0x80l);
12001:       if(!(puzzle & 0x8209200ll))
12002:         altDoSolve(10, 0x400ll, puzzle | 0x8209200ll,
12003:                    partsUsed | 0x80l);
12004:     altpiece8at9:
12005:       if (partsUsed & 0x100l) goto altpiece9at9;
12006:       if(!(puzzle & 0x320200ll))
12007:         altDoSolve(10, 0x400ll, puzzle | 0x320200ll,
12008:                    partsUsed | 0x100l);
12009:       if(!(puzzle & 0x301200ll))
12010:         altDoSolve(10, 0x400ll, puzzle | 0x301200ll,
12011:                    partsUsed | 0x100l);
12012:       if(!(puzzle & 0x801a00ll))
12013:         altDoSolve(10, 0x400ll, puzzle | 0x801a00ll,
12014:                    partsUsed | 0x100l);
12015:       if(!(puzzle & 0x1a00200ll))
12016:         altDoSolve(10, 0x400ll, puzzle | 0x1a00200ll,
12017:                    partsUsed | 0x100l);
12018:     altpiece9at9:
12019:       if (partsUsed & 0x200l) goto altpiece10at9;
12020:       if (!(puzzle & 0x200200200ll)) {
12021:          if(!(puzzle & 0x200241200ll))
12022:            altDoSolve(10, 0x400ll, puzzle | 0x200241200ll,
12023:                    partsUsed | 0x200l);
12024:          if(!(puzzle & 0x241200200ll))
12025:            altDoSolve(10, 0x400ll, puzzle | 0x241200200ll,
12026:                    partsUsed | 0x200l);
12027:          if(!(puzzle & 0x1200240200ll))
12028:            altDoSolve(10, 0x400ll, puzzle | 0x1200240200ll,
12029:                    partsUsed | 0x200l);
12030:       }
12031:       if (!(puzzle & 0x1200200ll)) {
12032:          if(!(puzzle & 0x1001240200ll))
12033:            altDoSolve(10, 0x400ll, puzzle | 0x1001240200ll,
12034:                    partsUsed | 0x200l);
12035:          if(!(puzzle & 0x41240200ll))
12036:            altDoSolve(10, 0x400ll, puzzle | 0x41240200ll,
12037:                    partsUsed | 0x200l);
12038:          if(!(puzzle & 0x1009200200ll))
12039:            altDoSolve(10, 0x400ll, puzzle | 0x1009200200ll,
12040:                    partsUsed | 0x200l);
12041:       }
12042:       if(!(puzzle & 0x5e00ll))
12043:         altDoSolve(10, 0x400ll, puzzle | 0x5e00ll,
12044:                    partsUsed | 0x200l);
12045:       if(!(puzzle & 0x100380200ll))
12046:         altDoSolve(10, 0x400ll, puzzle | 0x100380200ll,
12047:                    partsUsed | 0x200l);
12048:       if(!(puzzle & 0x1009001200ll))
12049:         altDoSolve(10, 0x400ll, puzzle | 0x1009001200ll,
12050:                    partsUsed | 0x200l);
12051:     altpiece10at9:
12052:       if (partsUsed & 0x400l) goto altpiece11at9;
12053:       if (!(puzzle & 0x9200ll)) {
12054:          if(!(puzzle & 0xda00ll))
12055:            altDoSolve(10, 0x400ll, puzzle | 0xda00ll,
12056:                    partsUsed | 0x400l);
12057:          if(!(puzzle & 0x9009200ll))
12058:            altDoSolve(10, 0x400ll, puzzle | 0x9009200ll,
12059:                    partsUsed | 0x400l);
12060:          if(!(puzzle & 0x1209200ll))
12061:            altDoSolve(10, 0x400ll, puzzle | 0x1209200ll,
12062:                    partsUsed | 0x400l);
12063:       }
12064:       if (!(puzzle & 0x200200200ll)) {
12065:          if(!(puzzle & 0x300300200ll))
12066:            altDoSolve(10, 0x400ll, puzzle | 0x300300200ll,
12067:                    partsUsed | 0x400l);
12068:          if(!(puzzle & 0x201201200ll))
12069:            altDoSolve(10, 0x400ll, puzzle | 0x201201200ll,
12070:                    partsUsed | 0x400l);
12071:          if(!(puzzle & 0x1201200200ll))
12072:            altDoSolve(10, 0x400ll, puzzle | 0x1201200200ll,
12073:                    partsUsed | 0x400l);
12074:       }
12075:       if(!(puzzle & 0x240240200ll))
12076:         altDoSolve(10, 0x400ll, puzzle | 0x240240200ll,
12077:                    partsUsed | 0x400l);
12078:       if(!(puzzle & 0x1241200ll))
12079:         altDoSolve(10, 0x400ll, puzzle | 0x1241200ll,
12080:                    partsUsed | 0x400l);
12081:       if(!(puzzle & 0x9201200ll))
12082:         altDoSolve(10, 0x400ll, puzzle | 0x9201200ll,
12083:                    partsUsed | 0x400l);
12084:       if(!(puzzle & 0x1001201200ll))
12085:         altDoSolve(10, 0x400ll, puzzle | 0x1001201200ll,
12086:                    partsUsed | 0x400l);
12087:     altpiece11at9:
12088:     break;
12089:    case 10:
12090:       if (partsUsed & 0x2l) goto altpiece2at10;
12091:       if(!(puzzle & 0x90480400ll))
12092:         altDoSolve(11, 0x800ll, puzzle | 0x90480400ll,
12093:                    partsUsed | 0x2l);
12094:       if(!(puzzle & 0x80482400ll))
12095:         altDoSolve(11, 0x800ll, puzzle | 0x80482400ll,
12096:                    partsUsed | 0x2l);
12097:       if(!(puzzle & 0x1001800c00ll))
12098:         altDoSolve(11, 0x800ll, puzzle | 0x1001800c00ll,
12099:                    partsUsed | 0x2l);
12100:       if(!(puzzle & 0x1800c00400ll))
12101:         altDoSolve(11, 0x800ll, puzzle | 0x1800c00400ll,
12102:                    partsUsed | 0x2l);
12103:     altpiece2at10:
12104:       if (partsUsed & 0x4l) goto altpiece3at10;
12105:       if (!(puzzle & 0x400400400ll)) {
12106:          if(!(puzzle & 0x400490400ll))
12107:            altDoSolve(11, 0x800ll, puzzle | 0x400490400ll,
12108:                    partsUsed | 0x4l);
12109:          if(!(puzzle & 0x2480400400ll))
12110:            altDoSolve(11, 0x800ll, puzzle | 0x2480400400ll,
12111:                    partsUsed | 0x4l);
12112:          if(!(puzzle & 0x401c00400ll))
12113:            altDoSolve(11, 0x800ll, puzzle | 0x401c00400ll,
12114:                    partsUsed | 0x4l);
12115:       }
12116:       if(!(puzzle & 0x800801c00ll))
12117:         altDoSolve(11, 0x800ll, puzzle | 0x800801c00ll,
12118:                    partsUsed | 0x4l);
12119:     altpiece3at10:
12120:       if (partsUsed & 0x8l) goto altpiece4at10;
12121:       if(!(puzzle & 0x10490400ll))
12122:         altDoSolve(11, 0x800ll, puzzle | 0x10490400ll,
12123:                    partsUsed | 0x8l);
12124:       if(!(puzzle & 0x480402400ll))
12125:         altDoSolve(11, 0x800ll, puzzle | 0x480402400ll,
12126:                    partsUsed | 0x8l);
12127:       if(!(puzzle & 0x1001c00400ll))
12128:         altDoSolve(11, 0x800ll, puzzle | 0x1001c00400ll,
12129:                    partsUsed | 0x8l);
12130:       if(!(puzzle & 0x1800800c00ll))
12131:         altDoSolve(11, 0x800ll, puzzle | 0x1800800c00ll,
12132:                    partsUsed | 0x8l);
12133:     altpiece4at10:
12134:       if (partsUsed & 0x10l) goto altpiece5at10;
12135:       if (!(puzzle & 0x400400400400ll)) {
12136:          if(!(puzzle & 0x480400480400ll))
12137:            altDoSolve(11, 0x800ll, puzzle | 0x480400480400ll,
12138:                    partsUsed | 0x10l);
12139:          if(!(puzzle & 0x2400402400400ll))
12140:            altDoSolve(11, 0x800ll, puzzle | 0x2400402400400ll,
12141:                    partsUsed | 0x10l);
12142:          if(!(puzzle & 0x402400402400ll))
12143:            altDoSolve(11, 0x800ll, puzzle | 0x402400402400ll,
12144:                    partsUsed | 0x10l);
12145:          if(!(puzzle & 0xc00400c00400ll))
12146:            altDoSolve(11, 0x800ll, puzzle | 0xc00400c00400ll,
12147:                    partsUsed | 0x10l);
12148:          if(!(puzzle & 0x400c00400c00ll))
12149:            altDoSolve(11, 0x800ll, puzzle | 0x400c00400c00ll,
12150:                    partsUsed | 0x10l);
12151:       }
12152:       if(!(puzzle & 0x2002402002400ll))
12153:         altDoSolve(11, 0x800ll, puzzle | 0x2002402002400ll,
12154:                    partsUsed | 0x10l);
12155:       if(!(puzzle & 0x800c00800c00ll))
12156:         altDoSolve(11, 0x800ll, puzzle | 0x800c00800c00ll,
12157:                    partsUsed | 0x10l);
12158:     altpiece5at10:
12159:       if (partsUsed & 0x20l) goto altpiece6at10;
12160:       if (!(puzzle & 0x400400400400ll)) {
12161:          if(!(puzzle & 0x480400400400ll))
12162:            altDoSolve(11, 0x800ll, puzzle | 0x480400400400ll,
12163:                    partsUsed | 0x20l);
12164:          if(!(puzzle & 0x400400402400ll))
12165:            altDoSolve(11, 0x800ll, puzzle | 0x400400402400ll,
12166:                    partsUsed | 0x20l);
12167:          if(!(puzzle & 0x2400400400400ll))
12168:            altDoSolve(11, 0x800ll, puzzle | 0x2400400400400ll,
12169:                    partsUsed | 0x20l);
12170:          if(!(puzzle & 0x400400400c00ll))
12171:            altDoSolve(11, 0x800ll, puzzle | 0x400400400c00ll,
12172:                    partsUsed | 0x20l);
12173:          if(!(puzzle & 0xc00400400400ll))
12174:            altDoSolve(11, 0x800ll, puzzle | 0xc00400400400ll,
12175:                    partsUsed | 0x20l);
12176:       }
12177:       if(!(puzzle & 0x2002002002400ll))
12178:         altDoSolve(11, 0x800ll, puzzle | 0x2002002002400ll,
12179:                    partsUsed | 0x20l);
12180:       if(!(puzzle & 0x800800800c00ll))
12181:         altDoSolve(11, 0x800ll, puzzle | 0x800800800c00ll,
12182:                    partsUsed | 0x20l);
12183:     altpiece6at10:
12184:       if (partsUsed & 0x40l) goto altpiece7at10;
12185:       if (!(puzzle & 0x400400400400ll)) {
12186:          if(!(puzzle & 0x400480400400ll))
12187:            altDoSolve(11, 0x800ll, puzzle | 0x400480400400ll,
12188:                    partsUsed | 0x40l);
12189:          if(!(puzzle & 0x400402400400ll))
12190:            altDoSolve(11, 0x800ll, puzzle | 0x400402400400ll,
12191:                    partsUsed | 0x40l);
12192:          if(!(puzzle & 0x402400400400ll))
12193:            altDoSolve(11, 0x800ll, puzzle | 0x402400400400ll,
12194:                    partsUsed | 0x40l);
12195:          if(!(puzzle & 0x400400c00400ll))
12196:            altDoSolve(11, 0x800ll, puzzle | 0x400400c00400ll,
12197:                    partsUsed | 0x40l);
12198:          if(!(puzzle & 0x400c00400400ll))
12199:            altDoSolve(11, 0x800ll, puzzle | 0x400c00400400ll,
12200:                    partsUsed | 0x40l);
12201:       }
12202:       if(!(puzzle & 0x2490400ll))
12203:         altDoSolve(11, 0x800ll, puzzle | 0x2490400ll,
12204:                    partsUsed | 0x40l);
12205:       if(!(puzzle & 0x400400480400ll))
12206:         altDoSolve(11, 0x800ll, puzzle | 0x400400480400ll,
12207:                    partsUsed | 0x40l);
12208:     altpiece7at10:
12209:       if (partsUsed & 0x80l) goto altpiece8at10;
12210:       if(!(puzzle & 0x2400402400ll))
12211:         altDoSolve(11, 0x800ll, puzzle | 0x2400402400ll,
12212:                    partsUsed | 0x80l);
12213:       if(!(puzzle & 0x2402002400ll))
12214:         altDoSolve(11, 0x800ll, puzzle | 0x2402002400ll,
12215:                    partsUsed | 0x80l);
12216:       if(!(puzzle & 0xbc00ll))
12217:         altDoSolve(11, 0x800ll, puzzle | 0xbc00ll,
12218:                    partsUsed | 0x80l);
12219:       if(!(puzzle & 0xf400ll))
12220:         altDoSolve(11, 0x800ll, puzzle | 0xf400ll,
12221:                    partsUsed | 0x80l);
12222:       if(!(puzzle & 0xc00800c00ll))
12223:         altDoSolve(11, 0x800ll, puzzle | 0xc00800c00ll,
12224:                    partsUsed | 0x80l);
12225:       if(!(puzzle & 0xc00400c00ll))
12226:         altDoSolve(11, 0x800ll, puzzle | 0xc00400c00ll,
12227:                    partsUsed | 0x80l);
12228:       if(!(puzzle & 0x1c01400ll))
12229:         altDoSolve(11, 0x800ll, puzzle | 0x1c01400ll,
12230:                    partsUsed | 0x80l);
12231:       if(!(puzzle & 0x1401c00ll))
12232:         altDoSolve(11, 0x800ll, puzzle | 0x1401c00ll,
12233:                    partsUsed | 0x80l);
12234:     altpiece8at10:
12235:       if (partsUsed & 0x100l) goto altpiece9at10;
12236:       if(!(puzzle & 0x900c00ll))
12237:         altDoSolve(11, 0x800ll, puzzle | 0x900c00ll,
12238:                    partsUsed | 0x100l);
12239:       if(!(puzzle & 0x802c00ll))
12240:         altDoSolve(11, 0x800ll, puzzle | 0x802c00ll,
12241:                    partsUsed | 0x100l);
12242:       if(!(puzzle & 0x580400ll))
12243:         altDoSolve(11, 0x800ll, puzzle | 0x580400ll,
12244:                    partsUsed | 0x100l);
12245:       if(!(puzzle & 0x4c00400ll))
12246:         altDoSolve(11, 0x800ll, puzzle | 0x4c00400ll,
12247:                    partsUsed | 0x100l);
12248:       if(!(puzzle & 0x2400c00ll))
12249:         altDoSolve(11, 0x800ll, puzzle | 0x2400c00ll,
12250:                    partsUsed | 0x100l);
12251:       if(!(puzzle & 0x6002400ll))
12252:         altDoSolve(11, 0x800ll, puzzle | 0x6002400ll,
12253:                    partsUsed | 0x100l);
12254:       if(!(puzzle & 0x406400ll))
12255:         altDoSolve(11, 0x800ll, puzzle | 0x406400ll,
12256:                    partsUsed | 0x100l);
12257:       if(!(puzzle & 0x4004c00ll))
12258:         altDoSolve(11, 0x800ll, puzzle | 0x4004c00ll,
12259:                    partsUsed | 0x100l);
12260:     altpiece9at10:
12261:       if (partsUsed & 0x200l) goto altpiece10at10;
12262:       if (!(puzzle & 0x480400ll)) {
12263:          if(!(puzzle & 0x80490400ll))
12264:            altDoSolve(11, 0x800ll, puzzle | 0x80490400ll,
12265:                    partsUsed | 0x200l);
12266:          if(!(puzzle & 0x400482400ll))
12267:            altDoSolve(11, 0x800ll, puzzle | 0x400482400ll,
12268:                    partsUsed | 0x200l);
12269:          if(!(puzzle & 0x2002480400ll))
12270:            altDoSolve(11, 0x800ll, puzzle | 0x2002480400ll,
12271:                    partsUsed | 0x200l);
12272:          if(!(puzzle & 0x2400480400ll))
12273:            altDoSolve(11, 0x800ll, puzzle | 0x2400480400ll,
12274:                    partsUsed | 0x200l);
12275:          if(!(puzzle & 0x82480400ll))
12276:            altDoSolve(11, 0x800ll, puzzle | 0x82480400ll,
12277:                    partsUsed | 0x200l);
12278:       }
12279:       if(!(puzzle & 0x482400400ll))
12280:         altDoSolve(11, 0x800ll, puzzle | 0x482400400ll,
12281:                    partsUsed | 0x200l);
12282:       if(!(puzzle & 0x801800c00ll))
12283:         altDoSolve(11, 0x800ll, puzzle | 0x801800c00ll,
12284:                    partsUsed | 0x200l);
12285:       if(!(puzzle & 0x801c00400ll))
12286:         altDoSolve(11, 0x800ll, puzzle | 0x801c00400ll,
12287:                    partsUsed | 0x200l);
12288:     altpiece10at10:
12289:       if (partsUsed & 0x400l) goto altpiece11at10;
12290:       if (!(puzzle & 0x2400400ll)) {
12291:          if(!(puzzle & 0x402402400ll))
12292:            altDoSolve(11, 0x800ll, puzzle | 0x402402400ll,
12293:                    partsUsed | 0x400l);
12294:          if(!(puzzle & 0x2402400400ll))
12295:            altDoSolve(11, 0x800ll, puzzle | 0x2402400400ll,
12296:                    partsUsed | 0x400l);
12297:          if(!(puzzle & 0x2002402400ll))
12298:            altDoSolve(11, 0x800ll, puzzle | 0x2002402400ll,
12299:                    partsUsed | 0x400l);
12300:       }
12301:       if (!(puzzle & 0x4c00ll)) {
12302:          if(!(puzzle & 0xdc00ll))
12303:            altDoSolve(11, 0x800ll, puzzle | 0xdc00ll,
12304:                    partsUsed | 0x400l);
12305:          if(!(puzzle & 0x7c00ll))
12306:            altDoSolve(11, 0x800ll, puzzle | 0x7c00ll,
12307:                    partsUsed | 0x400l);
12308:          if(!(puzzle & 0xec00ll))
12309:            altDoSolve(11, 0x800ll, puzzle | 0xec00ll,
12310:                    partsUsed | 0x400l);
12311:       }
12312:       if (!(puzzle & 0xc00400ll)) {
12313:          if(!(puzzle & 0x800c00c00ll))
12314:            altDoSolve(11, 0x800ll, puzzle | 0x800c00c00ll,
12315:                    partsUsed | 0x400l);
12316:          if(!(puzzle & 0x400c00c00ll))
12317:            altDoSolve(11, 0x800ll, puzzle | 0x400c00c00ll,
12318:                    partsUsed | 0x400l);
12319:          if(!(puzzle & 0x1c00c00ll))
12320:            altDoSolve(11, 0x800ll, puzzle | 0x1c00c00ll,
12321:                    partsUsed | 0x400l);
12322:          if(!(puzzle & 0xc00c00400ll))
12323:            altDoSolve(11, 0x800ll, puzzle | 0xc00c00400ll,
12324:                    partsUsed | 0x400l);
12325:          if(!(puzzle & 0xc01c00ll))
12326:            altDoSolve(11, 0x800ll, puzzle | 0xc01c00ll,
12327:                    partsUsed | 0x400l);
12328:       }
12329:       if(!(puzzle & 0x480480400ll))
12330:         altDoSolve(11, 0x800ll, puzzle | 0x480480400ll,
12331:                    partsUsed | 0x400l);
12332:       if(!(puzzle & 0x2482400ll))
12333:         altDoSolve(11, 0x800ll, puzzle | 0x2482400ll,
12334:                    partsUsed | 0x400l);
12335:       if(!(puzzle & 0x1801c00ll))
12336:         altDoSolve(11, 0x800ll, puzzle | 0x1801c00ll,
12337:                    partsUsed | 0x400l);
12338:     altpiece11at10:
12339:     break;
12340:    case 11:
12341:       if (partsUsed & 0x2l) goto altpiece2at11;
12342:       if(!(puzzle & 0x400c01800ll))
12343:         altDoSolve(12, 0x1000ll, puzzle | 0x400c01800ll,
12344:                    partsUsed | 0x2l);
12345:       if(!(puzzle & 0x120900800ll))
12346:         altDoSolve(12, 0x1000ll, puzzle | 0x120900800ll,
12347:                    partsUsed | 0x2l);
12348:       if(!(puzzle & 0x100904800ll))
12349:         altDoSolve(12, 0x1000ll, puzzle | 0x100904800ll,
12350:                    partsUsed | 0x2l);
12351:     altpiece2at11:
12352:       if (partsUsed & 0x4l) goto altpiece3at11;
12353:       if (!(puzzle & 0x800800800ll)) {
12354:          if(!(puzzle & 0x800920800ll))
12355:            altDoSolve(12, 0x1000ll, puzzle | 0x800920800ll,
12356:                    partsUsed | 0x4l);
12357:          if(!(puzzle & 0x4900800800ll))
12358:            altDoSolve(12, 0x1000ll, puzzle | 0x4900800800ll,
12359:                    partsUsed | 0x4l);
12360:          if(!(puzzle & 0x1c00800800ll))
12361:            altDoSolve(12, 0x1000ll, puzzle | 0x1c00800800ll,
12362:                    partsUsed | 0x4l);
12363:       }
12364:     altpiece3at11:
12365:       if (partsUsed & 0x8l) goto altpiece4at11;
12366:       if(!(puzzle & 0x20920800ll))
12367:         altDoSolve(12, 0x1000ll, puzzle | 0x20920800ll,
12368:                    partsUsed | 0x8l);
12369:       if(!(puzzle & 0x900804800ll))
12370:         altDoSolve(12, 0x1000ll, puzzle | 0x900804800ll,
12371:                    partsUsed | 0x8l);
12372:       if(!(puzzle & 0xc00801800ll))
12373:         altDoSolve(12, 0x1000ll, puzzle | 0xc00801800ll,
12374:                    partsUsed | 0x8l);
12375:     altpiece4at11:
12376:       if (partsUsed & 0x10l) goto altpiece5at11;
12377:       if (!(puzzle & 0x800800800800ll)) {
12378:          if(!(puzzle & 0x900800900800ll))
12379:            altDoSolve(12, 0x1000ll, puzzle | 0x900800900800ll,
12380:                    partsUsed | 0x10l);
12381:          if(!(puzzle & 0xc00800c00800ll))
12382:            altDoSolve(12, 0x1000ll, puzzle | 0xc00800c00800ll,
12383:                    partsUsed | 0x10l);
12384:          if(!(puzzle & 0x4800804800800ll))
12385:            altDoSolve(12, 0x1000ll, puzzle | 0x4800804800800ll,
12386:                    partsUsed | 0x10l);
12387:          if(!(puzzle & 0x804800804800ll))
12388:            altDoSolve(12, 0x1000ll, puzzle | 0x804800804800ll,
12389:                    partsUsed | 0x10l);
12390:          if(!(puzzle & 0x1800801800800ll))
12391:            altDoSolve(12, 0x1000ll, puzzle | 0x1800801800800ll,
12392:                    partsUsed | 0x10l);
12393:          if(!(puzzle & 0x801800801800ll))
12394:            altDoSolve(12, 0x1000ll, puzzle | 0x801800801800ll,
12395:                    partsUsed | 0x10l);
12396:       }
12397:       if(!(puzzle & 0x4004804004800ll))
12398:         altDoSolve(12, 0x1000ll, puzzle | 0x4004804004800ll,
12399:                    partsUsed | 0x10l);
12400:       if(!(puzzle & 0x1001801001800ll))
12401:         altDoSolve(12, 0x1000ll, puzzle | 0x1001801001800ll,
12402:                    partsUsed | 0x10l);
12403:     altpiece5at11:
12404:       if (partsUsed & 0x20l) goto altpiece6at11;
12405:       if (!(puzzle & 0x800800800800ll)) {
12406:          if(!(puzzle & 0x900800800800ll))
12407:            altDoSolve(12, 0x1000ll, puzzle | 0x900800800800ll,
12408:                    partsUsed | 0x20l);
12409:          if(!(puzzle & 0xc00800800800ll))
12410:            altDoSolve(12, 0x1000ll, puzzle | 0xc00800800800ll,
12411:                    partsUsed | 0x20l);
12412:          if(!(puzzle & 0x800800804800ll))
12413:            altDoSolve(12, 0x1000ll, puzzle | 0x800800804800ll,
12414:                    partsUsed | 0x20l);
12415:          if(!(puzzle & 0x4800800800800ll))
12416:            altDoSolve(12, 0x1000ll, puzzle | 0x4800800800800ll,
12417:                    partsUsed | 0x20l);
12418:          if(!(puzzle & 0x800800801800ll))
12419:            altDoSolve(12, 0x1000ll, puzzle | 0x800800801800ll,
12420:                    partsUsed | 0x20l);
12421:          if(!(puzzle & 0x1800800800800ll))
12422:            altDoSolve(12, 0x1000ll, puzzle | 0x1800800800800ll,
12423:                    partsUsed | 0x20l);
12424:       }
12425:       if(!(puzzle & 0x4004004004800ll))
12426:         altDoSolve(12, 0x1000ll, puzzle | 0x4004004004800ll,
12427:                    partsUsed | 0x20l);
12428:       if(!(puzzle & 0x1001001001800ll))
12429:         altDoSolve(12, 0x1000ll, puzzle | 0x1001001001800ll,
12430:                    partsUsed | 0x20l);
12431:     altpiece6at11:
12432:       if (partsUsed & 0x40l) goto altpiece7at11;
12433:       if (!(puzzle & 0x800800800800ll)) {
12434:          if(!(puzzle & 0x800900800800ll))
12435:            altDoSolve(12, 0x1000ll, puzzle | 0x800900800800ll,
12436:                    partsUsed | 0x40l);
12437:          if(!(puzzle & 0x800800c00800ll))
12438:            altDoSolve(12, 0x1000ll, puzzle | 0x800800c00800ll,
12439:                    partsUsed | 0x40l);
12440:          if(!(puzzle & 0x800c00800800ll))
12441:            altDoSolve(12, 0x1000ll, puzzle | 0x800c00800800ll,
12442:                    partsUsed | 0x40l);
12443:          if(!(puzzle & 0x800804800800ll))
12444:            altDoSolve(12, 0x1000ll, puzzle | 0x800804800800ll,
12445:                    partsUsed | 0x40l);
12446:          if(!(puzzle & 0x804800800800ll))
12447:            altDoSolve(12, 0x1000ll, puzzle | 0x804800800800ll,
12448:                    partsUsed | 0x40l);
12449:          if(!(puzzle & 0x800801800800ll))
12450:            altDoSolve(12, 0x1000ll, puzzle | 0x800801800800ll,
12451:                    partsUsed | 0x40l);
12452:          if(!(puzzle & 0x801800800800ll))
12453:            altDoSolve(12, 0x1000ll, puzzle | 0x801800800800ll,
12454:                    partsUsed | 0x40l);
12455:       }
12456:       if(!(puzzle & 0x4920800ll))
12457:         altDoSolve(12, 0x1000ll, puzzle | 0x4920800ll,
12458:                    partsUsed | 0x40l);
12459:       if(!(puzzle & 0x800800900800ll))
12460:         altDoSolve(12, 0x1000ll, puzzle | 0x800800900800ll,
12461:                    partsUsed | 0x40l);
12462:     altpiece7at11:
12463:       if (partsUsed & 0x80l) goto altpiece8at11;
12464:       if(!(puzzle & 0x4800804800ll))
12465:         altDoSolve(12, 0x1000ll, puzzle | 0x4800804800ll,
12466:                    partsUsed | 0x80l);
12467:       if(!(puzzle & 0x4804004800ll))
12468:         altDoSolve(12, 0x1000ll, puzzle | 0x4804004800ll,
12469:                    partsUsed | 0x80l);
12470:       if(!(puzzle & 0x1801001800ll))
12471:         altDoSolve(12, 0x1000ll, puzzle | 0x1801001800ll,
12472:                    partsUsed | 0x80l);
12473:       if(!(puzzle & 0x1800801800ll))
12474:         altDoSolve(12, 0x1000ll, puzzle | 0x1800801800ll,
12475:                    partsUsed | 0x80l);
12476:     altpiece8at11:
12477:       if (partsUsed & 0x100l) goto altpiece9at11;
12478:       if(!(puzzle & 0xc80800ll))
12479:         altDoSolve(12, 0x1000ll, puzzle | 0xc80800ll,
12480:                    partsUsed | 0x100l);
12481:       if(!(puzzle & 0xc04800ll))
12482:         altDoSolve(12, 0x1000ll, puzzle | 0xc04800ll,
12483:                    partsUsed | 0x100l);
12484:       if(!(puzzle & 0x1201800ll))
12485:         altDoSolve(12, 0x1000ll, puzzle | 0x1201800ll,
12486:                    partsUsed | 0x100l);
12487:       if(!(puzzle & 0x1005800ll))
12488:         altDoSolve(12, 0x1000ll, puzzle | 0x1005800ll,
12489:                    partsUsed | 0x100l);
12490:       if(!(puzzle & 0xb00800ll))
12491:         altDoSolve(12, 0x1000ll, puzzle | 0xb00800ll,
12492:                    partsUsed | 0x100l);
12493:       if(!(puzzle & 0x2006800ll))
12494:         altDoSolve(12, 0x1000ll, puzzle | 0x2006800ll,
12495:                    partsUsed | 0x100l);
12496:       if(!(puzzle & 0x6800800ll))
12497:         altDoSolve(12, 0x1000ll, puzzle | 0x6800800ll,
12498:                    partsUsed | 0x100l);
12499:       if(!(puzzle & 0x4801800ll))
12500:         altDoSolve(12, 0x1000ll, puzzle | 0x4801800ll,
12501:                    partsUsed | 0x100l);
12502:       if(!(puzzle & 0x9800800ll))
12503:         altDoSolve(12, 0x1000ll, puzzle | 0x9800800ll,
12504:                    partsUsed | 0x100l);
12505:       if(!(puzzle & 0xc004800ll))
12506:         altDoSolve(12, 0x1000ll, puzzle | 0xc004800ll,
12507:                    partsUsed | 0x100l);
12508:       if(!(puzzle & 0x80c800ll))
12509:         altDoSolve(12, 0x1000ll, puzzle | 0x80c800ll,
12510:                    partsUsed | 0x100l);
12511:       if(!(puzzle & 0x8009800ll))
12512:         altDoSolve(12, 0x1000ll, puzzle | 0x8009800ll,
12513:                    partsUsed | 0x100l);
12514:     altpiece9at11:
12515:       if (partsUsed & 0x200l) goto altpiece10at11;
12516:       if (!(puzzle & 0x900800ll)) {
12517:          if(!(puzzle & 0x100920800ll))
12518:            altDoSolve(12, 0x1000ll, puzzle | 0x100920800ll,
12519:                    partsUsed | 0x200l);
12520:          if(!(puzzle & 0x800904800ll))
12521:            altDoSolve(12, 0x1000ll, puzzle | 0x800904800ll,
12522:                    partsUsed | 0x200l);
12523:          if(!(puzzle & 0x4004900800ll))
12524:            altDoSolve(12, 0x1000ll, puzzle | 0x4004900800ll,
12525:                    partsUsed | 0x200l);
12526:          if(!(puzzle & 0x4800900800ll))
12527:            altDoSolve(12, 0x1000ll, puzzle | 0x4800900800ll,
12528:                    partsUsed | 0x200l);
12529:          if(!(puzzle & 0x104900800ll))
12530:            altDoSolve(12, 0x1000ll, puzzle | 0x104900800ll,
12531:                    partsUsed | 0x200l);
12532:       }
12533:       if (!(puzzle & 0x800800800ll)) {
12534:          if(!(puzzle & 0x904800800ll))
12535:            altDoSolve(12, 0x1000ll, puzzle | 0x904800800ll,
12536:                    partsUsed | 0x200l);
12537:          if(!(puzzle & 0x800c01800ll))
12538:            altDoSolve(12, 0x1000ll, puzzle | 0x800c01800ll,
12539:                    partsUsed | 0x200l);
12540:          if(!(puzzle & 0x1800c00800ll))
12541:            altDoSolve(12, 0x1000ll, puzzle | 0x1800c00800ll,
12542:                    partsUsed | 0x200l);
12543:          if(!(puzzle & 0xc01800800ll))
12544:            altDoSolve(12, 0x1000ll, puzzle | 0xc01800800ll,
12545:                    partsUsed | 0x200l);
12546:       }
12547:       if(!(puzzle & 0x401c00800ll))
12548:         altDoSolve(12, 0x1000ll, puzzle | 0x401c00800ll,
12549:                    partsUsed | 0x200l);
12550:       if(!(puzzle & 0x1001c00800ll))
12551:         altDoSolve(12, 0x1000ll, puzzle | 0x1001c00800ll,
12552:                    partsUsed | 0x200l);
12553:     altpiece10at11:
12554:       if (partsUsed & 0x400l) goto altpiece11at11;
12555:       if (!(puzzle & 0x4800800ll)) {
12556:          if(!(puzzle & 0x804804800ll))
12557:            altDoSolve(12, 0x1000ll, puzzle | 0x804804800ll,
12558:                    partsUsed | 0x400l);
12559:          if(!(puzzle & 0x4804800800ll))
12560:            altDoSolve(12, 0x1000ll, puzzle | 0x4804800800ll,
12561:                    partsUsed | 0x400l);
12562:          if(!(puzzle & 0x4004804800ll))
12563:            altDoSolve(12, 0x1000ll, puzzle | 0x4004804800ll,
12564:                    partsUsed | 0x400l);
12565:       }
12566:       if (!(puzzle & 0x1800800ll)) {
12567:          if(!(puzzle & 0x1001801800ll))
12568:            altDoSolve(12, 0x1000ll, puzzle | 0x1001801800ll,
12569:                    partsUsed | 0x400l);
12570:          if(!(puzzle & 0x801801800ll))
12571:            altDoSolve(12, 0x1000ll, puzzle | 0x801801800ll,
12572:                    partsUsed | 0x400l);
12573:          if(!(puzzle & 0x1801800800ll))
12574:            altDoSolve(12, 0x1000ll, puzzle | 0x1801800800ll,
12575:                    partsUsed | 0x400l);
12576:       }
12577:       if(!(puzzle & 0x900900800ll))
12578:         altDoSolve(12, 0x1000ll, puzzle | 0x900900800ll,
12579:                    partsUsed | 0x400l);
12580:       if(!(puzzle & 0x4904800ll))
12581:         altDoSolve(12, 0x1000ll, puzzle | 0x4904800ll,
12582:                    partsUsed | 0x400l);
12583:       if(!(puzzle & 0xf800ll))
12584:         altDoSolve(12, 0x1000ll, puzzle | 0xf800ll,
12585:                    partsUsed | 0x400l);
12586:       if(!(puzzle & 0x1c01800ll))
12587:         altDoSolve(12, 0x1000ll, puzzle | 0x1c01800ll,
12588:                    partsUsed | 0x400l);
12589:       if(!(puzzle & 0xc00c00800ll))
12590:         altDoSolve(12, 0x1000ll, puzzle | 0xc00c00800ll,
12591:                    partsUsed | 0x400l);
12592:     altpiece11at11:
12593:     break;
12594:    case 12:
12595:       if (partsUsed & 0x2l) goto altpiece2at12;
12596:       if(!(puzzle & 0xc01801000ll))
12597:         altDoSolve(13, 0x2000ll, puzzle | 0xc01801000ll,
12598:                    partsUsed | 0x2l);
12599:       if(!(puzzle & 0x241201000ll))
12600:         altDoSolve(13, 0x2000ll, puzzle | 0x241201000ll,
12601:                    partsUsed | 0x2l);
12602:       if(!(puzzle & 0x201209000ll))
12603:         altDoSolve(13, 0x2000ll, puzzle | 0x201209000ll,
12604:                    partsUsed | 0x2l);
12605:     altpiece2at12:
12606:       if (partsUsed & 0x4l) goto altpiece3at12;
12607:       if (!(puzzle & 0x1001001000ll)) {
12608:          if(!(puzzle & 0x1001241000ll))
12609:            altDoSolve(13, 0x2000ll, puzzle | 0x1001241000ll,
12610:                    partsUsed | 0x4l);
12611:          if(!(puzzle & 0x9201001000ll))
12612:            altDoSolve(13, 0x2000ll, puzzle | 0x9201001000ll,
12613:                    partsUsed | 0x4l);
12614:          if(!(puzzle & 0x1001c01000ll))
12615:            altDoSolve(13, 0x2000ll, puzzle | 0x1001c01000ll,
12616:                    partsUsed | 0x4l);
12617:       }
12618:     altpiece3at12:
12619:       if (partsUsed & 0x8l) goto altpiece4at12;
12620:       if(!(puzzle & 0x401c01000ll))
12621:         altDoSolve(13, 0x2000ll, puzzle | 0x401c01000ll,
12622:                    partsUsed | 0x8l);
12623:       if(!(puzzle & 0x41241000ll))
12624:         altDoSolve(13, 0x2000ll, puzzle | 0x41241000ll,
12625:                    partsUsed | 0x8l);
12626:       if(!(puzzle & 0x1201009000ll))
12627:         altDoSolve(13, 0x2000ll, puzzle | 0x1201009000ll,
12628:                    partsUsed | 0x8l);
12629:     altpiece4at12:
12630:       if (partsUsed & 0x10l) goto altpiece5at12;
12631:       if (!(puzzle & 0x1001001001000ll)) {
12632:          if(!(puzzle & 0x1201001201000ll))
12633:            altDoSolve(13, 0x2000ll, puzzle | 0x1201001201000ll,
12634:                    partsUsed | 0x10l);
12635:          if(!(puzzle & 0x1801001801000ll))
12636:            altDoSolve(13, 0x2000ll, puzzle | 0x1801001801000ll,
12637:                    partsUsed | 0x10l);
12638:          if(!(puzzle & 0x9001009001000ll))
12639:            altDoSolve(13, 0x2000ll, puzzle | 0x9001009001000ll,
12640:                    partsUsed | 0x10l);
12641:          if(!(puzzle & 0x1009001009000ll))
12642:            altDoSolve(13, 0x2000ll, puzzle | 0x1009001009000ll,
12643:                    partsUsed | 0x10l);
12644:       }
12645:       if(!(puzzle & 0x8009008009000ll))
12646:         altDoSolve(13, 0x2000ll, puzzle | 0x8009008009000ll,
12647:                    partsUsed | 0x10l);
12648:     altpiece5at12:
12649:       if (partsUsed & 0x20l) goto altpiece6at12;
12650:       if (!(puzzle & 0x1001001001000ll)) {
12651:          if(!(puzzle & 0x1201001001000ll))
12652:            altDoSolve(13, 0x2000ll, puzzle | 0x1201001001000ll,
12653:                    partsUsed | 0x20l);
12654:          if(!(puzzle & 0x1801001001000ll))
12655:            altDoSolve(13, 0x2000ll, puzzle | 0x1801001001000ll,
12656:                    partsUsed | 0x20l);
12657:          if(!(puzzle & 0x1001001009000ll))
12658:            altDoSolve(13, 0x2000ll, puzzle | 0x1001001009000ll,
12659:                    partsUsed | 0x20l);
12660:          if(!(puzzle & 0x9001001001000ll))
12661:            altDoSolve(13, 0x2000ll, puzzle | 0x9001001001000ll,
12662:                    partsUsed | 0x20l);
12663:       }
12664:       if(!(puzzle & 0x8008008009000ll))
12665:         altDoSolve(13, 0x2000ll, puzzle | 0x8008008009000ll,
12666:                    partsUsed | 0x20l);
12667:     altpiece6at12:
12668:       if (partsUsed & 0x40l) goto altpiece7at12;
12669:       if (!(puzzle & 0x1001001001000ll)) {
12670:          if(!(puzzle & 0x1001201001000ll))
12671:            altDoSolve(13, 0x2000ll, puzzle | 0x1001201001000ll,
12672:                    partsUsed | 0x40l);
12673:          if(!(puzzle & 0x1001001801000ll))
12674:            altDoSolve(13, 0x2000ll, puzzle | 0x1001001801000ll,
12675:                    partsUsed | 0x40l);
12676:          if(!(puzzle & 0x1001801001000ll))
12677:            altDoSolve(13, 0x2000ll, puzzle | 0x1001801001000ll,
12678:                    partsUsed | 0x40l);
12679:          if(!(puzzle & 0x1001009001000ll))
12680:            altDoSolve(13, 0x2000ll, puzzle | 0x1001009001000ll,
12681:                    partsUsed | 0x40l);
12682:          if(!(puzzle & 0x1009001001000ll))
12683:            altDoSolve(13, 0x2000ll, puzzle | 0x1009001001000ll,
12684:                    partsUsed | 0x40l);
12685:       }
12686:       if(!(puzzle & 0x9241000ll))
12687:         altDoSolve(13, 0x2000ll, puzzle | 0x9241000ll,
12688:                    partsUsed | 0x40l);
12689:       if(!(puzzle & 0x1001001201000ll))
12690:         altDoSolve(13, 0x2000ll, puzzle | 0x1001001201000ll,
12691:                    partsUsed | 0x40l);
12692:     altpiece7at12:
12693:       if (partsUsed & 0x80l) goto altpiece8at12;
12694:       if(!(puzzle & 0x9001009000ll))
12695:         altDoSolve(13, 0x2000ll, puzzle | 0x9001009000ll,
12696:                    partsUsed | 0x80l);
12697:       if(!(puzzle & 0x9008009000ll))
12698:         altDoSolve(13, 0x2000ll, puzzle | 0x9008009000ll,
12699:                    partsUsed | 0x80l);
12700:     altpiece8at12:
12701:       if (partsUsed & 0x100l) goto altpiece9at12;
12702:       if(!(puzzle & 0x1901000ll))
12703:         altDoSolve(13, 0x2000ll, puzzle | 0x1901000ll,
12704:                    partsUsed | 0x100l);
12705:       if(!(puzzle & 0x1809000ll))
12706:         altDoSolve(13, 0x2000ll, puzzle | 0x1809000ll,
12707:                    partsUsed | 0x100l);
12708:       if(!(puzzle & 0x400d000ll))
12709:         altDoSolve(13, 0x2000ll, puzzle | 0x400d000ll,
12710:                    partsUsed | 0x100l);
12711:       if(!(puzzle & 0xd001000ll))
12712:         altDoSolve(13, 0x2000ll, puzzle | 0xd001000ll,
12713:                    partsUsed | 0x100l);
12714:     altpiece9at12:
12715:       if (partsUsed & 0x200l) goto altpiece10at12;
12716:       if (!(puzzle & 0x1201000ll)) {
12717:          if(!(puzzle & 0x201241000ll))
12718:            altDoSolve(13, 0x2000ll, puzzle | 0x201241000ll,
12719:                    partsUsed | 0x200l);
12720:          if(!(puzzle & 0x1001209000ll))
12721:            altDoSolve(13, 0x2000ll, puzzle | 0x1001209000ll,
12722:                    partsUsed | 0x200l);
12723:          if(!(puzzle & 0x8009201000ll))
12724:            altDoSolve(13, 0x2000ll, puzzle | 0x8009201000ll,
12725:                    partsUsed | 0x200l);
12726:          if(!(puzzle & 0x9001201000ll))
12727:            altDoSolve(13, 0x2000ll, puzzle | 0x9001201000ll,
12728:                    partsUsed | 0x200l);
12729:          if(!(puzzle & 0x209201000ll))
12730:            altDoSolve(13, 0x2000ll, puzzle | 0x209201000ll,
12731:                    partsUsed | 0x200l);
12732:       }
12733:       if(!(puzzle & 0x1209001000ll))
12734:         altDoSolve(13, 0x2000ll, puzzle | 0x1209001000ll,
12735:                    partsUsed | 0x200l);
12736:       if(!(puzzle & 0x801c01000ll))
12737:         altDoSolve(13, 0x2000ll, puzzle | 0x801c01000ll,
12738:                    partsUsed | 0x200l);
12739:     altpiece10at12:
12740:       if (partsUsed & 0x400l) goto altpiece11at12;
12741:       if (!(puzzle & 0x1001001000ll)) {
12742:          if(!(puzzle & 0x1801801000ll))
12743:            altDoSolve(13, 0x2000ll, puzzle | 0x1801801000ll,
12744:                    partsUsed | 0x400l);
12745:          if(!(puzzle & 0x1009009000ll))
12746:            altDoSolve(13, 0x2000ll, puzzle | 0x1009009000ll,
12747:                    partsUsed | 0x400l);
12748:          if(!(puzzle & 0x9009001000ll))
12749:            altDoSolve(13, 0x2000ll, puzzle | 0x9009001000ll,
12750:                    partsUsed | 0x400l);
12751:       }
12752:       if(!(puzzle & 0x1201201000ll))
12753:         altDoSolve(13, 0x2000ll, puzzle | 0x1201201000ll,
12754:                    partsUsed | 0x400l);
12755:       if(!(puzzle & 0x9209000ll))
12756:         altDoSolve(13, 0x2000ll, puzzle | 0x9209000ll,
12757:                    partsUsed | 0x400l);
12758:       if(!(puzzle & 0x8009009000ll))
12759:         altDoSolve(13, 0x2000ll, puzzle | 0x8009009000ll,
12760:                    partsUsed | 0x400l);
12761:     altpiece11at12:
12762:     break;
12763:    case 13:
12764:       if (partsUsed & 0x2l) goto altpiece2at13;
12765:       if(!(puzzle & 0x482402000ll))
12766:         altDoSolve(14, 0x4000ll, puzzle | 0x482402000ll,
12767:                    partsUsed | 0x2l);
12768:       if(!(puzzle & 0x800c006000ll))
12769:         altDoSolve(14, 0x4000ll, puzzle | 0x800c006000ll,
12770:                    partsUsed | 0x2l);
12771:       if(!(puzzle & 0xc006002000ll))
12772:         altDoSolve(14, 0x4000ll, puzzle | 0xc006002000ll,
12773:                    partsUsed | 0x2l);
12774:     altpiece2at13:
12775:       if (partsUsed & 0x4l) goto altpiece3at13;
12776:       if(!(puzzle & 0x400400e000ll))
12777:         altDoSolve(14, 0x4000ll, puzzle | 0x400400e000ll,
12778:                    partsUsed | 0x4l);
12779:       if(!(puzzle & 0x2002482000ll))
12780:         altDoSolve(14, 0x4000ll, puzzle | 0x2002482000ll,
12781:                    partsUsed | 0x4l);
12782:       if(!(puzzle & 0x200e002000ll))
12783:         altDoSolve(14, 0x4000ll, puzzle | 0x200e002000ll,
12784:                    partsUsed | 0x4l);
12785:     altpiece3at13:
12786:       if (partsUsed & 0x8l) goto altpiece4at13;
12787:       if(!(puzzle & 0x82482000ll))
12788:         altDoSolve(14, 0x4000ll, puzzle | 0x82482000ll,
12789:                    partsUsed | 0x8l);
12790:       if(!(puzzle & 0x800e002000ll))
12791:         altDoSolve(14, 0x4000ll, puzzle | 0x800e002000ll,
12792:                    partsUsed | 0x8l);
12793:       if(!(puzzle & 0xc004006000ll))
12794:         altDoSolve(14, 0x4000ll, puzzle | 0xc004006000ll,
12795:                    partsUsed | 0x8l);
12796:     altpiece4at13:
12797:       if (partsUsed & 0x10l) goto altpiece5at13;
12798:       if (!(puzzle & 0x2002002002000ll)) {
12799:          if(!(puzzle & 0x2402002402000ll))
12800:            altDoSolve(14, 0x4000ll, puzzle | 0x2402002402000ll,
12801:                    partsUsed | 0x10l);
12802:          if(!(puzzle & 0x6002006002000ll))
12803:            altDoSolve(14, 0x4000ll, puzzle | 0x6002006002000ll,
12804:                    partsUsed | 0x10l);
12805:          if(!(puzzle & 0x2006002006000ll))
12806:            altDoSolve(14, 0x4000ll, puzzle | 0x2006002006000ll,
12807:                    partsUsed | 0x10l);
12808:       }
12809:       if(!(puzzle & 0x4006004006000ll))
12810:         altDoSolve(14, 0x4000ll, puzzle | 0x4006004006000ll,
12811:                    partsUsed | 0x10l);
12812:     altpiece5at13:
12813:       if (partsUsed & 0x20l) goto altpiece6at13;
12814:       if (!(puzzle & 0x2002002002000ll)) {
12815:          if(!(puzzle & 0x2402002002000ll))
12816:            altDoSolve(14, 0x4000ll, puzzle | 0x2402002002000ll,
12817:                    partsUsed | 0x20l);
12818:          if(!(puzzle & 0x2002002006000ll))
12819:            altDoSolve(14, 0x4000ll, puzzle | 0x2002002006000ll,
12820:                    partsUsed | 0x20l);
12821:          if(!(puzzle & 0x6002002002000ll))
12822:            altDoSolve(14, 0x4000ll, puzzle | 0x6002002002000ll,
12823:                    partsUsed | 0x20l);
12824:       }
12825:       if(!(puzzle & 0x2492000ll))
12826:         altDoSolve(14, 0x4000ll, puzzle | 0x2492000ll,
12827:                    partsUsed | 0x20l);
12828:       if(!(puzzle & 0x4004004006000ll))
12829:         altDoSolve(14, 0x4000ll, puzzle | 0x4004004006000ll,
12830:                    partsUsed | 0x20l);
12831:     altpiece6at13:
12832:       if (partsUsed & 0x40l) goto altpiece7at13;
12833:       if (!(puzzle & 0x2002002002000ll)) {
12834:          if(!(puzzle & 0x2002402002000ll))
12835:            altDoSolve(14, 0x4000ll, puzzle | 0x2002402002000ll,
12836:                    partsUsed | 0x40l);
12837:          if(!(puzzle & 0x2002002402000ll))
12838:            altDoSolve(14, 0x4000ll, puzzle | 0x2002002402000ll,
12839:                    partsUsed | 0x40l);
12840:          if(!(puzzle & 0x2002006002000ll))
12841:            altDoSolve(14, 0x4000ll, puzzle | 0x2002006002000ll,
12842:                    partsUsed | 0x40l);
12843:          if(!(puzzle & 0x2006002002000ll))
12844:            altDoSolve(14, 0x4000ll, puzzle | 0x2006002002000ll,
12845:                    partsUsed | 0x40l);
12846:       }
12847:     altpiece7at13:
12848:       if (partsUsed & 0x80l) goto altpiece8at13;
12849:       if(!(puzzle & 0x6004006000ll))
12850:         altDoSolve(14, 0x4000ll, puzzle | 0x6004006000ll,
12851:                    partsUsed | 0x80l);
12852:       if(!(puzzle & 0x6002006000ll))
12853:         altDoSolve(14, 0x4000ll, puzzle | 0x6002006000ll,
12854:                    partsUsed | 0x80l);
12855:       if(!(puzzle & 0xe00a000ll))
12856:         altDoSolve(14, 0x4000ll, puzzle | 0xe00a000ll,
12857:                    partsUsed | 0x80l);
12858:       if(!(puzzle & 0xa00e000ll))
12859:         altDoSolve(14, 0x4000ll, puzzle | 0xa00e000ll,
12860:                    partsUsed | 0x80l);
12861:     altpiece8at13:
12862:       if (partsUsed & 0x100l) goto altpiece9at13;
12863:       if(!(puzzle & 0x4806000ll))
12864:         altDoSolve(14, 0x4000ll, puzzle | 0x4806000ll,
12865:                    partsUsed | 0x100l);
12866:       if(!(puzzle & 0x2c02000ll))
12867:         altDoSolve(14, 0x4000ll, puzzle | 0x2c02000ll,
12868:                    partsUsed | 0x100l);
12869:     altpiece9at13:
12870:       if (partsUsed & 0x200l) goto altpiece10at13;
12871:       if(!(puzzle & 0x402482000ll))
12872:         altDoSolve(14, 0x4000ll, puzzle | 0x402482000ll,
12873:                    partsUsed | 0x200l);
12874:       if(!(puzzle & 0x400c006000ll))
12875:         altDoSolve(14, 0x4000ll, puzzle | 0x400c006000ll,
12876:                    partsUsed | 0x200l);
12877:       if(!(puzzle & 0x400e002000ll))
12878:         altDoSolve(14, 0x4000ll, puzzle | 0x400e002000ll,
12879:                    partsUsed | 0x200l);
12880:     altpiece10at13:
12881:       if (partsUsed & 0x400l) goto altpiece11at13;
12882:       if (!(puzzle & 0x2002002000ll)) {
12883:          if(!(puzzle & 0x2402402000ll))
12884:            altDoSolve(14, 0x4000ll, puzzle | 0x2402402000ll,
12885:                    partsUsed | 0x400l);
12886:          if(!(puzzle & 0x2006006000ll))
12887:            altDoSolve(14, 0x4000ll, puzzle | 0x2006006000ll,
12888:                    partsUsed | 0x400l);
12889:          if(!(puzzle & 0x6006002000ll))
12890:            altDoSolve(14, 0x4000ll, puzzle | 0x6006002000ll,
12891:                    partsUsed | 0x400l);
12892:       }
12893:       if (!(puzzle & 0x4006000ll)) {
12894:          if(!(puzzle & 0x4006006000ll))
12895:            altDoSolve(14, 0x4000ll, puzzle | 0x4006006000ll,
12896:                    partsUsed | 0x400l);
12897:          if(!(puzzle & 0xe006000ll))
12898:            altDoSolve(14, 0x4000ll, puzzle | 0xe006000ll,
12899:                    partsUsed | 0x400l);
12900:          if(!(puzzle & 0x600e000ll))
12901:            altDoSolve(14, 0x4000ll, puzzle | 0x600e000ll,
12902:                    partsUsed | 0x400l);
12903:          if(!(puzzle & 0xc00e000ll))
12904:            altDoSolve(14, 0x4000ll, puzzle | 0xc00e000ll,
12905:                    partsUsed | 0x400l);
12906:       }
12907:     altpiece11at13:
12908:     break;
12909:    case 14:
12910:       if (partsUsed & 0x2l) goto altpiece2at14;
12911:       if(!(puzzle & 0x904804000ll))
12912:         altDoSolve(15, 0x8000ll, puzzle | 0x904804000ll,
12913:                    partsUsed | 0x2l);
12914:       if(!(puzzle & 0x200600c000ll))
12915:         altDoSolve(15, 0x8000ll, puzzle | 0x200600c000ll,
12916:                    partsUsed | 0x2l);
12917:     altpiece2at14:
12918:       if (partsUsed & 0x4l) goto altpiece3at14;
12919:       if(!(puzzle & 0x4004904000ll))
12920:         altDoSolve(15, 0x8000ll, puzzle | 0x4004904000ll,
12921:                    partsUsed | 0x4l);
12922:       if(!(puzzle & 0xe004004000ll))
12923:         altDoSolve(15, 0x8000ll, puzzle | 0xe004004000ll,
12924:                    partsUsed | 0x4l);
12925:     altpiece3at14:
12926:       if (partsUsed & 0x8l) goto altpiece4at14;
12927:       if(!(puzzle & 0x104904000ll))
12928:         altDoSolve(15, 0x8000ll, puzzle | 0x104904000ll,
12929:                    partsUsed | 0x8l);
12930:       if(!(puzzle & 0x600400c000ll))
12931:         altDoSolve(15, 0x8000ll, puzzle | 0x600400c000ll,
12932:                    partsUsed | 0x8l);
12933:     altpiece4at14:
12934:       if (partsUsed & 0x10l) goto altpiece5at14;
12935:       if (!(puzzle & 0x4004004004000ll)) {
12936:          if(!(puzzle & 0x4804004804000ll))
12937:            altDoSolve(15, 0x8000ll, puzzle | 0x4804004804000ll,
12938:                    partsUsed | 0x10l);
12939:          if(!(puzzle & 0x6004006004000ll))
12940:            altDoSolve(15, 0x8000ll, puzzle | 0x6004006004000ll,
12941:                    partsUsed | 0x10l);
12942:          if(!(puzzle & 0xc00400c004000ll))
12943:            altDoSolve(15, 0x8000ll, puzzle | 0xc00400c004000ll,
12944:                    partsUsed | 0x10l);
12945:          if(!(puzzle & 0x400c00400c000ll))
12946:            altDoSolve(15, 0x8000ll, puzzle | 0x400c00400c000ll,
12947:                    partsUsed | 0x10l);
12948:       }
12949:       if(!(puzzle & 0x800c00800c000ll))
12950:         altDoSolve(15, 0x8000ll, puzzle | 0x800c00800c000ll,
12951:                    partsUsed | 0x10l);
12952:     altpiece5at14:
12953:       if (partsUsed & 0x20l) goto altpiece6at14;
12954:       if (!(puzzle & 0x4004004004000ll)) {
12955:          if(!(puzzle & 0x4804004004000ll))
12956:            altDoSolve(15, 0x8000ll, puzzle | 0x4804004004000ll,
12957:                    partsUsed | 0x20l);
12958:          if(!(puzzle & 0x6004004004000ll))
12959:            altDoSolve(15, 0x8000ll, puzzle | 0x6004004004000ll,
12960:                    partsUsed | 0x20l);
12961:          if(!(puzzle & 0x400400400c000ll))
12962:            altDoSolve(15, 0x8000ll, puzzle | 0x400400400c000ll,
12963:                    partsUsed | 0x20l);
12964:          if(!(puzzle & 0xc004004004000ll))
12965:            altDoSolve(15, 0x8000ll, puzzle | 0xc004004004000ll,
12966:                    partsUsed | 0x20l);
12967:       }
12968:       if(!(puzzle & 0x4924000ll))
12969:         altDoSolve(15, 0x8000ll, puzzle | 0x4924000ll,
12970:                    partsUsed | 0x20l);
12971:       if(!(puzzle & 0x800800800c000ll))
12972:         altDoSolve(15, 0x8000ll, puzzle | 0x800800800c000ll,
12973:                    partsUsed | 0x20l);
12974:     altpiece6at14:
12975:       if (partsUsed & 0x40l) goto altpiece7at14;
12976:       if (!(puzzle & 0x4004004004000ll)) {
12977:          if(!(puzzle & 0x4004804004000ll))
12978:            altDoSolve(15, 0x8000ll, puzzle | 0x4004804004000ll,
12979:                    partsUsed | 0x40l);
12980:          if(!(puzzle & 0x4004004804000ll))
12981:            altDoSolve(15, 0x8000ll, puzzle | 0x4004004804000ll,
12982:                    partsUsed | 0x40l);
12983:          if(!(puzzle & 0x4004006004000ll))
12984:            altDoSolve(15, 0x8000ll, puzzle | 0x4004006004000ll,
12985:                    partsUsed | 0x40l);
12986:          if(!(puzzle & 0x4006004004000ll))
12987:            altDoSolve(15, 0x8000ll, puzzle | 0x4006004004000ll,
12988:                    partsUsed | 0x40l);
12989:          if(!(puzzle & 0x400400c004000ll))
12990:            altDoSolve(15, 0x8000ll, puzzle | 0x400400c004000ll,
12991:                    partsUsed | 0x40l);
12992:          if(!(puzzle & 0x400c004004000ll))
12993:            altDoSolve(15, 0x8000ll, puzzle | 0x400c004004000ll,
12994:                    partsUsed | 0x40l);
12995:       }
12996:     altpiece7at14:
12997:       if (partsUsed & 0x80l) goto altpiece8at14;
12998:       if(!(puzzle & 0xc00800c000ll))
12999:         altDoSolve(15, 0x8000ll, puzzle | 0xc00800c000ll,
13000:                    partsUsed | 0x80l);
13001:       if(!(puzzle & 0xc00400c000ll))
13002:         altDoSolve(15, 0x8000ll, puzzle | 0xc00400c000ll,
13003:                    partsUsed | 0x80l);
13004:     altpiece8at14:
13005:       if (partsUsed & 0x100l) goto altpiece9at14;
13006:       if(!(puzzle & 0x5804000ll))
13007:         altDoSolve(15, 0x8000ll, puzzle | 0x5804000ll,
13008:                    partsUsed | 0x100l);
13009:       if(!(puzzle & 0x6404000ll))
13010:         altDoSolve(15, 0x8000ll, puzzle | 0x6404000ll,
13011:                    partsUsed | 0x100l);
13012:       if(!(puzzle & 0x900c000ll))
13013:         altDoSolve(15, 0x8000ll, puzzle | 0x900c000ll,
13014:                    partsUsed | 0x100l);
13015:     altpiece9at14:
13016:       if (partsUsed & 0x200l) goto altpiece10at14;
13017:       if (!(puzzle & 0x4004004000ll)) {
13018:          if(!(puzzle & 0x400600c000ll))
13019:            altDoSolve(15, 0x8000ll, puzzle | 0x400600c000ll,
13020:                    partsUsed | 0x200l);
13021:          if(!(puzzle & 0xc006004000ll))
13022:            altDoSolve(15, 0x8000ll, puzzle | 0xc006004000ll,
13023:                    partsUsed | 0x200l);
13024:          if(!(puzzle & 0x600c004000ll))
13025:            altDoSolve(15, 0x8000ll, puzzle | 0x600c004000ll,
13026:                    partsUsed | 0x200l);
13027:       }
13028:       if(!(puzzle & 0x804904000ll))
13029:         altDoSolve(15, 0x8000ll, puzzle | 0x804904000ll,
13030:                    partsUsed | 0x200l);
13031:       if(!(puzzle & 0x200e004000ll))
13032:         altDoSolve(15, 0x8000ll, puzzle | 0x200e004000ll,
13033:                    partsUsed | 0x200l);
13034:       if(!(puzzle & 0x800e004000ll))
13035:         altDoSolve(15, 0x8000ll, puzzle | 0x800e004000ll,
13036:                    partsUsed | 0x200l);
13037:     altpiece10at14:
13038:       if (partsUsed & 0x400l) goto altpiece11at14;
13039:       if (!(puzzle & 0x4004004000ll)) {
13040:          if(!(puzzle & 0x4804804000ll))
13041:            altDoSolve(15, 0x8000ll, puzzle | 0x4804804000ll,
13042:                    partsUsed | 0x400l);
13043:          if(!(puzzle & 0x6006004000ll))
13044:            altDoSolve(15, 0x8000ll, puzzle | 0x6006004000ll,
13045:                    partsUsed | 0x400l);
13046:          if(!(puzzle & 0x400c00c000ll))
13047:            altDoSolve(15, 0x8000ll, puzzle | 0x400c00c000ll,
13048:                    partsUsed | 0x400l);
13049:          if(!(puzzle & 0xc00c004000ll))
13050:            altDoSolve(15, 0x8000ll, puzzle | 0xc00c004000ll,
13051:                    partsUsed | 0x400l);
13052:       }
13053:       if(!(puzzle & 0xe00c000ll))
13054:         altDoSolve(15, 0x8000ll, puzzle | 0xe00c000ll,
13055:                    partsUsed | 0x400l);
13056:       if(!(puzzle & 0x800c00c000ll))
13057:         altDoSolve(15, 0x8000ll, puzzle | 0x800c00c000ll,
13058:                    partsUsed | 0x400l);
13059:     altpiece11at14:
13060:     break;
13061:    case 15:
13062:       if (partsUsed & 0x2l) goto altpiece2at15;
13063:       if(!(puzzle & 0x1209008000ll))
13064:         altDoSolve(16, 0x10000ll, puzzle | 0x1209008000ll,
13065:                    partsUsed | 0x2l);
13066:       if(!(puzzle & 0x600c008000ll))
13067:         altDoSolve(16, 0x10000ll, puzzle | 0x600c008000ll,
13068:                    partsUsed | 0x2l);
13069:     altpiece2at15:
13070:       if (partsUsed & 0x4l) goto altpiece3at15;
13071:       if(!(puzzle & 0x8009208000ll))
13072:         altDoSolve(16, 0x10000ll, puzzle | 0x8009208000ll,
13073:                    partsUsed | 0x4l);
13074:       if(!(puzzle & 0x800e008000ll))
13075:         altDoSolve(16, 0x10000ll, puzzle | 0x800e008000ll,
13076:                    partsUsed | 0x4l);
13077:     altpiece3at15:
13078:       if (partsUsed & 0x8l) goto altpiece4at15;
13079:       if(!(puzzle & 0x209208000ll))
13080:         altDoSolve(16, 0x10000ll, puzzle | 0x209208000ll,
13081:                    partsUsed | 0x8l);
13082:       if(!(puzzle & 0x200e008000ll))
13083:         altDoSolve(16, 0x10000ll, puzzle | 0x200e008000ll,
13084:                    partsUsed | 0x8l);
13085:     altpiece4at15:
13086:       if (partsUsed & 0x10l) goto altpiece5at15;
13087:       if(!(puzzle & 0x9008009008000ll))
13088:         altDoSolve(16, 0x10000ll, puzzle | 0x9008009008000ll,
13089:                    partsUsed | 0x10l);
13090:       if(!(puzzle & 0xc00800c008000ll))
13091:         altDoSolve(16, 0x10000ll, puzzle | 0xc00800c008000ll,
13092:                    partsUsed | 0x10l);
13093:     altpiece5at15:
13094:       if (partsUsed & 0x20l) goto altpiece6at15;
13095:       if(!(puzzle & 0x9248000ll))
13096:         altDoSolve(16, 0x10000ll, puzzle | 0x9248000ll,
13097:                    partsUsed | 0x20l);
13098:       if(!(puzzle & 0x9008008008000ll))
13099:         altDoSolve(16, 0x10000ll, puzzle | 0x9008008008000ll,
13100:                    partsUsed | 0x20l);
13101:       if(!(puzzle & 0xc008008008000ll))
13102:         altDoSolve(16, 0x10000ll, puzzle | 0xc008008008000ll,
13103:                    partsUsed | 0x20l);
13104:     altpiece6at15:
13105:       if (partsUsed & 0x40l) goto altpiece7at15;
13106:       if (!(puzzle & 0x8008008008000ll)) {
13107:          if(!(puzzle & 0x8009008008000ll))
13108:            altDoSolve(16, 0x10000ll, puzzle | 0x8009008008000ll,
13109:                    partsUsed | 0x40l);
13110:          if(!(puzzle & 0x8008009008000ll))
13111:            altDoSolve(16, 0x10000ll, puzzle | 0x8008009008000ll,
13112:                    partsUsed | 0x40l);
13113:          if(!(puzzle & 0x800800c008000ll))
13114:            altDoSolve(16, 0x10000ll, puzzle | 0x800800c008000ll,
13115:                    partsUsed | 0x40l);
13116:          if(!(puzzle & 0x800c008008000ll))
13117:            altDoSolve(16, 0x10000ll, puzzle | 0x800c008008000ll,
13118:                    partsUsed | 0x40l);
13119:       }
13120:     altpiece7at15:
13121:       if (partsUsed & 0x100l) goto altpiece9at15;
13122:       if(!(puzzle & 0xc808000ll))
13123:         altDoSolve(16, 0x10000ll, puzzle | 0xc808000ll,
13124:                    partsUsed | 0x100l);
13125:     altpiece9at15:
13126:       if (partsUsed & 0x200l) goto altpiece10at15;
13127:       if(!(puzzle & 0x1009208000ll))
13128:         altDoSolve(16, 0x10000ll, puzzle | 0x1009208000ll,
13129:                    partsUsed | 0x200l);
13130:       if(!(puzzle & 0x400e008000ll))
13131:         altDoSolve(16, 0x10000ll, puzzle | 0x400e008000ll,
13132:                    partsUsed | 0x200l);
13133:     altpiece10at15:
13134:       if (partsUsed & 0x400l) goto altpiece11at15;
13135:       if(!(puzzle & 0x9009008000ll))
13136:         altDoSolve(16, 0x10000ll, puzzle | 0x9009008000ll,
13137:                    partsUsed | 0x400l);
13138:       if(!(puzzle & 0xc00c008000ll))
13139:         altDoSolve(16, 0x10000ll, puzzle | 0xc00c008000ll,
13140:                    partsUsed | 0x400l);
13141:     altpiece11at15:
13142:     break;
13143:    case 16:
13144:       if (partsUsed & 0x2l) goto altpiece2at16;
13145:       if(!(puzzle & 0x480090010000ll))
13146:         altDoSolve(17, 0x20000ll, puzzle | 0x480090010000ll,
13147:                    partsUsed | 0x2l);
13148:       if(!(puzzle & 0x400480090000ll))
13149:         altDoSolve(17, 0x20000ll, puzzle | 0x400480090000ll,
13150:                    partsUsed | 0x2l);
13151:       if(!(puzzle & 0x1330000ll))
13152:         altDoSolve(17, 0x20000ll, puzzle | 0x1330000ll,
13153:                    partsUsed | 0x2l);
13154:       if(!(puzzle & 0x1990000ll))
13155:         altDoSolve(17, 0x20000ll, puzzle | 0x1990000ll,
13156:                    partsUsed | 0x2l);
13157:       if(!(puzzle & 0x40060030000ll))
13158:         altDoSolve(17, 0x20000ll, puzzle | 0x40060030000ll,
13159:                    partsUsed | 0x2l);
13160:       if(!(puzzle & 0x60030010000ll))
13161:         altDoSolve(17, 0x20000ll, puzzle | 0x60030010000ll,
13162:                    partsUsed | 0x2l);
13163:     altpiece2at16:
13164:       if (partsUsed & 0x4l) goto altpiece3at16;
13165:       if(!(puzzle & 0x10490010000ll))
13166:         altDoSolve(17, 0x20000ll, puzzle | 0x10490010000ll,
13167:                    partsUsed | 0x4l);
13168:       if(!(puzzle & 0x10070010000ll))
13169:         altDoSolve(17, 0x20000ll, puzzle | 0x10070010000ll,
13170:                    partsUsed | 0x4l);
13171:       if(!(puzzle & 0x80080490000ll))
13172:         altDoSolve(17, 0x20000ll, puzzle | 0x80080490000ll,
13173:                    partsUsed | 0x4l);
13174:       if(!(puzzle & 0x790000ll))
13175:         altDoSolve(17, 0x20000ll, puzzle | 0x790000ll,
13176:                    partsUsed | 0x4l);
13177:       if(!(puzzle & 0x970000ll))
13178:         altDoSolve(17, 0x20000ll, puzzle | 0x970000ll,
13179:                    partsUsed | 0x4l);
13180:       if(!(puzzle & 0x20020070000ll))
13181:         altDoSolve(17, 0x20000ll, puzzle | 0x20020070000ll,
13182:                    partsUsed | 0x4l);
13183:     altpiece3at16:
13184:       if (partsUsed & 0x8l) goto altpiece4at16;
13185:       if(!(puzzle & 0x400490010000ll))
13186:         altDoSolve(17, 0x20000ll, puzzle | 0x400490010000ll,
13187:                    partsUsed | 0x8l);
13188:       if(!(puzzle & 0x480080090000ll))
13189:         altDoSolve(17, 0x20000ll, puzzle | 0x480080090000ll,
13190:                    partsUsed | 0x8l);
13191:       if(!(puzzle & 0x1930000ll))
13192:         altDoSolve(17, 0x20000ll, puzzle | 0x1930000ll,
13193:                    partsUsed | 0x8l);
13194:       if(!(puzzle & 0x1390000ll))
13195:         altDoSolve(17, 0x20000ll, puzzle | 0x1390000ll,
13196:                    partsUsed | 0x8l);
13197:       if(!(puzzle & 0x40070010000ll))
13198:         altDoSolve(17, 0x20000ll, puzzle | 0x40070010000ll,
13199:                    partsUsed | 0x8l);
13200:       if(!(puzzle & 0x60020030000ll))
13201:         altDoSolve(17, 0x20000ll, puzzle | 0x60020030000ll,
13202:                    partsUsed | 0x8l);
13203:     altpiece4at16:
13204:       if (partsUsed & 0x10l) goto altpiece5at16;
13205:       if (!(puzzle & 0x2490000ll)) {
13206:          if(!(puzzle & 0x6590000ll))
13207:            altDoSolve(17, 0x20000ll, puzzle | 0x6590000ll,
13208:                    partsUsed | 0x10l);
13209:          if(!(puzzle & 0x2082490000ll))
13210:            altDoSolve(17, 0x20000ll, puzzle | 0x2082490000ll,
13211:                    partsUsed | 0x10l);
13212:          if(!(puzzle & 0x2cb0000ll))
13213:            altDoSolve(17, 0x20000ll, puzzle | 0x2cb0000ll,
13214:                    partsUsed | 0x10l);
13215:       }
13216:       if(!(puzzle & 0x90010090010000ll))
13217:         altDoSolve(17, 0x20000ll, puzzle | 0x90010090010000ll,
13218:                    partsUsed | 0x10l);
13219:       if(!(puzzle & 0x80090080090000ll))
13220:         altDoSolve(17, 0x20000ll, puzzle | 0x80090080090000ll,
13221:                    partsUsed | 0x10l);
13222:       if(!(puzzle & 0x412490000ll))
13223:         altDoSolve(17, 0x20000ll, puzzle | 0x412490000ll,
13224:                    partsUsed | 0x10l);
13225:       if(!(puzzle & 0x10090010090000ll))
13226:         altDoSolve(17, 0x20000ll, puzzle | 0x10090010090000ll,
13227:                    partsUsed | 0x10l);
13228:       if(!(puzzle & 0x4d30000ll))
13229:         altDoSolve(17, 0x20000ll, puzzle | 0x4d30000ll,
13230:                    partsUsed | 0x10l);
13231:       if(!(puzzle & 0x2490410000ll))
13232:         altDoSolve(17, 0x20000ll, puzzle | 0x2490410000ll,
13233:                    partsUsed | 0x10l);
13234:       if(!(puzzle & 0x30010030010000ll))
13235:         altDoSolve(17, 0x20000ll, puzzle | 0x30010030010000ll,
13236:                    partsUsed | 0x10l);
13237:       if(!(puzzle & 0x10030010030000ll))
13238:         altDoSolve(17, 0x20000ll, puzzle | 0x10030010030000ll,
13239:                    partsUsed | 0x10l);
13240:       if(!(puzzle & 0x20030020030000ll))
13241:         altDoSolve(17, 0x20000ll, puzzle | 0x20030020030000ll,
13242:                    partsUsed | 0x10l);
13243:     altpiece5at16:
13244:       if (partsUsed & 0x20l) goto altpiece6at16;
13245:       if (!(puzzle & 0x10010010010000ll)) {
13246:          if(!(puzzle & 0x10010010090000ll))
13247:            altDoSolve(17, 0x20000ll, puzzle | 0x10010010090000ll,
13248:                    partsUsed | 0x20l);
13249:          if(!(puzzle & 0x90010010010000ll))
13250:            altDoSolve(17, 0x20000ll, puzzle | 0x90010010010000ll,
13251:                    partsUsed | 0x20l);
13252:          if(!(puzzle & 0x10010010030000ll))
13253:            altDoSolve(17, 0x20000ll, puzzle | 0x10010010030000ll,
13254:                    partsUsed | 0x20l);
13255:          if(!(puzzle & 0x30010010010000ll))
13256:            altDoSolve(17, 0x20000ll, puzzle | 0x30010010010000ll,
13257:                    partsUsed | 0x20l);
13258:       }
13259:       if (!(puzzle & 0x2490000ll)) {
13260:          if(!(puzzle & 0x2002490000ll))
13261:            altDoSolve(17, 0x20000ll, puzzle | 0x2002490000ll,
13262:                    partsUsed | 0x20l);
13263:          if(!(puzzle & 0x24b0000ll))
13264:            altDoSolve(17, 0x20000ll, puzzle | 0x24b0000ll,
13265:                    partsUsed | 0x20l);
13266:          if(!(puzzle & 0x12490000ll))
13267:            altDoSolve(17, 0x20000ll, puzzle | 0x12490000ll,
13268:                    partsUsed | 0x20l);
13269:          if(!(puzzle & 0x6490000ll))
13270:            altDoSolve(17, 0x20000ll, puzzle | 0x6490000ll,
13271:                    partsUsed | 0x20l);
13272:       }
13273:       if(!(puzzle & 0x2490010000ll))
13274:         altDoSolve(17, 0x20000ll, puzzle | 0x2490010000ll,
13275:                    partsUsed | 0x20l);
13276:       if(!(puzzle & 0x4930000ll))
13277:         altDoSolve(17, 0x20000ll, puzzle | 0x4930000ll,
13278:                    partsUsed | 0x20l);
13279:       if(!(puzzle & 0x80080080090000ll))
13280:         altDoSolve(17, 0x20000ll, puzzle | 0x80080080090000ll,
13281:                    partsUsed | 0x20l);
13282:       if(!(puzzle & 0x20020020030000ll))
13283:         altDoSolve(17, 0x20000ll, puzzle | 0x20020020030000ll,
13284:                    partsUsed | 0x20l);
13285:     altpiece6at16:
13286:       if (partsUsed & 0x40l) goto altpiece7at16;
13287:       if (!(puzzle & 0x10010010010000ll)) {
13288:          if(!(puzzle & 0x10010090010000ll))
13289:            altDoSolve(17, 0x20000ll, puzzle | 0x10010090010000ll,
13290:                    partsUsed | 0x40l);
13291:          if(!(puzzle & 0x10090010010000ll))
13292:            altDoSolve(17, 0x20000ll, puzzle | 0x10090010010000ll,
13293:                    partsUsed | 0x40l);
13294:          if(!(puzzle & 0x10010030010000ll))
13295:            altDoSolve(17, 0x20000ll, puzzle | 0x10010030010000ll,
13296:                    partsUsed | 0x40l);
13297:          if(!(puzzle & 0x10030010010000ll))
13298:            altDoSolve(17, 0x20000ll, puzzle | 0x10030010010000ll,
13299:                    partsUsed | 0x40l);
13300:       }
13301:       if (!(puzzle & 0x2490000ll)) {
13302:          if(!(puzzle & 0x402490000ll))
13303:            altDoSolve(17, 0x20000ll, puzzle | 0x402490000ll,
13304:                    partsUsed | 0x40l);
13305:          if(!(puzzle & 0x2590000ll))
13306:            altDoSolve(17, 0x20000ll, puzzle | 0x2590000ll,
13307:                    partsUsed | 0x40l);
13308:          if(!(puzzle & 0x82490000ll))
13309:            altDoSolve(17, 0x20000ll, puzzle | 0x82490000ll,
13310:                    partsUsed | 0x40l);
13311:          if(!(puzzle & 0x2c90000ll))
13312:            altDoSolve(17, 0x20000ll, puzzle | 0x2c90000ll,
13313:                    partsUsed | 0x40l);
13314:       }
13315:     altpiece7at16:
13316:       if (partsUsed & 0x80l) goto altpiece8at16;
13317:       if(!(puzzle & 0x90010090000ll))
13318:         altDoSolve(17, 0x20000ll, puzzle | 0x90010090000ll,
13319:                    partsUsed | 0x80l);
13320:       if(!(puzzle & 0x90080090000ll))
13321:         altDoSolve(17, 0x20000ll, puzzle | 0x90080090000ll,
13322:                    partsUsed | 0x80l);
13323:       if(!(puzzle & 0x490410000ll))
13324:         altDoSolve(17, 0x20000ll, puzzle | 0x490410000ll,
13325:                    partsUsed | 0x80l);
13326:       if(!(puzzle & 0x410490000ll))
13327:         altDoSolve(17, 0x20000ll, puzzle | 0x410490000ll,
13328:                    partsUsed | 0x80l);
13329:       if(!(puzzle & 0x2f0000ll))
13330:         altDoSolve(17, 0x20000ll, puzzle | 0x2f0000ll,
13331:                    partsUsed | 0x80l);
13332:       if(!(puzzle & 0xcb0000ll))
13333:         altDoSolve(17, 0x20000ll, puzzle | 0xcb0000ll,
13334:                    partsUsed | 0x80l);
13335:       if(!(puzzle & 0xd30000ll))
13336:         altDoSolve(17, 0x20000ll, puzzle | 0xd30000ll,
13337:                    partsUsed | 0x80l);
13338:       if(!(puzzle & 0x3d0000ll))
13339:         altDoSolve(17, 0x20000ll, puzzle | 0x3d0000ll,
13340:                    partsUsed | 0x80l);
13341:       if(!(puzzle & 0x30020030000ll))
13342:         altDoSolve(17, 0x20000ll, puzzle | 0x30020030000ll,
13343:                    partsUsed | 0x80l);
13344:       if(!(puzzle & 0x30010030000ll))
13345:         altDoSolve(17, 0x20000ll, puzzle | 0x30010030000ll,
13346:                    partsUsed | 0x80l);
13347:       if(!(puzzle & 0x70050000ll))
13348:         altDoSolve(17, 0x20000ll, puzzle | 0x70050000ll,
13349:                    partsUsed | 0x80l);
13350:       if(!(puzzle & 0x50070000ll))
13351:         altDoSolve(17, 0x20000ll, puzzle | 0x50070000ll,
13352:                    partsUsed | 0x80l);
13353:     altpiece8at16:
13354:       if (partsUsed & 0x100l) goto altpiece9at16;
13355:       if(!(puzzle & 0x100130000ll))
13356:         altDoSolve(17, 0x20000ll, puzzle | 0x100130000ll,
13357:                    partsUsed | 0x100l);
13358:       if(!(puzzle & 0x130010000ll))
13359:         altDoSolve(17, 0x20000ll, puzzle | 0x130010000ll,
13360:                    partsUsed | 0x100l);
13361:       if(!(puzzle & 0x200b0000ll))
13362:         altDoSolve(17, 0x20000ll, puzzle | 0x200b0000ll,
13363:                    partsUsed | 0x100l);
13364:       if(!(puzzle & 0x90030000ll))
13365:         altDoSolve(17, 0x20000ll, puzzle | 0x90030000ll,
13366:                    partsUsed | 0x100l);
13367:       if(!(puzzle & 0x180090000ll))
13368:         altDoSolve(17, 0x20000ll, puzzle | 0x180090000ll,
13369:                    partsUsed | 0x100l);
13370:       if(!(puzzle & 0x10190000ll))
13371:         altDoSolve(17, 0x20000ll, puzzle | 0x10190000ll,
13372:                    partsUsed | 0x100l);
13373:     altpiece9at16:
13374:       if (partsUsed & 0x200l) goto altpiece10at16;
13375:       if(!(puzzle & 0x80490010000ll))
13376:         altDoSolve(17, 0x20000ll, puzzle | 0x80490010000ll,
13377:                    partsUsed | 0x200l);
13378:       if(!(puzzle & 0x80480090000ll))
13379:         altDoSolve(17, 0x20000ll, puzzle | 0x80480090000ll,
13380:                    partsUsed | 0x200l);
13381:       if(!(puzzle & 0xb30000ll))
13382:         altDoSolve(17, 0x20000ll, puzzle | 0xb30000ll,
13383:                    partsUsed | 0x200l);
13384:       if(!(puzzle & 0xb90000ll))
13385:         altDoSolve(17, 0x20000ll, puzzle | 0xb90000ll,
13386:                    partsUsed | 0x200l);
13387:       if(!(puzzle & 0x20060030000ll))
13388:         altDoSolve(17, 0x20000ll, puzzle | 0x20060030000ll,
13389:                    partsUsed | 0x200l);
13390:       if(!(puzzle & 0x20070010000ll))
13391:         altDoSolve(17, 0x20000ll, puzzle | 0x20070010000ll,
13392:                    partsUsed | 0x200l);
13393:     altpiece10at16:
13394:       if (partsUsed & 0x400l) goto altpiece11at16;
13395:       if (!(puzzle & 0x80090000ll)) {
13396:          if(!(puzzle & 0x10090090000ll))
13397:            altDoSolve(17, 0x20000ll, puzzle | 0x10090090000ll,
13398:                    partsUsed | 0x400l);
13399:          if(!(puzzle & 0x490090000ll))
13400:            altDoSolve(17, 0x20000ll, puzzle | 0x490090000ll,
13401:                    partsUsed | 0x400l);
13402:          if(!(puzzle & 0x480490000ll))
13403:            altDoSolve(17, 0x20000ll, puzzle | 0x480490000ll,
13404:                    partsUsed | 0x400l);
13405:          if(!(puzzle & 0x90490000ll))
13406:            altDoSolve(17, 0x20000ll, puzzle | 0x90490000ll,
13407:                    partsUsed | 0x400l);
13408:          if(!(puzzle & 0x80090090000ll))
13409:            altDoSolve(17, 0x20000ll, puzzle | 0x80090090000ll,
13410:                    partsUsed | 0x400l);
13411:       }
13412:       if (!(puzzle & 0x130000ll)) {
13413:          if(!(puzzle & 0x370000ll))
13414:            altDoSolve(17, 0x20000ll, puzzle | 0x370000ll,
13415:                    partsUsed | 0x400l);
13416:          if(!(puzzle & 0x1f0000ll))
13417:            altDoSolve(17, 0x20000ll, puzzle | 0x1f0000ll,
13418:                    partsUsed | 0x400l);
13419:          if(!(puzzle & 0x5b0000ll))
13420:            altDoSolve(17, 0x20000ll, puzzle | 0x5b0000ll,
13421:                    partsUsed | 0x400l);
13422:          if(!(puzzle & 0x9b0000ll))
13423:            altDoSolve(17, 0x20000ll, puzzle | 0x9b0000ll,
13424:                    partsUsed | 0x400l);
13425:          if(!(puzzle & 0x3b0000ll))
13426:            altDoSolve(17, 0x20000ll, puzzle | 0x3b0000ll,
13427:                    partsUsed | 0x400l);
13428:       }
13429:       if (!(puzzle & 0x10010010000ll)) {
13430:          if(!(puzzle & 0x90090010000ll))
13431:            altDoSolve(17, 0x20000ll, puzzle | 0x90090010000ll,
13432:                    partsUsed | 0x400l);
13433:          if(!(puzzle & 0x10030030000ll))
13434:            altDoSolve(17, 0x20000ll, puzzle | 0x10030030000ll,
13435:                    partsUsed | 0x400l);
13436:          if(!(puzzle & 0x30030010000ll))
13437:            altDoSolve(17, 0x20000ll, puzzle | 0x30030010000ll,
13438:                    partsUsed | 0x400l);
13439:       }
13440:       if (!(puzzle & 0x20030000ll)) {
13441:          if(!(puzzle & 0x20030030000ll))
13442:            altDoSolve(17, 0x20000ll, puzzle | 0x20030030000ll,
13443:                    partsUsed | 0x400l);
13444:          if(!(puzzle & 0x70030000ll))
13445:            altDoSolve(17, 0x20000ll, puzzle | 0x70030000ll,
13446:                    partsUsed | 0x400l);
13447:          if(!(puzzle & 0x30070000ll))
13448:            altDoSolve(17, 0x20000ll, puzzle | 0x30070000ll,
13449:                    partsUsed | 0x400l);
13450:          if(!(puzzle & 0x60070000ll))
13451:            altDoSolve(17, 0x20000ll, puzzle | 0x60070000ll,
13452:                    partsUsed | 0x400l);
13453:       }
13454:       if(!(puzzle & 0xd90000ll))
13455:         altDoSolve(17, 0x20000ll, puzzle | 0xd90000ll,
13456:                    partsUsed | 0x400l);
13457:     altpiece11at16:
13458:     break;
13459:    case 17:
13460:       if (partsUsed & 0x2l) goto altpiece2at17;
13461:       if(!(puzzle & 0x5e0000ll))
13462:         altDoSolve(18, 0x40000ll, puzzle | 0x5e0000ll,
13463:                    partsUsed | 0x2l);
13464:       if(!(puzzle & 0x10030060000ll))
13465:         altDoSolve(18, 0x40000ll, puzzle | 0x10030060000ll,
13466:                    partsUsed | 0x2l);
13467:       if(!(puzzle & 0x900120020000ll))
13468:         altDoSolve(18, 0x40000ll, puzzle | 0x900120020000ll,
13469:                    partsUsed | 0x2l);
13470:       if(!(puzzle & 0x800900120000ll))
13471:         altDoSolve(18, 0x40000ll, puzzle | 0x800900120000ll,
13472:                    partsUsed | 0x2l);
13473:     altpiece2at17:
13474:       if (partsUsed & 0x4l) goto altpiece3at17;
13475:       if(!(puzzle & 0x1d20000ll))
13476:         altDoSolve(18, 0x40000ll, puzzle | 0x1d20000ll,
13477:                    partsUsed | 0x4l);
13478:       if(!(puzzle & 0x100100920000ll))
13479:         altDoSolve(18, 0x40000ll, puzzle | 0x100100920000ll,
13480:                    partsUsed | 0x4l);
13481:       if(!(puzzle & 0x70020020000ll))
13482:         altDoSolve(18, 0x40000ll, puzzle | 0x70020020000ll,
13483:                    partsUsed | 0x4l);
13484:       if(!(puzzle & 0x20920020000ll))
13485:         altDoSolve(18, 0x40000ll, puzzle | 0x20920020000ll,
13486:                    partsUsed | 0x4l);
13487:     altpiece3at17:
13488:       if (partsUsed & 0x8l) goto altpiece4at17;
13489:       if(!(puzzle & 0xd60000ll))
13490:         altDoSolve(18, 0x40000ll, puzzle | 0xd60000ll,
13491:                    partsUsed | 0x8l);
13492:       if(!(puzzle & 0x30020060000ll))
13493:         altDoSolve(18, 0x40000ll, puzzle | 0x30020060000ll,
13494:                    partsUsed | 0x8l);
13495:       if(!(puzzle & 0x800920020000ll))
13496:         altDoSolve(18, 0x40000ll, puzzle | 0x800920020000ll,
13497:                    partsUsed | 0x8l);
13498:       if(!(puzzle & 0x900100120000ll))
13499:         altDoSolve(18, 0x40000ll, puzzle | 0x900100120000ll,
13500:                    partsUsed | 0x8l);
13501:     altpiece4at17:
13502:       if (partsUsed & 0x10l) goto altpiece5at17;
13503:       if (!(puzzle & 0x4920000ll)) {
13504:          if(!(puzzle & 0x69a0000ll))
13505:            altDoSolve(18, 0x40000ll, puzzle | 0x69a0000ll,
13506:                    partsUsed | 0x10l);
13507:          if(!(puzzle & 0x824920000ll))
13508:            altDoSolve(18, 0x40000ll, puzzle | 0x824920000ll,
13509:                    partsUsed | 0x10l);
13510:          if(!(puzzle & 0xcb20000ll))
13511:            altDoSolve(18, 0x40000ll, puzzle | 0xcb20000ll,
13512:                    partsUsed | 0x10l);
13513:          if(!(puzzle & 0x4104920000ll))
13514:            altDoSolve(18, 0x40000ll, puzzle | 0x4104920000ll,
13515:                    partsUsed | 0x10l);
13516:          if(!(puzzle & 0x5960000ll))
13517:            altDoSolve(18, 0x40000ll, puzzle | 0x5960000ll,
13518:                    partsUsed | 0x10l);
13519:       }
13520:       if (!(puzzle & 0x20020020020000ll)) {
13521:          if(!(puzzle & 0x30020030020000ll))
13522:            altDoSolve(18, 0x40000ll, puzzle | 0x30020030020000ll,
13523:                    partsUsed | 0x10l);
13524:          if(!(puzzle & 0x120020120020000ll))
13525:            altDoSolve(18, 0x40000ll, puzzle | 0x120020120020000ll,
13526:                    partsUsed | 0x10l);
13527:          if(!(puzzle & 0x20120020120000ll))
13528:            altDoSolve(18, 0x40000ll, puzzle | 0x20120020120000ll,
13529:                    partsUsed | 0x10l);
13530:          if(!(puzzle & 0x60020060020000ll))
13531:            altDoSolve(18, 0x40000ll, puzzle | 0x60020060020000ll,
13532:                    partsUsed | 0x10l);
13533:          if(!(puzzle & 0x20060020060000ll))
13534:            altDoSolve(18, 0x40000ll, puzzle | 0x20060020060000ll,
13535:                    partsUsed | 0x10l);
13536:       }
13537:       if(!(puzzle & 0x100120100120000ll))
13538:         altDoSolve(18, 0x40000ll, puzzle | 0x100120100120000ll,
13539:                    partsUsed | 0x10l);
13540:       if(!(puzzle & 0x9a60000ll))
13541:         altDoSolve(18, 0x40000ll, puzzle | 0x9a60000ll,
13542:                    partsUsed | 0x10l);
13543:       if(!(puzzle & 0x4920820000ll))
13544:         altDoSolve(18, 0x40000ll, puzzle | 0x4920820000ll,
13545:                    partsUsed | 0x10l);
13546:       if(!(puzzle & 0x40060040060000ll))
13547:         altDoSolve(18, 0x40000ll, puzzle | 0x40060040060000ll,
13548:                    partsUsed | 0x10l);
13549:     altpiece5at17:
13550:       if (partsUsed & 0x20l) goto altpiece6at17;
13551:       if (!(puzzle & 0x4920000ll)) {
13552:          if(!(puzzle & 0x6920000ll))
13553:            altDoSolve(18, 0x40000ll, puzzle | 0x6920000ll,
13554:                    partsUsed | 0x20l);
13555:          if(!(puzzle & 0x4004920000ll))
13556:            altDoSolve(18, 0x40000ll, puzzle | 0x4004920000ll,
13557:                    partsUsed | 0x20l);
13558:          if(!(puzzle & 0x4960000ll))
13559:            altDoSolve(18, 0x40000ll, puzzle | 0x4960000ll,
13560:                    partsUsed | 0x20l);
13561:          if(!(puzzle & 0x24920000ll))
13562:            altDoSolve(18, 0x40000ll, puzzle | 0x24920000ll,
13563:                    partsUsed | 0x20l);
13564:          if(!(puzzle & 0xc920000ll))
13565:            altDoSolve(18, 0x40000ll, puzzle | 0xc920000ll,
13566:                    partsUsed | 0x20l);
13567:       }
13568:       if (!(puzzle & 0x20020020020000ll)) {
13569:          if(!(puzzle & 0x30020020020000ll))
13570:            altDoSolve(18, 0x40000ll, puzzle | 0x30020020020000ll,
13571:                    partsUsed | 0x20l);
13572:          if(!(puzzle & 0x20020020120000ll))
13573:            altDoSolve(18, 0x40000ll, puzzle | 0x20020020120000ll,
13574:                    partsUsed | 0x20l);
13575:          if(!(puzzle & 0x120020020020000ll))
13576:            altDoSolve(18, 0x40000ll, puzzle | 0x120020020020000ll,
13577:                    partsUsed | 0x20l);
13578:          if(!(puzzle & 0x20020020060000ll))
13579:            altDoSolve(18, 0x40000ll, puzzle | 0x20020020060000ll,
13580:                    partsUsed | 0x20l);
13581:          if(!(puzzle & 0x60020020020000ll))
13582:            altDoSolve(18, 0x40000ll, puzzle | 0x60020020020000ll,
13583:                    partsUsed | 0x20l);
13584:       }
13585:       if(!(puzzle & 0x4920020000ll))
13586:         altDoSolve(18, 0x40000ll, puzzle | 0x4920020000ll,
13587:                    partsUsed | 0x20l);
13588:       if(!(puzzle & 0x9260000ll))
13589:         altDoSolve(18, 0x40000ll, puzzle | 0x9260000ll,
13590:                    partsUsed | 0x20l);
13591:       if(!(puzzle & 0x100100100120000ll))
13592:         altDoSolve(18, 0x40000ll, puzzle | 0x100100100120000ll,
13593:                    partsUsed | 0x20l);
13594:       if(!(puzzle & 0x40040040060000ll))
13595:         altDoSolve(18, 0x40000ll, puzzle | 0x40040040060000ll,
13596:                    partsUsed | 0x20l);
13597:     altpiece6at17:
13598:       if (partsUsed & 0x40l) goto altpiece7at17;
13599:       if (!(puzzle & 0x4920000ll)) {
13600:          if(!(puzzle & 0x49a0000ll))
13601:            altDoSolve(18, 0x40000ll, puzzle | 0x49a0000ll,
13602:                    partsUsed | 0x40l);
13603:          if(!(puzzle & 0x4d20000ll))
13604:            altDoSolve(18, 0x40000ll, puzzle | 0x4d20000ll,
13605:                    partsUsed | 0x40l);
13606:          if(!(puzzle & 0x804920000ll))
13607:            altDoSolve(18, 0x40000ll, puzzle | 0x804920000ll,
13608:                    partsUsed | 0x40l);
13609:          if(!(puzzle & 0x4b20000ll))
13610:            altDoSolve(18, 0x40000ll, puzzle | 0x4b20000ll,
13611:                    partsUsed | 0x40l);
13612:          if(!(puzzle & 0x104920000ll))
13613:            altDoSolve(18, 0x40000ll, puzzle | 0x104920000ll,
13614:                    partsUsed | 0x40l);
13615:          if(!(puzzle & 0x5920000ll))
13616:            altDoSolve(18, 0x40000ll, puzzle | 0x5920000ll,
13617:                    partsUsed | 0x40l);
13618:       }
13619:       if (!(puzzle & 0x20020020020000ll)) {
13620:          if(!(puzzle & 0x20020030020000ll))
13621:            altDoSolve(18, 0x40000ll, puzzle | 0x20020030020000ll,
13622:                    partsUsed | 0x40l);
13623:          if(!(puzzle & 0x20030020020000ll))
13624:            altDoSolve(18, 0x40000ll, puzzle | 0x20030020020000ll,
13625:                    partsUsed | 0x40l);
13626:          if(!(puzzle & 0x20020120020000ll))
13627:            altDoSolve(18, 0x40000ll, puzzle | 0x20020120020000ll,
13628:                    partsUsed | 0x40l);
13629:          if(!(puzzle & 0x20120020020000ll))
13630:            altDoSolve(18, 0x40000ll, puzzle | 0x20120020020000ll,
13631:                    partsUsed | 0x40l);
13632:          if(!(puzzle & 0x20020060020000ll))
13633:            altDoSolve(18, 0x40000ll, puzzle | 0x20020060020000ll,
13634:                    partsUsed | 0x40l);
13635:          if(!(puzzle & 0x20060020020000ll))
13636:            altDoSolve(18, 0x40000ll, puzzle | 0x20060020020000ll,
13637:                    partsUsed | 0x40l);
13638:       }
13639:     altpiece7at17:
13640:       if (partsUsed & 0x80l) goto altpiece8at17;
13641:       if(!(puzzle & 0x120020120000ll))
13642:         altDoSolve(18, 0x40000ll, puzzle | 0x120020120000ll,
13643:                    partsUsed | 0x80l);
13644:       if(!(puzzle & 0x120100120000ll))
13645:         altDoSolve(18, 0x40000ll, puzzle | 0x120100120000ll,
13646:                    partsUsed | 0x80l);
13647:       if(!(puzzle & 0x920820000ll))
13648:         altDoSolve(18, 0x40000ll, puzzle | 0x920820000ll,
13649:                    partsUsed | 0x80l);
13650:       if(!(puzzle & 0x820920000ll))
13651:         altDoSolve(18, 0x40000ll, puzzle | 0x820920000ll,
13652:                    partsUsed | 0x80l);
13653:       if(!(puzzle & 0x1960000ll))
13654:         altDoSolve(18, 0x40000ll, puzzle | 0x1960000ll,
13655:                    partsUsed | 0x80l);
13656:       if(!(puzzle & 0x1a60000ll))
13657:         altDoSolve(18, 0x40000ll, puzzle | 0x1a60000ll,
13658:                    partsUsed | 0x80l);
13659:       if(!(puzzle & 0x60040060000ll))
13660:         altDoSolve(18, 0x40000ll, puzzle | 0x60040060000ll,
13661:                    partsUsed | 0x80l);
13662:       if(!(puzzle & 0x60020060000ll))
13663:         altDoSolve(18, 0x40000ll, puzzle | 0x60020060000ll,
13664:                    partsUsed | 0x80l);
13665:     altpiece8at17:
13666:       if (partsUsed & 0x100l) goto altpiece9at17;
13667:       if(!(puzzle & 0x801a0000ll))
13668:         altDoSolve(18, 0x40000ll, puzzle | 0x801a0000ll,
13669:                    partsUsed | 0x100l);
13670:       if(!(puzzle & 0x30120000ll))
13671:         altDoSolve(18, 0x40000ll, puzzle | 0x30120000ll,
13672:                    partsUsed | 0x100l);
13673:       if(!(puzzle & 0x20320000ll))
13674:         altDoSolve(18, 0x40000ll, puzzle | 0x20320000ll,
13675:                    partsUsed | 0x100l);
13676:       if(!(puzzle & 0x1a0020000ll))
13677:         altDoSolve(18, 0x40000ll, puzzle | 0x1a0020000ll,
13678:                    partsUsed | 0x100l);
13679:       if(!(puzzle & 0x120060000ll))
13680:         altDoSolve(18, 0x40000ll, puzzle | 0x120060000ll,
13681:                    partsUsed | 0x100l);
13682:       if(!(puzzle & 0x260020000ll))
13683:         altDoSolve(18, 0x40000ll, puzzle | 0x260020000ll,
13684:                    partsUsed | 0x100l);
13685:       if(!(puzzle & 0x40160000ll))
13686:         altDoSolve(18, 0x40000ll, puzzle | 0x40160000ll,
13687:                    partsUsed | 0x100l);
13688:       if(!(puzzle & 0x300120000ll))
13689:         altDoSolve(18, 0x40000ll, puzzle | 0x300120000ll,
13690:                    partsUsed | 0x100l);
13691:       if(!(puzzle & 0x200260000ll))
13692:         altDoSolve(18, 0x40000ll, puzzle | 0x200260000ll,
13693:                    partsUsed | 0x100l);
13694:     altpiece9at17:
13695:       if (partsUsed & 0x200l) goto altpiece10at17;
13696:       if (!(puzzle & 0x1a0000ll)) {
13697:          if(!(puzzle & 0x13a0000ll))
13698:            altDoSolve(18, 0x40000ll, puzzle | 0x13a0000ll,
13699:                    partsUsed | 0x200l);
13700:          if(!(puzzle & 0x7a0000ll))
13701:            altDoSolve(18, 0x40000ll, puzzle | 0x7a0000ll,
13702:                    partsUsed | 0x200l);
13703:          if(!(puzzle & 0x9e0000ll))
13704:            altDoSolve(18, 0x40000ll, puzzle | 0x9e0000ll,
13705:                    partsUsed | 0x200l);
13706:          if(!(puzzle & 0x19a0000ll))
13707:            altDoSolve(18, 0x40000ll, puzzle | 0x19a0000ll,
13708:                    partsUsed | 0x200l);
13709:       }
13710:       if (!(puzzle & 0x20020020000ll)) {
13711:          if(!(puzzle & 0x20030060000ll))
13712:            altDoSolve(18, 0x40000ll, puzzle | 0x20030060000ll,
13713:                    partsUsed | 0x200l);
13714:          if(!(puzzle & 0x60030020000ll))
13715:            altDoSolve(18, 0x40000ll, puzzle | 0x60030020000ll,
13716:                    partsUsed | 0x200l);
13717:          if(!(puzzle & 0x30060020000ll))
13718:            altDoSolve(18, 0x40000ll, puzzle | 0x30060020000ll,
13719:                    partsUsed | 0x200l);
13720:       }
13721:       if(!(puzzle & 0xf20000ll))
13722:         altDoSolve(18, 0x40000ll, puzzle | 0xf20000ll,
13723:                    partsUsed | 0x200l);
13724:       if(!(puzzle & 0x10070020000ll))
13725:         altDoSolve(18, 0x40000ll, puzzle | 0x10070020000ll,
13726:                    partsUsed | 0x200l);
13727:       if(!(puzzle & 0x40070020000ll))
13728:         altDoSolve(18, 0x40000ll, puzzle | 0x40070020000ll,
13729:                    partsUsed | 0x200l);
13730:       if(!(puzzle & 0x100920020000ll))
13731:         altDoSolve(18, 0x40000ll, puzzle | 0x100920020000ll,
13732:                    partsUsed | 0x200l);
13733:       if(!(puzzle & 0x100900120000ll))
13734:         altDoSolve(18, 0x40000ll, puzzle | 0x100900120000ll,
13735:                    partsUsed | 0x200l);
13736:     altpiece10at17:
13737:       if (partsUsed & 0x400l) goto altpiece11at17;
13738:       if (!(puzzle & 0x100120000ll)) {
13739:          if(!(puzzle & 0x20120120000ll))
13740:            altDoSolve(18, 0x40000ll, puzzle | 0x20120120000ll,
13741:                    partsUsed | 0x400l);
13742:          if(!(puzzle & 0x920120000ll))
13743:            altDoSolve(18, 0x40000ll, puzzle | 0x920120000ll,
13744:                    partsUsed | 0x400l);
13745:          if(!(puzzle & 0x900920000ll))
13746:            altDoSolve(18, 0x40000ll, puzzle | 0x900920000ll,
13747:                    partsUsed | 0x400l);
13748:          if(!(puzzle & 0x120920000ll))
13749:            altDoSolve(18, 0x40000ll, puzzle | 0x120920000ll,
13750:                    partsUsed | 0x400l);
13751:          if(!(puzzle & 0x100120120000ll))
13752:            altDoSolve(18, 0x40000ll, puzzle | 0x100120120000ll,
13753:                    partsUsed | 0x400l);
13754:       }
13755:       if (!(puzzle & 0x20020020000ll)) {
13756:          if(!(puzzle & 0x120120020000ll))
13757:            altDoSolve(18, 0x40000ll, puzzle | 0x120120020000ll,
13758:                    partsUsed | 0x400l);
13759:          if(!(puzzle & 0x20060060000ll))
13760:            altDoSolve(18, 0x40000ll, puzzle | 0x20060060000ll,
13761:                    partsUsed | 0x400l);
13762:          if(!(puzzle & 0x60060020000ll))
13763:            altDoSolve(18, 0x40000ll, puzzle | 0x60060020000ll,
13764:                    partsUsed | 0x400l);
13765:       }
13766:       if (!(puzzle & 0x320000ll)) {
13767:          if(!(puzzle & 0xb60000ll))
13768:            altDoSolve(18, 0x40000ll, puzzle | 0xb60000ll,
13769:                    partsUsed | 0x400l);
13770:          if(!(puzzle & 0x1360000ll))
13771:            altDoSolve(18, 0x40000ll, puzzle | 0x1360000ll,
13772:                    partsUsed | 0x400l);
13773:          if(!(puzzle & 0x1b20000ll))
13774:            altDoSolve(18, 0x40000ll, puzzle | 0x1b20000ll,
13775:                    partsUsed | 0x400l);
13776:       }
13777:       if(!(puzzle & 0x3e0000ll))
13778:         altDoSolve(18, 0x40000ll, puzzle | 0x3e0000ll,
13779:                    partsUsed | 0x400l);
13780:       if(!(puzzle & 0xda0000ll))
13781:         altDoSolve(18, 0x40000ll, puzzle | 0xda0000ll,
13782:                    partsUsed | 0x400l);
13783:       if(!(puzzle & 0x70060000ll))
13784:         altDoSolve(18, 0x40000ll, puzzle | 0x70060000ll,
13785:                    partsUsed | 0x400l);
13786:       if(!(puzzle & 0x30030020000ll))
13787:         altDoSolve(18, 0x40000ll, puzzle | 0x30030020000ll,
13788:                    partsUsed | 0x400l);
13789:       if(!(puzzle & 0x40060060000ll))
13790:         altDoSolve(18, 0x40000ll, puzzle | 0x40060060000ll,
13791:                    partsUsed | 0x400l);
13792:     altpiece11at17:
13793:     break;
13794:    case 18:
13795:       if (partsUsed & 0x2l) goto altpiece2at18;
13796:       if(!(puzzle & 0xf40000ll))
13797:         altDoSolve(19, 0x80000ll, puzzle | 0xf40000ll,
13798:                    partsUsed | 0x2l);
13799:       if(!(puzzle & 0x30060040000ll))
13800:         altDoSolve(19, 0x80000ll, puzzle | 0x30060040000ll,
13801:                    partsUsed | 0x2l);
13802:       if(!(puzzle & 0x1200240040000ll))
13803:         altDoSolve(19, 0x80000ll, puzzle | 0x1200240040000ll,
13804:                    partsUsed | 0x2l);
13805:       if(!(puzzle & 0x1001200240000ll))
13806:         altDoSolve(19, 0x80000ll, puzzle | 0x1001200240000ll,
13807:                    partsUsed | 0x2l);
13808:     altpiece2at18:
13809:       if (partsUsed & 0x4l) goto altpiece3at18;
13810:       if(!(puzzle & 0x13c0000ll))
13811:         altDoSolve(19, 0x80000ll, puzzle | 0x13c0000ll,
13812:                    partsUsed | 0x4l);
13813:       if(!(puzzle & 0x200201240000ll))
13814:         altDoSolve(19, 0x80000ll, puzzle | 0x200201240000ll,
13815:                    partsUsed | 0x4l);
13816:       if(!(puzzle & 0x40070040000ll))
13817:         altDoSolve(19, 0x80000ll, puzzle | 0x40070040000ll,
13818:                    partsUsed | 0x4l);
13819:       if(!(puzzle & 0x41240040000ll))
13820:         altDoSolve(19, 0x80000ll, puzzle | 0x41240040000ll,
13821:                    partsUsed | 0x4l);
13822:     altpiece3at18:
13823:       if (partsUsed & 0x8l) goto altpiece4at18;
13824:       if(!(puzzle & 0x7c0000ll))
13825:         altDoSolve(19, 0x80000ll, puzzle | 0x7c0000ll,
13826:                    partsUsed | 0x8l);
13827:       if(!(puzzle & 0x10070040000ll))
13828:         altDoSolve(19, 0x80000ll, puzzle | 0x10070040000ll,
13829:                    partsUsed | 0x8l);
13830:       if(!(puzzle & 0x1001240040000ll))
13831:         altDoSolve(19, 0x80000ll, puzzle | 0x1001240040000ll,
13832:                    partsUsed | 0x8l);
13833:       if(!(puzzle & 0x1200200240000ll))
13834:         altDoSolve(19, 0x80000ll, puzzle | 0x1200200240000ll,
13835:                    partsUsed | 0x8l);
13836:     altpiece4at18:
13837:       if (partsUsed & 0x10l) goto altpiece5at18;
13838:       if (!(puzzle & 0x9240000ll)) {
13839:          if(!(puzzle & 0xd340000ll))
13840:            altDoSolve(19, 0x80000ll, puzzle | 0xd340000ll,
13841:                    partsUsed | 0x10l);
13842:          if(!(puzzle & 0x1049240000ll))
13843:            altDoSolve(19, 0x80000ll, puzzle | 0x1049240000ll,
13844:                    partsUsed | 0x10l);
13845:          if(!(puzzle & 0x8209240000ll))
13846:            altDoSolve(19, 0x80000ll, puzzle | 0x8209240000ll,
13847:                    partsUsed | 0x10l);
13848:       }
13849:       if (!(puzzle & 0x40040040040000ll)) {
13850:          if(!(puzzle & 0x60040060040000ll))
13851:            altDoSolve(19, 0x80000ll, puzzle | 0x60040060040000ll,
13852:                    partsUsed | 0x10l);
13853:          if(!(puzzle & 0x240040240040000ll))
13854:            altDoSolve(19, 0x80000ll, puzzle | 0x240040240040000ll,
13855:                    partsUsed | 0x10l);
13856:          if(!(puzzle & 0x40240040240000ll))
13857:            altDoSolve(19, 0x80000ll, puzzle | 0x40240040240000ll,
13858:                    partsUsed | 0x10l);
13859:       }
13860:       if(!(puzzle & 0x200240200240000ll))
13861:         altDoSolve(19, 0x80000ll, puzzle | 0x200240200240000ll,
13862:                    partsUsed | 0x10l);
13863:       if(!(puzzle & 0x9241040000ll))
13864:         altDoSolve(19, 0x80000ll, puzzle | 0x9241040000ll,
13865:                    partsUsed | 0x10l);
13866:     altpiece5at18:
13867:       if (partsUsed & 0x20l) goto altpiece6at18;
13868:       if (!(puzzle & 0x9240000ll)) {
13869:          if(!(puzzle & 0xd240000ll))
13870:            altDoSolve(19, 0x80000ll, puzzle | 0xd240000ll,
13871:                    partsUsed | 0x20l);
13872:          if(!(puzzle & 0x8009240000ll))
13873:            altDoSolve(19, 0x80000ll, puzzle | 0x8009240000ll,
13874:                    partsUsed | 0x20l);
13875:          if(!(puzzle & 0x49240000ll))
13876:            altDoSolve(19, 0x80000ll, puzzle | 0x49240000ll,
13877:                    partsUsed | 0x20l);
13878:       }
13879:       if (!(puzzle & 0x40040040040000ll)) {
13880:          if(!(puzzle & 0x60040040040000ll))
13881:            altDoSolve(19, 0x80000ll, puzzle | 0x60040040040000ll,
13882:                    partsUsed | 0x20l);
13883:          if(!(puzzle & 0x40040040240000ll))
13884:            altDoSolve(19, 0x80000ll, puzzle | 0x40040040240000ll,
13885:                    partsUsed | 0x20l);
13886:          if(!(puzzle & 0x240040040040000ll))
13887:            altDoSolve(19, 0x80000ll, puzzle | 0x240040040040000ll,
13888:                    partsUsed | 0x20l);
13889:       }
13890:       if(!(puzzle & 0x9240040000ll))
13891:         altDoSolve(19, 0x80000ll, puzzle | 0x9240040000ll,
13892:                    partsUsed | 0x20l);
13893:       if(!(puzzle & 0x200200200240000ll))
13894:         altDoSolve(19, 0x80000ll, puzzle | 0x200200200240000ll,
13895:                    partsUsed | 0x20l);
13896:     altpiece6at18:
13897:       if (partsUsed & 0x40l) goto altpiece7at18;
13898:       if (!(puzzle & 0x9240000ll)) {
13899:          if(!(puzzle & 0x9340000ll))
13900:            altDoSolve(19, 0x80000ll, puzzle | 0x9340000ll,
13901:                    partsUsed | 0x40l);
13902:          if(!(puzzle & 0x9a40000ll))
13903:            altDoSolve(19, 0x80000ll, puzzle | 0x9a40000ll,
13904:                    partsUsed | 0x40l);
13905:          if(!(puzzle & 0x1009240000ll))
13906:            altDoSolve(19, 0x80000ll, puzzle | 0x1009240000ll,
13907:                    partsUsed | 0x40l);
13908:          if(!(puzzle & 0x209240000ll))
13909:            altDoSolve(19, 0x80000ll, puzzle | 0x209240000ll,
13910:                    partsUsed | 0x40l);
13911:       }
13912:       if (!(puzzle & 0x40040040040000ll)) {
13913:          if(!(puzzle & 0x40040060040000ll))
13914:            altDoSolve(19, 0x80000ll, puzzle | 0x40040060040000ll,
13915:                    partsUsed | 0x40l);
13916:          if(!(puzzle & 0x40060040040000ll))
13917:            altDoSolve(19, 0x80000ll, puzzle | 0x40060040040000ll,
13918:                    partsUsed | 0x40l);
13919:          if(!(puzzle & 0x40040240040000ll))
13920:            altDoSolve(19, 0x80000ll, puzzle | 0x40040240040000ll,
13921:                    partsUsed | 0x40l);
13922:          if(!(puzzle & 0x40240040040000ll))
13923:            altDoSolve(19, 0x80000ll, puzzle | 0x40240040040000ll,
13924:                    partsUsed | 0x40l);
13925:       }
13926:     altpiece7at18:
13927:       if (partsUsed & 0x80l) goto altpiece8at18;
13928:       if(!(puzzle & 0x240040240000ll))
13929:         altDoSolve(19, 0x80000ll, puzzle | 0x240040240000ll,
13930:                    partsUsed | 0x80l);
13931:       if(!(puzzle & 0x240200240000ll))
13932:         altDoSolve(19, 0x80000ll, puzzle | 0x240200240000ll,
13933:                    partsUsed | 0x80l);
13934:       if(!(puzzle & 0x1241040000ll))
13935:         altDoSolve(19, 0x80000ll, puzzle | 0x1241040000ll,
13936:                    partsUsed | 0x80l);
13937:       if(!(puzzle & 0x1041240000ll))
13938:         altDoSolve(19, 0x80000ll, puzzle | 0x1041240000ll,
13939:                    partsUsed | 0x80l);
13940:     altpiece8at18:
13941:       if (partsUsed & 0x100l) goto altpiece9at18;
13942:       if(!(puzzle & 0x340040000ll))
13943:         altDoSolve(19, 0x80000ll, puzzle | 0x340040000ll,
13944:                    partsUsed | 0x100l);
13945:       if(!(puzzle & 0x100340000ll))
13946:         altDoSolve(19, 0x80000ll, puzzle | 0x100340000ll,
13947:                    partsUsed | 0x100l);
13948:       if(!(puzzle & 0x60240000ll))
13949:         altDoSolve(19, 0x80000ll, puzzle | 0x60240000ll,
13950:                    partsUsed | 0x100l);
13951:     altpiece9at18:
13952:       if (partsUsed & 0x200l) goto altpiece10at18;
13953:       if(!(puzzle & 0xbc0000ll))
13954:         altDoSolve(19, 0x80000ll, puzzle | 0xbc0000ll,
13955:                    partsUsed | 0x200l);
13956:       if(!(puzzle & 0x20070040000ll))
13957:         altDoSolve(19, 0x80000ll, puzzle | 0x20070040000ll,
13958:                    partsUsed | 0x200l);
13959:       if(!(puzzle & 0x201240040000ll))
13960:         altDoSolve(19, 0x80000ll, puzzle | 0x201240040000ll,
13961:                    partsUsed | 0x200l);
13962:       if(!(puzzle & 0x201200240000ll))
13963:         altDoSolve(19, 0x80000ll, puzzle | 0x201200240000ll,
13964:                    partsUsed | 0x200l);
13965:     altpiece10at18:
13966:       if (partsUsed & 0x400l) goto altpiece11at18;
13967:       if (!(puzzle & 0x1240000ll)) {
13968:          if(!(puzzle & 0x1b40000ll))
13969:            altDoSolve(19, 0x80000ll, puzzle | 0x1b40000ll,
13970:                    partsUsed | 0x400l);
13971:          if(!(puzzle & 0x1201240000ll))
13972:            altDoSolve(19, 0x80000ll, puzzle | 0x1201240000ll,
13973:                    partsUsed | 0x400l);
13974:          if(!(puzzle & 0x241240000ll))
13975:            altDoSolve(19, 0x80000ll, puzzle | 0x241240000ll,
13976:                    partsUsed | 0x400l);
13977:       }
13978:       if (!(puzzle & 0x40040040000ll)) {
13979:          if(!(puzzle & 0x60060040000ll))
13980:            altDoSolve(19, 0x80000ll, puzzle | 0x60060040000ll,
13981:                    partsUsed | 0x400l);
13982:          if(!(puzzle & 0x40240240000ll))
13983:            altDoSolve(19, 0x80000ll, puzzle | 0x40240240000ll,
13984:                    partsUsed | 0x400l);
13985:          if(!(puzzle & 0x240240040000ll))
13986:            altDoSolve(19, 0x80000ll, puzzle | 0x240240040000ll,
13987:                    partsUsed | 0x400l);
13988:       }
13989:       if(!(puzzle & 0x1240240000ll))
13990:         altDoSolve(19, 0x80000ll, puzzle | 0x1240240000ll,
13991:                    partsUsed | 0x400l);
13992:       if(!(puzzle & 0x200240240000ll))
13993:         altDoSolve(19, 0x80000ll, puzzle | 0x200240240000ll,
13994:                    partsUsed | 0x400l);
13995:     altpiece11at18:
13996:     break;
13997:    case 19:
13998:       if (partsUsed & 0x2l) goto altpiece2at19;
13999:       if(!(puzzle & 0x10090480000ll))
14000:         altDoSolve(20, 0x100000ll, puzzle | 0x10090480000ll,
14001:                    partsUsed | 0x2l);
14002:       if(!(puzzle & 0x2400480080000ll))
14003:         altDoSolve(20, 0x100000ll, puzzle | 0x2400480080000ll,
14004:                    partsUsed | 0x2l);
14005:       if(!(puzzle & 0x2002400480000ll))
14006:         altDoSolve(20, 0x100000ll, puzzle | 0x2002400480000ll,
14007:                    partsUsed | 0x2l);
14008:       if(!(puzzle & 0x9980000ll))
14009:         altDoSolve(20, 0x100000ll, puzzle | 0x9980000ll,
14010:                    partsUsed | 0x2l);
14011:       if(!(puzzle & 0xcc80000ll))
14012:         altDoSolve(20, 0x100000ll, puzzle | 0xcc80000ll,
14013:                    partsUsed | 0x2l);
14014:       if(!(puzzle & 0x200300180000ll))
14015:         altDoSolve(20, 0x100000ll, puzzle | 0x200300180000ll,
14016:                    partsUsed | 0x2l);
14017:       if(!(puzzle & 0x300180080000ll))
14018:         altDoSolve(20, 0x100000ll, puzzle | 0x300180080000ll,
14019:                    partsUsed | 0x2l);
14020:     altpiece2at19:
14021:       if (partsUsed & 0x4l) goto altpiece3at19;
14022:       if (!(puzzle & 0x80080080000ll)) {
14023:          if(!(puzzle & 0x490080080000ll))
14024:            altDoSolve(20, 0x100000ll, puzzle | 0x490080080000ll,
14025:                    partsUsed | 0x4l);
14026:          if(!(puzzle & 0x82480080000ll))
14027:            altDoSolve(20, 0x100000ll, puzzle | 0x82480080000ll,
14028:                    partsUsed | 0x4l);
14029:          if(!(puzzle & 0x80380080000ll))
14030:            altDoSolve(20, 0x100000ll, puzzle | 0x80380080000ll,
14031:                    partsUsed | 0x4l);
14032:       }
14033:       if(!(puzzle & 0x400402480000ll))
14034:         altDoSolve(20, 0x100000ll, puzzle | 0x400402480000ll,
14035:                    partsUsed | 0x4l);
14036:       if(!(puzzle & 0x3c80000ll))
14037:         altDoSolve(20, 0x100000ll, puzzle | 0x3c80000ll,
14038:                    partsUsed | 0x4l);
14039:       if(!(puzzle & 0x4b80000ll))
14040:         altDoSolve(20, 0x100000ll, puzzle | 0x4b80000ll,
14041:                    partsUsed | 0x4l);
14042:       if(!(puzzle & 0x100100380000ll))
14043:         altDoSolve(20, 0x100000ll, puzzle | 0x100100380000ll,
14044:                    partsUsed | 0x4l);
14045:     altpiece3at19:
14046:       if (partsUsed & 0x8l) goto altpiece4at19;
14047:       if(!(puzzle & 0x90080480000ll))
14048:         altDoSolve(20, 0x100000ll, puzzle | 0x90080480000ll,
14049:                    partsUsed | 0x8l);
14050:       if(!(puzzle & 0x2002480080000ll))
14051:         altDoSolve(20, 0x100000ll, puzzle | 0x2002480080000ll,
14052:                    partsUsed | 0x8l);
14053:       if(!(puzzle & 0x2400400480000ll))
14054:         altDoSolve(20, 0x100000ll, puzzle | 0x2400400480000ll,
14055:                    partsUsed | 0x8l);
14056:       if(!(puzzle & 0xc980000ll))
14057:         altDoSolve(20, 0x100000ll, puzzle | 0xc980000ll,
14058:                    partsUsed | 0x8l);
14059:       if(!(puzzle & 0x9c80000ll))
14060:         altDoSolve(20, 0x100000ll, puzzle | 0x9c80000ll,
14061:                    partsUsed | 0x8l);
14062:       if(!(puzzle & 0x200380080000ll))
14063:         altDoSolve(20, 0x100000ll, puzzle | 0x200380080000ll,
14064:                    partsUsed | 0x8l);
14065:       if(!(puzzle & 0x300100180000ll))
14066:         altDoSolve(20, 0x100000ll, puzzle | 0x300100180000ll,
14067:                    partsUsed | 0x8l);
14068:     altpiece4at19:
14069:       if (partsUsed & 0x10l) goto altpiece5at19;
14070:       if (!(puzzle & 0x80080080080000ll)) {
14071:          if(!(puzzle & 0x80480080480000ll))
14072:            altDoSolve(20, 0x100000ll, puzzle | 0x80480080480000ll,
14073:                    partsUsed | 0x10l);
14074:          if(!(puzzle & 0x180080180080000ll))
14075:            altDoSolve(20, 0x100000ll, puzzle | 0x180080180080000ll,
14076:                    partsUsed | 0x10l);
14077:          if(!(puzzle & 0x80180080180000ll))
14078:            altDoSolve(20, 0x100000ll, puzzle | 0x80180080180000ll,
14079:                    partsUsed | 0x10l);
14080:       }
14081:       if(!(puzzle & 0x2492080000ll))
14082:         altDoSolve(20, 0x100000ll, puzzle | 0x2492080000ll,
14083:                    partsUsed | 0x10l);
14084:       if(!(puzzle & 0x90080090080000ll))
14085:         altDoSolve(20, 0x100000ll, puzzle | 0x90080090080000ll,
14086:                    partsUsed | 0x10l);
14087:       if(!(puzzle & 0x480080480080000ll))
14088:         altDoSolve(20, 0x100000ll, puzzle | 0x480080480080000ll,
14089:                    partsUsed | 0x10l);
14090:       if(!(puzzle & 0x400480400480000ll))
14091:         altDoSolve(20, 0x100000ll, puzzle | 0x400480400480000ll,
14092:                    partsUsed | 0x10l);
14093:       if(!(puzzle & 0x100180100180000ll))
14094:         altDoSolve(20, 0x100000ll, puzzle | 0x100180100180000ll,
14095:                    partsUsed | 0x10l);
14096:     altpiece5at19:
14097:       if (partsUsed & 0x20l) goto altpiece6at19;
14098:       if (!(puzzle & 0x80080080080000ll)) {
14099:          if(!(puzzle & 0x90080080080000ll))
14100:            altDoSolve(20, 0x100000ll, puzzle | 0x90080080080000ll,
14101:                    partsUsed | 0x20l);
14102:          if(!(puzzle & 0x80080080480000ll))
14103:            altDoSolve(20, 0x100000ll, puzzle | 0x80080080480000ll,
14104:                    partsUsed | 0x20l);
14105:          if(!(puzzle & 0x480080080080000ll))
14106:            altDoSolve(20, 0x100000ll, puzzle | 0x480080080080000ll,
14107:                    partsUsed | 0x20l);
14108:          if(!(puzzle & 0x80080080180000ll))
14109:            altDoSolve(20, 0x100000ll, puzzle | 0x80080080180000ll,
14110:                    partsUsed | 0x20l);
14111:          if(!(puzzle & 0x180080080080000ll))
14112:            altDoSolve(20, 0x100000ll, puzzle | 0x180080080080000ll,
14113:                    partsUsed | 0x20l);
14114:       }
14115:       if(!(puzzle & 0x400400400480000ll))
14116:         altDoSolve(20, 0x100000ll, puzzle | 0x400400400480000ll,
14117:                    partsUsed | 0x20l);
14118:       if(!(puzzle & 0x100100100180000ll))
14119:         altDoSolve(20, 0x100000ll, puzzle | 0x100100100180000ll,
14120:                    partsUsed | 0x20l);
14121:     altpiece6at19:
14122:       if (partsUsed & 0x40l) goto altpiece7at19;
14123:       if (!(puzzle & 0x80080080080000ll)) {
14124:          if(!(puzzle & 0x80090080080000ll))
14125:            altDoSolve(20, 0x100000ll, puzzle | 0x80090080080000ll,
14126:                    partsUsed | 0x40l);
14127:          if(!(puzzle & 0x80080480080000ll))
14128:            altDoSolve(20, 0x100000ll, puzzle | 0x80080480080000ll,
14129:                    partsUsed | 0x40l);
14130:          if(!(puzzle & 0x80480080080000ll))
14131:            altDoSolve(20, 0x100000ll, puzzle | 0x80480080080000ll,
14132:                    partsUsed | 0x40l);
14133:          if(!(puzzle & 0x80080180080000ll))
14134:            altDoSolve(20, 0x100000ll, puzzle | 0x80080180080000ll,
14135:                    partsUsed | 0x40l);
14136:          if(!(puzzle & 0x80180080080000ll))
14137:            altDoSolve(20, 0x100000ll, puzzle | 0x80180080080000ll,
14138:                    partsUsed | 0x40l);
14139:       }
14140:       if(!(puzzle & 0x2490080000ll))
14141:         altDoSolve(20, 0x100000ll, puzzle | 0x2490080000ll,
14142:                    partsUsed | 0x40l);
14143:       if(!(puzzle & 0x80080090080000ll))
14144:         altDoSolve(20, 0x100000ll, puzzle | 0x80080090080000ll,
14145:                    partsUsed | 0x40l);
14146:     altpiece7at19:
14147:       if (partsUsed & 0x80l) goto altpiece8at19;
14148:       if(!(puzzle & 0x480080480000ll))
14149:         altDoSolve(20, 0x100000ll, puzzle | 0x480080480000ll,
14150:                    partsUsed | 0x80l);
14151:       if(!(puzzle & 0x480400480000ll))
14152:         altDoSolve(20, 0x100000ll, puzzle | 0x480400480000ll,
14153:                    partsUsed | 0x80l);
14154:       if(!(puzzle & 0x2482080000ll))
14155:         altDoSolve(20, 0x100000ll, puzzle | 0x2482080000ll,
14156:                    partsUsed | 0x80l);
14157:       if(!(puzzle & 0x2082480000ll))
14158:         altDoSolve(20, 0x100000ll, puzzle | 0x2082480000ll,
14159:                    partsUsed | 0x80l);
14160:       if(!(puzzle & 0x1780000ll))
14161:         altDoSolve(20, 0x100000ll, puzzle | 0x1780000ll,
14162:                    partsUsed | 0x80l);
14163:       if(!(puzzle & 0x6580000ll))
14164:         altDoSolve(20, 0x100000ll, puzzle | 0x6580000ll,
14165:                    partsUsed | 0x80l);
14166:       if(!(puzzle & 0x6980000ll))
14167:         altDoSolve(20, 0x100000ll, puzzle | 0x6980000ll,
14168:                    partsUsed | 0x80l);
14169:       if(!(puzzle & 0x1e80000ll))
14170:         altDoSolve(20, 0x100000ll, puzzle | 0x1e80000ll,
14171:                    partsUsed | 0x80l);
14172:       if(!(puzzle & 0x180100180000ll))
14173:         altDoSolve(20, 0x100000ll, puzzle | 0x180100180000ll,
14174:                    partsUsed | 0x80l);
14175:       if(!(puzzle & 0x180080180000ll))
14176:         altDoSolve(20, 0x100000ll, puzzle | 0x180080180000ll,
14177:                    partsUsed | 0x80l);
14178:       if(!(puzzle & 0x380280000ll))
14179:         altDoSolve(20, 0x100000ll, puzzle | 0x380280000ll,
14180:                    partsUsed | 0x80l);
14181:       if(!(puzzle & 0x280380000ll))
14182:         altDoSolve(20, 0x100000ll, puzzle | 0x280380000ll,
14183:                    partsUsed | 0x80l);
14184:     altpiece8at19:
14185:       if (partsUsed & 0x100l) goto altpiece9at19;
14186:       if(!(puzzle & 0x120180000ll))
14187:         altDoSolve(20, 0x100000ll, puzzle | 0x120180000ll,
14188:                    partsUsed | 0x100l);
14189:       if(!(puzzle & 0x100580000ll))
14190:         altDoSolve(20, 0x100000ll, puzzle | 0x100580000ll,
14191:                    partsUsed | 0x100l);
14192:       if(!(puzzle & 0xb0080000ll))
14193:         altDoSolve(20, 0x100000ll, puzzle | 0xb0080000ll,
14194:                    partsUsed | 0x100l);
14195:       if(!(puzzle & 0x980080000ll))
14196:         altDoSolve(20, 0x100000ll, puzzle | 0x980080000ll,
14197:                    partsUsed | 0x100l);
14198:       if(!(puzzle & 0x480180000ll))
14199:         altDoSolve(20, 0x100000ll, puzzle | 0x480180000ll,
14200:                    partsUsed | 0x100l);
14201:       if(!(puzzle & 0xc00480000ll))
14202:         altDoSolve(20, 0x100000ll, puzzle | 0xc00480000ll,
14203:                    partsUsed | 0x100l);
14204:       if(!(puzzle & 0x80c80000ll))
14205:         altDoSolve(20, 0x100000ll, puzzle | 0x80c80000ll,
14206:                    partsUsed | 0x100l);
14207:       if(!(puzzle & 0x800980000ll))
14208:         altDoSolve(20, 0x100000ll, puzzle | 0x800980000ll,
14209:                    partsUsed | 0x100l);
14210:     altpiece9at19:
14211:       if (partsUsed & 0x200l) goto altpiece10at19;
14212:       if (!(puzzle & 0x80080080000ll)) {
14213:          if(!(puzzle & 0x80090480000ll))
14214:            altDoSolve(20, 0x100000ll, puzzle | 0x80090480000ll,
14215:                    partsUsed | 0x200l);
14216:          if(!(puzzle & 0x90480080000ll))
14217:            altDoSolve(20, 0x100000ll, puzzle | 0x90480080000ll,
14218:                    partsUsed | 0x200l);
14219:          if(!(puzzle & 0x480090080000ll))
14220:            altDoSolve(20, 0x100000ll, puzzle | 0x480090080000ll,
14221:                    partsUsed | 0x200l);
14222:       }
14223:       if (!(puzzle & 0x480080000ll)) {
14224:          if(!(puzzle & 0x400490080000ll))
14225:            altDoSolve(20, 0x100000ll, puzzle | 0x400490080000ll,
14226:                    partsUsed | 0x200l);
14227:          if(!(puzzle & 0x10490080000ll))
14228:            altDoSolve(20, 0x100000ll, puzzle | 0x10490080000ll,
14229:                    partsUsed | 0x200l);
14230:          if(!(puzzle & 0x402480080000ll))
14231:            altDoSolve(20, 0x100000ll, puzzle | 0x402480080000ll,
14232:                    partsUsed | 0x200l);
14233:       }
14234:       if(!(puzzle & 0x5980000ll))
14235:         altDoSolve(20, 0x100000ll, puzzle | 0x5980000ll,
14236:                    partsUsed | 0x200l);
14237:       if(!(puzzle & 0x5c80000ll))
14238:         altDoSolve(20, 0x100000ll, puzzle | 0x5c80000ll,
14239:                    partsUsed | 0x200l);
14240:       if(!(puzzle & 0x402400480000ll))
14241:         altDoSolve(20, 0x100000ll, puzzle | 0x402400480000ll,
14242:                    partsUsed | 0x200l);
14243:       if(!(puzzle & 0x100300180000ll))
14244:         altDoSolve(20, 0x100000ll, puzzle | 0x100300180000ll,
14245:                    partsUsed | 0x200l);
14246:       if(!(puzzle & 0x100380080000ll))
14247:         altDoSolve(20, 0x100000ll, puzzle | 0x100380080000ll,
14248:                    partsUsed | 0x200l);
14249:     altpiece10at19:
14250:       if (partsUsed & 0x400l) goto altpiece11at19;
14251:       if (!(puzzle & 0x400480000ll)) {
14252:          if(!(puzzle & 0x80480480000ll))
14253:            altDoSolve(20, 0x100000ll, puzzle | 0x80480480000ll,
14254:                    partsUsed | 0x400l);
14255:          if(!(puzzle & 0x2480480000ll))
14256:            altDoSolve(20, 0x100000ll, puzzle | 0x2480480000ll,
14257:                    partsUsed | 0x400l);
14258:          if(!(puzzle & 0x2402480000ll))
14259:            altDoSolve(20, 0x100000ll, puzzle | 0x2402480000ll,
14260:                    partsUsed | 0x400l);
14261:          if(!(puzzle & 0x482480000ll))
14262:            altDoSolve(20, 0x100000ll, puzzle | 0x482480000ll,
14263:                    partsUsed | 0x400l);
14264:          if(!(puzzle & 0x400480480000ll))
14265:            altDoSolve(20, 0x100000ll, puzzle | 0x400480480000ll,
14266:                    partsUsed | 0x400l);
14267:       }
14268:       if (!(puzzle & 0x980000ll)) {
14269:          if(!(puzzle & 0x1b80000ll))
14270:            altDoSolve(20, 0x100000ll, puzzle | 0x1b80000ll,
14271:                    partsUsed | 0x400l);
14272:          if(!(puzzle & 0xf80000ll))
14273:            altDoSolve(20, 0x100000ll, puzzle | 0xf80000ll,
14274:                    partsUsed | 0x400l);
14275:          if(!(puzzle & 0x2d80000ll))
14276:            altDoSolve(20, 0x100000ll, puzzle | 0x2d80000ll,
14277:                    partsUsed | 0x400l);
14278:          if(!(puzzle & 0x4d80000ll))
14279:            altDoSolve(20, 0x100000ll, puzzle | 0x4d80000ll,
14280:                    partsUsed | 0x400l);
14281:          if(!(puzzle & 0x1d80000ll))
14282:            altDoSolve(20, 0x100000ll, puzzle | 0x1d80000ll,
14283:                    partsUsed | 0x400l);
14284:       }
14285:       if (!(puzzle & 0x80080080000ll)) {
14286:          if(!(puzzle & 0x480480080000ll))
14287:            altDoSolve(20, 0x100000ll, puzzle | 0x480480080000ll,
14288:                    partsUsed | 0x400l);
14289:          if(!(puzzle & 0x80180180000ll))
14290:            altDoSolve(20, 0x100000ll, puzzle | 0x80180180000ll,
14291:                    partsUsed | 0x400l);
14292:          if(!(puzzle & 0x180180080000ll))
14293:            altDoSolve(20, 0x100000ll, puzzle | 0x180180080000ll,
14294:                    partsUsed | 0x400l);
14295:       }
14296:       if (!(puzzle & 0x100180000ll)) {
14297:          if(!(puzzle & 0x100180180000ll))
14298:            altDoSolve(20, 0x100000ll, puzzle | 0x100180180000ll,
14299:                    partsUsed | 0x400l);
14300:          if(!(puzzle & 0x380180000ll))
14301:            altDoSolve(20, 0x100000ll, puzzle | 0x380180000ll,
14302:                    partsUsed | 0x400l);
14303:          if(!(puzzle & 0x180380000ll))
14304:            altDoSolve(20, 0x100000ll, puzzle | 0x180380000ll,
14305:                    partsUsed | 0x400l);
14306:          if(!(puzzle & 0x300380000ll))
14307:            altDoSolve(20, 0x100000ll, puzzle | 0x300380000ll,
14308:                    partsUsed | 0x400l);
14309:       }
14310:       if(!(puzzle & 0x90090080000ll))
14311:         altDoSolve(20, 0x100000ll, puzzle | 0x90090080000ll,
14312:                    partsUsed | 0x400l);
14313:       if(!(puzzle & 0x490480000ll))
14314:         altDoSolve(20, 0x100000ll, puzzle | 0x490480000ll,
14315:                    partsUsed | 0x400l);
14316:       if(!(puzzle & 0x6c80000ll))
14317:         altDoSolve(20, 0x100000ll, puzzle | 0x6c80000ll,
14318:                    partsUsed | 0x400l);
14319:     altpiece11at19:
14320:     break;
14321:    case 20:
14322:       if (partsUsed & 0x2l) goto altpiece2at20;
14323:       if(!(puzzle & 0x20120900000ll))
14324:         altDoSolve(21, 0x200000ll, puzzle | 0x20120900000ll,
14325:                    partsUsed | 0x2l);
14326:       if(!(puzzle & 0x2f00000ll))
14327:         altDoSolve(21, 0x200000ll, puzzle | 0x2f00000ll,
14328:                    partsUsed | 0x2l);
14329:       if(!(puzzle & 0x80180300000ll))
14330:         altDoSolve(21, 0x200000ll, puzzle | 0x80180300000ll,
14331:                    partsUsed | 0x2l);
14332:       if(!(puzzle & 0x4800900100000ll))
14333:         altDoSolve(21, 0x200000ll, puzzle | 0x4800900100000ll,
14334:                    partsUsed | 0x2l);
14335:       if(!(puzzle & 0x4004800900000ll))
14336:         altDoSolve(21, 0x200000ll, puzzle | 0x4004800900000ll,
14337:                    partsUsed | 0x2l);
14338:     altpiece2at20:
14339:       if (partsUsed & 0x4l) goto altpiece3at20;
14340:       if (!(puzzle & 0x100100100000ll)) {
14341:          if(!(puzzle & 0x920100100000ll))
14342:            altDoSolve(21, 0x200000ll, puzzle | 0x920100100000ll,
14343:                    partsUsed | 0x4l);
14344:          if(!(puzzle & 0x380100100000ll))
14345:            altDoSolve(21, 0x200000ll, puzzle | 0x380100100000ll,
14346:                    partsUsed | 0x4l);
14347:          if(!(puzzle & 0x104900100000ll))
14348:            altDoSolve(21, 0x200000ll, puzzle | 0x104900100000ll,
14349:                    partsUsed | 0x4l);
14350:       }
14351:       if(!(puzzle & 0xe900000ll))
14352:         altDoSolve(21, 0x200000ll, puzzle | 0xe900000ll,
14353:                    partsUsed | 0x4l);
14354:       if(!(puzzle & 0x800804900000ll))
14355:         altDoSolve(21, 0x200000ll, puzzle | 0x800804900000ll,
14356:                    partsUsed | 0x4l);
14357:     altpiece3at20:
14358:       if (partsUsed & 0x8l) goto altpiece4at20;
14359:       if(!(puzzle & 0x120100900000ll))
14360:         altDoSolve(21, 0x200000ll, puzzle | 0x120100900000ll,
14361:                    partsUsed | 0x8l);
14362:       if(!(puzzle & 0x180100300000ll))
14363:         altDoSolve(21, 0x200000ll, puzzle | 0x180100300000ll,
14364:                    partsUsed | 0x8l);
14365:       if(!(puzzle & 0x6b00000ll))
14366:         altDoSolve(21, 0x200000ll, puzzle | 0x6b00000ll,
14367:                    partsUsed | 0x8l);
14368:       if(!(puzzle & 0x4004900100000ll))
14369:         altDoSolve(21, 0x200000ll, puzzle | 0x4004900100000ll,
14370:                    partsUsed | 0x8l);
14371:       if(!(puzzle & 0x4800800900000ll))
14372:         altDoSolve(21, 0x200000ll, puzzle | 0x4800800900000ll,
14373:                    partsUsed | 0x8l);
14374:     altpiece4at20:
14375:       if (partsUsed & 0x10l) goto altpiece5at20;
14376:       if (!(puzzle & 0x100100100100000ll)) {
14377:          if(!(puzzle & 0x180100180100000ll))
14378:            altDoSolve(21, 0x200000ll, puzzle | 0x180100180100000ll,
14379:                    partsUsed | 0x10l);
14380:          if(!(puzzle & 0x900100900100000ll))
14381:            altDoSolve(21, 0x200000ll, puzzle | 0x900100900100000ll,
14382:                    partsUsed | 0x10l);
14383:          if(!(puzzle & 0x100900100900000ll))
14384:            altDoSolve(21, 0x200000ll, puzzle | 0x100900100900000ll,
14385:                    partsUsed | 0x10l);
14386:          if(!(puzzle & 0x300100300100000ll))
14387:            altDoSolve(21, 0x200000ll, puzzle | 0x300100300100000ll,
14388:                    partsUsed | 0x10l);
14389:          if(!(puzzle & 0x100300100300000ll))
14390:            altDoSolve(21, 0x200000ll, puzzle | 0x100300100300000ll,
14391:                    partsUsed | 0x10l);
14392:       }
14393:       if(!(puzzle & 0x4924100000ll))
14394:         altDoSolve(21, 0x200000ll, puzzle | 0x4924100000ll,
14395:                    partsUsed | 0x10l);
14396:       if(!(puzzle & 0x120100120100000ll))
14397:         altDoSolve(21, 0x200000ll, puzzle | 0x120100120100000ll,
14398:                    partsUsed | 0x10l);
14399:       if(!(puzzle & 0x800900800900000ll))
14400:         altDoSolve(21, 0x200000ll, puzzle | 0x800900800900000ll,
14401:                    partsUsed | 0x10l);
14402:       if(!(puzzle & 0x200300200300000ll))
14403:         altDoSolve(21, 0x200000ll, puzzle | 0x200300200300000ll,
14404:                    partsUsed | 0x10l);
14405:     altpiece5at20:
14406:       if (partsUsed & 0x20l) goto altpiece6at20;
14407:       if (!(puzzle & 0x100100100100000ll)) {
14408:          if(!(puzzle & 0x120100100100000ll))
14409:            altDoSolve(21, 0x200000ll, puzzle | 0x120100100100000ll,
14410:                    partsUsed | 0x20l);
14411:          if(!(puzzle & 0x180100100100000ll))
14412:            altDoSolve(21, 0x200000ll, puzzle | 0x180100100100000ll,
14413:                    partsUsed | 0x20l);
14414:          if(!(puzzle & 0x100100100900000ll))
14415:            altDoSolve(21, 0x200000ll, puzzle | 0x100100100900000ll,
14416:                    partsUsed | 0x20l);
14417:          if(!(puzzle & 0x900100100100000ll))
14418:            altDoSolve(21, 0x200000ll, puzzle | 0x900100100100000ll,
14419:                    partsUsed | 0x20l);
14420:          if(!(puzzle & 0x100100100300000ll))
14421:            altDoSolve(21, 0x200000ll, puzzle | 0x100100100300000ll,
14422:                    partsUsed | 0x20l);
14423:          if(!(puzzle & 0x300100100100000ll))
14424:            altDoSolve(21, 0x200000ll, puzzle | 0x300100100100000ll,
14425:                    partsUsed | 0x20l);
14426:       }
14427:       if(!(puzzle & 0x800800800900000ll))
14428:         altDoSolve(21, 0x200000ll, puzzle | 0x800800800900000ll,
14429:                    partsUsed | 0x20l);
14430:       if(!(puzzle & 0x200200200300000ll))
14431:         altDoSolve(21, 0x200000ll, puzzle | 0x200200200300000ll,
14432:                    partsUsed | 0x20l);
14433:     altpiece6at20:
14434:       if (partsUsed & 0x40l) goto altpiece7at20;
14435:       if (!(puzzle & 0x100100100100000ll)) {
14436:          if(!(puzzle & 0x100120100100000ll))
14437:            altDoSolve(21, 0x200000ll, puzzle | 0x100120100100000ll,
14438:                    partsUsed | 0x40l);
14439:          if(!(puzzle & 0x100100180100000ll))
14440:            altDoSolve(21, 0x200000ll, puzzle | 0x100100180100000ll,
14441:                    partsUsed | 0x40l);
14442:          if(!(puzzle & 0x100180100100000ll))
14443:            altDoSolve(21, 0x200000ll, puzzle | 0x100180100100000ll,
14444:                    partsUsed | 0x40l);
14445:          if(!(puzzle & 0x100100900100000ll))
14446:            altDoSolve(21, 0x200000ll, puzzle | 0x100100900100000ll,
14447:                    partsUsed | 0x40l);
14448:          if(!(puzzle & 0x100900100100000ll))
14449:            altDoSolve(21, 0x200000ll, puzzle | 0x100900100100000ll,
14450:                    partsUsed | 0x40l);
14451:          if(!(puzzle & 0x100100300100000ll))
14452:            altDoSolve(21, 0x200000ll, puzzle | 0x100100300100000ll,
14453:                    partsUsed | 0x40l);
14454:          if(!(puzzle & 0x100300100100000ll))
14455:            altDoSolve(21, 0x200000ll, puzzle | 0x100300100100000ll,
14456:                    partsUsed | 0x40l);
14457:       }
14458:       if(!(puzzle & 0x4920100000ll))
14459:         altDoSolve(21, 0x200000ll, puzzle | 0x4920100000ll,
14460:                    partsUsed | 0x40l);
14461:       if(!(puzzle & 0x100100120100000ll))
14462:         altDoSolve(21, 0x200000ll, puzzle | 0x100100120100000ll,
14463:                    partsUsed | 0x40l);
14464:     altpiece7at20:
14465:       if (partsUsed & 0x80l) goto altpiece8at20;
14466:       if(!(puzzle & 0x900100900000ll))
14467:         altDoSolve(21, 0x200000ll, puzzle | 0x900100900000ll,
14468:                    partsUsed | 0x80l);
14469:       if(!(puzzle & 0x900800900000ll))
14470:         altDoSolve(21, 0x200000ll, puzzle | 0x900800900000ll,
14471:                    partsUsed | 0x80l);
14472:       if(!(puzzle & 0x4904100000ll))
14473:         altDoSolve(21, 0x200000ll, puzzle | 0x4904100000ll,
14474:                    partsUsed | 0x80l);
14475:       if(!(puzzle & 0x4104900000ll))
14476:         altDoSolve(21, 0x200000ll, puzzle | 0x4104900000ll,
14477:                    partsUsed | 0x80l);
14478:       if(!(puzzle & 0xcb00000ll))
14479:         altDoSolve(21, 0x200000ll, puzzle | 0xcb00000ll,
14480:                    partsUsed | 0x80l);
14481:       if(!(puzzle & 0xd300000ll))
14482:         altDoSolve(21, 0x200000ll, puzzle | 0xd300000ll,
14483:                    partsUsed | 0x80l);
14484:       if(!(puzzle & 0x300200300000ll))
14485:         altDoSolve(21, 0x200000ll, puzzle | 0x300200300000ll,
14486:                    partsUsed | 0x80l);
14487:       if(!(puzzle & 0x300100300000ll))
14488:         altDoSolve(21, 0x200000ll, puzzle | 0x300100300000ll,
14489:                    partsUsed | 0x80l);
14490:     altpiece8at20:
14491:       if (partsUsed & 0x100l) goto altpiece9at20;
14492:       if(!(puzzle & 0x190100000ll))
14493:         altDoSolve(21, 0x200000ll, puzzle | 0x190100000ll,
14494:                    partsUsed | 0x100l);
14495:       if(!(puzzle & 0x180900000ll))
14496:         altDoSolve(21, 0x200000ll, puzzle | 0x180900000ll,
14497:                    partsUsed | 0x100l);
14498:       if(!(puzzle & 0x240300000ll))
14499:         altDoSolve(21, 0x200000ll, puzzle | 0x240300000ll,
14500:                    partsUsed | 0x100l);
14501:       if(!(puzzle & 0x200b00000ll))
14502:         altDoSolve(21, 0x200000ll, puzzle | 0x200b00000ll,
14503:                    partsUsed | 0x100l);
14504:       if(!(puzzle & 0x160100000ll))
14505:         altDoSolve(21, 0x200000ll, puzzle | 0x160100000ll,
14506:                    partsUsed | 0x100l);
14507:       if(!(puzzle & 0x400d00000ll))
14508:         altDoSolve(21, 0x200000ll, puzzle | 0x400d00000ll,
14509:                    partsUsed | 0x100l);
14510:       if(!(puzzle & 0xd00100000ll))
14511:         altDoSolve(21, 0x200000ll, puzzle | 0xd00100000ll,
14512:                    partsUsed | 0x100l);
14513:       if(!(puzzle & 0x900300000ll))
14514:         altDoSolve(21, 0x200000ll, puzzle | 0x900300000ll,
14515:                    partsUsed | 0x100l);
14516:       if(!(puzzle & 0x1300100000ll))
14517:         altDoSolve(21, 0x200000ll, puzzle | 0x1300100000ll,
14518:                    partsUsed | 0x100l);
14519:       if(!(puzzle & 0x1800900000ll))
14520:         altDoSolve(21, 0x200000ll, puzzle | 0x1800900000ll,
14521:                    partsUsed | 0x100l);
14522:       if(!(puzzle & 0x101900000ll))
14523:         altDoSolve(21, 0x200000ll, puzzle | 0x101900000ll,
14524:                    partsUsed | 0x100l);
14525:       if(!(puzzle & 0x1001300000ll))
14526:         altDoSolve(21, 0x200000ll, puzzle | 0x1001300000ll,
14527:                    partsUsed | 0x100l);
14528:     altpiece9at20:
14529:       if (partsUsed & 0x200l) goto altpiece10at20;
14530:       if (!(puzzle & 0x100100100000ll)) {
14531:          if(!(puzzle & 0x100120900000ll))
14532:            altDoSolve(21, 0x200000ll, puzzle | 0x100120900000ll,
14533:                    partsUsed | 0x200l);
14534:          if(!(puzzle & 0x120900100000ll))
14535:            altDoSolve(21, 0x200000ll, puzzle | 0x120900100000ll,
14536:                    partsUsed | 0x200l);
14537:          if(!(puzzle & 0x900120100000ll))
14538:            altDoSolve(21, 0x200000ll, puzzle | 0x900120100000ll,
14539:                    partsUsed | 0x200l);
14540:          if(!(puzzle & 0x100180300000ll))
14541:            altDoSolve(21, 0x200000ll, puzzle | 0x100180300000ll,
14542:                    partsUsed | 0x200l);
14543:          if(!(puzzle & 0x300180100000ll))
14544:            altDoSolve(21, 0x200000ll, puzzle | 0x300180100000ll,
14545:                    partsUsed | 0x200l);
14546:          if(!(puzzle & 0x180300100000ll))
14547:            altDoSolve(21, 0x200000ll, puzzle | 0x180300100000ll,
14548:                    partsUsed | 0x200l);
14549:       }
14550:       if (!(puzzle & 0x900100000ll)) {
14551:          if(!(puzzle & 0x800920100000ll))
14552:            altDoSolve(21, 0x200000ll, puzzle | 0x800920100000ll,
14553:                    partsUsed | 0x200l);
14554:          if(!(puzzle & 0x20920100000ll))
14555:            altDoSolve(21, 0x200000ll, puzzle | 0x20920100000ll,
14556:                    partsUsed | 0x200l);
14557:          if(!(puzzle & 0x804900100000ll))
14558:            altDoSolve(21, 0x200000ll, puzzle | 0x804900100000ll,
14559:                    partsUsed | 0x200l);
14560:       }
14561:       if (!(puzzle & 0xd00000ll)) {
14562:          if(!(puzzle & 0x9d00000ll))
14563:            altDoSolve(21, 0x200000ll, puzzle | 0x9d00000ll,
14564:                    partsUsed | 0x200l);
14565:          if(!(puzzle & 0x3d00000ll))
14566:            altDoSolve(21, 0x200000ll, puzzle | 0x3d00000ll,
14567:                    partsUsed | 0x200l);
14568:          if(!(puzzle & 0x4f00000ll))
14569:            altDoSolve(21, 0x200000ll, puzzle | 0x4f00000ll,
14570:                    partsUsed | 0x200l);
14571:          if(!(puzzle & 0xcd00000ll))
14572:            altDoSolve(21, 0x200000ll, puzzle | 0xcd00000ll,
14573:                    partsUsed | 0x200l);
14574:       }
14575:       if(!(puzzle & 0x7900000ll))
14576:         altDoSolve(21, 0x200000ll, puzzle | 0x7900000ll,
14577:                    partsUsed | 0x200l);
14578:       if(!(puzzle & 0x80380100000ll))
14579:         altDoSolve(21, 0x200000ll, puzzle | 0x80380100000ll,
14580:                    partsUsed | 0x200l);
14581:       if(!(puzzle & 0x200380100000ll))
14582:         altDoSolve(21, 0x200000ll, puzzle | 0x200380100000ll,
14583:                    partsUsed | 0x200l);
14584:       if(!(puzzle & 0x804800900000ll))
14585:         altDoSolve(21, 0x200000ll, puzzle | 0x804800900000ll,
14586:                    partsUsed | 0x200l);
14587:     altpiece10at20:
14588:       if (partsUsed & 0x400l) goto altpiece11at20;
14589:       if (!(puzzle & 0x800900000ll)) {
14590:          if(!(puzzle & 0x100900900000ll))
14591:            altDoSolve(21, 0x200000ll, puzzle | 0x100900900000ll,
14592:                    partsUsed | 0x400l);
14593:          if(!(puzzle & 0x4900900000ll))
14594:            altDoSolve(21, 0x200000ll, puzzle | 0x4900900000ll,
14595:                    partsUsed | 0x400l);
14596:          if(!(puzzle & 0x4804900000ll))
14597:            altDoSolve(21, 0x200000ll, puzzle | 0x4804900000ll,
14598:                    partsUsed | 0x400l);
14599:          if(!(puzzle & 0x904900000ll))
14600:            altDoSolve(21, 0x200000ll, puzzle | 0x904900000ll,
14601:                    partsUsed | 0x400l);
14602:          if(!(puzzle & 0x800900900000ll))
14603:            altDoSolve(21, 0x200000ll, puzzle | 0x800900900000ll,
14604:                    partsUsed | 0x400l);
14605:       }
14606:       if (!(puzzle & 0x100100100000ll)) {
14607:          if(!(puzzle & 0x900900100000ll))
14608:            altDoSolve(21, 0x200000ll, puzzle | 0x900900100000ll,
14609:                    partsUsed | 0x400l);
14610:          if(!(puzzle & 0x100300300000ll))
14611:            altDoSolve(21, 0x200000ll, puzzle | 0x100300300000ll,
14612:                    partsUsed | 0x400l);
14613:          if(!(puzzle & 0x300300100000ll))
14614:            altDoSolve(21, 0x200000ll, puzzle | 0x300300100000ll,
14615:                    partsUsed | 0x400l);
14616:       }
14617:       if (!(puzzle & 0x1900000ll)) {
14618:          if(!(puzzle & 0x5b00000ll))
14619:            altDoSolve(21, 0x200000ll, puzzle | 0x5b00000ll,
14620:                    partsUsed | 0x400l);
14621:          if(!(puzzle & 0x9b00000ll))
14622:            altDoSolve(21, 0x200000ll, puzzle | 0x9b00000ll,
14623:                    partsUsed | 0x400l);
14624:          if(!(puzzle & 0xd900000ll))
14625:            altDoSolve(21, 0x200000ll, puzzle | 0xd900000ll,
14626:                    partsUsed | 0x400l);
14627:       }
14628:       if(!(puzzle & 0x120120100000ll))
14629:         altDoSolve(21, 0x200000ll, puzzle | 0x120120100000ll,
14630:                    partsUsed | 0x400l);
14631:       if(!(puzzle & 0x920900000ll))
14632:         altDoSolve(21, 0x200000ll, puzzle | 0x920900000ll,
14633:                    partsUsed | 0x400l);
14634:       if(!(puzzle & 0x1f00000ll))
14635:         altDoSolve(21, 0x200000ll, puzzle | 0x1f00000ll,
14636:                    partsUsed | 0x400l);
14637:       if(!(puzzle & 0x6d00000ll))
14638:         altDoSolve(21, 0x200000ll, puzzle | 0x6d00000ll,
14639:                    partsUsed | 0x400l);
14640:       if(!(puzzle & 0x380300000ll))
14641:         altDoSolve(21, 0x200000ll, puzzle | 0x380300000ll,
14642:                    partsUsed | 0x400l);
14643:       if(!(puzzle & 0x180180100000ll))
14644:         altDoSolve(21, 0x200000ll, puzzle | 0x180180100000ll,
14645:                    partsUsed | 0x400l);
14646:       if(!(puzzle & 0x200300300000ll))
14647:         altDoSolve(21, 0x200000ll, puzzle | 0x200300300000ll,
14648:                    partsUsed | 0x400l);
14649:     altpiece11at20:
14650:     break;
14651:    case 21:
14652:       if (partsUsed & 0x2l) goto altpiece2at21;
14653:       if(!(puzzle & 0x40241200000ll))
14654:         altDoSolve(22, 0x400000ll, puzzle | 0x40241200000ll,
14655:                    partsUsed | 0x2l);
14656:       if(!(puzzle & 0x7a00000ll))
14657:         altDoSolve(22, 0x400000ll, puzzle | 0x7a00000ll,
14658:                    partsUsed | 0x2l);
14659:       if(!(puzzle & 0x180300200000ll))
14660:         altDoSolve(22, 0x400000ll, puzzle | 0x180300200000ll,
14661:                    partsUsed | 0x2l);
14662:       if(!(puzzle & 0x9001200200000ll))
14663:         altDoSolve(22, 0x400000ll, puzzle | 0x9001200200000ll,
14664:                    partsUsed | 0x2l);
14665:       if(!(puzzle & 0x8009001200000ll))
14666:         altDoSolve(22, 0x400000ll, puzzle | 0x8009001200000ll,
14667:                    partsUsed | 0x2l);
14668:     altpiece2at21:
14669:       if (partsUsed & 0x4l) goto altpiece3at21;
14670:       if (!(puzzle & 0x200200200000ll)) {
14671:          if(!(puzzle & 0x1240200200000ll))
14672:            altDoSolve(22, 0x400000ll, puzzle | 0x1240200200000ll,
14673:                    partsUsed | 0x4l);
14674:          if(!(puzzle & 0x200380200000ll))
14675:            altDoSolve(22, 0x400000ll, puzzle | 0x200380200000ll,
14676:                    partsUsed | 0x4l);
14677:          if(!(puzzle & 0x209200200000ll))
14678:            altDoSolve(22, 0x400000ll, puzzle | 0x209200200000ll,
14679:                    partsUsed | 0x4l);
14680:       }
14681:       if(!(puzzle & 0x9e00000ll))
14682:         altDoSolve(22, 0x400000ll, puzzle | 0x9e00000ll,
14683:                    partsUsed | 0x4l);
14684:       if(!(puzzle & 0x1001009200000ll))
14685:         altDoSolve(22, 0x400000ll, puzzle | 0x1001009200000ll,
14686:                    partsUsed | 0x4l);
14687:     altpiece3at21:
14688:       if (partsUsed & 0x8l) goto altpiece4at21;
14689:       if(!(puzzle & 0x240201200000ll))
14690:         altDoSolve(22, 0x400000ll, puzzle | 0x240201200000ll,
14691:                    partsUsed | 0x8l);
14692:       if(!(puzzle & 0x3e00000ll))
14693:         altDoSolve(22, 0x400000ll, puzzle | 0x3e00000ll,
14694:                    partsUsed | 0x8l);
14695:       if(!(puzzle & 0x80380200000ll))
14696:         altDoSolve(22, 0x400000ll, puzzle | 0x80380200000ll,
14697:                    partsUsed | 0x8l);
14698:       if(!(puzzle & 0x8009200200000ll))
14699:         altDoSolve(22, 0x400000ll, puzzle | 0x8009200200000ll,
14700:                    partsUsed | 0x8l);
14701:       if(!(puzzle & 0x9001001200000ll))
14702:         altDoSolve(22, 0x400000ll, puzzle | 0x9001001200000ll,
14703:                    partsUsed | 0x8l);
14704:     altpiece4at21:
14705:       if (partsUsed & 0x10l) goto altpiece5at21;
14706:       if (!(puzzle & 0x200200200200000ll)) {
14707:          if(!(puzzle & 0x300200300200000ll))
14708:            altDoSolve(22, 0x400000ll, puzzle | 0x300200300200000ll,
14709:                    partsUsed | 0x10l);
14710:          if(!(puzzle & 0x1200201200200000ll))
14711:            altDoSolve(22, 0x400000ll, puzzle | 0x1200201200200000ll,
14712:                    partsUsed | 0x10l);
14713:          if(!(puzzle & 0x201200201200000ll))
14714:            altDoSolve(22, 0x400000ll, puzzle | 0x201200201200000ll,
14715:                    partsUsed | 0x10l);
14716:       }
14717:       if(!(puzzle & 0x9248200000ll))
14718:         altDoSolve(22, 0x400000ll, puzzle | 0x9248200000ll,
14719:                    partsUsed | 0x10l);
14720:       if(!(puzzle & 0x240200240200000ll))
14721:         altDoSolve(22, 0x400000ll, puzzle | 0x240200240200000ll,
14722:                    partsUsed | 0x10l);
14723:       if(!(puzzle & 0x1001201001200000ll))
14724:         altDoSolve(22, 0x400000ll, puzzle | 0x1001201001200000ll,
14725:                    partsUsed | 0x10l);
14726:     altpiece5at21:
14727:       if (partsUsed & 0x20l) goto altpiece6at21;
14728:       if (!(puzzle & 0x200200200200000ll)) {
14729:          if(!(puzzle & 0x240200200200000ll))
14730:            altDoSolve(22, 0x400000ll, puzzle | 0x240200200200000ll,
14731:                    partsUsed | 0x20l);
14732:          if(!(puzzle & 0x300200200200000ll))
14733:            altDoSolve(22, 0x400000ll, puzzle | 0x300200200200000ll,
14734:                    partsUsed | 0x20l);
14735:          if(!(puzzle & 0x200200201200000ll))
14736:            altDoSolve(22, 0x400000ll, puzzle | 0x200200201200000ll,
14737:                    partsUsed | 0x20l);
14738:          if(!(puzzle & 0x1200200200200000ll))
14739:            altDoSolve(22, 0x400000ll, puzzle | 0x1200200200200000ll,
14740:                    partsUsed | 0x20l);
14741:       }
14742:       if(!(puzzle & 0x1001001001200000ll))
14743:         altDoSolve(22, 0x400000ll, puzzle | 0x1001001001200000ll,
14744:                    partsUsed | 0x20l);
14745:     altpiece6at21:
14746:       if (partsUsed & 0x40l) goto altpiece7at21;
14747:       if (!(puzzle & 0x200200200200000ll)) {
14748:          if(!(puzzle & 0x200240200200000ll))
14749:            altDoSolve(22, 0x400000ll, puzzle | 0x200240200200000ll,
14750:                    partsUsed | 0x40l);
14751:          if(!(puzzle & 0x200200300200000ll))
14752:            altDoSolve(22, 0x400000ll, puzzle | 0x200200300200000ll,
14753:                    partsUsed | 0x40l);
14754:          if(!(puzzle & 0x200300200200000ll))
14755:            altDoSolve(22, 0x400000ll, puzzle | 0x200300200200000ll,
14756:                    partsUsed | 0x40l);
14757:          if(!(puzzle & 0x200201200200000ll))
14758:            altDoSolve(22, 0x400000ll, puzzle | 0x200201200200000ll,
14759:                    partsUsed | 0x40l);
14760:          if(!(puzzle & 0x201200200200000ll))
14761:            altDoSolve(22, 0x400000ll, puzzle | 0x201200200200000ll,
14762:                    partsUsed | 0x40l);
14763:       }
14764:       if(!(puzzle & 0x9240200000ll))
14765:         altDoSolve(22, 0x400000ll, puzzle | 0x9240200000ll,
14766:                    partsUsed | 0x40l);
14767:       if(!(puzzle & 0x200200240200000ll))
14768:         altDoSolve(22, 0x400000ll, puzzle | 0x200200240200000ll,
14769:                    partsUsed | 0x40l);
14770:     altpiece7at21:
14771:       if (partsUsed & 0x80l) goto altpiece8at21;
14772:       if(!(puzzle & 0x1200201200000ll))
14773:         altDoSolve(22, 0x400000ll, puzzle | 0x1200201200000ll,
14774:                    partsUsed | 0x80l);
14775:       if(!(puzzle & 0x1201001200000ll))
14776:         altDoSolve(22, 0x400000ll, puzzle | 0x1201001200000ll,
14777:                    partsUsed | 0x80l);
14778:       if(!(puzzle & 0x9208200000ll))
14779:         altDoSolve(22, 0x400000ll, puzzle | 0x9208200000ll,
14780:                    partsUsed | 0x80l);
14781:       if(!(puzzle & 0x8209200000ll))
14782:         altDoSolve(22, 0x400000ll, puzzle | 0x8209200000ll,
14783:                    partsUsed | 0x80l);
14784:     altpiece8at21:
14785:       if (partsUsed & 0x100l) goto altpiece9at21;
14786:       if(!(puzzle & 0x320200000ll))
14787:         altDoSolve(22, 0x400000ll, puzzle | 0x320200000ll,
14788:                    partsUsed | 0x100l);
14789:       if(!(puzzle & 0x301200000ll))
14790:         altDoSolve(22, 0x400000ll, puzzle | 0x301200000ll,
14791:                    partsUsed | 0x100l);
14792:       if(!(puzzle & 0x801a00000ll))
14793:         altDoSolve(22, 0x400000ll, puzzle | 0x801a00000ll,
14794:                    partsUsed | 0x100l);
14795:       if(!(puzzle & 0x1a00200000ll))
14796:         altDoSolve(22, 0x400000ll, puzzle | 0x1a00200000ll,
14797:                    partsUsed | 0x100l);
14798:     altpiece9at21:
14799:       if (partsUsed & 0x200l) goto altpiece10at21;
14800:       if (!(puzzle & 0x200200200000ll)) {
14801:          if(!(puzzle & 0x200241200000ll))
14802:            altDoSolve(22, 0x400000ll, puzzle | 0x200241200000ll,
14803:                    partsUsed | 0x200l);
14804:          if(!(puzzle & 0x241200200000ll))
14805:            altDoSolve(22, 0x400000ll, puzzle | 0x241200200000ll,
14806:                    partsUsed | 0x200l);
14807:          if(!(puzzle & 0x1200240200000ll))
14808:            altDoSolve(22, 0x400000ll, puzzle | 0x1200240200000ll,
14809:                    partsUsed | 0x200l);
14810:       }
14811:       if (!(puzzle & 0x1200200000ll)) {
14812:          if(!(puzzle & 0x1001240200000ll))
14813:            altDoSolve(22, 0x400000ll, puzzle | 0x1001240200000ll,
14814:                    partsUsed | 0x200l);
14815:          if(!(puzzle & 0x41240200000ll))
14816:            altDoSolve(22, 0x400000ll, puzzle | 0x41240200000ll,
14817:                    partsUsed | 0x200l);
14818:          if(!(puzzle & 0x1009200200000ll))
14819:            altDoSolve(22, 0x400000ll, puzzle | 0x1009200200000ll,
14820:                    partsUsed | 0x200l);
14821:       }
14822:       if(!(puzzle & 0x5e00000ll))
14823:         altDoSolve(22, 0x400000ll, puzzle | 0x5e00000ll,
14824:                    partsUsed | 0x200l);
14825:       if(!(puzzle & 0x100380200000ll))
14826:         altDoSolve(22, 0x400000ll, puzzle | 0x100380200000ll,
14827:                    partsUsed | 0x200l);
14828:       if(!(puzzle & 0x1009001200000ll))
14829:         altDoSolve(22, 0x400000ll, puzzle | 0x1009001200000ll,
14830:                    partsUsed | 0x200l);
14831:     altpiece10at21:
14832:       if (partsUsed & 0x400l) goto altpiece11at21;
14833:       if (!(puzzle & 0x9200000ll)) {
14834:          if(!(puzzle & 0xda00000ll))
14835:            altDoSolve(22, 0x400000ll, puzzle | 0xda00000ll,
14836:                    partsUsed | 0x400l);
14837:          if(!(puzzle & 0x9009200000ll))
14838:            altDoSolve(22, 0x400000ll, puzzle | 0x9009200000ll,
14839:                    partsUsed | 0x400l);
14840:          if(!(puzzle & 0x1209200000ll))
14841:            altDoSolve(22, 0x400000ll, puzzle | 0x1209200000ll,
14842:                    partsUsed | 0x400l);
14843:       }
14844:       if (!(puzzle & 0x200200200000ll)) {
14845:          if(!(puzzle & 0x300300200000ll))
14846:            altDoSolve(22, 0x400000ll, puzzle | 0x300300200000ll,
14847:                    partsUsed | 0x400l);
14848:          if(!(puzzle & 0x201201200000ll))
14849:            altDoSolve(22, 0x400000ll, puzzle | 0x201201200000ll,
14850:                    partsUsed | 0x400l);
14851:          if(!(puzzle & 0x1201200200000ll))
14852:            altDoSolve(22, 0x400000ll, puzzle | 0x1201200200000ll,
14853:                    partsUsed | 0x400l);
14854:       }
14855:       if(!(puzzle & 0x240240200000ll))
14856:         altDoSolve(22, 0x400000ll, puzzle | 0x240240200000ll,
14857:                    partsUsed | 0x400l);
14858:       if(!(puzzle & 0x1241200000ll))
14859:         altDoSolve(22, 0x400000ll, puzzle | 0x1241200000ll,
14860:                    partsUsed | 0x400l);
14861:       if(!(puzzle & 0x9201200000ll))
14862:         altDoSolve(22, 0x400000ll, puzzle | 0x9201200000ll,
14863:                    partsUsed | 0x400l);
14864:       if(!(puzzle & 0x1001201200000ll))
14865:         altDoSolve(22, 0x400000ll, puzzle | 0x1001201200000ll,
14866:                    partsUsed | 0x400l);
14867:     altpiece11at21:
14868:     break;
14869:    case 22:
14870:       if (partsUsed & 0x2l) goto altpiece2at22;
14871:       if(!(puzzle & 0x90480400000ll))
14872:         altDoSolve(23, 0x800000ll, puzzle | 0x90480400000ll,
14873:                    partsUsed | 0x2l);
14874:       if(!(puzzle & 0x80482400000ll))
14875:         altDoSolve(23, 0x800000ll, puzzle | 0x80482400000ll,
14876:                    partsUsed | 0x2l);
14877:       if(!(puzzle & 0x1001800c00000ll))
14878:         altDoSolve(23, 0x800000ll, puzzle | 0x1001800c00000ll,
14879:                    partsUsed | 0x2l);
14880:       if(!(puzzle & 0x1800c00400000ll))
14881:         altDoSolve(23, 0x800000ll, puzzle | 0x1800c00400000ll,
14882:                    partsUsed | 0x2l);
14883:     altpiece2at22:
14884:       if (partsUsed & 0x4l) goto altpiece3at22;
14885:       if (!(puzzle & 0x400400400000ll)) {
14886:          if(!(puzzle & 0x400490400000ll))
14887:            altDoSolve(23, 0x800000ll, puzzle | 0x400490400000ll,
14888:                    partsUsed | 0x4l);
14889:          if(!(puzzle & 0x2480400400000ll))
14890:            altDoSolve(23, 0x800000ll, puzzle | 0x2480400400000ll,
14891:                    partsUsed | 0x4l);
14892:          if(!(puzzle & 0x401c00400000ll))
14893:            altDoSolve(23, 0x800000ll, puzzle | 0x401c00400000ll,
14894:                    partsUsed | 0x4l);
14895:       }
14896:       if(!(puzzle & 0x800801c00000ll))
14897:         altDoSolve(23, 0x800000ll, puzzle | 0x800801c00000ll,
14898:                    partsUsed | 0x4l);
14899:     altpiece3at22:
14900:       if (partsUsed & 0x8l) goto altpiece4at22;
14901:       if(!(puzzle & 0x10490400000ll))
14902:         altDoSolve(23, 0x800000ll, puzzle | 0x10490400000ll,
14903:                    partsUsed | 0x8l);
14904:       if(!(puzzle & 0x480402400000ll))
14905:         altDoSolve(23, 0x800000ll, puzzle | 0x480402400000ll,
14906:                    partsUsed | 0x8l);
14907:       if(!(puzzle & 0x1001c00400000ll))
14908:         altDoSolve(23, 0x800000ll, puzzle | 0x1001c00400000ll,
14909:                    partsUsed | 0x8l);
14910:       if(!(puzzle & 0x1800800c00000ll))
14911:         altDoSolve(23, 0x800000ll, puzzle | 0x1800800c00000ll,
14912:                    partsUsed | 0x8l);
14913:     altpiece4at22:
14914:       if (partsUsed & 0x10l) goto altpiece5at22;
14915:       if (!(puzzle & 0x400400400400000ll)) {
14916:          if(!(puzzle & 0x480400480400000ll))
14917:            altDoSolve(23, 0x800000ll, puzzle | 0x480400480400000ll,
14918:                    partsUsed | 0x10l);
14919:          if(!(puzzle & 0x2400402400400000ll))
14920:            altDoSolve(23, 0x800000ll, puzzle | 0x2400402400400000ll,
14921:                    partsUsed | 0x10l);
14922:          if(!(puzzle & 0x402400402400000ll))
14923:            altDoSolve(23, 0x800000ll, puzzle | 0x402400402400000ll,
14924:                    partsUsed | 0x10l);
14925:          if(!(puzzle & 0xc00400c00400000ll))
14926:            altDoSolve(23, 0x800000ll, puzzle | 0xc00400c00400000ll,
14927:                    partsUsed | 0x10l);
14928:          if(!(puzzle & 0x400c00400c00000ll))
14929:            altDoSolve(23, 0x800000ll, puzzle | 0x400c00400c00000ll,
14930:                    partsUsed | 0x10l);
14931:       }
14932:       if(!(puzzle & 0x2002402002400000ll))
14933:         altDoSolve(23, 0x800000ll, puzzle | 0x2002402002400000ll,
14934:                    partsUsed | 0x10l);
14935:       if(!(puzzle & 0x800c00800c00000ll))
14936:         altDoSolve(23, 0x800000ll, puzzle | 0x800c00800c00000ll,
14937:                    partsUsed | 0x10l);
14938:     altpiece5at22:
14939:       if (partsUsed & 0x20l) goto altpiece6at22;
14940:       if (!(puzzle & 0x400400400400000ll)) {
14941:          if(!(puzzle & 0x480400400400000ll))
14942:            altDoSolve(23, 0x800000ll, puzzle | 0x480400400400000ll,
14943:                    partsUsed | 0x20l);
14944:          if(!(puzzle & 0x400400402400000ll))
14945:            altDoSolve(23, 0x800000ll, puzzle | 0x400400402400000ll,
14946:                    partsUsed | 0x20l);
14947:          if(!(puzzle & 0x2400400400400000ll))
14948:            altDoSolve(23, 0x800000ll, puzzle | 0x2400400400400000ll,
14949:                    partsUsed | 0x20l);
14950:          if(!(puzzle & 0x400400400c00000ll))
14951:            altDoSolve(23, 0x800000ll, puzzle | 0x400400400c00000ll,
14952:                    partsUsed | 0x20l);
14953:          if(!(puzzle & 0xc00400400400000ll))
14954:            altDoSolve(23, 0x800000ll, puzzle | 0xc00400400400000ll,
14955:                    partsUsed | 0x20l);
14956:       }
14957:       if(!(puzzle & 0x2002002002400000ll))
14958:         altDoSolve(23, 0x800000ll, puzzle | 0x2002002002400000ll,
14959:                    partsUsed | 0x20l);
14960:       if(!(puzzle & 0x800800800c00000ll))
14961:         altDoSolve(23, 0x800000ll, puzzle | 0x800800800c00000ll,
14962:                    partsUsed | 0x20l);
14963:     altpiece6at22:
14964:       if (partsUsed & 0x40l) goto altpiece7at22;
14965:       if (!(puzzle & 0x400400400400000ll)) {
14966:          if(!(puzzle & 0x400480400400000ll))
14967:            altDoSolve(23, 0x800000ll, puzzle | 0x400480400400000ll,
14968:                    partsUsed | 0x40l);
14969:          if(!(puzzle & 0x400402400400000ll))
14970:            altDoSolve(23, 0x800000ll, puzzle | 0x400402400400000ll,
14971:                    partsUsed | 0x40l);
14972:          if(!(puzzle & 0x402400400400000ll))
14973:            altDoSolve(23, 0x800000ll, puzzle | 0x402400400400000ll,
14974:                    partsUsed | 0x40l);
14975:          if(!(puzzle & 0x400400c00400000ll))
14976:            altDoSolve(23, 0x800000ll, puzzle | 0x400400c00400000ll,
14977:                    partsUsed | 0x40l);
14978:          if(!(puzzle & 0x400c00400400000ll))
14979:            altDoSolve(23, 0x800000ll, puzzle | 0x400c00400400000ll,
14980:                    partsUsed | 0x40l);
14981:       }
14982:       if(!(puzzle & 0x2490400000ll))
14983:         altDoSolve(23, 0x800000ll, puzzle | 0x2490400000ll,
14984:                    partsUsed | 0x40l);
14985:       if(!(puzzle & 0x400400480400000ll))
14986:         altDoSolve(23, 0x800000ll, puzzle | 0x400400480400000ll,
14987:                    partsUsed | 0x40l);
14988:     altpiece7at22:
14989:       if (partsUsed & 0x80l) goto altpiece8at22;
14990:       if(!(puzzle & 0x2400402400000ll))
14991:         altDoSolve(23, 0x800000ll, puzzle | 0x2400402400000ll,
14992:                    partsUsed | 0x80l);
14993:       if(!(puzzle & 0x2402002400000ll))
14994:         altDoSolve(23, 0x800000ll, puzzle | 0x2402002400000ll,
14995:                    partsUsed | 0x80l);
14996:       if(!(puzzle & 0xbc00000ll))
14997:         altDoSolve(23, 0x800000ll, puzzle | 0xbc00000ll,
14998:                    partsUsed | 0x80l);
14999:       if(!(puzzle & 0xf400000ll))
15000:         altDoSolve(23, 0x800000ll, puzzle | 0xf400000ll,
15001:                    partsUsed | 0x80l);
15002:       if(!(puzzle & 0xc00800c00000ll))
15003:         altDoSolve(23, 0x800000ll, puzzle | 0xc00800c00000ll,
15004:                    partsUsed | 0x80l);
15005:       if(!(puzzle & 0xc00400c00000ll))
15006:         altDoSolve(23, 0x800000ll, puzzle | 0xc00400c00000ll,
15007:                    partsUsed | 0x80l);
15008:       if(!(puzzle & 0x1c01400000ll))
15009:         altDoSolve(23, 0x800000ll, puzzle | 0x1c01400000ll,
15010:                    partsUsed | 0x80l);
15011:       if(!(puzzle & 0x1401c00000ll))
15012:         altDoSolve(23, 0x800000ll, puzzle | 0x1401c00000ll,
15013:                    partsUsed | 0x80l);
15014:     altpiece8at22:
15015:       if (partsUsed & 0x100l) goto altpiece9at22;
15016:       if(!(puzzle & 0x900c00000ll))
15017:         altDoSolve(23, 0x800000ll, puzzle | 0x900c00000ll,
15018:                    partsUsed | 0x100l);
15019:       if(!(puzzle & 0x802c00000ll))
15020:         altDoSolve(23, 0x800000ll, puzzle | 0x802c00000ll,
15021:                    partsUsed | 0x100l);
15022:       if(!(puzzle & 0x580400000ll))
15023:         altDoSolve(23, 0x800000ll, puzzle | 0x580400000ll,
15024:                    partsUsed | 0x100l);
15025:       if(!(puzzle & 0x4c00400000ll))
15026:         altDoSolve(23, 0x800000ll, puzzle | 0x4c00400000ll,
15027:                    partsUsed | 0x100l);
15028:       if(!(puzzle & 0x2400c00000ll))
15029:         altDoSolve(23, 0x800000ll, puzzle | 0x2400c00000ll,
15030:                    partsUsed | 0x100l);
15031:       if(!(puzzle & 0x6002400000ll))
15032:         altDoSolve(23, 0x800000ll, puzzle | 0x6002400000ll,
15033:                    partsUsed | 0x100l);
15034:       if(!(puzzle & 0x406400000ll))
15035:         altDoSolve(23, 0x800000ll, puzzle | 0x406400000ll,
15036:                    partsUsed | 0x100l);
15037:       if(!(puzzle & 0x4004c00000ll))
15038:         altDoSolve(23, 0x800000ll, puzzle | 0x4004c00000ll,
15039:                    partsUsed | 0x100l);
15040:     altpiece9at22:
15041:       if (partsUsed & 0x200l) goto altpiece10at22;
15042:       if (!(puzzle & 0x480400000ll)) {
15043:          if(!(puzzle & 0x80490400000ll))
15044:            altDoSolve(23, 0x800000ll, puzzle | 0x80490400000ll,
15045:                    partsUsed | 0x200l);
15046:          if(!(puzzle & 0x400482400000ll))
15047:            altDoSolve(23, 0x800000ll, puzzle | 0x400482400000ll,
15048:                    partsUsed | 0x200l);
15049:          if(!(puzzle & 0x2002480400000ll))
15050:            altDoSolve(23, 0x800000ll, puzzle | 0x2002480400000ll,
15051:                    partsUsed | 0x200l);
15052:          if(!(puzzle & 0x2400480400000ll))
15053:            altDoSolve(23, 0x800000ll, puzzle | 0x2400480400000ll,
15054:                    partsUsed | 0x200l);
15055:          if(!(puzzle & 0x82480400000ll))
15056:            altDoSolve(23, 0x800000ll, puzzle | 0x82480400000ll,
15057:                    partsUsed | 0x200l);
15058:       }
15059:       if(!(puzzle & 0x482400400000ll))
15060:         altDoSolve(23, 0x800000ll, puzzle | 0x482400400000ll,
15061:                    partsUsed | 0x200l);
15062:       if(!(puzzle & 0x801800c00000ll))
15063:         altDoSolve(23, 0x800000ll, puzzle | 0x801800c00000ll,
15064:                    partsUsed | 0x200l);
15065:       if(!(puzzle & 0x801c00400000ll))
15066:         altDoSolve(23, 0x800000ll, puzzle | 0x801c00400000ll,
15067:                    partsUsed | 0x200l);
15068:     altpiece10at22:
15069:       if (partsUsed & 0x400l) goto altpiece11at22;
15070:       if (!(puzzle & 0x2400400000ll)) {
15071:          if(!(puzzle & 0x402402400000ll))
15072:            altDoSolve(23, 0x800000ll, puzzle | 0x402402400000ll,
15073:                    partsUsed | 0x400l);
15074:          if(!(puzzle & 0x2402400400000ll))
15075:            altDoSolve(23, 0x800000ll, puzzle | 0x2402400400000ll,
15076:                    partsUsed | 0x400l);
15077:          if(!(puzzle & 0x2002402400000ll))
15078:            altDoSolve(23, 0x800000ll, puzzle | 0x2002402400000ll,
15079:                    partsUsed | 0x400l);
15080:       }
15081:       if (!(puzzle & 0x4c00000ll)) {
15082:          if(!(puzzle & 0xdc00000ll))
15083:            altDoSolve(23, 0x800000ll, puzzle | 0xdc00000ll,
15084:                    partsUsed | 0x400l);
15085:          if(!(puzzle & 0x7c00000ll))
15086:            altDoSolve(23, 0x800000ll, puzzle | 0x7c00000ll,
15087:                    partsUsed | 0x400l);
15088:          if(!(puzzle & 0xec00000ll))
15089:            altDoSolve(23, 0x800000ll, puzzle | 0xec00000ll,
15090:                    partsUsed | 0x400l);
15091:       }
15092:       if (!(puzzle & 0xc00400000ll)) {
15093:          if(!(puzzle & 0x800c00c00000ll))
15094:            altDoSolve(23, 0x800000ll, puzzle | 0x800c00c00000ll,
15095:                    partsUsed | 0x400l);
15096:          if(!(puzzle & 0x400c00c00000ll))
15097:            altDoSolve(23, 0x800000ll, puzzle | 0x400c00c00000ll,
15098:                    partsUsed | 0x400l);
15099:          if(!(puzzle & 0x1c00c00000ll))
15100:            altDoSolve(23, 0x800000ll, puzzle | 0x1c00c00000ll,
15101:                    partsUsed | 0x400l);
15102:          if(!(puzzle & 0xc00c00400000ll))
15103:            altDoSolve(23, 0x800000ll, puzzle | 0xc00c00400000ll,
15104:                    partsUsed | 0x400l);
15105:          if(!(puzzle & 0xc01c00000ll))
15106:            altDoSolve(23, 0x800000ll, puzzle | 0xc01c00000ll,
15107:                    partsUsed | 0x400l);
15108:       }
15109:       if(!(puzzle & 0x480480400000ll))
15110:         altDoSolve(23, 0x800000ll, puzzle | 0x480480400000ll,
15111:                    partsUsed | 0x400l);
15112:       if(!(puzzle & 0x2482400000ll))
15113:         altDoSolve(23, 0x800000ll, puzzle | 0x2482400000ll,
15114:                    partsUsed | 0x400l);
15115:       if(!(puzzle & 0x1801c00000ll))
15116:         altDoSolve(23, 0x800000ll, puzzle | 0x1801c00000ll,
15117:                    partsUsed | 0x400l);
15118:     altpiece11at22:
15119:     break;
15120:    case 23:
15121:       if (partsUsed & 0x2l) goto altpiece2at23;
15122:       if(!(puzzle & 0x400c01800000ll))
15123:         altDoSolve(24, 0x1000000ll, puzzle | 0x400c01800000ll,
15124:                    partsUsed | 0x2l);
15125:       if(!(puzzle & 0x120900800000ll))
15126:         altDoSolve(24, 0x1000000ll, puzzle | 0x120900800000ll,
15127:                    partsUsed | 0x2l);
15128:       if(!(puzzle & 0x100904800000ll))
15129:         altDoSolve(24, 0x1000000ll, puzzle | 0x100904800000ll,
15130:                    partsUsed | 0x2l);
15131:     altpiece2at23:
15132:       if (partsUsed & 0x4l) goto altpiece3at23;
15133:       if (!(puzzle & 0x800800800000ll)) {
15134:          if(!(puzzle & 0x800920800000ll))
15135:            altDoSolve(24, 0x1000000ll, puzzle | 0x800920800000ll,
15136:                    partsUsed | 0x4l);
15137:          if(!(puzzle & 0x4900800800000ll))
15138:            altDoSolve(24, 0x1000000ll, puzzle | 0x4900800800000ll,
15139:                    partsUsed | 0x4l);
15140:          if(!(puzzle & 0x1c00800800000ll))
15141:            altDoSolve(24, 0x1000000ll, puzzle | 0x1c00800800000ll,
15142:                    partsUsed | 0x4l);
15143:       }
15144:     altpiece3at23:
15145:       if (partsUsed & 0x8l) goto altpiece4at23;
15146:       if(!(puzzle & 0x20920800000ll))
15147:         altDoSolve(24, 0x1000000ll, puzzle | 0x20920800000ll,
15148:                    partsUsed | 0x8l);
15149:       if(!(puzzle & 0x900804800000ll))
15150:         altDoSolve(24, 0x1000000ll, puzzle | 0x900804800000ll,
15151:                    partsUsed | 0x8l);
15152:       if(!(puzzle & 0xc00801800000ll))
15153:         altDoSolve(24, 0x1000000ll, puzzle | 0xc00801800000ll,
15154:                    partsUsed | 0x8l);
15155:     altpiece4at23:
15156:       if (partsUsed & 0x10l) goto altpiece5at23;
15157:       if (!(puzzle & 0x800800800800000ll)) {
15158:          if(!(puzzle & 0x900800900800000ll))
15159:            altDoSolve(24, 0x1000000ll, puzzle | 0x900800900800000ll,
15160:                    partsUsed | 0x10l);
15161:          if(!(puzzle & 0xc00800c00800000ll))
15162:            altDoSolve(24, 0x1000000ll, puzzle | 0xc00800c00800000ll,
15163:                    partsUsed | 0x10l);
15164:          if(!(puzzle & 0x4800804800800000ll))
15165:            altDoSolve(24, 0x1000000ll, puzzle | 0x4800804800800000ll,
15166:                    partsUsed | 0x10l);
15167:          if(!(puzzle & 0x804800804800000ll))
15168:            altDoSolve(24, 0x1000000ll, puzzle | 0x804800804800000ll,
15169:                    partsUsed | 0x10l);
15170:          if(!(puzzle & 0x1800801800800000ll))
15171:            altDoSolve(24, 0x1000000ll, puzzle | 0x1800801800800000ll,
15172:                    partsUsed | 0x10l);
15173:          if(!(puzzle & 0x801800801800000ll))
15174:            altDoSolve(24, 0x1000000ll, puzzle | 0x801800801800000ll,
15175:                    partsUsed | 0x10l);
15176:       }
15177:       if(!(puzzle & 0x4004804004800000ll))
15178:         altDoSolve(24, 0x1000000ll, puzzle | 0x4004804004800000ll,
15179:                    partsUsed | 0x10l);
15180:       if(!(puzzle & 0x1001801001800000ll))
15181:         altDoSolve(24, 0x1000000ll, puzzle | 0x1001801001800000ll,
15182:                    partsUsed | 0x10l);
15183:     altpiece5at23:
15184:       if (partsUsed & 0x20l) goto altpiece6at23;
15185:       if (!(puzzle & 0x800800800800000ll)) {
15186:          if(!(puzzle & 0x900800800800000ll))
15187:            altDoSolve(24, 0x1000000ll, puzzle | 0x900800800800000ll,
15188:                    partsUsed | 0x20l);
15189:          if(!(puzzle & 0xc00800800800000ll))
15190:            altDoSolve(24, 0x1000000ll, puzzle | 0xc00800800800000ll,
15191:                    partsUsed | 0x20l);
15192:          if(!(puzzle & 0x800800804800000ll))
15193:            altDoSolve(24, 0x1000000ll, puzzle | 0x800800804800000ll,
15194:                    partsUsed | 0x20l);
15195:          if(!(puzzle & 0x4800800800800000ll))
15196:            altDoSolve(24, 0x1000000ll, puzzle | 0x4800800800800000ll,
15197:                    partsUsed | 0x20l);
15198:          if(!(puzzle & 0x800800801800000ll))
15199:            altDoSolve(24, 0x1000000ll, puzzle | 0x800800801800000ll,
15200:                    partsUsed | 0x20l);
15201:          if(!(puzzle & 0x1800800800800000ll))
15202:            altDoSolve(24, 0x1000000ll, puzzle | 0x1800800800800000ll,
15203:                    partsUsed | 0x20l);
15204:       }
15205:       if(!(puzzle & 0x4004004004800000ll))
15206:         altDoSolve(24, 0x1000000ll, puzzle | 0x4004004004800000ll,
15207:                    partsUsed | 0x20l);
15208:       if(!(puzzle & 0x1001001001800000ll))
15209:         altDoSolve(24, 0x1000000ll, puzzle | 0x1001001001800000ll,
15210:                    partsUsed | 0x20l);
15211:     altpiece6at23:
15212:       if (partsUsed & 0x40l) goto altpiece7at23;
15213:       if (!(puzzle & 0x800800800800000ll)) {
15214:          if(!(puzzle & 0x800900800800000ll))
15215:            altDoSolve(24, 0x1000000ll, puzzle | 0x800900800800000ll,
15216:                    partsUsed | 0x40l);
15217:          if(!(puzzle & 0x800800c00800000ll))
15218:            altDoSolve(24, 0x1000000ll, puzzle | 0x800800c00800000ll,
15219:                    partsUsed | 0x40l);
15220:          if(!(puzzle & 0x800c00800800000ll))
15221:            altDoSolve(24, 0x1000000ll, puzzle | 0x800c00800800000ll,
15222:                    partsUsed | 0x40l);
15223:          if(!(puzzle & 0x800804800800000ll))
15224:            altDoSolve(24, 0x1000000ll, puzzle | 0x800804800800000ll,
15225:                    partsUsed | 0x40l);
15226:          if(!(puzzle & 0x804800800800000ll))
15227:            altDoSolve(24, 0x1000000ll, puzzle | 0x804800800800000ll,
15228:                    partsUsed | 0x40l);
15229:          if(!(puzzle & 0x800801800800000ll))
15230:            altDoSolve(24, 0x1000000ll, puzzle | 0x800801800800000ll,
15231:                    partsUsed | 0x40l);
15232:          if(!(puzzle & 0x801800800800000ll))
15233:            altDoSolve(24, 0x1000000ll, puzzle | 0x801800800800000ll,
15234:                    partsUsed | 0x40l);
15235:       }
15236:       if(!(puzzle & 0x4920800000ll))
15237:         altDoSolve(24, 0x1000000ll, puzzle | 0x4920800000ll,
15238:                    partsUsed | 0x40l);
15239:       if(!(puzzle & 0x800800900800000ll))
15240:         altDoSolve(24, 0x1000000ll, puzzle | 0x800800900800000ll,
15241:                    partsUsed | 0x40l);
15242:     altpiece7at23:
15243:       if (partsUsed & 0x80l) goto altpiece8at23;
15244:       if(!(puzzle & 0x4800804800000ll))
15245:         altDoSolve(24, 0x1000000ll, puzzle | 0x4800804800000ll,
15246:                    partsUsed | 0x80l);
15247:       if(!(puzzle & 0x4804004800000ll))
15248:         altDoSolve(24, 0x1000000ll, puzzle | 0x4804004800000ll,
15249:                    partsUsed | 0x80l);
15250:       if(!(puzzle & 0x1801001800000ll))
15251:         altDoSolve(24, 0x1000000ll, puzzle | 0x1801001800000ll,
15252:                    partsUsed | 0x80l);
15253:       if(!(puzzle & 0x1800801800000ll))
15254:         altDoSolve(24, 0x1000000ll, puzzle | 0x1800801800000ll,
15255:                    partsUsed | 0x80l);
15256:     altpiece8at23:
15257:       if (partsUsed & 0x100l) goto altpiece9at23;
15258:       if(!(puzzle & 0xc80800000ll))
15259:         altDoSolve(24, 0x1000000ll, puzzle | 0xc80800000ll,
15260:                    partsUsed | 0x100l);
15261:       if(!(puzzle & 0xc04800000ll))
15262:         altDoSolve(24, 0x1000000ll, puzzle | 0xc04800000ll,
15263:                    partsUsed | 0x100l);
15264:       if(!(puzzle & 0x1201800000ll))
15265:         altDoSolve(24, 0x1000000ll, puzzle | 0x1201800000ll,
15266:                    partsUsed | 0x100l);
15267:       if(!(puzzle & 0x1005800000ll))
15268:         altDoSolve(24, 0x1000000ll, puzzle | 0x1005800000ll,
15269:                    partsUsed | 0x100l);
15270:       if(!(puzzle & 0xb00800000ll))
15271:         altDoSolve(24, 0x1000000ll, puzzle | 0xb00800000ll,
15272:                    partsUsed | 0x100l);
15273:       if(!(puzzle & 0x2006800000ll))
15274:         altDoSolve(24, 0x1000000ll, puzzle | 0x2006800000ll,
15275:                    partsUsed | 0x100l);
15276:       if(!(puzzle & 0x6800800000ll))
15277:         altDoSolve(24, 0x1000000ll, puzzle | 0x6800800000ll,
15278:                    partsUsed | 0x100l);
15279:       if(!(puzzle & 0x4801800000ll))
15280:         altDoSolve(24, 0x1000000ll, puzzle | 0x4801800000ll,
15281:                    partsUsed | 0x100l);
15282:       if(!(puzzle & 0x9800800000ll))
15283:         altDoSolve(24, 0x1000000ll, puzzle | 0x9800800000ll,
15284:                    partsUsed | 0x100l);
15285:       if(!(puzzle & 0xc004800000ll))
15286:         altDoSolve(24, 0x1000000ll, puzzle | 0xc004800000ll,
15287:                    partsUsed | 0x100l);
15288:       if(!(puzzle & 0x80c800000ll))
15289:         altDoSolve(24, 0x1000000ll, puzzle | 0x80c800000ll,
15290:                    partsUsed | 0x100l);
15291:       if(!(puzzle & 0x8009800000ll))
15292:         altDoSolve(24, 0x1000000ll, puzzle | 0x8009800000ll,
15293:                    partsUsed | 0x100l);
15294:     altpiece9at23:
15295:       if (partsUsed & 0x200l) goto altpiece10at23;
15296:       if (!(puzzle & 0x900800000ll)) {
15297:          if(!(puzzle & 0x100920800000ll))
15298:            altDoSolve(24, 0x1000000ll, puzzle | 0x100920800000ll,
15299:                    partsUsed | 0x200l);
15300:          if(!(puzzle & 0x800904800000ll))
15301:            altDoSolve(24, 0x1000000ll, puzzle | 0x800904800000ll,
15302:                    partsUsed | 0x200l);
15303:          if(!(puzzle & 0x4004900800000ll))
15304:            altDoSolve(24, 0x1000000ll, puzzle | 0x4004900800000ll,
15305:                    partsUsed | 0x200l);
15306:          if(!(puzzle & 0x4800900800000ll))
15307:            altDoSolve(24, 0x1000000ll, puzzle | 0x4800900800000ll,
15308:                    partsUsed | 0x200l);
15309:          if(!(puzzle & 0x104900800000ll))
15310:            altDoSolve(24, 0x1000000ll, puzzle | 0x104900800000ll,
15311:                    partsUsed | 0x200l);
15312:       }
15313:       if (!(puzzle & 0x800800800000ll)) {
15314:          if(!(puzzle & 0x904800800000ll))
15315:            altDoSolve(24, 0x1000000ll, puzzle | 0x904800800000ll,
15316:                    partsUsed | 0x200l);
15317:          if(!(puzzle & 0x800c01800000ll))
15318:            altDoSolve(24, 0x1000000ll, puzzle | 0x800c01800000ll,
15319:                    partsUsed | 0x200l);
15320:          if(!(puzzle & 0x1800c00800000ll))
15321:            altDoSolve(24, 0x1000000ll, puzzle | 0x1800c00800000ll,
15322:                    partsUsed | 0x200l);
15323:          if(!(puzzle & 0xc01800800000ll))
15324:            altDoSolve(24, 0x1000000ll, puzzle | 0xc01800800000ll,
15325:                    partsUsed | 0x200l);
15326:       }
15327:       if(!(puzzle & 0x401c00800000ll))
15328:         altDoSolve(24, 0x1000000ll, puzzle | 0x401c00800000ll,
15329:                    partsUsed | 0x200l);
15330:       if(!(puzzle & 0x1001c00800000ll))
15331:         altDoSolve(24, 0x1000000ll, puzzle | 0x1001c00800000ll,
15332:                    partsUsed | 0x200l);
15333:     altpiece10at23:
15334:       if (partsUsed & 0x400l) goto altpiece11at23;
15335:       if (!(puzzle & 0x4800800000ll)) {
15336:          if(!(puzzle & 0x804804800000ll))
15337:            altDoSolve(24, 0x1000000ll, puzzle | 0x804804800000ll,
15338:                    partsUsed | 0x400l);
15339:          if(!(puzzle & 0x4804800800000ll))
15340:            altDoSolve(24, 0x1000000ll, puzzle | 0x4804800800000ll,
15341:                    partsUsed | 0x400l);
15342:          if(!(puzzle & 0x4004804800000ll))
15343:            altDoSolve(24, 0x1000000ll, puzzle | 0x4004804800000ll,
15344:                    partsUsed | 0x400l);
15345:       }
15346:       if (!(puzzle & 0x1800800000ll)) {
15347:          if(!(puzzle & 0x1001801800000ll))
15348:            altDoSolve(24, 0x1000000ll, puzzle | 0x1001801800000ll,
15349:                    partsUsed | 0x400l);
15350:          if(!(puzzle & 0x801801800000ll))
15351:            altDoSolve(24, 0x1000000ll, puzzle | 0x801801800000ll,
15352:                    partsUsed | 0x400l);
15353:          if(!(puzzle & 0x1801800800000ll))
15354:            altDoSolve(24, 0x1000000ll, puzzle | 0x1801800800000ll,
15355:                    partsUsed | 0x400l);
15356:       }
15357:       if(!(puzzle & 0x900900800000ll))
15358:         altDoSolve(24, 0x1000000ll, puzzle | 0x900900800000ll,
15359:                    partsUsed | 0x400l);
15360:       if(!(puzzle & 0x4904800000ll))
15361:         altDoSolve(24, 0x1000000ll, puzzle | 0x4904800000ll,
15362:                    partsUsed | 0x400l);
15363:       if(!(puzzle & 0xf800000ll))
15364:         altDoSolve(24, 0x1000000ll, puzzle | 0xf800000ll,
15365:                    partsUsed | 0x400l);
15366:       if(!(puzzle & 0x1c01800000ll))
15367:         altDoSolve(24, 0x1000000ll, puzzle | 0x1c01800000ll,
15368:                    partsUsed | 0x400l);
15369:       if(!(puzzle & 0xc00c00800000ll))
15370:         altDoSolve(24, 0x1000000ll, puzzle | 0xc00c00800000ll,
15371:                    partsUsed | 0x400l);
15372:     altpiece11at23:
15373:     break;
15374:    case 24:
15375:       if (partsUsed & 0x2l) goto altpiece2at24;
15376:       if(!(puzzle & 0xc01801000000ll))
15377:         altDoSolve(25, 0x2000000ll, puzzle | 0xc01801000000ll,
15378:                    partsUsed | 0x2l);
15379:       if(!(puzzle & 0x241201000000ll))
15380:         altDoSolve(25, 0x2000000ll, puzzle | 0x241201000000ll,
15381:                    partsUsed | 0x2l);
15382:       if(!(puzzle & 0x201209000000ll))
15383:         altDoSolve(25, 0x2000000ll, puzzle | 0x201209000000ll,
15384:                    partsUsed | 0x2l);
15385:     altpiece2at24:
15386:       if (partsUsed & 0x4l) goto altpiece3at24;
15387:       if (!(puzzle & 0x1001001000000ll)) {
15388:          if(!(puzzle & 0x1001241000000ll))
15389:            altDoSolve(25, 0x2000000ll, puzzle | 0x1001241000000ll,
15390:                    partsUsed | 0x4l);
15391:          if(!(puzzle & 0x9201001000000ll))
15392:            altDoSolve(25, 0x2000000ll, puzzle | 0x9201001000000ll,
15393:                    partsUsed | 0x4l);
15394:          if(!(puzzle & 0x1001c01000000ll))
15395:            altDoSolve(25, 0x2000000ll, puzzle | 0x1001c01000000ll,
15396:                    partsUsed | 0x4l);
15397:       }
15398:     altpiece3at24:
15399:       if (partsUsed & 0x8l) goto altpiece4at24;
15400:       if(!(puzzle & 0x401c01000000ll))
15401:         altDoSolve(25, 0x2000000ll, puzzle | 0x401c01000000ll,
15402:                    partsUsed | 0x8l);
15403:       if(!(puzzle & 0x41241000000ll))
15404:         altDoSolve(25, 0x2000000ll, puzzle | 0x41241000000ll,
15405:                    partsUsed | 0x8l);
15406:       if(!(puzzle & 0x1201009000000ll))
15407:         altDoSolve(25, 0x2000000ll, puzzle | 0x1201009000000ll,
15408:                    partsUsed | 0x8l);
15409:     altpiece4at24:
15410:       if (partsUsed & 0x10l) goto altpiece5at24;
15411:       if (!(puzzle & 0x1001001001000000ll)) {
15412:          if(!(puzzle & 0x1201001201000000ll))
15413:            altDoSolve(25, 0x2000000ll, puzzle | 0x1201001201000000ll,
15414:                    partsUsed | 0x10l);
15415:          if(!(puzzle & 0x1801001801000000ll))
15416:            altDoSolve(25, 0x2000000ll, puzzle | 0x1801001801000000ll,
15417:                    partsUsed | 0x10l);
15418:          if(!(puzzle & 0x9001009001000000ll))
15419:            altDoSolve(25, 0x2000000ll, puzzle | 0x9001009001000000ll,
15420:                    partsUsed | 0x10l);
15421:          if(!(puzzle & 0x1009001009000000ll))
15422:            altDoSolve(25, 0x2000000ll, puzzle | 0x1009001009000000ll,
15423:                    partsUsed | 0x10l);
15424:       }
15425:       if(!(puzzle & 0x8009008009000000ll))
15426:         altDoSolve(25, 0x2000000ll, puzzle | 0x8009008009000000ll,
15427:                    partsUsed | 0x10l);
15428:     altpiece5at24:
15429:       if (partsUsed & 0x20l) goto altpiece6at24;
15430:       if (!(puzzle & 0x1001001001000000ll)) {
15431:          if(!(puzzle & 0x1201001001000000ll))
15432:            altDoSolve(25, 0x2000000ll, puzzle | 0x1201001001000000ll,
15433:                    partsUsed | 0x20l);
15434:          if(!(puzzle & 0x1801001001000000ll))
15435:            altDoSolve(25, 0x2000000ll, puzzle | 0x1801001001000000ll,
15436:                    partsUsed | 0x20l);
15437:          if(!(puzzle & 0x1001001009000000ll))
15438:            altDoSolve(25, 0x2000000ll, puzzle | 0x1001001009000000ll,
15439:                    partsUsed | 0x20l);
15440:          if(!(puzzle & 0x9001001001000000ll))
15441:            altDoSolve(25, 0x2000000ll, puzzle | 0x9001001001000000ll,
15442:                    partsUsed | 0x20l);
15443:       }
15444:       if(!(puzzle & 0x8008008009000000ll))
15445:         altDoSolve(25, 0x2000000ll, puzzle | 0x8008008009000000ll,
15446:                    partsUsed | 0x20l);
15447:     altpiece6at24:
15448:       if (partsUsed & 0x40l) goto altpiece7at24;
15449:       if (!(puzzle & 0x1001001001000000ll)) {
15450:          if(!(puzzle & 0x1001201001000000ll))
15451:            altDoSolve(25, 0x2000000ll, puzzle | 0x1001201001000000ll,
15452:                    partsUsed | 0x40l);
15453:          if(!(puzzle & 0x1001001801000000ll))
15454:            altDoSolve(25, 0x2000000ll, puzzle | 0x1001001801000000ll,
15455:                    partsUsed | 0x40l);
15456:          if(!(puzzle & 0x1001801001000000ll))
15457:            altDoSolve(25, 0x2000000ll, puzzle | 0x1001801001000000ll,
15458:                    partsUsed | 0x40l);
15459:          if(!(puzzle & 0x1001009001000000ll))
15460:            altDoSolve(25, 0x2000000ll, puzzle | 0x1001009001000000ll,
15461:                    partsUsed | 0x40l);
15462:          if(!(puzzle & 0x1009001001000000ll))
15463:            altDoSolve(25, 0x2000000ll, puzzle | 0x1009001001000000ll,
15464:                    partsUsed | 0x40l);
15465:       }
15466:       if(!(puzzle & 0x9241000000ll))
15467:         altDoSolve(25, 0x2000000ll, puzzle | 0x9241000000ll,
15468:                    partsUsed | 0x40l);
15469:       if(!(puzzle & 0x1001001201000000ll))
15470:         altDoSolve(25, 0x2000000ll, puzzle | 0x1001001201000000ll,
15471:                    partsUsed | 0x40l);
15472:     altpiece7at24:
15473:       if (partsUsed & 0x80l) goto altpiece8at24;
15474:       if(!(puzzle & 0x9001009000000ll))
15475:         altDoSolve(25, 0x2000000ll, puzzle | 0x9001009000000ll,
15476:                    partsUsed | 0x80l);
15477:       if(!(puzzle & 0x9008009000000ll))
15478:         altDoSolve(25, 0x2000000ll, puzzle | 0x9008009000000ll,
15479:                    partsUsed | 0x80l);
15480:     altpiece8at24:
15481:       if (partsUsed & 0x100l) goto altpiece9at24;
15482:       if(!(puzzle & 0x1901000000ll))
15483:         altDoSolve(25, 0x2000000ll, puzzle | 0x1901000000ll,
15484:                    partsUsed | 0x100l);
15485:       if(!(puzzle & 0x1809000000ll))
15486:         altDoSolve(25, 0x2000000ll, puzzle | 0x1809000000ll,
15487:                    partsUsed | 0x100l);
15488:       if(!(puzzle & 0x400d000000ll))
15489:         altDoSolve(25, 0x2000000ll, puzzle | 0x400d000000ll,
15490:                    partsUsed | 0x100l);
15491:       if(!(puzzle & 0xd001000000ll))
15492:         altDoSolve(25, 0x2000000ll, puzzle | 0xd001000000ll,
15493:                    partsUsed | 0x100l);
15494:     altpiece9at24:
15495:       if (partsUsed & 0x200l) goto altpiece10at24;
15496:       if (!(puzzle & 0x1201000000ll)) {
15497:          if(!(puzzle & 0x201241000000ll))
15498:            altDoSolve(25, 0x2000000ll, puzzle | 0x201241000000ll,
15499:                    partsUsed | 0x200l);
15500:          if(!(puzzle & 0x1001209000000ll))
15501:            altDoSolve(25, 0x2000000ll, puzzle | 0x1001209000000ll,
15502:                    partsUsed | 0x200l);
15503:          if(!(puzzle & 0x8009201000000ll))
15504:            altDoSolve(25, 0x2000000ll, puzzle | 0x8009201000000ll,
15505:                    partsUsed | 0x200l);
15506:          if(!(puzzle & 0x9001201000000ll))
15507:            altDoSolve(25, 0x2000000ll, puzzle | 0x9001201000000ll,
15508:                    partsUsed | 0x200l);
15509:          if(!(puzzle & 0x209201000000ll))
15510:            altDoSolve(25, 0x2000000ll, puzzle | 0x209201000000ll,
15511:                    partsUsed | 0x200l);
15512:       }
15513:       if(!(puzzle & 0x1209001000000ll))
15514:         altDoSolve(25, 0x2000000ll, puzzle | 0x1209001000000ll,
15515:                    partsUsed | 0x200l);
15516:       if(!(puzzle & 0x801c01000000ll))
15517:         altDoSolve(25, 0x2000000ll, puzzle | 0x801c01000000ll,
15518:                    partsUsed | 0x200l);
15519:     altpiece10at24:
15520:       if (partsUsed & 0x400l) goto altpiece11at24;
15521:       if (!(puzzle & 0x1001001000000ll)) {
15522:          if(!(puzzle & 0x1801801000000ll))
15523:            altDoSolve(25, 0x2000000ll, puzzle | 0x1801801000000ll,
15524:                    partsUsed | 0x400l);
15525:          if(!(puzzle & 0x1009009000000ll))
15526:            altDoSolve(25, 0x2000000ll, puzzle | 0x1009009000000ll,
15527:                    partsUsed | 0x400l);
15528:          if(!(puzzle & 0x9009001000000ll))
15529:            altDoSolve(25, 0x2000000ll, puzzle | 0x9009001000000ll,
15530:                    partsUsed | 0x400l);
15531:       }
15532:       if(!(puzzle & 0x1201201000000ll))
15533:         altDoSolve(25, 0x2000000ll, puzzle | 0x1201201000000ll,
15534:                    partsUsed | 0x400l);
15535:       if(!(puzzle & 0x9209000000ll))
15536:         altDoSolve(25, 0x2000000ll, puzzle | 0x9209000000ll,
15537:                    partsUsed | 0x400l);
15538:       if(!(puzzle & 0x8009009000000ll))
15539:         altDoSolve(25, 0x2000000ll, puzzle | 0x8009009000000ll,
15540:                    partsUsed | 0x400l);
15541:     altpiece11at24:
15542:     break;
15543:    case 25:
15544:       if (partsUsed & 0x2l) goto altpiece2at25;
15545:       if(!(puzzle & 0x482402000000ll))
15546:         altDoSolve(26, 0x4000000ll, puzzle | 0x482402000000ll,
15547:                    partsUsed | 0x2l);
15548:       if(!(puzzle & 0x800c006000000ll))
15549:         altDoSolve(26, 0x4000000ll, puzzle | 0x800c006000000ll,
15550:                    partsUsed | 0x2l);
15551:       if(!(puzzle & 0xc006002000000ll))
15552:         altDoSolve(26, 0x4000000ll, puzzle | 0xc006002000000ll,
15553:                    partsUsed | 0x2l);
15554:     altpiece2at25:
15555:       if (partsUsed & 0x4l) goto altpiece3at25;
15556:       if(!(puzzle & 0x400400e000000ll))
15557:         altDoSolve(26, 0x4000000ll, puzzle | 0x400400e000000ll,
15558:                    partsUsed | 0x4l);
15559:       if(!(puzzle & 0x2002482000000ll))
15560:         altDoSolve(26, 0x4000000ll, puzzle | 0x2002482000000ll,
15561:                    partsUsed | 0x4l);
15562:       if(!(puzzle & 0x200e002000000ll))
15563:         altDoSolve(26, 0x4000000ll, puzzle | 0x200e002000000ll,
15564:                    partsUsed | 0x4l);
15565:     altpiece3at25:
15566:       if (partsUsed & 0x8l) goto altpiece4at25;
15567:       if(!(puzzle & 0x82482000000ll))
15568:         altDoSolve(26, 0x4000000ll, puzzle | 0x82482000000ll,
15569:                    partsUsed | 0x8l);
15570:       if(!(puzzle & 0x800e002000000ll))
15571:         altDoSolve(26, 0x4000000ll, puzzle | 0x800e002000000ll,
15572:                    partsUsed | 0x8l);
15573:       if(!(puzzle & 0xc004006000000ll))
15574:         altDoSolve(26, 0x4000000ll, puzzle | 0xc004006000000ll,
15575:                    partsUsed | 0x8l);
15576:     altpiece4at25:
15577:       if (partsUsed & 0x10l) goto altpiece5at25;
15578:       if (!(puzzle & 0x2002002002000000ll)) {
15579:          if(!(puzzle & 0x2402002402000000ll))
15580:            altDoSolve(26, 0x4000000ll, puzzle | 0x2402002402000000ll,
15581:                    partsUsed | 0x10l);
15582:          if(!(puzzle & 0x6002006002000000ll))
15583:            altDoSolve(26, 0x4000000ll, puzzle | 0x6002006002000000ll,
15584:                    partsUsed | 0x10l);
15585:          if(!(puzzle & 0x2006002006000000ll))
15586:            altDoSolve(26, 0x4000000ll, puzzle | 0x2006002006000000ll,
15587:                    partsUsed | 0x10l);
15588:       }
15589:       if(!(puzzle & 0x4006004006000000ll))
15590:         altDoSolve(26, 0x4000000ll, puzzle | 0x4006004006000000ll,
15591:                    partsUsed | 0x10l);
15592:     altpiece5at25:
15593:       if (partsUsed & 0x20l) goto altpiece6at25;
15594:       if (!(puzzle & 0x2002002002000000ll)) {
15595:          if(!(puzzle & 0x2402002002000000ll))
15596:            altDoSolve(26, 0x4000000ll, puzzle | 0x2402002002000000ll,
15597:                    partsUsed | 0x20l);
15598:          if(!(puzzle & 0x2002002006000000ll))
15599:            altDoSolve(26, 0x4000000ll, puzzle | 0x2002002006000000ll,
15600:                    partsUsed | 0x20l);
15601:          if(!(puzzle & 0x6002002002000000ll))
15602:            altDoSolve(26, 0x4000000ll, puzzle | 0x6002002002000000ll,
15603:                    partsUsed | 0x20l);
15604:       }
15605:       if(!(puzzle & 0x2492000000ll))
15606:         altDoSolve(26, 0x4000000ll, puzzle | 0x2492000000ll,
15607:                    partsUsed | 0x20l);
15608:       if(!(puzzle & 0x4004004006000000ll))
15609:         altDoSolve(26, 0x4000000ll, puzzle | 0x4004004006000000ll,
15610:                    partsUsed | 0x20l);
15611:     altpiece6at25:
15612:       if (partsUsed & 0x40l) goto altpiece7at25;
15613:       if (!(puzzle & 0x2002002002000000ll)) {
15614:          if(!(puzzle & 0x2002402002000000ll))
15615:            altDoSolve(26, 0x4000000ll, puzzle | 0x2002402002000000ll,
15616:                    partsUsed | 0x40l);
15617:          if(!(puzzle & 0x2002002402000000ll))
15618:            altDoSolve(26, 0x4000000ll, puzzle | 0x2002002402000000ll,
15619:                    partsUsed | 0x40l);
15620:          if(!(puzzle & 0x2002006002000000ll))
15621:            altDoSolve(26, 0x4000000ll, puzzle | 0x2002006002000000ll,
15622:                    partsUsed | 0x40l);
15623:          if(!(puzzle & 0x2006002002000000ll))
15624:            altDoSolve(26, 0x4000000ll, puzzle | 0x2006002002000000ll,
15625:                    partsUsed | 0x40l);
15626:       }
15627:     altpiece7at25:
15628:       if (partsUsed & 0x80l) goto altpiece8at25;
15629:       if(!(puzzle & 0x6004006000000ll))
15630:         altDoSolve(26, 0x4000000ll, puzzle | 0x6004006000000ll,
15631:                    partsUsed | 0x80l);
15632:       if(!(puzzle & 0x6002006000000ll))
15633:         altDoSolve(26, 0x4000000ll, puzzle | 0x6002006000000ll,
15634:                    partsUsed | 0x80l);
15635:       if(!(puzzle & 0xe00a000000ll))
15636:         altDoSolve(26, 0x4000000ll, puzzle | 0xe00a000000ll,
15637:                    partsUsed | 0x80l);
15638:       if(!(puzzle & 0xa00e000000ll))
15639:         altDoSolve(26, 0x4000000ll, puzzle | 0xa00e000000ll,
15640:                    partsUsed | 0x80l);
15641:     altpiece8at25:
15642:       if (partsUsed & 0x100l) goto altpiece9at25;
15643:       if(!(puzzle & 0x4806000000ll))
15644:         altDoSolve(26, 0x4000000ll, puzzle | 0x4806000000ll,
15645:                    partsUsed | 0x100l);
15646:       if(!(puzzle & 0x2c02000000ll))
15647:         altDoSolve(26, 0x4000000ll, puzzle | 0x2c02000000ll,
15648:                    partsUsed | 0x100l);
15649:     altpiece9at25:
15650:       if (partsUsed & 0x200l) goto altpiece10at25;
15651:       if(!(puzzle & 0x402482000000ll))
15652:         altDoSolve(26, 0x4000000ll, puzzle | 0x402482000000ll,
15653:                    partsUsed | 0x200l);
15654:       if(!(puzzle & 0x400c006000000ll))
15655:         altDoSolve(26, 0x4000000ll, puzzle | 0x400c006000000ll,
15656:                    partsUsed | 0x200l);
15657:       if(!(puzzle & 0x400e002000000ll))
15658:         altDoSolve(26, 0x4000000ll, puzzle | 0x400e002000000ll,
15659:                    partsUsed | 0x200l);
15660:     altpiece10at25:
15661:       if (partsUsed & 0x400l) goto altpiece11at25;
15662:       if (!(puzzle & 0x2002002000000ll)) {
15663:          if(!(puzzle & 0x2402402000000ll))
15664:            altDoSolve(26, 0x4000000ll, puzzle | 0x2402402000000ll,
15665:                    partsUsed | 0x400l);
15666:          if(!(puzzle & 0x2006006000000ll))
15667:            altDoSolve(26, 0x4000000ll, puzzle | 0x2006006000000ll,
15668:                    partsUsed | 0x400l);
15669:          if(!(puzzle & 0x6006002000000ll))
15670:            altDoSolve(26, 0x4000000ll, puzzle | 0x6006002000000ll,
15671:                    partsUsed | 0x400l);
15672:       }
15673:       if (!(puzzle & 0x4006000000ll)) {
15674:          if(!(puzzle & 0x4006006000000ll))
15675:            altDoSolve(26, 0x4000000ll, puzzle | 0x4006006000000ll,
15676:                    partsUsed | 0x400l);
15677:          if(!(puzzle & 0xe006000000ll))
15678:            altDoSolve(26, 0x4000000ll, puzzle | 0xe006000000ll,
15679:                    partsUsed | 0x400l);
15680:          if(!(puzzle & 0x600e000000ll))
15681:            altDoSolve(26, 0x4000000ll, puzzle | 0x600e000000ll,
15682:                    partsUsed | 0x400l);
15683:          if(!(puzzle & 0xc00e000000ll))
15684:            altDoSolve(26, 0x4000000ll, puzzle | 0xc00e000000ll,
15685:                    partsUsed | 0x400l);
15686:       }
15687:     altpiece11at25:
15688:     break;
15689:    case 26:
15690:       if (partsUsed & 0x2l) goto altpiece2at26;
15691:       if(!(puzzle & 0x904804000000ll))
15692:         altDoSolve(27, 0x8000000ll, puzzle | 0x904804000000ll,
15693:                    partsUsed | 0x2l);
15694:       if(!(puzzle & 0x200600c000000ll))
15695:         altDoSolve(27, 0x8000000ll, puzzle | 0x200600c000000ll,
15696:                    partsUsed | 0x2l);
15697:     altpiece2at26:
15698:       if (partsUsed & 0x4l) goto altpiece3at26;
15699:       if(!(puzzle & 0x4004904000000ll))
15700:         altDoSolve(27, 0x8000000ll, puzzle | 0x4004904000000ll,
15701:                    partsUsed | 0x4l);
15702:       if(!(puzzle & 0xe004004000000ll))
15703:         altDoSolve(27, 0x8000000ll, puzzle | 0xe004004000000ll,
15704:                    partsUsed | 0x4l);
15705:     altpiece3at26:
15706:       if (partsUsed & 0x8l) goto altpiece4at26;
15707:       if(!(puzzle & 0x104904000000ll))
15708:         altDoSolve(27, 0x8000000ll, puzzle | 0x104904000000ll,
15709:                    partsUsed | 0x8l);
15710:       if(!(puzzle & 0x600400c000000ll))
15711:         altDoSolve(27, 0x8000000ll, puzzle | 0x600400c000000ll,
15712:                    partsUsed | 0x8l);
15713:     altpiece4at26:
15714:       if (partsUsed & 0x10l) goto altpiece5at26;
15715:       if (!(puzzle & 0x4004004004000000ll)) {
15716:          if(!(puzzle & 0x4804004804000000ll))
15717:            altDoSolve(27, 0x8000000ll, puzzle | 0x4804004804000000ll,
15718:                    partsUsed | 0x10l);
15719:          if(!(puzzle & 0x6004006004000000ll))
15720:            altDoSolve(27, 0x8000000ll, puzzle | 0x6004006004000000ll,
15721:                    partsUsed | 0x10l);
15722:          if(!(puzzle & 0xc00400c004000000ll))
15723:            altDoSolve(27, 0x8000000ll, puzzle | 0xc00400c004000000ll,
15724:                    partsUsed | 0x10l);
15725:          if(!(puzzle & 0x400c00400c000000ll))
15726:            altDoSolve(27, 0x8000000ll, puzzle | 0x400c00400c000000ll,
15727:                    partsUsed | 0x10l);
15728:       }
15729:       if(!(puzzle & 0x800c00800c000000ll))
15730:         altDoSolve(27, 0x8000000ll, puzzle | 0x800c00800c000000ll,
15731:                    partsUsed | 0x10l);
15732:     altpiece5at26:
15733:       if (partsUsed & 0x20l) goto altpiece6at26;
15734:       if (!(puzzle & 0x4004004004000000ll)) {
15735:          if(!(puzzle & 0x4804004004000000ll))
15736:            altDoSolve(27, 0x8000000ll, puzzle | 0x4804004004000000ll,
15737:                    partsUsed | 0x20l);
15738:          if(!(puzzle & 0x6004004004000000ll))
15739:            altDoSolve(27, 0x8000000ll, puzzle | 0x6004004004000000ll,
15740:                    partsUsed | 0x20l);
15741:          if(!(puzzle & 0x400400400c000000ll))
15742:            altDoSolve(27, 0x8000000ll, puzzle | 0x400400400c000000ll,
15743:                    partsUsed | 0x20l);
15744:          if(!(puzzle & 0xc004004004000000ll))
15745:            altDoSolve(27, 0x8000000ll, puzzle | 0xc004004004000000ll,
15746:                    partsUsed | 0x20l);
15747:       }
15748:       if(!(puzzle & 0x4924000000ll))
15749:         altDoSolve(27, 0x8000000ll, puzzle | 0x4924000000ll,
15750:                    partsUsed | 0x20l);
15751:       if(!(puzzle & 0x800800800c000000ll))
15752:         altDoSolve(27, 0x8000000ll, puzzle | 0x800800800c000000ll,
15753:                    partsUsed | 0x20l);
15754:     altpiece6at26:
15755:       if (partsUsed & 0x40l) goto altpiece7at26;
15756:       if (!(puzzle & 0x4004004004000000ll)) {
15757:          if(!(puzzle & 0x4004804004000000ll))
15758:            altDoSolve(27, 0x8000000ll, puzzle | 0x4004804004000000ll,
15759:                    partsUsed | 0x40l);
15760:          if(!(puzzle & 0x4004004804000000ll))
15761:            altDoSolve(27, 0x8000000ll, puzzle | 0x4004004804000000ll,
15762:                    partsUsed | 0x40l);
15763:          if(!(puzzle & 0x4004006004000000ll))
15764:            altDoSolve(27, 0x8000000ll, puzzle | 0x4004006004000000ll,
15765:                    partsUsed | 0x40l);
15766:          if(!(puzzle & 0x4006004004000000ll))
15767:            altDoSolve(27, 0x8000000ll, puzzle | 0x4006004004000000ll,
15768:                    partsUsed | 0x40l);
15769:          if(!(puzzle & 0x400400c004000000ll))
15770:            altDoSolve(27, 0x8000000ll, puzzle | 0x400400c004000000ll,
15771:                    partsUsed | 0x40l);
15772:          if(!(puzzle & 0x400c004004000000ll))
15773:            altDoSolve(27, 0x8000000ll, puzzle | 0x400c004004000000ll,
15774:                    partsUsed | 0x40l);
15775:       }
15776:     altpiece7at26:
15777:       if (partsUsed & 0x80l) goto altpiece8at26;
15778:       if(!(puzzle & 0xc00800c000000ll))
15779:         altDoSolve(27, 0x8000000ll, puzzle | 0xc00800c000000ll,
15780:                    partsUsed | 0x80l);
15781:       if(!(puzzle & 0xc00400c000000ll))
15782:         altDoSolve(27, 0x8000000ll, puzzle | 0xc00400c000000ll,
15783:                    partsUsed | 0x80l);
15784:     altpiece8at26:
15785:       if (partsUsed & 0x100l) goto altpiece9at26;
15786:       if(!(puzzle & 0x5804000000ll))
15787:         altDoSolve(27, 0x8000000ll, puzzle | 0x5804000000ll,
15788:                    partsUsed | 0x100l);
15789:       if(!(puzzle & 0x6404000000ll))
15790:         altDoSolve(27, 0x8000000ll, puzzle | 0x6404000000ll,
15791:                    partsUsed | 0x100l);
15792:       if(!(puzzle & 0x900c000000ll))
15793:         altDoSolve(27, 0x8000000ll, puzzle | 0x900c000000ll,
15794:                    partsUsed | 0x100l);
15795:     altpiece9at26:
15796:       if (partsUsed & 0x200l) goto altpiece10at26;
15797:       if (!(puzzle & 0x4004004000000ll)) {
15798:          if(!(puzzle & 0x400600c000000ll))
15799:            altDoSolve(27, 0x8000000ll, puzzle | 0x400600c000000ll,
15800:                    partsUsed | 0x200l);
15801:          if(!(puzzle & 0xc006004000000ll))
15802:            altDoSolve(27, 0x8000000ll, puzzle | 0xc006004000000ll,
15803:                    partsUsed | 0x200l);
15804:          if(!(puzzle & 0x600c004000000ll))
15805:            altDoSolve(27, 0x8000000ll, puzzle | 0x600c004000000ll,
15806:                    partsUsed | 0x200l);
15807:       }
15808:       if(!(puzzle & 0x804904000000ll))
15809:         altDoSolve(27, 0x8000000ll, puzzle | 0x804904000000ll,
15810:                    partsUsed | 0x200l);
15811:       if(!(puzzle & 0x200e004000000ll))
15812:         altDoSolve(27, 0x8000000ll, puzzle | 0x200e004000000ll,
15813:                    partsUsed | 0x200l);
15814:       if(!(puzzle & 0x800e004000000ll))
15815:         altDoSolve(27, 0x8000000ll, puzzle | 0x800e004000000ll,
15816:                    partsUsed | 0x200l);
15817:     altpiece10at26:
15818:       if (partsUsed & 0x400l) goto altpiece11at26;
15819:       if (!(puzzle & 0x4004004000000ll)) {
15820:          if(!(puzzle & 0x4804804000000ll))
15821:            altDoSolve(27, 0x8000000ll, puzzle | 0x4804804000000ll,
15822:                    partsUsed | 0x400l);
15823:          if(!(puzzle & 0x6006004000000ll))
15824:            altDoSolve(27, 0x8000000ll, puzzle | 0x6006004000000ll,
15825:                    partsUsed | 0x400l);
15826:          if(!(puzzle & 0x400c00c000000ll))
15827:            altDoSolve(27, 0x8000000ll, puzzle | 0x400c00c000000ll,
15828:                    partsUsed | 0x400l);
15829:          if(!(puzzle & 0xc00c004000000ll))
15830:            altDoSolve(27, 0x8000000ll, puzzle | 0xc00c004000000ll,
15831:                    partsUsed | 0x400l);
15832:       }
15833:       if(!(puzzle & 0xe00c000000ll))
15834:         altDoSolve(27, 0x8000000ll, puzzle | 0xe00c000000ll,
15835:                    partsUsed | 0x400l);
15836:       if(!(puzzle & 0x800c00c000000ll))
15837:         altDoSolve(27, 0x8000000ll, puzzle | 0x800c00c000000ll,
15838:                    partsUsed | 0x400l);
15839:     altpiece11at26:
15840:     break;
15841:    case 27:
15842:       if (partsUsed & 0x2l) goto altpiece2at27;
15843:       if(!(puzzle & 0x1209008000000ll))
15844:         altDoSolve(28, 0x10000000ll, puzzle | 0x1209008000000ll,
15845:                    partsUsed | 0x2l);
15846:       if(!(puzzle & 0x600c008000000ll))
15847:         altDoSolve(28, 0x10000000ll, puzzle | 0x600c008000000ll,
15848:                    partsUsed | 0x2l);
15849:     altpiece2at27:
15850:       if (partsUsed & 0x4l) goto altpiece3at27;
15851:       if(!(puzzle & 0x8009208000000ll))
15852:         altDoSolve(28, 0x10000000ll, puzzle | 0x8009208000000ll,
15853:                    partsUsed | 0x4l);
15854:       if(!(puzzle & 0x800e008000000ll))
15855:         altDoSolve(28, 0x10000000ll, puzzle | 0x800e008000000ll,
15856:                    partsUsed | 0x4l);
15857:     altpiece3at27:
15858:       if (partsUsed & 0x8l) goto altpiece4at27;
15859:       if(!(puzzle & 0x209208000000ll))
15860:         altDoSolve(28, 0x10000000ll, puzzle | 0x209208000000ll,
15861:                    partsUsed | 0x8l);
15862:       if(!(puzzle & 0x200e008000000ll))
15863:         altDoSolve(28, 0x10000000ll, puzzle | 0x200e008000000ll,
15864:                    partsUsed | 0x8l);
15865:     altpiece4at27:
15866:       if (partsUsed & 0x10l) goto altpiece5at27;
15867:       if(!(puzzle & 0x9008009008000000ll))
15868:         altDoSolve(28, 0x10000000ll, puzzle | 0x9008009008000000ll,
15869:                    partsUsed | 0x10l);
15870:       if(!(puzzle & 0xc00800c008000000ll))
15871:         altDoSolve(28, 0x10000000ll, puzzle | 0xc00800c008000000ll,
15872:                    partsUsed | 0x10l);
15873:     altpiece5at27:
15874:       if (partsUsed & 0x20l) goto altpiece6at27;
15875:       if(!(puzzle & 0x9248000000ll))
15876:         altDoSolve(28, 0x10000000ll, puzzle | 0x9248000000ll,
15877:                    partsUsed | 0x20l);
15878:       if(!(puzzle & 0x9008008008000000ll))
15879:         altDoSolve(28, 0x10000000ll, puzzle | 0x9008008008000000ll,
15880:                    partsUsed | 0x20l);
15881:       if(!(puzzle & 0xc008008008000000ll))
15882:         altDoSolve(28, 0x10000000ll, puzzle | 0xc008008008000000ll,
15883:                    partsUsed | 0x20l);
15884:     altpiece6at27:
15885:       if (partsUsed & 0x40l) goto altpiece7at27;
15886:       if (!(puzzle & 0x8008008008000000ll)) {
15887:          if(!(puzzle & 0x8009008008000000ll))
15888:            altDoSolve(28, 0x10000000ll, puzzle | 0x8009008008000000ll,
15889:                    partsUsed | 0x40l);
15890:          if(!(puzzle & 0x8008009008000000ll))
15891:            altDoSolve(28, 0x10000000ll, puzzle | 0x8008009008000000ll,
15892:                    partsUsed | 0x40l);
15893:          if(!(puzzle & 0x800800c008000000ll))
15894:            altDoSolve(28, 0x10000000ll, puzzle | 0x800800c008000000ll,
15895:                    partsUsed | 0x40l);
15896:          if(!(puzzle & 0x800c008008000000ll))
15897:            altDoSolve(28, 0x10000000ll, puzzle | 0x800c008008000000ll,
15898:                    partsUsed | 0x40l);
15899:       }
15900:     altpiece7at27:
15901:       if (partsUsed & 0x100l) goto altpiece9at27;
15902:       if(!(puzzle & 0xc808000000ll))
15903:         altDoSolve(28, 0x10000000ll, puzzle | 0xc808000000ll,
15904:                    partsUsed | 0x100l);
15905:     altpiece9at27:
15906:       if (partsUsed & 0x200l) goto altpiece10at27;
15907:       if(!(puzzle & 0x1009208000000ll))
15908:         altDoSolve(28, 0x10000000ll, puzzle | 0x1009208000000ll,
15909:                    partsUsed | 0x200l);
15910:       if(!(puzzle & 0x400e008000000ll))
15911:         altDoSolve(28, 0x10000000ll, puzzle | 0x400e008000000ll,
15912:                    partsUsed | 0x200l);
15913:     altpiece10at27:
15914:       if (partsUsed & 0x400l) goto altpiece11at27;
15915:       if(!(puzzle & 0x9009008000000ll))
15916:         altDoSolve(28, 0x10000000ll, puzzle | 0x9009008000000ll,
15917:                    partsUsed | 0x400l);
15918:       if(!(puzzle & 0xc00c008000000ll))
15919:         altDoSolve(28, 0x10000000ll, puzzle | 0xc00c008000000ll,
15920:                    partsUsed | 0x400l);
15921:     altpiece11at27:
15922:     break;
15923:    case 28:
15924:       if (partsUsed & 0x2l) goto altpiece2at28;
15925:       if(!(puzzle & 0x480090010000000ll))
15926:         altDoSolve(29, 0x20000000ll, puzzle | 0x480090010000000ll,
15927:                    partsUsed | 0x2l);
15928:       if(!(puzzle & 0x400480090000000ll))
15929:         altDoSolve(29, 0x20000000ll, puzzle | 0x400480090000000ll,
15930:                    partsUsed | 0x2l);
15931:       if(!(puzzle & 0x1330000000ll))
15932:         altDoSolve(29, 0x20000000ll, puzzle | 0x1330000000ll,
15933:                    partsUsed | 0x2l);
15934:       if(!(puzzle & 0x1990000000ll))
15935:         altDoSolve(29, 0x20000000ll, puzzle | 0x1990000000ll,
15936:                    partsUsed | 0x2l);
15937:       if(!(puzzle & 0x40060030000000ll))
15938:         altDoSolve(29, 0x20000000ll, puzzle | 0x40060030000000ll,
15939:                    partsUsed | 0x2l);
15940:       if(!(puzzle & 0x60030010000000ll))
15941:         altDoSolve(29, 0x20000000ll, puzzle | 0x60030010000000ll,
15942:                    partsUsed | 0x2l);
15943:     altpiece2at28:
15944:       if (partsUsed & 0x4l) goto altpiece3at28;
15945:       if(!(puzzle & 0x10490010000000ll))
15946:         altDoSolve(29, 0x20000000ll, puzzle | 0x10490010000000ll,
15947:                    partsUsed | 0x4l);
15948:       if(!(puzzle & 0x10070010000000ll))
15949:         altDoSolve(29, 0x20000000ll, puzzle | 0x10070010000000ll,
15950:                    partsUsed | 0x4l);
15951:       if(!(puzzle & 0x80080490000000ll))
15952:         altDoSolve(29, 0x20000000ll, puzzle | 0x80080490000000ll,
15953:                    partsUsed | 0x4l);
15954:       if(!(puzzle & 0x790000000ll))
15955:         altDoSolve(29, 0x20000000ll, puzzle | 0x790000000ll,
15956:                    partsUsed | 0x4l);
15957:       if(!(puzzle & 0x970000000ll))
15958:         altDoSolve(29, 0x20000000ll, puzzle | 0x970000000ll,
15959:                    partsUsed | 0x4l);
15960:       if(!(puzzle & 0x20020070000000ll))
15961:         altDoSolve(29, 0x20000000ll, puzzle | 0x20020070000000ll,
15962:                    partsUsed | 0x4l);
15963:     altpiece3at28:
15964:       if (partsUsed & 0x8l) goto altpiece4at28;
15965:       if(!(puzzle & 0x400490010000000ll))
15966:         altDoSolve(29, 0x20000000ll, puzzle | 0x400490010000000ll,
15967:                    partsUsed | 0x8l);
15968:       if(!(puzzle & 0x480080090000000ll))
15969:         altDoSolve(29, 0x20000000ll, puzzle | 0x480080090000000ll,
15970:                    partsUsed | 0x8l);
15971:       if(!(puzzle & 0x1930000000ll))
15972:         altDoSolve(29, 0x20000000ll, puzzle | 0x1930000000ll,
15973:                    partsUsed | 0x8l);
15974:       if(!(puzzle & 0x1390000000ll))
15975:         altDoSolve(29, 0x20000000ll, puzzle | 0x1390000000ll,
15976:                    partsUsed | 0x8l);
15977:       if(!(puzzle & 0x40070010000000ll))
15978:         altDoSolve(29, 0x20000000ll, puzzle | 0x40070010000000ll,
15979:                    partsUsed | 0x8l);
15980:       if(!(puzzle & 0x60020030000000ll))
15981:         altDoSolve(29, 0x20000000ll, puzzle | 0x60020030000000ll,
15982:                    partsUsed | 0x8l);
15983:     altpiece4at28:
15984:       if (partsUsed & 0x10l) goto altpiece5at28;
15985:       if (!(puzzle & 0x2490000000ll)) {
15986:          if(!(puzzle & 0x412490000000ll))
15987:            altDoSolve(29, 0x20000000ll, puzzle | 0x412490000000ll,
15988:                    partsUsed | 0x10l);
15989:          if(!(puzzle & 0x6590000000ll))
15990:            altDoSolve(29, 0x20000000ll, puzzle | 0x6590000000ll,
15991:                    partsUsed | 0x10l);
15992:          if(!(puzzle & 0x2082490000000ll))
15993:            altDoSolve(29, 0x20000000ll, puzzle | 0x2082490000000ll,
15994:                    partsUsed | 0x10l);
15995:          if(!(puzzle & 0x2cb0000000ll))
15996:            altDoSolve(29, 0x20000000ll, puzzle | 0x2cb0000000ll,
15997:                    partsUsed | 0x10l);
15998:       }
15999:       if(!(puzzle & 0x4d30000000ll))
16000:         altDoSolve(29, 0x20000000ll, puzzle | 0x4d30000000ll,
16001:                    partsUsed | 0x10l);
16002:       if(!(puzzle & 0x2490410000000ll))
16003:         altDoSolve(29, 0x20000000ll, puzzle | 0x2490410000000ll,
16004:                    partsUsed | 0x10l);
16005:     altpiece5at28:
16006:       if (partsUsed & 0x20l) goto altpiece6at28;
16007:       if (!(puzzle & 0x2490000000ll)) {
16008:          if(!(puzzle & 0x2002490000000ll))
16009:            altDoSolve(29, 0x20000000ll, puzzle | 0x2002490000000ll,
16010:                    partsUsed | 0x20l);
16011:          if(!(puzzle & 0x24b0000000ll))
16012:            altDoSolve(29, 0x20000000ll, puzzle | 0x24b0000000ll,
16013:                    partsUsed | 0x20l);
16014:          if(!(puzzle & 0x12490000000ll))
16015:            altDoSolve(29, 0x20000000ll, puzzle | 0x12490000000ll,
16016:                    partsUsed | 0x20l);
16017:          if(!(puzzle & 0x6490000000ll))
16018:            altDoSolve(29, 0x20000000ll, puzzle | 0x6490000000ll,
16019:                    partsUsed | 0x20l);
16020:       }
16021:       if(!(puzzle & 0x2490010000000ll))
16022:         altDoSolve(29, 0x20000000ll, puzzle | 0x2490010000000ll,
16023:                    partsUsed | 0x20l);
16024:       if(!(puzzle & 0x4930000000ll))
16025:         altDoSolve(29, 0x20000000ll, puzzle | 0x4930000000ll,
16026:                    partsUsed | 0x20l);
16027:     altpiece6at28:
16028:       if (partsUsed & 0x40l) goto altpiece7at28;
16029:       if (!(puzzle & 0x2490000000ll)) {
16030:          if(!(puzzle & 0x402490000000ll))
16031:            altDoSolve(29, 0x20000000ll, puzzle | 0x402490000000ll,
16032:                    partsUsed | 0x40l);
16033:          if(!(puzzle & 0x2590000000ll))
16034:            altDoSolve(29, 0x20000000ll, puzzle | 0x2590000000ll,
16035:                    partsUsed | 0x40l);
16036:          if(!(puzzle & 0x82490000000ll))
16037:            altDoSolve(29, 0x20000000ll, puzzle | 0x82490000000ll,
16038:                    partsUsed | 0x40l);
16039:          if(!(puzzle & 0x2c90000000ll))
16040:            altDoSolve(29, 0x20000000ll, puzzle | 0x2c90000000ll,
16041:                    partsUsed | 0x40l);
16042:       }
16043:     altpiece7at28:
16044:       if (partsUsed & 0x80l) goto altpiece8at28;
16045:       if(!(puzzle & 0x90010090000000ll))
16046:         altDoSolve(29, 0x20000000ll, puzzle | 0x90010090000000ll,
16047:                    partsUsed | 0x80l);
16048:       if(!(puzzle & 0x90080090000000ll))
16049:         altDoSolve(29, 0x20000000ll, puzzle | 0x90080090000000ll,
16050:                    partsUsed | 0x80l);
16051:       if(!(puzzle & 0x490410000000ll))
16052:         altDoSolve(29, 0x20000000ll, puzzle | 0x490410000000ll,
16053:                    partsUsed | 0x80l);
16054:       if(!(puzzle & 0x410490000000ll))
16055:         altDoSolve(29, 0x20000000ll, puzzle | 0x410490000000ll,
16056:                    partsUsed | 0x80l);
16057:       if(!(puzzle & 0x2f0000000ll))
16058:         altDoSolve(29, 0x20000000ll, puzzle | 0x2f0000000ll,
16059:                    partsUsed | 0x80l);
16060:       if(!(puzzle & 0xcb0000000ll))
16061:         altDoSolve(29, 0x20000000ll, puzzle | 0xcb0000000ll,
16062:                    partsUsed | 0x80l);
16063:       if(!(puzzle & 0xd30000000ll))
16064:         altDoSolve(29, 0x20000000ll, puzzle | 0xd30000000ll,
16065:                    partsUsed | 0x80l);
16066:       if(!(puzzle & 0x3d0000000ll))
16067:         altDoSolve(29, 0x20000000ll, puzzle | 0x3d0000000ll,
16068:                    partsUsed | 0x80l);
16069:       if(!(puzzle & 0x30020030000000ll))
16070:         altDoSolve(29, 0x20000000ll, puzzle | 0x30020030000000ll,
16071:                    partsUsed | 0x80l);
16072:       if(!(puzzle & 0x30010030000000ll))
16073:         altDoSolve(29, 0x20000000ll, puzzle | 0x30010030000000ll,
16074:                    partsUsed | 0x80l);
16075:       if(!(puzzle & 0x70050000000ll))
16076:         altDoSolve(29, 0x20000000ll, puzzle | 0x70050000000ll,
16077:                    partsUsed | 0x80l);
16078:       if(!(puzzle & 0x50070000000ll))
16079:         altDoSolve(29, 0x20000000ll, puzzle | 0x50070000000ll,
16080:                    partsUsed | 0x80l);
16081:     altpiece8at28:
16082:       if (partsUsed & 0x100l) goto altpiece9at28;
16083:       if(!(puzzle & 0x100130000000ll))
16084:         altDoSolve(29, 0x20000000ll, puzzle | 0x100130000000ll,
16085:                    partsUsed | 0x100l);
16086:       if(!(puzzle & 0x130010000000ll))
16087:         altDoSolve(29, 0x20000000ll, puzzle | 0x130010000000ll,
16088:                    partsUsed | 0x100l);
16089:       if(!(puzzle & 0x200b0000000ll))
16090:         altDoSolve(29, 0x20000000ll, puzzle | 0x200b0000000ll,
16091:                    partsUsed | 0x100l);
16092:       if(!(puzzle & 0x90030000000ll))
16093:         altDoSolve(29, 0x20000000ll, puzzle | 0x90030000000ll,
16094:                    partsUsed | 0x100l);
16095:       if(!(puzzle & 0x180090000000ll))
16096:         altDoSolve(29, 0x20000000ll, puzzle | 0x180090000000ll,
16097:                    partsUsed | 0x100l);
16098:       if(!(puzzle & 0x10190000000ll))
16099:         altDoSolve(29, 0x20000000ll, puzzle | 0x10190000000ll,
16100:                    partsUsed | 0x100l);
16101:     altpiece9at28:
16102:       if (partsUsed & 0x200l) goto altpiece10at28;
16103:       if(!(puzzle & 0x80490010000000ll))
16104:         altDoSolve(29, 0x20000000ll, puzzle | 0x80490010000000ll,
16105:                    partsUsed | 0x200l);
16106:       if(!(puzzle & 0x80480090000000ll))
16107:         altDoSolve(29, 0x20000000ll, puzzle | 0x80480090000000ll,
16108:                    partsUsed | 0x200l);
16109:       if(!(puzzle & 0xb30000000ll))
16110:         altDoSolve(29, 0x20000000ll, puzzle | 0xb30000000ll,
16111:                    partsUsed | 0x200l);
16112:       if(!(puzzle & 0xb90000000ll))
16113:         altDoSolve(29, 0x20000000ll, puzzle | 0xb90000000ll,
16114:                    partsUsed | 0x200l);
16115:       if(!(puzzle & 0x20060030000000ll))
16116:         altDoSolve(29, 0x20000000ll, puzzle | 0x20060030000000ll,
16117:                    partsUsed | 0x200l);
16118:       if(!(puzzle & 0x20070010000000ll))
16119:         altDoSolve(29, 0x20000000ll, puzzle | 0x20070010000000ll,
16120:                    partsUsed | 0x200l);
16121:     altpiece10at28:
16122:       if (partsUsed & 0x400l) goto altpiece11at28;
16123:       if (!(puzzle & 0x80090000000ll)) {
16124:          if(!(puzzle & 0x10090090000000ll))
16125:            altDoSolve(29, 0x20000000ll, puzzle | 0x10090090000000ll,
16126:                    partsUsed | 0x400l);
16127:          if(!(puzzle & 0x490090000000ll))
16128:            altDoSolve(29, 0x20000000ll, puzzle | 0x490090000000ll,
16129:                    partsUsed | 0x400l);
16130:          if(!(puzzle & 0x480490000000ll))
16131:            altDoSolve(29, 0x20000000ll, puzzle | 0x480490000000ll,
16132:                    partsUsed | 0x400l);
16133:          if(!(puzzle & 0x90490000000ll))
16134:            altDoSolve(29, 0x20000000ll, puzzle | 0x90490000000ll,
16135:                    partsUsed | 0x400l);
16136:          if(!(puzzle & 0x80090090000000ll))
16137:            altDoSolve(29, 0x20000000ll, puzzle | 0x80090090000000ll,
16138:                    partsUsed | 0x400l);
16139:       }
16140:       if (!(puzzle & 0x130000000ll)) {
16141:          if(!(puzzle & 0x370000000ll))
16142:            altDoSolve(29, 0x20000000ll, puzzle | 0x370000000ll,
16143:                    partsUsed | 0x400l);
16144:          if(!(puzzle & 0x1f0000000ll))
16145:            altDoSolve(29, 0x20000000ll, puzzle | 0x1f0000000ll,
16146:                    partsUsed | 0x400l);
16147:          if(!(puzzle & 0x5b0000000ll))
16148:            altDoSolve(29, 0x20000000ll, puzzle | 0x5b0000000ll,
16149:                    partsUsed | 0x400l);
16150:          if(!(puzzle & 0x9b0000000ll))
16151:            altDoSolve(29, 0x20000000ll, puzzle | 0x9b0000000ll,
16152:                    partsUsed | 0x400l);
16153:          if(!(puzzle & 0x3b0000000ll))
16154:            altDoSolve(29, 0x20000000ll, puzzle | 0x3b0000000ll,
16155:                    partsUsed | 0x400l);
16156:       }
16157:       if (!(puzzle & 0x10010010000000ll)) {
16158:          if(!(puzzle & 0x90090010000000ll))
16159:            altDoSolve(29, 0x20000000ll, puzzle | 0x90090010000000ll,
16160:                    partsUsed | 0x400l);
16161:          if(!(puzzle & 0x10030030000000ll))
16162:            altDoSolve(29, 0x20000000ll, puzzle | 0x10030030000000ll,
16163:                    partsUsed | 0x400l);
16164:          if(!(puzzle & 0x30030010000000ll))
16165:            altDoSolve(29, 0x20000000ll, puzzle | 0x30030010000000ll,
16166:                    partsUsed | 0x400l);
16167:       }
16168:       if (!(puzzle & 0x20030000000ll)) {
16169:          if(!(puzzle & 0x20030030000000ll))
16170:            altDoSolve(29, 0x20000000ll, puzzle | 0x20030030000000ll,
16171:                    partsUsed | 0x400l);
16172:          if(!(puzzle & 0x70030000000ll))
16173:            altDoSolve(29, 0x20000000ll, puzzle | 0x70030000000ll,
16174:                    partsUsed | 0x400l);
16175:          if(!(puzzle & 0x30070000000ll))
16176:            altDoSolve(29, 0x20000000ll, puzzle | 0x30070000000ll,
16177:                    partsUsed | 0x400l);
16178:          if(!(puzzle & 0x60070000000ll))
16179:            altDoSolve(29, 0x20000000ll, puzzle | 0x60070000000ll,
16180:                    partsUsed | 0x400l);
16181:       }
16182:       if(!(puzzle & 0xd90000000ll))
16183:         altDoSolve(29, 0x20000000ll, puzzle | 0xd90000000ll,
16184:                    partsUsed | 0x400l);
16185:     altpiece11at28:
16186:       if (partsUsed & 0x800l) goto altpiece13at28;
16187:       if (!(puzzle & 0x10030000000ll)) {
16188:          if(!(puzzle & 0x101b0000000ll))
16189:            altDoSolve(29, 0x20000000ll, puzzle | 0x101b0000000ll,
16190:                    partsUsed | 0x800l);
16191:          if(!(puzzle & 0xb0030000000ll))
16192:            altDoSolve(29, 0x20000000ll, puzzle | 0xb0030000000ll,
16193:                    partsUsed | 0x800l);
16194:          if(!(puzzle & 0x300b0000000ll))
16195:            altDoSolve(29, 0x20000000ll, puzzle | 0x300b0000000ll,
16196:                    partsUsed | 0x800l);
16197:          if(!(puzzle & 0x30130000000ll))
16198:            altDoSolve(29, 0x20000000ll, puzzle | 0x30130000000ll,
16199:                    partsUsed | 0x800l);
16200:          if(!(puzzle & 0x130030000000ll))
16201:            altDoSolve(29, 0x20000000ll, puzzle | 0x130030000000ll,
16202:                    partsUsed | 0x800l);
16203:          if(!(puzzle & 0x900b0000000ll))
16204:            altDoSolve(29, 0x20000000ll, puzzle | 0x900b0000000ll,
16205:                    partsUsed | 0x800l);
16206:       }
16207:       if (!(puzzle & 0x100110000000ll)) {
16208:          if(!(puzzle & 0x180190000000ll))
16209:            altDoSolve(29, 0x20000000ll, puzzle | 0x180190000000ll,
16210:                    partsUsed | 0x800l);
16211:          if(!(puzzle & 0x120130000000ll))
16212:            altDoSolve(29, 0x20000000ll, puzzle | 0x120130000000ll,
16213:                    partsUsed | 0x800l);
16214:          if(!(puzzle & 0x1001b0000000ll))
16215:            altDoSolve(29, 0x20000000ll, puzzle | 0x1001b0000000ll,
16216:                    partsUsed | 0x800l);
16217:       }
16218:       if (!(puzzle & 0x80090000000ll)) {
16219:          if(!(puzzle & 0xb0090000000ll))
16220:            altDoSolve(29, 0x20000000ll, puzzle | 0xb0090000000ll,
16221:                    partsUsed | 0x800l);
16222:          if(!(puzzle & 0x90190000000ll))
16223:            altDoSolve(29, 0x20000000ll, puzzle | 0x90190000000ll,
16224:                    partsUsed | 0x800l);
16225:          if(!(puzzle & 0x801b0000000ll))
16226:            altDoSolve(29, 0x20000000ll, puzzle | 0x801b0000000ll,
16227:                    partsUsed | 0x800l);
16228:          if(!(puzzle & 0x190090000000ll))
16229:            altDoSolve(29, 0x20000000ll, puzzle | 0x190090000000ll,
16230:                    partsUsed | 0x800l);
16231:       }
16232:       if(!(puzzle & 0x201b0000000ll))
16233:         altDoSolve(29, 0x20000000ll, puzzle | 0x201b0000000ll,
16234:                    partsUsed | 0x800l);
16235:       if(!(puzzle & 0x1b0010000000ll))
16236:         altDoSolve(29, 0x20000000ll, puzzle | 0x1b0010000000ll,
16237:                    partsUsed | 0x800l);
16238:     altpiece13at28:
16239:     break;
16240:    case 29:
16241:       if (partsUsed & 0x2l) goto altpiece2at29;
16242:       if(!(puzzle & 0x5e0000000ll))
16243:         altDoSolve(30, 0x40000000ll, puzzle | 0x5e0000000ll,
16244:                    partsUsed | 0x2l);
16245:       if(!(puzzle & 0x10030060000000ll))
16246:         altDoSolve(30, 0x40000000ll, puzzle | 0x10030060000000ll,
16247:                    partsUsed | 0x2l);
16248:       if(!(puzzle & 0x900120020000000ll))
16249:         altDoSolve(30, 0x40000000ll, puzzle | 0x900120020000000ll,
16250:                    partsUsed | 0x2l);
16251:       if(!(puzzle & 0x800900120000000ll))
16252:         altDoSolve(30, 0x40000000ll, puzzle | 0x800900120000000ll,
16253:                    partsUsed | 0x2l);
16254:     altpiece2at29:
16255:       if (partsUsed & 0x4l) goto altpiece3at29;
16256:       if(!(puzzle & 0x1d20000000ll))
16257:         altDoSolve(30, 0x40000000ll, puzzle | 0x1d20000000ll,
16258:                    partsUsed | 0x4l);
16259:       if(!(puzzle & 0x100100920000000ll))
16260:         altDoSolve(30, 0x40000000ll, puzzle | 0x100100920000000ll,
16261:                    partsUsed | 0x4l);
16262:       if(!(puzzle & 0x70020020000000ll))
16263:         altDoSolve(30, 0x40000000ll, puzzle | 0x70020020000000ll,
16264:                    partsUsed | 0x4l);
16265:       if(!(puzzle & 0x20920020000000ll))
16266:         altDoSolve(30, 0x40000000ll, puzzle | 0x20920020000000ll,
16267:                    partsUsed | 0x4l);
16268:     altpiece3at29:
16269:       if (partsUsed & 0x8l) goto altpiece4at29;
16270:       if(!(puzzle & 0xd60000000ll))
16271:         altDoSolve(30, 0x40000000ll, puzzle | 0xd60000000ll,
16272:                    partsUsed | 0x8l);
16273:       if(!(puzzle & 0x30020060000000ll))
16274:         altDoSolve(30, 0x40000000ll, puzzle | 0x30020060000000ll,
16275:                    partsUsed | 0x8l);
16276:       if(!(puzzle & 0x800920020000000ll))
16277:         altDoSolve(30, 0x40000000ll, puzzle | 0x800920020000000ll,
16278:                    partsUsed | 0x8l);
16279:       if(!(puzzle & 0x900100120000000ll))
16280:         altDoSolve(30, 0x40000000ll, puzzle | 0x900100120000000ll,
16281:                    partsUsed | 0x8l);
16282:     altpiece4at29:
16283:       if (partsUsed & 0x10l) goto altpiece5at29;
16284:       if (!(puzzle & 0x4920000000ll)) {
16285:          if(!(puzzle & 0x69a0000000ll))
16286:            altDoSolve(30, 0x40000000ll, puzzle | 0x69a0000000ll,
16287:                    partsUsed | 0x10l);
16288:          if(!(puzzle & 0x824920000000ll))
16289:            altDoSolve(30, 0x40000000ll, puzzle | 0x824920000000ll,
16290:                    partsUsed | 0x10l);
16291:          if(!(puzzle & 0xcb20000000ll))
16292:            altDoSolve(30, 0x40000000ll, puzzle | 0xcb20000000ll,
16293:                    partsUsed | 0x10l);
16294:          if(!(puzzle & 0x4104920000000ll))
16295:            altDoSolve(30, 0x40000000ll, puzzle | 0x4104920000000ll,
16296:                    partsUsed | 0x10l);
16297:          if(!(puzzle & 0x5960000000ll))
16298:            altDoSolve(30, 0x40000000ll, puzzle | 0x5960000000ll,
16299:                    partsUsed | 0x10l);
16300:       }
16301:       if(!(puzzle & 0x9a60000000ll))
16302:         altDoSolve(30, 0x40000000ll, puzzle | 0x9a60000000ll,
16303:                    partsUsed | 0x10l);
16304:       if(!(puzzle & 0x4920820000000ll))
16305:         altDoSolve(30, 0x40000000ll, puzzle | 0x4920820000000ll,
16306:                    partsUsed | 0x10l);
16307:     altpiece5at29:
16308:       if (partsUsed & 0x20l) goto altpiece6at29;
16309:       if (!(puzzle & 0x4920000000ll)) {
16310:          if(!(puzzle & 0x6920000000ll))
16311:            altDoSolve(30, 0x40000000ll, puzzle | 0x6920000000ll,
16312:                    partsUsed | 0x20l);
16313:          if(!(puzzle & 0x4004920000000ll))
16314:            altDoSolve(30, 0x40000000ll, puzzle | 0x4004920000000ll,
16315:                    partsUsed | 0x20l);
16316:          if(!(puzzle & 0x4960000000ll))
16317:            altDoSolve(30, 0x40000000ll, puzzle | 0x4960000000ll,
16318:                    partsUsed | 0x20l);
16319:          if(!(puzzle & 0x24920000000ll))
16320:            altDoSolve(30, 0x40000000ll, puzzle | 0x24920000000ll,
16321:                    partsUsed | 0x20l);
16322:          if(!(puzzle & 0xc920000000ll))
16323:            altDoSolve(30, 0x40000000ll, puzzle | 0xc920000000ll,
16324:                    partsUsed | 0x20l);
16325:       }
16326:       if(!(puzzle & 0x4920020000000ll))
16327:         altDoSolve(30, 0x40000000ll, puzzle | 0x4920020000000ll,
16328:                    partsUsed | 0x20l);
16329:       if(!(puzzle & 0x9260000000ll))
16330:         altDoSolve(30, 0x40000000ll, puzzle | 0x9260000000ll,
16331:                    partsUsed | 0x20l);
16332:     altpiece6at29:
16333:       if (partsUsed & 0x40l) goto altpiece7at29;
16334:       if (!(puzzle & 0x4920000000ll)) {
16335:          if(!(puzzle & 0x49a0000000ll))
16336:            altDoSolve(30, 0x40000000ll, puzzle | 0x49a0000000ll,
16337:                    partsUsed | 0x40l);
16338:          if(!(puzzle & 0x4d20000000ll))
16339:            altDoSolve(30, 0x40000000ll, puzzle | 0x4d20000000ll,
16340:                    partsUsed | 0x40l);
16341:          if(!(puzzle & 0x804920000000ll))
16342:            altDoSolve(30, 0x40000000ll, puzzle | 0x804920000000ll,
16343:                    partsUsed | 0x40l);
16344:          if(!(puzzle & 0x4b20000000ll))
16345:            altDoSolve(30, 0x40000000ll, puzzle | 0x4b20000000ll,
16346:                    partsUsed | 0x40l);
16347:          if(!(puzzle & 0x104920000000ll))
16348:            altDoSolve(30, 0x40000000ll, puzzle | 0x104920000000ll,
16349:                    partsUsed | 0x40l);
16350:          if(!(puzzle & 0x5920000000ll))
16351:            altDoSolve(30, 0x40000000ll, puzzle | 0x5920000000ll,
16352:                    partsUsed | 0x40l);
16353:       }
16354:     altpiece7at29:
16355:       if (partsUsed & 0x80l) goto altpiece8at29;
16356:       if(!(puzzle & 0x120020120000000ll))
16357:         altDoSolve(30, 0x40000000ll, puzzle | 0x120020120000000ll,
16358:                    partsUsed | 0x80l);
16359:       if(!(puzzle & 0x120100120000000ll))
16360:         altDoSolve(30, 0x40000000ll, puzzle | 0x120100120000000ll,
16361:                    partsUsed | 0x80l);
16362:       if(!(puzzle & 0x920820000000ll))
16363:         altDoSolve(30, 0x40000000ll, puzzle | 0x920820000000ll,
16364:                    partsUsed | 0x80l);
16365:       if(!(puzzle & 0x820920000000ll))
16366:         altDoSolve(30, 0x40000000ll, puzzle | 0x820920000000ll,
16367:                    partsUsed | 0x80l);
16368:       if(!(puzzle & 0x1960000000ll))
16369:         altDoSolve(30, 0x40000000ll, puzzle | 0x1960000000ll,
16370:                    partsUsed | 0x80l);
16371:       if(!(puzzle & 0x1a60000000ll))
16372:         altDoSolve(30, 0x40000000ll, puzzle | 0x1a60000000ll,
16373:                    partsUsed | 0x80l);
16374:       if(!(puzzle & 0x60040060000000ll))
16375:         altDoSolve(30, 0x40000000ll, puzzle | 0x60040060000000ll,
16376:                    partsUsed | 0x80l);
16377:       if(!(puzzle & 0x60020060000000ll))
16378:         altDoSolve(30, 0x40000000ll, puzzle | 0x60020060000000ll,
16379:                    partsUsed | 0x80l);
16380:     altpiece8at29:
16381:       if (partsUsed & 0x100l) goto altpiece9at29;
16382:       if(!(puzzle & 0x801a0000000ll))
16383:         altDoSolve(30, 0x40000000ll, puzzle | 0x801a0000000ll,
16384:                    partsUsed | 0x100l);
16385:       if(!(puzzle & 0x30120000000ll))
16386:         altDoSolve(30, 0x40000000ll, puzzle | 0x30120000000ll,
16387:                    partsUsed | 0x100l);
16388:       if(!(puzzle & 0x20320000000ll))
16389:         altDoSolve(30, 0x40000000ll, puzzle | 0x20320000000ll,
16390:                    partsUsed | 0x100l);
16391:       if(!(puzzle & 0x1a0020000000ll))
16392:         altDoSolve(30, 0x40000000ll, puzzle | 0x1a0020000000ll,
16393:                    partsUsed | 0x100l);
16394:       if(!(puzzle & 0x120060000000ll))
16395:         altDoSolve(30, 0x40000000ll, puzzle | 0x120060000000ll,
16396:                    partsUsed | 0x100l);
16397:       if(!(puzzle & 0x260020000000ll))
16398:         altDoSolve(30, 0x40000000ll, puzzle | 0x260020000000ll,
16399:                    partsUsed | 0x100l);
16400:       if(!(puzzle & 0x40160000000ll))
16401:         altDoSolve(30, 0x40000000ll, puzzle | 0x40160000000ll,
16402:                    partsUsed | 0x100l);
16403:       if(!(puzzle & 0x300120000000ll))
16404:         altDoSolve(30, 0x40000000ll, puzzle | 0x300120000000ll,
16405:                    partsUsed | 0x100l);
16406:       if(!(puzzle & 0x200260000000ll))
16407:         altDoSolve(30, 0x40000000ll, puzzle | 0x200260000000ll,
16408:                    partsUsed | 0x100l);
16409:     altpiece9at29:
16410:       if (partsUsed & 0x200l) goto altpiece10at29;
16411:       if (!(puzzle & 0x1a0000000ll)) {
16412:          if(!(puzzle & 0x13a0000000ll))
16413:            altDoSolve(30, 0x40000000ll, puzzle | 0x13a0000000ll,
16414:                    partsUsed | 0x200l);
16415:          if(!(puzzle & 0x7a0000000ll))
16416:            altDoSolve(30, 0x40000000ll, puzzle | 0x7a0000000ll,
16417:                    partsUsed | 0x200l);
16418:          if(!(puzzle & 0x9e0000000ll))
16419:            altDoSolve(30, 0x40000000ll, puzzle | 0x9e0000000ll,
16420:                    partsUsed | 0x200l);
16421:          if(!(puzzle & 0x19a0000000ll))
16422:            altDoSolve(30, 0x40000000ll, puzzle | 0x19a0000000ll,
16423:                    partsUsed | 0x200l);
16424:       }
16425:       if (!(puzzle & 0x20020020000000ll)) {
16426:          if(!(puzzle & 0x20030060000000ll))
16427:            altDoSolve(30, 0x40000000ll, puzzle | 0x20030060000000ll,
16428:                    partsUsed | 0x200l);
16429:          if(!(puzzle & 0x60030020000000ll))
16430:            altDoSolve(30, 0x40000000ll, puzzle | 0x60030020000000ll,
16431:                    partsUsed | 0x200l);
16432:          if(!(puzzle & 0x30060020000000ll))
16433:            altDoSolve(30, 0x40000000ll, puzzle | 0x30060020000000ll,
16434:                    partsUsed | 0x200l);
16435:       }
16436:       if(!(puzzle & 0xf20000000ll))
16437:         altDoSolve(30, 0x40000000ll, puzzle | 0xf20000000ll,
16438:                    partsUsed | 0x200l);
16439:       if(!(puzzle & 0x10070020000000ll))
16440:         altDoSolve(30, 0x40000000ll, puzzle | 0x10070020000000ll,
16441:                    partsUsed | 0x200l);
16442:       if(!(puzzle & 0x40070020000000ll))
16443:         altDoSolve(30, 0x40000000ll, puzzle | 0x40070020000000ll,
16444:                    partsUsed | 0x200l);
16445:       if(!(puzzle & 0x100920020000000ll))
16446:         altDoSolve(30, 0x40000000ll, puzzle | 0x100920020000000ll,
16447:                    partsUsed | 0x200l);
16448:       if(!(puzzle & 0x100900120000000ll))
16449:         altDoSolve(30, 0x40000000ll, puzzle | 0x100900120000000ll,
16450:                    partsUsed | 0x200l);
16451:     altpiece10at29:
16452:       if (partsUsed & 0x400l) goto altpiece11at29;
16453:       if (!(puzzle & 0x100120000000ll)) {
16454:          if(!(puzzle & 0x20120120000000ll))
16455:            altDoSolve(30, 0x40000000ll, puzzle | 0x20120120000000ll,
16456:                    partsUsed | 0x400l);
16457:          if(!(puzzle & 0x920120000000ll))
16458:            altDoSolve(30, 0x40000000ll, puzzle | 0x920120000000ll,
16459:                    partsUsed | 0x400l);
16460:          if(!(puzzle & 0x900920000000ll))
16461:            altDoSolve(30, 0x40000000ll, puzzle | 0x900920000000ll,
16462:                    partsUsed | 0x400l);
16463:          if(!(puzzle & 0x120920000000ll))
16464:            altDoSolve(30, 0x40000000ll, puzzle | 0x120920000000ll,
16465:                    partsUsed | 0x400l);
16466:          if(!(puzzle & 0x100120120000000ll))
16467:            altDoSolve(30, 0x40000000ll, puzzle | 0x100120120000000ll,
16468:                    partsUsed | 0x400l);
16469:       }
16470:       if (!(puzzle & 0x20020020000000ll)) {
16471:          if(!(puzzle & 0x120120020000000ll))
16472:            altDoSolve(30, 0x40000000ll, puzzle | 0x120120020000000ll,
16473:                    partsUsed | 0x400l);
16474:          if(!(puzzle & 0x20060060000000ll))
16475:            altDoSolve(30, 0x40000000ll, puzzle | 0x20060060000000ll,
16476:                    partsUsed | 0x400l);
16477:          if(!(puzzle & 0x60060020000000ll))
16478:            altDoSolve(30, 0x40000000ll, puzzle | 0x60060020000000ll,
16479:                    partsUsed | 0x400l);
16480:       }
16481:       if (!(puzzle & 0x320000000ll)) {
16482:          if(!(puzzle & 0xb60000000ll))
16483:            altDoSolve(30, 0x40000000ll, puzzle | 0xb60000000ll,
16484:                    partsUsed | 0x400l);
16485:          if(!(puzzle & 0x1360000000ll))
16486:            altDoSolve(30, 0x40000000ll, puzzle | 0x1360000000ll,
16487:                    partsUsed | 0x400l);
16488:          if(!(puzzle & 0x1b20000000ll))
16489:            altDoSolve(30, 0x40000000ll, puzzle | 0x1b20000000ll,
16490:                    partsUsed | 0x400l);
16491:       }
16492:       if(!(puzzle & 0x3e0000000ll))
16493:         altDoSolve(30, 0x40000000ll, puzzle | 0x3e0000000ll,
16494:                    partsUsed | 0x400l);
16495:       if(!(puzzle & 0xda0000000ll))
16496:         altDoSolve(30, 0x40000000ll, puzzle | 0xda0000000ll,
16497:                    partsUsed | 0x400l);
16498:       if(!(puzzle & 0x70060000000ll))
16499:         altDoSolve(30, 0x40000000ll, puzzle | 0x70060000000ll,
16500:                    partsUsed | 0x400l);
16501:       if(!(puzzle & 0x30030020000000ll))
16502:         altDoSolve(30, 0x40000000ll, puzzle | 0x30030020000000ll,
16503:                    partsUsed | 0x400l);
16504:       if(!(puzzle & 0x40060060000000ll))
16505:         altDoSolve(30, 0x40000000ll, puzzle | 0x40060060000000ll,
16506:                    partsUsed | 0x400l);
16507:     altpiece11at29:
16508:       if (partsUsed & 0x800l) goto altpiece13at29;
16509:       if (!(puzzle & 0x20060000000ll)) {
16510:          if(!(puzzle & 0x20360000000ll))
16511:            altDoSolve(30, 0x40000000ll, puzzle | 0x20360000000ll,
16512:                    partsUsed | 0x800l);
16513:          if(!(puzzle & 0x160060000000ll))
16514:            altDoSolve(30, 0x40000000ll, puzzle | 0x160060000000ll,
16515:                    partsUsed | 0x800l);
16516:          if(!(puzzle & 0x60160000000ll))
16517:            altDoSolve(30, 0x40000000ll, puzzle | 0x60160000000ll,
16518:                    partsUsed | 0x800l);
16519:          if(!(puzzle & 0x60260000000ll))
16520:            altDoSolve(30, 0x40000000ll, puzzle | 0x60260000000ll,
16521:                    partsUsed | 0x800l);
16522:          if(!(puzzle & 0x260060000000ll))
16523:            altDoSolve(30, 0x40000000ll, puzzle | 0x260060000000ll,
16524:                    partsUsed | 0x800l);
16525:          if(!(puzzle & 0x120160000000ll))
16526:            altDoSolve(30, 0x40000000ll, puzzle | 0x120160000000ll,
16527:                    partsUsed | 0x800l);
16528:       }
16529:       if (!(puzzle & 0x200220000000ll)) {
16530:          if(!(puzzle & 0x300320000000ll))
16531:            altDoSolve(30, 0x40000000ll, puzzle | 0x300320000000ll,
16532:                    partsUsed | 0x800l);
16533:          if(!(puzzle & 0x240260000000ll))
16534:            altDoSolve(30, 0x40000000ll, puzzle | 0x240260000000ll,
16535:                    partsUsed | 0x800l);
16536:          if(!(puzzle & 0x200360000000ll))
16537:            altDoSolve(30, 0x40000000ll, puzzle | 0x200360000000ll,
16538:                    partsUsed | 0x800l);
16539:       }
16540:       if (!(puzzle & 0x100120000000ll)) {
16541:          if(!(puzzle & 0x160120000000ll))
16542:            altDoSolve(30, 0x40000000ll, puzzle | 0x160120000000ll,
16543:                    partsUsed | 0x800l);
16544:          if(!(puzzle & 0x120320000000ll))
16545:            altDoSolve(30, 0x40000000ll, puzzle | 0x120320000000ll,
16546:                    partsUsed | 0x800l);
16547:          if(!(puzzle & 0x100360000000ll))
16548:            altDoSolve(30, 0x40000000ll, puzzle | 0x100360000000ll,
16549:                    partsUsed | 0x800l);
16550:          if(!(puzzle & 0x320120000000ll))
16551:            altDoSolve(30, 0x40000000ll, puzzle | 0x320120000000ll,
16552:                    partsUsed | 0x800l);
16553:          if(!(puzzle & 0x1a0120000000ll))
16554:            altDoSolve(30, 0x40000000ll, puzzle | 0x1a0120000000ll,
16555:                    partsUsed | 0x800l);
16556:          if(!(puzzle & 0x1801a0000000ll))
16557:            altDoSolve(30, 0x40000000ll, puzzle | 0x1801a0000000ll,
16558:                    partsUsed | 0x800l);
16559:          if(!(puzzle & 0x130120000000ll))
16560:            altDoSolve(30, 0x40000000ll, puzzle | 0x130120000000ll,
16561:                    partsUsed | 0x800l);
16562:          if(!(puzzle & 0x1201a0000000ll))
16563:            altDoSolve(30, 0x40000000ll, puzzle | 0x1201a0000000ll,
16564:                    partsUsed | 0x800l);
16565:       }
16566:       if(!(puzzle & 0x40360000000ll))
16567:         altDoSolve(30, 0x40000000ll, puzzle | 0x40360000000ll,
16568:                    partsUsed | 0x800l);
16569:       if(!(puzzle & 0x360020000000ll))
16570:         altDoSolve(30, 0x40000000ll, puzzle | 0x360020000000ll,
16571:                    partsUsed | 0x800l);
16572:       if(!(puzzle & 0x1b0020000000ll))
16573:         altDoSolve(30, 0x40000000ll, puzzle | 0x1b0020000000ll,
16574:                    partsUsed | 0x800l);
16575:     altpiece13at29:
16576:     break;
16577:    case 30:
16578:       if (partsUsed & 0x2l) goto altpiece2at30;
16579:       if(!(puzzle & 0xf40000000ll))
16580:         altDoSolve(31, 0x80000000ll, puzzle | 0xf40000000ll,
16581:                    partsUsed | 0x2l);
16582:       if(!(puzzle & 0x30060040000000ll))
16583:         altDoSolve(31, 0x80000000ll, puzzle | 0x30060040000000ll,
16584:                    partsUsed | 0x2l);
16585:       if(!(puzzle & 0x1200240040000000ll))
16586:         altDoSolve(31, 0x80000000ll, puzzle | 0x1200240040000000ll,
16587:                    partsUsed | 0x2l);
16588:       if(!(puzzle & 0x1001200240000000ll))
16589:         altDoSolve(31, 0x80000000ll, puzzle | 0x1001200240000000ll,
16590:                    partsUsed | 0x2l);
16591:     altpiece2at30:
16592:       if (partsUsed & 0x4l) goto altpiece3at30;
16593:       if(!(puzzle & 0x13c0000000ll))
16594:         altDoSolve(31, 0x80000000ll, puzzle | 0x13c0000000ll,
16595:                    partsUsed | 0x4l);
16596:       if(!(puzzle & 0x200201240000000ll))
16597:         altDoSolve(31, 0x80000000ll, puzzle | 0x200201240000000ll,
16598:                    partsUsed | 0x4l);
16599:       if(!(puzzle & 0x40070040000000ll))
16600:         altDoSolve(31, 0x80000000ll, puzzle | 0x40070040000000ll,
16601:                    partsUsed | 0x4l);
16602:       if(!(puzzle & 0x41240040000000ll))
16603:         altDoSolve(31, 0x80000000ll, puzzle | 0x41240040000000ll,
16604:                    partsUsed | 0x4l);
16605:     altpiece3at30:
16606:       if (partsUsed & 0x8l) goto altpiece4at30;
16607:       if(!(puzzle & 0x7c0000000ll))
16608:         altDoSolve(31, 0x80000000ll, puzzle | 0x7c0000000ll,
16609:                    partsUsed | 0x8l);
16610:       if(!(puzzle & 0x10070040000000ll))
16611:         altDoSolve(31, 0x80000000ll, puzzle | 0x10070040000000ll,
16612:                    partsUsed | 0x8l);
16613:       if(!(puzzle & 0x1001240040000000ll))
16614:         altDoSolve(31, 0x80000000ll, puzzle | 0x1001240040000000ll,
16615:                    partsUsed | 0x8l);
16616:       if(!(puzzle & 0x1200200240000000ll))
16617:         altDoSolve(31, 0x80000000ll, puzzle | 0x1200200240000000ll,
16618:                    partsUsed | 0x8l);
16619:     altpiece4at30:
16620:       if (partsUsed & 0x10l) goto altpiece5at30;
16621:       if (!(puzzle & 0x9240000000ll)) {
16622:          if(!(puzzle & 0xd340000000ll))
16623:            altDoSolve(31, 0x80000000ll, puzzle | 0xd340000000ll,
16624:                    partsUsed | 0x10l);
16625:          if(!(puzzle & 0x1049240000000ll))
16626:            altDoSolve(31, 0x80000000ll, puzzle | 0x1049240000000ll,
16627:                    partsUsed | 0x10l);
16628:          if(!(puzzle & 0x8209240000000ll))
16629:            altDoSolve(31, 0x80000000ll, puzzle | 0x8209240000000ll,
16630:                    partsUsed | 0x10l);
16631:       }
16632:       if(!(puzzle & 0x9241040000000ll))
16633:         altDoSolve(31, 0x80000000ll, puzzle | 0x9241040000000ll,
16634:                    partsUsed | 0x10l);
16635:     altpiece5at30:
16636:       if (partsUsed & 0x20l) goto altpiece6at30;
16637:       if (!(puzzle & 0x9240000000ll)) {
16638:          if(!(puzzle & 0xd240000000ll))
16639:            altDoSolve(31, 0x80000000ll, puzzle | 0xd240000000ll,
16640:                    partsUsed | 0x20l);
16641:          if(!(puzzle & 0x8009240000000ll))
16642:            altDoSolve(31, 0x80000000ll, puzzle | 0x8009240000000ll,
16643:                    partsUsed | 0x20l);
16644:          if(!(puzzle & 0x49240000000ll))
16645:            altDoSolve(31, 0x80000000ll, puzzle | 0x49240000000ll,
16646:                    partsUsed | 0x20l);
16647:       }
16648:       if(!(puzzle & 0x9240040000000ll))
16649:         altDoSolve(31, 0x80000000ll, puzzle | 0x9240040000000ll,
16650:                    partsUsed | 0x20l);
16651:     altpiece6at30:
16652:       if (partsUsed & 0x40l) goto altpiece7at30;
16653:       if (!(puzzle & 0x9240000000ll)) {
16654:          if(!(puzzle & 0x9340000000ll))
16655:            altDoSolve(31, 0x80000000ll, puzzle | 0x9340000000ll,
16656:                    partsUsed | 0x40l);
16657:          if(!(puzzle & 0x9a40000000ll))
16658:            altDoSolve(31, 0x80000000ll, puzzle | 0x9a40000000ll,
16659:                    partsUsed | 0x40l);
16660:          if(!(puzzle & 0x1009240000000ll))
16661:            altDoSolve(31, 0x80000000ll, puzzle | 0x1009240000000ll,
16662:                    partsUsed | 0x40l);
16663:          if(!(puzzle & 0x209240000000ll))
16664:            altDoSolve(31, 0x80000000ll, puzzle | 0x209240000000ll,
16665:                    partsUsed | 0x40l);
16666:       }
16667:     altpiece7at30:
16668:       if (partsUsed & 0x80l) goto altpiece8at30;
16669:       if(!(puzzle & 0x240040240000000ll))
16670:         altDoSolve(31, 0x80000000ll, puzzle | 0x240040240000000ll,
16671:                    partsUsed | 0x80l);
16672:       if(!(puzzle & 0x240200240000000ll))
16673:         altDoSolve(31, 0x80000000ll, puzzle | 0x240200240000000ll,
16674:                    partsUsed | 0x80l);
16675:       if(!(puzzle & 0x1241040000000ll))
16676:         altDoSolve(31, 0x80000000ll, puzzle | 0x1241040000000ll,
16677:                    partsUsed | 0x80l);
16678:       if(!(puzzle & 0x1041240000000ll))
16679:         altDoSolve(31, 0x80000000ll, puzzle | 0x1041240000000ll,
16680:                    partsUsed | 0x80l);
16681:     altpiece8at30:
16682:       if (partsUsed & 0x100l) goto altpiece9at30;
16683:       if(!(puzzle & 0x340040000000ll))
16684:         altDoSolve(31, 0x80000000ll, puzzle | 0x340040000000ll,
16685:                    partsUsed | 0x100l);
16686:       if(!(puzzle & 0x100340000000ll))
16687:         altDoSolve(31, 0x80000000ll, puzzle | 0x100340000000ll,
16688:                    partsUsed | 0x100l);
16689:       if(!(puzzle & 0x60240000000ll))
16690:         altDoSolve(31, 0x80000000ll, puzzle | 0x60240000000ll,
16691:                    partsUsed | 0x100l);
16692:     altpiece9at30:
16693:       if (partsUsed & 0x200l) goto altpiece10at30;
16694:       if(!(puzzle & 0xbc0000000ll))
16695:         altDoSolve(31, 0x80000000ll, puzzle | 0xbc0000000ll,
16696:                    partsUsed | 0x200l);
16697:       if(!(puzzle & 0x20070040000000ll))
16698:         altDoSolve(31, 0x80000000ll, puzzle | 0x20070040000000ll,
16699:                    partsUsed | 0x200l);
16700:       if(!(puzzle & 0x201240040000000ll))
16701:         altDoSolve(31, 0x80000000ll, puzzle | 0x201240040000000ll,
16702:                    partsUsed | 0x200l);
16703:       if(!(puzzle & 0x201200240000000ll))
16704:         altDoSolve(31, 0x80000000ll, puzzle | 0x201200240000000ll,
16705:                    partsUsed | 0x200l);
16706:     altpiece10at30:
16707:       if (partsUsed & 0x400l) goto altpiece11at30;
16708:       if (!(puzzle & 0x1240000000ll)) {
16709:          if(!(puzzle & 0x1b40000000ll))
16710:            altDoSolve(31, 0x80000000ll, puzzle | 0x1b40000000ll,
16711:                    partsUsed | 0x400l);
16712:          if(!(puzzle & 0x1201240000000ll))
16713:            altDoSolve(31, 0x80000000ll, puzzle | 0x1201240000000ll,
16714:                    partsUsed | 0x400l);
16715:          if(!(puzzle & 0x241240000000ll))
16716:            altDoSolve(31, 0x80000000ll, puzzle | 0x241240000000ll,
16717:                    partsUsed | 0x400l);
16718:       }
16719:       if (!(puzzle & 0x40040040000000ll)) {
16720:          if(!(puzzle & 0x60060040000000ll))
16721:            altDoSolve(31, 0x80000000ll, puzzle | 0x60060040000000ll,
16722:                    partsUsed | 0x400l);
16723:          if(!(puzzle & 0x40240240000000ll))
16724:            altDoSolve(31, 0x80000000ll, puzzle | 0x40240240000000ll,
16725:                    partsUsed | 0x400l);
16726:          if(!(puzzle & 0x240240040000000ll))
16727:            altDoSolve(31, 0x80000000ll, puzzle | 0x240240040000000ll,
16728:                    partsUsed | 0x400l);
16729:       }
16730:       if(!(puzzle & 0x1240240000000ll))
16731:         altDoSolve(31, 0x80000000ll, puzzle | 0x1240240000000ll,
16732:                    partsUsed | 0x400l);
16733:       if(!(puzzle & 0x200240240000000ll))
16734:         altDoSolve(31, 0x80000000ll, puzzle | 0x200240240000000ll,
16735:                    partsUsed | 0x400l);
16736:     altpiece11at30:
16737:       if (partsUsed & 0x800l) goto altpiece13at30;
16738:       if (!(puzzle & 0x300040000000ll)) {
16739:          if(!(puzzle & 0x360040000000ll))
16740:            altDoSolve(31, 0x80000000ll, puzzle | 0x360040000000ll,
16741:                    partsUsed | 0x800l);
16742:          if(!(puzzle & 0x340240000000ll))
16743:            altDoSolve(31, 0x80000000ll, puzzle | 0x340240000000ll,
16744:                    partsUsed | 0x800l);
16745:          if(!(puzzle & 0x300340000000ll))
16746:            altDoSolve(31, 0x80000000ll, puzzle | 0x300340000000ll,
16747:                    partsUsed | 0x800l);
16748:       }
16749:       if(!(puzzle & 0x260240000000ll))
16750:         altDoSolve(31, 0x80000000ll, puzzle | 0x260240000000ll,
16751:                    partsUsed | 0x800l);
16752:       if(!(puzzle & 0x240340000000ll))
16753:         altDoSolve(31, 0x80000000ll, puzzle | 0x240340000000ll,
16754:                    partsUsed | 0x800l);
16755:     altpiece13at30:
16756:     break;
16757:    case 31:
16758:       if (partsUsed & 0x2l) goto altpiece2at31;
16759:       if(!(puzzle & 0x10090480000000ll))
16760:         altDoSolve(32, 0x100000000ll, puzzle | 0x10090480000000ll,
16761:                    partsUsed | 0x2l);
16762:       if(!(puzzle & 0x2400480080000000ll))
16763:         altDoSolve(32, 0x100000000ll, puzzle | 0x2400480080000000ll,
16764:                    partsUsed | 0x2l);
16765:       if(!(puzzle & 0x2002400480000000ll))
16766:         altDoSolve(32, 0x100000000ll, puzzle | 0x2002400480000000ll,
16767:                    partsUsed | 0x2l);
16768:       if(!(puzzle & 0x9980000000ll))
16769:         altDoSolve(32, 0x100000000ll, puzzle | 0x9980000000ll,
16770:                    partsUsed | 0x2l);
16771:       if(!(puzzle & 0xcc80000000ll))
16772:         altDoSolve(32, 0x100000000ll, puzzle | 0xcc80000000ll,
16773:                    partsUsed | 0x2l);
16774:       if(!(puzzle & 0x200300180000000ll))
16775:         altDoSolve(32, 0x100000000ll, puzzle | 0x200300180000000ll,
16776:                    partsUsed | 0x2l);
16777:       if(!(puzzle & 0x300180080000000ll))
16778:         altDoSolve(32, 0x100000000ll, puzzle | 0x300180080000000ll,
16779:                    partsUsed | 0x2l);
16780:     altpiece2at31:
16781:       if (partsUsed & 0x4l) goto altpiece3at31;
16782:       if (!(puzzle & 0x80080080000000ll)) {
16783:          if(!(puzzle & 0x490080080000000ll))
16784:            altDoSolve(32, 0x100000000ll, puzzle | 0x490080080000000ll,
16785:                    partsUsed | 0x4l);
16786:          if(!(puzzle & 0x82480080000000ll))
16787:            altDoSolve(32, 0x100000000ll, puzzle | 0x82480080000000ll,
16788:                    partsUsed | 0x4l);
16789:          if(!(puzzle & 0x80380080000000ll))
16790:            altDoSolve(32, 0x100000000ll, puzzle | 0x80380080000000ll,
16791:                    partsUsed | 0x4l);
16792:       }
16793:       if(!(puzzle & 0x400402480000000ll))
16794:         altDoSolve(32, 0x100000000ll, puzzle | 0x400402480000000ll,
16795:                    partsUsed | 0x4l);
16796:       if(!(puzzle & 0x3c80000000ll))
16797:         altDoSolve(32, 0x100000000ll, puzzle | 0x3c80000000ll,
16798:                    partsUsed | 0x4l);
16799:       if(!(puzzle & 0x4b80000000ll))
16800:         altDoSolve(32, 0x100000000ll, puzzle | 0x4b80000000ll,
16801:                    partsUsed | 0x4l);
16802:       if(!(puzzle & 0x100100380000000ll))
16803:         altDoSolve(32, 0x100000000ll, puzzle | 0x100100380000000ll,
16804:                    partsUsed | 0x4l);
16805:     altpiece3at31:
16806:       if (partsUsed & 0x8l) goto altpiece4at31;
16807:       if(!(puzzle & 0x90080480000000ll))
16808:         altDoSolve(32, 0x100000000ll, puzzle | 0x90080480000000ll,
16809:                    partsUsed | 0x8l);
16810:       if(!(puzzle & 0x2002480080000000ll))
16811:         altDoSolve(32, 0x100000000ll, puzzle | 0x2002480080000000ll,
16812:                    partsUsed | 0x8l);
16813:       if(!(puzzle & 0x2400400480000000ll))
16814:         altDoSolve(32, 0x100000000ll, puzzle | 0x2400400480000000ll,
16815:                    partsUsed | 0x8l);
16816:       if(!(puzzle & 0xc980000000ll))
16817:         altDoSolve(32, 0x100000000ll, puzzle | 0xc980000000ll,
16818:                    partsUsed | 0x8l);
16819:       if(!(puzzle & 0x9c80000000ll))
16820:         altDoSolve(32, 0x100000000ll, puzzle | 0x9c80000000ll,
16821:                    partsUsed | 0x8l);
16822:       if(!(puzzle & 0x200380080000000ll))
16823:         altDoSolve(32, 0x100000000ll, puzzle | 0x200380080000000ll,
16824:                    partsUsed | 0x8l);
16825:       if(!(puzzle & 0x300100180000000ll))
16826:         altDoSolve(32, 0x100000000ll, puzzle | 0x300100180000000ll,
16827:                    partsUsed | 0x8l);
16828:     altpiece4at31:
16829:       if (partsUsed & 0x10l) goto altpiece5at31;
16830:       if(!(puzzle & 0x2492080000000ll))
16831:         altDoSolve(32, 0x100000000ll, puzzle | 0x2492080000000ll,
16832:                    partsUsed | 0x10l);
16833:     altpiece5at31:
16834:       if (partsUsed & 0x40l) goto altpiece7at31;
16835:       if(!(puzzle & 0x2490080000000ll))
16836:         altDoSolve(32, 0x100000000ll, puzzle | 0x2490080000000ll,
16837:                    partsUsed | 0x40l);
16838:     altpiece7at31:
16839:       if (partsUsed & 0x80l) goto altpiece8at31;
16840:       if(!(puzzle & 0x480080480000000ll))
16841:         altDoSolve(32, 0x100000000ll, puzzle | 0x480080480000000ll,
16842:                    partsUsed | 0x80l);
16843:       if(!(puzzle & 0x480400480000000ll))
16844:         altDoSolve(32, 0x100000000ll, puzzle | 0x480400480000000ll,
16845:                    partsUsed | 0x80l);
16846:       if(!(puzzle & 0x2482080000000ll))
16847:         altDoSolve(32, 0x100000000ll, puzzle | 0x2482080000000ll,
16848:                    partsUsed | 0x80l);
16849:       if(!(puzzle & 0x2082480000000ll))
16850:         altDoSolve(32, 0x100000000ll, puzzle | 0x2082480000000ll,
16851:                    partsUsed | 0x80l);
16852:       if(!(puzzle & 0x1780000000ll))
16853:         altDoSolve(32, 0x100000000ll, puzzle | 0x1780000000ll,
16854:                    partsUsed | 0x80l);
16855:       if(!(puzzle & 0x6580000000ll))
16856:         altDoSolve(32, 0x100000000ll, puzzle | 0x6580000000ll,
16857:                    partsUsed | 0x80l);
16858:       if(!(puzzle & 0x6980000000ll))
16859:         altDoSolve(32, 0x100000000ll, puzzle | 0x6980000000ll,
16860:                    partsUsed | 0x80l);
16861:       if(!(puzzle & 0x1e80000000ll))
16862:         altDoSolve(32, 0x100000000ll, puzzle | 0x1e80000000ll,
16863:                    partsUsed | 0x80l);
16864:       if(!(puzzle & 0x180100180000000ll))
16865:         altDoSolve(32, 0x100000000ll, puzzle | 0x180100180000000ll,
16866:                    partsUsed | 0x80l);
16867:       if(!(puzzle & 0x180080180000000ll))
16868:         altDoSolve(32, 0x100000000ll, puzzle | 0x180080180000000ll,
16869:                    partsUsed | 0x80l);
16870:       if(!(puzzle & 0x380280000000ll))
16871:         altDoSolve(32, 0x100000000ll, puzzle | 0x380280000000ll,
16872:                    partsUsed | 0x80l);
16873:       if(!(puzzle & 0x280380000000ll))
16874:         altDoSolve(32, 0x100000000ll, puzzle | 0x280380000000ll,
16875:                    partsUsed | 0x80l);
16876:     altpiece8at31:
16877:       if (partsUsed & 0x100l) goto altpiece9at31;
16878:       if(!(puzzle & 0x120180000000ll))
16879:         altDoSolve(32, 0x100000000ll, puzzle | 0x120180000000ll,
16880:                    partsUsed | 0x100l);
16881:       if(!(puzzle & 0x100580000000ll))
16882:         altDoSolve(32, 0x100000000ll, puzzle | 0x100580000000ll,
16883:                    partsUsed | 0x100l);
16884:       if(!(puzzle & 0xb0080000000ll))
16885:         altDoSolve(32, 0x100000000ll, puzzle | 0xb0080000000ll,
16886:                    partsUsed | 0x100l);
16887:       if(!(puzzle & 0x980080000000ll))
16888:         altDoSolve(32, 0x100000000ll, puzzle | 0x980080000000ll,
16889:                    partsUsed | 0x100l);
16890:       if(!(puzzle & 0x480180000000ll))
16891:         altDoSolve(32, 0x100000000ll, puzzle | 0x480180000000ll,
16892:                    partsUsed | 0x100l);
16893:       if(!(puzzle & 0xc00480000000ll))
16894:         altDoSolve(32, 0x100000000ll, puzzle | 0xc00480000000ll,
16895:                    partsUsed | 0x100l);
16896:       if(!(puzzle & 0x80c80000000ll))
16897:         altDoSolve(32, 0x100000000ll, puzzle | 0x80c80000000ll,
16898:                    partsUsed | 0x100l);
16899:       if(!(puzzle & 0x800980000000ll))
16900:         altDoSolve(32, 0x100000000ll, puzzle | 0x800980000000ll,
16901:                    partsUsed | 0x100l);
16902:     altpiece9at31:
16903:       if (partsUsed & 0x200l) goto altpiece10at31;
16904:       if (!(puzzle & 0x80080080000000ll)) {
16905:          if(!(puzzle & 0x80090480000000ll))
16906:            altDoSolve(32, 0x100000000ll, puzzle | 0x80090480000000ll,
16907:                    partsUsed | 0x200l);
16908:          if(!(puzzle & 0x90480080000000ll))
16909:            altDoSolve(32, 0x100000000ll, puzzle | 0x90480080000000ll,
16910:                    partsUsed | 0x200l);
16911:          if(!(puzzle & 0x480090080000000ll))
16912:            altDoSolve(32, 0x100000000ll, puzzle | 0x480090080000000ll,
16913:                    partsUsed | 0x200l);
16914:       }
16915:       if (!(puzzle & 0x480080000000ll)) {
16916:          if(!(puzzle & 0x400490080000000ll))
16917:            altDoSolve(32, 0x100000000ll, puzzle | 0x400490080000000ll,
16918:                    partsUsed | 0x200l);
16919:          if(!(puzzle & 0x10490080000000ll))
16920:            altDoSolve(32, 0x100000000ll, puzzle | 0x10490080000000ll,
16921:                    partsUsed | 0x200l);
16922:          if(!(puzzle & 0x402480080000000ll))
16923:            altDoSolve(32, 0x100000000ll, puzzle | 0x402480080000000ll,
16924:                    partsUsed | 0x200l);
16925:       }
16926:       if(!(puzzle & 0x5980000000ll))
16927:         altDoSolve(32, 0x100000000ll, puzzle | 0x5980000000ll,
16928:                    partsUsed | 0x200l);
16929:       if(!(puzzle & 0x5c80000000ll))
16930:         altDoSolve(32, 0x100000000ll, puzzle | 0x5c80000000ll,
16931:                    partsUsed | 0x200l);
16932:       if(!(puzzle & 0x402400480000000ll))
16933:         altDoSolve(32, 0x100000000ll, puzzle | 0x402400480000000ll,
16934:                    partsUsed | 0x200l);
16935:       if(!(puzzle & 0x100300180000000ll))
16936:         altDoSolve(32, 0x100000000ll, puzzle | 0x100300180000000ll,
16937:                    partsUsed | 0x200l);
16938:       if(!(puzzle & 0x100380080000000ll))
16939:         altDoSolve(32, 0x100000000ll, puzzle | 0x100380080000000ll,
16940:                    partsUsed | 0x200l);
16941:     altpiece10at31:
16942:       if (partsUsed & 0x400l) goto altpiece11at31;
16943:       if (!(puzzle & 0x400480000000ll)) {
16944:          if(!(puzzle & 0x80480480000000ll))
16945:            altDoSolve(32, 0x100000000ll, puzzle | 0x80480480000000ll,
16946:                    partsUsed | 0x400l);
16947:          if(!(puzzle & 0x2480480000000ll))
16948:            altDoSolve(32, 0x100000000ll, puzzle | 0x2480480000000ll,
16949:                    partsUsed | 0x400l);
16950:          if(!(puzzle & 0x2402480000000ll))
16951:            altDoSolve(32, 0x100000000ll, puzzle | 0x2402480000000ll,
16952:                    partsUsed | 0x400l);
16953:          if(!(puzzle & 0x482480000000ll))
16954:            altDoSolve(32, 0x100000000ll, puzzle | 0x482480000000ll,
16955:                    partsUsed | 0x400l);
16956:          if(!(puzzle & 0x400480480000000ll))
16957:            altDoSolve(32, 0x100000000ll, puzzle | 0x400480480000000ll,
16958:                    partsUsed | 0x400l);
16959:       }
16960:       if (!(puzzle & 0x980000000ll)) {
16961:          if(!(puzzle & 0x1b80000000ll))
16962:            altDoSolve(32, 0x100000000ll, puzzle | 0x1b80000000ll,
16963:                    partsUsed | 0x400l);
16964:          if(!(puzzle & 0xf80000000ll))
16965:            altDoSolve(32, 0x100000000ll, puzzle | 0xf80000000ll,
16966:                    partsUsed | 0x400l);
16967:          if(!(puzzle & 0x2d80000000ll))
16968:            altDoSolve(32, 0x100000000ll, puzzle | 0x2d80000000ll,
16969:                    partsUsed | 0x400l);
16970:          if(!(puzzle & 0x4d80000000ll))
16971:            altDoSolve(32, 0x100000000ll, puzzle | 0x4d80000000ll,
16972:                    partsUsed | 0x400l);
16973:          if(!(puzzle & 0x1d80000000ll))
16974:            altDoSolve(32, 0x100000000ll, puzzle | 0x1d80000000ll,
16975:                    partsUsed | 0x400l);
16976:       }
16977:       if (!(puzzle & 0x80080080000000ll)) {
16978:          if(!(puzzle & 0x480480080000000ll))
16979:            altDoSolve(32, 0x100000000ll, puzzle | 0x480480080000000ll,
16980:                    partsUsed | 0x400l);
16981:          if(!(puzzle & 0x80180180000000ll))
16982:            altDoSolve(32, 0x100000000ll, puzzle | 0x80180180000000ll,
16983:                    partsUsed | 0x400l);
16984:          if(!(puzzle & 0x180180080000000ll))
16985:            altDoSolve(32, 0x100000000ll, puzzle | 0x180180080000000ll,
16986:                    partsUsed | 0x400l);
16987:       }
16988:       if (!(puzzle & 0x100180000000ll)) {
16989:          if(!(puzzle & 0x100180180000000ll))
16990:            altDoSolve(32, 0x100000000ll, puzzle | 0x100180180000000ll,
16991:                    partsUsed | 0x400l);
16992:          if(!(puzzle & 0x380180000000ll))
16993:            altDoSolve(32, 0x100000000ll, puzzle | 0x380180000000ll,
16994:                    partsUsed | 0x400l);
16995:          if(!(puzzle & 0x180380000000ll))
16996:            altDoSolve(32, 0x100000000ll, puzzle | 0x180380000000ll,
16997:                    partsUsed | 0x400l);
16998:          if(!(puzzle & 0x300380000000ll))
16999:            altDoSolve(32, 0x100000000ll, puzzle | 0x300380000000ll,
17000:                    partsUsed | 0x400l);
17001:       }
17002:       if(!(puzzle & 0x90090080000000ll))
17003:         altDoSolve(32, 0x100000000ll, puzzle | 0x90090080000000ll,
17004:                    partsUsed | 0x400l);
17005:       if(!(puzzle & 0x490480000000ll))
17006:         altDoSolve(32, 0x100000000ll, puzzle | 0x490480000000ll,
17007:                    partsUsed | 0x400l);
17008:       if(!(puzzle & 0x6c80000000ll))
17009:         altDoSolve(32, 0x100000000ll, puzzle | 0x6c80000000ll,
17010:                    partsUsed | 0x400l);
17011:     altpiece11at31:
17012:       if (partsUsed & 0x800l) goto altpiece13at31;
17013:       if (!(puzzle & 0x80180000000ll)) {
17014:          if(!(puzzle & 0x80d80000000ll))
17015:            altDoSolve(32, 0x100000000ll, puzzle | 0x80d80000000ll,
17016:                    partsUsed | 0x800l);
17017:          if(!(puzzle & 0x580180000000ll))
17018:            altDoSolve(32, 0x100000000ll, puzzle | 0x580180000000ll,
17019:                    partsUsed | 0x800l);
17020:          if(!(puzzle & 0x180580000000ll))
17021:            altDoSolve(32, 0x100000000ll, puzzle | 0x180580000000ll,
17022:                    partsUsed | 0x800l);
17023:          if(!(puzzle & 0x180980000000ll))
17024:            altDoSolve(32, 0x100000000ll, puzzle | 0x180980000000ll,
17025:                    partsUsed | 0x800l);
17026:          if(!(puzzle & 0x980180000000ll))
17027:            altDoSolve(32, 0x100000000ll, puzzle | 0x980180000000ll,
17028:                    partsUsed | 0x800l);
17029:          if(!(puzzle & 0x480580000000ll))
17030:            altDoSolve(32, 0x100000000ll, puzzle | 0x480580000000ll,
17031:                    partsUsed | 0x800l);
17032:          if(!(puzzle & 0x1a0180000000ll))
17033:            altDoSolve(32, 0x100000000ll, puzzle | 0x1a0180000000ll,
17034:                    partsUsed | 0x800l);
17035:          if(!(puzzle & 0x190180000000ll))
17036:            altDoSolve(32, 0x100000000ll, puzzle | 0x190180000000ll,
17037:                    partsUsed | 0x800l);
17038:       }
17039:       if (!(puzzle & 0x800880000000ll)) {
17040:          if(!(puzzle & 0xc00c80000000ll))
17041:            altDoSolve(32, 0x100000000ll, puzzle | 0xc00c80000000ll,
17042:                    partsUsed | 0x800l);
17043:          if(!(puzzle & 0x900980000000ll))
17044:            altDoSolve(32, 0x100000000ll, puzzle | 0x900980000000ll,
17045:                    partsUsed | 0x800l);
17046:          if(!(puzzle & 0x800d80000000ll))
17047:            altDoSolve(32, 0x100000000ll, puzzle | 0x800d80000000ll,
17048:                    partsUsed | 0x800l);
17049:       }
17050:       if (!(puzzle & 0x400480000000ll)) {
17051:          if(!(puzzle & 0x580480000000ll))
17052:            altDoSolve(32, 0x100000000ll, puzzle | 0x580480000000ll,
17053:                    partsUsed | 0x800l);
17054:          if(!(puzzle & 0x480c80000000ll))
17055:            altDoSolve(32, 0x100000000ll, puzzle | 0x480c80000000ll,
17056:                    partsUsed | 0x800l);
17057:          if(!(puzzle & 0x400d80000000ll))
17058:            altDoSolve(32, 0x100000000ll, puzzle | 0x400d80000000ll,
17059:                    partsUsed | 0x800l);
17060:          if(!(puzzle & 0xc80480000000ll))
17061:            altDoSolve(32, 0x100000000ll, puzzle | 0xc80480000000ll,
17062:                    partsUsed | 0x800l);
17063:       }
17064:       if(!(puzzle & 0x100d80000000ll))
17065:         altDoSolve(32, 0x100000000ll, puzzle | 0x100d80000000ll,
17066:                    partsUsed | 0x800l);
17067:       if(!(puzzle & 0xd80080000000ll))
17068:         altDoSolve(32, 0x100000000ll, puzzle | 0xd80080000000ll,
17069:                    partsUsed | 0x800l);
17070:       if(!(puzzle & 0x1b0080000000ll))
17071:         altDoSolve(32, 0x100000000ll, puzzle | 0x1b0080000000ll,
17072:                    partsUsed | 0x800l);
17073:     altpiece13at31:
17074:     break;
17075:   }
17076: }
17077: 
17078: 
17079: void altDoSolve32(int start, int startMask, int puzzle, int partsUsed)
17080: {
17081:   for (;(puzzle & startMask) && start < NUM_HI_BITS; start++, startMask <<= 1);
17082:   if(partsUsed == (1<<12)-1) {
17083:     if(!(++numSolutions%4099)) { write(0, ".", 1); }
17084:     if(!((numSolutions) % (409963/10))) {
17085:       percent++;
17086:       printf("\r%d%% done, %ld seconds so far; expecting %.0lf seconds.\n", 
17087:              percent*10, (clock()-startTime)/1000000, ((double)(clock()-startTime)/100000/percent)*correction[percent-1]);
17088:       fflush(stdout);
17089:     }
17090:     return;
17091:   }
17092:   switch(start) {
17093:    case 0:
17094:       if (partsUsed & 0x2l) goto altpiece2at0at32;
17095:       if(!(puzzle & 0x201209l))
17096:         altDoSolve32(1, 0x2l, puzzle | 0x201209l, partsUsed | 0x2l);
17097:       if(!(puzzle & 0x2fl))
17098:         altDoSolve32(1, 0x2l, puzzle | 0x2fl, partsUsed | 0x2l);
17099:       if(!(puzzle & 0x801803l))
17100:         altDoSolve32(1, 0x2l, puzzle | 0x801803l, partsUsed | 0x2l);
17101:       if(!(puzzle & 0x48009001l))
17102:         altDoSolve32(1, 0x2l, puzzle | 0x48009001l, partsUsed | 0x2l);
17103:       if(!(puzzle & 0x40048009l))
17104:         altDoSolve32(1, 0x2l, puzzle | 0x40048009l, partsUsed | 0x2l);
17105:     altpiece2at0at32:
17106:       if (partsUsed & 0x4l) goto altpiece3at0at32;
17107:       if (!(puzzle & 0x1001001l)) {
17108:          if(!(puzzle & 0x9201001l))
17109:            altDoSolve32(1, 0x2l, puzzle | 0x9201001l, partsUsed | 0x4l);
17110:          if(!(puzzle & 0x3801001l))
17111:            altDoSolve32(1, 0x2l, puzzle | 0x3801001l, partsUsed | 0x4l);
17112:          if(!(puzzle & 0x1049001l))
17113:            altDoSolve32(1, 0x2l, puzzle | 0x1049001l, partsUsed | 0x4l);
17114:       }
17115:       if(!(puzzle & 0xe9l))
17116:         altDoSolve32(1, 0x2l, puzzle | 0xe9l, partsUsed | 0x4l);
17117:       if(!(puzzle & 0x8008049l))
17118:         altDoSolve32(1, 0x2l, puzzle | 0x8008049l, partsUsed | 0x4l);
17119:     altpiece3at0at32:
17120:       if (partsUsed & 0x8l) goto altpiece4at0at32;
17121:       if(!(puzzle & 0x1201009l))
17122:         altDoSolve32(1, 0x2l, puzzle | 0x1201009l, partsUsed | 0x8l);
17123:       if(!(puzzle & 0x1801003l))
17124:         altDoSolve32(1, 0x2l, puzzle | 0x1801003l, partsUsed | 0x8l);
17125:       if(!(puzzle & 0x6bl))
17126:         altDoSolve32(1, 0x2l, puzzle | 0x6bl, partsUsed | 0x8l);
17127:       if(!(puzzle & 0x40049001l))
17128:         altDoSolve32(1, 0x2l, puzzle | 0x40049001l, partsUsed | 0x8l);
17129:       if(!(puzzle & 0x48008009l))
17130:         altDoSolve32(1, 0x2l, puzzle | 0x48008009l, partsUsed | 0x8l);
17131:     altpiece4at0at32:
17132:       if (partsUsed & 0x10l) goto altpiece5at0at32;
17133:       if(!(puzzle & 0x49241l))
17134:         altDoSolve32(1, 0x2l, puzzle | 0x49241l, partsUsed | 0x10l);
17135:     altpiece5at0at32:
17136:       if (partsUsed & 0x40l) goto altpiece7at0at32;
17137:       if(!(puzzle & 0x49201l))
17138:         altDoSolve32(1, 0x2l, puzzle | 0x49201l, partsUsed | 0x40l);
17139:     altpiece7at0at32:
17140:       if (partsUsed & 0x80l) goto altpiece8at0at32;
17141:       if(!(puzzle & 0x9001009l))
17142:         altDoSolve32(1, 0x2l, puzzle | 0x9001009l, partsUsed | 0x80l);
17143:       if(!(puzzle & 0x9008009l))
17144:         altDoSolve32(1, 0x2l, puzzle | 0x9008009l, partsUsed | 0x80l);
17145:       if(!(puzzle & 0x49041l))
17146:         altDoSolve32(1, 0x2l, puzzle | 0x49041l, partsUsed | 0x80l);
17147:       if(!(puzzle & 0x41049l))
17148:         altDoSolve32(1, 0x2l, puzzle | 0x41049l, partsUsed | 0x80l);
17149:       if(!(puzzle & 0xcbl))
17150:         altDoSolve32(1, 0x2l, puzzle | 0xcbl, partsUsed | 0x80l);
17151:       if(!(puzzle & 0xd3l))
17152:         altDoSolve32(1, 0x2l, puzzle | 0xd3l, partsUsed | 0x80l);
17153:       if(!(puzzle & 0x3002003l))
17154:         altDoSolve32(1, 0x2l, puzzle | 0x3002003l, partsUsed | 0x80l);
17155:       if(!(puzzle & 0x3001003l))
17156:         altDoSolve32(1, 0x2l, puzzle | 0x3001003l, partsUsed | 0x80l);
17157:     altpiece8at0at32:
17158:       if (partsUsed & 0x100l) goto altpiece9at0at32;
17159:       if(!(puzzle & 0x1901l))
17160:         altDoSolve32(1, 0x2l, puzzle | 0x1901l, partsUsed | 0x100l);
17161:       if(!(puzzle & 0x1809l))
17162:         altDoSolve32(1, 0x2l, puzzle | 0x1809l, partsUsed | 0x100l);
17163:       if(!(puzzle & 0x2403l))
17164:         altDoSolve32(1, 0x2l, puzzle | 0x2403l, partsUsed | 0x100l);
17165:       if(!(puzzle & 0x200bl))
17166:         altDoSolve32(1, 0x2l, puzzle | 0x200bl, partsUsed | 0x100l);
17167:       if(!(puzzle & 0x1601l))
17168:         altDoSolve32(1, 0x2l, puzzle | 0x1601l, partsUsed | 0x100l);
17169:       if(!(puzzle & 0x400dl))
17170:         altDoSolve32(1, 0x2l, puzzle | 0x400dl, partsUsed | 0x100l);
17171:       if(!(puzzle & 0xd001l))
17172:         altDoSolve32(1, 0x2l, puzzle | 0xd001l, partsUsed | 0x100l);
17173:       if(!(puzzle & 0x9003l))
17174:         altDoSolve32(1, 0x2l, puzzle | 0x9003l, partsUsed | 0x100l);
17175:       if(!(puzzle & 0x13001l))
17176:         altDoSolve32(1, 0x2l, puzzle | 0x13001l, partsUsed | 0x100l);
17177:       if(!(puzzle & 0x18009l))
17178:         altDoSolve32(1, 0x2l, puzzle | 0x18009l, partsUsed | 0x100l);
17179:       if(!(puzzle & 0x1019l))
17180:         altDoSolve32(1, 0x2l, puzzle | 0x1019l, partsUsed | 0x100l);
17181:       if(!(puzzle & 0x10013l))
17182:         altDoSolve32(1, 0x2l, puzzle | 0x10013l, partsUsed | 0x100l);
17183:     altpiece9at0at32:
17184:       if (partsUsed & 0x200l) goto altpiece10at0at32;
17185:       if (!(puzzle & 0x1001001l)) {
17186:          if(!(puzzle & 0x1001209l))
17187:            altDoSolve32(1, 0x2l, puzzle | 0x1001209l, partsUsed | 0x200l);
17188:          if(!(puzzle & 0x1209001l))
17189:            altDoSolve32(1, 0x2l, puzzle | 0x1209001l, partsUsed | 0x200l);
17190:          if(!(puzzle & 0x9001201l))
17191:            altDoSolve32(1, 0x2l, puzzle | 0x9001201l, partsUsed | 0x200l);
17192:          if(!(puzzle & 0x1001803l))
17193:            altDoSolve32(1, 0x2l, puzzle | 0x1001803l, partsUsed | 0x200l);
17194:          if(!(puzzle & 0x3001801l))
17195:            altDoSolve32(1, 0x2l, puzzle | 0x3001801l, partsUsed | 0x200l);
17196:          if(!(puzzle & 0x1803001l))
17197:            altDoSolve32(1, 0x2l, puzzle | 0x1803001l, partsUsed | 0x200l);
17198:       }
17199:       if (!(puzzle & 0x9001l)) {
17200:          if(!(puzzle & 0x8009201l))
17201:            altDoSolve32(1, 0x2l, puzzle | 0x8009201l, partsUsed | 0x200l);
17202:          if(!(puzzle & 0x209201l))
17203:            altDoSolve32(1, 0x2l, puzzle | 0x209201l, partsUsed | 0x200l);
17204:          if(!(puzzle & 0x8049001l))
17205:            altDoSolve32(1, 0x2l, puzzle | 0x8049001l, partsUsed | 0x200l);
17206:       }
17207:       if (!(puzzle & 0xdl)) {
17208:          if(!(puzzle & 0x9dl))
17209:            altDoSolve32(1, 0x2l, puzzle | 0x9dl, partsUsed | 0x200l);
17210:          if(!(puzzle & 0x3dl))
17211:            altDoSolve32(1, 0x2l, puzzle | 0x3dl, partsUsed | 0x200l);
17212:          if(!(puzzle & 0x4fl))
17213:            altDoSolve32(1, 0x2l, puzzle | 0x4fl, partsUsed | 0x200l);
17214:          if(!(puzzle & 0xcdl))
17215:            altDoSolve32(1, 0x2l, puzzle | 0xcdl, partsUsed | 0x200l);
17216:       }
17217:       if(!(puzzle & 0x79l))
17218:         altDoSolve32(1, 0x2l, puzzle | 0x79l, partsUsed | 0x200l);
17219:       if(!(puzzle & 0x803801l))
17220:         altDoSolve32(1, 0x2l, puzzle | 0x803801l, partsUsed | 0x200l);
17221:       if(!(puzzle & 0x2003801l))
17222:         altDoSolve32(1, 0x2l, puzzle | 0x2003801l, partsUsed | 0x200l);
17223:       if(!(puzzle & 0x8048009l))
17224:         altDoSolve32(1, 0x2l, puzzle | 0x8048009l, partsUsed | 0x200l);
17225:     altpiece10at0at32:
17226:       if (partsUsed & 0x400l) goto altpiece11at0at32;
17227:       if (!(puzzle & 0x8009l)) {
17228:          if(!(puzzle & 0x1009009l))
17229:            altDoSolve32(1, 0x2l, puzzle | 0x1009009l, partsUsed | 0x400l);
17230:          if(!(puzzle & 0x49009l))
17231:            altDoSolve32(1, 0x2l, puzzle | 0x49009l, partsUsed | 0x400l);
17232:          if(!(puzzle & 0x48049l))
17233:            altDoSolve32(1, 0x2l, puzzle | 0x48049l, partsUsed | 0x400l);
17234:          if(!(puzzle & 0x9049l))
17235:            altDoSolve32(1, 0x2l, puzzle | 0x9049l, partsUsed | 0x400l);
17236:          if(!(puzzle & 0x8009009l))
17237:            altDoSolve32(1, 0x2l, puzzle | 0x8009009l, partsUsed | 0x400l);
17238:       }
17239:       if (!(puzzle & 0x1001001l)) {
17240:          if(!(puzzle & 0x9009001l))
17241:            altDoSolve32(1, 0x2l, puzzle | 0x9009001l, partsUsed | 0x400l);
17242:          if(!(puzzle & 0x1003003l))
17243:            altDoSolve32(1, 0x2l, puzzle | 0x1003003l, partsUsed | 0x400l);
17244:          if(!(puzzle & 0x3003001l))
17245:            altDoSolve32(1, 0x2l, puzzle | 0x3003001l, partsUsed | 0x400l);
17246:       }
17247:       if (!(puzzle & 0x19l)) {
17248:          if(!(puzzle & 0x5bl))
17249:            altDoSolve32(1, 0x2l, puzzle | 0x5bl, partsUsed | 0x400l);
17250:          if(!(puzzle & 0x9bl))
17251:            altDoSolve32(1, 0x2l, puzzle | 0x9bl, partsUsed | 0x400l);
17252:          if(!(puzzle & 0xd9l))
17253:            altDoSolve32(1, 0x2l, puzzle | 0xd9l, partsUsed | 0x400l);
17254:       }
17255:       if(!(puzzle & 0x1201201l))
17256:         altDoSolve32(1, 0x2l, puzzle | 0x1201201l, partsUsed | 0x400l);
17257:       if(!(puzzle & 0x9209l))
17258:         altDoSolve32(1, 0x2l, puzzle | 0x9209l, partsUsed | 0x400l);
17259:       if(!(puzzle & 0x1fl))
17260:         altDoSolve32(1, 0x2l, puzzle | 0x1fl, partsUsed | 0x400l);
17261:       if(!(puzzle & 0x6dl))
17262:         altDoSolve32(1, 0x2l, puzzle | 0x6dl, partsUsed | 0x400l);
17263:       if(!(puzzle & 0x3803l))
17264:         altDoSolve32(1, 0x2l, puzzle | 0x3803l, partsUsed | 0x400l);
17265:       if(!(puzzle & 0x1801801l))
17266:         altDoSolve32(1, 0x2l, puzzle | 0x1801801l, partsUsed | 0x400l);
17267:       if(!(puzzle & 0x2003003l))
17268:         altDoSolve32(1, 0x2l, puzzle | 0x2003003l, partsUsed | 0x400l);
17269:     altpiece11at0at32:
17270:       if (partsUsed & 0x800l) goto altpiece13at0at32;
17271:       if (!(puzzle & 0x1003l)) {
17272:          if(!(puzzle & 0x101bl))
17273:            altDoSolve32(1, 0x2l, puzzle | 0x101bl, partsUsed | 0x800l);
17274:          if(!(puzzle & 0xb003l))
17275:            altDoSolve32(1, 0x2l, puzzle | 0xb003l, partsUsed | 0x800l);
17276:          if(!(puzzle & 0x300bl))
17277:            altDoSolve32(1, 0x2l, puzzle | 0x300bl, partsUsed | 0x800l);
17278:          if(!(puzzle & 0x3013l))
17279:            altDoSolve32(1, 0x2l, puzzle | 0x3013l, partsUsed | 0x800l);
17280:          if(!(puzzle & 0x13003l))
17281:            altDoSolve32(1, 0x2l, puzzle | 0x13003l, partsUsed | 0x800l);
17282:          if(!(puzzle & 0x900bl))
17283:            altDoSolve32(1, 0x2l, puzzle | 0x900bl, partsUsed | 0x800l);
17284:          if(!(puzzle & 0x3403l))
17285:            altDoSolve32(1, 0x2l, puzzle | 0x3403l, partsUsed | 0x800l);
17286:          if(!(puzzle & 0x3203l))
17287:            altDoSolve32(1, 0x2l, puzzle | 0x3203l, partsUsed | 0x800l);
17288:       }
17289:       if (!(puzzle & 0x10011l)) {
17290:          if(!(puzzle & 0x18019l))
17291:            altDoSolve32(1, 0x2l, puzzle | 0x18019l, partsUsed | 0x800l);
17292:          if(!(puzzle & 0x12013l))
17293:            altDoSolve32(1, 0x2l, puzzle | 0x12013l, partsUsed | 0x800l);
17294:          if(!(puzzle & 0x1001bl))
17295:            altDoSolve32(1, 0x2l, puzzle | 0x1001bl, partsUsed | 0x800l);
17296:       }
17297:       if (!(puzzle & 0x8009l)) {
17298:          if(!(puzzle & 0xb009l))
17299:            altDoSolve32(1, 0x2l, puzzle | 0xb009l, partsUsed | 0x800l);
17300:          if(!(puzzle & 0x9019l))
17301:            altDoSolve32(1, 0x2l, puzzle | 0x9019l, partsUsed | 0x800l);
17302:          if(!(puzzle & 0x801bl))
17303:            altDoSolve32(1, 0x2l, puzzle | 0x801bl, partsUsed | 0x800l);
17304:          if(!(puzzle & 0x19009l))
17305:            altDoSolve32(1, 0x2l, puzzle | 0x19009l, partsUsed | 0x800l);
17306:          if(!(puzzle & 0xd009l))
17307:            altDoSolve32(1, 0x2l, puzzle | 0xd009l, partsUsed | 0x800l);
17308:          if(!(puzzle & 0xc00dl))
17309:            altDoSolve32(1, 0x2l, puzzle | 0xc00dl, partsUsed | 0x800l);
17310:          if(!(puzzle & 0x9809l))
17311:            altDoSolve32(1, 0x2l, puzzle | 0x9809l, partsUsed | 0x800l);
17312:          if(!(puzzle & 0x900dl))
17313:            altDoSolve32(1, 0x2l, puzzle | 0x900dl, partsUsed | 0x800l);
17314:       }
17315:       if(!(puzzle & 0x201bl))
17316:         altDoSolve32(1, 0x2l, puzzle | 0x201bl, partsUsed | 0x800l);
17317:       if(!(puzzle & 0x1b001l))
17318:         altDoSolve32(1, 0x2l, puzzle | 0x1b001l, partsUsed | 0x800l);
17319:       if(!(puzzle & 0xd801l))
17320:         altDoSolve32(1, 0x2l, puzzle | 0xd801l, partsUsed | 0x800l);
17321:       if(!(puzzle & 0x3601l))
17322:         altDoSolve32(1, 0x2l, puzzle | 0x3601l, partsUsed | 0x800l);
17323:       if(!(puzzle & 0x1b01l))
17324:         altDoSolve32(1, 0x2l, puzzle | 0x1b01l, partsUsed | 0x800l);
17325:     altpiece13at0at32:
17326:     break;
17327:    case 1:
17328:       if (partsUsed & 0x2l) goto altpiece2at1at32;
17329:       if(!(puzzle & 0x402412l))
17330:         altDoSolve32(2, 0x4l, puzzle | 0x402412l, partsUsed | 0x2l);
17331:       if(!(puzzle & 0x7al))
17332:         altDoSolve32(2, 0x4l, puzzle | 0x7al, partsUsed | 0x2l);
17333:       if(!(puzzle & 0x1803002l))
17334:         altDoSolve32(2, 0x4l, puzzle | 0x1803002l, partsUsed | 0x2l);
17335:       if(!(puzzle & 0x90012002l))
17336:         altDoSolve32(2, 0x4l, puzzle | 0x90012002l, partsUsed | 0x2l);
17337:       if(!(puzzle & 0x80090012l))
17338:         altDoSolve32(2, 0x4l, puzzle | 0x80090012l, partsUsed | 0x2l);
17339:     altpiece2at1at32:
17340:       if (partsUsed & 0x4l) goto altpiece3at1at32;
17341:       if (!(puzzle & 0x2002002l)) {
17342:          if(!(puzzle & 0x12402002l))
17343:            altDoSolve32(2, 0x4l, puzzle | 0x12402002l, partsUsed | 0x4l);
17344:          if(!(puzzle & 0x2003802l))
17345:            altDoSolve32(2, 0x4l, puzzle | 0x2003802l, partsUsed | 0x4l);
17346:          if(!(puzzle & 0x2092002l))
17347:            altDoSolve32(2, 0x4l, puzzle | 0x2092002l, partsUsed | 0x4l);
17348:       }
17349:       if(!(puzzle & 0x9el))
17350:         altDoSolve32(2, 0x4l, puzzle | 0x9el, partsUsed | 0x4l);
17351:       if(!(puzzle & 0x10010092l))
17352:         altDoSolve32(2, 0x4l, puzzle | 0x10010092l, partsUsed | 0x4l);
17353:     altpiece3at1at32:
17354:       if (partsUsed & 0x8l) goto altpiece4at1at32;
17355:       if(!(puzzle & 0x2402012l))
17356:         altDoSolve32(2, 0x4l, puzzle | 0x2402012l, partsUsed | 0x8l);
17357:       if(!(puzzle & 0x3el))
17358:         altDoSolve32(2, 0x4l, puzzle | 0x3el, partsUsed | 0x8l);
17359:       if(!(puzzle & 0x803802l))
17360:         altDoSolve32(2, 0x4l, puzzle | 0x803802l, partsUsed | 0x8l);
17361:       if(!(puzzle & 0x80092002l))
17362:         altDoSolve32(2, 0x4l, puzzle | 0x80092002l, partsUsed | 0x8l);
17363:       if(!(puzzle & 0x90010012l))
17364:         altDoSolve32(2, 0x4l, puzzle | 0x90010012l, partsUsed | 0x8l);
17365:     altpiece4at1at32:
17366:       if (partsUsed & 0x10l) goto altpiece5at1at32;
17367:       if(!(puzzle & 0x92482l))
17368:         altDoSolve32(2, 0x4l, puzzle | 0x92482l, partsUsed | 0x10l);
17369:     altpiece5at1at32:
17370:       if (partsUsed & 0x40l) goto altpiece7at1at32;
17371:       if(!(puzzle & 0x92402l))
17372:         altDoSolve32(2, 0x4l, puzzle | 0x92402l, partsUsed | 0x40l);
17373:     altpiece7at1at32:
17374:       if (partsUsed & 0x80l) goto altpiece8at1at32;
17375:       if(!(puzzle & 0x12002012l))
17376:         altDoSolve32(2, 0x4l, puzzle | 0x12002012l, partsUsed | 0x80l);
17377:       if(!(puzzle & 0x12010012l))
17378:         altDoSolve32(2, 0x4l, puzzle | 0x12010012l, partsUsed | 0x80l);
17379:       if(!(puzzle & 0x92082l))
17380:         altDoSolve32(2, 0x4l, puzzle | 0x92082l, partsUsed | 0x80l);
17381:       if(!(puzzle & 0x82092l))
17382:         altDoSolve32(2, 0x4l, puzzle | 0x82092l, partsUsed | 0x80l);
17383:     altpiece8at1at32:
17384:       if (partsUsed & 0x100l) goto altpiece9at1at32;
17385:       if(!(puzzle & 0x3202l))
17386:         altDoSolve32(2, 0x4l, puzzle | 0x3202l, partsUsed | 0x100l);
17387:       if(!(puzzle & 0x3012l))
17388:         altDoSolve32(2, 0x4l, puzzle | 0x3012l, partsUsed | 0x100l);
17389:       if(!(puzzle & 0x801al))
17390:         altDoSolve32(2, 0x4l, puzzle | 0x801al, partsUsed | 0x100l);
17391:       if(!(puzzle & 0x1a002l))
17392:         altDoSolve32(2, 0x4l, puzzle | 0x1a002l, partsUsed | 0x100l);
17393:     altpiece9at1at32:
17394:       if (partsUsed & 0x200l) goto altpiece10at1at32;
17395:       if (!(puzzle & 0x2002002l)) {
17396:          if(!(puzzle & 0x2002412l))
17397:            altDoSolve32(2, 0x4l, puzzle | 0x2002412l, partsUsed | 0x200l);
17398:          if(!(puzzle & 0x2412002l))
17399:            altDoSolve32(2, 0x4l, puzzle | 0x2412002l, partsUsed | 0x200l);
17400:          if(!(puzzle & 0x12002402l))
17401:            altDoSolve32(2, 0x4l, puzzle | 0x12002402l, partsUsed | 0x200l);
17402:       }
17403:       if (!(puzzle & 0x12002l)) {
17404:          if(!(puzzle & 0x10012402l))
17405:            altDoSolve32(2, 0x4l, puzzle | 0x10012402l, partsUsed | 0x200l);
17406:          if(!(puzzle & 0x412402l))
17407:            altDoSolve32(2, 0x4l, puzzle | 0x412402l, partsUsed | 0x200l);
17408:          if(!(puzzle & 0x10092002l))
17409:            altDoSolve32(2, 0x4l, puzzle | 0x10092002l, partsUsed | 0x200l);
17410:       }
17411:       if(!(puzzle & 0x5el))
17412:         altDoSolve32(2, 0x4l, puzzle | 0x5el, partsUsed | 0x200l);
17413:       if(!(puzzle & 0x1003802l))
17414:         altDoSolve32(2, 0x4l, puzzle | 0x1003802l, partsUsed | 0x200l);
17415:       if(!(puzzle & 0x10090012l))
17416:         altDoSolve32(2, 0x4l, puzzle | 0x10090012l, partsUsed | 0x200l);
17417:     altpiece10at1at32:
17418:       if (partsUsed & 0x400l) goto altpiece11at1at32;
17419:       if (!(puzzle & 0x92l)) {
17420:          if(!(puzzle & 0xdal))
17421:            altDoSolve32(2, 0x4l, puzzle | 0xdal, partsUsed | 0x400l);
17422:          if(!(puzzle & 0x90092l))
17423:            altDoSolve32(2, 0x4l, puzzle | 0x90092l, partsUsed | 0x400l);
17424:          if(!(puzzle & 0x12092l))
17425:            altDoSolve32(2, 0x4l, puzzle | 0x12092l, partsUsed | 0x400l);
17426:       }
17427:       if (!(puzzle & 0x2002002l)) {
17428:          if(!(puzzle & 0x3003002l))
17429:            altDoSolve32(2, 0x4l, puzzle | 0x3003002l, partsUsed | 0x400l);
17430:          if(!(puzzle & 0x2012012l))
17431:            altDoSolve32(2, 0x4l, puzzle | 0x2012012l, partsUsed | 0x400l);
17432:          if(!(puzzle & 0x12012002l))
17433:            altDoSolve32(2, 0x4l, puzzle | 0x12012002l, partsUsed | 0x400l);
17434:       }
17435:       if(!(puzzle & 0x2402402l))
17436:         altDoSolve32(2, 0x4l, puzzle | 0x2402402l, partsUsed | 0x400l);
17437:       if(!(puzzle & 0x12412l))
17438:         altDoSolve32(2, 0x4l, puzzle | 0x12412l, partsUsed | 0x400l);
17439:       if(!(puzzle & 0x92012l))
17440:         altDoSolve32(2, 0x4l, puzzle | 0x92012l, partsUsed | 0x400l);
17441:       if(!(puzzle & 0x10012012l))
17442:         altDoSolve32(2, 0x4l, puzzle | 0x10012012l, partsUsed | 0x400l);
17443:     altpiece11at1at32:
17444:       if (partsUsed & 0x800l) goto altpiece13at1at32;
17445:       if (!(puzzle & 0x18002l)) {
17446:          if(!(puzzle & 0x1b002l))
17447:            altDoSolve32(2, 0x4l, puzzle | 0x1b002l, partsUsed | 0x800l);
17448:          if(!(puzzle & 0x1a012l))
17449:            altDoSolve32(2, 0x4l, puzzle | 0x1a012l, partsUsed | 0x800l);
17450:          if(!(puzzle & 0x1801al))
17451:            altDoSolve32(2, 0x4l, puzzle | 0x1801al, partsUsed | 0x800l);
17452:       }
17453:       if(!(puzzle & 0x13012l))
17454:         altDoSolve32(2, 0x4l, puzzle | 0x13012l, partsUsed | 0x800l);
17455:       if(!(puzzle & 0x1201al))
17456:         altDoSolve32(2, 0x4l, puzzle | 0x1201al, partsUsed | 0x800l);
17457:       if(!(puzzle & 0x3602l))
17458:         altDoSolve32(2, 0x4l, puzzle | 0x3602l, partsUsed | 0x800l);
17459:     altpiece13at1at32:
17460:     break;
17461:    case 2:
17462:       if (partsUsed & 0x2l) goto altpiece2at2at32;
17463:       if(!(puzzle & 0x904804l))
17464:         altDoSolve32(3, 0x8l, puzzle | 0x904804l, partsUsed | 0x2l);
17465:       if(!(puzzle & 0x804824l))
17466:         altDoSolve32(3, 0x8l, puzzle | 0x804824l, partsUsed | 0x2l);
17467:       if(!(puzzle & 0x1001800cl))
17468:         altDoSolve32(3, 0x8l, puzzle | 0x1001800cl, partsUsed | 0x2l);
17469:       if(!(puzzle & 0x1800c004l))
17470:         altDoSolve32(3, 0x8l, puzzle | 0x1800c004l, partsUsed | 0x2l);
17471:     altpiece2at2at32:
17472:       if (partsUsed & 0x4l) goto altpiece3at2at32;
17473:       if (!(puzzle & 0x4004004l)) {
17474:          if(!(puzzle & 0x4004904l))
17475:            altDoSolve32(3, 0x8l, puzzle | 0x4004904l, partsUsed | 0x4l);
17476:          if(!(puzzle & 0x24804004l))
17477:            altDoSolve32(3, 0x8l, puzzle | 0x24804004l, partsUsed | 0x4l);
17478:          if(!(puzzle & 0x401c004l))
17479:            altDoSolve32(3, 0x8l, puzzle | 0x401c004l, partsUsed | 0x4l);
17480:       }
17481:       if(!(puzzle & 0x800801cl))
17482:         altDoSolve32(3, 0x8l, puzzle | 0x800801cl, partsUsed | 0x4l);
17483:     altpiece3at2at32:
17484:       if (partsUsed & 0x8l) goto altpiece4at2at32;
17485:       if(!(puzzle & 0x104904l))
17486:         altDoSolve32(3, 0x8l, puzzle | 0x104904l, partsUsed | 0x8l);
17487:       if(!(puzzle & 0x4804024l))
17488:         altDoSolve32(3, 0x8l, puzzle | 0x4804024l, partsUsed | 0x8l);
17489:       if(!(puzzle & 0x1001c004l))
17490:         altDoSolve32(3, 0x8l, puzzle | 0x1001c004l, partsUsed | 0x8l);
17491:       if(!(puzzle & 0x1800800cl))
17492:         altDoSolve32(3, 0x8l, puzzle | 0x1800800cl, partsUsed | 0x8l);
17493:     altpiece4at2at32:
17494:       if (partsUsed & 0x40l) goto altpiece7at2at32;
17495:       if(!(puzzle & 0x24904l))
17496:         altDoSolve32(3, 0x8l, puzzle | 0x24904l, partsUsed | 0x40l);
17497:     altpiece7at2at32:
17498:       if (partsUsed & 0x80l) goto altpiece8at2at32;
17499:       if(!(puzzle & 0x24004024l))
17500:         altDoSolve32(3, 0x8l, puzzle | 0x24004024l, partsUsed | 0x80l);
17501:       if(!(puzzle & 0x24020024l))
17502:         altDoSolve32(3, 0x8l, puzzle | 0x24020024l, partsUsed | 0x80l);
17503:       if(!(puzzle & 0xbcl))
17504:         altDoSolve32(3, 0x8l, puzzle | 0xbcl, partsUsed | 0x80l);
17505:       if(!(puzzle & 0xf4l))
17506:         altDoSolve32(3, 0x8l, puzzle | 0xf4l, partsUsed | 0x80l);
17507:       if(!(puzzle & 0xc00800cl))
17508:         altDoSolve32(3, 0x8l, puzzle | 0xc00800cl, partsUsed | 0x80l);
17509:       if(!(puzzle & 0xc00400cl))
17510:         altDoSolve32(3, 0x8l, puzzle | 0xc00400cl, partsUsed | 0x80l);
17511:       if(!(puzzle & 0x1c014l))
17512:         altDoSolve32(3, 0x8l, puzzle | 0x1c014l, partsUsed | 0x80l);
17513:       if(!(puzzle & 0x1401cl))
17514:         altDoSolve32(3, 0x8l, puzzle | 0x1401cl, partsUsed | 0x80l);
17515:     altpiece8at2at32:
17516:       if (partsUsed & 0x100l) goto altpiece9at2at32;
17517:       if(!(puzzle & 0x900cl))
17518:         altDoSolve32(3, 0x8l, puzzle | 0x900cl, partsUsed | 0x100l);
17519:       if(!(puzzle & 0x802cl))
17520:         altDoSolve32(3, 0x8l, puzzle | 0x802cl, partsUsed | 0x100l);
17521:       if(!(puzzle & 0x5804l))
17522:         altDoSolve32(3, 0x8l, puzzle | 0x5804l, partsUsed | 0x100l);
17523:       if(!(puzzle & 0x4c004l))
17524:         altDoSolve32(3, 0x8l, puzzle | 0x4c004l, partsUsed | 0x100l);
17525:       if(!(puzzle & 0x2400cl))
17526:         altDoSolve32(3, 0x8l, puzzle | 0x2400cl, partsUsed | 0x100l);
17527:       if(!(puzzle & 0x60024l))
17528:         altDoSolve32(3, 0x8l, puzzle | 0x60024l, partsUsed | 0x100l);
17529:       if(!(puzzle & 0x4064l))
17530:         altDoSolve32(3, 0x8l, puzzle | 0x4064l, partsUsed | 0x100l);
17531:       if(!(puzzle & 0x4004cl))
17532:         altDoSolve32(3, 0x8l, puzzle | 0x4004cl, partsUsed | 0x100l);
17533:     altpiece9at2at32:
17534:       if (partsUsed & 0x200l) goto altpiece10at2at32;
17535:       if (!(puzzle & 0x4804l)) {
17536:          if(!(puzzle & 0x804904l))
17537:            altDoSolve32(3, 0x8l, puzzle | 0x804904l, partsUsed | 0x200l);
17538:          if(!(puzzle & 0x4004824l))
17539:            altDoSolve32(3, 0x8l, puzzle | 0x4004824l, partsUsed | 0x200l);
17540:          if(!(puzzle & 0x20024804l))
17541:            altDoSolve32(3, 0x8l, puzzle | 0x20024804l, partsUsed | 0x200l);
17542:          if(!(puzzle & 0x24004804l))
17543:            altDoSolve32(3, 0x8l, puzzle | 0x24004804l, partsUsed | 0x200l);
17544:          if(!(puzzle & 0x824804l))
17545:            altDoSolve32(3, 0x8l, puzzle | 0x824804l, partsUsed | 0x200l);
17546:       }
17547:       if(!(puzzle & 0x4824004l))
17548:         altDoSolve32(3, 0x8l, puzzle | 0x4824004l, partsUsed | 0x200l);
17549:       if(!(puzzle & 0x801800cl))
17550:         altDoSolve32(3, 0x8l, puzzle | 0x801800cl, partsUsed | 0x200l);
17551:       if(!(puzzle & 0x801c004l))
17552:         altDoSolve32(3, 0x8l, puzzle | 0x801c004l, partsUsed | 0x200l);
17553:     altpiece10at2at32:
17554:       if (partsUsed & 0x400l) goto altpiece11at2at32;
17555:       if (!(puzzle & 0x24004l)) {
17556:          if(!(puzzle & 0x4024024l))
17557:            altDoSolve32(3, 0x8l, puzzle | 0x4024024l, partsUsed | 0x400l);
17558:          if(!(puzzle & 0x24024004l))
17559:            altDoSolve32(3, 0x8l, puzzle | 0x24024004l, partsUsed | 0x400l);
17560:          if(!(puzzle & 0x20024024l))
17561:            altDoSolve32(3, 0x8l, puzzle | 0x20024024l, partsUsed | 0x400l);
17562:       }
17563:       if (!(puzzle & 0x4cl)) {
17564:          if(!(puzzle & 0xdcl))
17565:            altDoSolve32(3, 0x8l, puzzle | 0xdcl, partsUsed | 0x400l);
17566:          if(!(puzzle & 0x7cl))
17567:            altDoSolve32(3, 0x8l, puzzle | 0x7cl, partsUsed | 0x400l);
17568:          if(!(puzzle & 0xecl))
17569:            altDoSolve32(3, 0x8l, puzzle | 0xecl, partsUsed | 0x400l);
17570:       }
17571:       if (!(puzzle & 0xc004l)) {
17572:          if(!(puzzle & 0x800c00cl))
17573:            altDoSolve32(3, 0x8l, puzzle | 0x800c00cl, partsUsed | 0x400l);
17574:          if(!(puzzle & 0x400c00cl))
17575:            altDoSolve32(3, 0x8l, puzzle | 0x400c00cl, partsUsed | 0x400l);
17576:          if(!(puzzle & 0x1c00cl))
17577:            altDoSolve32(3, 0x8l, puzzle | 0x1c00cl, partsUsed | 0x400l);
17578:          if(!(puzzle & 0xc00c004l))
17579:            altDoSolve32(3, 0x8l, puzzle | 0xc00c004l, partsUsed | 0x400l);
17580:          if(!(puzzle & 0xc01cl))
17581:            altDoSolve32(3, 0x8l, puzzle | 0xc01cl, partsUsed | 0x400l);
17582:       }
17583:       if(!(puzzle & 0x4804804l))
17584:         altDoSolve32(3, 0x8l, puzzle | 0x4804804l, partsUsed | 0x400l);
17585:       if(!(puzzle & 0x24824l))
17586:         altDoSolve32(3, 0x8l, puzzle | 0x24824l, partsUsed | 0x400l);
17587:       if(!(puzzle & 0x1801cl))
17588:         altDoSolve32(3, 0x8l, puzzle | 0x1801cl, partsUsed | 0x400l);
17589:     altpiece11at2at32:
17590:       if (partsUsed & 0x800l) goto altpiece13at2at32;
17591:       if (!(puzzle & 0x400cl)) {
17592:          if(!(puzzle & 0x406cl))
17593:            altDoSolve32(3, 0x8l, puzzle | 0x406cl, partsUsed | 0x800l);
17594:          if(!(puzzle & 0x2c00cl))
17595:            altDoSolve32(3, 0x8l, puzzle | 0x2c00cl, partsUsed | 0x800l);
17596:          if(!(puzzle & 0xc02cl))
17597:            altDoSolve32(3, 0x8l, puzzle | 0xc02cl, partsUsed | 0x800l);
17598:          if(!(puzzle & 0xc04cl))
17599:            altDoSolve32(3, 0x8l, puzzle | 0xc04cl, partsUsed | 0x800l);
17600:          if(!(puzzle & 0x4c00cl))
17601:            altDoSolve32(3, 0x8l, puzzle | 0x4c00cl, partsUsed | 0x800l);
17602:          if(!(puzzle & 0x2402cl))
17603:            altDoSolve32(3, 0x8l, puzzle | 0x2402cl, partsUsed | 0x800l);
17604:          if(!(puzzle & 0xd00cl))
17605:            altDoSolve32(3, 0x8l, puzzle | 0xd00cl, partsUsed | 0x800l);
17606:          if(!(puzzle & 0xc80cl))
17607:            altDoSolve32(3, 0x8l, puzzle | 0xc80cl, partsUsed | 0x800l);
17608:       }
17609:       if (!(puzzle & 0x40044l)) {
17610:          if(!(puzzle & 0x60064l))
17611:            altDoSolve32(3, 0x8l, puzzle | 0x60064l, partsUsed | 0x800l);
17612:          if(!(puzzle & 0x4804cl))
17613:            altDoSolve32(3, 0x8l, puzzle | 0x4804cl, partsUsed | 0x800l);
17614:          if(!(puzzle & 0x4006cl))
17615:            altDoSolve32(3, 0x8l, puzzle | 0x4006cl, partsUsed | 0x800l);
17616:       }
17617:       if (!(puzzle & 0x20024l)) {
17618:          if(!(puzzle & 0x2c024l))
17619:            altDoSolve32(3, 0x8l, puzzle | 0x2c024l, partsUsed | 0x800l);
17620:          if(!(puzzle & 0x24064l))
17621:            altDoSolve32(3, 0x8l, puzzle | 0x24064l, partsUsed | 0x800l);
17622:          if(!(puzzle & 0x2006cl))
17623:            altDoSolve32(3, 0x8l, puzzle | 0x2006cl, partsUsed | 0x800l);
17624:          if(!(puzzle & 0x64024l))
17625:            altDoSolve32(3, 0x8l, puzzle | 0x64024l, partsUsed | 0x800l);
17626:       }
17627:       if(!(puzzle & 0x806cl))
17628:         altDoSolve32(3, 0x8l, puzzle | 0x806cl, partsUsed | 0x800l);
17629:       if(!(puzzle & 0x6c004l))
17630:         altDoSolve32(3, 0x8l, puzzle | 0x6c004l, partsUsed | 0x800l);
17631:       if(!(puzzle & 0xd804l))
17632:         altDoSolve32(3, 0x8l, puzzle | 0xd804l, partsUsed | 0x800l);
17633:     altpiece13at2at32:
17634:     break;
17635:    case 3:
17636:       if (partsUsed & 0x2l) goto altpiece2at3at32;
17637:       if(!(puzzle & 0x400c018l))
17638:         altDoSolve32(4, 0x10l, puzzle | 0x400c018l, partsUsed | 0x2l);
17639:       if(!(puzzle & 0x1209008l))
17640:         altDoSolve32(4, 0x10l, puzzle | 0x1209008l, partsUsed | 0x2l);
17641:       if(!(puzzle & 0x1009048l))
17642:         altDoSolve32(4, 0x10l, puzzle | 0x1009048l, partsUsed | 0x2l);
17643:     altpiece2at3at32:
17644:       if (partsUsed & 0x4l) goto altpiece3at3at32;
17645:       if (!(puzzle & 0x8008008l)) {
17646:          if(!(puzzle & 0x8009208l))
17647:            altDoSolve32(4, 0x10l, puzzle | 0x8009208l, partsUsed | 0x4l);
17648:          if(!(puzzle & 0x49008008l))
17649:            altDoSolve32(4, 0x10l, puzzle | 0x49008008l, partsUsed | 0x4l);
17650:          if(!(puzzle & 0x1c008008l))
17651:            altDoSolve32(4, 0x10l, puzzle | 0x1c008008l, partsUsed | 0x4l);
17652:       }
17653:     altpiece3at3at32:
17654:       if (partsUsed & 0x8l) goto altpiece4at3at32;
17655:       if(!(puzzle & 0x209208l))
17656:         altDoSolve32(4, 0x10l, puzzle | 0x209208l, partsUsed | 0x8l);
17657:       if(!(puzzle & 0x9008048l))
17658:         altDoSolve32(4, 0x10l, puzzle | 0x9008048l, partsUsed | 0x8l);
17659:       if(!(puzzle & 0xc008018l))
17660:         altDoSolve32(4, 0x10l, puzzle | 0xc008018l, partsUsed | 0x8l);
17661:     altpiece4at3at32:
17662:       if (partsUsed & 0x40l) goto altpiece7at3at32;
17663:       if(!(puzzle & 0x49208l))
17664:         altDoSolve32(4, 0x10l, puzzle | 0x49208l, partsUsed | 0x40l);
17665:     altpiece7at3at32:
17666:       if (partsUsed & 0x80l) goto altpiece8at3at32;
17667:       if(!(puzzle & 0x48008048l))
17668:         altDoSolve32(4, 0x10l, puzzle | 0x48008048l, partsUsed | 0x80l);
17669:       if(!(puzzle & 0x48040048l))
17670:         altDoSolve32(4, 0x10l, puzzle | 0x48040048l, partsUsed | 0x80l);
17671:       if(!(puzzle & 0x18010018l))
17672:         altDoSolve32(4, 0x10l, puzzle | 0x18010018l, partsUsed | 0x80l);
17673:       if(!(puzzle & 0x18008018l))
17674:         altDoSolve32(4, 0x10l, puzzle | 0x18008018l, partsUsed | 0x80l);
17675:     altpiece8at3at32:
17676:       if (partsUsed & 0x100l) goto altpiece9at3at32;
17677:       if(!(puzzle & 0xc808l))
17678:         altDoSolve32(4, 0x10l, puzzle | 0xc808l, partsUsed | 0x100l);
17679:       if(!(puzzle & 0xc048l))
17680:         altDoSolve32(4, 0x10l, puzzle | 0xc048l, partsUsed | 0x100l);
17681:       if(!(puzzle & 0x12018l))
17682:         altDoSolve32(4, 0x10l, puzzle | 0x12018l, partsUsed | 0x100l);
17683:       if(!(puzzle & 0x10058l))
17684:         altDoSolve32(4, 0x10l, puzzle | 0x10058l, partsUsed | 0x100l);
17685:       if(!(puzzle & 0xb008l))
17686:         altDoSolve32(4, 0x10l, puzzle | 0xb008l, partsUsed | 0x100l);
17687:       if(!(puzzle & 0x20068l))
17688:         altDoSolve32(4, 0x10l, puzzle | 0x20068l, partsUsed | 0x100l);
17689:       if(!(puzzle & 0x68008l))
17690:         altDoSolve32(4, 0x10l, puzzle | 0x68008l, partsUsed | 0x100l);
17691:       if(!(puzzle & 0x48018l))
17692:         altDoSolve32(4, 0x10l, puzzle | 0x48018l, partsUsed | 0x100l);
17693:       if(!(puzzle & 0x98008l))
17694:         altDoSolve32(4, 0x10l, puzzle | 0x98008l, partsUsed | 0x100l);
17695:       if(!(puzzle & 0xc0048l))
17696:         altDoSolve32(4, 0x10l, puzzle | 0xc0048l, partsUsed | 0x100l);
17697:       if(!(puzzle & 0x80c8l))
17698:         altDoSolve32(4, 0x10l, puzzle | 0x80c8l, partsUsed | 0x100l);
17699:       if(!(puzzle & 0x80098l))
17700:         altDoSolve32(4, 0x10l, puzzle | 0x80098l, partsUsed | 0x100l);
17701:     altpiece9at3at32:
17702:       if (partsUsed & 0x200l) goto altpiece10at3at32;
17703:       if (!(puzzle & 0x9008l)) {
17704:          if(!(puzzle & 0x1009208l))
17705:            altDoSolve32(4, 0x10l, puzzle | 0x1009208l, partsUsed | 0x200l);
17706:          if(!(puzzle & 0x8009048l))
17707:            altDoSolve32(4, 0x10l, puzzle | 0x8009048l, partsUsed | 0x200l);
17708:          if(!(puzzle & 0x40049008l))
17709:            altDoSolve32(4, 0x10l, puzzle | 0x40049008l, partsUsed | 0x200l);
17710:          if(!(puzzle & 0x48009008l))
17711:            altDoSolve32(4, 0x10l, puzzle | 0x48009008l, partsUsed | 0x200l);
17712:          if(!(puzzle & 0x1049008l))
17713:            altDoSolve32(4, 0x10l, puzzle | 0x1049008l, partsUsed | 0x200l);
17714:       }
17715:       if (!(puzzle & 0x8008008l)) {
17716:          if(!(puzzle & 0x9048008l))
17717:            altDoSolve32(4, 0x10l, puzzle | 0x9048008l, partsUsed | 0x200l);
17718:          if(!(puzzle & 0x800c018l))
17719:            altDoSolve32(4, 0x10l, puzzle | 0x800c018l, partsUsed | 0x200l);
17720:          if(!(puzzle & 0x1800c008l))
17721:            altDoSolve32(4, 0x10l, puzzle | 0x1800c008l, partsUsed | 0x200l);
17722:          if(!(puzzle & 0xc018008l))
17723:            altDoSolve32(4, 0x10l, puzzle | 0xc018008l, partsUsed | 0x200l);
17724:       }
17725:       if(!(puzzle & 0x401c008l))
17726:         altDoSolve32(4, 0x10l, puzzle | 0x401c008l, partsUsed | 0x200l);
17727:       if(!(puzzle & 0x1001c008l))
17728:         altDoSolve32(4, 0x10l, puzzle | 0x1001c008l, partsUsed | 0x200l);
17729:     altpiece10at3at32:
17730:       if (partsUsed & 0x400l) goto altpiece11at3at32;
17731:       if (!(puzzle & 0x48008l)) {
17732:          if(!(puzzle & 0x8048048l))
17733:            altDoSolve32(4, 0x10l, puzzle | 0x8048048l, partsUsed | 0x400l);
17734:          if(!(puzzle & 0x48048008l))
17735:            altDoSolve32(4, 0x10l, puzzle | 0x48048008l, partsUsed | 0x400l);
17736:          if(!(puzzle & 0x40048048l))
17737:            altDoSolve32(4, 0x10l, puzzle | 0x40048048l, partsUsed | 0x400l);
17738:       }
17739:       if (!(puzzle & 0x18008l)) {
17740:          if(!(puzzle & 0x10018018l))
17741:            altDoSolve32(4, 0x10l, puzzle | 0x10018018l, partsUsed | 0x400l);
17742:          if(!(puzzle & 0x8018018l))
17743:            altDoSolve32(4, 0x10l, puzzle | 0x8018018l, partsUsed | 0x400l);
17744:          if(!(puzzle & 0x18018008l))
17745:            altDoSolve32(4, 0x10l, puzzle | 0x18018008l, partsUsed | 0x400l);
17746:       }
17747:       if(!(puzzle & 0x9009008l))
17748:         altDoSolve32(4, 0x10l, puzzle | 0x9009008l, partsUsed | 0x400l);
17749:       if(!(puzzle & 0x49048l))
17750:         altDoSolve32(4, 0x10l, puzzle | 0x49048l, partsUsed | 0x400l);
17751:       if(!(puzzle & 0xf8l))
17752:         altDoSolve32(4, 0x10l, puzzle | 0xf8l, partsUsed | 0x400l);
17753:       if(!(puzzle & 0x1c018l))
17754:         altDoSolve32(4, 0x10l, puzzle | 0x1c018l, partsUsed | 0x400l);
17755:       if(!(puzzle & 0xc00c008l))
17756:         altDoSolve32(4, 0x10l, puzzle | 0xc00c008l, partsUsed | 0x400l);
17757:     altpiece11at3at32:
17758:       if (partsUsed & 0x800l) goto altpiece13at3at32;
17759:       if (!(puzzle & 0x8018l)) {
17760:          if(!(puzzle & 0x80d8l))
17761:            altDoSolve32(4, 0x10l, puzzle | 0x80d8l, partsUsed | 0x800l);
17762:          if(!(puzzle & 0x58018l))
17763:            altDoSolve32(4, 0x10l, puzzle | 0x58018l, partsUsed | 0x800l);
17764:          if(!(puzzle & 0x18058l))
17765:            altDoSolve32(4, 0x10l, puzzle | 0x18058l, partsUsed | 0x800l);
17766:          if(!(puzzle & 0x18098l))
17767:            altDoSolve32(4, 0x10l, puzzle | 0x18098l, partsUsed | 0x800l);
17768:          if(!(puzzle & 0x98018l))
17769:            altDoSolve32(4, 0x10l, puzzle | 0x98018l, partsUsed | 0x800l);
17770:          if(!(puzzle & 0x48058l))
17771:            altDoSolve32(4, 0x10l, puzzle | 0x48058l, partsUsed | 0x800l);
17772:          if(!(puzzle & 0x1a018l))
17773:            altDoSolve32(4, 0x10l, puzzle | 0x1a018l, partsUsed | 0x800l);
17774:          if(!(puzzle & 0x19018l))
17775:            altDoSolve32(4, 0x10l, puzzle | 0x19018l, partsUsed | 0x800l);
17776:       }
17777:       if (!(puzzle & 0x80088l)) {
17778:          if(!(puzzle & 0xc00c8l))
17779:            altDoSolve32(4, 0x10l, puzzle | 0xc00c8l, partsUsed | 0x800l);
17780:          if(!(puzzle & 0x90098l))
17781:            altDoSolve32(4, 0x10l, puzzle | 0x90098l, partsUsed | 0x800l);
17782:          if(!(puzzle & 0x800d8l))
17783:            altDoSolve32(4, 0x10l, puzzle | 0x800d8l, partsUsed | 0x800l);
17784:       }
17785:       if (!(puzzle & 0x40048l)) {
17786:          if(!(puzzle & 0x58048l))
17787:            altDoSolve32(4, 0x10l, puzzle | 0x58048l, partsUsed | 0x800l);
17788:          if(!(puzzle & 0x480c8l))
17789:            altDoSolve32(4, 0x10l, puzzle | 0x480c8l, partsUsed | 0x800l);
17790:          if(!(puzzle & 0x400d8l))
17791:            altDoSolve32(4, 0x10l, puzzle | 0x400d8l, partsUsed | 0x800l);
17792:          if(!(puzzle & 0xc8048l))
17793:            altDoSolve32(4, 0x10l, puzzle | 0xc8048l, partsUsed | 0x800l);
17794:          if(!(puzzle & 0x68048l))
17795:            altDoSolve32(4, 0x10l, puzzle | 0x68048l, partsUsed | 0x800l);
17796:          if(!(puzzle & 0x60068l))
17797:            altDoSolve32(4, 0x10l, puzzle | 0x60068l, partsUsed | 0x800l);
17798:          if(!(puzzle & 0x4c048l))
17799:            altDoSolve32(4, 0x10l, puzzle | 0x4c048l, partsUsed | 0x800l);
17800:          if(!(puzzle & 0x48068l))
17801:            altDoSolve32(4, 0x10l, puzzle | 0x48068l, partsUsed | 0x800l);
17802:       }
17803:       if(!(puzzle & 0x100d8l))
17804:         altDoSolve32(4, 0x10l, puzzle | 0x100d8l, partsUsed | 0x800l);
17805:       if(!(puzzle & 0xd8008l))
17806:         altDoSolve32(4, 0x10l, puzzle | 0xd8008l, partsUsed | 0x800l);
17807:       if(!(puzzle & 0x6c008l))
17808:         altDoSolve32(4, 0x10l, puzzle | 0x6c008l, partsUsed | 0x800l);
17809:       if(!(puzzle & 0x1b008l))
17810:         altDoSolve32(4, 0x10l, puzzle | 0x1b008l, partsUsed | 0x800l);
17811:       if(!(puzzle & 0xd808l))
17812:         altDoSolve32(4, 0x10l, puzzle | 0xd808l, partsUsed | 0x800l);
17813:     altpiece13at3at32:
17814:     break;
17815:    case 4:
17816:       if (partsUsed & 0x2l) goto altpiece2at4at32;
17817:       if(!(puzzle & 0xc018010l))
17818:         altDoSolve32(5, 0x20l, puzzle | 0xc018010l, partsUsed | 0x2l);
17819:       if(!(puzzle & 0x2412010l))
17820:         altDoSolve32(5, 0x20l, puzzle | 0x2412010l, partsUsed | 0x2l);
17821:       if(!(puzzle & 0x2012090l))
17822:         altDoSolve32(5, 0x20l, puzzle | 0x2012090l, partsUsed | 0x2l);
17823:     altpiece2at4at32:
17824:       if (partsUsed & 0x4l) goto altpiece3at4at32;
17825:       if (!(puzzle & 0x10010010l)) {
17826:          if(!(puzzle & 0x10012410l))
17827:            altDoSolve32(5, 0x20l, puzzle | 0x10012410l, partsUsed | 0x4l);
17828:          if(!(puzzle & 0x92010010l))
17829:            altDoSolve32(5, 0x20l, puzzle | 0x92010010l, partsUsed | 0x4l);
17830:          if(!(puzzle & 0x1001c010l))
17831:            altDoSolve32(5, 0x20l, puzzle | 0x1001c010l, partsUsed | 0x4l);
17832:       }
17833:     altpiece3at4at32:
17834:       if (partsUsed & 0x8l) goto altpiece4at4at32;
17835:       if(!(puzzle & 0x401c010l))
17836:         altDoSolve32(5, 0x20l, puzzle | 0x401c010l, partsUsed | 0x8l);
17837:       if(!(puzzle & 0x412410l))
17838:         altDoSolve32(5, 0x20l, puzzle | 0x412410l, partsUsed | 0x8l);
17839:       if(!(puzzle & 0x12010090l))
17840:         altDoSolve32(5, 0x20l, puzzle | 0x12010090l, partsUsed | 0x8l);
17841:     altpiece4at4at32:
17842:       if (partsUsed & 0x40l) goto altpiece7at4at32;
17843:       if(!(puzzle & 0x92410l))
17844:         altDoSolve32(5, 0x20l, puzzle | 0x92410l, partsUsed | 0x40l);
17845:     altpiece7at4at32:
17846:       if (partsUsed & 0x80l) goto altpiece8at4at32;
17847:       if(!(puzzle & 0x90010090l))
17848:         altDoSolve32(5, 0x20l, puzzle | 0x90010090l, partsUsed | 0x80l);
17849:       if(!(puzzle & 0x90080090l))
17850:         altDoSolve32(5, 0x20l, puzzle | 0x90080090l, partsUsed | 0x80l);
17851:     altpiece8at4at32:
17852:       if (partsUsed & 0x100l) goto altpiece9at4at32;
17853:       if(!(puzzle & 0x19010l))
17854:         altDoSolve32(5, 0x20l, puzzle | 0x19010l, partsUsed | 0x100l);
17855:       if(!(puzzle & 0x18090l))
17856:         altDoSolve32(5, 0x20l, puzzle | 0x18090l, partsUsed | 0x100l);
17857:       if(!(puzzle & 0x400d0l))
17858:         altDoSolve32(5, 0x20l, puzzle | 0x400d0l, partsUsed | 0x100l);
17859:       if(!(puzzle & 0xd0010l))
17860:         altDoSolve32(5, 0x20l, puzzle | 0xd0010l, partsUsed | 0x100l);
17861:     altpiece9at4at32:
17862:       if (partsUsed & 0x200l) goto altpiece10at4at32;
17863:       if (!(puzzle & 0x12010l)) {
17864:          if(!(puzzle & 0x2012410l))
17865:            altDoSolve32(5, 0x20l, puzzle | 0x2012410l, partsUsed | 0x200l);
17866:          if(!(puzzle & 0x10012090l))
17867:            altDoSolve32(5, 0x20l, puzzle | 0x10012090l, partsUsed | 0x200l);
17868:          if(!(puzzle & 0x80092010l))
17869:            altDoSolve32(5, 0x20l, puzzle | 0x80092010l, partsUsed | 0x200l);
17870:          if(!(puzzle & 0x90012010l))
17871:            altDoSolve32(5, 0x20l, puzzle | 0x90012010l, partsUsed | 0x200l);
17872:          if(!(puzzle & 0x2092010l))
17873:            altDoSolve32(5, 0x20l, puzzle | 0x2092010l, partsUsed | 0x200l);
17874:       }
17875:       if(!(puzzle & 0x12090010l))
17876:         altDoSolve32(5, 0x20l, puzzle | 0x12090010l, partsUsed | 0x200l);
17877:       if(!(puzzle & 0x801c010l))
17878:         altDoSolve32(5, 0x20l, puzzle | 0x801c010l, partsUsed | 0x200l);
17879:     altpiece10at4at32:
17880:       if (partsUsed & 0x400l) goto altpiece11at4at32;
17881:       if (!(puzzle & 0x10010010l)) {
17882:          if(!(puzzle & 0x18018010l))
17883:            altDoSolve32(5, 0x20l, puzzle | 0x18018010l, partsUsed | 0x400l);
17884:          if(!(puzzle & 0x10090090l))
17885:            altDoSolve32(5, 0x20l, puzzle | 0x10090090l, partsUsed | 0x400l);
17886:          if(!(puzzle & 0x90090010l))
17887:            altDoSolve32(5, 0x20l, puzzle | 0x90090010l, partsUsed | 0x400l);
17888:       }
17889:       if(!(puzzle & 0x12012010l))
17890:         altDoSolve32(5, 0x20l, puzzle | 0x12012010l, partsUsed | 0x400l);
17891:       if(!(puzzle & 0x92090l))
17892:         altDoSolve32(5, 0x20l, puzzle | 0x92090l, partsUsed | 0x400l);
17893:       if(!(puzzle & 0x80090090l))
17894:         altDoSolve32(5, 0x20l, puzzle | 0x80090090l, partsUsed | 0x400l);
17895:     altpiece11at4at32:
17896:       if (partsUsed & 0x800l) goto altpiece13at4at32;
17897:       if (!(puzzle & 0xc0010l)) {
17898:          if(!(puzzle & 0xd8010l))
17899:            altDoSolve32(5, 0x20l, puzzle | 0xd8010l, partsUsed | 0x800l);
17900:          if(!(puzzle & 0xd0090l))
17901:            altDoSolve32(5, 0x20l, puzzle | 0xd0090l, partsUsed | 0x800l);
17902:          if(!(puzzle & 0xc00d0l))
17903:            altDoSolve32(5, 0x20l, puzzle | 0xc00d0l, partsUsed | 0x800l);
17904:       }
17905:       if(!(puzzle & 0x98090l))
17906:         altDoSolve32(5, 0x20l, puzzle | 0x98090l, partsUsed | 0x800l);
17907:       if(!(puzzle & 0x900d0l))
17908:         altDoSolve32(5, 0x20l, puzzle | 0x900d0l, partsUsed | 0x800l);
17909:       if(!(puzzle & 0x1b010l))
17910:         altDoSolve32(5, 0x20l, puzzle | 0x1b010l, partsUsed | 0x800l);
17911:     altpiece13at4at32:
17912:     break;
17913:    case 5:
17914:       if (partsUsed & 0x2l) goto altpiece2at5at32;
17915:       if(!(puzzle & 0x4824020l))
17916:         altDoSolve32(6, 0x40l, puzzle | 0x4824020l, partsUsed | 0x2l);
17917:       if(!(puzzle & 0x800c0060l))
17918:         altDoSolve32(6, 0x40l, puzzle | 0x800c0060l, partsUsed | 0x2l);
17919:       if(!(puzzle & 0xc0060020l))
17920:         altDoSolve32(6, 0x40l, puzzle | 0xc0060020l, partsUsed | 0x2l);
17921:     altpiece2at5at32:
17922:       if (partsUsed & 0x4l) goto altpiece3at5at32;
17923:       if(!(puzzle & 0x400400e0l))
17924:         altDoSolve32(6, 0x40l, puzzle | 0x400400e0l, partsUsed | 0x4l);
17925:       if(!(puzzle & 0x20024820l))
17926:         altDoSolve32(6, 0x40l, puzzle | 0x20024820l, partsUsed | 0x4l);
17927:       if(!(puzzle & 0x200e0020l))
17928:         altDoSolve32(6, 0x40l, puzzle | 0x200e0020l, partsUsed | 0x4l);
17929:     altpiece3at5at32:
17930:       if (partsUsed & 0x8l) goto altpiece4at5at32;
17931:       if(!(puzzle & 0x824820l))
17932:         altDoSolve32(6, 0x40l, puzzle | 0x824820l, partsUsed | 0x8l);
17933:       if(!(puzzle & 0x800e0020l))
17934:         altDoSolve32(6, 0x40l, puzzle | 0x800e0020l, partsUsed | 0x8l);
17935:       if(!(puzzle & 0xc0040060l))
17936:         altDoSolve32(6, 0x40l, puzzle | 0xc0040060l, partsUsed | 0x8l);
17937:     altpiece4at5at32:
17938:       if (partsUsed & 0x20l) goto altpiece6at5at32;
17939:       if(!(puzzle & 0x24920l))
17940:         altDoSolve32(6, 0x40l, puzzle | 0x24920l, partsUsed | 0x20l);
17941:     altpiece6at5at32:
17942:       if (partsUsed & 0x80l) goto altpiece8at5at32;
17943:       if(!(puzzle & 0x60040060l))
17944:         altDoSolve32(6, 0x40l, puzzle | 0x60040060l, partsUsed | 0x80l);
17945:       if(!(puzzle & 0x60020060l))
17946:         altDoSolve32(6, 0x40l, puzzle | 0x60020060l, partsUsed | 0x80l);
17947:       if(!(puzzle & 0xe00a0l))
17948:         altDoSolve32(6, 0x40l, puzzle | 0xe00a0l, partsUsed | 0x80l);
17949:       if(!(puzzle & 0xa00e0l))
17950:         altDoSolve32(6, 0x40l, puzzle | 0xa00e0l, partsUsed | 0x80l);
17951:     altpiece8at5at32:
17952:       if (partsUsed & 0x100l) goto altpiece9at5at32;
17953:       if(!(puzzle & 0x48060l))
17954:         altDoSolve32(6, 0x40l, puzzle | 0x48060l, partsUsed | 0x100l);
17955:       if(!(puzzle & 0x2c020l))
17956:         altDoSolve32(6, 0x40l, puzzle | 0x2c020l, partsUsed | 0x100l);
17957:     altpiece9at5at32:
17958:       if (partsUsed & 0x200l) goto altpiece10at5at32;
17959:       if(!(puzzle & 0x4024820l))
17960:         altDoSolve32(6, 0x40l, puzzle | 0x4024820l, partsUsed | 0x200l);
17961:       if(!(puzzle & 0x400c0060l))
17962:         altDoSolve32(6, 0x40l, puzzle | 0x400c0060l, partsUsed | 0x200l);
17963:       if(!(puzzle & 0x400e0020l))
17964:         altDoSolve32(6, 0x40l, puzzle | 0x400e0020l, partsUsed | 0x200l);
17965:     altpiece10at5at32:
17966:       if (partsUsed & 0x400l) goto altpiece11at5at32;
17967:       if (!(puzzle & 0x20020020l)) {
17968:          if(!(puzzle & 0x24024020l))
17969:            altDoSolve32(6, 0x40l, puzzle | 0x24024020l, partsUsed | 0x400l);
17970:          if(!(puzzle & 0x20060060l))
17971:            altDoSolve32(6, 0x40l, puzzle | 0x20060060l, partsUsed | 0x400l);
17972:          if(!(puzzle & 0x60060020l))
17973:            altDoSolve32(6, 0x40l, puzzle | 0x60060020l, partsUsed | 0x400l);
17974:       }
17975:       if (!(puzzle & 0x40060l)) {
17976:          if(!(puzzle & 0x40060060l))
17977:            altDoSolve32(6, 0x40l, puzzle | 0x40060060l, partsUsed | 0x400l);
17978:          if(!(puzzle & 0xe0060l))
17979:            altDoSolve32(6, 0x40l, puzzle | 0xe0060l, partsUsed | 0x400l);
17980:          if(!(puzzle & 0x600e0l))
17981:            altDoSolve32(6, 0x40l, puzzle | 0x600e0l, partsUsed | 0x400l);
17982:          if(!(puzzle & 0xc00e0l))
17983:            altDoSolve32(6, 0x40l, puzzle | 0xc00e0l, partsUsed | 0x400l);
17984:       }
17985:     altpiece11at5at32:
17986:       if (partsUsed & 0x800l) goto altpiece13at5at32;
17987:       if (!(puzzle & 0x60020l)) {
17988:          if(!(puzzle & 0x6c020l))
17989:            altDoSolve32(6, 0x40l, puzzle | 0x6c020l, partsUsed | 0x800l);
17990:          if(!(puzzle & 0x68060l))
17991:            altDoSolve32(6, 0x40l, puzzle | 0x68060l, partsUsed | 0x800l);
17992:          if(!(puzzle & 0x64060l))
17993:            altDoSolve32(6, 0x40l, puzzle | 0x64060l, partsUsed | 0x800l);
17994:       }
17995:     altpiece13at5at32:
17996:     break;
17997:    case 6:
17998:       if (partsUsed & 0x2l) goto altpiece2at6at32;
17999:       if(!(puzzle & 0x9048040l))
18000:         altDoSolve32(7, 0x80l, puzzle | 0x9048040l, partsUsed | 0x2l);
18001:       if(!(puzzle & 0x200600c0l))
18002:         altDoSolve32(7, 0x80l, puzzle | 0x200600c0l, partsUsed | 0x2l);
18003:     altpiece2at6at32:
18004:       if (partsUsed & 0x4l) goto altpiece3at6at32;
18005:       if(!(puzzle & 0x40049040l))
18006:         altDoSolve32(7, 0x80l, puzzle | 0x40049040l, partsUsed | 0x4l);
18007:       if(!(puzzle & 0xe0040040l))
18008:         altDoSolve32(7, 0x80l, puzzle | 0xe0040040l, partsUsed | 0x4l);
18009:     altpiece3at6at32:
18010:       if (partsUsed & 0x8l) goto altpiece4at6at32;
18011:       if(!(puzzle & 0x1049040l))
18012:         altDoSolve32(7, 0x80l, puzzle | 0x1049040l, partsUsed | 0x8l);
18013:       if(!(puzzle & 0x600400c0l))
18014:         altDoSolve32(7, 0x80l, puzzle | 0x600400c0l, partsUsed | 0x8l);
18015:     altpiece4at6at32:
18016:       if (partsUsed & 0x20l) goto altpiece6at6at32;
18017:       if(!(puzzle & 0x49240l))
18018:         altDoSolve32(7, 0x80l, puzzle | 0x49240l, partsUsed | 0x20l);
18019:     altpiece6at6at32:
18020:       if (partsUsed & 0x80l) goto altpiece8at6at32;
18021:       if(!(puzzle & 0xc00800c0l))
18022:         altDoSolve32(7, 0x80l, puzzle | 0xc00800c0l, partsUsed | 0x80l);
18023:       if(!(puzzle & 0xc00400c0l))
18024:         altDoSolve32(7, 0x80l, puzzle | 0xc00400c0l, partsUsed | 0x80l);
18025:     altpiece8at6at32:
18026:       if (partsUsed & 0x100l) goto altpiece9at6at32;
18027:       if(!(puzzle & 0x58040l))
18028:         altDoSolve32(7, 0x80l, puzzle | 0x58040l, partsUsed | 0x100l);
18029:       if(!(puzzle & 0x64040l))
18030:         altDoSolve32(7, 0x80l, puzzle | 0x64040l, partsUsed | 0x100l);
18031:       if(!(puzzle & 0x900c0l))
18032:         altDoSolve32(7, 0x80l, puzzle | 0x900c0l, partsUsed | 0x100l);
18033:     altpiece9at6at32:
18034:       if (partsUsed & 0x200l) goto altpiece10at6at32;
18035:       if (!(puzzle & 0x40040040l)) {
18036:          if(!(puzzle & 0x400600c0l))
18037:            altDoSolve32(7, 0x80l, puzzle | 0x400600c0l, partsUsed | 0x200l);
18038:          if(!(puzzle & 0xc0060040l))
18039:            altDoSolve32(7, 0x80l, puzzle | 0xc0060040l, partsUsed | 0x200l);
18040:          if(!(puzzle & 0x600c0040l))
18041:            altDoSolve32(7, 0x80l, puzzle | 0x600c0040l, partsUsed | 0x200l);
18042:       }
18043:       if(!(puzzle & 0x8049040l))
18044:         altDoSolve32(7, 0x80l, puzzle | 0x8049040l, partsUsed | 0x200l);
18045:       if(!(puzzle & 0x200e0040l))
18046:         altDoSolve32(7, 0x80l, puzzle | 0x200e0040l, partsUsed | 0x200l);
18047:       if(!(puzzle & 0x800e0040l))
18048:         altDoSolve32(7, 0x80l, puzzle | 0x800e0040l, partsUsed | 0x200l);
18049:     altpiece10at6at32:
18050:       if (partsUsed & 0x400l) goto altpiece11at6at32;
18051:       if (!(puzzle & 0x40040040l)) {
18052:          if(!(puzzle & 0x48048040l))
18053:            altDoSolve32(7, 0x80l, puzzle | 0x48048040l, partsUsed | 0x400l);
18054:          if(!(puzzle & 0x60060040l))
18055:            altDoSolve32(7, 0x80l, puzzle | 0x60060040l, partsUsed | 0x400l);
18056:          if(!(puzzle & 0x400c00c0l))
18057:            altDoSolve32(7, 0x80l, puzzle | 0x400c00c0l, partsUsed | 0x400l);
18058:          if(!(puzzle & 0xc00c0040l))
18059:            altDoSolve32(7, 0x80l, puzzle | 0xc00c0040l, partsUsed | 0x400l);
18060:       }
18061:       if(!(puzzle & 0xe00c0l))
18062:         altDoSolve32(7, 0x80l, puzzle | 0xe00c0l, partsUsed | 0x400l);
18063:       if(!(puzzle & 0x800c00c0l))
18064:         altDoSolve32(7, 0x80l, puzzle | 0x800c00c0l, partsUsed | 0x400l);
18065:     altpiece11at6at32:
18066:       if (partsUsed & 0x800l) goto altpiece13at6at32;
18067:       if (!(puzzle & 0xc0040l)) {
18068:          if(!(puzzle & 0xd8040l))
18069:            altDoSolve32(7, 0x80l, puzzle | 0xd8040l, partsUsed | 0x800l);
18070:          if(!(puzzle & 0xd00c0l))
18071:            altDoSolve32(7, 0x80l, puzzle | 0xd00c0l, partsUsed | 0x800l);
18072:          if(!(puzzle & 0xc80c0l))
18073:            altDoSolve32(7, 0x80l, puzzle | 0xc80c0l, partsUsed | 0x800l);
18074:       }
18075:       if(!(puzzle & 0x6c040l))
18076:         altDoSolve32(7, 0x80l, puzzle | 0x6c040l, partsUsed | 0x800l);
18077:     altpiece13at6at32:
18078:     break;
18079:    case 7:
18080:       if (partsUsed & 0x2l) goto altpiece2at7at32;
18081:       if(!(puzzle & 0x12090080l))
18082:         altDoSolve32(8, 0x100l, puzzle | 0x12090080l, partsUsed | 0x2l);
18083:       if(!(puzzle & 0x600c0080l))
18084:         altDoSolve32(8, 0x100l, puzzle | 0x600c0080l, partsUsed | 0x2l);
18085:     altpiece2at7at32:
18086:       if (partsUsed & 0x4l) goto altpiece3at7at32;
18087:       if(!(puzzle & 0x80092080l))
18088:         altDoSolve32(8, 0x100l, puzzle | 0x80092080l, partsUsed | 0x4l);
18089:       if(!(puzzle & 0x800e0080l))
18090:         altDoSolve32(8, 0x100l, puzzle | 0x800e0080l, partsUsed | 0x4l);
18091:     altpiece3at7at32:
18092:       if (partsUsed & 0x8l) goto altpiece4at7at32;
18093:       if(!(puzzle & 0x2092080l))
18094:         altDoSolve32(8, 0x100l, puzzle | 0x2092080l, partsUsed | 0x8l);
18095:       if(!(puzzle & 0x200e0080l))
18096:         altDoSolve32(8, 0x100l, puzzle | 0x200e0080l, partsUsed | 0x8l);
18097:     altpiece4at7at32:
18098:       if (partsUsed & 0x20l) goto altpiece6at7at32;
18099:       if(!(puzzle & 0x92480l))
18100:         altDoSolve32(8, 0x100l, puzzle | 0x92480l, partsUsed | 0x20l);
18101:     altpiece6at7at32:
18102:       if (partsUsed & 0x100l) goto altpiece9at7at32;
18103:       if(!(puzzle & 0xc8080l))
18104:         altDoSolve32(8, 0x100l, puzzle | 0xc8080l, partsUsed | 0x100l);
18105:     altpiece9at7at32:
18106:       if (partsUsed & 0x200l) goto altpiece10at7at32;
18107:       if(!(puzzle & 0x10092080l))
18108:         altDoSolve32(8, 0x100l, puzzle | 0x10092080l, partsUsed | 0x200l);
18109:       if(!(puzzle & 0x400e0080l))
18110:         altDoSolve32(8, 0x100l, puzzle | 0x400e0080l, partsUsed | 0x200l);
18111:     altpiece10at7at32:
18112:       if (partsUsed & 0x400l) goto altpiece11at7at32;
18113:       if(!(puzzle & 0x90090080l))
18114:         altDoSolve32(8, 0x100l, puzzle | 0x90090080l, partsUsed | 0x400l);
18115:       if(!(puzzle & 0xc00c0080l))
18116:         altDoSolve32(8, 0x100l, puzzle | 0xc00c0080l, partsUsed | 0x400l);
18117:     altpiece11at7at32:
18118:       if (partsUsed & 0x800l) goto altpiece13at7at32;
18119:       if(!(puzzle & 0xd8080l))
18120:         altDoSolve32(8, 0x100l, puzzle | 0xd8080l, partsUsed | 0x800l);
18121:     altpiece13at7at32:
18122:     break;
18123:    case 8:
18124:       if (partsUsed & 0x2l) goto altpiece2at8at32;
18125:       if(!(puzzle & 0x13300l))
18126:         altDoSolve32(9, 0x200l, puzzle | 0x13300l, partsUsed | 0x2l);
18127:       if(!(puzzle & 0x19900l))
18128:         altDoSolve32(9, 0x200l, puzzle | 0x19900l, partsUsed | 0x2l);
18129:     altpiece2at8at32:
18130:       if (partsUsed & 0x4l) goto altpiece3at8at32;
18131:       if(!(puzzle & 0x9700l))
18132:         altDoSolve32(9, 0x200l, puzzle | 0x9700l, partsUsed | 0x4l);
18133:       if(!(puzzle & 0x7900l))
18134:         altDoSolve32(9, 0x200l, puzzle | 0x7900l, partsUsed | 0x4l);
18135:     altpiece3at8at32:
18136:       if (partsUsed & 0x8l) goto altpiece4at8at32;
18137:       if(!(puzzle & 0x19300l))
18138:         altDoSolve32(9, 0x200l, puzzle | 0x19300l, partsUsed | 0x8l);
18139:       if(!(puzzle & 0x13900l))
18140:         altDoSolve32(9, 0x200l, puzzle | 0x13900l, partsUsed | 0x8l);
18141:     altpiece4at8at32:
18142:       if (partsUsed & 0x10l) goto altpiece5at8at32;
18143:       if (!(puzzle & 0x24900l)) {
18144:          if(!(puzzle & 0x4124900l))
18145:            altDoSolve32(9, 0x200l, puzzle | 0x4124900l, partsUsed | 0x10l);
18146:          if(!(puzzle & 0x65900l))
18147:            altDoSolve32(9, 0x200l, puzzle | 0x65900l, partsUsed | 0x10l);
18148:          if(!(puzzle & 0x20824900l))
18149:            altDoSolve32(9, 0x200l, puzzle | 0x20824900l, partsUsed | 0x10l);
18150:          if(!(puzzle & 0x2cb00l))
18151:            altDoSolve32(9, 0x200l, puzzle | 0x2cb00l, partsUsed | 0x10l);
18152:       }
18153:       if(!(puzzle & 0x4d300l))
18154:         altDoSolve32(9, 0x200l, puzzle | 0x4d300l, partsUsed | 0x10l);
18155:       if(!(puzzle & 0x24904100l))
18156:         altDoSolve32(9, 0x200l, puzzle | 0x24904100l, partsUsed | 0x10l);
18157:     altpiece5at8at32:
18158:       if (partsUsed & 0x20l) goto altpiece6at8at32;
18159:       if (!(puzzle & 0x24900l)) {
18160:          if(!(puzzle & 0x20024900l))
18161:            altDoSolve32(9, 0x200l, puzzle | 0x20024900l, partsUsed | 0x20l);
18162:          if(!(puzzle & 0x24b00l))
18163:            altDoSolve32(9, 0x200l, puzzle | 0x24b00l, partsUsed | 0x20l);
18164:          if(!(puzzle & 0x124900l))
18165:            altDoSolve32(9, 0x200l, puzzle | 0x124900l, partsUsed | 0x20l);
18166:          if(!(puzzle & 0x64900l))
18167:            altDoSolve32(9, 0x200l, puzzle | 0x64900l, partsUsed | 0x20l);
18168:       }
18169:       if(!(puzzle & 0x24900100l))
18170:         altDoSolve32(9, 0x200l, puzzle | 0x24900100l, partsUsed | 0x20l);
18171:       if(!(puzzle & 0x49300l))
18172:         altDoSolve32(9, 0x200l, puzzle | 0x49300l, partsUsed | 0x20l);
18173:     altpiece6at8at32:
18174:       if (partsUsed & 0x40l) goto altpiece7at8at32;
18175:       if (!(puzzle & 0x24900l)) {
18176:          if(!(puzzle & 0x4024900l))
18177:            altDoSolve32(9, 0x200l, puzzle | 0x4024900l, partsUsed | 0x40l);
18178:          if(!(puzzle & 0x25900l))
18179:            altDoSolve32(9, 0x200l, puzzle | 0x25900l, partsUsed | 0x40l);
18180:          if(!(puzzle & 0x824900l))
18181:            altDoSolve32(9, 0x200l, puzzle | 0x824900l, partsUsed | 0x40l);
18182:          if(!(puzzle & 0x2c900l))
18183:            altDoSolve32(9, 0x200l, puzzle | 0x2c900l, partsUsed | 0x40l);
18184:       }
18185:     altpiece7at8at32:
18186:       if (partsUsed & 0x80l) goto altpiece8at8at32;
18187:       if(!(puzzle & 0x4904100l))
18188:         altDoSolve32(9, 0x200l, puzzle | 0x4904100l, partsUsed | 0x80l);
18189:       if(!(puzzle & 0x4104900l))
18190:         altDoSolve32(9, 0x200l, puzzle | 0x4104900l, partsUsed | 0x80l);
18191:       if(!(puzzle & 0x2f00l))
18192:         altDoSolve32(9, 0x200l, puzzle | 0x2f00l, partsUsed | 0x80l);
18193:       if(!(puzzle & 0xcb00l))
18194:         altDoSolve32(9, 0x200l, puzzle | 0xcb00l, partsUsed | 0x80l);
18195:       if(!(puzzle & 0xd300l))
18196:         altDoSolve32(9, 0x200l, puzzle | 0xd300l, partsUsed | 0x80l);
18197:       if(!(puzzle & 0x3d00l))
18198:         altDoSolve32(9, 0x200l, puzzle | 0x3d00l, partsUsed | 0x80l);
18199:       if(!(puzzle & 0x700500l))
18200:         altDoSolve32(9, 0x200l, puzzle | 0x700500l, partsUsed | 0x80l);
18201:       if(!(puzzle & 0x500700l))
18202:         altDoSolve32(9, 0x200l, puzzle | 0x500700l, partsUsed | 0x80l);
18203:     altpiece8at8at32:
18204:       if (partsUsed & 0x100l) goto altpiece9at8at32;
18205:       if(!(puzzle & 0x1001300l))
18206:         altDoSolve32(9, 0x200l, puzzle | 0x1001300l, partsUsed | 0x100l);
18207:       if(!(puzzle & 0x1300100l))
18208:         altDoSolve32(9, 0x200l, puzzle | 0x1300100l, partsUsed | 0x100l);
18209:       if(!(puzzle & 0x200b00l))
18210:         altDoSolve32(9, 0x200l, puzzle | 0x200b00l, partsUsed | 0x100l);
18211:       if(!(puzzle & 0x900300l))
18212:         altDoSolve32(9, 0x200l, puzzle | 0x900300l, partsUsed | 0x100l);
18213:       if(!(puzzle & 0x1800900l))
18214:         altDoSolve32(9, 0x200l, puzzle | 0x1800900l, partsUsed | 0x100l);
18215:       if(!(puzzle & 0x101900l))
18216:         altDoSolve32(9, 0x200l, puzzle | 0x101900l, partsUsed | 0x100l);
18217:     altpiece9at8at32:
18218:       if (partsUsed & 0x200l) goto altpiece10at8at32;
18219:       if(!(puzzle & 0xb300l))
18220:         altDoSolve32(9, 0x200l, puzzle | 0xb300l, partsUsed | 0x200l);
18221:       if(!(puzzle & 0xb900l))
18222:         altDoSolve32(9, 0x200l, puzzle | 0xb900l, partsUsed | 0x200l);
18223:     altpiece10at8at32:
18224:       if (partsUsed & 0x400l) goto altpiece11at8at32;
18225:       if (!(puzzle & 0x800900l)) {
18226:          if(!(puzzle & 0x4900900l))
18227:            altDoSolve32(9, 0x200l, puzzle | 0x4900900l, partsUsed | 0x400l);
18228:          if(!(puzzle & 0x4804900l))
18229:            altDoSolve32(9, 0x200l, puzzle | 0x4804900l, partsUsed | 0x400l);
18230:          if(!(puzzle & 0x904900l))
18231:            altDoSolve32(9, 0x200l, puzzle | 0x904900l, partsUsed | 0x400l);
18232:       }
18233:       if (!(puzzle & 0x1300l)) {
18234:          if(!(puzzle & 0x3700l))
18235:            altDoSolve32(9, 0x200l, puzzle | 0x3700l, partsUsed | 0x400l);
18236:          if(!(puzzle & 0x1f00l))
18237:            altDoSolve32(9, 0x200l, puzzle | 0x1f00l, partsUsed | 0x400l);
18238:          if(!(puzzle & 0x5b00l))
18239:            altDoSolve32(9, 0x200l, puzzle | 0x5b00l, partsUsed | 0x400l);
18240:          if(!(puzzle & 0x9b00l))
18241:            altDoSolve32(9, 0x200l, puzzle | 0x9b00l, partsUsed | 0x400l);
18242:          if(!(puzzle & 0x3b00l))
18243:            altDoSolve32(9, 0x200l, puzzle | 0x3b00l, partsUsed | 0x400l);
18244:       }
18245:       if (!(puzzle & 0x200300l)) {
18246:          if(!(puzzle & 0x700300l))
18247:            altDoSolve32(9, 0x200l, puzzle | 0x700300l, partsUsed | 0x400l);
18248:          if(!(puzzle & 0x300700l))
18249:            altDoSolve32(9, 0x200l, puzzle | 0x300700l, partsUsed | 0x400l);
18250:          if(!(puzzle & 0x600700l))
18251:            altDoSolve32(9, 0x200l, puzzle | 0x600700l, partsUsed | 0x400l);
18252:       }
18253:       if(!(puzzle & 0xd900l))
18254:         altDoSolve32(9, 0x200l, puzzle | 0xd900l, partsUsed | 0x400l);
18255:     altpiece11at8at32:
18256:       if (partsUsed & 0x800l) goto altpiece13at8at32;
18257:       if (!(puzzle & 0x100300l)) {
18258:          if(!(puzzle & 0x101b00l))
18259:            altDoSolve32(9, 0x200l, puzzle | 0x101b00l, partsUsed | 0x800l);
18260:          if(!(puzzle & 0xb00300l))
18261:            altDoSolve32(9, 0x200l, puzzle | 0xb00300l, partsUsed | 0x800l);
18262:          if(!(puzzle & 0x300b00l))
18263:            altDoSolve32(9, 0x200l, puzzle | 0x300b00l, partsUsed | 0x800l);
18264:          if(!(puzzle & 0x301300l))
18265:            altDoSolve32(9, 0x200l, puzzle | 0x301300l, partsUsed | 0x800l);
18266:          if(!(puzzle & 0x1300300l))
18267:            altDoSolve32(9, 0x200l, puzzle | 0x1300300l, partsUsed | 0x800l);
18268:          if(!(puzzle & 0x900b00l))
18269:            altDoSolve32(9, 0x200l, puzzle | 0x900b00l, partsUsed | 0x800l);
18270:       }
18271:       if (!(puzzle & 0x1001100l)) {
18272:          if(!(puzzle & 0x1801900l))
18273:            altDoSolve32(9, 0x200l, puzzle | 0x1801900l, partsUsed | 0x800l);
18274:          if(!(puzzle & 0x1201300l))
18275:            altDoSolve32(9, 0x200l, puzzle | 0x1201300l, partsUsed | 0x800l);
18276:          if(!(puzzle & 0x1001b00l))
18277:            altDoSolve32(9, 0x200l, puzzle | 0x1001b00l, partsUsed | 0x800l);
18278:       }
18279:       if (!(puzzle & 0x800900l)) {
18280:          if(!(puzzle & 0xb00900l))
18281:            altDoSolve32(9, 0x200l, puzzle | 0xb00900l, partsUsed | 0x800l);
18282:          if(!(puzzle & 0x901900l))
18283:            altDoSolve32(9, 0x200l, puzzle | 0x901900l, partsUsed | 0x800l);
18284:          if(!(puzzle & 0x801b00l))
18285:            altDoSolve32(9, 0x200l, puzzle | 0x801b00l, partsUsed | 0x800l);
18286:          if(!(puzzle & 0x1900900l))
18287:            altDoSolve32(9, 0x200l, puzzle | 0x1900900l, partsUsed | 0x800l);
18288:       }
18289:       if(!(puzzle & 0x201b00l))
18290:         altDoSolve32(9, 0x200l, puzzle | 0x201b00l, partsUsed | 0x800l);
18291:       if(!(puzzle & 0x1b00100l))
18292:         altDoSolve32(9, 0x200l, puzzle | 0x1b00100l, partsUsed | 0x800l);
18293:     altpiece13at8at32:
18294:     break;
18295:    case 9:
18296:       if (partsUsed & 0x2l) goto altpiece2at9at32;
18297:       if(!(puzzle & 0x5e00l))
18298:         altDoSolve32(10, 0x400l, puzzle | 0x5e00l, partsUsed | 0x2l);
18299:     altpiece2at9at32:
18300:       if (partsUsed & 0x4l) goto altpiece3at9at32;
18301:       if(!(puzzle & 0x1d200l))
18302:         altDoSolve32(10, 0x400l, puzzle | 0x1d200l, partsUsed | 0x4l);
18303:     altpiece3at9at32:
18304:       if (partsUsed & 0x8l) goto altpiece4at9at32;
18305:       if(!(puzzle & 0xd600l))
18306:         altDoSolve32(10, 0x400l, puzzle | 0xd600l, partsUsed | 0x8l);
18307:     altpiece4at9at32:
18308:       if (partsUsed & 0x10l) goto altpiece5at9at32;
18309:       if (!(puzzle & 0x49200l)) {
18310:          if(!(puzzle & 0x69a00l))
18311:            altDoSolve32(10, 0x400l, puzzle | 0x69a00l, partsUsed | 0x10l);
18312:          if(!(puzzle & 0x8249200l))
18313:            altDoSolve32(10, 0x400l, puzzle | 0x8249200l, partsUsed | 0x10l);
18314:          if(!(puzzle & 0xcb200l))
18315:            altDoSolve32(10, 0x400l, puzzle | 0xcb200l, partsUsed | 0x10l);
18316:          if(!(puzzle & 0x41049200l))
18317:            altDoSolve32(10, 0x400l, puzzle | 0x41049200l, partsUsed | 0x10l);
18318:          if(!(puzzle & 0x59600l))
18319:            altDoSolve32(10, 0x400l, puzzle | 0x59600l, partsUsed | 0x10l);
18320:       }
18321:       if(!(puzzle & 0x9a600l))
18322:         altDoSolve32(10, 0x400l, puzzle | 0x9a600l, partsUsed | 0x10l);
18323:       if(!(puzzle & 0x49208200l))
18324:         altDoSolve32(10, 0x400l, puzzle | 0x49208200l, partsUsed | 0x10l);
18325:     altpiece5at9at32:
18326:       if (partsUsed & 0x20l) goto altpiece6at9at32;
18327:       if (!(puzzle & 0x49200l)) {
18328:          if(!(puzzle & 0x69200l))
18329:            altDoSolve32(10, 0x400l, puzzle | 0x69200l, partsUsed | 0x20l);
18330:          if(!(puzzle & 0x40049200l))
18331:            altDoSolve32(10, 0x400l, puzzle | 0x40049200l, partsUsed | 0x20l);
18332:          if(!(puzzle & 0x49600l))
18333:            altDoSolve32(10, 0x400l, puzzle | 0x49600l, partsUsed | 0x20l);
18334:          if(!(puzzle & 0x249200l))
18335:            altDoSolve32(10, 0x400l, puzzle | 0x249200l, partsUsed | 0x20l);
18336:          if(!(puzzle & 0xc9200l))
18337:            altDoSolve32(10, 0x400l, puzzle | 0xc9200l, partsUsed | 0x20l);
18338:       }
18339:       if(!(puzzle & 0x49200200l))
18340:         altDoSolve32(10, 0x400l, puzzle | 0x49200200l, partsUsed | 0x20l);
18341:       if(!(puzzle & 0x92600l))
18342:         altDoSolve32(10, 0x400l, puzzle | 0x92600l, partsUsed | 0x20l);
18343:     altpiece6at9at32:
18344:       if (partsUsed & 0x40l) goto altpiece7at9at32;
18345:       if (!(puzzle & 0x49200l)) {
18346:          if(!(puzzle & 0x49a00l))
18347:            altDoSolve32(10, 0x400l, puzzle | 0x49a00l, partsUsed | 0x40l);
18348:          if(!(puzzle & 0x4d200l))
18349:            altDoSolve32(10, 0x400l, puzzle | 0x4d200l, partsUsed | 0x40l);
18350:          if(!(puzzle & 0x8049200l))
18351:            altDoSolve32(10, 0x400l, puzzle | 0x8049200l, partsUsed | 0x40l);
18352:          if(!(puzzle & 0x4b200l))
18353:            altDoSolve32(10, 0x400l, puzzle | 0x4b200l, partsUsed | 0x40l);
18354:          if(!(puzzle & 0x1049200l))
18355:            altDoSolve32(10, 0x400l, puzzle | 0x1049200l, partsUsed | 0x40l);
18356:          if(!(puzzle & 0x59200l))
18357:            altDoSolve32(10, 0x400l, puzzle | 0x59200l, partsUsed | 0x40l);
18358:       }
18359:     altpiece7at9at32:
18360:       if (partsUsed & 0x80l) goto altpiece8at9at32;
18361:       if(!(puzzle & 0x9208200l))
18362:         altDoSolve32(10, 0x400l, puzzle | 0x9208200l, partsUsed | 0x80l);
18363:       if(!(puzzle & 0x8209200l))
18364:         altDoSolve32(10, 0x400l, puzzle | 0x8209200l, partsUsed | 0x80l);
18365:       if(!(puzzle & 0x19600l))
18366:         altDoSolve32(10, 0x400l, puzzle | 0x19600l, partsUsed | 0x80l);
18367:       if(!(puzzle & 0x1a600l))
18368:         altDoSolve32(10, 0x400l, puzzle | 0x1a600l, partsUsed | 0x80l);
18369:     altpiece8at9at32:
18370:       if (partsUsed & 0x100l) goto altpiece9at9at32;
18371:       if(!(puzzle & 0x801a00l))
18372:         altDoSolve32(10, 0x400l, puzzle | 0x801a00l, partsUsed | 0x100l);
18373:       if(!(puzzle & 0x301200l))
18374:         altDoSolve32(10, 0x400l, puzzle | 0x301200l, partsUsed | 0x100l);
18375:       if(!(puzzle & 0x203200l))
18376:         altDoSolve32(10, 0x400l, puzzle | 0x203200l, partsUsed | 0x100l);
18377:       if(!(puzzle & 0x1a00200l))
18378:         altDoSolve32(10, 0x400l, puzzle | 0x1a00200l, partsUsed | 0x100l);
18379:       if(!(puzzle & 0x1200600l))
18380:         altDoSolve32(10, 0x400l, puzzle | 0x1200600l, partsUsed | 0x100l);
18381:       if(!(puzzle & 0x2600200l))
18382:         altDoSolve32(10, 0x400l, puzzle | 0x2600200l, partsUsed | 0x100l);
18383:       if(!(puzzle & 0x401600l))
18384:         altDoSolve32(10, 0x400l, puzzle | 0x401600l, partsUsed | 0x100l);
18385:       if(!(puzzle & 0x3001200l))
18386:         altDoSolve32(10, 0x400l, puzzle | 0x3001200l, partsUsed | 0x100l);
18387:       if(!(puzzle & 0x2002600l))
18388:         altDoSolve32(10, 0x400l, puzzle | 0x2002600l, partsUsed | 0x100l);
18389:     altpiece9at9at32:
18390:       if (partsUsed & 0x200l) goto altpiece10at9at32;
18391:       if (!(puzzle & 0x1a00l)) {
18392:          if(!(puzzle & 0x13a00l))
18393:            altDoSolve32(10, 0x400l, puzzle | 0x13a00l, partsUsed | 0x200l);
18394:          if(!(puzzle & 0x7a00l))
18395:            altDoSolve32(10, 0x400l, puzzle | 0x7a00l, partsUsed | 0x200l);
18396:          if(!(puzzle & 0x9e00l))
18397:            altDoSolve32(10, 0x400l, puzzle | 0x9e00l, partsUsed | 0x200l);
18398:          if(!(puzzle & 0x19a00l))
18399:            altDoSolve32(10, 0x400l, puzzle | 0x19a00l, partsUsed | 0x200l);
18400:       }
18401:       if(!(puzzle & 0xf200l))
18402:         altDoSolve32(10, 0x400l, puzzle | 0xf200l, partsUsed | 0x200l);
18403:     altpiece10at9at32:
18404:       if (partsUsed & 0x400l) goto altpiece11at9at32;
18405:       if (!(puzzle & 0x1001200l)) {
18406:          if(!(puzzle & 0x9201200l))
18407:            altDoSolve32(10, 0x400l, puzzle | 0x9201200l, partsUsed | 0x400l);
18408:          if(!(puzzle & 0x9009200l))
18409:            altDoSolve32(10, 0x400l, puzzle | 0x9009200l, partsUsed | 0x400l);
18410:          if(!(puzzle & 0x1209200l))
18411:            altDoSolve32(10, 0x400l, puzzle | 0x1209200l, partsUsed | 0x400l);
18412:       }
18413:       if (!(puzzle & 0x3200l)) {
18414:          if(!(puzzle & 0xb600l))
18415:            altDoSolve32(10, 0x400l, puzzle | 0xb600l, partsUsed | 0x400l);
18416:          if(!(puzzle & 0x13600l))
18417:            altDoSolve32(10, 0x400l, puzzle | 0x13600l, partsUsed | 0x400l);
18418:          if(!(puzzle & 0x1b200l))
18419:            altDoSolve32(10, 0x400l, puzzle | 0x1b200l, partsUsed | 0x400l);
18420:       }
18421:       if(!(puzzle & 0x3e00l))
18422:         altDoSolve32(10, 0x400l, puzzle | 0x3e00l, partsUsed | 0x400l);
18423:       if(!(puzzle & 0xda00l))
18424:         altDoSolve32(10, 0x400l, puzzle | 0xda00l, partsUsed | 0x400l);
18425:       if(!(puzzle & 0x700600l))
18426:         altDoSolve32(10, 0x400l, puzzle | 0x700600l, partsUsed | 0x400l);
18427:     altpiece11at9at32:
18428:       if (partsUsed & 0x800l) goto altpiece13at9at32;
18429:       if (!(puzzle & 0x200600l)) {
18430:          if(!(puzzle & 0x203600l))
18431:            altDoSolve32(10, 0x400l, puzzle | 0x203600l, partsUsed | 0x800l);
18432:          if(!(puzzle & 0x1600600l))
18433:            altDoSolve32(10, 0x400l, puzzle | 0x1600600l, partsUsed | 0x800l);
18434:          if(!(puzzle & 0x601600l))
18435:            altDoSolve32(10, 0x400l, puzzle | 0x601600l, partsUsed | 0x800l);
18436:          if(!(puzzle & 0x602600l))
18437:            altDoSolve32(10, 0x400l, puzzle | 0x602600l, partsUsed | 0x800l);
18438:          if(!(puzzle & 0x2600600l))
18439:            altDoSolve32(10, 0x400l, puzzle | 0x2600600l, partsUsed | 0x800l);
18440:          if(!(puzzle & 0x1201600l))
18441:            altDoSolve32(10, 0x400l, puzzle | 0x1201600l, partsUsed | 0x800l);
18442:       }
18443:       if (!(puzzle & 0x2002200l)) {
18444:          if(!(puzzle & 0x3003200l))
18445:            altDoSolve32(10, 0x400l, puzzle | 0x3003200l, partsUsed | 0x800l);
18446:          if(!(puzzle & 0x2402600l))
18447:            altDoSolve32(10, 0x400l, puzzle | 0x2402600l, partsUsed | 0x800l);
18448:          if(!(puzzle & 0x2003600l))
18449:            altDoSolve32(10, 0x400l, puzzle | 0x2003600l, partsUsed | 0x800l);
18450:       }
18451:       if (!(puzzle & 0x1001200l)) {
18452:          if(!(puzzle & 0x1601200l))
18453:            altDoSolve32(10, 0x400l, puzzle | 0x1601200l, partsUsed | 0x800l);
18454:          if(!(puzzle & 0x1203200l))
18455:            altDoSolve32(10, 0x400l, puzzle | 0x1203200l, partsUsed | 0x800l);
18456:          if(!(puzzle & 0x1003600l))
18457:            altDoSolve32(10, 0x400l, puzzle | 0x1003600l, partsUsed | 0x800l);
18458:          if(!(puzzle & 0x3201200l))
18459:            altDoSolve32(10, 0x400l, puzzle | 0x3201200l, partsUsed | 0x800l);
18460:          if(!(puzzle & 0x1a01200l))
18461:            altDoSolve32(10, 0x400l, puzzle | 0x1a01200l, partsUsed | 0x800l);
18462:          if(!(puzzle & 0x1801a00l))
18463:            altDoSolve32(10, 0x400l, puzzle | 0x1801a00l, partsUsed | 0x800l);
18464:          if(!(puzzle & 0x1301200l))
18465:            altDoSolve32(10, 0x400l, puzzle | 0x1301200l, partsUsed | 0x800l);
18466:          if(!(puzzle & 0x1201a00l))
18467:            altDoSolve32(10, 0x400l, puzzle | 0x1201a00l, partsUsed | 0x800l);
18468:       }
18469:       if(!(puzzle & 0x403600l))
18470:         altDoSolve32(10, 0x400l, puzzle | 0x403600l, partsUsed | 0x800l);
18471:       if(!(puzzle & 0x3600200l))
18472:         altDoSolve32(10, 0x400l, puzzle | 0x3600200l, partsUsed | 0x800l);
18473:       if(!(puzzle & 0x1b00200l))
18474:         altDoSolve32(10, 0x400l, puzzle | 0x1b00200l, partsUsed | 0x800l);
18475:     altpiece13at9at32:
18476:     break;
18477:    case 10:
18478:       if (partsUsed & 0x2l) goto altpiece2at10at32;
18479:       if(!(puzzle & 0xf400l))
18480:         altDoSolve32(11, 0x800l, puzzle | 0xf400l, partsUsed | 0x2l);
18481:     altpiece2at10at32:
18482:       if (partsUsed & 0x4l) goto altpiece3at10at32;
18483:       if(!(puzzle & 0x13c00l))
18484:         altDoSolve32(11, 0x800l, puzzle | 0x13c00l, partsUsed | 0x4l);
18485:     altpiece3at10at32:
18486:       if (partsUsed & 0x8l) goto altpiece4at10at32;
18487:       if(!(puzzle & 0x7c00l))
18488:         altDoSolve32(11, 0x800l, puzzle | 0x7c00l, partsUsed | 0x8l);
18489:     altpiece4at10at32:
18490:       if (partsUsed & 0x10l) goto altpiece5at10at32;
18491:       if (!(puzzle & 0x92400l)) {
18492:          if(!(puzzle & 0xd3400l))
18493:            altDoSolve32(11, 0x800l, puzzle | 0xd3400l, partsUsed | 0x10l);
18494:          if(!(puzzle & 0x10492400l))
18495:            altDoSolve32(11, 0x800l, puzzle | 0x10492400l, partsUsed | 0x10l);
18496:          if(!(puzzle & 0x82092400l))
18497:            altDoSolve32(11, 0x800l, puzzle | 0x82092400l, partsUsed | 0x10l);
18498:       }
18499:       if(!(puzzle & 0x92410400l))
18500:         altDoSolve32(11, 0x800l, puzzle | 0x92410400l, partsUsed | 0x10l);
18501:     altpiece5at10at32:
18502:       if (partsUsed & 0x20l) goto altpiece6at10at32;
18503:       if (!(puzzle & 0x92400l)) {
18504:          if(!(puzzle & 0xd2400l))
18505:            altDoSolve32(11, 0x800l, puzzle | 0xd2400l, partsUsed | 0x20l);
18506:          if(!(puzzle & 0x80092400l))
18507:            altDoSolve32(11, 0x800l, puzzle | 0x80092400l, partsUsed | 0x20l);
18508:          if(!(puzzle & 0x492400l))
18509:            altDoSolve32(11, 0x800l, puzzle | 0x492400l, partsUsed | 0x20l);
18510:       }
18511:       if(!(puzzle & 0x92400400l))
18512:         altDoSolve32(11, 0x800l, puzzle | 0x92400400l, partsUsed | 0x20l);
18513:     altpiece6at10at32:
18514:       if (partsUsed & 0x40l) goto altpiece7at10at32;
18515:       if (!(puzzle & 0x92400l)) {
18516:          if(!(puzzle & 0x93400l))
18517:            altDoSolve32(11, 0x800l, puzzle | 0x93400l, partsUsed | 0x40l);
18518:          if(!(puzzle & 0x9a400l))
18519:            altDoSolve32(11, 0x800l, puzzle | 0x9a400l, partsUsed | 0x40l);
18520:          if(!(puzzle & 0x10092400l))
18521:            altDoSolve32(11, 0x800l, puzzle | 0x10092400l, partsUsed | 0x40l);
18522:          if(!(puzzle & 0x2092400l))
18523:            altDoSolve32(11, 0x800l, puzzle | 0x2092400l, partsUsed | 0x40l);
18524:       }
18525:     altpiece7at10at32:
18526:       if (partsUsed & 0x80l) goto altpiece8at10at32;
18527:       if(!(puzzle & 0x12410400l))
18528:         altDoSolve32(11, 0x800l, puzzle | 0x12410400l, partsUsed | 0x80l);
18529:       if(!(puzzle & 0x10412400l))
18530:         altDoSolve32(11, 0x800l, puzzle | 0x10412400l, partsUsed | 0x80l);
18531:     altpiece8at10at32:
18532:       if (partsUsed & 0x100l) goto altpiece9at10at32;
18533:       if(!(puzzle & 0x3400400l))
18534:         altDoSolve32(11, 0x800l, puzzle | 0x3400400l, partsUsed | 0x100l);
18535:       if(!(puzzle & 0x1003400l))
18536:         altDoSolve32(11, 0x800l, puzzle | 0x1003400l, partsUsed | 0x100l);
18537:       if(!(puzzle & 0x602400l))
18538:         altDoSolve32(11, 0x800l, puzzle | 0x602400l, partsUsed | 0x100l);
18539:     altpiece9at10at32:
18540:       if (partsUsed & 0x200l) goto altpiece10at10at32;
18541:       if(!(puzzle & 0xbc00l))
18542:         altDoSolve32(11, 0x800l, puzzle | 0xbc00l, partsUsed | 0x200l);
18543:     altpiece10at10at32:
18544:       if (partsUsed & 0x400l) goto altpiece11at10at32;
18545:       if (!(puzzle & 0x12400l)) {
18546:          if(!(puzzle & 0x1b400l))
18547:            altDoSolve32(11, 0x800l, puzzle | 0x1b400l, partsUsed | 0x400l);
18548:          if(!(puzzle & 0x12012400l))
18549:            altDoSolve32(11, 0x800l, puzzle | 0x12012400l, partsUsed | 0x400l);
18550:          if(!(puzzle & 0x2412400l))
18551:            altDoSolve32(11, 0x800l, puzzle | 0x2412400l, partsUsed | 0x400l);
18552:       }
18553:       if(!(puzzle & 0x12402400l))
18554:         altDoSolve32(11, 0x800l, puzzle | 0x12402400l, partsUsed | 0x400l);
18555:     altpiece11at10at32:
18556:       if (partsUsed & 0x800l) goto altpiece13at10at32;
18557:       if (!(puzzle & 0x3000400l)) {
18558:          if(!(puzzle & 0x3600400l))
18559:            altDoSolve32(11, 0x800l, puzzle | 0x3600400l, partsUsed | 0x800l);
18560:          if(!(puzzle & 0x3402400l))
18561:            altDoSolve32(11, 0x800l, puzzle | 0x3402400l, partsUsed | 0x800l);
18562:          if(!(puzzle & 0x3003400l))
18563:            altDoSolve32(11, 0x800l, puzzle | 0x3003400l, partsUsed | 0x800l);
18564:       }
18565:       if(!(puzzle & 0x2602400l))
18566:         altDoSolve32(11, 0x800l, puzzle | 0x2602400l, partsUsed | 0x800l);
18567:       if(!(puzzle & 0x2403400l))
18568:         altDoSolve32(11, 0x800l, puzzle | 0x2403400l, partsUsed | 0x800l);
18569:     altpiece13at10at32:
18570:     break;
18571:    case 11:
18572:       if (partsUsed & 0x2l) goto altpiece2at11at32;
18573:       if(!(puzzle & 0x99800l))
18574:         altDoSolve32(12, 0x1000l, puzzle | 0x99800l, partsUsed | 0x2l);
18575:       if(!(puzzle & 0xcc800l))
18576:         altDoSolve32(12, 0x1000l, puzzle | 0xcc800l, partsUsed | 0x2l);
18577:     altpiece2at11at32:
18578:       if (partsUsed & 0x4l) goto altpiece3at11at32;
18579:       if(!(puzzle & 0x4b800l))
18580:         altDoSolve32(12, 0x1000l, puzzle | 0x4b800l, partsUsed | 0x4l);
18581:       if(!(puzzle & 0x3c800l))
18582:         altDoSolve32(12, 0x1000l, puzzle | 0x3c800l, partsUsed | 0x4l);
18583:     altpiece3at11at32:
18584:       if (partsUsed & 0x8l) goto altpiece4at11at32;
18585:       if(!(puzzle & 0xc9800l))
18586:         altDoSolve32(12, 0x1000l, puzzle | 0xc9800l, partsUsed | 0x8l);
18587:       if(!(puzzle & 0x9c800l))
18588:         altDoSolve32(12, 0x1000l, puzzle | 0x9c800l, partsUsed | 0x8l);
18589:     altpiece4at11at32:
18590:       if (partsUsed & 0x10l) goto altpiece5at11at32;
18591:       if(!(puzzle & 0x24920800l))
18592:         altDoSolve32(12, 0x1000l, puzzle | 0x24920800l, partsUsed | 0x10l);
18593:     altpiece5at11at32:
18594:       if (partsUsed & 0x40l) goto altpiece7at11at32;
18595:       if(!(puzzle & 0x24900800l))
18596:         altDoSolve32(12, 0x1000l, puzzle | 0x24900800l, partsUsed | 0x40l);
18597:     altpiece7at11at32:
18598:       if (partsUsed & 0x80l) goto altpiece8at11at32;
18599:       if(!(puzzle & 0x24820800l))
18600:         altDoSolve32(12, 0x1000l, puzzle | 0x24820800l, partsUsed | 0x80l);
18601:       if(!(puzzle & 0x20824800l))
18602:         altDoSolve32(12, 0x1000l, puzzle | 0x20824800l, partsUsed | 0x80l);
18603:       if(!(puzzle & 0x17800l))
18604:         altDoSolve32(12, 0x1000l, puzzle | 0x17800l, partsUsed | 0x80l);
18605:       if(!(puzzle & 0x65800l))
18606:         altDoSolve32(12, 0x1000l, puzzle | 0x65800l, partsUsed | 0x80l);
18607:       if(!(puzzle & 0x69800l))
18608:         altDoSolve32(12, 0x1000l, puzzle | 0x69800l, partsUsed | 0x80l);
18609:       if(!(puzzle & 0x1e800l))
18610:         altDoSolve32(12, 0x1000l, puzzle | 0x1e800l, partsUsed | 0x80l);
18611:       if(!(puzzle & 0x3802800l))
18612:         altDoSolve32(12, 0x1000l, puzzle | 0x3802800l, partsUsed | 0x80l);
18613:       if(!(puzzle & 0x2803800l))
18614:         altDoSolve32(12, 0x1000l, puzzle | 0x2803800l, partsUsed | 0x80l);
18615:     altpiece8at11at32:
18616:       if (partsUsed & 0x100l) goto altpiece9at11at32;
18617:       if(!(puzzle & 0x1201800l))
18618:         altDoSolve32(12, 0x1000l, puzzle | 0x1201800l, partsUsed | 0x100l);
18619:       if(!(puzzle & 0x1005800l))
18620:         altDoSolve32(12, 0x1000l, puzzle | 0x1005800l, partsUsed | 0x100l);
18621:       if(!(puzzle & 0xb00800l))
18622:         altDoSolve32(12, 0x1000l, puzzle | 0xb00800l, partsUsed | 0x100l);
18623:       if(!(puzzle & 0x9800800l))
18624:         altDoSolve32(12, 0x1000l, puzzle | 0x9800800l, partsUsed | 0x100l);
18625:       if(!(puzzle & 0x4801800l))
18626:         altDoSolve32(12, 0x1000l, puzzle | 0x4801800l, partsUsed | 0x100l);
18627:       if(!(puzzle & 0xc004800l))
18628:         altDoSolve32(12, 0x1000l, puzzle | 0xc004800l, partsUsed | 0x100l);
18629:       if(!(puzzle & 0x80c800l))
18630:         altDoSolve32(12, 0x1000l, puzzle | 0x80c800l, partsUsed | 0x100l);
18631:       if(!(puzzle & 0x8009800l))
18632:         altDoSolve32(12, 0x1000l, puzzle | 0x8009800l, partsUsed | 0x100l);
18633:     altpiece9at11at32:
18634:       if (partsUsed & 0x200l) goto altpiece10at11at32;
18635:       if(!(puzzle & 0x59800l))
18636:         altDoSolve32(12, 0x1000l, puzzle | 0x59800l, partsUsed | 0x200l);
18637:       if(!(puzzle & 0x5c800l))
18638:         altDoSolve32(12, 0x1000l, puzzle | 0x5c800l, partsUsed | 0x200l);
18639:     altpiece10at11at32:
18640:       if (partsUsed & 0x400l) goto altpiece11at11at32;
18641:       if (!(puzzle & 0x4004800l)) {
18642:          if(!(puzzle & 0x4904800l))
18643:            altDoSolve32(12, 0x1000l, puzzle | 0x4904800l, partsUsed | 0x400l);
18644:          if(!(puzzle & 0x24804800l))
18645:            altDoSolve32(12, 0x1000l, puzzle | 0x24804800l, partsUsed | 0x400l);
18646:          if(!(puzzle & 0x24024800l))
18647:            altDoSolve32(12, 0x1000l, puzzle | 0x24024800l, partsUsed | 0x400l);
18648:          if(!(puzzle & 0x4824800l))
18649:            altDoSolve32(12, 0x1000l, puzzle | 0x4824800l, partsUsed | 0x400l);
18650:       }
18651:       if (!(puzzle & 0x9800l)) {
18652:          if(!(puzzle & 0x1b800l))
18653:            altDoSolve32(12, 0x1000l, puzzle | 0x1b800l, partsUsed | 0x400l);
18654:          if(!(puzzle & 0xf800l))
18655:            altDoSolve32(12, 0x1000l, puzzle | 0xf800l, partsUsed | 0x400l);
18656:          if(!(puzzle & 0x2d800l))
18657:            altDoSolve32(12, 0x1000l, puzzle | 0x2d800l, partsUsed | 0x400l);
18658:          if(!(puzzle & 0x4d800l))
18659:            altDoSolve32(12, 0x1000l, puzzle | 0x4d800l, partsUsed | 0x400l);
18660:          if(!(puzzle & 0x1d800l))
18661:            altDoSolve32(12, 0x1000l, puzzle | 0x1d800l, partsUsed | 0x400l);
18662:       }
18663:       if (!(puzzle & 0x1001800l)) {
18664:          if(!(puzzle & 0x3801800l))
18665:            altDoSolve32(12, 0x1000l, puzzle | 0x3801800l, partsUsed | 0x400l);
18666:          if(!(puzzle & 0x1803800l))
18667:            altDoSolve32(12, 0x1000l, puzzle | 0x1803800l, partsUsed | 0x400l);
18668:          if(!(puzzle & 0x3003800l))
18669:            altDoSolve32(12, 0x1000l, puzzle | 0x3003800l, partsUsed | 0x400l);
18670:       }
18671:       if(!(puzzle & 0x6c800l))
18672:         altDoSolve32(12, 0x1000l, puzzle | 0x6c800l, partsUsed | 0x400l);
18673:     altpiece11at11at32:
18674:       if (partsUsed & 0x800l) goto altpiece13at11at32;
18675:       if (!(puzzle & 0x801800l)) {
18676:          if(!(puzzle & 0x80d800l))
18677:            altDoSolve32(12, 0x1000l, puzzle | 0x80d800l, partsUsed | 0x800l);
18678:          if(!(puzzle & 0x5801800l))
18679:            altDoSolve32(12, 0x1000l, puzzle | 0x5801800l, partsUsed | 0x800l);
18680:          if(!(puzzle & 0x1805800l))
18681:            altDoSolve32(12, 0x1000l, puzzle | 0x1805800l, partsUsed | 0x800l);
18682:          if(!(puzzle & 0x1809800l))
18683:            altDoSolve32(12, 0x1000l, puzzle | 0x1809800l, partsUsed | 0x800l);
18684:          if(!(puzzle & 0x9801800l))
18685:            altDoSolve32(12, 0x1000l, puzzle | 0x9801800l, partsUsed | 0x800l);
18686:          if(!(puzzle & 0x4805800l))
18687:            altDoSolve32(12, 0x1000l, puzzle | 0x4805800l, partsUsed | 0x800l);
18688:          if(!(puzzle & 0x1a01800l))
18689:            altDoSolve32(12, 0x1000l, puzzle | 0x1a01800l, partsUsed | 0x800l);
18690:          if(!(puzzle & 0x1901800l))
18691:            altDoSolve32(12, 0x1000l, puzzle | 0x1901800l, partsUsed | 0x800l);
18692:       }
18693:       if (!(puzzle & 0x8008800l)) {
18694:          if(!(puzzle & 0xc00c800l))
18695:            altDoSolve32(12, 0x1000l, puzzle | 0xc00c800l, partsUsed | 0x800l);
18696:          if(!(puzzle & 0x9009800l))
18697:            altDoSolve32(12, 0x1000l, puzzle | 0x9009800l, partsUsed | 0x800l);
18698:          if(!(puzzle & 0x800d800l))
18699:            altDoSolve32(12, 0x1000l, puzzle | 0x800d800l, partsUsed | 0x800l);
18700:       }
18701:       if (!(puzzle & 0x4004800l)) {
18702:          if(!(puzzle & 0x5804800l))
18703:            altDoSolve32(12, 0x1000l, puzzle | 0x5804800l, partsUsed | 0x800l);
18704:          if(!(puzzle & 0x480c800l))
18705:            altDoSolve32(12, 0x1000l, puzzle | 0x480c800l, partsUsed | 0x800l);
18706:          if(!(puzzle & 0x400d800l))
18707:            altDoSolve32(12, 0x1000l, puzzle | 0x400d800l, partsUsed | 0x800l);
18708:          if(!(puzzle & 0xc804800l))
18709:            altDoSolve32(12, 0x1000l, puzzle | 0xc804800l, partsUsed | 0x800l);
18710:       }
18711:       if(!(puzzle & 0x100d800l))
18712:         altDoSolve32(12, 0x1000l, puzzle | 0x100d800l, partsUsed | 0x800l);
18713:       if(!(puzzle & 0xd800800l))
18714:         altDoSolve32(12, 0x1000l, puzzle | 0xd800800l, partsUsed | 0x800l);
18715:       if(!(puzzle & 0x1b00800l))
18716:         altDoSolve32(12, 0x1000l, puzzle | 0x1b00800l, partsUsed | 0x800l);
18717:     altpiece13at11at32:
18718:     break;
18719:    case 12:
18720:       if (partsUsed & 0x2l) goto altpiece2at12at32;
18721:       if(!(puzzle & 0x2f000l))
18722:         altDoSolve32(13, 0x2000l, puzzle | 0x2f000l, partsUsed | 0x2l);
18723:     altpiece2at12at32:
18724:       if (partsUsed & 0x4l) goto altpiece3at12at32;
18725:       if(!(puzzle & 0xe9000l))
18726:         altDoSolve32(13, 0x2000l, puzzle | 0xe9000l, partsUsed | 0x4l);
18727:     altpiece3at12at32:
18728:       if (partsUsed & 0x8l) goto altpiece4at12at32;
18729:       if(!(puzzle & 0x6b000l))
18730:         altDoSolve32(13, 0x2000l, puzzle | 0x6b000l, partsUsed | 0x8l);
18731:     altpiece4at12at32:
18732:       if (partsUsed & 0x10l) goto altpiece5at12at32;
18733:       if(!(puzzle & 0x49241000l))
18734:         altDoSolve32(13, 0x2000l, puzzle | 0x49241000l, partsUsed | 0x10l);
18735:     altpiece5at12at32:
18736:       if (partsUsed & 0x40l) goto altpiece7at12at32;
18737:       if(!(puzzle & 0x49201000l))
18738:         altDoSolve32(13, 0x2000l, puzzle | 0x49201000l, partsUsed | 0x40l);
18739:     altpiece7at12at32:
18740:       if (partsUsed & 0x80l) goto altpiece8at12at32;
18741:       if(!(puzzle & 0x49041000l))
18742:         altDoSolve32(13, 0x2000l, puzzle | 0x49041000l, partsUsed | 0x80l);
18743:       if(!(puzzle & 0x41049000l))
18744:         altDoSolve32(13, 0x2000l, puzzle | 0x41049000l, partsUsed | 0x80l);
18745:       if(!(puzzle & 0xcb000l))
18746:         altDoSolve32(13, 0x2000l, puzzle | 0xcb000l, partsUsed | 0x80l);
18747:       if(!(puzzle & 0xd3000l))
18748:         altDoSolve32(13, 0x2000l, puzzle | 0xd3000l, partsUsed | 0x80l);
18749:     altpiece8at12at32:
18750:       if (partsUsed & 0x100l) goto altpiece9at12at32;
18751:       if(!(puzzle & 0x1901000l))
18752:         altDoSolve32(13, 0x2000l, puzzle | 0x1901000l, partsUsed | 0x100l);
18753:       if(!(puzzle & 0x1809000l))
18754:         altDoSolve32(13, 0x2000l, puzzle | 0x1809000l, partsUsed | 0x100l);
18755:       if(!(puzzle & 0x2403000l))
18756:         altDoSolve32(13, 0x2000l, puzzle | 0x2403000l, partsUsed | 0x100l);
18757:       if(!(puzzle & 0x200b000l))
18758:         altDoSolve32(13, 0x2000l, puzzle | 0x200b000l, partsUsed | 0x100l);
18759:       if(!(puzzle & 0x1601000l))
18760:         altDoSolve32(13, 0x2000l, puzzle | 0x1601000l, partsUsed | 0x100l);
18761:       if(!(puzzle & 0x400d000l))
18762:         altDoSolve32(13, 0x2000l, puzzle | 0x400d000l, partsUsed | 0x100l);
18763:       if(!(puzzle & 0xd001000l))
18764:         altDoSolve32(13, 0x2000l, puzzle | 0xd001000l, partsUsed | 0x100l);
18765:       if(!(puzzle & 0x9003000l))
18766:         altDoSolve32(13, 0x2000l, puzzle | 0x9003000l, partsUsed | 0x100l);
18767:       if(!(puzzle & 0x13001000l))
18768:         altDoSolve32(13, 0x2000l, puzzle | 0x13001000l, partsUsed | 0x100l);
18769:       if(!(puzzle & 0x18009000l))
18770:         altDoSolve32(13, 0x2000l, puzzle | 0x18009000l, partsUsed | 0x100l);
18771:       if(!(puzzle & 0x1019000l))
18772:         altDoSolve32(13, 0x2000l, puzzle | 0x1019000l, partsUsed | 0x100l);
18773:       if(!(puzzle & 0x10013000l))
18774:         altDoSolve32(13, 0x2000l, puzzle | 0x10013000l, partsUsed | 0x100l);
18775:     altpiece9at12at32:
18776:       if (partsUsed & 0x200l) goto altpiece10at12at32;
18777:       if (!(puzzle & 0xd000l)) {
18778:          if(!(puzzle & 0x9d000l))
18779:            altDoSolve32(13, 0x2000l, puzzle | 0x9d000l, partsUsed | 0x200l);
18780:          if(!(puzzle & 0x3d000l))
18781:            altDoSolve32(13, 0x2000l, puzzle | 0x3d000l, partsUsed | 0x200l);
18782:          if(!(puzzle & 0x4f000l))
18783:            altDoSolve32(13, 0x2000l, puzzle | 0x4f000l, partsUsed | 0x200l);
18784:          if(!(puzzle & 0xcd000l))
18785:            altDoSolve32(13, 0x2000l, puzzle | 0xcd000l, partsUsed | 0x200l);
18786:       }
18787:       if(!(puzzle & 0x79000l))
18788:         altDoSolve32(13, 0x2000l, puzzle | 0x79000l, partsUsed | 0x200l);
18789:     altpiece10at12at32:
18790:       if (partsUsed & 0x400l) goto altpiece11at12at32;
18791:       if (!(puzzle & 0x8009000l)) {
18792:          if(!(puzzle & 0x9209000l))
18793:            altDoSolve32(13, 0x2000l, puzzle | 0x9209000l, partsUsed | 0x400l);
18794:          if(!(puzzle & 0x49009000l))
18795:            altDoSolve32(13, 0x2000l, puzzle | 0x49009000l, partsUsed | 0x400l);
18796:          if(!(puzzle & 0x48049000l))
18797:            altDoSolve32(13, 0x2000l, puzzle | 0x48049000l, partsUsed | 0x400l);
18798:          if(!(puzzle & 0x9049000l))
18799:            altDoSolve32(13, 0x2000l, puzzle | 0x9049000l, partsUsed | 0x400l);
18800:       }
18801:       if (!(puzzle & 0x19000l)) {
18802:          if(!(puzzle & 0x5b000l))
18803:            altDoSolve32(13, 0x2000l, puzzle | 0x5b000l, partsUsed | 0x400l);
18804:          if(!(puzzle & 0x9b000l))
18805:            altDoSolve32(13, 0x2000l, puzzle | 0x9b000l, partsUsed | 0x400l);
18806:          if(!(puzzle & 0xd9000l))
18807:            altDoSolve32(13, 0x2000l, puzzle | 0xd9000l, partsUsed | 0x400l);
18808:       }
18809:       if(!(puzzle & 0x1f000l))
18810:         altDoSolve32(13, 0x2000l, puzzle | 0x1f000l, partsUsed | 0x400l);
18811:       if(!(puzzle & 0x6d000l))
18812:         altDoSolve32(13, 0x2000l, puzzle | 0x6d000l, partsUsed | 0x400l);
18813:       if(!(puzzle & 0x3803000l))
18814:         altDoSolve32(13, 0x2000l, puzzle | 0x3803000l, partsUsed | 0x400l);
18815:     altpiece11at12at32:
18816:       if (partsUsed & 0x800l) goto altpiece13at12at32;
18817:       if (!(puzzle & 0x1003000l)) {
18818:          if(!(puzzle & 0x101b000l))
18819:            altDoSolve32(13, 0x2000l, puzzle | 0x101b000l, partsUsed | 0x800l);
18820:          if(!(puzzle & 0xb003000l))
18821:            altDoSolve32(13, 0x2000l, puzzle | 0xb003000l, partsUsed | 0x800l);
18822:          if(!(puzzle & 0x300b000l))
18823:            altDoSolve32(13, 0x2000l, puzzle | 0x300b000l, partsUsed | 0x800l);
18824:          if(!(puzzle & 0x3013000l))
18825:            altDoSolve32(13, 0x2000l, puzzle | 0x3013000l, partsUsed | 0x800l);
18826:          if(!(puzzle & 0x13003000l))
18827:            altDoSolve32(13, 0x2000l, puzzle | 0x13003000l, partsUsed | 0x800l);
18828:          if(!(puzzle & 0x900b000l))
18829:            altDoSolve32(13, 0x2000l, puzzle | 0x900b000l, partsUsed | 0x800l);
18830:          if(!(puzzle & 0x3403000l))
18831:            altDoSolve32(13, 0x2000l, puzzle | 0x3403000l, partsUsed | 0x800l);
18832:          if(!(puzzle & 0x3203000l))
18833:            altDoSolve32(13, 0x2000l, puzzle | 0x3203000l, partsUsed | 0x800l);
18834:       }
18835:       if (!(puzzle & 0x10011000l)) {
18836:          if(!(puzzle & 0x18019000l))
18837:            altDoSolve32(13, 0x2000l, puzzle | 0x18019000l, partsUsed | 0x800l);
18838:          if(!(puzzle & 0x12013000l))
18839:            altDoSolve32(13, 0x2000l, puzzle | 0x12013000l, partsUsed | 0x800l);
18840:          if(!(puzzle & 0x1001b000l))
18841:            altDoSolve32(13, 0x2000l, puzzle | 0x1001b000l, partsUsed | 0x800l);
18842:       }
18843:       if (!(puzzle & 0x8009000l)) {
18844:          if(!(puzzle & 0xb009000l))
18845:            altDoSolve32(13, 0x2000l, puzzle | 0xb009000l, partsUsed | 0x800l);
18846:          if(!(puzzle & 0x9019000l))
18847:            altDoSolve32(13, 0x2000l, puzzle | 0x9019000l, partsUsed | 0x800l);
18848:          if(!(puzzle & 0x801b000l))
18849:            altDoSolve32(13, 0x2000l, puzzle | 0x801b000l, partsUsed | 0x800l);
18850:          if(!(puzzle & 0x19009000l))
18851:            altDoSolve32(13, 0x2000l, puzzle | 0x19009000l, partsUsed | 0x800l);
18852:          if(!(puzzle & 0xd009000l))
18853:            altDoSolve32(13, 0x2000l, puzzle | 0xd009000l, partsUsed | 0x800l);
18854:          if(!(puzzle & 0xc00d000l))
18855:            altDoSolve32(13, 0x2000l, puzzle | 0xc00d000l, partsUsed | 0x800l);
18856:          if(!(puzzle & 0x9809000l))
18857:            altDoSolve32(13, 0x2000l, puzzle | 0x9809000l, partsUsed | 0x800l);
18858:          if(!(puzzle & 0x900d000l))
18859:            altDoSolve32(13, 0x2000l, puzzle | 0x900d000l, partsUsed | 0x800l);
18860:       }
18861:       if(!(puzzle & 0x201b000l))
18862:         altDoSolve32(13, 0x2000l, puzzle | 0x201b000l, partsUsed | 0x800l);
18863:       if(!(puzzle & 0x1b001000l))
18864:         altDoSolve32(13, 0x2000l, puzzle | 0x1b001000l, partsUsed | 0x800l);
18865:       if(!(puzzle & 0xd801000l))
18866:         altDoSolve32(13, 0x2000l, puzzle | 0xd801000l, partsUsed | 0x800l);
18867:       if(!(puzzle & 0x3601000l))
18868:         altDoSolve32(13, 0x2000l, puzzle | 0x3601000l, partsUsed | 0x800l);
18869:       if(!(puzzle & 0x1b01000l))
18870:         altDoSolve32(13, 0x2000l, puzzle | 0x1b01000l, partsUsed | 0x800l);
18871:     altpiece13at12at32:
18872:     break;
18873:    case 13:
18874:       if (partsUsed & 0x2l) goto altpiece2at13at32;
18875:       if(!(puzzle & 0x7a000l))
18876:         altDoSolve32(14, 0x4000l, puzzle | 0x7a000l, partsUsed | 0x2l);
18877:     altpiece2at13at32:
18878:       if (partsUsed & 0x4l) goto altpiece3at13at32;
18879:       if(!(puzzle & 0x9e000l))
18880:         altDoSolve32(14, 0x4000l, puzzle | 0x9e000l, partsUsed | 0x4l);
18881:     altpiece3at13at32:
18882:       if (partsUsed & 0x8l) goto altpiece4at13at32;
18883:       if(!(puzzle & 0x3e000l))
18884:         altDoSolve32(14, 0x4000l, puzzle | 0x3e000l, partsUsed | 0x8l);
18885:     altpiece4at13at32:
18886:       if (partsUsed & 0x10l) goto altpiece5at13at32;
18887:       if(!(puzzle & 0x92482000l))
18888:         altDoSolve32(14, 0x4000l, puzzle | 0x92482000l, partsUsed | 0x10l);
18889:     altpiece5at13at32:
18890:       if (partsUsed & 0x40l) goto altpiece7at13at32;
18891:       if(!(puzzle & 0x92402000l))
18892:         altDoSolve32(14, 0x4000l, puzzle | 0x92402000l, partsUsed | 0x40l);
18893:     altpiece7at13at32:
18894:       if (partsUsed & 0x80l) goto altpiece8at13at32;
18895:       if(!(puzzle & 0x92082000l))
18896:         altDoSolve32(14, 0x4000l, puzzle | 0x92082000l, partsUsed | 0x80l);
18897:       if(!(puzzle & 0x82092000l))
18898:         altDoSolve32(14, 0x4000l, puzzle | 0x82092000l, partsUsed | 0x80l);
18899:     altpiece8at13at32:
18900:       if (partsUsed & 0x100l) goto altpiece9at13at32;
18901:       if(!(puzzle & 0x3202000l))
18902:         altDoSolve32(14, 0x4000l, puzzle | 0x3202000l, partsUsed | 0x100l);
18903:       if(!(puzzle & 0x3012000l))
18904:         altDoSolve32(14, 0x4000l, puzzle | 0x3012000l, partsUsed | 0x100l);
18905:       if(!(puzzle & 0x801a000l))
18906:         altDoSolve32(14, 0x4000l, puzzle | 0x801a000l, partsUsed | 0x100l);
18907:       if(!(puzzle & 0x1a002000l))
18908:         altDoSolve32(14, 0x4000l, puzzle | 0x1a002000l, partsUsed | 0x100l);
18909:     altpiece9at13at32:
18910:       if (partsUsed & 0x200l) goto altpiece10at13at32;
18911:       if(!(puzzle & 0x5e000l))
18912:         altDoSolve32(14, 0x4000l, puzzle | 0x5e000l, partsUsed | 0x200l);
18913:     altpiece10at13at32:
18914:       if (partsUsed & 0x400l) goto altpiece11at13at32;
18915:       if (!(puzzle & 0x10012000l)) {
18916:          if(!(puzzle & 0x12412000l))
18917:            altDoSolve32(14, 0x4000l, puzzle | 0x12412000l, partsUsed | 0x400l);
18918:          if(!(puzzle & 0x92012000l))
18919:            altDoSolve32(14, 0x4000l, puzzle | 0x92012000l, partsUsed | 0x400l);
18920:          if(!(puzzle & 0x90092000l))
18921:            altDoSolve32(14, 0x4000l, puzzle | 0x90092000l, partsUsed | 0x400l);
18922:          if(!(puzzle & 0x12092000l))
18923:            altDoSolve32(14, 0x4000l, puzzle | 0x12092000l, partsUsed | 0x400l);
18924:       }
18925:       if(!(puzzle & 0xda000l))
18926:         altDoSolve32(14, 0x4000l, puzzle | 0xda000l, partsUsed | 0x400l);
18927:     altpiece11at13at32:
18928:       if (partsUsed & 0x800l) goto altpiece13at13at32;
18929:       if (!(puzzle & 0x18002000l)) {
18930:          if(!(puzzle & 0x1b002000l))
18931:            altDoSolve32(14, 0x4000l, puzzle | 0x1b002000l, partsUsed | 0x800l);
18932:          if(!(puzzle & 0x1a012000l))
18933:            altDoSolve32(14, 0x4000l, puzzle | 0x1a012000l, partsUsed | 0x800l);
18934:          if(!(puzzle & 0x1801a000l))
18935:            altDoSolve32(14, 0x4000l, puzzle | 0x1801a000l, partsUsed | 0x800l);
18936:       }
18937:       if(!(puzzle & 0x13012000l))
18938:         altDoSolve32(14, 0x4000l, puzzle | 0x13012000l, partsUsed | 0x800l);
18939:       if(!(puzzle & 0x1201a000l))
18940:         altDoSolve32(14, 0x4000l, puzzle | 0x1201a000l, partsUsed | 0x800l);
18941:       if(!(puzzle & 0x3602000l))
18942:         altDoSolve32(14, 0x4000l, puzzle | 0x3602000l, partsUsed | 0x800l);
18943:     altpiece13at13at32:
18944:     break;
18945:    case 14:
18946:       if (partsUsed & 0x40l) goto altpiece7at14at32;
18947:       if(!(puzzle & 0x24904000l))
18948:         altDoSolve32(15, 0x8000l, puzzle | 0x24904000l, partsUsed | 0x40l);
18949:     altpiece7at14at32:
18950:       if (partsUsed & 0x80l) goto altpiece8at14at32;
18951:       if(!(puzzle & 0xbc000l))
18952:         altDoSolve32(15, 0x8000l, puzzle | 0xbc000l, partsUsed | 0x80l);
18953:       if(!(puzzle & 0xf4000l))
18954:         altDoSolve32(15, 0x8000l, puzzle | 0xf4000l, partsUsed | 0x80l);
18955:       if(!(puzzle & 0x1c014000l))
18956:         altDoSolve32(15, 0x8000l, puzzle | 0x1c014000l, partsUsed | 0x80l);
18957:       if(!(puzzle & 0x1401c000l))
18958:         altDoSolve32(15, 0x8000l, puzzle | 0x1401c000l, partsUsed | 0x80l);
18959:     altpiece8at14at32:
18960:       if (partsUsed & 0x100l) goto altpiece9at14at32;
18961:       if(!(puzzle & 0x900c000l))
18962:         altDoSolve32(15, 0x8000l, puzzle | 0x900c000l, partsUsed | 0x100l);
18963:       if(!(puzzle & 0x802c000l))
18964:         altDoSolve32(15, 0x8000l, puzzle | 0x802c000l, partsUsed | 0x100l);
18965:       if(!(puzzle & 0x5804000l))
18966:         altDoSolve32(15, 0x8000l, puzzle | 0x5804000l, partsUsed | 0x100l);
18967:       if(!(puzzle & 0x4c004000l))
18968:         altDoSolve32(15, 0x8000l, puzzle | 0x4c004000l, partsUsed | 0x100l);
18969:       if(!(puzzle & 0x2400c000l))
18970:         altDoSolve32(15, 0x8000l, puzzle | 0x2400c000l, partsUsed | 0x100l);
18971:       if(!(puzzle & 0x60024000l))
18972:         altDoSolve32(15, 0x8000l, puzzle | 0x60024000l, partsUsed | 0x100l);
18973:       if(!(puzzle & 0x4064000l))
18974:         altDoSolve32(15, 0x8000l, puzzle | 0x4064000l, partsUsed | 0x100l);
18975:       if(!(puzzle & 0x4004c000l))
18976:         altDoSolve32(15, 0x8000l, puzzle | 0x4004c000l, partsUsed | 0x100l);
18977:     altpiece9at14at32:
18978:       if (partsUsed & 0x400l) goto altpiece11at14at32;
18979:       if (!(puzzle & 0x4c000l)) {
18980:          if(!(puzzle & 0xdc000l))
18981:            altDoSolve32(15, 0x8000l, puzzle | 0xdc000l, partsUsed | 0x400l);
18982:          if(!(puzzle & 0x7c000l))
18983:            altDoSolve32(15, 0x8000l, puzzle | 0x7c000l, partsUsed | 0x400l);
18984:          if(!(puzzle & 0xec000l))
18985:            altDoSolve32(15, 0x8000l, puzzle | 0xec000l, partsUsed | 0x400l);
18986:       }
18987:       if (!(puzzle & 0x800c000l)) {
18988:          if(!(puzzle & 0x1c00c000l))
18989:            altDoSolve32(15, 0x8000l, puzzle | 0x1c00c000l, partsUsed | 0x400l);
18990:          if(!(puzzle & 0xc01c000l))
18991:            altDoSolve32(15, 0x8000l, puzzle | 0xc01c000l, partsUsed | 0x400l);
18992:          if(!(puzzle & 0x1801c000l))
18993:            altDoSolve32(15, 0x8000l, puzzle | 0x1801c000l, partsUsed | 0x400l);
18994:       }
18995:       if(!(puzzle & 0x24824000l))
18996:         altDoSolve32(15, 0x8000l, puzzle | 0x24824000l, partsUsed | 0x400l);
18997:     altpiece11at14at32:
18998:       if (partsUsed & 0x800l) goto altpiece13at14at32;
18999:       if (!(puzzle & 0x400c000l)) {
19000:          if(!(puzzle & 0x406c000l))
19001:            altDoSolve32(15, 0x8000l, puzzle | 0x406c000l, partsUsed | 0x800l);
19002:          if(!(puzzle & 0x2c00c000l))
19003:            altDoSolve32(15, 0x8000l, puzzle | 0x2c00c000l, partsUsed | 0x800l);
19004:          if(!(puzzle & 0xc02c000l))
19005:            altDoSolve32(15, 0x8000l, puzzle | 0xc02c000l, partsUsed | 0x800l);
19006:          if(!(puzzle & 0xc04c000l))
19007:            altDoSolve32(15, 0x8000l, puzzle | 0xc04c000l, partsUsed | 0x800l);
19008:          if(!(puzzle & 0x4c00c000l))
19009:            altDoSolve32(15, 0x8000l, puzzle | 0x4c00c000l, partsUsed | 0x800l);
19010:          if(!(puzzle & 0x2402c000l))
19011:            altDoSolve32(15, 0x8000l, puzzle | 0x2402c000l, partsUsed | 0x800l);
19012:          if(!(puzzle & 0xd00c000l))
19013:            altDoSolve32(15, 0x8000l, puzzle | 0xd00c000l, partsUsed | 0x800l);
19014:          if(!(puzzle & 0xc80c000l))
19015:            altDoSolve32(15, 0x8000l, puzzle | 0xc80c000l, partsUsed | 0x800l);
19016:       }
19017:       if (!(puzzle & 0x40044000l)) {
19018:          if(!(puzzle & 0x60064000l))
19019:            altDoSolve32(15, 0x8000l, puzzle | 0x60064000l, partsUsed | 0x800l);
19020:          if(!(puzzle & 0x4804c000l))
19021:            altDoSolve32(15, 0x8000l, puzzle | 0x4804c000l, partsUsed | 0x800l);
19022:          if(!(puzzle & 0x4006c000l))
19023:            altDoSolve32(15, 0x8000l, puzzle | 0x4006c000l, partsUsed | 0x800l);
19024:       }
19025:       if (!(puzzle & 0x20024000l)) {
19026:          if(!(puzzle & 0x2c024000l))
19027:            altDoSolve32(15, 0x8000l, puzzle | 0x2c024000l, partsUsed | 0x800l);
19028:          if(!(puzzle & 0x24064000l))
19029:            altDoSolve32(15, 0x8000l, puzzle | 0x24064000l, partsUsed | 0x800l);
19030:          if(!(puzzle & 0x2006c000l))
19031:            altDoSolve32(15, 0x8000l, puzzle | 0x2006c000l, partsUsed | 0x800l);
19032:          if(!(puzzle & 0x64024000l))
19033:            altDoSolve32(15, 0x8000l, puzzle | 0x64024000l, partsUsed | 0x800l);
19034:       }
19035:       if(!(puzzle & 0x806c000l))
19036:         altDoSolve32(15, 0x8000l, puzzle | 0x806c000l, partsUsed | 0x800l);
19037:       if(!(puzzle & 0x6c004000l))
19038:         altDoSolve32(15, 0x8000l, puzzle | 0x6c004000l, partsUsed | 0x800l);
19039:       if(!(puzzle & 0xd804000l))
19040:         altDoSolve32(15, 0x8000l, puzzle | 0xd804000l, partsUsed | 0x800l);
19041:     altpiece13at14at32:
19042:     break;
19043:    case 15:
19044:       if (partsUsed & 0x40l) goto altpiece7at15at32;
19045:       if(!(puzzle & 0x49208000l))
19046:         altDoSolve32(16, 0x10000l, puzzle | 0x49208000l, partsUsed | 0x40l);
19047:     altpiece7at15at32:
19048:       if (partsUsed & 0x100l) goto altpiece9at15at32;
19049:       if(!(puzzle & 0xc808000l))
19050:         altDoSolve32(16, 0x10000l, puzzle | 0xc808000l, partsUsed | 0x100l);
19051:       if(!(puzzle & 0xc048000l))
19052:         altDoSolve32(16, 0x10000l, puzzle | 0xc048000l, partsUsed | 0x100l);
19053:       if(!(puzzle & 0x12018000l))
19054:         altDoSolve32(16, 0x10000l, puzzle | 0x12018000l, partsUsed | 0x100l);
19055:       if(!(puzzle & 0x10058000l))
19056:         altDoSolve32(16, 0x10000l, puzzle | 0x10058000l, partsUsed | 0x100l);
19057:       if(!(puzzle & 0xb008000l))
19058:         altDoSolve32(16, 0x10000l, puzzle | 0xb008000l, partsUsed | 0x100l);
19059:       if(!(puzzle & 0x20068000l))
19060:         altDoSolve32(16, 0x10000l, puzzle | 0x20068000l, partsUsed | 0x100l);
19061:       if(!(puzzle & 0x68008000l))
19062:         altDoSolve32(16, 0x10000l, puzzle | 0x68008000l, partsUsed | 0x100l);
19063:       if(!(puzzle & 0x48018000l))
19064:         altDoSolve32(16, 0x10000l, puzzle | 0x48018000l, partsUsed | 0x100l);
19065:       if(!(puzzle & 0x98008000l))
19066:         altDoSolve32(16, 0x10000l, puzzle | 0x98008000l, partsUsed | 0x100l);
19067:       if(!(puzzle & 0xc0048000l))
19068:         altDoSolve32(16, 0x10000l, puzzle | 0xc0048000l, partsUsed | 0x100l);
19069:       if(!(puzzle & 0x80c8000l))
19070:         altDoSolve32(16, 0x10000l, puzzle | 0x80c8000l, partsUsed | 0x100l);
19071:       if(!(puzzle & 0x80098000l))
19072:         altDoSolve32(16, 0x10000l, puzzle | 0x80098000l, partsUsed | 0x100l);
19073:     altpiece9at15at32:
19074:       if (partsUsed & 0x400l) goto altpiece11at15at32;
19075:       if(!(puzzle & 0x1c018000l))
19076:         altDoSolve32(16, 0x10000l, puzzle | 0x1c018000l, partsUsed | 0x400l);
19077:       if(!(puzzle & 0x49048000l))
19078:         altDoSolve32(16, 0x10000l, puzzle | 0x49048000l, partsUsed | 0x400l);
19079:       if(!(puzzle & 0xf8000l))
19080:         altDoSolve32(16, 0x10000l, puzzle | 0xf8000l, partsUsed | 0x400l);
19081:     altpiece11at15at32:
19082:       if (partsUsed & 0x800l) goto altpiece13at15at32;
19083:       if (!(puzzle & 0x8018000l)) {
19084:          if(!(puzzle & 0x80d8000l))
19085:            altDoSolve32(16, 0x10000l, puzzle | 0x80d8000l, partsUsed | 0x800l);
19086:          if(!(puzzle & 0x58018000l))
19087:            altDoSolve32(16, 0x10000l, puzzle | 0x58018000l, partsUsed | 0x800l);
19088:          if(!(puzzle & 0x18058000l))
19089:            altDoSolve32(16, 0x10000l, puzzle | 0x18058000l, partsUsed | 0x800l);
19090:          if(!(puzzle & 0x18098000l))
19091:            altDoSolve32(16, 0x10000l, puzzle | 0x18098000l, partsUsed | 0x800l);
19092:          if(!(puzzle & 0x98018000l))
19093:            altDoSolve32(16, 0x10000l, puzzle | 0x98018000l, partsUsed | 0x800l);
19094:          if(!(puzzle & 0x48058000l))
19095:            altDoSolve32(16, 0x10000l, puzzle | 0x48058000l, partsUsed | 0x800l);
19096:          if(!(puzzle & 0x1a018000l))
19097:            altDoSolve32(16, 0x10000l, puzzle | 0x1a018000l, partsUsed | 0x800l);
19098:          if(!(puzzle & 0x19018000l))
19099:            altDoSolve32(16, 0x10000l, puzzle | 0x19018000l, partsUsed | 0x800l);
19100:       }
19101:       if (!(puzzle & 0x80088000l)) {
19102:          if(!(puzzle & 0xc00c8000l))
19103:            altDoSolve32(16, 0x10000l, puzzle | 0xc00c8000l, partsUsed | 0x800l);
19104:          if(!(puzzle & 0x90098000l))
19105:            altDoSolve32(16, 0x10000l, puzzle | 0x90098000l, partsUsed | 0x800l);
19106:          if(!(puzzle & 0x800d8000l))
19107:            altDoSolve32(16, 0x10000l, puzzle | 0x800d8000l, partsUsed | 0x800l);
19108:       }
19109:       if (!(puzzle & 0x40048000l)) {
19110:          if(!(puzzle & 0x58048000l))
19111:            altDoSolve32(16, 0x10000l, puzzle | 0x58048000l, partsUsed | 0x800l);
19112:          if(!(puzzle & 0x480c8000l))
19113:            altDoSolve32(16, 0x10000l, puzzle | 0x480c8000l, partsUsed | 0x800l);
19114:          if(!(puzzle & 0x400d8000l))
19115:            altDoSolve32(16, 0x10000l, puzzle | 0x400d8000l, partsUsed | 0x800l);
19116:          if(!(puzzle & 0xc8048000l))
19117:            altDoSolve32(16, 0x10000l, puzzle | 0xc8048000l, partsUsed | 0x800l);
19118:          if(!(puzzle & 0x68048000l))
19119:            altDoSolve32(16, 0x10000l, puzzle | 0x68048000l, partsUsed | 0x800l);
19120:          if(!(puzzle & 0x60068000l))
19121:            altDoSolve32(16, 0x10000l, puzzle | 0x60068000l, partsUsed | 0x800l);
19122:          if(!(puzzle & 0x4c048000l))
19123:            altDoSolve32(16, 0x10000l, puzzle | 0x4c048000l, partsUsed | 0x800l);
19124:          if(!(puzzle & 0x48068000l))
19125:            altDoSolve32(16, 0x10000l, puzzle | 0x48068000l, partsUsed | 0x800l);
19126:       }
19127:       if(!(puzzle & 0x100d8000l))
19128:         altDoSolve32(16, 0x10000l, puzzle | 0x100d8000l, partsUsed | 0x800l);
19129:       if(!(puzzle & 0xd8008000l))
19130:         altDoSolve32(16, 0x10000l, puzzle | 0xd8008000l, partsUsed | 0x800l);
19131:       if(!(puzzle & 0x6c008000l))
19132:         altDoSolve32(16, 0x10000l, puzzle | 0x6c008000l, partsUsed | 0x800l);
19133:       if(!(puzzle & 0x1b008000l))
19134:         altDoSolve32(16, 0x10000l, puzzle | 0x1b008000l, partsUsed | 0x800l);
19135:       if(!(puzzle & 0xd808000l))
19136:         altDoSolve32(16, 0x10000l, puzzle | 0xd808000l, partsUsed | 0x800l);
19137:     altpiece13at15at32:
19138:     break;
19139:    case 16:
19140:       if (partsUsed & 0x40l) goto altpiece7at16at32;
19141:       if(!(puzzle & 0x92410000l))
19142:         altDoSolve32(17, 0x20000l, puzzle | 0x92410000l, partsUsed | 0x40l);
19143:     altpiece7at16at32:
19144:       if (partsUsed & 0x100l) goto altpiece9at16at32;
19145:       if(!(puzzle & 0x19010000l))
19146:         altDoSolve32(17, 0x20000l, puzzle | 0x19010000l, partsUsed | 0x100l);
19147:       if(!(puzzle & 0x18090000l))
19148:         altDoSolve32(17, 0x20000l, puzzle | 0x18090000l, partsUsed | 0x100l);
19149:       if(!(puzzle & 0x400d0000l))
19150:         altDoSolve32(17, 0x20000l, puzzle | 0x400d0000l, partsUsed | 0x100l);
19151:       if(!(puzzle & 0xd0010000l))
19152:         altDoSolve32(17, 0x20000l, puzzle | 0xd0010000l, partsUsed | 0x100l);
19153:     altpiece9at16at32:
19154:       if (partsUsed & 0x400l) goto altpiece11at16at32;
19155:       if(!(puzzle & 0x92090000l))
19156:         altDoSolve32(17, 0x20000l, puzzle | 0x92090000l, partsUsed | 0x400l);
19157:     altpiece11at16at32:
19158:       if (partsUsed & 0x800l) goto altpiece13at16at32;
19159:       if (!(puzzle & 0xc0010000l)) {
19160:          if(!(puzzle & 0xd8010000l))
19161:            altDoSolve32(17, 0x20000l, puzzle | 0xd8010000l, partsUsed | 0x800l);
19162:          if(!(puzzle & 0xd0090000l))
19163:            altDoSolve32(17, 0x20000l, puzzle | 0xd0090000l, partsUsed | 0x800l);
19164:          if(!(puzzle & 0xc00d0000l))
19165:            altDoSolve32(17, 0x20000l, puzzle | 0xc00d0000l, partsUsed | 0x800l);
19166:       }
19167:       if(!(puzzle & 0x98090000l))
19168:         altDoSolve32(17, 0x20000l, puzzle | 0x98090000l, partsUsed | 0x800l);
19169:       if(!(puzzle & 0x900d0000l))
19170:         altDoSolve32(17, 0x20000l, puzzle | 0x900d0000l, partsUsed | 0x800l);
19171:       if(!(puzzle & 0x1b010000l))
19172:         altDoSolve32(17, 0x20000l, puzzle | 0x1b010000l, partsUsed | 0x800l);
19173:     altpiece13at16at32:
19174:     break;
19175:    case 17:
19176:       if (partsUsed & 0x20l) goto altpiece6at17at32;
19177:       if(!(puzzle & 0x24920000l))
19178:         altDoSolve32(18, 0x40000l, puzzle | 0x24920000l, partsUsed | 0x20l);
19179:     altpiece6at17at32:
19180:       if (partsUsed & 0x80l) goto altpiece8at17at32;
19181:       if(!(puzzle & 0xe00a0000l))
19182:         altDoSolve32(18, 0x40000l, puzzle | 0xe00a0000l, partsUsed | 0x80l);
19183:       if(!(puzzle & 0xa00e0000l))
19184:         altDoSolve32(18, 0x40000l, puzzle | 0xa00e0000l, partsUsed | 0x80l);
19185:     altpiece8at17at32:
19186:       if (partsUsed & 0x100l) goto altpiece9at17at32;
19187:       if(!(puzzle & 0x48060000l))
19188:         altDoSolve32(18, 0x40000l, puzzle | 0x48060000l, partsUsed | 0x100l);
19189:       if(!(puzzle & 0x2c020000l))
19190:         altDoSolve32(18, 0x40000l, puzzle | 0x2c020000l, partsUsed | 0x100l);
19191:     altpiece9at17at32:
19192:       if (partsUsed & 0x400l) goto altpiece11at17at32;
19193:       if (!(puzzle & 0x40060000l)) {
19194:          if(!(puzzle & 0xe0060000l))
19195:            altDoSolve32(18, 0x40000l, puzzle | 0xe0060000l, partsUsed | 0x400l);
19196:          if(!(puzzle & 0x600e0000l))
19197:            altDoSolve32(18, 0x40000l, puzzle | 0x600e0000l, partsUsed | 0x400l);
19198:          if(!(puzzle & 0xc00e0000l))
19199:            altDoSolve32(18, 0x40000l, puzzle | 0xc00e0000l, partsUsed | 0x400l);
19200:       }
19201:     altpiece11at17at32:
19202:       if (partsUsed & 0x800l) goto altpiece13at17at32;
19203:       if (!(puzzle & 0x60020000l)) {
19204:          if(!(puzzle & 0x6c020000l))
19205:            altDoSolve32(18, 0x40000l, puzzle | 0x6c020000l, partsUsed | 0x800l);
19206:          if(!(puzzle & 0x68060000l))
19207:            altDoSolve32(18, 0x40000l, puzzle | 0x68060000l, partsUsed | 0x800l);
19208:          if(!(puzzle & 0x64060000l))
19209:            altDoSolve32(18, 0x40000l, puzzle | 0x64060000l, partsUsed | 0x800l);
19210:       }
19211:     altpiece13at17at32:
19212:     break;
19213:    case 18:
19214:       if (partsUsed & 0x20l) goto altpiece6at18at32;
19215:       if(!(puzzle & 0x49240000l))
19216:         altDoSolve32(19, 0x80000l, puzzle | 0x49240000l, partsUsed | 0x20l);
19217:     altpiece6at18at32:
19218:       if (partsUsed & 0x100l) goto altpiece9at18at32;
19219:       if(!(puzzle & 0x58040000l))
19220:         altDoSolve32(19, 0x80000l, puzzle | 0x58040000l, partsUsed | 0x100l);
19221:       if(!(puzzle & 0x64040000l))
19222:         altDoSolve32(19, 0x80000l, puzzle | 0x64040000l, partsUsed | 0x100l);
19223:       if(!(puzzle & 0x900c0000l))
19224:         altDoSolve32(19, 0x80000l, puzzle | 0x900c0000l, partsUsed | 0x100l);
19225:     altpiece9at18at32:
19226:       if (partsUsed & 0x400l) goto altpiece11at18at32;
19227:       if(!(puzzle & 0xe00c0000l))
19228:         altDoSolve32(19, 0x80000l, puzzle | 0xe00c0000l, partsUsed | 0x400l);
19229:     altpiece11at18at32:
19230:       if (partsUsed & 0x800l) goto altpiece13at18at32;
19231:       if (!(puzzle & 0xc0040000l)) {
19232:          if(!(puzzle & 0xd8040000l))
19233:            altDoSolve32(19, 0x80000l, puzzle | 0xd8040000l, partsUsed | 0x800l);
19234:          if(!(puzzle & 0xd00c0000l))
19235:            altDoSolve32(19, 0x80000l, puzzle | 0xd00c0000l, partsUsed | 0x800l);
19236:          if(!(puzzle & 0xc80c0000l))
19237:            altDoSolve32(19, 0x80000l, puzzle | 0xc80c0000l, partsUsed | 0x800l);
19238:       }
19239:       if(!(puzzle & 0x6c040000l))
19240:         altDoSolve32(19, 0x80000l, puzzle | 0x6c040000l, partsUsed | 0x800l);
19241:     altpiece13at18at32:
19242:     break;
19243:    case 19:
19244:       if (partsUsed & 0x20l) goto altpiece6at19at32;
19245:       if(!(puzzle & 0x92480000l))
19246:         altDoSolve32(20, 0x100000l, puzzle | 0x92480000l, partsUsed | 0x20l);
19247:     altpiece6at19at32:
19248:       if (partsUsed & 0x100l) goto altpiece9at19at32;
19249:       if(!(puzzle & 0xc8080000l))
19250:         altDoSolve32(20, 0x100000l, puzzle | 0xc8080000l, partsUsed | 0x100l);
19251:     altpiece9at19at32:
19252:       if (partsUsed & 0x800l) goto altpiece13at19at32;
19253:       if(!(puzzle & 0xd8080000l))
19254:         altDoSolve32(20, 0x100000l, puzzle | 0xd8080000l, partsUsed | 0x800l);
19255:     altpiece13at19at32:
19256:     break;
19257:    case 20:
19258:       if (partsUsed & 0x2l) goto altpiece2at20at32;
19259:       if(!(puzzle & 0x13300000l))
19260:         altDoSolve32(21, 0x200000l, puzzle | 0x13300000l, partsUsed | 0x2l);
19261:       if(!(puzzle & 0x19900000l))
19262:         altDoSolve32(21, 0x200000l, puzzle | 0x19900000l, partsUsed | 0x2l);
19263:     altpiece2at20at32:
19264:       if (partsUsed & 0x4l) goto altpiece3at20at32;
19265:       if(!(puzzle & 0x9700000l))
19266:         altDoSolve32(21, 0x200000l, puzzle | 0x9700000l, partsUsed | 0x4l);
19267:       if(!(puzzle & 0x7900000l))
19268:         altDoSolve32(21, 0x200000l, puzzle | 0x7900000l, partsUsed | 0x4l);
19269:     altpiece3at20at32:
19270:       if (partsUsed & 0x8l) goto altpiece4at20at32;
19271:       if(!(puzzle & 0x19300000l))
19272:         altDoSolve32(21, 0x200000l, puzzle | 0x19300000l, partsUsed | 0x8l);
19273:       if(!(puzzle & 0x13900000l))
19274:         altDoSolve32(21, 0x200000l, puzzle | 0x13900000l, partsUsed | 0x8l);
19275:     altpiece4at20at32:
19276:       if (partsUsed & 0x10l) goto altpiece5at20at32;
19277:       if(!(puzzle & 0x2cb00000l))
19278:         altDoSolve32(21, 0x200000l, puzzle | 0x2cb00000l, partsUsed | 0x10l);
19279:       if(!(puzzle & 0x65900000l))
19280:         altDoSolve32(21, 0x200000l, puzzle | 0x65900000l, partsUsed | 0x10l);
19281:       if(!(puzzle & 0x4d300000l))
19282:         altDoSolve32(21, 0x200000l, puzzle | 0x4d300000l, partsUsed | 0x10l);
19283:     altpiece5at20at32:
19284:       if (partsUsed & 0x20l) goto altpiece6at20at32;
19285:       if(!(puzzle & 0x24b00000l))
19286:         altDoSolve32(21, 0x200000l, puzzle | 0x24b00000l, partsUsed | 0x20l);
19287:       if(!(puzzle & 0x64900000l))
19288:         altDoSolve32(21, 0x200000l, puzzle | 0x64900000l, partsUsed | 0x20l);
19289:       if(!(puzzle & 0x49300000l))
19290:         altDoSolve32(21, 0x200000l, puzzle | 0x49300000l, partsUsed | 0x20l);
19291:     altpiece6at20at32:
19292:       if (partsUsed & 0x40l) goto altpiece7at20at32;
19293:       if(!(puzzle & 0x25900000l))
19294:         altDoSolve32(21, 0x200000l, puzzle | 0x25900000l, partsUsed | 0x40l);
19295:       if(!(puzzle & 0x2c900000l))
19296:         altDoSolve32(21, 0x200000l, puzzle | 0x2c900000l, partsUsed | 0x40l);
19297:     altpiece7at20at32:
19298:       if (partsUsed & 0x80l) goto altpiece8at20at32;
19299:       if(!(puzzle & 0x3d00000l))
19300:         altDoSolve32(21, 0x200000l, puzzle | 0x3d00000l, partsUsed | 0x80l);
19301:       if(!(puzzle & 0x2f00000l))
19302:         altDoSolve32(21, 0x200000l, puzzle | 0x2f00000l, partsUsed | 0x80l);
19303:       if(!(puzzle & 0xcb00000l))
19304:         altDoSolve32(21, 0x200000l, puzzle | 0xcb00000l, partsUsed | 0x80l);
19305:       if(!(puzzle & 0xd300000l))
19306:         altDoSolve32(21, 0x200000l, puzzle | 0xd300000l, partsUsed | 0x80l);
19307:     altpiece8at20at32:
19308:       if (partsUsed & 0x200l) goto altpiece10at20at32;
19309:       if(!(puzzle & 0xb300000l))
19310:         altDoSolve32(21, 0x200000l, puzzle | 0xb300000l, partsUsed | 0x200l);
19311:       if(!(puzzle & 0xb900000l))
19312:         altDoSolve32(21, 0x200000l, puzzle | 0xb900000l, partsUsed | 0x200l);
19313:     altpiece10at20at32:
19314:       if (partsUsed & 0x400l) goto altpiece11at20at32;
19315:       if (!(puzzle & 0x1300000l)) {
19316:          if(!(puzzle & 0x3700000l))
19317:            altDoSolve32(21, 0x200000l, puzzle | 0x3700000l, partsUsed | 0x400l);
19318:          if(!(puzzle & 0x1f00000l))
19319:            altDoSolve32(21, 0x200000l, puzzle | 0x1f00000l, partsUsed | 0x400l);
19320:          if(!(puzzle & 0x5b00000l))
19321:            altDoSolve32(21, 0x200000l, puzzle | 0x5b00000l, partsUsed | 0x400l);
19322:          if(!(puzzle & 0x9b00000l))
19323:            altDoSolve32(21, 0x200000l, puzzle | 0x9b00000l, partsUsed | 0x400l);
19324:          if(!(puzzle & 0x3b00000l))
19325:            altDoSolve32(21, 0x200000l, puzzle | 0x3b00000l, partsUsed | 0x400l);
19326:       }
19327:       if(!(puzzle & 0xd900000l))
19328:         altDoSolve32(21, 0x200000l, puzzle | 0xd900000l, partsUsed | 0x400l);
19329:     altpiece11at20at32:
19330:     break;
19331:    case 21:
19332:       if (partsUsed & 0x2l) goto altpiece2at21at32;
19333:       if(!(puzzle & 0x5e00000l))
19334:         altDoSolve32(22, 0x400000l, puzzle | 0x5e00000l, partsUsed | 0x2l);
19335:     altpiece2at21at32:
19336:       if (partsUsed & 0x4l) goto altpiece3at21at32;
19337:       if(!(puzzle & 0x1d200000l))
19338:         altDoSolve32(22, 0x400000l, puzzle | 0x1d200000l, partsUsed | 0x4l);
19339:     altpiece3at21at32:
19340:       if (partsUsed & 0x8l) goto altpiece4at21at32;
19341:       if(!(puzzle & 0xd600000l))
19342:         altDoSolve32(22, 0x400000l, puzzle | 0xd600000l, partsUsed | 0x8l);
19343:     altpiece4at21at32:
19344:       if (partsUsed & 0x10l) goto altpiece5at21at32;
19345:       if (!(puzzle & 0x49200000l)) {
19346:          if(!(puzzle & 0x69a00000l))
19347:            altDoSolve32(22, 0x400000l, puzzle | 0x69a00000l, partsUsed | 0x10l);
19348:          if(!(puzzle & 0xcb200000l))
19349:            altDoSolve32(22, 0x400000l, puzzle | 0xcb200000l, partsUsed | 0x10l);
19350:          if(!(puzzle & 0x59600000l))
19351:            altDoSolve32(22, 0x400000l, puzzle | 0x59600000l, partsUsed | 0x10l);
19352:       }
19353:       if(!(puzzle & 0x9a600000l))
19354:         altDoSolve32(22, 0x400000l, puzzle | 0x9a600000l, partsUsed | 0x10l);
19355:     altpiece5at21at32:
19356:       if (partsUsed & 0x20l) goto altpiece6at21at32;
19357:       if (!(puzzle & 0x49200000l)) {
19358:          if(!(puzzle & 0x69200000l))
19359:            altDoSolve32(22, 0x400000l, puzzle | 0x69200000l, partsUsed | 0x20l);
19360:          if(!(puzzle & 0x49600000l))
19361:            altDoSolve32(22, 0x400000l, puzzle | 0x49600000l, partsUsed | 0x20l);
19362:          if(!(puzzle & 0xc9200000l))
19363:            altDoSolve32(22, 0x400000l, puzzle | 0xc9200000l, partsUsed | 0x20l);
19364:       }
19365:       if(!(puzzle & 0x92600000l))
19366:         altDoSolve32(22, 0x400000l, puzzle | 0x92600000l, partsUsed | 0x20l);
19367:     altpiece6at21at32:
19368:       if (partsUsed & 0x40l) goto altpiece7at21at32;
19369:       if (!(puzzle & 0x49200000l)) {
19370:          if(!(puzzle & 0x49a00000l))
19371:            altDoSolve32(22, 0x400000l, puzzle | 0x49a00000l, partsUsed | 0x40l);
19372:          if(!(puzzle & 0x4d200000l))
19373:            altDoSolve32(22, 0x400000l, puzzle | 0x4d200000l, partsUsed | 0x40l);
19374:          if(!(puzzle & 0x4b200000l))
19375:            altDoSolve32(22, 0x400000l, puzzle | 0x4b200000l, partsUsed | 0x40l);
19376:          if(!(puzzle & 0x59200000l))
19377:            altDoSolve32(22, 0x400000l, puzzle | 0x59200000l, partsUsed | 0x40l);
19378:       }
19379:     altpiece7at21at32:
19380:       if (partsUsed & 0x80l) goto altpiece8at21at32;
19381:       if(!(puzzle & 0x19600000l))
19382:         altDoSolve32(22, 0x400000l, puzzle | 0x19600000l, partsUsed | 0x80l);
19383:       if(!(puzzle & 0x1a600000l))
19384:         altDoSolve32(22, 0x400000l, puzzle | 0x1a600000l, partsUsed | 0x80l);
19385:     altpiece8at21at32:
19386:       if (partsUsed & 0x200l) goto altpiece10at21at32;
19387:       if (!(puzzle & 0x1a00000l)) {
19388:          if(!(puzzle & 0x13a00000l))
19389:            altDoSolve32(22, 0x400000l, puzzle | 0x13a00000l, partsUsed | 0x200l);
19390:          if(!(puzzle & 0x7a00000l))
19391:            altDoSolve32(22, 0x400000l, puzzle | 0x7a00000l, partsUsed | 0x200l);
19392:          if(!(puzzle & 0x9e00000l))
19393:            altDoSolve32(22, 0x400000l, puzzle | 0x9e00000l, partsUsed | 0x200l);
19394:          if(!(puzzle & 0x19a00000l))
19395:            altDoSolve32(22, 0x400000l, puzzle | 0x19a00000l, partsUsed | 0x200l);
19396:       }
19397:       if(!(puzzle & 0xf200000l))
19398:         altDoSolve32(22, 0x400000l, puzzle | 0xf200000l, partsUsed | 0x200l);
19399:     altpiece10at21at32:
19400:       if (partsUsed & 0x400l) goto altpiece11at21at32;
19401:       if (!(puzzle & 0x3200000l)) {
19402:          if(!(puzzle & 0xb600000l))
19403:            altDoSolve32(22, 0x400000l, puzzle | 0xb600000l, partsUsed | 0x400l);
19404:          if(!(puzzle & 0x13600000l))
19405:            altDoSolve32(22, 0x400000l, puzzle | 0x13600000l, partsUsed | 0x400l);
19406:          if(!(puzzle & 0x1b200000l))
19407:            altDoSolve32(22, 0x400000l, puzzle | 0x1b200000l, partsUsed | 0x400l);
19408:       }
19409:       if(!(puzzle & 0x3e00000l))
19410:         altDoSolve32(22, 0x400000l, puzzle | 0x3e00000l, partsUsed | 0x400l);
19411:       if(!(puzzle & 0xda00000l))
19412:         altDoSolve32(22, 0x400000l, puzzle | 0xda00000l, partsUsed | 0x400l);
19413:     altpiece11at21at32:
19414:     break;
19415:    case 22:
19416:       if (partsUsed & 0x2l) goto altpiece2at22at32;
19417:       if(!(puzzle & 0xf400000l))
19418:         altDoSolve32(23, 0x800000l, puzzle | 0xf400000l, partsUsed | 0x2l);
19419:     altpiece2at22at32:
19420:       if (partsUsed & 0x4l) goto altpiece3at22at32;
19421:       if(!(puzzle & 0x13c00000l))
19422:         altDoSolve32(23, 0x800000l, puzzle | 0x13c00000l, partsUsed | 0x4l);
19423:     altpiece3at22at32:
19424:       if (partsUsed & 0x8l) goto altpiece4at22at32;
19425:       if(!(puzzle & 0x7c00000l))
19426:         altDoSolve32(23, 0x800000l, puzzle | 0x7c00000l, partsUsed | 0x8l);
19427:     altpiece4at22at32:
19428:       if (partsUsed & 0x10l) goto altpiece5at22at32;
19429:       if(!(puzzle & 0xd3400000l))
19430:         altDoSolve32(23, 0x800000l, puzzle | 0xd3400000l, partsUsed | 0x10l);
19431:     altpiece5at22at32:
19432:       if (partsUsed & 0x20l) goto altpiece6at22at32;
19433:       if(!(puzzle & 0xd2400000l))
19434:         altDoSolve32(23, 0x800000l, puzzle | 0xd2400000l, partsUsed | 0x20l);
19435:     altpiece6at22at32:
19436:       if (partsUsed & 0x40l) goto altpiece7at22at32;
19437:       if(!(puzzle & 0x93400000l))
19438:         altDoSolve32(23, 0x800000l, puzzle | 0x93400000l, partsUsed | 0x40l);
19439:       if(!(puzzle & 0x9a400000l))
19440:         altDoSolve32(23, 0x800000l, puzzle | 0x9a400000l, partsUsed | 0x40l);
19441:     altpiece7at22at32:
19442:       if (partsUsed & 0x200l) goto altpiece10at22at32;
19443:       if(!(puzzle & 0xbc00000l))
19444:         altDoSolve32(23, 0x800000l, puzzle | 0xbc00000l, partsUsed | 0x200l);
19445:     altpiece10at22at32:
19446:       if (partsUsed & 0x400l) goto altpiece11at22at32;
19447:       if(!(puzzle & 0x1b400000l))
19448:         altDoSolve32(23, 0x800000l, puzzle | 0x1b400000l, partsUsed | 0x400l);
19449:     altpiece11at22at32:
19450:     break;
19451:    case 23:
19452:       if (partsUsed & 0x2l) goto altpiece2at23at32;
19453:       if(!(puzzle & 0x99800000l))
19454:         altDoSolve32(24, 0x1000000l, puzzle | 0x99800000l, partsUsed | 0x2l);
19455:       if(!(puzzle & 0xcc800000l))
19456:         altDoSolve32(24, 0x1000000l, puzzle | 0xcc800000l, partsUsed | 0x2l);
19457:     altpiece2at23at32:
19458:       if (partsUsed & 0x4l) goto altpiece3at23at32;
19459:       if(!(puzzle & 0x4b800000l))
19460:         altDoSolve32(24, 0x1000000l, puzzle | 0x4b800000l, partsUsed | 0x4l);
19461:       if(!(puzzle & 0x3c800000l))
19462:         altDoSolve32(24, 0x1000000l, puzzle | 0x3c800000l, partsUsed | 0x4l);
19463:     altpiece3at23at32:
19464:       if (partsUsed & 0x8l) goto altpiece4at23at32;
19465:       if(!(puzzle & 0xc9800000l))
19466:         altDoSolve32(24, 0x1000000l, puzzle | 0xc9800000l, partsUsed | 0x8l);
19467:       if(!(puzzle & 0x9c800000l))
19468:         altDoSolve32(24, 0x1000000l, puzzle | 0x9c800000l, partsUsed | 0x8l);
19469:     altpiece4at23at32:
19470:       if (partsUsed & 0x80l) goto altpiece8at23at32;
19471:       if(!(puzzle & 0x1e800000l))
19472:         altDoSolve32(24, 0x1000000l, puzzle | 0x1e800000l, partsUsed | 0x80l);
19473:       if(!(puzzle & 0x17800000l))
19474:         altDoSolve32(24, 0x1000000l, puzzle | 0x17800000l, partsUsed | 0x80l);
19475:       if(!(puzzle & 0x65800000l))
19476:         altDoSolve32(24, 0x1000000l, puzzle | 0x65800000l, partsUsed | 0x80l);
19477:       if(!(puzzle & 0x69800000l))
19478:         altDoSolve32(24, 0x1000000l, puzzle | 0x69800000l, partsUsed | 0x80l);
19479:     altpiece8at23at32:
19480:       if (partsUsed & 0x200l) goto altpiece10at23at32;
19481:       if(!(puzzle & 0x59800000l))
19482:         altDoSolve32(24, 0x1000000l, puzzle | 0x59800000l, partsUsed | 0x200l);
19483:       if(!(puzzle & 0x5c800000l))
19484:         altDoSolve32(24, 0x1000000l, puzzle | 0x5c800000l, partsUsed | 0x200l);
19485:     altpiece10at23at32:
19486:       if (partsUsed & 0x400l) goto altpiece11at23at32;
19487:       if (!(puzzle & 0x9800000l)) {
19488:          if(!(puzzle & 0x1b800000l))
19489:            altDoSolve32(24, 0x1000000l, puzzle | 0x1b800000l, partsUsed | 0x400l);
19490:          if(!(puzzle & 0xf800000l))
19491:            altDoSolve32(24, 0x1000000l, puzzle | 0xf800000l, partsUsed | 0x400l);
19492:          if(!(puzzle & 0x2d800000l))
19493:            altDoSolve32(24, 0x1000000l, puzzle | 0x2d800000l, partsUsed | 0x400l);
19494:          if(!(puzzle & 0x4d800000l))
19495:            altDoSolve32(24, 0x1000000l, puzzle | 0x4d800000l, partsUsed | 0x400l);
19496:          if(!(puzzle & 0x1d800000l))
19497:            altDoSolve32(24, 0x1000000l, puzzle | 0x1d800000l, partsUsed | 0x400l);
19498:       }
19499:       if(!(puzzle & 0x6c800000l))
19500:         altDoSolve32(24, 0x1000000l, puzzle | 0x6c800000l, partsUsed | 0x400l);
19501:     altpiece11at23at32:
19502:     break;
19503:    case 24:
19504:       if (partsUsed & 0x2l) goto altpiece2at24at32;
19505:       if(!(puzzle & 0x2f000000l))
19506:         altDoSolve32(25, 0x2000000l, puzzle | 0x2f000000l, partsUsed | 0x2l);
19507:     altpiece2at24at32:
19508:       if (partsUsed & 0x4l) goto altpiece3at24at32;
19509:       if(!(puzzle & 0xe9000000l))
19510:         altDoSolve32(25, 0x2000000l, puzzle | 0xe9000000l, partsUsed | 0x4l);
19511:     altpiece3at24at32:
19512:       if (partsUsed & 0x8l) goto altpiece4at24at32;
19513:       if(!(puzzle & 0x6b000000l))
19514:         altDoSolve32(25, 0x2000000l, puzzle | 0x6b000000l, partsUsed | 0x8l);
19515:     altpiece4at24at32:
19516:       if (partsUsed & 0x80l) goto altpiece8at24at32;
19517:       if(!(puzzle & 0xcb000000l))
19518:         altDoSolve32(25, 0x2000000l, puzzle | 0xcb000000l, partsUsed | 0x80l);
19519:       if(!(puzzle & 0xd3000000l))
19520:         altDoSolve32(25, 0x2000000l, puzzle | 0xd3000000l, partsUsed | 0x80l);
19521:     altpiece8at24at32:
19522:       if (partsUsed & 0x200l) goto altpiece10at24at32;
19523:       if (!(puzzle & 0xd000000l)) {
19524:          if(!(puzzle & 0x9d000000l))
19525:            altDoSolve32(25, 0x2000000l, puzzle | 0x9d000000l, partsUsed | 0x200l);
19526:          if(!(puzzle & 0x3d000000l))
19527:            altDoSolve32(25, 0x2000000l, puzzle | 0x3d000000l, partsUsed | 0x200l);
19528:          if(!(puzzle & 0x4f000000l))
19529:            altDoSolve32(25, 0x2000000l, puzzle | 0x4f000000l, partsUsed | 0x200l);
19530:          if(!(puzzle & 0xcd000000l))
19531:            altDoSolve32(25, 0x2000000l, puzzle | 0xcd000000l, partsUsed | 0x200l);
19532:       }
19533:       if(!(puzzle & 0x79000000l))
19534:         altDoSolve32(25, 0x2000000l, puzzle | 0x79000000l, partsUsed | 0x200l);
19535:     altpiece10at24at32:
19536:       if (partsUsed & 0x400l) goto altpiece11at24at32;
19537:       if (!(puzzle & 0x19000000l)) {
19538:          if(!(puzzle & 0x5b000000l))
19539:            altDoSolve32(25, 0x2000000l, puzzle | 0x5b000000l, partsUsed | 0x400l);
19540:          if(!(puzzle & 0x9b000000l))
19541:            altDoSolve32(25, 0x2000000l, puzzle | 0x9b000000l, partsUsed | 0x400l);
19542:          if(!(puzzle & 0xd9000000l))
19543:            altDoSolve32(25, 0x2000000l, puzzle | 0xd9000000l, partsUsed | 0x400l);
19544:       }
19545:       if(!(puzzle & 0x1f000000l))
19546:         altDoSolve32(25, 0x2000000l, puzzle | 0x1f000000l, partsUsed | 0x400l);
19547:       if(!(puzzle & 0x6d000000l))
19548:         altDoSolve32(25, 0x2000000l, puzzle | 0x6d000000l, partsUsed | 0x400l);
19549:     altpiece11at24at32:
19550:     break;
19551:    case 25:
19552:       if (partsUsed & 0x2l) goto altpiece2at25at32;
19553:       if(!(puzzle & 0x7a000000l))
19554:         altDoSolve32(26, 0x4000000l, puzzle | 0x7a000000l, partsUsed | 0x2l);
19555:     altpiece2at25at32:
19556:       if (partsUsed & 0x4l) goto altpiece3at25at32;
19557:       if(!(puzzle & 0x9e000000l))
19558:         altDoSolve32(26, 0x4000000l, puzzle | 0x9e000000l, partsUsed | 0x4l);
19559:     altpiece3at25at32:
19560:       if (partsUsed & 0x8l) goto altpiece4at25at32;
19561:       if(!(puzzle & 0x3e000000l))
19562:         altDoSolve32(26, 0x4000000l, puzzle | 0x3e000000l, partsUsed | 0x8l);
19563:     altpiece4at25at32:
19564:       if (partsUsed & 0x200l) goto altpiece10at25at32;
19565:       if(!(puzzle & 0x5e000000l))
19566:         altDoSolve32(26, 0x4000000l, puzzle | 0x5e000000l, partsUsed | 0x200l);
19567:     altpiece10at25at32:
19568:       if (partsUsed & 0x400l) goto altpiece11at25at32;
19569:       if(!(puzzle & 0xda000000l))
19570:         altDoSolve32(26, 0x4000000l, puzzle | 0xda000000l, partsUsed | 0x400l);
19571:     altpiece11at25at32:
19572:     break;
19573:    case 26:
19574:       if (partsUsed & 0x80l) goto altpiece8at26at32;
19575:       if(!(puzzle & 0xbc000000l))
19576:         altDoSolve32(27, 0x8000000l, puzzle | 0xbc000000l, partsUsed | 0x80l);
19577:       if(!(puzzle & 0xf4000000l))
19578:         altDoSolve32(27, 0x8000000l, puzzle | 0xf4000000l, partsUsed | 0x80l);
19579:     altpiece8at26at32:
19580:       if (partsUsed & 0x400l) goto altpiece11at26at32;
19581:       if (!(puzzle & 0x4c000000l)) {
19582:          if(!(puzzle & 0xdc000000l))
19583:            altDoSolve32(27, 0x8000000l, puzzle | 0xdc000000l, partsUsed | 0x400l);
19584:          if(!(puzzle & 0x7c000000l))
19585:            altDoSolve32(27, 0x8000000l, puzzle | 0x7c000000l, partsUsed | 0x400l);
19586:          if(!(puzzle & 0xec000000l))
19587:            altDoSolve32(27, 0x8000000l, puzzle | 0xec000000l, partsUsed | 0x400l);
19588:       }
19589:     altpiece11at26at32:
19590:     break;
19591:    case 27:
19592:       if (partsUsed & 0x400l) goto altpiece11at27at32;
19593:       if(!(puzzle & 0xf8000000l))
19594:         altDoSolve32(28, 0x10000000l, puzzle | 0xf8000000l, partsUsed | 0x400l);
19595:     altpiece11at27at32:
19596:     break;
19597:   }
19598: }
19599: 
19600: