#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

struct rest{
	int i;
	int u;
};

int index(char c){
	return (int)c - 48;
}

bool three(int a, int b, int c){
	if(a == b && a == c) return true;
	if(b == a + 1 && c == b + 1) return true;
	return false;
}

bool head(int a, int b){
	if(a == b){
		return true;
	}else{
		return false;
	}
}

int threes(rest a[12]){
	int i = 0;
	while(a[i].u == 0) i++;
	int num = a[i].i;
	a[i].u = 0;
	int j = 0;
	while(j < 12 && (a[j].u == 0 || a[j].i != num)) j++;
	if(j < 12){
		a[j].u = 0;
		int k = 0;
		while(k < 12 && (a[k].u == 0 || a[k].i != num)) k++;
		if(k < 12){
			a[k].u = 0;
			return 1;
		}else  {
			a[j].u = 1;
		}
	}
	j = 0;
	while(j < 12 && (a[j].u == 0 || a[j].i != num+1)) j++;
	if(j < 12){
		a[j].u = 0;
		int k =0;
		while(k < 12 && (a[k].u == 0 || a[k].i != num + 2)) k++;
		if(k < 12){
			a[k].u = 0;
			return 1;
		}
	}
	return 0;
}



bool able(int num[14]){
	rest a[12];
	for(int i = 0; i < 13; i++){
		if(head(num[i], num[i+1])){
			int j = 0;
			while(j < i){
				a[j].i = num[j];
				a[j].u = 1;
				j++;
			}
			while(j < 12){
				a[j].i = num[j+2];
				a[j].u = 1;
				j++;
			}
			threes(a);
			threes(a);
			threes(a);
			threes(a);
			int k = 0;
			for(int l = 0; l < 12; l++){
				if(a[l].u) k++;
			}
			if(k == 0) return true;
		}
	}
	return false;
}

bool judge(int num[14]){
	sort(num, num+14);
	if(able(num)) return true;
	return false;
}


int main(){
	string s;
	while(cin >> s){
		int nums[14];
		int count = 0;
		string::size_type size = s.size();
		for(int i = 1; i <= 9; i++){
			for(string::size_type st = 0; st < size; st++)
			{
				nums[st] = index(s[st]);
			}
			int c = 0;
			for(int j = 0; j < 13; j++){
				if(nums[j] == i) c++;
			}
			if(c < 4){
				nums[13] = i;
				if(judge(nums)){
					if(count){
						cout << " " << i;
					}else {
						cout<< i;
					}
					count++;
				}
			}
		}
		if(count == 0) cout << 0;
		cout << endl;
	}
	return 0;
}