#include <bits/stdc++.h>
using namespace std;
int _max(int x, int y) { return x > y ? x : y; }
int _min(int x, int y) { return x < y ? x : y; }
const int N = 101;
int read() {
  int s = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
  return s * f;
}
void put(int x) {
  if (x >= 10) put(x / 10);
  putchar(x % 10 + '0');
}
struct node {
  int x, y;
} b[N * N];
int cnt;
struct edge {
  int x, y, next;
} e[N * N * 2];
int len, last[N];
int ans, a[N][N], id[N * N];
int tt, v[N];
int du[N];
void ins(int x, int y) {
  e[++len].x = x, e[len].y = y;
  e[len].next = last[x], last[x] = len;
}
bool cmp(int x, int y) { return du[x] > du[y]; }
bool findrd(int x, int d) {
  v[x] = tt;
  for (int k = last[x]; k; k = e[k].next) {
    int y = e[k].y;
    if (v[y] != tt && a[x][y]) {
      if (d - du[y] >= 2) {
        a[x][y] = 0, a[y][x] = 1;
        ans -= du[y], du[y]++;
        return 1;
      } else if (findrd(y, d)) {
        a[x][y] = 0, a[y][x] = 1;
        return 1;
      }
    }
  }
  return 0;
}
int main() {
  srand(200815147);
  int n = read(), m = read();
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (i != j) a[i][j] = 2;
  while (m--) {
    int i = read(), j = read();
    a[i][j] = 1, a[j][i] = 0;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (i <= j) continue;
      if (a[i][j] == 0)
        ++du[j];
      else if (a[i][j] == 1)
        ++du[i];
      else {
        ins(i, j), ins(j, i);
        b[++cnt].x = i, b[cnt].y = j;
      }
    }
  }
  for (int i = 1; i <= cnt; i++) id[i] = i;
  for (int i = 1; i <= cnt; i++) {
    int hh = id[i];
    if (du[b[hh].x] <= du[b[hh].y])
      ++du[b[hh].x], a[b[hh].x][b[hh].y] = 1, a[b[hh].y][b[hh].x] = 0;
    else
      ++du[b[hh].y], a[b[hh].x][b[hh].y] = 0, a[b[hh].y][b[hh].x] = 1;
  }
  ans = n * (n - 1) / 2 * (n - 2) / 3;
  for (int i = 1; i <= n; i++) ans -= du[i] * (du[i] - 1) / 2;
  bool bk = 1;
  while (bk) {
    bk = 0;
    for (int i = 1; i <= n; i++) id[i] = i;
    sort(id + 1, id + n + 1, cmp);
    for (int i = 1; i <= n; i++) {
      tt++;
      int x = id[i];
      if (findrd(x, du[x])) {
        du[x]--, ans += du[x];
        bk = 1;
        break;
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) put(a[i][j]);
    puts("");
  }
  return 0;
}
