func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 1000000000;   const int MAXN = 200001;   int c[MAXN * 3 + 10];   int n;   char s[MAXN + 10];   int sum[MAXN + 10];   int lowbit(int x) { return x & (-x); }   void update(int pos, int delta) {     while (pos <= n) {       c[pos] = min(c[pos], delta);       pos += lowbit(pos);     }   }   int query(int end) {     int res = INF;     while (end > 0) {       res = min(res, c[end]);       end -= lowbit(end);     }     return res;   }   bool isvowel(char x) {     if (x ==  a  || x ==  e  || x ==  i  || x ==  o  || x ==  u ) return true;     if (x ==  A  || x ==  E  || x ==  I  || x ==  O  || x ==  U ) return true;     return false;   }   int main() {     scanf( %s , s);     int len = strlen(s);     n = 3 * len + 1;     for (int i = 0; i <= n; i++) {       c[i] = INF;     }     memset(sum, 0, sizeof(sum));     for (int i = 0; i < len; i++) {       sum[i + 1] = sum[i] + (isvowel(s[i]) ? -1 : 2);     }     int ret = -1;     update(sum[0] + len + 1, 0);     for (int i = 1; i <= len; i++) {       int p = query(sum[i] + len + 1);       if (p != INF && i - p > ret) {         ret = i - p;       }       update(sum[i] + len + 1, i);     }     if (ret == -1) {       printf( No solution n );     } else {       int count = 0;       for (int i = 0; i <= len; i++) {         if (i + ret > len) break;         if (sum[i + ret] - sum[i] >= 0) {           count++;         }       }       printf( %d %d n , ret, count);     }     return 0;   }   