#include <stdio.h>

void ordinal_fill(int vec[], int N, int n, int k) {
    for (int i = 0; i < N; ++i) {
        int r = (k * n) % (N - i);
        if (r < n) {
            vec[i] = 1;
            k = (k * n) / (N - i);
            --n;
        } else {
            vec[i] = 0;
            k = (k * (N - n)) / (N - i);
        }
    }
}

int main(void) {
	int N = 11, n = 3;
	int vec[N];
	int combs = 1;
	for (int i = 0; i < n; ++i) { combs *= N - i; combs /= i + 1; }
	for (int k = 0; k < combs; ++k) {
		ordinal_fill(vec, N, n, k);
		printf("%4d: ", k);
		for (int i = 0; i < N; ++i) putchar('0' + vec[i]);
		putchar('\n');
	}
	return 0;
}
