#include<cstdio>
#include<algorithm>
#include<vector>
#include<string>
#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<complex>
#include<stack>
#include<cmath>

using namespace std;

#define reps(i,f,n) for(int i=f;i<int(n);i++)
#define rep(i,n) reps(i,0,n)

bool solve2(vector<int>& a){
	
	int nokori = 0;
	rep(i,10)nokori += a[i];
	if(nokori==0){
		return true;
	}
	
	bool ok = false;
	rep(i,10-2){
		if(a[i]>0 && a[i+1]>0 && a[i+2]>0){
			a[i]--;a[i+1]--;a[i+2]--;
			if(solve2(a))ok=true;
			a[i]++;a[i+1]++;a[i+2]++;
		}
	}
	
	rep(i,10){
		if(a[i]>=3){
			a[i]-=3;
			if(solve2(a))ok=true;
			a[i]+=3;
		}
	}
	
	/*
	if(nokori==12){
		printf("!!! ");
		rep(i,a.size())printf("%d-%d ",i,a[i]);printf(" = %d\n",ok);
	}*/
	return ok;
}

bool solve(string a){
	
	vector<int> sum(10);
	rep(i,a.size())sum[a[i]-'0']++;
	
	/*
	rep(i,sum.size()){
		printf("%d-%d ",i,sum[i]);
	}puts("");
	*/
	bool ok = false;
	rep(i,10){
		if(sum[i]>=2){
			sum[i]-=2;
			bool ck = solve2(sum);
			sum[i]+=2;
			
			if(ck==true)ok=true;
		}
	}
	
	rep(i,10)if(sum[i]>4)ok=false;
	
	return ok;
}

int main(){
	
	string s;
	while(cin>>s){
		string a;
		bool flg = false;
		vector<int> lis;
		reps(i,1,10){
			a=s+char('0'+i);
			
			if(solve(a)){
				lis.push_back(i);
			}
		}
		if(lis.size()==0)printf("0");
		rep(i,lis.size()){
			if(i!=0)printf(" ");
			printf("%d",lis[i]);
		}puts("");
	}
}