#include<cstdio>
#include<algorithm>
#define MIN(x,y) ((x>y)? y:x)

using namespace std;

int numbe[10]={0};

bool C(int number[10])
{
	for(int i=1;i<10;i++)
	{
		//printf("%d ",number[i]);
	}
	//printf("\n");
	int ans=0;
	int min=10;
	for(int i=1;i<10;i++)
	{
		ans+=number[i];
		if(number[i]!=0)min=MIN(min,i);
	}
	if(ans==0)return true;
	if(number[min]>=3)
	{
		number[min]-=3;
		if(C(number))return true;
		number[min]+=3;
	}
	if(min<8&&number[min+1]!=0&&number[min+2]!=0)
	{
		number[min]--;
		number[min+1]--;
		number[min+2]--;
		if(C(number))return true;
		number[min]++;
		number[min+1]++;
		number[min+2]++;
	}
	return false;
}

bool check(int number[])
{
	for(int i=1;i<10;i++)
	{
		if(number[i]>=2)
		{
			number[i]-=2;
			if(C(number))return true;
			number[i]+=2;
		}
	}
	return false;
}

int main()
{
	int n[10];
	char c[15];
	while(scanf("%s",c)!=EOF)
	{
		fill(numbe,numbe+10,0);
		for(int i=0;i<13;i++)
		{
			numbe[c[i]-'0']++;
		}
		for(int i=0;i<10;i++)
		{
			n[i]=numbe[i];
		}
		bool flag=true;
		for(int i=1;i<10;i++)
		{
			for(int j=0;j<10;j++)
			{
				numbe[j]=n[j];
			}
			numbe[i]++;
			if(numbe[i]!=5&&check(numbe))
			{
				if(!flag)printf(" ");
				printf("%d",i);
				if(flag)flag=false;
			}
		}
		if(flag)printf("0");
		printf("\n");
	}
	return 0;
}