#include <bits/stdc++.h>   using namespace std;   int V[200010];   char vowel[] =  aeiouAEIOU ;   int v(int a, int k) {     if (k == 0) return 0;     int x = V[a + k - 1];     if (a > 0) x -= V[a - 1];     return x;   }   int f(int a, int k) { return 2 * k - 3 * v(a, k); }   int g(int k) { return f(0, k); }   bool Good(int a, int k) { return f(a, k) >= 0; }   bool is_vowel(char c) {     for (int i = 0; i < 10; i++) {       if (vowel[i] == c) return true;     }     return false;   }   bool sf(const int& a, const int& b) {     if (g(a) < g(b)) return true;     if (g(a) > g(b)) return false;     return a < b;   }   int Q[200010];   vector<int> P;   int R[200010];   int my_bin_search(int s, string S) {     int a = 0;     int b = P.size() - 1;     while (a <= b) {       int k = (a + b) / 2;       if (P[k] == s)         return k;       else if (sf(P[k], s))         a = k + 1;       else         b = k - 1;     }     throw  element not found ;   }   void create_data(string S) {     int N = S.length();     for (int a = 0; a <= N; a++) {       P.push_back(a);     }     sort(P.begin(), P.end(), sf);     for (int x = 0; x < P.size(); x++) {       R[P[x]] = x;     }     Q[0] = P[0];     for (unsigned int x = 1; x < P.size(); x++) {       Q[x] = min(Q[x - 1], P[x]);     }   }   int main() {     string S;     cin >> S;     int N = S.length();     V[0] = 0;     for (unsigned int i = 0; i < S.length(); i++) {       if (i > 0) V[i] = V[i - 1];       if (is_vowel(S[i])) V[i]++;     }     create_data(S);     int bestk = 0;     for (int a = 0; a <= N; a++) {       int x = R[a];       int b = Q[x];       bestk = max(bestk, a - b);     }     if (bestk == 0) {       cout <<  No solution  << endl;       return 0;     }     int found = 0;     for (int a = 0; (a + bestk) <= N; a++) {       if (Good(a, bestk)) {         found++;       }     }     cout << bestk <<     << found << endl;   }   