#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
****************************************************************/