#include<bits/stdc++.h>
using namespace std;


template<typename F>
struct FixPoint : F{
  FixPoint(F&& f):F(forward<F>(f)){}
  template<typename... Args>
  decltype(auto) operator()(Args&&... args) const{
    return F::operator()(*this,forward<Args>(args)...);
  }
};
template<typename F>
inline decltype(auto) MFP(F&& f){
  return FixPoint<F>{forward<F>(f)};
}

//INSERT ABOVE HERE
int main(){
  string s;
  while(cin>>s){
    vector<int> v;
    for(int i=0;i<13;i++) v.push_back(s[i]-'0');
    bool fi =true;
    for(int i=1;i<10;i++){
      bool f=true;
      vector<int> c(v);
      c.push_back(i);
      int d[10]={};
      for(int j=0;j<14;j++) d[c[j]]++;
      for(int j=0;j<10;j++)
        if(d[j]>4) f=false;

      if(!f) continue;
      f=0;
      auto conv=[&](map<int, int> cnt){
                  vector<int> vs;
                  for(auto p:cnt)
                    for(int i=0;i<p.second;i++)
                      vs.emplace_back(p.first);
                  return vs;
                };
      set< vector<int> > used;
      MFP([&](auto dfs,vector<int> vs)->void{
            if(used.count(vs)) return;
            used.emplace(vs);

            if(vs.empty()) f=1;
            if(f) return;
            map<int, int> cnt;
            for(int v:vs) cnt[v]++;
            if(vs.size()==14){
              for(int p=1;p<10;p++){
                if(cnt[p]<2) continue;
                cnt[p]-=2;
                dfs(conv(cnt));
                cnt[p]+=2;
                if(f) return;
              }
              return;
            }

            for(int p=1;p<10;p++){
              if(cnt[p]<3) continue;
              cnt[p]-=3;
              dfs(conv(cnt));
              cnt[p]+=3;
              if(f) return;
            }
            for(int p=1;p+3<=10;p++){
              if(cnt[p+0]<1||cnt[p+1]<1||cnt[p+2]<1) continue;
              cnt[p+0]--;cnt[p+1]--;cnt[p+2]--;
              dfs(conv(cnt));
              cnt[p+0]++;cnt[p+1]++;cnt[p+2]++;
              if(f) return;
            }
          })(c);

      if(f) {
        if(fi){
          cout << i;
          fi=false;
        }else cout << " " << i;
      }
    }
    if(fi) cout<<0;
    cout << endl;
  }
  return 0;
}

