#include <cstdio>
#include <cstring>
using namespace std;

//	1 2 3 4 4 4 5 6 7 7 8 8 9 9

int num[20];
int pattern[20][3];
int m;
bool ok[20];

bool Search(int i, int j)
{
	if (j == 4){
		int cnt = 0;
		for (int k = 1; k <= 9; k++){
//			printf("%d ", num[k]);
			
			cnt += !num[k];
		}
//		puts("");
		
		return (cnt == 9);
	}
	
	if (i == m){
		return false;
	}
	
	if (Search(i + 1, j)){
		return true;
	}
	
	for (int k = 0; k < 3; k++){
		num[pattern[i][k]]--;
	}
	
	bool f = Search(i, j + 1);
	
	for (int k = 0; k < 3; k++){
		num[pattern[i][k]]++;
	}
	
	return (f);
}

int main()
{
	char str[128];
	
	while (scanf("%s", str) != EOF){
		memset(num, 0, sizeof(num));
		memset(pattern, 0, sizeof(pattern));
		memset(ok, false, sizeof(ok));
		
		for (int i = 0; i < 13; i++){
			num[str[i] - '0']++;
		}
/*		
		for (int i = 1; i <= 9; i++){
			printf(" %d", num[i]);
		}
		puts("");
*/		
		for (int i = 1; i <= 9; i++){
			if (num[i] == 4){
				continue;
			}
			
			num[i]++;
			
			m = 0;
			
			for (int j = 1; j <= 9; j++){
				if (num[j] >= 3){
					for (int k = 0; k < 3; k++){
						pattern[m][k] = j;
					}
					m++;
				}
				
				if (num[j] > 0 && num[j + 1] > 0 && num[j + 2] > 0){
					for (int k = 0; k < 3; k++){
						pattern[m][k] = j + k;
					}
					m++;
				}
			}
/*			
			for (int j = 0; j < m; j++){
				for (int k = 0; k < 3; k++){
					printf("%d ", pattern[j][k]);
				}
				puts("");
			}
*/				
			for (int j = 1; j <= 9; j++){
				num[j] -= 2;
				if (Search(0, 0)){
					ok[i] = true;
				}
				num[j] += 2;
			}
			
			num[i]--;
		}
		
		bool f = false;
		for (int i = 1; i <= 9; i++){
			if (ok[i]){
				if (f){
					printf(" ");
				}
				f = true;
				
				printf("%d", i);
			}
		}
		
		if (!f){
			printf("0");
		}
		puts("");
	}
	
	return 0;
}