#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

bool solve(int hnow[14],bool isused[14],int tnum){
    if(tnum==4) return true;
    bool ret=false;
    for(int i=1;i<=9;i++){
        int sn=0;
        for(int j=0;j<14;j++){
            if(!isused[j] && hnow[j]==i) sn++;
        }
        if(sn>=3){
            for(int j=0;j<3;j++){
                for(int k=0;k<14;k++){
                    if(!isused[k] && hnow[k]==i){
                        isused[k]=true;
                        break;
                    }
                }
            }
            ret|=solve(hnow,isused,tnum+1);
            for(int j=0;j<3;j++){
                for(int k=0;k<14;k++){
                    if(isused[k] && hnow[k]==i){
                        isused[k]=false;
                        break;
                    }
                }
            }
        }
    }
    for(int i=1;i<=7;i++){
        bool is=true;
        for(int j=i;j<=i+2;j++){
            bool has=false;
            for(int k=0;k<14;k++){
                if(!isused[k] && hnow[k]==j) has=true;
            }
            if(!has) is=false;
        }
        if(is){
            for(int j=i;j<=i+2;j++){
                for(int k=0;k<14;k++){
                    if(!isused[k] && hnow[k]==j){
                        isused[k]=true;
                        break;
                    }
                }
            }
            ret|=solve(hnow,isused,tnum+1);
            for(int j=i;j<=i+2;j++){
                for(int k=0;k<14;k++){
                    if(isused[k] && hnow[k]==j){
                        isused[k]=false;
                        break;
                    }
                }
            }
        }
    }
    return ret;
}

int main(){
    char ins[20];
    int hai[13],hnow[14];
    bool isused[14];
    for(;;){
        if(scanf("%s\n",ins)==-1) break;
        for(int i=0;i<13;i++){
            hai[i]=ins[i]-'0';
        }
        vector<int> anss;
        for(int ix=1;ix<=9;ix++){
            int hn=0;
            for(int j=0;j<13;j++){
                if(hai[j]==ix) hn++;
                hnow[j]=hai[j];
            }
            if(hn>3) continue;
            hnow[13]=ix;
            sort(hnow,hnow+14);
            for(int j=1;j<=9;j++){
                for(int k=0;k<14;k++){
                    isused[k]=false;
                }
                int jan=0;
                for(int k=0;k<14;k++){
                    if(hnow[k]==j) jan++;
                }
                if(jan>=2){
                    for(int k=0;k<2;k++){
                        for(int l=0;l<14;l++){
                            if(!isused[l] && hnow[l]==j){
                                isused[l]=true;
                                break;
                            }
                        }
                    }
                    if(solve(hnow,isused,0)){
                        anss.push_back(ix);
                        break;
                    }
                }
            }
        }

        if(anss.size()==0) printf("0\n");
        else{
            for(int i=0;i<(int)anss.size()-1;i++){
                printf("%d ",anss[i]);
            }
            printf("%d\n",anss[anss.size()-1]);
        }
    }
}

Measured memory_bytes: 0