#include <bits/stdc++.h>
using namespace std;
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
int main() {
  int n, k, arr[110][110] = {0}, ans = 0;
  scanf("%d", &n);
  scanf("%d", &k);
  if (k > n * n)
    printf("%d\n", -1);
  else {
    for (long long int i = (0); i < (n); i++) {
      for (long long int j = (0); j < (n); j++) {
        if (k > 0 && i == j) {
          arr[i][i] = 1;
          k--;
        } else if (arr[i][j] != 1) {
          if (k > 1) {
            arr[i][j] = 1;
            arr[j][i] = 1;
            k -= 2;
          } else if (k > 0) {
            if (j >= i)
              arr[i + 1][i + 1] = 1;
            else
              arr[i][i] = 1;
            k--;
          }
        }
        if (k == 0) {
          ans = 1;
          break;
        }
      }
      if (ans == 1) break;
    }
    for (long long int i = (0); i < (n); i++) {
      for (long long int j = (0); j < (n); j++) {
        printf("%d ", arr[i][j]);
      }
      printf("\n");
    }
  }
  return 0;
}
