func_code_string: #include <bits/stdc++.h>   using namespace std;   FILE *in;   FILE *out;   int n, m, k;   char a[64][64];   int blocks[64][64];   int cell[64 * 64][2];   int dyn[64 * 64][4][2];   int dir[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};   void fill(int row, int col, int color) {     blocks[row][col] = color;     for (int i = 0; i < 4; i++) {       int nrow = row + dir[i][0];       if (nrow < 0 || nrow >= n) continue;       int ncol = col + dir[i][1];       if (ncol < 0 || ncol >= m) continue;       if (a[row][col] == a[nrow][ncol] && blocks[nrow][ncol] == -1)         fill(nrow, ncol, color);     }   }   void getBlocks() {     int nextColor = 0;     memset(blocks, -1, sizeof(blocks));     for (int i = 0; i < n; i++) {       for (int c = 0; c < m; c++) {         if (a[i][c] !=  0  && blocks[i][c] == -1) {           fill(i, c, nextColor);           cell[nextColor][0] = i;           cell[nextColor][1] = c;           nextColor++;         }       }     }   }   int main(void) {     in = stdin;     out = stdout;     fscanf(in,  %d %d , &n, &k);     for (int i = 0; i < n; i++) fscanf(in,  %s , a[i]);     m = (int)strlen(a[0]);     getBlocks();     memset(dyn, -1, sizeof(dyn));     int rem = k, cur = 0;     int bp = 0, dp = 1, cp = 0;     int foundCycle = 0;     while (rem) {       rem--;       cur++;       if (!foundCycle && dyn[bp][dp][cp] != -1) {         foundCycle = 1;         rem %= (cur - dyn[bp][dp][cp]);       }       dyn[bp][dp][cp] = cur;       int row = cell[bp][0], col = cell[bp][1];       while (1) {         int nrow = row + dir[dp][0];         if (nrow < 0 || nrow >= n) break;         int ncol = col + dir[dp][1];         if (ncol < 0 || ncol >= m) break;         if (a[nrow][ncol] != a[row][col]) break;         row = nrow;         col = ncol;       }       int dd = (cp ? ((dp + 1) % 4) : ((dp + 3) % 4));       while (1) {         int nrow = row + dir[dd][0];         if (nrow < 0 || nrow >= n) break;         int ncol = col + dir[dd][1];         if (ncol < 0 || ncol >= m) break;         if (a[nrow][ncol] != a[row][col]) break;         row = nrow;         col = ncol;       }       int nrow = row + dir[dp][0];       int ncol = col + dir[dp][1];       if (nrow >= 0 && nrow < n && ncol >= 0 && ncol < m &&           a[nrow][ncol] !=  0 ) {         bp = blocks[nrow][ncol];         continue;       }       if (cp == 0)         cp = 1;       else {         cp = 0;         dp = (dp + 1) % 4;       }     }     fprintf(out,  %c n , a[cell[bp][0]][cell[bp][1]]);     return 0;   }   