#define V 1 int main() { int d[10]; int c[10]; int l = 10 + V * 10; int i; for (i = 0; i < 10; i++) c[i] = V; #define TRY_BEGIN(X) \ for (d[X] = 0; d[X] <= l && d[X] < 10; d[X]++) \ { l -= d[X]; ++c[d[X]]; \ if ((d[X] > X || c[d[X]] <= d[d[X]]) && c[X] <= d[X]) #define TRY_END(X) \ --c[d[X]]; l += d[X]; \ } TRY_BEGIN(0) TRY_BEGIN(1) TRY_BEGIN(2) TRY_BEGIN(3) TRY_BEGIN(4) TRY_BEGIN(5) TRY_BEGIN(6) TRY_BEGIN(7) TRY_BEGIN(8) TRY_BEGIN(9) { for (i = 0; i <= 9; i++) printf("%d", c[i]); printf("\n"); } TRY_END(9) TRY_END(8) TRY_END(7) TRY_END(6) TRY_END(5) TRY_END(4) TRY_END(3) TRY_END(2) TRY_END(1) TRY_END(0) }