#include<bits/stdc++.h>
using namespace std;
struct sstr{
  string s;
  sstr(){}
  sstr(string s):s(s){}
  
  bool operator<(const sstr& a)const{
    return s.size()!=a.s.size() ? s.size() < a.s.size() : s < a.s;
  }

  bool operator==(const sstr& a)const{
    return s==a.s;
  }
};
vector<sstr> v;

void solve(string x,int y){

  //cout << x << ":" << y << endl;
  v.push_back(sstr(x));
  if(y>=25) return;
  string n=x;
  for(int i=0;i<x.size();i++){
    if(x[i]=='y'-y) {
      n=x;
      n[i]++; 
      solve(n,y+1);
      return;
    }else if(x[i]=='y'-(y+1)){
      n=x;
      n[i]++;
      solve(n,y+2);
    }
  }
  solve(x,y+1);
}
typedef pair<string,int> P;
map<P,string> m;

string check(string s,int d){
  int i,j,k;
  for(i=1;i<26;i++){
    for(j=0;j<s.size();j++){
      if(s[j]=='a'+i){
	s[j]--;
	break;
      }
    }
  }
  return s;
}
int main(){
  string s;
  while(cin>>s,s!="#"){
    v.clear();m.clear();
    solve(s,0);
    sort(v.begin(),v.end());
    v.erase(unique(v.begin(),v.end()),v.end());
    //cout << v.size() << endl;
    int n = v.size();
    bool d[n];
    fill(d,d+n,false);
    for(int i=0;i<v.size();i++){
      if(check(v[i].s , 0 )!=s){
	//v.erase(v.begin()+i);
	//i--;
	d[i]=true;
	n--;
      }
    }
    cout << n << endl;
    if(n<=10){
      for(int i=0;i<v.size();i++){
	if(!d[i])
	  cout << v[i].s << endl;
      }
    }else{
      int k=0,j=0;
      for(int i=0;k<5;i++){
	if(!d[i]){
	  cout << v[i].s << endl;
	  k++;
	}
      }
      k=0;j=v.size();
      while(k<5){
	j--;
	if(!d[j]){
	  k++;
	}
      }
      for(int i=j;i<v.size();i++){
	if(!d[i])
	cout << v[i].s << endl;
      }
    }
  }
  return 0;
}