#include
#include
#include
using namespace std;
int N;
int Map[100][100];
int result[100][100];
bool visit[100];
queue q;
void Calc() {
for (int i = 0; i < N; i++) {
for (int q = 0; q < N; q++) {
visit[q] = 0;
}
for (int j = 0; j < N; j++) {
visit[i] = true;
if (Map[i][j] == 1) {
q.push(j);
result[i][j] = 1;
}
}
while (!q.empty()) {
int current_po = q.front();
q.pop();
for (int k = 0; k < N; k++) {
if (Map[current_po][k] == 1) {
result[i][k] = 1;
if (visit[k]) continue;
visit[k] = true;
q.push(k);
}
}
}
for (int u = 0; u < N; u++) {
if (result[i][u] != 1) result[i][u] = 0;
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}
}
void Input() {
scanf("%d", &N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
scanf("%d", &Map[i][j]);
}
}
}
void Solve() {
Input();
Calc();
}
int main(void) {
Solve();
return 0;
}