#include <bits/stdc++.h>
using namespace std;
const int N = 300010;
int n, m, t, cnt, a[N], tmp[N], topo[N], used[N];
vector<int> g[N];
bool cmp(const int &t1, const int &t2) { return a[t1] < a[t2]; }
bool dfs(int x) {
  used[x] = 1;
  for (int i = 0; i < g[x].size(); i++) {
    if (used[g[x][i]] == 1) {
      return true;
    } else if (!used[g[x][i]] && dfs(g[x][i])) {
      return true;
    }
  }
  used[x] = 2;
  if (x < m) {
    topo[cnt++] = x;
  }
  return false;
}
int main() {
  int i, j, len;
  scanf("%d %d", &n, &m);
  t = m;
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      scanf("%d", &a[j]);
      tmp[j] = j;
    }
    sort(tmp, tmp + m, cmp);
    for (j = 0; j < m && a[tmp[j]] == -1; j++)
      ;
    t++;
    for (; j < m; j += len, t++) {
      for (len = 0; len + j < m && a[tmp[j]] == a[tmp[j + len]]; len++) {
        g[t - 1].push_back(tmp[j + len]);
        g[tmp[j + len]].push_back(t);
      }
    }
  }
  cnt = 0;
  memset(used, 0, sizeof(used));
  for (int i = 0; i < t; i++) {
    if (!used[i] && dfs(i)) {
      puts("-1");
      return 0;
    }
  }
  for (int i = m - 1; i >= 0; i--) {
    printf("%d ", topo[i] + 1);
  }
  puts("");
  return 0;
}
