func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 5005;   int id[maxn][maxn];   char s[maxn][maxn];   char c[maxn];   int l[maxn], r[maxn], u[maxn], d[maxn];   int n, m, t;   void init() {     int i, j;     for (i = 1; i <= n; i++) {       for (j = 1; j <= m; j++) {         l[id[i][j]] = id[i][j - 1];         r[id[i][j]] = id[i][j + 1];         u[id[i][j]] = id[i - 1][j];         d[id[i][j]] = id[i + 1][j];       }     }     for (i = 1; i <= n; i++) {       for (j = 1; j <= m; j++) {         if (s[i][j] ==  . ) {           r[l[id[i][j]]] = r[id[i][j]];           l[r[id[i][j]]] = l[id[i][j]];           u[d[id[i][j]]] = u[id[i][j]];           d[u[id[i][j]]] = d[id[i][j]];         }       }     }   }   void del(int k) {     r[l[k]] = r[k];     l[r[k]] = l[k];     u[d[k]] = u[k];     d[u[k]] = d[k];   }   int dfs(int cur) {     if (cur == 0) return 0;     del(cur);     if (c[cur] ==  U ) return dfs(u[cur]) + 1;     if (c[cur] ==  D ) return dfs(d[cur]) + 1;     if (c[cur] ==  L ) return dfs(l[cur]) + 1;     if (c[cur] ==  R ) return dfs(r[cur]) + 1;     return 0;   }   void work() {     int i, j;     int ans, max = 0, num;     for (i = 1; i <= n; i++) {       for (j = 1; j <= m; j++) {         if (s[i][j] !=  . ) {           init();           ans = dfs(id[i][j]);           if (ans > max) {             max = ans;             num = 1;           } else if (ans == max)             num++;         }       }     }     printf( %d %d n , max, num);   }   int main() {     int i, j;     while (scanf( %d%d , &n, &m) != EOF) {       for (i = 1; i <= n; i++) scanf( %s , &s[i][1]);       t = 0;       memset(id, 0, sizeof(id));       for (i = 1; i <= n; i++) {         for (j = 1; j <= m; j++) {           t++;           id[i][j] = t;           c[t] = s[i][j];         }       }       work();     }     return 0;   }   