#include <iostream>
#include <utility>
#include <algorithm>
#include <string>
#include <vector>
#include <cstdio>
#include <cmath>

typedef long long int ll;


using namespace std;

string s;

bool is_agari_s(vector<int> h,int len);
bool is_agari_k(vector<int> h,int len);

bool is_agari_k(vector<int> h,int len){//koutu
	if(len==0)return true;
	for(int i=0; i<len-2; i++){
		if(h[i]==h[i+1]&&h[i+1]==h[i+2]){
			vector<int> h2;
			for(int j=0; j<len; j++){
				h2.push_back(h[j]);
				if(j==i||j==i+1||j==i+2){
					h2.pop_back();
				}
			}
			return (is_agari_k(h2,len-3)||is_agari_s(h2,len-3));
		}
	}
	return false;
}

bool is_agari_s(vector<int> h,int len){//shuntu
	if(len==0)return true;
	for(int i=0; i<len-2; i++){
		for(int j=i; j<len-1; j++){
			if(h[j]==h[i]+1){
				for(int k=j; k<len; k++){
					if(h[k]==h[j]+1){
						vector<int> h2;
						for(int l=0; l<len; l++){
							h2.push_back(h[l]);
							if(l==i||l==j||l==k){
								h2.pop_back();
							}
						}
						return (is_agari_k(h2,len-3)||is_agari_s(h2,len-3));
					}
				}
			}
		}
	}
	return false;
}


int main(){
	while(cin>>s){
		vector<char> t(14,0);
		vector<int> cnt(10,0);
		for(int j=0; j<13; j++){
			t[j]=s[j]-'0';
			cnt[t[j]]+=1;
		}
		bool zeflag=true;
		bool spflag=false;
		for(int i=1; i<=9; i++){//agarihai=i;
			if(cnt[i]>=4)continue;
			for(int k=1; k<=9; k++){
				vector<int> u(14,0);
				vector<int> cnt2=cnt;
				for(int j=0; j<13; j++){
					u[j]=t[j];
				}
				u[13]=i;
				cnt2[i]+=1;
				sort(u.begin(),u.end());
				if(cnt2[k]>=2){//toitu=k;
					cnt2[k]-=2;
					for(int l=0; l<14; l++){
						if(u[l]==k){
							u[l]=100;
							u[l+1]=100;
							break;
						}
					}
					sort(u.begin(),u.end());
					if(is_agari_k(u,12)||is_agari_s(u,12)){
						zeflag=false;
						if(spflag)printf(" ");
						cout<<i;
						spflag=true;
						break;
					}
				}
			}
		}
		if(zeflag)cout<<"0";
		cout<<endl;
	}
}