#include #include int k = 0; int n[10]; int d[10]; int inc(int c) { int res = 1; if (c >= k) { return 0; } if (d[c] == 1) { if (n[c] < 9) { n[c]++; } else { d[c] = -1; res = inc(c+1); } } else /*d == -1*/ { if (n[c] > 0) { n[c]--; } else { d[c] = 1; res = inc(c+1); } } return res; } void prt() { for (int i = 0; i < k; i++) { putchar(n[i] + '0'); } } int pow(int n, int k) { int y = 1; for (int i = 0; i < k; i++) { y = y * n; } return y; } int inst() { k = 0; char s[10]; scanf("%s", s); if (strcmp(s, "-1") == 0) { return 0; } for (int i = 0; i < 10; i++) { if (s[i] != 0) { n[i] = s[i] - '0'; if (n[i] <= 4) { d[i] = -1; } else { d[i] = +1; } if (n[i] == 0) { d[i] = +1; } if (n[i] == 9) { d[i] = -1; } k++; } else { break; } } int kroku = 0; for (int j = 0; j < k; j++) { if (n[j] != 0 && n[j] != 9) { if (d[j] == 1) { kroku += 9 - n[j]; } else { kroku += n[j]; } } } // počet printf("%d\n", kroku + pow(10, k) - 1); // první nastavení //prt(); putchar(' '); // přechod každé cifry o meze for (int j = 0; j < k; j++) { if (n[j] != 0 && n[j] != 9) { for (int i = n[j]; i <= 9 && i >= 0; i += d[j]) { if (i < 9 && i > 0) { n[j] += d[j]; prt(); putchar(' '); } } d[j] *= -1; } } // výpis jednotlivých mož. int m = 0; while (inc(0)) { if (m++ > 0) { putchar(' '); } prt(); } putchar('\n'); //ungetc(1, stdin); return 1; } int main() { while(inst()) { } return 0; }