#include <bits/stdc++.h>
using namespace std;
class node {
 public:
  vector<int> near;
};
const int N = 100010;
node a[N];
int ind[N] = {0};
int main() {
  int m, n;
  cin >> m >> n;
  int nn = n;
  for (int i = 1; i <= m; i++) {
    vector<pair<int, int> > v;
    int x;
    for (int j = 1; j <= nn; j++) {
      scanf("%d", &x);
      if (x >= 0) v.push_back(pair<int, int>(x, j));
    }
    sort(v.begin(), v.end());
    int k = v.size();
    if (k <= 1) continue;
    v.push_back(pair<int, int>(v[k - 1].first + 1, 192));
    int idx = 0;
    for (int j = 0; j < k; j++) {
      if (v[j].first < v[j + 1].first) {
        if (idx != 0) {
          for (int l = idx; l <= j; l++) {
            a[n].near.push_back(v[l].second);
          }
        }
        if (j != k - 1) {
          n++;
          for (int l = idx; l <= j; l++) {
            a[v[l].second].near.push_back(n);
          }
        }
        idx = j + 1;
      }
    }
  }
  vector<int> res;
  for (int i = 1; i <= n; i++) {
    vector<int> v = a[i].near;
    for (int j = 0; j < v.size(); j++) ind[v[j]]++;
  }
  queue<int> q;
  for (int i = 1; i <= n; i++)
    if (ind[i] == 0) q.push(i);
  while (!q.empty()) {
    int x = q.front();
    res.push_back(x);
    q.pop();
    vector<int> v = a[x].near;
    for (int i = 0; i < v.size(); i++) {
      ind[v[i]]--;
      if (ind[v[i]] == 0) q.push(v[i]);
    }
  }
  if (res.size() != n) {
    cout << -1 << endl;
    return 0;
  }
  for (int i = 0; i < n; i++)
    if (res[i] <= nn) cout << res[i] << " ";
  cout << endl;
}
