func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /STACK:60000000 )   using namespace std;   const long double eps = 1e-9;   const int inf = (1 << 30) - 1;   const long long inf64 = ((long long)1 << 62) - 1;   const long double pi = 3.1415926535897932384626433832795;   template <class T>   T sqr(T x) {     return x * x;   }   int n, m, k;   vector<pair<int, int> > a;   vector<int> g[300500];   int u[300500];   vector<int> q;   void go(int v) {     u[v] = 1;     for (int i = 0; i < (int)(g[v].size()); i++)       if (u[g[v][i]] == 0)         go(g[v][i]);       else if (u[g[v][i]] == 1) {         cout << -1 << endl;         exit(0);       }     u[v] = 2;     q.push_back(v);   }   int main() {     cin >> n >> m;     k = m;     for (int i = 0; i < (int)(n); i++) {       a.clear();       for (int j = 0; j < (int)(m); j++) {         int x;         scanf( %d , &x);         if (x != -1) a.push_back(make_pair(x, j));       }       sort(a.begin(), a.end());       if (a.size() == 0) continue;       int l = 0;       int r = l;       while (r + 1 < (int)a.size() && a[r + 1].first == a[l].first) r++;       while (r + 1 < (int)a.size()) {         int l2 = r + 1;         int r2 = l2;         while (r2 + 1 < (int)a.size() && a[r2 + 1].first == a[l2].first) r2++;         for (int j = l; j <= r; j++) g[a[j].second].push_back(k);         for (int j = l2; j <= r2; j++) g[k].push_back(a[j].second);         k++;         l = l2;         r = r2;       }     }     memset(u, 0, sizeof(u));     q.clear();     for (int i = 0; i < (int)(m); i++)       if (!u[i]) go(i);     for (int i = (int)(q.size()) - 1; i >= 0; i--)       if (q[i] < m) printf( %d  , q[i] + 1);     cout << endl;     return 0;   }   