/**
* Author: Sergey Kopeliovich (Burunduk30@gmail.com)
*/
#include <bits/stdc++.h>
using namespace std;
#define forn(i, n) for (int i = 0; i < (int)(n); i++)
const int N = 1000;
int n;
bitset<N> a[N];
char s[N + 1];
int main() {
#define NAME "floyd32"
assert(freopen(NAME ".in", "r", stdin));
assert(freopen(NAME ".out", "w", stdout));
assert(scanf("%d ", &n) == 1 && n <= N);
forn(i, n) {
gets(s);
forn(j, n)
a[i][j] = (s[j] == '1');
}
forn(k, n)
forn(i, n)
if (a[i][k])
a[i] |= a[k];
forn(i, n) {
forn(j, n)
s[j] = (a[i][j] + '0');
puts(s);
}
return 0;
}