#include <bits/stdc++.h>
using namespace std;
const int N = 123456;
int n, m, e;
pair<int, int> a[N];
vector<int> dfn;
vector<int> g[N];
bool vis[N];
vector<vector<int> > b;
int visit[N];
void dfs(int x) {
  vector<int> dfs_node;
  vis[x] = true;
  dfs_node.push_back(x);
  while (!dfs_node.empty()) {
    const int u(dfs_node.back());
    if (visit[u] < (int)g[u].size()) {
      const int v(g[u][visit[u]++]);
      if (vis[v]) continue;
      vis[v] = true;
      dfs_node.push_back(v);
    } else
      dfs_node.pop_back(), dfn.push_back(u);
  }
}
bool valid(vector<int> order) {
  for (int i = 0; i < n; i++) {
    int mx = -1;
    for (int j = 0; j < m; j++) {
      if (b[i][order[j]] != -1 && b[i][order[j]] < mx) {
        return false;
      }
      mx = max(mx, b[i][order[j]]);
    }
  }
  return true;
}
int main() {
  scanf("%d%d", &n, &m);
  b.resize(n);
  e = m;
  for (int i = 0; i < n; i++) {
    b[i].resize(m);
    for (int j = 0; j < m; j++) {
      scanf("%d", &b[i][j]);
      a[j].first = b[i][j];
      a[j].second = j;
    }
    sort(a, a + m);
    vector<int> in;
    vector<int> out;
    int j = 0;
    while (j < m) {
      int r = j;
      while (r + 1 < m && a[r].first == a[r + 1].first) {
        r++;
      }
      if (a[j].first == -1) {
        j = r + 1;
        continue;
      }
      in.push_back(e++);
      out.push_back(e++);
      for (int q = j; q <= r; q++) {
        g[in.back()].push_back(a[q].second);
        g[a[q].second].push_back(out.back());
      }
      j = r + 1;
    }
    for (int i = 0; i < (int)in.size() - 1; i++) {
      g[out[i]].push_back(in[i + 1]);
    }
  }
  for (int i = 0; i < e; i++) {
    if (!vis[i]) {
      dfs(i);
    }
  }
  vector<int> order;
  reverse(dfn.begin(), dfn.end());
  for (int i = 0; i < e; i++) {
    if (dfn[i] < m) {
      order.push_back(dfn[i]);
    }
  }
  if (valid(order)) {
    for (int i = 0; i < m; i++) {
      printf("%d ", order[i] + 1);
    }
    puts("");
  } else {
    puts("-1");
  }
  return 0;
}
