#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> gg[100010];
vector<int> o;
int x;
vector<int> amici[10 * 100010];
int y;
int top[10 * 100010];
bool aperto[10 * 100010];
bool chiuso[10 * 100010];
bool compare(int i, int j) {
  if (gg[x][i] < gg[x][j]) return true;
  return false;
}
bool top_sort(int v) {
  if (aperto[v] and chiuso[v]) return true;
  if (aperto[v] and !chiuso[v]) return false;
  aperto[v] = true;
  int k = 0;
  for (int i = 0; i < int(amici[v].size()); i++) {
    int a = amici[v][i];
    if (!top_sort(a)) return false;
    k = max(k, top[a] + 1);
  }
  top[v] = k;
  chiuso[v] = true;
  return true;
}
bool compareFINALE(int i, int j) {
  if (top[i] > top[j]) return true;
  return false;
}
int main() {
  cin >> n >> m;
  y = m;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      int a;
      cin >> a;
      gg[i].push_back(a);
    }
  for (int i = 0; i < m; i++) o.push_back(i);
  for (int i = 0; i < n; i++) {
    x = i;
    sort(o.begin(), o.end(), compare);
    for (int j = 0; j < m; j++) {
      int a = o[j], b = o[(j + 1) % m];
      if (gg[i][a] == -1) continue;
      amici[y].push_back(a);
      amici[a].push_back(y + 1);
      if (j == m - 1) continue;
      if (gg[i][a] != gg[i][b]) y++;
    }
    y += 2;
  }
  bool no = false;
  for (int i = 0; i < m; i++)
    if (!chiuso[i] and !top_sort(i)) no = true;
  if (no)
    cout << -1 << endl;
  else {
    vector<int> res;
    for (int i = 0; i < m; i++) res.push_back(i);
    sort(res.begin(), res.end(), compareFINALE);
    for (int i = 0; i < m; i++) cout << res[i] + 1 << " ";
    cout << endl;
  }
}
