#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define rep(i,n) for(ll i=0;i<(ll)(n);i++)
#define all(a)  (a).begin(),(a).end()
#define pb push_back
#define INF (1e9+1)
//#define INF (1LL<<59)


bool isValid(string tmp){
	int count[300]={};
	rep(i,tmp.size())count[tmp[i]]++;
	rep(i,300)if(count[i]>4)return false;
	
	sort(all(tmp));
	
	rep(i,tmp.size()-1){
		if(tmp[i]==tmp[i+1]){
			string s="";
			rep(j,tmp.size()){
				if(j!=i&&j!=i+1)s+=tmp[j];
			}
			
			vector<bool> used(s.size(),false);
			
			rep(k,s.size()){
				if(used[k])continue;
				int same=0,plus1=0,plus2=0;
				for(int l=k+1;l<s.size();l++){
					if(used[l]==false&&s[k]==s[l])same++;
					if(used[l]==false&&s[k]+1==s[l])plus1++;
					if(used[l]==false&&s[k]+2==s[l])plus2++;
				}
				if(same>=2){
					used[k]=true;
					int c=0;
					for(int l=k+1;l<s.size();l++){
						if(used[l]==false&&s[k]==s[l]){
							used[l]=true;
							c++;
						}
						if(c>=2)break;
					}
				}
				else if(plus1&&plus2){
					used[k]=true;
					for(int l=k+1;l<s.size();l++){
						if(used[l]==false&&s[k]+1==s[l]){
							used[l]=true;
							break;
						}
					}
					for(int l=k+1;l<s.size();l++){
						if(used[l]==false&&s[k]+2==s[l]){
							used[l]=true;
							break;
						}
					}
				}
			}
			bool f=false;
			rep(j,used.size()){
				if(used[j]==false)f=true;
			}
			if(!f)return true;
		}
	}
return false;
}

int main(){
	string s;
	while(cin>>s){
		int c=0;
		for(int i=1;i<=9;i++){
			string tmp = s;
			tmp+='0'+i;
			if(isValid(tmp)){
				if(c)cout<<" ";
				cout<<i;
				c++;
			}
		}
		if(c==0)cout<<0;
		cout<<endl;
	}
}