#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;

int a[9];
int reset(int origin[], int copy[])
{
    for(int i=0;i<9;i++)
    {
        copy[i] = origin[i];
    }
}
int check_deep(int b[], int c)
{
    int i;
    if(c==4) return 1;
    for(i=0;i<9 && !b[i];i++);
    if((b[i] == 1 || b[i] == 2) && !(i < 7 && b[i+1] && b[i+2]))
    {
        return 0;
    }
    else if(b[i] == 4)
    {
        b[i]-=3;
        return check_deep(b, c+1);
    }
    else if(b[i] == 3)
    {
        b[i]-=3;
        if(check_deep(b, c+1)) return 1;
        b[i]+=3;
    }
    if(b[i] >= 1 && i < 7 && b[i+1] && b[i+2])
    {
        b[i]--;
        b[i+1]--;
        b[i+2]--;
        return check_deep(b, c+1);
    }
}
int check(int n)
{
    int ans=0;
    int c[9];
    if(a[n]==4) return 0;
    a[n]++;
    for(int i=0;i<9 && !ans;i++)
    {
        if(a[i]>=2)
        {
            a[i]-=2;
            reset(a, c);
            ans = check_deep(c, 0);
            a[i]+=2;
        }
    }
    a[n]--;
    return ans;
}
int convert(char n)
{
    if(n=='1') return 0;
    else if(n=='2') return 1;
    else if(n=='3') return 2;
    else if(n=='4') return 3;
    else if(n=='5') return 4;
    else if(n=='6') return 5;
    else if(n=='7') return 6;
    else if(n=='8') return 7;
    else if(n=='9') return 8;
    return -1;
}
int main(){
    int n;
    string str;
    vector<int> ans;
    while(cin >> str)
    {
        for(int i=0;i<9;i++) a[i] = 0;
        for(int i=0;i<str.size();i++)
        {
            n = convert(str[i]);
            a[n]++;
        }
        for(int i=0;i<9;i++) if(check(i)) ans.push_back(i+1);
        if(ans.empty()) cout << 0 << endl;
        else
        {
            cout << ans[0];
            for(int i=1;i<ans.size();i++) cout << ' ' << ans[i];
            cout << endl;
        }
        ans.clear();
    }
}