#include #include #include #include #define REP(i, to) for(int i = 0 ; i < to ; ++i) using namespace std; void SolveOne(int start) { if(start >= 5) { printf("%d\n", 18 - start); start++; for( ; start < 10 ; start++) printf("%d ", start); printf("8 7 6 5 4 3 2 1 0\n"); } else{ printf("%d\n", start + 9); start--; for( ; start >= 0 ; start--) printf("%d ", start); printf("1 2 3 4 5 6 7 8 9\n"); } } vector S[8]; void Generate(int k) { if(k == 2) { S[2].push_back(0); REP(i, 5) { for(int a=1 ; a < 10 ; a++) { //help[0] = ((char)('0' + i*2)); //help[1] = ((char) (a + '0')); S[2].push_back(20*i + a); } for(int a=9 ; a > 0 ; a--){ //help[0] = ((char)('0' + i*2 + 1)); //help[1] = ((char) (a + '0')); S[2].push_back(20 * i + 10 + a); } } S[2].push_back(90); S[2].push_back(80); S[2].push_back(70); S[2].push_back(60); S[2].push_back(50); S[2].push_back(40); S[2].push_back(30); S[2].push_back(20); S[2].push_back(10); } else{ Generate(k-1); REP(act, (int)S[k-1].size()) { REP(a, 10) S[k].push_back(10 * S[k-1][act] + a); act++; REP(a, 10) S[k].push_back(10 * S[k-1][act] + 9 - a); } } } void indent(int k, int x) { char s[k]; REP(i, k) s[i] = '0'; REP(i, k) { s[k-i-1] = '0' + (x % 10); x/=10;} REP(i, k) putchar(s[i]); } void SolveAll(int k, int start) { //printf("Start: %d\n", start); //REP(i, (int)S[2].size()) cout << S[2][i] << " "; //int result = 1; //REP(i, k) result *= 10; printf("%d\n", (int)S[k].size() - 1); int act = -1; REP(i, (int)S[k].size()) if(S[k][i] == start) act = i; act ++; REP(i, (int)S[k].size() - 1) { if(i != 0) printf(" "); indent(k, S[k][(act + i) % S[k].size()]); } printf("\n"); } int main() { char s[20]; Generate(7); while(true) { REP(i, 20) s[i] = '-'; scanf("%s", s); if(s[0] == '-') break; int k; REP(i, 20) if(s[i] != '-') k = i; if(k == 1) {SolveOne(s[0]-'0'); continue;} int result = 0; REP(i, 20){ if(s[i] == '\0') break; result *= 10; result += s[i] - '0'; } //cout << k << endl; //string start = ""; //REP(i, k) start += s[i]; SolveAll(k, result); } return 0; }