#include <bits/stdc++.h>
const double Pi = 3.14159265;
const int N = 5e5 + 10;
const unsigned long long base = 163;
const int INF = 0x3f3f3f3f;
const long long mod = 1e9 + 7;
using namespace std;
int n, m;
int head[N], to[N], nx[N], tot = 0;
void add(int u, int v) {
  to[tot] = v;
  nx[tot] = head[u];
  head[u] = tot++;
}
int flag = 0;
int in[N];
bool vis[N];
int main() {
  scanf("%d%d", &n, &m);
  memset(head, -1, sizeof(head));
  vector<pair<int, int> > vec;
  int st = -1;
  int cnt = 1;
  for (int i = 1, x; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      scanf("%d", &x);
      vec.push_back({x, j});
    }
    sort(vec.begin(), vec.end());
    int pre = -1;
    for (int j = 0; j < vec.size(); ++j) {
      if (vec[j].first == -1) continue;
      int flag = 0;
      for (int k = j; k < vec.size(); k++) {
        if (vec[k].first == vec[j].first) {
          if (!flag) cnt++, flag = 1;
          add(vec[k].second, m + cnt), in[m + cnt]++;
          j = k;
          if (pre != -1) add(pre, vec[k].second), in[vec[k].second]++;
        } else
          break;
      }
      pre = m + cnt;
    }
    vec.clear();
  }
  queue<int> q;
  for (int i = 1; i <= m + cnt; ++i) {
    if (in[i] == 0) q.push(i);
  }
  vector<int> vc;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    vc.push_back(u);
    for (int i = head[u]; ~i; i = nx[i]) {
      int v = to[i];
      in[v]--;
      if (in[v] == 0) q.push(v);
    }
  }
  for (int i = 1; i <= m + cnt; ++i) {
    if (in[i] != 0) {
      return cout << -1, 0;
    }
  }
  for (auto it : vc) {
    if (it <= m) cout << it << " ", vis[it] = 1;
  }
  for (int i = 1; i <= m; i++) {
    if (vis[i]) continue;
    cout << i << " ";
  }
  return 0;
}
