func_code_string: #include <bits/stdc++.h>   using namespace std;   const int L = 1 << 20;   const int R = 1 << 21;   const int Maxn = 200005;   int tree[R], A, B;   int d[Maxn];   char s[Maxn];   bool vowel(char x) {     x = tolower(x);     if (x ==  a  || x ==  e  || x ==  i  || x ==  o  || x ==  u ) return 1;     return 0;   }   int read(int lo, int hi, int x) {     if (hi < A || lo > B) return Maxn;     if (A <= lo && hi <= B) return tree[x];     int mid = (lo + hi) >> 1;     return min(read(lo, mid, 2 * x), read(mid + 1, hi, 2 * x + 1));   }   void update(int x, int id) {     tree[x] = min(id, tree[x]);     for (x >>= 1; x > 0; x >>= 1) tree[x] = min(tree[2 * x], tree[2 * x + 1]);   }   int main() {     for (int i = 0; i < R; ++i) tree[i] = Maxn;     scanf( %s , s);     int n = strlen(s);     for (int i = 0; i < n; ++i) {       if (i) d[i] = d[i - 1];       if (vowel(s[i]))         --d[i];       else         d[i] += 2;     }     for (int i = 0; i < n; ++i) d[i] += Maxn;     update(L + Maxn, -1);     int sol = 0, cnt = 0;     for (int i = 0; i < n; ++i) {       A = L, B = L + d[i];       int id = read(L, R - 1, 1);       update(L + d[i], i);       if (id == Maxn) continue;       if (i - id > sol)         sol = i - id, cnt = 1;       else if (i - id == sol)         ++cnt;     }     if (!sol)       printf( No solution n );     else       printf( %d %d n , sol, cnt);     return 0;   }   