#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T read() {
  char ch = ' ';
  T ret = (T)0;
  bool positive = 1;
  while (!(ch >= '0' && ch <= '9')) {
    if (ch == '-') positive ^= 1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    ret = ret * ((T)10) + ((T)(ch - '0'));
    ch = getchar();
  }
  return positive ? ret : -ret;
}
const int N = 60;
int n, a[N][N];
int equ[N], cmin[N], ans[N];
inline void solve() {
  for (int i = 0; i < n; i++) cmin[i] = equ[i] = -(1000000001);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) cmin[i] = max(cmin[i], a[i][j]);
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++)
      for (int k = j + 1; k < n; k++)
        if (a[i][j] == a[i][k] && a[i][k] == a[j][k]) {
          cmin[i] = max(cmin[i], a[i][j]);
          cmin[j] = max(cmin[j], a[i][j]);
          cmin[k] = max(cmin[k], a[i][j]);
        } else if (a[i][j] == a[i][k]) {
          equ[i] = a[i][j];
          cmin[j] = max(cmin[j], equ[i] + 1);
          cmin[k] = max(cmin[k], equ[i] + 1);
        } else if (a[i][j] == a[j][k]) {
          equ[j] = a[i][j];
          cmin[i] = max(cmin[i], equ[j] + 1);
          cmin[k] = max(cmin[k], equ[j] + 1);
        } else if (a[i][k] == a[j][k]) {
          equ[k] = a[i][k];
          cmin[i] = max(cmin[i], equ[k] + 1);
          cmin[j] = max(cmin[j], equ[k] + 1);
        }
  for (int i = 0; i < n; i++) {
    ans[i] = max(equ[i], cmin[i]);
    for (int j = 0; j < n; j++)
      if (cmin[j] == ans[i]) cmin[j] = ans[i] + 1;
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) scanf("%d", &a[i][j]);
  solve();
  for (int i = 0; i < n - 1; i++) printf("%d ", ans[i]);
  printf("%d\n", ans[n - 1]);
  return 0;
}
