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

class Figure{
public:
	Figure(){
		for ( int i = 0; i < 10; ++i ){
			new( n + i ) int( 0 );
		}
	}

	bool isRemain(){
		for ( int i = 0; i < 10; ++i ){
			if ( n[ i ] ) return true;
		}
		return false;
	}

	void operator=( Figure f ){
		for ( int i = 0; i < 10; ++i ){
			n[ i ] = f.n[ i ];
		}
	}
	int& operator[]( int index ){
		return n[ index ];
	}


	int n[ 10 ];
};

bool makeMeld( Figure& o ){
	if ( !o.isRemain() ) return true;

	for ( int i = 1; i < 10; ++i ){
		if ( o[ i ] >= 3 ){
			o[ i ] -= 3;
			if ( makeMeld( o ) ){
				return true;
			}
			o[ i ] += 3;
		}
		if ( i <= 7 && ( o[ i ] && o[ i + 1 ] && o [ i + 2 ] ) ){
			--o[ i ];
			--o[ i + 1 ];
			--o[ i + 2 ];
			if ( makeMeld( o ) ){
				return true;
			}
			++o[ i ];
			++o[ i + 1 ];
			++o[ i + 2 ];
		}
	}
	return false;
}

bool makeHand( Figure& o ){
	for ( int i = 1; i < 10; ++i ){
		Figure n = o;
		if ( n[ i ] >= 2 ){
			n[ i ] -= 2;
			if ( makeMeld( n ) ){
				return true;
			}
		}
	}
	return false;
}

int main(){
	string s;
	while ( cin >> s ){
		Figure fig;
		bool result[ 10 ] = { false };
		for ( unsigned i = 0; i < s.size(); ++i ){
			++fig[ s[ i ] - '0' ];
		}

		for ( int i = 1; i < 10; ++i ){
			if ( fig[ i ] == 4 ) continue;
			++fig[ i ];
			result[ i ] = makeHand( fig );
			--fig[ i ];
		}

		bool first = true;
		for ( int i = 1; i < 10; ++i ){
			if ( result[ i ] ){
				if ( first ){
					cout << i;
					first = false;
				}else{
					cout << " " << i;
				}
			}
		}
		if ( first ) cout << 0;
		cout << endl;
	}
	return 0;
}