import java.util.*;
public class Main {
  public static void main(String[] args) {
    final Scanner sc = new Scanner(System.in);
    while(sc.hasNext()) {
      final char[] s = sc.next().toCharArray();
      if(s[0] == '#')
        return;
      final Set<String> set = new TreeSet<String>();
      dfs(s, 0, set, new boolean[128]);
      System.out.println(set.size());
      int i = 0; 
      for(final String ss : set) {
        if(i < 5 || set.size() - 5 <= i)
          System.out.println(ss);
        i++;
      }
    }
  }
  private static void dfs(final char[] cs, final int i, final Set<String> set, final boolean[] flags) {
    if(i == cs.length){
      set.add(new String(cs));
      return;
    }
    if(!flags[cs[i] + 1] && cs[i] < 'z') {
      flags[++cs[i]] = true;
      dfs(cs, i + 1, set, flags);
      flags[cs[i]--] = false;
    }
    if(cs[i] == 'a' || flags[cs[i]]) {
      dfs(cs, i + 1, set, flags);
    }
  }
}
