#include <bits/stdc++.h>
using namespace std;
const int INF = 2e9;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  vector<vector<pair<int, int> > > mat(n + 1, vector<pair<int, int> >(m + 1));
  vector<vector<int> > gr(3 * n * m + 7);
  vector<vector<int> > outNode(n + 1, vector<int>(m + 1)),
      inNode(n + 1, vector<int>(m + 1));
  vector<int> inGr(3 * n * m + 7);
  int cur = m;
  for (int i = 1; i <= n; ++i) {
    mat[i][0].first = -1;
    for (int j = 1; j <= m; ++j) {
      cin >> mat[i][j].first;
      mat[i][j].second = j;
      mat[i][j].first = (mat[i][j].first == -1 ? (INF) : (mat[i][j].first));
    }
    sort(mat[i].begin() + 1, mat[i].end());
    for (int j = 1; j <= m; ++j) {
      if (mat[i][j].first == INF) {
        break;
      }
      if (mat[i][j].first != mat[i][j - 1].first) {
        cur += 2;
      }
      inNode[i][j] = cur;
      outNode[i][j] = cur - 1;
      gr[mat[i][j].second].push_back(cur);
      gr[cur - 1].push_back(mat[i][j].second);
      ++inGr[cur];
      ++inGr[mat[i][j].second];
    }
    for (int j = 1; j <= m; ++j) {
      if (mat[i][j].first == INF) {
        break;
      }
      if (mat[i][j].first == mat[i][j - 1].first or mat[i][j - 1].first == -1) {
        continue;
      }
      gr[inNode[i][j]].push_back(outNode[i][j - 1]);
      ++inGr[outNode[i][j - 1]];
    }
  }
  queue<int> q;
  vector<int> ans;
  for (int i = 1; i <= cur; ++i) {
    if (inGr[i] == 0) {
      q.push(i);
    }
  }
  while (not q.empty()) {
    int cur = q.front();
    q.pop();
    if (cur <= m) {
      ans.push_back(cur);
    }
    for (int x : gr[cur]) {
      if (--inGr[x] == 0) {
        q.push(x);
      }
    }
  }
  if ((int)(ans).size() == m) {
    for (int i = (int)(ans).size() - 1; i >= 0; --i) {
      cout << ans[i] << ' ';
    }
  } else {
    cout << -1 << '\n';
  }
}
