#include <stdio.h>

static unsigned int x = 123456789;
static unsigned int y = 362436069;
static unsigned int z = 521288629;
static unsigned int w = 88675123;

unsigned int randint(void) {
	unsigned int t;
	t = (x ^ (x << 11));
	x = y; y = z; z = w;
	w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
	return w;
}

int main(void) {
	unsigned int max = 0x56000000u;
	unsigned int blocksize = max / 16;
	int count[16] = {0};
	int i;
	for (i = 0; i < 160000; i++) {
#if 0
		unsigned int value = randint() % max;
#else
		unsigned int value;
		int ok = 0;
		unsigned int r = (0xffffffffu % max + 1) % max;
		do {
			unsigned int x = randint();
			if (r == 0 || x < 0xffffffff - (r - 1)) { ok = 1; value = x % max; }
		} while (!ok);
#endif
		count[value / blocksize]++;
	}
	for (i = 0; i < 16; i++) {
		printf("%2d %8d\n", i, count[i]);
	}
	return 0;
}
