#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>

#define NMAX 4000

typedef unsigned char uchar;
typedef unsigned int  uint;

uchar matrix[NMAX][NMAX];

void
minit(int n)
{
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++)
			if(n < 100)
				matrix[i][j] = rand()%2;
			else if(n < 1000 && rand()%3 == 0)
				matrix[i][j] = 1;
			else if(rand()%4 == 0)
				matrix[i][j] = 1;
			else
				matrix[i][j] = 0;
}

void
mprint(int n)
{
	char bit;
	std::cout << n << '\n';
	for(int i = 0; i < n; i++) {
		for(int j = 0; j < n; j++) {
			bit = matrix[i][j] + '0';
			std::cout << bit;
		}
		std::cout << '\n';
	}
}

uint
msquareones(int n)
{
	uint item, ones;
	ones = 0U;
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++) {
			item = 0U;
			for(int k = 0; k < n; k++)
				item ^= matrix[i][k] & matrix[k][j];
			ones += item;
		}
	return ones;
}

int
main(int argc, char *argv[])
{
	int n;

	srand(time(NULL));
	if(argc == 1)
		std::cin >> n;
	else
		n = std::atoi(argv[1]);

	if(n < 0)
		return 1;
	if(n > NMAX)
		n = NMAX;
	minit(n);
	mprint(n);
	std::cout << msquareones(n) << '\n';

	return 0;
}