#include <bits/stdc++.h>
using namespace std;
vector <string> ans;
string Str,str;

bool check(int n){
  bool alph[300]={};
  alph['a']=1;
  for(int i=0;i<n;i++){
    int flg=0;
    if(!alph[str[i]])flg=alph[str[i]]=1;
    if(str[i]-flg!=Str[i])return 0;
  }
  return 1;
}

bool used['z'];
void saiki(int idx){
  while(used[str[idx]]||str[idx]=='z')idx++;
  if(!check(idx))return;

  if(idx==str.size()){
    ans.push_back(str);
    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);
    sort(ans.begin(),ans.end());

    cout <<ans.size()<<endl;
    if(ans.size()<=10)
      for(int i=0;i<ans.size();i++)cout <<ans[i]<<endl;
    else {
      for(int i=0;i<5;i++)cout<<ans[i]<<endl;
      for(int i=0;i<5;i++)cout<<ans[ans.size()-5+i]<<endl;
    }
  } 
  return 0;
}