#include <bits/stdc++.h>
using namespace std;
template <typename A, typename B>
inline void chmin(A &a, B b) {
  if (a > b) a = b;
}
template <typename A, typename B>
inline void chmax(A &a, B b) {
  if (a < b) a = b;
}
signed main() {
  long long H, W;
  cin >> H >> W;
  vector<vector<long long> > A(H, vector<long long>(W));
  for (long long i = 0; i < (H); i++)
    for (long long j = 0; j < (W); j++) cin >> A[i][j];
  vector<vector<long long> > G(W);
  for (long long i = 0; i < (H); i++) {
    vector<pair<long long, long long> > v;
    for (long long j = 0; j < (W); j++)
      if (A[i][j] != -1) v.push_back({A[i][j], j});
    sort((v).begin(), (v).end());
    long long cur = 0;
    while (cur < v.size()) {
      long long nex = cur;
      while (nex < v.size() && v[cur].first == v[nex].first) nex++;
      G.push_back(vector<long long>());
      for (long long j = cur; j < nex; j++) {
        if (cur != 0) G[v[j].second].push_back(G.size() - 2);
        G[G.size() - 1].push_back(v[j].second);
      }
      cur = nex;
    }
  }
  queue<long long> que;
  vector<long long> deg(G.size());
  for (long long i = 0; i < (G.size()); i++)
    for (auto u : G[i]) deg[u]++;
  for (long long i = 0; i < (G.size()); i++)
    if (deg[i] == 0) que.push(i);
  vector<long long> ans;
  while (que.size()) {
    long long v = que.front();
    que.pop();
    if (v < W) ans.push_back(v);
    for (auto u : G[v]) {
      if (--deg[u] == 0) que.push(u);
    }
  }
  if (ans.size() != W)
    cout << -1 << endl;
  else {
    reverse((ans).begin(), (ans).end());
    for (long long i = 0; i < (W); i++) cout << ans[i] + 1 << " ";
    cout << endl;
  }
  return 0;
}
