#include <bits/stdc++.h>
using namespace std;
struct DSU {
int n; vector<int> par, sz;
DSU(int n = 0) : n(n), par(n, -1), sz(n, 1) {}
int find(int v) {return par[v] == -1 ? v : par[v] = find(par[v]);}
void unite(int a, int b) {
a = find(a); b = find(b);
if (a != b) {
if (sz[a] < sz[b]) swap(a,b);
sz[a] += sz[b]; par[b] = a;
}
}
};
int main() {
cin.tie(0)->sync_with_stdio(0);
int n; cin >> n;
vector<vector<int>> a(n, vector<int>(n));
for (int i = 0; i < n; i++) for (int j = i; j < n; j++) cin >> a[i][j];
auto dsu = DSU(n);
for (int i = 0; i < n-1; i++) {
if (a[i][i] < a[i][i+1]) dsu.unite(i, i+1);
}
int p = 0;
vector<int> p1, p2;
for (int i = 0; i < n; i++) {
if (i > 0 && dsu.find(i) != dsu.find(i-1)) p = 1-p;
if (p == 0) p1.push_back(i+1);
else p2.push_back(i+1);
}
if (p1.size() < p2.size()) swap(p1, p2);
for (auto x : p1) cout << x << " "; cout << "\n";
return 0;
}