func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1000 + 1;   char a[N][N];   int f[N * 2], head[1000001], vis[2 * N], d[N * 2], d1[N * 2], bj[N * 2];   int ask(int x) { return x == f[x] ? x : f[x] = ask(f[x]); }   struct node {     int next, to;   } e[N * N];   int tot;   void add(int x, int y) {     e[++tot].to = y;     e[tot].next = head[x];     head[x] = tot;   }   int cnt;   int solve() {     queue<int> q;     for (int i = 1; i <= cnt; i++) {       if (d[i] == 0) q.push(i);     }     while (!q.empty()) {       int p = q.front();       q.pop();       for (int i = head[p]; i; i = e[i].next) {         int u = e[i].to;         d[u]--;         if (d[u] == 0) q.push(u);       }     }     for (int i = 1; i <= cnt; i++)       if (d[i]) return 1;     return 0;   }   void dfs(int u, int w) {     bj[u] = w;     for (int i = head[u]; i; i = e[i].next) {       int v = e[i].to;       if (bj[v] < w + 1) dfs(v, w + 1);     }   }   void solve1() {     queue<int> q;     for (int i = 1; i <= cnt; i++)       if (!d1[i]) q.push(i), bj[i] = 1;     while (!q.empty()) {       int p = q.front();       q.pop();       for (int i = head[p]; i; i = e[i].next) {         int u = e[i].to;         d1[u]--;         bj[u] = max(bj[u], bj[p] + 1);         if (!d1[u]) q.push(u);       }     }   }   int main() {     ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);     int n, m;     cin >> n >> m;     for (int i = 1; i <= n + m; i++) f[i] = i;     for (int i = 1; i <= n; i++) {       cin >> a[i] + 1;     }     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= m; j++) {         int f1 = ask(i), f2 = ask(n + j);         if (a[i][j] !=  = ) {           if (f1 == f2) {             cout <<  No n ;             return 0;           }         } else {           f[f1] = f2;         }       }     }     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= m; j++) {         int f1 = ask(i), f2 = ask(n + j);         if (!vis[f1]) vis[f1] = ++cnt;         if (!vis[f2]) vis[f2] = ++cnt;         if (a[i][j] !=  = ) {           if (f1 == f2) {             cout <<  No n ;             return 0;           }           if (a[i][j] ==  < )             add(vis[f1], vis[f2]), d[vis[f2]]++, d1[vis[f2]]++;           else             add(vis[f2], vis[f1]), d[vis[f1]]++, d1[vis[f1]]++;         }       }     }     if (solve()) {       cout <<  No n ;       return 0;     }     solve1();     cout <<  Yes n ;     for (int i = 1; i <= n + m; i++) {       cout << bj[vis[ask(i)]] <<    ;       if (i == n) cout << endl;     }     return 0;   }   