#include #include #include int main(int argv, char **argc) { if (argv < 3) { assert(argv > 0); printf("Usage: %s [n] [t]\n", argc[0]); return -1; } size_t n = atoi(argc[1]), t = atoi(argc[2]); size_t *c = calloc(t + 3, sizeof(*c)); L1_initialize: for (size_t j = 1; j <= t; j++) c[j] = j - 1; c[t + 1] = n; c[t + 2] = 0; L2_visit: for (size_t j = t; j >= 1; j--) printf("%lu ", c[j]); printf("\n"); L3_find_j: size_t j = 1; while (c[j] + 1 == c[j + 1]) { c[j] = j - 1; j = j + 1; } L4_maybe_done: if (j > t) return 0; L5_increase_c_j: c[j] = c[j] + 1; goto L2_visit; }