#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;


bool used[14];
int num[14];

bool ok;

int glv;

int ccc=0;

bool dfs(){
	if(ok)
		return true;

	vector<int> idxs;
	for(int i = 0; i < 14; i++){
		if(!used[i])
			idxs.push_back(i);
	}
	if(idxs.size()==2){
		if(num[idxs[0]]==num[idxs[1]]){
			if(glv==7){
			//	cout<<endl;
			}
			ok=true;
			return true;
		}
	}
	else{
		for(int k = 0; k < idxs.size(); k++){
			// OÂIÔ
			int idx = idxs[k];
			int idx2=-1;
			for(int i = 0; i < 14; i++){
				if(num[i]==num[idx]+1&&!used[i]){
					idx2=i;
				}
			}
			int idx3=-1;
			for(int i = 0; i < 14; i++){
				if(num[i]==num[idx2]+1&&!used[i]){
					idx3=i;
				}
			}
			if(!(idx2==-1||idx3==-1)){
				used[idx]=true;
				used[idx2]=true;
				used[idx3]=true;
				bool r = dfs();
				if(r)
					return true;
				used[idx]=false;
				used[idx2]=false;
				used[idx3]=false;
			}
			
			// ¯¶âÂðÝÁÂIÔ
			idx2=idx3=-1;
			for(int i = 0; i < 14; i++){
				if(!used[i]&&num[idx]==num[i]&&i!=idx){
					if(idx2==-1){
						idx2=i;
					}
					else{
						idx3=i;
						break;
					}
				}
			}
			if(!(idx2==-1||idx3==-1)){
				used[idx]=true;
				used[idx2]=true;
				used[idx3]=true;
				bool r = dfs();
				if(r)
					return true;
				used[idx]=false;
				used[idx2]=false;
				used[idx3]=false;
			}
		}
	}	
	return false;
}

int main(){

	int cnt[10];
	fill(cnt,cnt+10,0);

	while(1){
		vector<int> v;
		bool f=false;
		for(int i = 0; i < 13; i++){
			char ch;
			cin>>ch;
			num[i]=ch-'0';
			cnt[num[i]]++;
		}
		if(cin.eof())
			break;
		for(int i = 1; i <= 9; i++){
			ok=false;
			if(cnt[i]==4)
				continue;
			num[13]=i;
		//	sort(num,num+14);
			// ðªÅ«Ä¢é©Ç¤©
			fill(used,used+14,false);

			glv=i;
			// ðªÅ«½ê
			if(dfs()){
				v.push_back(i);
			}
		}
		if(v.size()==0)
			cout<<0<<endl;
		else{
			for(int i = 0; i < v.size(); i++){
				cout<<v[i];
				if(i==v.size()-1)
					cout<<endl;
				else
					cout<<" ";
			}
		}
		ccc++;
		if(ccc==4){
//			cout<<endl;
		}
	}

	return 0;
}