#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <cstring>
#include <string>
#include <sstream>
#include <algorithm>
#include <iomanip>
#include <iostream>

#define VARIABLE(x) cerr << #x << "=" << x << endl
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define REP(i,m,n) for (int i=m;i<(int)(n);i++)

const int INF = 10000000;
using namespace std;
typedef long long  ll;

/** Problem0043 : Puzzle **/
bool bfs(int *num)
{
	bool f=false;
	
	bool ff=true;
	for (int i=1; i<10; i++) {
		if (num[i]!=0) {
			ff=false;
		}
	}
	if (ff) return true;
	
	for (int i=1; i<10; i++) {
		if (num[i]>=3) {
			num[i]-=3;
			f |= bfs(num);
			num[i]+=3;
		}
	}
	
	for (int i=1; i<8; i++) {
		if (num[i]>0 && num[i+1]>0 && num[i+2]>0) {
			num[i]--; num[i+1]--; num[i+2]--;
			f |= bfs(num);
			num[i]++; num[i+1]++; num[i+2]++;
		}
	}
	
	return f;
}

int main()
{
	int num[10] = {0};
	vector<int> ans;
	string s;
	
	while (cin>>s) {
		ans.clear();
		rep(i, 10) num[i]=0;
		rep(i, s.length()) {
			num[s[i]-'0']++;
		}
		
		for (int k=1; k<10; k++) {
			if (num[k]==4)
				continue;
			else if (num[k]>4) {
				cout << 0 << endl;
				goto end;
			} else {
				num[k]++;
				bool f=false;
				for (int i=1; i<10; i++) {
					if (num[i] >= 2) {
						num[i]-=2;
						f |= bfs(num);
						num[i]+=2;
					}
				}
				num[k]--;
				if (f)
					ans.push_back(k);
			}
		}
		
		if (ans.size()>0) {
			rep(i, ans.size()-1)
				cout << ans[i] << " ";
			cout << ans[ans.size()-1] << endl;
		} else {
			cout << 0 << endl;
		}
		
	end:;
	}
	return 0;
}