#include <bits/stdc++.h>
using namespace std;
const long long N = 400010;
inline long long read() {
  long long s = 0, w = 1;
  register char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
  return s * w;
}
long long n, m, head[N], maxE, tot, deg[N], ot[N], cnt;
struct Edge {
  long long nxt, to;
} e[N];
struct Node {
  long long w, id;
} p[N];
inline void Add(long long u, long long v) {
  e[++maxE].nxt = head[u];
  head[u] = maxE;
  e[maxE].to = v;
}
inline bool cp(Node x, Node y) { return x.w < y.w; }
inline void Topo() {
  queue<long long> Q;
  for (register long long i = 1; i <= tot; i++)
    if (!deg[i]) Q.push(i);
  while (!Q.empty()) {
    long long x = Q.front();
    Q.pop();
    if (x <= m) ot[++cnt] = x;
    for (register long long i = head[x]; i; i = e[i].nxt) {
      deg[e[i].to]--;
      if (!deg[e[i].to]) Q.push(e[i].to);
    }
  }
  if (m > cnt) {
    puts("-1");
    exit(0);
  }
  return;
}
signed main() {
  n = read(), m = read();
  tot = m;
  for (register long long i = 1; i <= n; tot++, i++) {
    for (register long long j = 1; j <= m; j++) p[j].w = read(), p[j].id = j;
    sort(p + 1, p + 1 + m, cp);
    for (register long long j = 1; j <= m; j++) {
      if (p[j].w == -1) continue;
      if (j == 1 || p[j].w ^ p[j - 1].w) tot++;
      Add(tot, p[j].id), Add(p[j].id, tot + 1);
      deg[p[j].id]++, deg[tot + 1]++;
    }
  }
  Topo();
  for (register long long i = 1; i <= m; i++) printf("%lld ", ot[i]);
  puts("");
  return 0;
}
