#include <bits/stdc++.h>
using namespace std;
int n;
char word[200000 + 10];
pair<int, int> val[200000 + 10];
int perm[200000 + 10];
int dp[200000 + 10];
int inv[200000 + 10];
bool cmp(const pair<int, int>& a, const pair<int, int>& b) {
  return (a).first < (b).first ||
         ((a).first == (b).first && (a).second < (b).second);
}
bool is_vowel(char c) {
  if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'A' ||
      c == 'E' || c == 'I' || c == 'O' || c == 'U')
    return true;
  return false;
}
ostream& operator<<(ostream& os, const pair<int, int>& p) {
  return os << "(" << (p).first << ", " << (p).second << ")";
}
void test_case() {
  scanf("%s", word);
  n = strlen(word);
  int x = 0;
  val[0] = make_pair(0, 0);
  for (int i = 0; i < n; ++i) {
    if (is_vowel(word[i]))
      x -= 1;
    else
      x += 2;
    val[i + 1] = make_pair(x, i + 1);
  }
  ++n;
  sort(val, val + n, cmp);
  for (int i = 0; i < n; ++i) perm[i] = (val[i]).second;
  for (int i = 0; i < n; ++i) inv[perm[i]] = i;
  int y = n - 1;
  for (int x = 0; x < n - 1; ++x) {
    while (inv[y] <= x) --y;
    dp[x] = y;
  }
  int best = 0;
  for (int i = 0; i < n - 1; ++i) {
    int tmp = dp[i] - perm[i];
    best = max(best, tmp);
  }
  if (best == 0) {
    cout << "No solution" << endl;
  } else {
    int n_c = 0, n_v = 0;
    for (int i = 0; i < best; ++i)
      if (is_vowel(word[i]))
        ++n_v;
      else
        ++n_c;
    int ct = 0;
    for (int i = 0; i < n - best; ++i) {
      if (n_v <= 2 * n_c) ++ct;
      if (is_vowel(word[i]))
        --n_v;
      else
        --n_c;
      if (i != n - 1 - best) {
        if (is_vowel(word[i + best]))
          ++n_v;
        else
          ++n_c;
      }
    }
    cout << best << " " << ct << endl;
  }
}
int main() {
  test_case();
  return 0;
}
