#include <bits/stdc++.h>
using namespace std;
set<char> vow = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
long long int xpow(long long int n, long long int m) {
  if (m == 0) {
    return 1;
  } else {
    long long int x = xpow(n, m / 2);
    if (m & 1) {
      return x * x * n;
    } else {
      return x * x;
    }
  }
}
long long int xmod(long long int a, long long int m) {
  return (((a % m) + m) % m);
}
long long int xmodpow(long long int n, long long int m, long long int y) {
  if (m == 0) {
    return 1;
  } else {
    long long int x = xmodpow(n, m / 2, y);
    if (m & 1) {
      return xmod((xmod((xmod(x, y) * xmod(x, y)), y) * xmod(n, y)), y);
    } else {
      return xmod((xmod(x, y) * xmod(x, y)), y);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long int n, k;
  cin >> n >> k;
  cin.ignore();
  long long int diff = abs(n - k);
  if (k > n * n) {
    cout << -1 << endl;
  } else {
    int a[n][n];
    memset(a, 0, sizeof a);
    while (k) {
      bool flag = 1;
      for (int i = 0; i < n && flag; i++) {
        for (int j = 0; j < n; j++) {
          if (a[i][j] == 0) {
            if (a[j][i] == 0) {
              if (i == j) {
                k--;
                a[i][j] = 1;
                flag = 0;
                break;
              } else {
                if (k >= 2) {
                  a[i][j] = 1;
                  a[j][i] = 1;
                  k -= 2;
                  flag = 0;
                  break;
                }
              }
            }
          }
        }
      }
    }
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        cout << a[i][j] << " ";
      }
      cout << endl;
    }
  }
}
