#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> v;
string ans[110];
void add_Edge(int x, int y) {
  ans[x][y] = '1';
  ans[y][x] = '1';
}
int main() {
  scanf("%d", &n);
  int Kn = 3;
  for (int i = 100; i >= 1; i--) {
    int cur = (i * (i - 1) * (i - 2)) / 6;
    if (cur <= n) {
      n -= cur;
      Kn = i;
      break;
    }
  }
  while (n > 0) {
    for (int i = Kn; i >= 0; i--) {
      int cur = (i * (i - 1)) / 2;
      if (cur <= n) {
        n -= cur;
        v.push_back(i);
        break;
      }
    }
  }
  int N = Kn + v.size();
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      ans[i] += '0';
    }
  }
  for (int i = 0; i < Kn; i++) {
    for (int j = 0; j < i; j++) {
      add_Edge(i, j);
    }
  }
  for (int i = 0; i < v.size(); i++) {
    for (int j = 0; j < v[i]; j++) {
      add_Edge(Kn + i, j);
    }
  }
  printf("%d\n", N);
  for (int i = 0; i < N; i++) {
    cout << ans[i] << endl;
  }
  return 0;
}
