#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cstring>

using namespace std;

int cnt[10];

bool all_zero() {
    for (int i = 1; i < 10; i++) 
        if (cnt[i] > 0) 
            return false;
    return true;
}

bool dfs() {
    if (all_zero()) return true;
    for (int i = 1; i < 10; i++) {
        if (cnt[i] >= 3) {
            cnt[i] -= 3;
            if (dfs()) {
                cnt[i] += 3;
                return true;
            }
            cnt[i] += 3;
        }
        if (i >= 2 && cnt[i-2] && cnt[i-1] && cnt[i]) {
            cnt[i-2]--; cnt[i-1]--; cnt[i]--;
            if (dfs()) {
                cnt[i-2]++; cnt[i-1]++; cnt[i]++;
                return true;
            }
            cnt[i-2]++; cnt[i-1]++; cnt[i]++;
        }
    }
    return false;
}

bool check() {
//    for (int i = 1; i < 10; i++) {
//        cout << cnt[i] << ' ';
//    }
//    cout << endl;
    for (int i = 1; i < 10; i++) {
        if (cnt[i] >= 2) {
            cnt[i] -= 2;
            if (dfs()) {
                cnt[i] += 2;
                return true;
            }
            cnt[i] += 2;
        }
    }
    return false;
}

bool check_over() {
    for (int i = 1; i < 10; i++) 
        if (cnt[i] > 4) 
            return false;
    return true;
}

int main() {
    string s;
    while (cin >> s) {
        memset(cnt, 0, sizeof(cnt));
        for (int i = 0; i < s.size(); i++) cnt[s[i]-'0']++;

        bool first = true;
        bool found = false;
        for (int i = 1; i < 10; i++) {
            cnt[i]++;
            if (check_over() && check()) {
                if (first) {
                    cout << i;
                    first = false;
                } else {
                    cout << ' ' << i;
                }
                found = true;
            }
            cnt[i]--;
        }
        if (!found) cout << 0;
        cout << endl;
    }
    return 0;
}