/**
 * 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;
}