func_code_string: #include <bits/stdc++.h>   using namespace std;   ifstream fin( in.in );   ofstream fout( out.out );   const int N = 1e5 + 10;   int n, m, erased[N], cnt[N], rem[N];   vector<int> a[N], v[N];   deque<vector<int> > ind[N];   queue<int> q;   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     cin >> n >> m;     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         int x;         cin >> x;         a[i].push_back(x);         if (x != -1)           v[i].push_back(x);         else           erased[j]++;       }       sort(v[i].begin(), v[i].end());       v[i].resize(unique(v[i].begin(), v[i].end()) - v[i].begin());       vector<int> vec;       for (int j = 0; j < v[i].size(); j++) ind[i].push_back(vec);       for (int j = 0; j < m; j++)         if (a[i][j] != -1)           ind[i][lower_bound(v[i].begin(), v[i].end(), a[i][j]) - v[i].begin()]               .push_back(j);     }     vector<int> res;     for (int i = 0; i < m; i++)       if (erased[i] == n) res.push_back(i + 1);     while (res.size() < m) {       for (int i = 0; i < n; i++) {         if (rem[i] || ind[i].empty()) continue;         rem[i] = ind[i][0].size();         for (int j = 0; j < ind[i][0].size(); j++) {           int k = ind[i][0][j];           cnt[k]++;           if (cnt[k] == n - erased[k]) q.push(k);         }         ind[i].pop_front();       }       if (q.empty()) break;       while (!q.empty()) {         int j = q.front();         q.pop();         res.push_back(j + 1);         for (int i = 0; i < n; i++)           if (a[i][j] != -1) rem[i]--;       }     }     if (res.size() < m)       cout << -1;     else       for (int i = 0; i < res.size(); i++) cout << res[i] <<    ;     return 0;   }   