#include<bits/stdc++.h>
using namespace std;
typedef long long int64;

string Str;
vector< string > Ret;
void Dfs(string s, int used, int idx){
  if(idx == Str.size()){
    Ret.push_back(s);
    return;
  }
  char c = Str[idx];
  if((used >> (c - 'a')) & 1){ //既に現れている文字
    Dfs( s + c, used, idx + 1);
  }
  if(c != 'z' && !((used >> (c + 1 - 'a')) & 1)){
    Dfs( s + (char)(c + 1), used|(1 << (c + 1 - 'a')), idx + 1);
  }
  return;
}
int main(){
  while(cin >> Str, Str != "#"){
    Dfs("", 1, 0);
    cout << Ret.size() << endl;
    if(Ret.size() < 10){
      for(int i = 0; i < Ret.size(); i++){
        cout << Ret[i] << endl;
      }
    } else {
      for(int i = 0; i < 5; i++){
        cout << Ret[i] << endl;
      }
      for(int i = Ret.size() - 5; i < Ret.size(); i++){
        cout << Ret[i] << endl;
      }
    }
    Ret.clear();
  }
}