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

typedef pair<int, int> Pair;

int nums[13];
map<int, int> cnt;

bool check(map<int, int> cnt) {
  while (!cnt.empty()) {
    Pair p = *cnt.begin();
    if (p.second >= 3) {
      cnt[p.first] -= 3;
      if (cnt[p.first] == 0) cnt.erase(p.first);
    } else {
      if (cnt.count(p.first+1) && cnt.count(p.first+2)) {
        cnt[p.first] -= 1;
        cnt[p.first+1] -= 1;
        cnt[p.first+2] -= 1;
        if (cnt[p.first] == 0) cnt.erase(p.first);
        if (cnt[p.first+1] == 0) cnt.erase(p.first+1);
        if (cnt[p.first+2] == 0) cnt.erase(p.first+2);
      } else return false;
    }
  }
  return true;
}

bool possible(int k) {
  if (cnt[k] >= 4) return false;

  cnt[k]++;
  for (auto itr=cnt.begin(); itr!=cnt.end(); itr++) {
    if (itr->second >= 2) {
      map<int, int> newcnt = cnt;
      newcnt[itr->first] -= 2;
      if (newcnt[itr->first] == 0) newcnt.erase(itr->first);
      if (check(newcnt)) {
        cnt[k]--;
        if (cnt[k] == 0) cnt.erase(k);
        return true;
      }
    }
  }
  cnt[k]--;
  if (cnt[k] == 0) cnt.erase(k);
  return false;
}

int main() {
  while (1) {
    cnt.clear();
    for (int i=0; i<13; i++) {
      if (scanf("%1d", &nums[i]) != 1) return 0;
      cnt[nums[i]]++;
    }
    sort(nums, nums+13);
 
    vector<int> ans; 
    for (int i=1; i<=9; i++) {
      if (possible(i)) ans.push_back(i);
    }
  
    if (ans.empty()) puts("0");
    else {
      printf("%d", ans[0]);
      for (int i=1; i<ans.size(); i++) {
        printf(" %d", ans[i]);
      }
      puts("");
    }
  }
}