#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void smax(T &x, T y) {
  x = max((x), (y));
}
template <class T>
inline void smin(T &x, T y) {
  x = min((x), (y));
}
const int MAX = 4e5 + 5;
long long n, m, cnt, arr[MAX], v[MAX], t;
vector<int> in[MAX], out[MAX], topol;
int vis[MAX];
bool flag;
void dfs(int v) {
  vis[v] = 1;
  for (auto u : out[v]) {
    if (!vis[u])
      dfs(u);
    else if (vis[u] == 1)
      flag = 1;
  }
  vis[v] = 2;
  topol.push_back(v);
}
bool cmp(int i, int j) { return arr[i] < arr[j]; }
int main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m;
  cnt = m;
  for (int i = 0; i < n; i++) {
    t = 0;
    for (int j = 0; j < m; j++) {
      cin >> arr[j];
      if (arr[j] != -1) v[t++] = j;
    }
    cnt++;
    sort(v, v + t, cmp);
    for (int j = -1; j < t - 1; j++) {
      if (j > -1 && arr[v[j]] != arr[v[j + 1]]) cnt += 1;
      out[cnt].push_back(v[j + 1]);
      out[v[j + 1]].push_back(cnt + 1);
    }
    cnt++;
  }
  for (int i = 0; i < cnt; i++)
    if (!vis[i]) dfs(i);
  if (flag) return cout << -1 << endl, 0;
  for (int i = topol.size() - 1; i >= 0; i--)
    if (topol[i] < m) cout << topol[i] + 1 << ' ';
  cout << endl;
  return 0;
}
