/*
プログラミングのお題スレ Part13
https://m...content-available-to-author-only...h.net/test/read.cgi/tech/1549160513/
746デフォルトの名無しさん2019/03/21(木) 13:37:55.15ID:p+hkSRzH
お題
長方形の盤で左上から上下左右に一マスずつ移動して全てのマスを
辿る。
移動の順番を表した数字を向きと終点を表す文字(↑↓←→★、
上下左右終、UDLRG、^V<>Gなど)に変換する。
入力
1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11
出力
↓→→↓
→↑↓←
↓←→↓
★↑←←
直線部に矢印
↓┌→┐
└┘┌┘
┌┐└┐
★└←┘
*/
#include <stdio.h>
#include <stdlib.h>
enum{
NONE,
UP, // ↑ (UP)
DW, // ↓ (DOWN)
RR, // → (Right)
LL, // ← (Left)
LT, // ┌ (Left Top)
LB, // └ (Left Bottom)
RT, // ┐ (Right Top)
RB, // ┘ (Right Bottom)
GL, // ★ (Goal)
IDT // \n (Indention)
};
void code_print(int n){
switch(n){
case NONE
: printf("■"); break; case IDT
: puts(""); break; default: break;
}
}
int *num_step(int *ret, int *src, int row, int col){
int i;
int idtcol = col+1;
int goal_num;
for(i = 1, goal_num = src[0]; i < row * col; i++){
if(goal_num < src[i]){
goal_num = src[i];
}
}
for(i = 1; i <= row; i++){
ret[idtcol * i - 1] = IDT;
}
int prev, cur;
int cur_x = 0;
int cur_y = 0;
int prev_x = 0;
int prev_y = 0;
int next_num;
for(i = 0; i < row * col; i++){
if(src[cur_y * col + cur_x] == goal_num){
ret[cur_y * idtcol + cur_x] = GL;
break;
}
prev_y = cur_y;
prev_x = cur_x;
next_num = src[cur_y * col + cur_x] + 1;
if( (cur_y != row - 1) && (src[(cur_y + 1) * col + cur_x] == next_num) ){
cur = DW;
cur_y++;
}
else if( (cur_y != 0) && (src[(cur_y - 1) * col + cur_x] == next_num) ){
cur = UP;
cur_y--;
}
else if( (cur_x != col - 1) && (src[cur_y * col + cur_x + 1] == next_num) ){
cur = RR;
cur_x++;
}
else if( (cur_x != 0) && (src[cur_y * col + cur_x - 1] == next_num) ){
cur = LL;
cur_x--;
}
else{
break;
}
if(i != 0){
int temp = -1;
if( (prev == UP && cur == RR) || (prev == LL && cur == DW) ){ //LT
temp = LT;
}
else if( (prev == DW && cur == RR) || (prev == LL && cur == UP) ){ //LB
temp = LB;
}
else if( (prev == UP && cur == LL) || (prev == RR && cur == DW) ){ //RT
temp = RT;
}
else if( (prev == DW && cur == LL) || (prev == RR && cur == UP) ){ //RB
temp = RB;
}
if(temp != -1){
ret[prev_y * idtcol + prev_x] = temp;
}
else{
ret[prev_y * idtcol + prev_x] = cur;
}
}
else{
ret[prev_y * idtcol + prev_x] = cur;
}
prev = cur;
}
return(ret);
}
void run(int *src, int row, int col){
int i, j;
int len = row * (col + 1);
int *ret
= (int *)calloc(len
, sizeof(int)); num_step(ret, src, row, col);
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
printf("%d ", src
[i
* col
+ j
]); }
}
for(i = 0; i < len; i++){
code_print(ret[i]);
}
}
int main(void){
int input0[]={1,4,5,6,
2,3,8,7,
15,14,9,10,
16,13,12,11};
int input1[] = {1,0,0,0,0,0,0,0,93,94,0,0,0,0,0,0,0,0,0,0,173,174,175,176,177,178,179,180,181,182,0,0,0,0,0,272,273,0,0,0,0,0,0,0,0,0,0,374,375,376,377,
2,3,0,0,0,0,0,0,92,95,0,0,0,0,0,0,0,0,0,0,172,171,170,169,168,167,166,185,184,183,0,0,0,0,0,271,274,0,0,0,0,0,0,0,0,0,0,373,0,0,378,
0,4,5,6,0,0,0,0,91,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,164,165,186,0,0,0,0,0,0,0,270,275,0,0,364,365,366,367,368,369,370,371,372,0,0,379,
0,0,8,7,0,0,0,0,90,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,163,188,187,0,0,0,0,0,0,0,269,276,0,0,363,362,361,360,359,358,357,384,383,382,381,380,
0,0,9,10,0,0,0,0,89,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,161,162,189,0,0,0,0,0,0,0,0,268,277,0,0,0,0,0,0,0,0,356,385,0,0,0,0,
0,0,12,11,0,0,0,0,88,99,100,0,0,0,0,0,0,0,0,0,0,0,0,0,160,191,190,0,0,0,0,0,0,0,0,267,278,0,0,0,0,0,0,0,0,355,386,0,0,0,0,
0,0,13,14,0,69,69,70,87,86,101,104,105,0,0,0,0,0,0,0,0,0,155,156,159,192,195,196,199,200,203,204,0,0,0,266,279,0,0,348,349,350,351,352,353,354,387,388,389,390,391,
0,0,16,15,0,67,68,71,72,85,102,103,106,0,0,0,0,0,0,0,0,0,154,157,158,193,194,197,198,201,202,205,206,263,264,265,280,0,0,347,346,345,344,343,342,341,396,395,394,393,392,
0,0,17,0,65,66,0,0,73,84,0,0,107,108,0,0,0,0,0,0,151,152,153,0,0,0,0,0,0,0,0,0,207,262,0,282,281,0,0,0,0,0,0,0,0,340,397,0,0,0,0,
0,0,18,63,64,0,0,0,74,83,0,0,0,109,110,0,0,0,0,0,150,0,0,0,0,0,0,0,0,0,0,0,208,261,0,283,284,0,0,0,0,0,0,0,0,339,398,0,0,0,0,
0,0,19,62,0,0,0,0,75,82,0,0,0,0,111,114,115,0,147,148,149,0,0,0,0,0,0,0,0,0,0,0,209,260,0,286,285,0,0,0,0,0,0,0,0,338,399,0,0,0,0,
0,21,20,61,0,0,0,0,76,81,0,0,0,0,112,113,116,0,146,0,0,0,0,0,0,0,0,0,0,0,0,0,210,259,0,287,288,0,0,0,0,0,0,0,0,337,400,0,0,0,0,
23,22,0,60,59,0,0,0,77,80,0,0,0,0,0,0,117,144,145,0,0,0,0,0,0,0,0,0,0,0,0,0,211,258,0,290,289,0,0,0,0,0,0,0,0,336,401,0,0,0,0,
24,25,0,0,58,57,0,0,78,79,0,0,0,0,0,0,118,143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212,257,0,291,292,0,0,0,0,0,0,0,0,335,402,0,0,0,0,
27,26,0,0,55,56,51,50,0,0,0,0,0,0,123,122,119,142,0,0,0,0,229,228,225,224,0,0,0,0,0,0,213,256,0,294,293,0,0,0,0,330,331,332,333,334,403,0,0,0,0,
28,29,0,0,54,53,52,49,0,0,0,0,0,125,124,121,120,141,0,0,0,231,230,227,226,223,222,0,0,0,0,215,214,255,0,295,296,0,0,0,0,329,328,327,326,325,404,0,0,0,0,
31,30,0,0,0,0,47,48,0,0,0,0,127,126,0,0,139,140,0,0,233,232,0,0,0,0,221,220,219,218,217,216,253,254,0,298,297,0,0,310,311,0,0,0,0,324,405,408,409,0,0,
32,33,0,0,0,0,46,45,0,0,0,0,128,129,0,0,138,137,0,0,234,235,0,0,0,0,246,247,248,249,250,251,252,0,0,299,300,0,308,309,312,0,0,0,0,323,406,407,410,411,0,
0,34,35,38,39,42,43,44,0,0,0,0,0,130,131,134,135,136,0,0,0,236,237,240,241,244,245,0,0,0,0,0,0,0,0,302,301,306,307,0,313,314,317,318,321,322,0,0,0,412,413,
0,0,36,37,40,41,0,0,0,0,0,0,0,0,132,133,0,0,0,0,0,0,238,239,242,243,0,0,0,0,0,0,0,0,0,303,304,305,0,0,0,315,316,319,320,0,0,0,0,415,414};
run(input0, 4, 4);
run(input1, 20, 51);
return 0;
}
LyoKICDjg5fjg63jgrDjg6njg5/jg7PjgrDjga7jgYrpoYzjgrnjg6wgUGFydDEzCiAgaHR0cHM6Ly9tLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5oLm5ldC90ZXN0L3JlYWQuY2dpL3RlY2gvMTU0OTE2MDUxMy8KCiAgNzQ244OH44OV44Kp44Or44OI44Gu5ZCN54Sh44GX44GV44KTMjAxOS8wMy8yMSjmnKgpIDEzOjM3OjU1LjE1SUQ6cCtoa1NSekgKICDjgYrpoYwgCiAg6ZW35pa55b2i44Gu55uk44Gn5bem5LiK44GL44KJ5LiK5LiL5bem5Y+z44Gr5LiA44Oe44K544Ga44Gk56e75YuV44GX44Gm5YWo44Gm44Gu44Oe44K544KSIAogIOi+v+OCi+OAgiAKICDnp7vli5Xjga7poIbnlarjgpLooajjgZfjgZ/mlbDlrZfjgpLlkJHjgY3jgajntYLngrnjgpLooajjgZnmloflrZco4oaR4oaT4oaQ4oaS4piF44CBIAogIOS4iuS4i+W3puWPs+e1guOAgVVETFJH44CBXlY8Pkfjgarjgakp44Gr5aSJ5o+b44GZ44KL44CCIAoKICDlhaXlipsgCiAgMSA0IDUgNiAKICAyIDMgOCA3IAogIDE1IDE0IDkgMTAgCiAgMTYgMTMgMTIgMTEgCgogIOWHuuWKmyAKICDihpPihpLihpLihpMgCiAg4oaS4oaR4oaT4oaQIAogIOKGk+KGkOKGkuKGkyAKICDimIXihpHihpDihpAKCgrnm7Tnt5rpg6jjgavnn6LljbAgCuKGk+KUjOKGkuKUkCAK4pSU4pSY4pSM4pSYIArilIzilJDilJTilJAgCuKYheKUlOKGkOKUmCAKKi8KCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CgplbnVtewogIE5PTkUsIAogIFVQLCAgLy8g4oaRIChVUCkKICBEVywgIC8vIOKGkyAoRE9XTikKICBSUiwgIC8vIOKGkiAoUmlnaHQpCiAgTEwsICAvLyDihpAgKExlZnQpCiAgTFQsICAvLyDilIwgKExlZnQgVG9wKQogIExCLCAgLy8g4pSUIChMZWZ0IEJvdHRvbSkKICBSVCwgIC8vIOKUkCAoUmlnaHQgVG9wKQogIFJCLCAgLy8g4pSYIChSaWdodCBCb3R0b20pCiAgR0wsICAvLyDimIUgKEdvYWwpCiAgSURUICAvLyBcbiAoSW5kZW50aW9uKQp9OwoKdm9pZCBjb2RlX3ByaW50KGludCBuKXsKICBzd2l0Y2gobil7CiAgY2FzZSBOT05FOiBwcmludGYoIuKWoCIpOyBicmVhazsKICBjYXNlIERXOiBwcmludGYoIuKGkyIpOyBicmVhazsKICBjYXNlIFVQOiBwcmludGYoIuKGkSIpOyBicmVhazsKICBjYXNlIFJSOiBwcmludGYoIuKGkiIpOyBicmVhazsKICBjYXNlIExMOiBwcmludGYoIuKGkCIpOyBicmVhazsKICBjYXNlIExUOiBwcmludGYoIuKUjCIpOyBicmVhazsKICBjYXNlIExCOiBwcmludGYoIuKUlCIpOyBicmVhazsKICBjYXNlIFJUOiBwcmludGYoIuKUkCIpOyBicmVhazsKICBjYXNlIFJCOiBwcmludGYoIuKUmCIpOyBicmVhazsKICBjYXNlIEdMOiBwcmludGYoIuKYhSIpOyBicmVhazsKICBjYXNlIElEVDogcHV0cygiIik7IGJyZWFrOwogIGRlZmF1bHQ6IGJyZWFrOwogIH0KfQoKaW50ICpudW1fc3RlcChpbnQgKnJldCwgaW50ICpzcmMsIGludCByb3csIGludCBjb2wpewogIGludCBpOwogIGludCBpZHRjb2wgPSBjb2wrMTsKICBpbnQgZ29hbF9udW07CiAgZm9yKGkgPSAxLCBnb2FsX251bSA9IHNyY1swXTsgaSA8IHJvdyAqIGNvbDsgaSsrKXsKICAgIGlmKGdvYWxfbnVtIDwgc3JjW2ldKXsKICAgICAgZ29hbF9udW0gPSBzcmNbaV07CiAgICB9CiAgfQogIGZvcihpID0gMTsgaSA8PSByb3c7IGkrKyl7CiAgICByZXRbaWR0Y29sICogaSAtIDFdID0gSURUOwogIH0KICBpbnQgcHJldiwgY3VyOwogIGludCBjdXJfeCA9IDA7CiAgaW50IGN1cl95ID0gMDsKICBpbnQgcHJldl94ID0gMDsKICBpbnQgcHJldl95ID0gMDsKICBpbnQgbmV4dF9udW07CiAgZm9yKGkgPSAwOyBpIDwgcm93ICogY29sOyBpKyspewogICAgaWYoc3JjW2N1cl95ICogY29sICsgY3VyX3hdID09IGdvYWxfbnVtKXsKICAgICAgcmV0W2N1cl95ICogaWR0Y29sICsgY3VyX3hdID0gR0w7CiAgICAgIGJyZWFrOwogICAgfQogICAgcHJldl95ID0gY3VyX3k7CiAgICBwcmV2X3ggPSBjdXJfeDsKICAgIG5leHRfbnVtID0gc3JjW2N1cl95ICogY29sICsgY3VyX3hdICsgMTsKICAgIGlmKCAoY3VyX3kgIT0gcm93IC0gMSkgJiYgKHNyY1soY3VyX3kgKyAxKSAqIGNvbCArIGN1cl94XSA9PSBuZXh0X251bSkgKXsKICAgICAgY3VyID0gRFc7CiAgICAgIGN1cl95Kys7CiAgICB9CiAgICBlbHNlIGlmKCAoY3VyX3kgIT0gMCkgJiYgKHNyY1soY3VyX3kgLSAxKSAqIGNvbCArIGN1cl94XSA9PSBuZXh0X251bSkgKXsKICAgICAgY3VyID0gVVA7CiAgICAgIGN1cl95LS07CiAgICB9CiAgICBlbHNlIGlmKCAoY3VyX3ggIT0gY29sIC0gMSkgJiYgKHNyY1tjdXJfeSAqIGNvbCArIGN1cl94ICsgMV0gPT0gbmV4dF9udW0pICl7CiAgICAgIGN1ciA9IFJSOwogICAgICBjdXJfeCsrOwogICAgfQogICAgZWxzZSBpZiggKGN1cl94ICE9IDApICYmIChzcmNbY3VyX3kgKiBjb2wgKyBjdXJfeCAtIDFdID09IG5leHRfbnVtKSApewogICAgICBjdXIgPSBMTDsKICAgICAgY3VyX3gtLTsKICAgIH0KICAgIGVsc2V7CiAgICAgIHByaW50ZigiRXJyb3IhXG4iKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBpZihpICE9IDApewogICAgICBpbnQgdGVtcCA9IC0xOwogICAgICBpZiggKHByZXYgPT0gVVAgJiYgY3VyID09IFJSKSB8fCAocHJldiA9PSBMTCAmJiBjdXIgPT0gRFcpICl7IC8vTFQKCXRlbXAgPSBMVDsKICAgICAgfQogICAgICBlbHNlIGlmKCAocHJldiA9PSBEVyAmJiBjdXIgPT0gUlIpIHx8IChwcmV2ID09IExMICYmIGN1ciA9PSBVUCkgKXsgLy9MQgoJdGVtcCA9IExCOwogICAgICB9CiAgICAgIGVsc2UgaWYoIChwcmV2ID09IFVQICYmIGN1ciA9PSBMTCkgfHwgKHByZXYgPT0gUlIgJiYgY3VyID09IERXKSApeyAvL1JUCgl0ZW1wID0gUlQ7CiAgICAgIH0KICAgICAgZWxzZSBpZiggKHByZXYgPT0gRFcgJiYgY3VyID09IExMKSB8fCAocHJldiA9PSBSUiAmJiBjdXIgPT0gVVApICl7IC8vUkIKICAJdGVtcCA9IFJCOwogICAgICB9CiAgICAgIGlmKHRlbXAgIT0gLTEpewoJcmV0W3ByZXZfeSAqIGlkdGNvbCArIHByZXZfeF0gPSB0ZW1wOwogICAgICB9CiAgICAgIGVsc2V7CglyZXRbcHJldl95ICogaWR0Y29sICsgcHJldl94XSA9IGN1cjsKICAgICAgfQogICAgfQogICAgZWxzZXsKICAgICAgcmV0W3ByZXZfeSAqIGlkdGNvbCArIHByZXZfeF0gPSBjdXI7CiAgICB9CiAgICBwcmV2ID0gY3VyOyAKICB9CiAgcmV0dXJuKHJldCk7Cn0KCnZvaWQgcnVuKGludCAqc3JjLCBpbnQgcm93LCBpbnQgY29sKXsKICBpbnQgaSwgajsKICBpbnQgbGVuID0gcm93ICogKGNvbCArIDEpOwogIGludCAqcmV0ID0gKGludCAqKWNhbGxvYyhsZW4sIHNpemVvZihpbnQpKTsKICBudW1fc3RlcChyZXQsIHNyYywgcm93LCBjb2wpOwogIHB1dHMoIklucHV0OiAiKTsKICBmb3IoaSA9IDA7IGkgPCByb3c7IGkrKyl7CiAgICBmb3IoaiA9IDA7IGogPCBjb2w7IGorKyl7CiAgICAgIHByaW50ZigiJWQgIiwgc3JjW2kgKiBjb2wgKyBqXSk7CiAgICB9CiAgICBwdXRzKCIiKTsgCiAgfQogIHB1dHMoIlxuT3V0cHV0OiIpOwogIGZvcihpID0gMDsgaSA8IGxlbjsgaSsrKXsKICAgIGNvZGVfcHJpbnQocmV0W2ldKTsKICB9CiAgZnJlZShyZXQpOwogIHB1dHMoIiIpOwp9CgppbnQgbWFpbih2b2lkKXsKICBpbnQgaW5wdXQwW109ezEsNCw1LDYsCgkJMiwzLDgsNywKCQkxNSwxNCw5LDEwLAoJCTE2LDEzLDEyLDExfTsKCQkKICBpbnQgaW5wdXQxW10gPSB7MSwwLDAsMCwwLDAsMCwwLDkzLDk0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDAsMCwwLDAsMCwyNzIsMjczLDAsMCwwLDAsMCwwLDAsMCwwLDAsMzc0LDM3NSwzNzYsMzc3LAoyLDMsMCwwLDAsMCwwLDAsOTIsOTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNzIsMTcxLDE3MCwxNjksMTY4LDE2NywxNjYsMTg1LDE4NCwxODMsMCwwLDAsMCwwLDI3MSwyNzQsMCwwLDAsMCwwLDAsMCwwLDAsMCwzNzMsMCwwLDM3OCwKMCw0LDUsNiwwLDAsMCwwLDkxLDk2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE2NCwxNjUsMTg2LDAsMCwwLDAsMCwwLDAsMjcwLDI3NSwwLDAsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMCwwLDM3OSwKMCwwLDgsNywwLDAsMCwwLDkwLDk3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE2MywxODgsMTg3LDAsMCwwLDAsMCwwLDAsMjY5LDI3NiwwLDAsMzYzLDM2MiwzNjEsMzYwLDM1OSwzNTgsMzU3LDM4NCwzODMsMzgyLDM4MSwzODAsCjAsMCw5LDEwLDAsMCwwLDAsODksOTgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE2MSwxNjIsMTg5LDAsMCwwLDAsMCwwLDAsMCwyNjgsMjc3LDAsMCwwLDAsMCwwLDAsMCwzNTYsMzg1LDAsMCwwLDAsCjAsMCwxMiwxMSwwLDAsMCwwLDg4LDk5LDEwMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE2MCwxOTEsMTkwLDAsMCwwLDAsMCwwLDAsMCwyNjcsMjc4LDAsMCwwLDAsMCwwLDAsMCwzNTUsMzg2LDAsMCwwLDAsCjAsMCwxMywxNCwwLDY5LDY5LDcwLDg3LDg2LDEwMSwxMDQsMTA1LDAsMCwwLDAsMCwwLDAsMCwwLDE1NSwxNTYsMTU5LDE5MiwxOTUsMTk2LDE5OSwyMDAsMjAzLDIwNCwwLDAsMCwyNjYsMjc5LDAsMCwzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzg3LDM4OCwzODksMzkwLDM5MSwKMCwwLDE2LDE1LDAsNjcsNjgsNzEsNzIsODUsMTAyLDEwMywxMDYsMCwwLDAsMCwwLDAsMCwwLDAsMTU0LDE1NywxNTgsMTkzLDE5NCwxOTcsMTk4LDIwMSwyMDIsMjA1LDIwNiwyNjMsMjY0LDI2NSwyODAsMCwwLDM0NywzNDYsMzQ1LDM0NCwzNDMsMzQyLDM0MSwzOTYsMzk1LDM5NCwzOTMsMzkyLAowLDAsMTcsMCw2NSw2NiwwLDAsNzMsODQsMCwwLDEwNywxMDgsMCwwLDAsMCwwLDAsMTUxLDE1MiwxNTMsMCwwLDAsMCwwLDAsMCwwLDAsMjA3LDI2MiwwLDI4MiwyODEsMCwwLDAsMCwwLDAsMCwwLDM0MCwzOTcsMCwwLDAsMCwKMCwwLDE4LDYzLDY0LDAsMCwwLDc0LDgzLDAsMCwwLDEwOSwxMTAsMCwwLDAsMCwwLDE1MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjA4LDI2MSwwLDI4MywyODQsMCwwLDAsMCwwLDAsMCwwLDMzOSwzOTgsMCwwLDAsMCwKMCwwLDE5LDYyLDAsMCwwLDAsNzUsODIsMCwwLDAsMCwxMTEsMTE0LDExNSwwLDE0NywxNDgsMTQ5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMDksMjYwLDAsMjg2LDI4NSwwLDAsMCwwLDAsMCwwLDAsMzM4LDM5OSwwLDAsMCwwLAowLDIxLDIwLDYxLDAsMCwwLDAsNzYsODEsMCwwLDAsMCwxMTIsMTEzLDExNiwwLDE0NiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIxMCwyNTksMCwyODcsMjg4LDAsMCwwLDAsMCwwLDAsMCwzMzcsNDAwLDAsMCwwLDAsCjIzLDIyLDAsNjAsNTksMCwwLDAsNzcsODAsMCwwLDAsMCwwLDAsMTE3LDE0NCwxNDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMTEsMjU4LDAsMjkwLDI4OSwwLDAsMCwwLDAsMCwwLDAsMzM2LDQwMSwwLDAsMCwwLAoyNCwyNSwwLDAsNTgsNTcsMCwwLDc4LDc5LDAsMCwwLDAsMCwwLDExOCwxNDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIxMiwyNTcsMCwyOTEsMjkyLDAsMCwwLDAsMCwwLDAsMCwzMzUsNDAyLDAsMCwwLDAsCjI3LDI2LDAsMCw1NSw1Niw1MSw1MCwwLDAsMCwwLDAsMCwxMjMsMTIyLDExOSwxNDIsMCwwLDAsMCwyMjksMjI4LDIyNSwyMjQsMCwwLDAsMCwwLDAsMjEzLDI1NiwwLDI5NCwyOTMsMCwwLDAsMCwzMzAsMzMxLDMzMiwzMzMsMzM0LDQwMywwLDAsMCwwLAoyOCwyOSwwLDAsNTQsNTMsNTIsNDksMCwwLDAsMCwwLDEyNSwxMjQsMTIxLDEyMCwxNDEsMCwwLDAsMjMxLDIzMCwyMjcsMjI2LDIyMywyMjIsMCwwLDAsMCwyMTUsMjE0LDI1NSwwLDI5NSwyOTYsMCwwLDAsMCwzMjksMzI4LDMyNywzMjYsMzI1LDQwNCwwLDAsMCwwLAozMSwzMCwwLDAsMCwwLDQ3LDQ4LDAsMCwwLDAsMTI3LDEyNiwwLDAsMTM5LDE0MCwwLDAsMjMzLDIzMiwwLDAsMCwwLDIyMSwyMjAsMjE5LDIxOCwyMTcsMjE2LDI1MywyNTQsMCwyOTgsMjk3LDAsMCwzMTAsMzExLDAsMCwwLDAsMzI0LDQwNSw0MDgsNDA5LDAsMCwKMzIsMzMsMCwwLDAsMCw0Niw0NSwwLDAsMCwwLDEyOCwxMjksMCwwLDEzOCwxMzcsMCwwLDIzNCwyMzUsMCwwLDAsMCwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMCwwLDI5OSwzMDAsMCwzMDgsMzA5LDMxMiwwLDAsMCwwLDMyMyw0MDYsNDA3LDQxMCw0MTEsMCwKMCwzNCwzNSwzOCwzOSw0Miw0Myw0NCwwLDAsMCwwLDAsMTMwLDEzMSwxMzQsMTM1LDEzNiwwLDAsMCwyMzYsMjM3LDI0MCwyNDEsMjQ0LDI0NSwwLDAsMCwwLDAsMCwwLDAsMzAyLDMwMSwzMDYsMzA3LDAsMzEzLDMxNCwzMTcsMzE4LDMyMSwzMjIsMCwwLDAsNDEyLDQxMywKMCwwLDM2LDM3LDQwLDQxLDAsMCwwLDAsMCwwLDAsMCwxMzIsMTMzLDAsMCwwLDAsMCwwLDIzOCwyMzksMjQyLDI0MywwLDAsMCwwLDAsMCwwLDAsMCwzMDMsMzA0LDMwNSwwLDAsMCwzMTUsMzE2LDMxOSwzMjAsMCwwLDAsMCw0MTUsNDE0fTsKCiAgcnVuKGlucHV0MCwgNCwgNCk7CiAgcnVuKGlucHV0MSwgMjAsIDUxKTsJCiAgcmV0dXJuIDA7Cn0=