#include #include #include void print_num_2(int *num, int l, int *startb) { int i = 0; for (; i < l; i++) { if (startb [i] ) printf("%d", 9 - num[i]); else printf("%d", num[i]); } printf(" "); } void print_num(int *num, int l) { int i = 0; for (; i < l; i++) { printf("%d", num[i]); } printf(" "); } int main(void) { int c, l, i, COMB, tmp1, tmp2; int num[7]; int dir[7]; int startb[7]; loop: l = 0; COMB = 0; while ((c = getchar()) != EOF) { if (! isspace(c)) { ungetc(c, stdin); break; } } c = getchar(); if (c == '-') { /*while (getchar() != EOF) ;*/ return 0; } while (isdigit(c)) { num[l++] = c - '0'; c = getchar(); } for (i = 0; i < l; i++) { tmp1 = 9 - num[i]; tmp2 = num[i]; COMB += (tmp1 > tmp2) ? tmp2 : tmp1; } COMB += (int) pow(10, l) - 1; printf("%d\n", COMB); for (i = 0; i < l; i++) { while (num[i] != 0 && num[i] != 9) { if (num[i] >= 5 && num[i] < 9) { num[i]++; } else if (num[i] < 5 && num[i] != 0) { num[i]--; } print_num(num, l); } } for (i = 0; i < l; i++) { dir[i] = 1; startb[i] = num[i]; num [i] = 0; } while (dir[l-1]) { i = 0; while ( (i < 7 ) && ( (num[i] == 9 && dir[i]) ||(num[i] == 0 && !dir[i]))) { dir [i] = !dir [i]; i++; } num[i] += (dir[i]) ? +1 : -1; if (dir[l-1]) print_num_2 (num, l, startb); } printf("\n"); goto loop; return 0; }