OIG VI - gum

// https://szkopul.edu.pl/problemset/problem/CNrWfGt3eL5nu1HJ_Og05_v4/site/?key=statement

#include <iostream>

constexpr int sizik = 10 * 1001;

int ppt[sizik], temp[sizik];
std::string v[sizik];

int main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int n;
    std::cin >> n;

    for (int i = 1; i <= n; i++) {
        ppt[i] = -1;
        std::cin >> v[i];
    }

    std::string ans;

    for (char c = 'z'; c >= 'a';) {
        bool flag = true;

        for (int i = 1; i <= n; i++) {
            int local_ptr = ppt[i] + 1;

            bool local_flag = false;
            while (local_ptr < v[i].size()) {
                if (v[i][local_ptr] == c) {
                    local_flag = true;
                    break;
                } else {
                    local_ptr++;
                }
            }

            if (!local_flag) {
                flag = false;
            } else {
                temp[i] = local_ptr;
            }
        }

        if (flag) {
            for (int i = 1; i <= n; i++) {
                ppt[i] = temp[i];
            }

            ans += c;
        } else {
            c--;
        }
    }

    if (ans > "bitek") {
        std::cout << ans << '\n';
    } else {
        std::cout << "bitek\n";
    }

    return 0;
}