+
+typedef uint32_t AdjWord;
+#define PRADJ PRIx32
+
+static int n, m;
+static AdjWord adjmatrix[n];
+static AdjWord adjall;
+
+static double best;
+static AdjWord adjmatrix_best[n];
+
+static void prep(void) {
+ adjall = ~((~(AdjWord)0) << m);
+}
+
+static int count_set_adj_bits(AdjWord w) {
+ for (int j=0, total=0; j<m; j++)
+ total += !!(w & ((AdjWord)1 << j));
+ return total;
+}
+
+static void optimise(void) {
+ for (i=0; i<n; i++) {
+ printf("%"PRADJ" ", adjmatrix[i]);
+ double maxminsize = (double)m / count_set_adj_bits(adjmatrix[i]);
+ if (maxminsize < best) {
+ printf(" too fine\n");
+ return;
+ }
+ }
+
+ printf("nyi\n");
+}
+
+static void iterate_recurse(int i, AdjWord min) {
+ if (i > n) {
+ optimise();
+ return;
+ }
+ for (adjmatrix[i] = min;
+ ;
+ adjmatrix[i]++) {
+ iterate_recurse(i+1, adjmatrix[i]);
+ }
+}
+
+static void iterate(void) {
+ iterate_recurse(0, 1);
+}
+
+int main(int argc, char **argv) {
+ n = atoi(argv[1]);
+ m = atoi(argv[2]);
+ prep();
+ iterate();
+ if (ferror(stdout) || fclose(stdout)) { perror("stdout"); exit(-1); }
+ return 0;
+}