#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;
}
