#include<bits/stdc++.h>
using namespace std;
set<string> ans;
bool used['z'+1];
string s,cp;
int n;

void dfs(int x,string t){
  cp=t;
  memset(used,0,sizeof(used));
  for(int i=0;i<x;i++)
    if(cp[i]!='a'&&!used[cp[i]])used[cp[i]]=true,cp[i]--;
  if(x==n){
    if(cp==s)ans.insert(t);
    return;
  }else if(cp!=s.substr(0,x))return;
  dfs(x+1,t+s[x]);
  if(s[x]!='z')dfs(x+1,t+(char)(s[x]+1));
}

int main(){
  while(1){
    cin>>s;
    if(s=="#")break;
    n=s.size();
    dfs(0,"");
    set<string>::iterator ite;
    int len=ans.size(),cnt=0;
    cout<<len<<endl;
    for(ite=ans.begin();ite!=ans.end();ite++,cnt++)
      if(cnt<=4||cnt+5>=len)cout<<(*ite)<<endl;
    ans.clear();
  }
  return 0;
}