#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
#define rep(i, n) reps(i, 0, n)
#define reps(i, m, n) for (int i = m; i < int(n); ++i)
const int N = 1<<20;
#define DEBUG 0
int n;
int g[N];
string cipher;
string modify(int bits) {
string str = cipher;
rep(j, n) {
if(bits & (1<<(n-1-j))) {
if(str[j] == 'z')
return "";
str[j]++;
}
}
return str;
}
string invmod(int bits) {
string str = cipher;
rep(j, n) {
if(bits & (1<<(n-1-j))) {
if(str[j] == 'z')
return "";
str[j]++;
}
}
return str;
}
bool check(string str) {
reps(c, 'b', 'z'+1) {
rep(i, str.size()) {
if(str[i] == (char)c) {
str[i] --;
break;
}
}
}
return str == cipher;
}
void proc(void) {
rep(i, 1<<n) {
string str=invmod(i);
if(str=="") continue;
if(check(str))g[i]=1;
}
}
int main()
{
string str;
while(1) {
cin>>str;
if(str=="#") break;
cipher = str;
rep(i,N)g[i]=0;
n = cipher.size();
proc();
int count = 0;
vector<int> ss;
rep(i, 1<<n) {
count += g[i];
if(g[i]){
ss.push_back(i);
}
}
sort(ss.begin(),ss.end());
if(DEBUG) {
if(count <= 10)
rep(k, count) {
cout << k << "-" << ss[k] << ":" << modify(ss[k]) << endl;
}
}
cout << count << endl;
if( count <= 10) {
rep(k, count) {
cout << modify(ss[k]) << endl;
}
}
else {
rep(k,5) {
cout << modify(ss[k]) << endl;
}
rep(k,5) {
cout << modify(ss[ss.size()-5+k]) << endl;
}
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSByZXAoaSwgbikgICAgICAgcmVwcyhpLCAwLCBuKQojZGVmaW5lIHJlcHMoaSwgbSwgbikgICBmb3IgKGludCBpID0gbTsgaSA8IGludChuKTsgKytpKQoKCmNvbnN0IGludCBOID0gMTw8MjA7CiNkZWZpbmUgREVCVUcgMAoKaW50IG47CmludCBnW05dOwpzdHJpbmcgY2lwaGVyOwoKc3RyaW5nIG1vZGlmeShpbnQgYml0cykgewogICAgc3RyaW5nIHN0ciA9IGNpcGhlcjsKICAgIHJlcChqLCBuKSB7CiAgICAgICAgaWYoYml0cyAmICgxPDwobi0xLWopKSkgewogICAgICAgICAgICBpZihzdHJbal0gPT0gJ3onKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICBzdHJbal0rKzsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gc3RyOwp9CnN0cmluZyBpbnZtb2QoaW50IGJpdHMpIHsKICAgIHN0cmluZyBzdHIgPSBjaXBoZXI7CiAgICByZXAoaiwgbikgewogICAgICAgIGlmKGJpdHMgJiAoMTw8KG4tMS1qKSkpIHsKICAgICAgICAgICAgaWYoc3RyW2pdID09ICd6JykKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgc3RyW2pdKys7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHN0cjsKfQoKYm9vbCBjaGVjayhzdHJpbmcgc3RyKSB7CiAgICByZXBzKGMsICdiJywgJ3onKzEpIHsKICAgICAgICByZXAoaSwgc3RyLnNpemUoKSkgewogICAgICAgICAgICBpZihzdHJbaV0gPT0gKGNoYXIpYykgewogICAgICAgICAgICAgICAgc3RyW2ldIC0tOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gc3RyID09IGNpcGhlcjsKfQoKdm9pZCBwcm9jKHZvaWQpIHsKICAgIHJlcChpLCAxPDxuKSB7CiAgICAgICAgc3RyaW5nIHN0cj1pbnZtb2QoaSk7CiAgICAgICAgaWYoc3RyPT0iIikgY29udGludWU7CiAgICAgICAgaWYoY2hlY2soc3RyKSlnW2ldPTE7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgc3RyaW5nIHN0cjsKICAgIHdoaWxlKDEpIHsKICAgICAgICBjaW4+PnN0cjsKICAgICAgICBpZihzdHI9PSIjIikgYnJlYWs7CiAgICAgICAgY2lwaGVyID0gc3RyOwogICAgICAgIHJlcChpLE4pZ1tpXT0wOwogICAgICAgIG4gPSBjaXBoZXIuc2l6ZSgpOwogICAgICAgIHByb2MoKTsKICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgIHZlY3RvcjxpbnQ+IHNzOwogICAgICAgIHJlcChpLCAxPDxuKSB7CiAgICAgICAgICAgIGNvdW50ICs9IGdbaV07CiAgICAgICAgICAgIGlmKGdbaV0pewogICAgICAgICAgICAgICAgc3MucHVzaF9iYWNrKGkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNvcnQoc3MuYmVnaW4oKSxzcy5lbmQoKSk7CiAgICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgaWYoY291bnQgPD0gMTApCiAgICAgICAgICAgIHJlcChrLCBjb3VudCkgewogICAgICAgICAgICAgICAgY291dCA8PCBrIDw8ICItIiA8PCBzc1trXSA8PCAiOiIgPDwgbW9kaWZ5KHNzW2tdKSA8PCBlbmRsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgY291bnQgPDwgZW5kbDsKICAgICAgICBpZiggY291bnQgPD0gMTApIHsKICAgICAgICAgICAgcmVwKGssIGNvdW50KSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8IG1vZGlmeShzc1trXSkgPDwgZW5kbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmVwKGssNSkgewogICAgICAgICAgICAgICAgY291dCA8PCBtb2RpZnkoc3Nba10pIDw8IGVuZGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVwKGssNSkgewogICAgICAgICAgICAgICAgY291dCA8PCBtb2RpZnkoc3Nbc3Muc2l6ZSgpLTUra10pIDw8IGVuZGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K