#include <bits/stdc++.h>
using namespace std;
const int maxn = 100001;
int n, m, InDeg[maxn * 4], NV;
vector<int> out[maxn * 4], in[maxn * 4], List;
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  pair<int, int> cor[n + 10][m + 10];
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) cin >> cor[i][j].first, cor[i][j].second = j;
  NV = m;
  for (int i = 1; i <= n; i++) {
    NV++;
    sort(cor[i] + 1, cor[i] + m + 1);
    int p = 1;
    while (p <= m && cor[i][p].first == -1) p++;
    while (p <= m) {
      int v = cor[i][p].first;
      NV++;
      while (p <= m && cor[i][p].first == v)
        in[NV].push_back(cor[i][p].second), out[cor[i][p].second].push_back(NV),
            out[NV - 1].push_back(cor[i][p].second),
            in[cor[i][p].second].push_back(NV - 1), p++;
    }
  }
  queue<int> source;
  for (int i = 1; i <= NV; i++) {
    InDeg[i] = in[i].size();
    if (!InDeg[i]) source.push(i);
  }
  while (!source.empty()) {
    int top = source.front();
    source.pop();
    if (top <= m) List.push_back(top);
    for (auto u : out[top]) {
      InDeg[u]--;
      if (!InDeg[u]) source.push(u);
    }
  }
  if (List.size() != m) return cout << -1, 0;
  for (auto v : List) cout << v << " ";
  return 0;
}
