#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1e2 + 7;
int G[MAX_N][MAX_N];
void link(int a, int b) { G[a][b] = G[b][a] = true; }
void check(int des, int n) {
  int ret = 0;
  for (int i = (1); i < (n + 1); i++)
    for (int j = (1); j < (n + 1); j++)
      for (int k = (1); k < (n + 1); k++)
        if (G[i][j] && G[i][k] && G[j][k]) ret++;
  ret /= 6;
  cout << "ret"
       << " => " << ret << endl;
  cout << "des"
       << " => " << des << endl;
  puts(ret == des ? "AC" : "WA");
}
int C2[MAX_N];
int main() {
  for (int i = (2); i < (MAX_N); i++) C2[i] = i * (i - 1) / 2;
  link(1, 2);
  int n;
  cin >> n;
  int _n = n;
  int base = 2;
  for (; n >= C2[base]; base++) {
    n -= C2[base];
    for (int i = (1); i < (base + 1); i++) link(i, base + 1);
  }
  for (; n;) {
    int pos = lower_bound(C2, C2 + MAX_N, n + 1) - C2;
    pos--;
    n -= C2[pos];
    ++base;
    for (int i = (1); i < (pos + 1); i++) link(base, i);
  }
  printf("%d\n", base);
  for (int i = (1); i < (base + 1); i++) {
    for (int j = (1); j < (base + 1); j++) printf("%d", G[i][j]);
    printf("\n");
  }
}
