#include <bits/stdc++.h>
using namespace std;
int n, m, top, tot, ans[100005], in[200005], rtx;
int col;
struct column {
  vector<int> a;
  int id;
  friend bool operator<(column X, column Y) { return X.a[col] < Y.a[col]; }
} empty;
vector<column> b;
vector<int> to[200005];
void toposort() {
  queue<int> que;
  for (int i = 0; i <= top; i++)
    if (in[i] == 0) {
      que.push(i);
      if (i < m) ans[++rtx] = i;
    }
  while (!que.empty()) {
    int cur = que.front();
    que.pop();
    tot++;
    for (int i = 0; i < to[cur].size(); i++) {
      in[to[cur][i]]--;
      if (in[to[cur][i]] == 0) {
        que.push(to[cur][i]);
        if (to[cur][i] < m) ans[++rtx] = to[cur][i];
      }
    }
  }
}
int main() {
  cin >> n >> m;
  top = m - 1;
  for (int i = 1; i <= m; i++) {
    b.push_back(empty);
    b[i - 1].id = i - 1;
  }
  for (int i = 1, x; i <= n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> x;
      b[j].a.push_back(x);
    }
  }
  for (int i = 0; i < n; i++) {
    col = i;
    sort(b.begin(), b.end());
    vector<pair<int, int> > con;
    for (int j = 0; j < m; j++)
      if (b[j].a[i] != -1) {
        int l = j;
        while (j < m - 1 && b[j + 1].a[i] == b[j].a[i]) j++;
        con.push_back(make_pair(l, j));
      }
    if (con.size() > 1)
      for (int j = 0; j < con.size(); j++) {
        if (j == 0) top++;
        if (j == con.size() - 1) {
          for (int k = con[j].first; k <= con[j].second; k++) {
            in[b[k].id]++;
            to[top].push_back(b[k].id);
          }
        } else {
          top++;
          for (int k = con[j].first; k <= con[j].second; k++) {
            in[top]++;
            in[b[k].id]++;
            to[b[k].id].push_back(top);
            to[top - 1].push_back(b[k].id);
          }
        }
      }
  }
  toposort();
  if (tot < top)
    cout << -1;
  else
    for (int i = 1; i <= m; i++) cout << ans[i] + 1 << " ";
}
