| 332 | } |
| 333 | |
| 334 | private String search() { |
| 335 | for (length1 = isRecovery ? length1 : 0; length1 < sol; length1++) { |
| 336 | maxDep2 = Math.min(12, sol - length1); |
| 337 | for (urfIdx = isRecovery ? urfIdx : 0; urfIdx < 6; urfIdx++) { |
| 338 | if ((conjMask & (1 << urfIdx)) != 0) { |
| 339 | continue; |
| 340 | } |
| 341 | for (preIdx = isRecovery ? preIdx : 0; preIdx < PRE_IDX_MAX; preIdx++) { |
| 342 | if (preIdx != 0 && preIdx % 2 == 0) { |
| 343 | // assert (twist[urfIdx][preIdx] == twist[urfIdx][preIdx - 1] |
| 344 | // && flip[urfIdx][preIdx] == flip[urfIdx][preIdx - 1] |
| 345 | // && (slice[urfIdx][preIdx] & 0x1ff) == (slice[urfIdx][preIdx - 1] & 0x1ff)); |
| 346 | continue; |
| 347 | } |
| 348 | depth1 = length1 - (preIdx == 0 ? 0 : 1); |
| 349 | if ((prun[urfIdx][preIdx] <= depth1) && |
| 350 | phase1(twist[urfIdx][preIdx] >> 3, twist[urfIdx][preIdx] & 7, |
| 351 | flip[urfIdx][preIdx] >> 3, flip[urfIdx][preIdx] & 7, |
| 352 | slice[urfIdx][preIdx] & 0x1ff, prun[urfIdx][preIdx], depth1, -1) == 0) { |
| 353 | return solution == null ? "Error 8" : solution; |
| 354 | } |
| 355 | } |
| 356 | } |
| 357 | } |
| 358 | return solution == null ? "Error 7" : solution; |
| 359 | } |
| 360 | |
| 361 | /** |
| 362 | * @return |