func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 200000 + 10;   const int M = 5 * N;   const int OO = 1000000000;   int ans = 0;   int anum = 0;   int i;   int n;   int result;   int sum[N];   int tree[M];   string s;   int lowbit(int x) { return x & (-x); }   int min(int a, int b) { return a < b ? a : b; }   int ask(int x) {     int i = x;     int result = OO;     while (i > 0) {       result = min(result, tree[i]);       i -= lowbit(i);     }     return result;   }   void update(int x, int y) {     int i = x;     while (i < M) {       tree[i] = min(tree[i], y);       i += lowbit(i);     }   }   int main() {     getline(cin, s);     n = s.size();     for (i = 0; i < n; i++)       if (s[i] >=  a  && s[i] <=  z ) s[i] = s[i] -  a  +  A ;     for (i = 0; i < n; i++) {       sum[i + 1] = sum[i];       if (s[i] ==  A  || s[i] ==  E  || s[i] ==  I  || s[i] ==  O  || s[i] ==  U )         sum[i + 1]--;       else         sum[i + 1] += 2;     }     for (i = 0; i <= n; i++) sum[i] += 2 * n;     for (i = 0; i < M; i++) tree[i] = OO;     update(sum[0], 0);     for (i = 1; i <= n; i++) {       result = ask(sum[i]);       if (i - result > ans) {         ans = i - result;         anum = 0;       }       if (i - result == ans) anum++;       update(sum[i], i);     }     if (ans > 0)       cout << ans <<     << anum <<   n ;     else       cout <<  No solution n ;     return 0;   }   