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

const string com[16] = { "123", "234", "345", "456", "567", "678", "789",
	"111", "222", "333", "444", "555", "666", "777", "888", "999" };

bool sub(string& str, string tar)
{
	bool f = 1;
	string::iterator it;
	for (int i=0; i<tar.size(); i++)
		if ((it=find(str.begin(), str.end(), tar[i])) == str.end())
		{
			f = 0; break;
		}
		else
			str.erase(it);

	return f;
}

bool check(string str)
{
	bool ok=0, f=1;
	for (int i=1; i<10; i++)
	{
		string p(2, '0'+i);
		string tmp = str;
		if (!sub(tmp, p))
			continue;

		for (int k=0; f&&k<16; k++)
		{
			string t1 = tmp;
			if (!sub(t1, com[k]))
				continue;
			for (int l=0; f&&l<16; l++)
			{
				string t2 = t1;
				if (!sub(t2, com[l]))
					continue;
				for (int m=0; f&&m<16; m++)
				{
					string t3 = t2;
					if (!sub(t3, com[m]))
						continue;
					for (int n=0; f&&n<16; n++)
					{
						string t4 = t3;
						if (!sub(t4, com[n]))
							continue;

						if (t4 == "")
						{
							f=0; ok=1; break;
						}
					}
				}
			}
		}
	}

	return ok;
}

int main()
{
	string str;
	while (cin >> str)
	{
		bool v[10] = {0};
		for (int i=1; i<10; i++)
			if (count(str.begin(), str.end(), '0'+i) == 4)
				v[i] = 1;

		vector<int> ans;
		for (int i=1; i<10; i++)
		{
			if (v[i]) continue;
			string tmp = str;
			tmp.push_back('0'+i);
			if (check(tmp))
				ans.push_back(i);
		}

		if (ans.size())
			for (int i=0; i<ans.size(); i++)
			{
				cout << ans[i];
				if (i < ans.size()-1)
					cout << ' ';
				else
					cout << endl;
			}
		else
			cout << 0 << endl;
	}
}