#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e6 + 10, MAXM = 1e4 + 10;
const int INF = INT_MAX, MOD = 1e9 + 7, mod = 998244353;
const long long llINF = ~(1ll << 63);
int head[MAXN], to[MAXN], _next[MAXN], ecnt = 1, cap[MAXN], flo[MAXN];
int tot;
void add_edge(int u, int v, int c, int f) {
  _next[++ecnt] = head[u];
  to[ecnt] = v;
  cap[ecnt] = c;
  flo[ecnt] = f;
  head[u] = ecnt;
  _next[++ecnt] = head[v];
  to[ecnt] = u;
  cap[ecnt] = 0;
  flo[ecnt] = -f;
  head[v] = ecnt;
}
queue<int> q;
int n, m, s, t;
int pre[MAXN], fa[MAXN], dis[MAXM], f[MAXM];
int spfa() {
  q.push(s);
  memset(dis, 0x3f, sizeof(dis));
  memset(f, 0, sizeof(f));
  f[s] = 1;
  dis[s] = 0;
  int inf = dis[s + 1];
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    f[u] = 0;
    for (int i = head[u]; i; i = _next[i]) {
      int v = to[i];
      if (dis[v] > dis[u] + flo[i] && cap[i]) {
        dis[v] = dis[u] + flo[i];
        pre[v] = i;
        fa[v] = u;
        if (!f[v]) {
          f[v] = 1;
          q.push(v);
        }
      }
    }
  }
  if (dis[t] != inf) return 1;
  return 0;
}
int ans1, ans;
void answer() {
  while (spfa()) {
    int minx = INF;
    for (int i = t; i != s; i = fa[i]) minx = min(minx, cap[pre[i]]);
    ans += minx;
    ans1 += dis[t] * minx;
    for (int i = t; i != s; i = fa[i])
      cap[pre[i]] -= minx, cap[pre[i] ^ 1] += minx;
  }
}
int mp[1005][1005], vis[1005][1005];
int main() {
  scanf("%d%d", &n, &m);
  s = 0, tot = n;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) mp[i][j] = 2;
  for (int i = 1; i <= m; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    mp[u][v] = 0;
    mp[v][u] = 1;
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j < i; j++) {
      add_edge(s, ++tot, 1, 0);
      if (mp[i][j] != 1) {
        add_edge(tot, i, 1, 0);
        vis[j][i] = ecnt - 1;
      }
      if (mp[i][j]) {
        add_edge(tot, j, 1, 0);
        vis[i][j] = ecnt - 1;
      }
    }
  t = tot + n;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j < n; j++) add_edge(i, t, 1, j);
  answer();
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (mp[i][j] < 2)
        printf("%d", 1 - mp[i][j]);
      else
        printf("%d", ((vis[i][j]) && cap[vis[i][j]]));
    }
    puts("");
  }
  return 0;
}
