func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 3e5 + 5;   const int INF = 1e9;   vector<int> adj[MAXN], ts;   int tin[MAXN], en[MAXN], curt;   bool dag;   void dfs(int s, int p = -1) {     tin[s] = ++curt;     for (auto v : adj[s]) {       if (tin[v] && !en[v]) {         dag = false;         return;       }       if (!tin[v]) dfs(v, s);     }     en[s] = 1;     ts.push_back(s);   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     int n, m;     cin >> n >> m;     vector<int> v;     vector<vector<int>> g(n, vector<int>(m));     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         cin >> g[i][j];         if (g[i][j] > -1) v.push_back(g[i][j]);       }     }     map<int, int> to;     sort(v.begin(), v.end());     v.erase(unique(v.begin(), v.end()), v.end());     for (int i = 0; i < v.size(); i++) {       to[v[i]] = i;     }     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         if (g[i][j] > -1)           g[i][j] = to[g[i][j]];         else           g[i][j] = INF;       }     }     int cur = 0;     for (int i = 0; i < n; i++) {       vector<pair<int, int>> nums;       for (int j = 0; j < m; j++) nums.push_back({g[i][j], j});       sort(nums.begin(), nums.end());       cur += 2;       for (int j = 0; j < m; j++) {         auto p = nums[j];         if (p.first == INF) break;         if (j > 0 && nums[j].first != nums[j - 1].first) cur++;         adj[p.second].push_back(m + cur);         adj[m + cur - 1].push_back(p.second);       }     }     dag = true;     for (int i = 0; i < MAXN; i++)       if (!tin[i]) dfs(i);     if (!dag) {       cout <<  -1 n ;       return 0;     }     reverse(ts.begin(), ts.end());     for (auto x : ts)       if (x < m) cout << x + 1 <<    ;     cout <<   n ;   }   