import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Map<String, String> m = new HashMap<>();//字典“1”映射“a”,“26”映射“z”
        for(int i = 1; i <= 26; ++i){
            StringBuilder sb1 = new StringBuilder();
            StringBuilder sb2 = new StringBuilder();
            sb1.append(i);
            sb2.append((char)('a' + i - 1));
            m.put(String.valueOf(sb1), String.valueOf(sb2));
        }
        while (sc.hasNextLine()) {
            String s = sc.nextLine();
            g(f(s, m));//用方法f求答案,用方法g输出答案
            System.out.println();
        }
    }
    public static List<String> f(String s, Map<String, String> m){
        List<String> r = new ArrayList<>();
        if(s.length() == 1){
            if(m.containsKey(s)) r.add(m.get(s));
            else r.add("0");//不规整的串尾用“0”标记
            return r;
        }
        if(s.length() == 2){
            if(m.containsKey(s)) r.add(m.get(s));
            StringBuilder sb0 = new StringBuilder();
            StringBuilder sb1 = new StringBuilder();
            sb0.append(s.charAt(0));
            sb1.append(s.charAt(1));
            StringBuilder ans = new StringBuilder();
            if(m.containsKey(String.valueOf(sb0))) ans.append(m.get(String.valueOf(sb0)));
            if(m.containsKey(String.valueOf(sb1))) ans.append(m.get(String.valueOf(sb1)));
            if(ans.length() == 2) r.add(String.valueOf(ans));
            else r.add("0");//不规整的串尾用“0”标记
            return r;
        }
        StringBuilder sb0 = new StringBuilder();
        StringBuilder sb1 = new StringBuilder();
        sb0.append(s.charAt(0));
        sb1.append(s.charAt(0));
        sb1.append(s.charAt(1));
        if(m.containsKey(String.valueOf(sb0))){
            StringBuilder rest = new StringBuilder(s.substring(1));
            List<String> bwt = f(String.valueOf(rest), m);
            for(String i : bwt){
                r.add(String.valueOf(new StringBuilder().append(m.get(String.valueOf(sb0))).append(i)));
            }
        }
        if(m.containsKey(String.valueOf(sb1))){
            StringBuilder rest = new StringBuilder(s.substring(2));
            List<String> bwt = f(String.valueOf(rest), m);
            for(String i : bwt){
                r.add(String.valueOf(new StringBuilder().append(m.get(String.valueOf(sb1))).append(i)));
            }
        }
        if((!m.containsKey(String.valueOf(sb0)))&&(!m.containsKey(String.valueOf(sb1)))){
            r.add("0");//不规整的串首用“0”标记
        }
        return r;
    }
    public static void g(List<String> v){//用来处理输出的方法g
        for(int i = 0; i < v.size(); ++i){
            if(v.get(i).length() == 0 || v.get(i).contains("0")){//删除含“0”的串
                v.remove(i);
                --i;
            }
        }
        Collections.sort(v);//按字典序输出
        System.out.print(v.get(0));
        for(int i = 1; i < v.size(); ++i){
            System.out.print(" ");
            System.out.print(v.get(i));
        }
    }
}