#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:128000000")
inline void imp() {
  printf("-1\n");
  exit(0);
}
const int MAXN = 505;
const int MAXM = 100005;
int n, m;
vector<vector<int> > a;
vector<vector<pair<int, int> > > b;
vector<vector<pair<int, int> > > c;
char g[MAXN][MAXN];
int e[MAXN];
int ans[MAXM];
priority_queue<pair<int, int>, vector<pair<int, int> >,
               greater<pair<int, int> > >
    q;
int val[MAXM];
int lnk[MAXN];
int lnk2[MAXN];
char was[MAXM];
inline void init() {
  scanf("%d%d", &n, &m);
  a.resize(n);
  for (int i = 0; i < n; ++i) {
    a[i].resize(m);
    for (int j = 0; j < m; ++j) scanf("%d", &a[i][j]);
  }
}
inline void solveM() {
  memset(e, 0, sizeof e);
  memset(g, 0, sizeof g);
  for (int i = 0; i < m; ++i)
    for (int j = i + 1; j < m; ++j) {
      int oki = 0, okj = 0;
      for (int t = 0; t < n; ++t) {
        if (a[t][i] == -1 || a[t][j] == -1) continue;
        if (a[t][i] < a[t][j]) oki = 1;
        if (a[t][i] > a[t][j]) okj = 1;
      }
      if (oki && okj) imp();
      if (!oki && !okj) continue;
      if (oki) {
        ++e[j];
        g[i][j] = 1;
      } else {
        ++e[i];
        g[j][i] = 1;
      }
    }
  for (int t = 0; t < m; ++t) {
    int fnd = 0;
    for (int i = 0; i < m; ++i) {
      if (e[i]) continue;
      fnd = 1;
      e[i] = -1;
      ans[t] = i;
      for (int j = 0; j < m; ++j) {
        if (g[i][j]) --e[j];
      }
      break;
    }
    if (!fnd) imp();
  }
  for (int i = 0; i < m; ++i) printf("%d ", ans[i] + 1);
  printf("\n");
  exit(0);
}
inline void solveN() {
  c.resize(n);
  b.resize(n);
  for (int i = 0; i < m; ++i) val[i] = n;
  for (int t = 0; t < n; ++t) {
    lnk[t] = 0;
    lnk2[t] = 0;
    c[t].clear();
    b[t].clear();
    for (int i = 0; i < m; ++i) {
      if (a[t][i] != -1)
        c[t].push_back(pair<int, int>(a[t][i], i));
      else
        --val[i];
    }
    sort(c[t].begin(), c[t].end());
    int K = (int)c[t].size();
    for (int i = 0; i < K;) {
      int j = i + 1;
      while (j < K && c[t][j].first == c[t][i].first) ++j;
      b[t].push_back(pair<int, int>(c[t][i].first, j - i));
      i = j;
    }
    if (!K) continue;
    for (int j = 0; j < b[t][0].second; ++j) --val[c[t][j].second];
  }
  for (int i = 0; i < m; ++i) q.push(pair<int, int>(val[i], i));
  memset(was, 0, sizeof was);
  int l = 0;
  while (!q.empty()) {
    pair<int, int> cur = q.top();
    q.pop();
    int x = cur.second;
    if (was[x]) continue;
    if (cur.first) imp();
    was[x] = 1;
    ans[l++] = x;
    for (int t = 0; t < n; ++t) {
      if (a[t][x] == -1) continue;
      --b[t][lnk[t]].second;
      if (!b[t][lnk[t]].second) {
        int K = (int)c[t].size();
        ++lnk[t];
        int i = lnk2[t] + 1;
        while (i < K && c[t][i].first == a[t][x]) ++i;
        lnk2[t] = i;
        if (lnk2[t] < K) {
          int ind = lnk2[t];
          for (int j = ind; j < K; ++j) {
            if (c[t][j].first != c[t][ind].first) break;
            int y = c[t][j].second;
            --val[y];
            q.push(pair<int, int>(val[y], y));
          }
        }
      }
    }
  }
  for (int i = 0; i < m; ++i) printf("%d ", ans[i] + 1);
  printf("\n");
  exit(0);
}
int main() {
  init();
  if (m < 405) solveM();
  solveN();
  return 0;
}
