#include <stdio.h>
typedef unsigned int uint;
static void
ban_hyouji (uint b)
{
for (int i = 0; i < 25; i++) {
if (b & (1 << i))
else
if (i % 5 == 4)
}
}
static uint
r0 (uint b)
{
return b;
}
static uint
r1 (uint b)
{
uint t;
t = ((b >> 3) & 0x00318c63) | ((b << 3) & 0x018c6318);
return ((t >> 1) & 0x0094a529) | ((t << 1) & 0x01294a52) | (b & 0x00421084);
}
static uint
r2 (uint b)
{
uint t;
t = ((b >> 15) & 0x000003ff) | ((b << 15) & 0x01ff8000);
return ((t >> 5) & 0x000f801f) | ((t << 5) & 0x01f003e0) | (b & 0x00007c00);
}
static uint
r3 (uint b)
{
return r2 (r1 (b));
}
static uint
r4 (uint b)
{
uint t;
t = (((b << 12) ^ b) & 0x00318000);
b ^= (t | (t >> 12));
t = (((b << 8) ^ b) & 0x00400400);
b ^= (t | (t >> 8));
t = (((b << 4) ^ b) & 0x00920920);
b ^= (t | (t >> 4));
return b;
}
static uint
r5 (uint b)
{
return r1 (r4 (b));
}
static uint
r6 (uint b)
{
return r2 (r4 (b));
}
static uint
r7 (uint b)
{
return r3 (r4 (b));
}
static int
p0 (int c)
{
return c;
}
static int
p1 (int c)
{
return (c / 5) * 5 + 4 - c % 5;
}
static int
p2 (int c)
{
return (4 - c / 5) * 5 + c % 5;
}
static int
p3 (int c)
{
return 24 - c;
}
static int
p4 (int c)
{
return c / 5 + (c % 5) * 5;
}
static int
p5 (int c)
{
return 4 - c / 5 + (c % 5) * 5;
}
static int
p6 (int c)
{
return c / 5 + (4 - c % 5) * 5;
}
static int
p7 (int c)
{
return 4 - c / 5 + (4 - c % 5) * 5;
}
static uint (*const ban_no_henkan[8]) (uint b) = {r0, r1, r2, r3, r4, r5, r6, r7};
static uint (*const ban_wo_motoni_modosu[8]) (uint b) = {r0, r1, r2, r3, r4, r6, r5, r7};
static int (*const masu_no_henkan[8]) (int c) = {p0, p1, p2, p3, p4, p5, p6, p7};
static int (*const masu_wo_motoni_modosu[8]) (int c) = {p0, p1, p2, p3, p4, p6, p5, p7};
static int ikkasyo_ni_matomerareta_ima_iru_masu[12];
static int ikkasyo_ni_matomerareta_hitotu_mae_no_masu[12];
static int ikkasyo_ni_matomerareta_genzai_iti_no_bangou[25][25];
static int masu_wo_ikkasyo_ni_motteiku_tame_ni_hituyouna_henkan_bangou[25][25];
static void
masu_wo_ikkasyo_ni_henkan_suru (int c, int f)
{
int i, r;
uint b, m;
static uint bp[12][2];
static int n;
b = (1 << c) | (1 << f);
for (r = 0, m = b, i = 1; i < 8; i++) {
if (ban_no_henkan[i] (b) < m) {
m = ban_no_henkan[i] (b);
r = i;
}
}
masu_wo_ikkasyo_ni_motteiku_tame_ni_hituyouna_henkan_bangou[c][f] = r;
b = ban_no_henkan[r] (1 << c);
for (i = 0; i < n; i++) {
if (m == bp[i][0] && b == bp[i][1])
break;
}
ikkasyo_ni_matomerareta_genzai_iti_no_bangou[c][f] = i;
if (i == n) {
bp[n][0] = m;
bp[n][1] = b;
ikkasyo_ni_matomerareta_ima_iru_masu[n] = masu_no_henkan[r] (c);
ikkasyo_ni_matomerareta_hitotu_mae_no_masu[n] = masu_no_henkan[r] (f);
n++;
}
}
static int ugokeru_masu[25][25][4];
static void
ugokeru_masu_wo_motomeru (int c, int f)
{
int i = 0;
if (c / 5 > 0 && c - 5 != f)
ugokeru_masu[c][f][i++] = c - 5;
if (c % 5 > 0 && c - 1 != f)
ugokeru_masu[c][f][i++] = c - 1;
if (c % 5 < 4 && c + 1 != f)
ugokeru_masu[c][f][i++] = c + 1;
if (c / 5 < 4 && c + 5 != f)
ugokeru_masu[c][f][i++] = c + 5;
ugokeru_masu[c][f][i] = -1;
}
static uint
idou_suru (uint b, int t)
{
return b ^ (1 << t);
}
unsigned char wr[12][33554432];
static void
solve_0 ()
{
int c, f, t, r, p;
uint b;
int i, j, k, l = 0, n;
for (i = 0; i < 12; i++)
wr[i][0] = 1;
do {
n = 0;
for (i = 0; i < 12; i++) {
c = ikkasyo_ni_matomerareta_ima_iru_masu[i];
f = ikkasyo_ni_matomerareta_hitotu_mae_no_masu[i];
for (j = 0; j < 33554432; j++) {
if (wr[i][j])
continue;
wr[i][j] = 255;
for (k = 0; k < 3; k++) {
if ((t = ugokeru_masu[c][f][k]) < 0)
break;
p = ikkasyo_ni_matomerareta_genzai_iti_no_bangou[t][c];
r = masu_wo_ikkasyo_ni_motteiku_tame_ni_hituyouna_henkan_bangou[t][c];
b = ban_no_henkan[r] (idou_suru (j, t));
if (wr[p][b] && wr[p][b] + 1 < wr[i][j])
wr[i][j] = wr[p][b] + 1;
}
if (wr[i][j] < 255)
n++;
else
wr[i][j] = 0;
}
}
} while (n);
}
static void
solve (uint b)
{
int c, f, t, r, p;
uint o;
int i, k, l, m, n = 0;
int min;
int henkan_rireki[128];
if (b == 0) {
ban_hyouji (b);
return;
}
b ^= 0x00100000;
ban_hyouji (b ^ 0x00100000);
r = (wr[0][ban_no_henkan[2] (b)] < wr[0][ban_no_henkan[5] (b)]) ? 2 : 5;
henkan_rireki[n++] = r;
b = ban_no_henkan[r] (b);
p = 0;
c = 1;
t = 0;
r = 0;
while (b) {
f = masu_no_henkan[r] (c);
c = masu_no_henkan[r] (t);
min = 255;
m = -1;
for (k = 0; k < 3; k++) {
if ((t = ugokeru_masu[c][f][k]) < 0)
break;
p = ikkasyo_ni_matomerareta_genzai_iti_no_bangou[t][c];
r = masu_wo_ikkasyo_ni_motteiku_tame_ni_hituyouna_henkan_bangou[t][c];
o = ban_no_henkan[r] (idou_suru (b, t));
if (wr[p][o] < min) {
min = wr[p][o];
m = t;
}
}
t = m;
b = idou_suru (b, t);
for (o = b, l = c, m = t, i = 0; i < n; i++) {
o = ban_wo_motoni_modosu[henkan_rireki[n - 1 - i]] (o);
l = masu_wo_motoni_modosu[henkan_rireki[n - 1 - i]] (l);
m = masu_wo_motoni_modosu[henkan_rireki[n - 1 - i]] (m);
}
printf ("%c", "U***L*R***D"[m
- l
+ 5]); r = masu_wo_ikkasyo_ni_motteiku_tame_ni_hituyouna_henkan_bangou[t][c];
henkan_rireki[n++] = r;
p = ikkasyo_ni_matomerareta_genzai_iti_no_bangou[t][c];
b = ban_no_henkan[r] (b);
}
}
int
main ()
{
int c;
for (c = 0; c < 25; c++) {
if (c / 5 > 0) {
masu_wo_ikkasyo_ni_henkan_suru (c, c - 5);
ugokeru_masu_wo_motomeru (c, c - 5);
}
if (c % 5 > 0) {
masu_wo_ikkasyo_ni_henkan_suru (c, c - 1);
ugokeru_masu_wo_motomeru (c, c - 1);
}
if (c % 5 < 4) {
masu_wo_ikkasyo_ni_henkan_suru (c, c + 1);
ugokeru_masu_wo_motomeru (c, c + 1);
}
if (c / 5 < 4) {
masu_wo_ikkasyo_ni_henkan_suru (c, c + 5);
ugokeru_masu_wo_motomeru (c, c + 5);
}
}
solve_0 ();
solve (0x00000000);
solve (0x00100000);
solve (0x00010000);
solve (0x00001000);
solve (0x00000100);
solve (0x00000010);
solve (0x01649451);
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwoKc3RhdGljIHZvaWQKYmFuX2h5b3VqaSAodWludCBiKQp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1OyBpKyspIHsKICAgICAgICBpZiAoYiAmICgxIDw8IGkpKQogICAgICAgICAgICBwcmludGYgKCIgeCIpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRmICgiIC0iKTsKICAgICAgICBpZiAoaSAlIDUgPT0gNCkKICAgICAgICAgICAgcHJpbnRmICgiXG4iKTsKICAgIH0KICAgIHByaW50ZiAoIlxuIik7Cn0KCnN0YXRpYyB1aW50CnIwICh1aW50IGIpCnsKICAgIHJldHVybiBiOwp9CgpzdGF0aWMgdWludApyMSAodWludCBiKQp7CiAgICB1aW50IHQ7CgogICAgdCA9ICgoYiA+PiAzKSAmIDB4MDAzMThjNjMpIHwgKChiIDw8IDMpICYgMHgwMThjNjMxOCk7CiAgICByZXR1cm4gKCh0ID4+IDEpICYgMHgwMDk0YTUyOSkgfCAoKHQgPDwgMSkgJiAweDAxMjk0YTUyKSB8IChiICYgMHgwMDQyMTA4NCk7Cn0KCnN0YXRpYyB1aW50CnIyICh1aW50IGIpCnsKICAgIHVpbnQgdDsKCiAgICB0ID0gKChiID4+IDE1KSAmIDB4MDAwMDAzZmYpIHwgKChiIDw8IDE1KSAmIDB4MDFmZjgwMDApOwogICAgcmV0dXJuICgodCA+PiA1KSAmIDB4MDAwZjgwMWYpIHwgKCh0IDw8IDUpICYgMHgwMWYwMDNlMCkgfCAoYiAmIDB4MDAwMDdjMDApOwp9CgpzdGF0aWMgdWludApyMyAodWludCBiKQp7CiAgICByZXR1cm4gcjIgKHIxIChiKSk7Cn0KCnN0YXRpYyB1aW50CnI0ICh1aW50IGIpCnsKICAgIHVpbnQgdDsKCiAgICB0ID0gKCgoYiA8PCAxMikgXiBiKSAmIDB4MDAzMTgwMDApOwogICAgYiBePSAodCB8ICh0ID4+IDEyKSk7CiAgICB0ID0gKCgoYiA8PCA4KSBeIGIpICYgMHgwMDQwMDQwMCk7CiAgICBiIF49ICh0IHwgKHQgPj4gOCkpOwogICAgdCA9ICgoKGIgPDwgNCkgXiBiKSAmIDB4MDA5MjA5MjApOwogICAgYiBePSAodCB8ICh0ID4+IDQpKTsKCiAgICByZXR1cm4gYjsKfQoKc3RhdGljIHVpbnQKcjUgKHVpbnQgYikKewogICAgcmV0dXJuIHIxIChyNCAoYikpOwp9CgpzdGF0aWMgdWludApyNiAodWludCBiKQp7CiAgICByZXR1cm4gcjIgKHI0IChiKSk7Cn0KCnN0YXRpYyB1aW50CnI3ICh1aW50IGIpCnsKICAgIHJldHVybiByMyAocjQgKGIpKTsKfQoKc3RhdGljIGludApwMCAoaW50IGMpCnsKICAgIHJldHVybiBjOwp9CgpzdGF0aWMgaW50CnAxIChpbnQgYykKewogICAgcmV0dXJuIChjIC8gNSkgKiA1ICsgNCAtIGMgJSA1Owp9CgpzdGF0aWMgaW50CnAyIChpbnQgYykKewogICAgcmV0dXJuICg0IC0gYyAvIDUpICogNSArIGMgJSA1Owp9CgpzdGF0aWMgaW50CnAzIChpbnQgYykKewogICAgcmV0dXJuIDI0IC0gYzsKfQoKc3RhdGljIGludApwNCAoaW50IGMpCnsKICAgIHJldHVybiBjIC8gNSArIChjICUgNSkgKiA1Owp9CgpzdGF0aWMgaW50CnA1IChpbnQgYykKewogICAgcmV0dXJuIDQgLSBjIC8gNSArIChjICUgNSkgKiA1Owp9CgpzdGF0aWMgaW50CnA2IChpbnQgYykKewogICAgcmV0dXJuIGMgLyA1ICsgKDQgLSBjICUgNSkgKiA1Owp9CgpzdGF0aWMgaW50CnA3IChpbnQgYykKewogICAgcmV0dXJuIDQgLSBjIC8gNSArICg0IC0gYyAlIDUpICogNTsKfQoKc3RhdGljIHVpbnQgKCpjb25zdCBiYW5fbm9faGVua2FuWzhdKSAodWludCBiKSA9IHtyMCwgcjEsIHIyLCByMywgcjQsIHI1LCByNiwgcjd9OwpzdGF0aWMgdWludCAoKmNvbnN0IGJhbl93b19tb3RvbmlfbW9kb3N1WzhdKSAodWludCBiKSA9IHtyMCwgcjEsIHIyLCByMywgcjQsIHI2LCByNSwgcjd9OwpzdGF0aWMgaW50ICgqY29uc3QgbWFzdV9ub19oZW5rYW5bOF0pIChpbnQgYykgPSB7cDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3fTsKc3RhdGljIGludCAoKmNvbnN0IG1hc3Vfd29fbW90b25pX21vZG9zdVs4XSkgKGludCBjKSA9IHtwMCwgcDEsIHAyLCBwMywgcDQsIHA2LCBwNSwgcDd9OwoKc3RhdGljIGludCBpa2thc3lvX25pX21hdG9tZXJhcmV0YV9pbWFfaXJ1X21hc3VbMTJdOwpzdGF0aWMgaW50IGlra2FzeW9fbmlfbWF0b21lcmFyZXRhX2hpdG90dV9tYWVfbm9fbWFzdVsxMl07CgpzdGF0aWMgaW50IGlra2FzeW9fbmlfbWF0b21lcmFyZXRhX2dlbnphaV9pdGlfbm9fYmFuZ291WzI1XVsyNV07CnN0YXRpYyBpbnQgbWFzdV93b19pa2thc3lvX25pX21vdHRlaWt1X3RhbWVfbmlfaGl0dXlvdW5hX2hlbmthbl9iYW5nb3VbMjVdWzI1XTsKCnN0YXRpYyB2b2lkCm1hc3Vfd29faWtrYXN5b19uaV9oZW5rYW5fc3VydSAoaW50IGMsIGludCBmKQp7CiAgICBpbnQgaSwgcjsKICAgIHVpbnQgYiwgbTsKICAgIHN0YXRpYyB1aW50IGJwWzEyXVsyXTsKICAgIHN0YXRpYyBpbnQgbjsKCiAgICBiID0gKDEgPDwgYykgfCAoMSA8PCBmKTsKICAgIGZvciAociA9IDAsIG0gPSBiLCBpID0gMTsgaSA8IDg7IGkrKykgewogICAgICAgIGlmIChiYW5fbm9faGVua2FuW2ldIChiKSA8IG0pIHsKICAgICAgICAgICAgbSA9IGJhbl9ub19oZW5rYW5baV0gKGIpOwogICAgICAgICAgICByID0gaTsKICAgICAgICB9CiAgICB9CiAgICBtYXN1X3dvX2lra2FzeW9fbmlfbW90dGVpa3VfdGFtZV9uaV9oaXR1eW91bmFfaGVua2FuX2JhbmdvdVtjXVtmXSA9IHI7CgogICAgYiA9IGJhbl9ub19oZW5rYW5bcl0gKDEgPDwgYyk7CiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgaWYgKG0gPT0gYnBbaV1bMF0gJiYgYiA9PSBicFtpXVsxXSkKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpa2thc3lvX25pX21hdG9tZXJhcmV0YV9nZW56YWlfaXRpX25vX2JhbmdvdVtjXVtmXSA9IGk7CgogICAgaWYgKGkgPT0gbikgewogICAgICAgIGJwW25dWzBdID0gbTsKICAgICAgICBicFtuXVsxXSA9IGI7CiAgICAgICAgaWtrYXN5b19uaV9tYXRvbWVyYXJldGFfaW1hX2lydV9tYXN1W25dID0gbWFzdV9ub19oZW5rYW5bcl0gKGMpOwogICAgICAgIGlra2FzeW9fbmlfbWF0b21lcmFyZXRhX2hpdG90dV9tYWVfbm9fbWFzdVtuXSA9IG1hc3Vfbm9faGVua2FuW3JdIChmKTsKICAgICAgICBuKys7CiAgICB9Cn0KCnN0YXRpYyBpbnQgdWdva2VydV9tYXN1WzI1XVsyNV1bNF07CgpzdGF0aWMgdm9pZAp1Z29rZXJ1X21hc3Vfd29fbW90b21lcnUgKGludCBjLCBpbnQgZikKewogICAgaW50IGkgPSAwOwoKICAgIGlmIChjIC8gNSA+IDAgJiYgYyAtIDUgIT0gZikKICAgICAgICB1Z29rZXJ1X21hc3VbY11bZl1baSsrXSA9IGMgLSA1OwogICAgaWYgKGMgJSA1ID4gMCAmJiBjIC0gMSAhPSBmKQogICAgICAgIHVnb2tlcnVfbWFzdVtjXVtmXVtpKytdID0gYyAtIDE7CiAgICBpZiAoYyAlIDUgPCA0ICYmIGMgKyAxICE9IGYpCiAgICAgICAgdWdva2VydV9tYXN1W2NdW2ZdW2krK10gPSBjICsgMTsKICAgIGlmIChjIC8gNSA8IDQgJiYgYyArIDUgIT0gZikKICAgICAgICB1Z29rZXJ1X21hc3VbY11bZl1baSsrXSA9IGMgKyA1OwogICAgdWdva2VydV9tYXN1W2NdW2ZdW2ldID0gLTE7Cn0KCnN0YXRpYyB1aW50Cmlkb3Vfc3VydSAodWludCBiLCBpbnQgdCkKewogICAgcmV0dXJuIGIgXiAoMSA8PCB0KTsKfQoKdW5zaWduZWQgY2hhciB3clsxMl1bMzM1NTQ0MzJdOwoKc3RhdGljIHZvaWQKc29sdmVfMCAoKQp7CiAgICBpbnQgYywgZiwgdCwgciwgcDsKICAgIHVpbnQgYjsKICAgIGludCBpLCBqLCBrLCBsID0gMCwgbjsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykKICAgICAgICB3cltpXVswXSA9IDE7CiAgICBkbyB7CiAgICAgICAgbiA9IDA7CiAgICAgICAgcHJpbnRmICgiJWRcbiIsIGwrKyk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKICAgICAgICAgICAgYyA9IGlra2FzeW9fbmlfbWF0b21lcmFyZXRhX2ltYV9pcnVfbWFzdVtpXTsKICAgICAgICAgICAgZiA9IGlra2FzeW9fbmlfbWF0b21lcmFyZXRhX2hpdG90dV9tYWVfbm9fbWFzdVtpXTsKICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDMzNTU0NDMyOyBqKyspIHsKICAgICAgICAgICAgICAgIGlmICh3cltpXVtqXSkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIHdyW2ldW2pdID0gMjU1OwogICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IDM7IGsrKykgewogICAgICAgICAgICAgICAgICAgIGlmICgodCA9IHVnb2tlcnVfbWFzdVtjXVtmXVtrXSkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBwID0gaWtrYXN5b19uaV9tYXRvbWVyYXJldGFfZ2VuemFpX2l0aV9ub19iYW5nb3VbdF1bY107CiAgICAgICAgICAgICAgICAgICAgciA9IG1hc3Vfd29faWtrYXN5b19uaV9tb3R0ZWlrdV90YW1lX25pX2hpdHV5b3VuYV9oZW5rYW5fYmFuZ291W3RdW2NdOwogICAgICAgICAgICAgICAgICAgIGIgPSBiYW5fbm9faGVua2FuW3JdIChpZG91X3N1cnUgKGosIHQpKTsKICAgICAgICAgICAgICAgICAgICBpZiAod3JbcF1bYl0gJiYgd3JbcF1bYl0gKyAxIDwgd3JbaV1bal0pCiAgICAgICAgICAgICAgICAgICAgICAgIHdyW2ldW2pdID0gd3JbcF1bYl0gKyAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHdyW2ldW2pdIDwgMjU1KQogICAgICAgICAgICAgICAgICAgIG4rKzsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB3cltpXVtqXSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcHJpbnRmICgiJWRcbiIsIG4pOwogICAgfSB3aGlsZSAobik7Cn0KCnN0YXRpYyB2b2lkCnNvbHZlICh1aW50IGIpCnsKICAgIGludCBjLCBmLCB0LCByLCBwOwogICAgdWludCBvOwogICAgaW50IGksIGssIGwsIG0sIG4gPSAwOwogICAgaW50IG1pbjsKICAgIGludCBoZW5rYW5fcmlyZWtpWzEyOF07CgogICAgaWYgKGIgPT0gMCkgewogICAgICAgIGJhbl9oeW91amkgKGIpOwogICAgICAgIHByaW50ZiAoIiAlZFxuXG4iLCBuKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgYiBePSAweDAwMTAwMDAwOwogICAgYmFuX2h5b3VqaSAoYiBeIDB4MDAxMDAwMDApOwogICAgcHJpbnRmICgiUiIpOwoKICAgIHIgPSAod3JbMF1bYmFuX25vX2hlbmthblsyXSAoYildIDwgd3JbMF1bYmFuX25vX2hlbmthbls1XSAoYildKSA/IDIgOiA1OwogICAgaGVua2FuX3JpcmVraVtuKytdID0gcjsKICAgIGIgPSBiYW5fbm9faGVua2FuW3JdIChiKTsKCiAgICBwID0gMDsKICAgIGMgPSAxOwogICAgdCA9IDA7CiAgICByID0gMDsKCiAgICB3aGlsZSAoYikgewogICAgICAgIGYgPSBtYXN1X25vX2hlbmthbltyXSAoYyk7CiAgICAgICAgYyA9IG1hc3Vfbm9faGVua2FuW3JdICh0KTsKICAgICAgICBtaW4gPSAyNTU7CiAgICAgICAgbSA9IC0xOwogICAgICAgIGZvciAoayA9IDA7IGsgPCAzOyBrKyspIHsKICAgICAgICAgICAgaWYgKCh0ID0gdWdva2VydV9tYXN1W2NdW2ZdW2tdKSA8IDApCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgcCA9IGlra2FzeW9fbmlfbWF0b21lcmFyZXRhX2dlbnphaV9pdGlfbm9fYmFuZ291W3RdW2NdOwogICAgICAgICAgICByID0gbWFzdV93b19pa2thc3lvX25pX21vdHRlaWt1X3RhbWVfbmlfaGl0dXlvdW5hX2hlbmthbl9iYW5nb3VbdF1bY107CiAgICAgICAgICAgIG8gPSBiYW5fbm9faGVua2FuW3JdIChpZG91X3N1cnUgKGIsIHQpKTsKICAgICAgICAgICAgaWYgKHdyW3BdW29dIDwgbWluKSB7CiAgICAgICAgICAgICAgICBtaW4gPSB3cltwXVtvXTsKICAgICAgICAgICAgICAgIG0gPSB0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHQgPSBtOwogICAgICAgIGIgPSBpZG91X3N1cnUgKGIsIHQpOwogICAgICAgIGZvciAobyA9IGIsIGwgPSBjLCBtID0gdCwgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgbyA9IGJhbl93b19tb3RvbmlfbW9kb3N1W2hlbmthbl9yaXJla2lbbiAtIDEgLSBpXV0gKG8pOwogICAgICAgICAgICBsID0gbWFzdV93b19tb3RvbmlfbW9kb3N1W2hlbmthbl9yaXJla2lbbiAtIDEgLSBpXV0gKGwpOwogICAgICAgICAgICBtID0gbWFzdV93b19tb3RvbmlfbW9kb3N1W2hlbmthbl9yaXJla2lbbiAtIDEgLSBpXV0gKG0pOwogICAgICAgIH0KICAgICAgICBwcmludGYgKCIlYyIsICJVKioqTCpSKioqRCJbbSAtIGwgKyA1XSk7CiAgICAgICAgciA9IG1hc3Vfd29faWtrYXN5b19uaV9tb3R0ZWlrdV90YW1lX25pX2hpdHV5b3VuYV9oZW5rYW5fYmFuZ291W3RdW2NdOwogICAgICAgIGhlbmthbl9yaXJla2lbbisrXSA9IHI7CiAgICAgICAgcCA9IGlra2FzeW9fbmlfbWF0b21lcmFyZXRhX2dlbnphaV9pdGlfbm9fYmFuZ291W3RdW2NdOwogICAgICAgIGIgPSBiYW5fbm9faGVua2FuW3JdIChiKTsKICAgIH0KICAgIHByaW50ZiAoIiAlZFxuXG4iLCBuKTsKfQoKaW50Cm1haW4gKCkKewogICAgaW50IGM7CgogICAgZm9yIChjID0gMDsgYyA8IDI1OyBjKyspIHsKICAgICAgICBpZiAoYyAvIDUgPiAwKSB7CiAgICAgICAgICAgIG1hc3Vfd29faWtrYXN5b19uaV9oZW5rYW5fc3VydSAoYywgYyAtIDUpOwogICAgICAgICAgICB1Z29rZXJ1X21hc3Vfd29fbW90b21lcnUgKGMsIGMgLSA1KTsKICAgICAgICB9CiAgICAgICAgaWYgKGMgJSA1ID4gMCkgewogICAgICAgICAgICBtYXN1X3dvX2lra2FzeW9fbmlfaGVua2FuX3N1cnUgKGMsIGMgLSAxKTsKICAgICAgICAgICAgdWdva2VydV9tYXN1X3dvX21vdG9tZXJ1IChjLCBjIC0gMSk7CiAgICAgICAgfQogICAgICAgIGlmIChjICUgNSA8IDQpIHsKICAgICAgICAgICAgbWFzdV93b19pa2thc3lvX25pX2hlbmthbl9zdXJ1IChjLCBjICsgMSk7CiAgICAgICAgICAgIHVnb2tlcnVfbWFzdV93b19tb3RvbWVydSAoYywgYyArIDEpOwogICAgICAgIH0KICAgICAgICBpZiAoYyAvIDUgPCA0KSB7CiAgICAgICAgICAgIG1hc3Vfd29faWtrYXN5b19uaV9oZW5rYW5fc3VydSAoYywgYyArIDUpOwogICAgICAgICAgICB1Z29rZXJ1X21hc3Vfd29fbW90b21lcnUgKGMsIGMgKyA1KTsKICAgICAgICB9CiAgICB9CgogICAgc29sdmVfMCAoKTsKCiAgICBzb2x2ZSAoMHgwMDAwMDAwMCk7CiAgICBzb2x2ZSAoMHgwMDEwMDAwMCk7CiAgICBzb2x2ZSAoMHgwMDAxMDAwMCk7CiAgICBzb2x2ZSAoMHgwMDAwMTAwMCk7CiAgICBzb2x2ZSAoMHgwMDAwMDEwMCk7CiAgICBzb2x2ZSAoMHgwMDAwMDAxMCk7CiAgICBzb2x2ZSAoMHgwMTY0OTQ1MSk7Cn0K