#include<queue>
#include<stack>
#include<math.h>
#include<cmath>
#include<bitset>
#include<stdio.h>
#include<string>
#include<map>
#include<algorithm>
#include<vector>
#include<iostream>
#include<utility>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
vector<int> ans(20);
void dfs(vector<int> a,int b,int v){
  int k=0,i;
  for(i=1;i<10;i++){
    if(a[i]!=0){
      k=1;
      break;
    }
  }
  if(k==0 && v==0){
    ans[b]=1;
    return;
  }
  for(i=1;i<10;i++){
    if(a[i]>1 && v==1){
      a[i]=a[i]-2;
      v--;
      dfs(a,b,v);
      a[i]=a[i]+2,v++;
    }
    if(a[i]>0 && a[i+1]>0 && a[i+2]>0){
      a[i]--,a[i+1]--,a[i+2]--;
      dfs(a,b,v);
      a[i]++,a[i+1]++,a[i+2]++;
    }
    if(a[i]>2){
      a[i]=a[i]-3;
      dfs(a,b,v);
    }
  }
}
int main(){
  char s[15];
  while(scanf("%s\n",&s)!=EOF){
    vector<int> a(20);
    vector<int> b(20);
    int i;
    for(i=1;i<10;i++){
      ans[i]=0;
    }
    for(i=0;i<13;i++){
      a[s[i]-'0']++;
    }
    for(i=1;i<10;i++){
      b=a;
      b[i]++;
      if(b[i]>4){
        continue;
      }
      dfs(b,i,1);
    }
    int z=0;
    for(i=1;i<10;i++){
      if(z==0 && ans[i]==1){
        printf("%d",i);
        z=1;
      }
      else if(ans[i]==1){
        printf(" %d",i);
      }
    }
    if(z==0){
      printf("0");
    }
    printf("\n");
  }
  return 0;
}
