func_code_string: # include <algorithm>   # include <iostream>   # include <numeric>   # include <vector>   # include <set>      using namespace std;      int main() {     int n, a, b;     while (cin >> n >> a >> b) {       string s;       cin >> s;       set<char> chars_set;       for (char c : s) {         chars_set.insert(c);       }       vector<char> chars(chars_set.begin(), chars_set.end());       int cc = (int)chars.size();       vector<int> L(cc, n + 1);       vector<int> R(cc, -1);       vector<int> cnt(cc, 0);       for (int i = 0; i < n; i++) {         for (int j = 0; j < cc; j++) {           if (s[i] == chars[j]) {             L[j] = min(L[j], i);             R[j] = max(R[j], i);             cnt[j] += 1;           }         }       }       vector<int> order(cc);       iota(order.begin(), order.end(), 0);       sort(order.begin(), order.end(), [&](int i, int j) {         return L[i] < L[j];       });       vector<int> order2 = order;       sort(order2.begin(), order2.end(), [&](int i, int j) {         return R[i] < R[j];       });       vector<int> order3 = order;       sort(order3.begin(), order3.end(), [&](int i, int j) {         return (L[i] + R[i]) / 2 < (L[j] + R[j]) / 2;       });       vector<int> order4 = order;       sort(order4.begin(), order4.end(), [&](int i, int j) {         return cnt[i] < cnt[j];       });       vector<bool> can(1 << cc, 0);       can[0] = 1;       for (int t = 1; t < (1 << cc); t++) {         int max_R = -1;         int min_L = -1;         int total = 0;         for (int i : order) {           if (!(t & (1 << i))) {             continue;           }           if (min_L == -1) {             min_L = L[i];           }           total += cnt[i];           max_R = max(max_R, R[i]);         }         int len = max_R - min_L + 1;         if (total * b >= a * len) {           can[t] = 0;           for (int i = 0; i < cc; i++) {             if (t & (1 << i)) {               if (can[t ^ (1 << i)]) {                 can[t] = 1;                 break;               }             }           }           if (can[t]) {             continue;           }         }         int nt = 0;         for (auto& v : {order, order2, order3, order4}) {           for (int i : v) {             if (!(t & (1 << i))) {               continue;             }             nt |= (1 << i);             if (nt != t && can[nt] && can[t ^ nt]) {               can[t] = 1;               break;             }           }         }       }       string ret =   ;       for (int i = 0; i < cc; i++) {         if (can[(1 << cc) - 1 - (1 << i)]) {           ret += chars[i];         }       }       cout << ret.size();       for (char c : ret) {         cout <<     << c;       }       cout <<   n ;     }     return 0;   } //