#include <bits/stdc++.h>
using namespace std;
const double PI = 3.14159265358979323846;
const double eps = (1e-10);
int isGreater(long double x, long double y) {
  if (abs(x - y) < eps) return 0;
  if (x > y) return 1;
  return -1;
}
const int MAX_S = 4e5 + 5, MAX_N = 2e5 + 5;
int a[MAX_N], minLeft[MAX_N];
string VOWEL = "aeiou";
bool isVowel(char c) {
  c = tolower(c);
  return find(VOWEL.begin(), VOWEL.end(), c) != VOWEL.end();
}
int t[4 * 2 * MAX_S];
void update(int i, int val, int p = 1, int l = -MAX_S, int r = MAX_S - 1) {
  if (l == r)
    t[p] = min(t[p], val);
  else {
    int mid = l + (r - l) / 2;
    if (i <= mid)
      update(i, val, 2 * p, l, mid);
    else
      update(i, val, 2 * p + 1, mid + 1, r);
    t[p] = min(t[2 * p], t[2 * p + 1]);
  }
}
int get(int stq, int enq, int p = 1, int l = -MAX_S, int r = MAX_S - 1) {
  if (l >= stq && r <= enq) return t[p];
  if (l > enq || r < stq) return INT_MAX;
  int mid = l + (r - l) / 2;
  return min(get(stq, enq, 2 * p, l, mid),
             get(stq, enq, 2 * p + 1, mid + 1, r));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  string s;
  cin >> s;
  for (int i = 0; i < (int)((s).size()); ++i) {
    char c = s[i];
    if (!isVowel(c))
      a[i] = 2;
    else
      a[i] = -1;
  }
  int sum = 0, maxLen = -1e9;
  memset(t, 0x7F, sizeof(t));
  memset(minLeft, 0x7F, sizeof(minLeft));
  for (int i = 0; i < (int)((s).size()); ++i) {
    sum += a[i];
    update(sum, i);
    if (sum >= 0)
      minLeft[i] = -1;
    else
      minLeft[i] = get(-MAX_S, sum);
    maxLen = max(maxLen, i - minLeft[i]);
  }
  if (maxLen <= 0) {
    cout << "No solution\n";
    return 0;
  }
  int cnt = 0;
  for (int i = 0; i < (int)((s).size()); ++i) {
    if (i - minLeft[i] == maxLen) cnt++;
  }
  cout << maxLen << " " << cnt << '\n';
  return 0;
}
