#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<string>
#include<sstream>
#include<cmath>
#include<numeric>
#include<map>
#include<stack>
#include<queue>
#include<cassert>
using namespace std;
int inf = 1000000000;
int func(vector<int> a){
  bool f = true;
  for(int i=0; i<a.size(); i++){
    if( a[i] != 0 ) f = false;
  }
  if( f ) return 1;

  for(int i=1; i<=9; i++){
    if( a[i] >= 3 ){
      a[i] -= 3;
      if( func(a) == 1 ) return 1;
      a[i] += 3;
    }
  }
  for(int i=1; i<=7; i++){
    if( a[i] >= 1 && a[i+1] >= 1 && a[i+2] >= 1 ){
      a[i] -= 1; a[i+1] -= 1; a[i+2] -= 1;
      if( func(a) == 1 ) return 1;
      a[i] += 1; a[i+1] += 1; a[i+2] += 1;
    }
  }
  return 0;
}

bool check(string s, int n){
  vector<int> a(10, 0);
  for(int i=0; i<s.size(); i++){
    a[ s[i]-'0' ]++;
  }
  if( a[n] == 4 ) return false;
  a[n]++;
  for(int i=1; i<=9; i++){
    if( a[i] >= 2 ){
      a[i] -= 2;
      if(func(a) == 1) return true;
      a[i] += 2;
    }
  }
  return false;
}



int main(void) {

  string s;
  while(cin >> s){
    vector<int> ans;
    for(int i=1; i<=9; i++){
      if( check(s, i) ) ans.push_back(i);
    }

    if( ans.size() == 0 ) cout << 0 << endl;
    else{
      for(int i=0; i<ans.size()-1; i++) cout << ans[i] << " ";
      cout << ans[ans.size()-1] << endl;      
    }

  }


  return 0;
}


// EOF