#include <cstdio>
#include <cstdlib>
#include <stack>
#include <algorithm>
using namespace std;
const int MAXN = 50;
int mat[MAXN][MAXN], output[MAXN], indegree[MAXN];
int n, outputCnt, current;
stack<int> st;
bool TopologicalSort() {
	outputCnt = 0;
	while (!st.empty())
		st.pop();
	for (int i = 0;i < n;i++)
		indegree[i] = 0;
	for (int i = 0;i < n;i++) {
		for (int j = 0;j < n;j++) {
			if (mat[i][j])
				indegree[j]++;
		}
	}
	for (int i = 0;i < n;i++) {
		if (indegree[i] == 0) {
			st.push(i);
		}
	}
	while (!st.empty()) {
		current = st.top();
		st.pop();
		output[outputCnt++] = current;
		for (int i = 0;i < n;i++) {
			if (mat[current][i]) {
				indegree[i]--;
				if (indegree[i] == 0) {
					st.push(i);
				}
			}
		}
	}
	return (outputCnt == n);
}
int main() {
	scanf("%d", &n);
	for (int i = 0;i < n;i++) {
		for (int j = 0;j < n;j++) {
			scanf("%d", &mat[i][j]);
		}
	}
	if (TopologicalSort()) {
		for (int i = 0;i < n;i++) {
			printf("%d ", output[i]);
		}
		puts("");
	} else {
		puts("ERROR");
	}
	return 0;
}
/**************************************************************
	Problem: 2164
	User: admin
	Language: C++
	Result: Accepted
	Time:8 ms
	Memory:1276 kb
****************************************************************/