#include #include #include #include using namespace std; int main() { string s; cin >> s; int n = s.size(); vector> d(n, vector(n, 0)); for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { cin >> d[i][j]; d[j][i] = d[i][j]; } } int more_iters = 100'000'000; auto rng = std::default_random_engine(787788); pair best = {0, 0}; while (more_iters > 0) { more_iters -= 1; int mask = 0; int sum = 0; for (int i = 0; i < n; i++) { if (rng() % 2) { mask |= (1 << i); for (int prev = 0; prev <= i; prev++) { if (((1 << prev) & mask) != 0) { sum += d[prev][i]; } } } } while (more_iters > 0) { bool found = false; for (int v = 0; v < n; v++) { bool enable = ((1 << v) & mask) == 0; int change_sum = enable ? d[v][v] : -d[v][v]; for (int i = 0; i < n; i++) { more_iters -= 1; if (i == v) { continue; } if (((1 << i) & mask) != 0) { if (enable) { change_sum += d[i][v]; } else { change_sum -= d[i][v]; } } } if (change_sum > 0) { mask ^= (1 << v); sum += change_sum; found = true; } } if (!found) { break; } } if (sum > best.second) { best = {mask, sum}; } } string res = ""; int mask = best.first; for (int i = 0; i < n; i++) { if (((1 << i) & mask) != 0) { res += s[i]; } } cout << res.size() << '\n'; cout << res << '\n'; }