#include <bits/stdc++.h>
using namespace std;
const long long MXN = 2e3 + 10;
const long long MX5 = 1e5 + 10;
const long long MX6 = 1e6 + 10;
const long long LOG = 20;
const long long INF = 8e18;
const double eps = 1e-9;
const long long MOD = 1e9 + 7;
long long power(long long a, long long b, long long md) {
  return (!b ? 1
             : (b & 1 ? a * power(a * a % md, b / 2, md) % md
                      : power(a * a % md, b / 2, md) % md));
}
long long bmm(long long a, long long b) {
  return (a % b == 0 ? b : bmm(b, a % b));
}
string base2(long long n) {
  string a = "";
  while (n >= 2) {
    a += (char)(n % 2 + '0');
    n /= 2;
  }
  a += (char)(n + '0');
  reverse((a).begin(), (a).end());
  return a;
}
int n, m, x;
int vis[MX5], f = 0;
vector<pair<int, int> > B;
vector<int> A[MX5], G[MX5], Top, vec;
void dfs(int u) {
  vis[u] = 1;
  for (auto v : G[u]) {
    if (!vis[v])
      dfs(v);
    else if (vis[v] == 1)
      f = 1;
  }
  vis[u] = 2, Top.push_back(u);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    B.clear();
    vec.shrink_to_fit();
    for (int j = 1; j <= m; j++) {
      cin >> x;
      A[i - 1].push_back(x);
      if (x == -1) continue;
      B.push_back({x, j});
    }
    if (B.size() <= 1) continue;
    sort(((B)).begin(), ((B)).end());
    if (n == 1) {
      map<long long, bool> mp;
      for (int j = 0; j < B.size(); j++) {
        cout << B[j].second << ' ';
        mp[B[j].second] = 1;
      }
      for (int i = 1; i <= m; i++)
        if (!mp[i]) cout << i << ' ';
      return 0;
    }
    vec.clear();
    vec.shrink_to_fit();
    for (int j = 0; j < B.size(); j++) {
      int p = j;
      while (p < B.size() && B[p].first == B[j].first) {
        for (auto id : vec) {
          G[id].push_back(B[p].second);
        }
        p++;
      }
      vec.clear();
      vec.shrink_to_fit();
      if (p != B.size())
        for (int k = j; k < p; k++) vec.push_back(B[k].second);
      j = p - 1;
    }
  }
  for (int i = 1; i <= m; i++) {
    if (!vis[i]) dfs(i);
  }
  if (f) return cout << -1 << '\n', 0;
  ;
  reverse((Top).begin(), (Top).end());
  for (int X : Top) cout << X << ' ';
  return 0;
}
