#include <bits/stdc++.h>
using namespace std;
int DEBUG = 0;
vector<int> edge[300010];
int inCnt[300010];
int main(int argc, char **argv) {
  DEBUG = (argc >= 2) ? atoi(argv[1]) : 0;
  int n, m;
  cin >> n >> m;
  int k = 0;
  for (int i = 0; i < n; i++) {
    vector<pair<int, int> > v;
    for (int j = 0; j < m; j++) {
      int a;
      cin >> a;
      if (a != -1) {
        v.push_back(make_pair(a, j));
      }
    }
    sort(v.begin(), v.end());
    for (int j = 0; j < int(v.size()); j++) {
      if (j == 0 || v[j].first != v[j - 1].first) k++;
      edge[m + k].push_back(v[j].second);
      edge[v[j].second].push_back(m + k + 1);
    }
    k++;
  }
  if (DEBUG) printf("m= %d, extra nodes k= %d\n", m, k);
  vector<int> perm;
  deque<int> que;
  for (int j = 0; j < m + k; j++)
    for (__typeof((edge[j]).begin()) it = (edge[j]).begin();
         it != (edge[j]).end(); it++)
      inCnt[*it]++;
  for (int j = 0; j < m + k; j++)
    if (inCnt[j] == 0) que.push_back(j);
  while (!que.empty()) {
    int top = que.front();
    que.pop_front();
    if (top < m) {
      perm.push_back(top);
    }
    for (__typeof((edge[top]).begin()) it = (edge[top]).begin();
         it != (edge[top]).end(); it++) {
      inCnt[*it]--;
      if (inCnt[*it] == 0) que.push_back(*it);
    }
  }
  if (int(perm.size()) < m) {
    cout << -1 << endl;
  } else {
    for (__typeof((perm).begin()) it = (perm).begin(); it != (perm).end();
         it++) {
      cout << (1 + *it) << " ";
    }
    cout << endl;
  }
  return 0;
}
