func_code_string: #include <bits/stdc++.h>   using namespace std;   struct info {     long long int val, in;   };   long long int arr[100010];   info tree[100010 * 4], temp;   void init(long long int node, long long int b, long long int e) {     if (b == e) {       tree[node].val = arr[b];       tree[node].in = b;       return;     }     long long int Left = node * 2;     long long int Right = node * 2 + 1;     long long int mid = (b + e) / 2;     init(Left, b, mid);     init(Right, mid + 1, e);     if (tree[Left].val >= tree[Right].val) {       tree[node].val = tree[Right].val;       tree[node].in = tree[Right].in;     } else {       tree[node].val = tree[Left].val;       tree[node].in = tree[Left].in;     }   }   info query(long long int node, long long int b, long long int e,              long long int i, long long int j) {     if (i > e || j < b) {       temp.in = temp.val = 30;       return temp;     }     if (b >= i && e <= j) return tree[node];     long long int Left = node * 2;     long long int Right = node * 2 + 1;     long long int mid = (b + e) / 2;     info p1 = query(Left, b, mid, i, j);     info p2 = query(Right, mid + 1, e, i, j);     if (p1.val >= p2.val)       return p2;     else       return p1;   }   int main() {     long long int i, j, len, mn = 30, m, last = 1, in;     long long int used = -1;     string s;     vector<char> v, ans;     char mxx =  a  - 1;     cin >> m >> s;     len = s.length();     for (i = 0; i < s.length(); i++) {       arr[i + 1] = s[i] -  a  + 1;     }     init(1, 1, len);     for (i = 1; i <= len - m + 1; i++) {       info ret = query(1, 1, len, i, i + m - 1);       if (used == -1) {         used = ret.in;         i = ret.in;         last = ret.val;         v.push_back(last - 1 +  a );         mxx = max(mxx, (char)(last - 1 +  a ));       } else {         if (ret.val == last && used == ret.in) {         } else {           used = ret.in;           i = ret.in;           last = ret.val;           v.push_back(last - 1 +  a );           mxx = max(mxx, (char)(last - 1 +  a ));         }       }     }     if (v.size() == 0) v.push_back(s[0]);     sort(v.begin(), v.end());     long long int inx = v.size() - 1;     long long int cnt = 0;     for (i = 0; i < v.size(); i++) {       if (v[i] == v[inx]) cnt++;     }     for (i = 0; i < s.length(); i++) {       if (s[i] < v[inx]) ans.push_back(s[i]);     }     for (i = 1; i <= cnt; i++) {       ans.push_back(v[inx]);     }     sort(ans.begin(), ans.end());     for (i = 0; i < ans.size(); i++) {       cout << ans[i];     }     cout << endl;     return 0;   }   