#include <bits/stdc++.h>
using namespace std;
set <string> ans;
string Str,str;
bool cal(string a){
  bool alph[300]={};
  alph['a']=1;
  for(int i=0;i<a.size();i++){
    if(!alph[a[i]])alph[a[i]]=1,a[i]--;
    if(a[i]!=Str[i])return 0;
  }
  return 1;
}

bool used[300];
void saiki(int idx){
  while(used[str[idx]]||str[idx]=='z')idx++;
  if(idx==(int)str.size()&&cal(str))ans.insert(str);
  if(idx==str.size())return;
  saiki(idx+1);

  str[idx]++;
  used[str[idx]-1]=1;
  saiki(idx+1);
  used[str[idx]-1]=0;
  str[idx]--;
}

int main(){
  while(1){
  cin>>Str;
  str=Str;
  if(Str=="#")break;
  ans.clear();
  saiki(0);
  cout <<ans.size()<<endl;
  set <string>:: iterator it=ans.begin();

  int cnt=0;
  if(ans.size()<=10){
    while(it!=ans.end())cout <<*it<<endl,it++,cnt++;
  }
  else {
    while(cnt!=5) cout << *it<<endl,it++,cnt++;
    it=ans.end();
    while(cnt--)it--;
    while(it!=ans.end())cout << *it<<endl,it++;
  }
 

  
  }
  return 0;
}