#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));
	for(int i = 1; i < argc; i++) {
		n = std::stoi(std::string(argv[i]));
		if(n < 0)
			n = 2;
		if(n > NMAX)
			n = NMAX;
		minit(n);
		mprint(n);
		std::cout << msquareones(n) << '\n';
	}
	return 0;
}