#include #include char res[10000000][8]; char cur[8]; int k; int rescnt; void generuj(int pos) { if (pos >= k) { // save for (int i = 0; i <= k; ++i) res[rescnt][i] = cur[i]; ++rescnt; // printf("%s\n", cur); return; } // printf("gen %d\n", pos); if (cur[pos] == '0') { for (int i = 0; i <= 9; ++i) { cur[pos] = i+'0'; generuj(pos+1); } } else { for (int i = 9; i >= 0; --i) { cur[pos] = i+'0'; generuj(pos+1); } } } int main() { while (true) { char c[10]; gets(c); if (c[0] == '-') break; k = strlen(c); if (k == 1) { int x = c[0] - '0'; if (x < 5) { printf("%d\n", 8+x+1); for (int i = x-1; i >= 0; --i) printf("%d ", i); for (int i = 1; i < 9; ++i) printf("%d ", i); printf("9\n"); } else { printf("%d\n", 10-x+8); for (int i = x+1; i <= 9; ++i) printf("%d ", i); for (int i = 8; i > 0; --i) printf("%d ", i); printf("0\n"); } } else { cur[k] = '\0'; rescnt = 0; for (int i = 0; i < k; ++i) cur[i] = '0'; for (int i = 0; i <= 9; ++i) { cur[1] = i+'0'; generuj(2); } for (int j = 1; j <= 9; ++j) { cur[0] = j+'0'; generuj(2); } for (int i = 8; i >= 0; --i) { cur[1] = i+'0'; generuj(2); } for (int startJ = 9; startJ >= 3; --startJ) { cur[0] = (startJ-1)+'0'; for (int i = 0; i <= 8; ++i) { cur[1] = i+'0'; generuj(2); } --startJ; cur[0] = (startJ-1)+'0'; for (int i = 8; i >= 0; --i) { cur[1] = i+'0'; generuj(2); } } printf("%d\n", rescnt-1); int start = 0; while (strcmp(c, res[start]) != 0) ++start; bool first = true; for (int i = start+1; i < rescnt; ++i) { if (!first) printf(" "); first = false; printf("%s", res[i]); } for (int i = 0; i < start; ++i) { if (!first) printf(" "); first = false; printf("%s", res[i]); } printf("\n"); } } return 0; }