#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <complex>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <functional>
#include <iostream>
#include <map>
#include <set>
using namespace std;
typedef pair<int,int> P;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;
#define pu push
#define pb push_back
#define mp make_pair
#define eps 1e-9
#define INF 2000000000
#define sz(x) ((int)(x).size())
#define fi first
#define sec second
#define EQ(a,b) (abs((a)-(b))<EPS)
typedef pair<P,int> T;
vector<T> comb; 
vi num;
vi ans;
void cal(T k)
{
	num[k.fi.fi]--;
	num[k.fi.sec]--;
	num[k.sec]--;
	return ;
}
bool pos(T k)
{
	if(k.fi.fi==k.fi.sec)
	{
		if(num[k.fi.fi]>=3)return true;
		else return false;
	}
	if(num[k.fi.fi]>=1&&num[k.fi.sec]>=1&&num[k.sec]>=1)
	{
		return true;
	}
	return false;
}
/*void output(int a)
{
	cout <<comb[a].fi.fi<<' '<<comb[a].fi.sec<<' '<<comb[a].sec<<endl;
	return ;
}*/
bool check(int x)
{
	if(num[x]==4)return false;
	num[x]++;
	for(int a=1;a<10;a++)
	{
		if(num[a]>=2)
		{
			comb.clear();
			num[a]-=2;
			for(int b=1;b<10;b++)
			{
				if(num[b]>=3)
				{
					comb.pb(T(P(b,b),b));
				}
				if(b<=7&&num[b]&&num[b+1]&&num[b+2])
				{
					comb.pb(T(P(b,b+1),b+2));
				}
			}
			bool flag=false;
			vi p,q,r,s;
			for(int i=0;i<sz(comb);i++)
			{
				if(i==0)
				{
					p.clear();
					p=num;
				}
				else num=p;
				if(!(pos(comb[i])))continue;
				else cal(comb[i]);
				for(int j=0;j<sz(comb);j++)
				{
					if(j==0)
					{
						q.clear();
						q=num;
					}
					else num=q;
					if(!(pos(comb[j])))continue;
					else cal(comb[j]);
					for(int k=0;k<sz(comb);k++)
					{
						if(k==0)
						{
							r.clear();
							r=num;
						}
						else num=r;
						if(!(pos(comb[k])))continue;
						else cal(comb[k]);
						for(int l=0;l<sz(comb);l++)
						{
							if(l==0)
							{
								s.clear();
								s=num;
							}
							else num=s;
							if(!(pos(comb[l])))continue;
							else cal(comb[l]);
							flag=true;
							num=p;
							num[a]+=2;
							num[x]--;
							//output(i);output(j);output(k);output(l);
							return flag;
						}
					}
				}
			}
			num=p;
			num[a]+=2;
		}
	}
	num[x]--;
	return false;
}

int main()
{
	string s;
	while(cin >> s)
	{
		ans.clear();
		num.clear();
		for(int i=0;i<10;i++)
		{
			num.pb(0);
		}
		for(int i=0;i<13;i++)
		{
			int p=s[i]-'0';
			num[p]++;
		}
		for(int i=1;i<10;i++)
		{
			if(check(i))
			{
				ans.pb(i);
			}
		}
		if(sz(ans)==0)
		{
			cout << 0 << endl;
		}
		else
		{
			for(int i=0;i<sz(ans);i++)
			{
				if(i==sz(ans)-1)
				{
					cout << ans[i] << endl;
				}
				else
				{
					cout << ans[i] << ' ';
				}
			}
		}
		s.clear();
	}
	return 0;
}