#include<bits/stdc++.h>
#define rep(i,n)for(int i=0;i<n;i++)
using namespace std;

int d[14];
int memo[10][4][2][1 << 14];
bool solve(int p, int cnt, bool r,int u) {
	if (memo[p][cnt][r][u] != -1)return memo[p][cnt][r][u];
	bool ok = false;
	if (cnt == 3) {
		int f = -1, s = -1;
		rep(i, 14) {
			if (!(u>>i&1)) {
				if (f == -1)f = d[i];
				else if (s == -1)s = d[i];
				else ok = true;
			}
		}
		if (!ok) {
			if (f == s)return memo[p][cnt][r][u]=true;
			return memo[p][cnt][r][u]=false;
		}
		ok = true; cnt = 0;
	}
	rep(i, 14) {
		if (!(u>>i&1) && (ok || (r&&d[i] == p + 1) || (!r&&d[i] == p))) {
			u |= 1 << i;
			if (solve(d[i], cnt + 1, r,u))return memo[p][cnt][r][u]=true;
			if (ok) {
				if (solve(d[i], cnt + 1, !r,u))return memo[p][cnt][r][u]=true;
			}
			u ^= 1 << i;
		}
	}
	return memo[p][cnt][r][u]=false;
}
int main() {
	while (1) {
		int cnt[10]{};
		rep(i, 13) {
			if (!~scanf("%1d", &d[i]))return 0;
			cnt[d[i]]++;
		}
		bool flag = false;
		for (int i = 1; i <= 9; i++) {
			if (cnt[i] >= 4)continue;
			d[13] = i;
			memset(memo, -1, sizeof(memo));
			if (solve(0, 3, 0, 0)) {
				if (flag)printf(" ");
				printf("%d", i);
				flag = true;
			}
		}
		if (!flag)printf("0");
		printf("\n");
	}
}