#include <bits/stdc++.h>
using namespace std;
int pivot, N, M;
vector<vector<int> > m;
struct comp {
  bool operator()(const int& a, const int& b) const {
    if (m[pivot][a] == m[pivot][b]) return a < b;
    return m[pivot][a] < m[pivot][b];
  }
};
vector<set<int, comp> > s, t;
vector<int> u;
set<int> tmp, pre;
int main(int argc, char const* argv[]) {
  cin >> N >> M;
  s = vector<set<int, comp> >(N);
  t = vector<set<int, comp> >(N);
  u = vector<int>(M);
  m = vector<vector<int> >(N, vector<int>(M));
  for (int i = 0; i < N; i += 1) {
    pivot = i;
    for (int j = 0; j < M; j += 1) {
      cin >> m[i][j];
      if (m[i][j] >= 0) s[i].insert(j);
    }
    t[i] = s[i];
  }
  for (int i = 0; i < M; i += 1) {
    tmp.insert(i);
  }
  int change;
  for (int i = 0; i < M; i += 1) {
    u[i] = *tmp.begin();
    pre.clear();
    do {
      change = 0;
      for (int j = 0; j < N; j += 1) {
        pivot = j;
        if (s[j].find(u[i]) != s[j].end() && m[j][*s[j].begin()] < m[j][u[i]]) {
          if (pre.find(u[i]) == pre.end())
            pre.insert(u[i]);
          else {
            cout << -1 << '\n';
            return 0;
          }
          u[i] = *s[j].begin();
          change++;
        }
      }
    } while (change);
    for (int j = 0; j < N; j += 1) {
      pivot = j;
      if (s[j].find(u[i]) != s[j].end()) {
        s[j].erase(u[i]);
      }
    }
    tmp.erase(u[i]);
  }
  for (int i = 0; i < N; i += 1) {
    pivot = i;
    for (int j = 0; j < M; j += 1) {
      if (t[i].find(u[j]) != t[i].end()) {
        if (m[i][*t[i].begin()] < m[i][u[j]]) {
          cout << -1 << '\n';
          return 0;
        }
        t[i].erase(u[j]);
      }
    }
  }
  cout << u[0] + 1;
  for (int i = 1; i < M; i += 1) {
    cout << ' ' << u[i] + 1;
  }
  cout << '\n';
  return 0;
}
