#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool Up(T &a, const T &b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool Down(T &a, const T &b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
inline int getus() {
  int tmp, c;
  while (tmp = fgetc(stdin), tmp < '0' || tmp > '9')
    ;
  tmp -= '0';
  while (c = fgetc(stdin), '0' <= c && c <= '9') tmp = tmp * 10 + c - '0';
  return tmp;
}
inline int getint() {
  int tmp, c, flag;
  while (flag = fgetc(stdin), flag != '-' && (flag < '0' || flag > '9'))
    ;
  if (flag == '-')
    tmp = 0;
  else
    tmp = flag - '0';
  while (c = fgetc(stdin), '0' <= c && c <= '9') tmp = tmp * 10 + c - '0';
  return flag == '-' ? -tmp : tmp;
}
struct enode {
  int to;
  enode *next;
} ebase[100221 << 1], *fir[100221 << 1], *etop = ebase;
typedef enode *edge;
int R, C, totC;
int G[100221], deg[100221 << 1], seq[100221];
pair<int, int> A[100221];
inline void addEdge(int a, int b) {
  etop->to = b;
  etop->next = fir[a];
  fir[a] = etop++;
  ++deg[b];
}
int main() {
  memset(fir, 0, sizeof(fir));
  memset(deg, 0, sizeof(deg));
  R = getus();
  totC = C = getus();
  for (int i = (0); i < (R); ++i) {
    for (int j = (0); j < (C); ++j)
      A[j] = pair<int, int>(G[((i)*C + (j))] = getint(), j);
    sort(A, A + C);
    int Left = 0, Right = 0;
    while (Right < C && A[Right].first == -1) ++Left, ++Right;
    while (Right + 1 < C && A[Right + 1].first == A[Left].first) ++Right;
    for (int nextL = Right + 1, nextR = Right + 1; nextR < C;
         Left = nextL, Right = nextR, nextL = nextR = Right + 1) {
      while (nextR + 1 < C && A[nextR + 1].first == A[nextL].first) ++nextR;
      if (Left == Right || nextL == nextR) {
        for (int x = (Left); x <= (Right); ++x)
          for (int y = (nextL); y <= (nextR); ++y)
            addEdge(A[x].second, A[y].second);
      } else {
        for (int itr = (Left); itr <= (Right); ++itr)
          addEdge(A[itr].second, totC);
        for (int itr = (nextL); itr <= (nextR); ++itr)
          addEdge(totC, A[itr].second);
        ++totC;
      }
    }
  }
  stack<int> Stack;
  int cnt = 0;
  for (int c = (0); c < (totC); ++c)
    if (!deg[c]) Stack.push(c);
  while (!Stack.empty()) {
    int x = Stack.top(), y;
    Stack.pop();
    if (x < C) seq[++cnt] = x;
    for (edge e(fir[x]); e; e = e->next)
      if (!--deg[y = e->to]) {
        Stack.push(y);
      }
  }
  assert(cnt <= C);
  if (cnt < C) {
    puts("-1");
    return 0;
  }
  for (int i = (1); i <= (C); ++i) {
    printf("%d", seq[i] + 1);
    if (i == C)
      puts("");
    else
      putchar(' ');
  }
  return 0;
}
