func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2000 * 2000 + 1;   int n, m, mark[N], mx, rep;   string s;   vector<int> adj[N];   bool circle(int v) {     mark[v] = 1;     for (int i = 0; i < adj[v].size(); i++) {       int u = adj[v][i];       if (mark[u] == 1 || (!mark[u] && circle(u))) return true;     }     mark[v] = 2;     return false;   }   int dfs(int v) {     int res = 1;     for (int i = 0; i < adj[v].size(); i++) {       int u = adj[v][i], t = dfs(u);       res = max(res, t + 1);       if (t > mx)         mx = t, rep = false;       else if (t == mx)         rep = true;     }     return res;   }   int main() {     ios_base::sync_with_stdio(false);     cin >> n >> m;     for (int i = 0; i < n; i++) {       string t;       cin >> t;       s += t;     }     n *= m;     for (int i = 0; i < n; i++)       if (s[i] ==  ^ )         adj[i - m].push_back(i);       else if (s[i] ==  < )         adj[i - 1].push_back(i);       else if (s[i] ==  > )         adj[i + 1].push_back(i);       else if (s[i] ==  v )         adj[i + m].push_back(i);     for (int i = 0; i < n; i++)       if (circle(i)) {         cout << -1 <<   n ;         return 0;       }     fill(mark, mark + n, 0);     for (int i = 0; i < n; i++)       if (s[i] ==  # ) dfs(i);     cout << max(0, 2 * mx - !rep) <<   n ;     return 0;   }   