#include <bits/stdc++.h>
using namespace std;
const long long Mod = 7 + 1e9;
const long long INF32 = 5 + 2e9;
const long long INF64 = 5 + 1e18;
const long long MAX = 5 + 2e5;
int n, a[MAX];
char v[] = {'a', 'e', 'i', 'o', 'u'};
map<int, int> H;
map<char, bool> vo;
string s;
int T[4 * MAX], TAR, VAL;
int update(int x = 1, int l = 0, int r = n) {
  if (r < TAR || l > TAR) return T[x];
  if (l == r) return T[x] = min(T[x], VAL);
  int mid = l + r >> 1, c1 = x << 1, c2 = x << 1 | 1;
  return T[x] = min(update(c1, l, mid), update(c2, mid + 1, r));
}
int query(int x = 1, int l = 0, int r = n) {
  if (l > TAR) return INF32;
  if (r <= TAR) return T[x];
  int mid = l + r >> 1, c1 = x << 1, c2 = x << 1 | 1;
  return min(query(c1, l, mid), query(c2, mid + 1, r));
}
int main() {
  for (char c : v) vo[c] = vo[toupper(c)] = true;
  cin >> s;
  n = s.size();
  for (int i = 0; i < n; i++)
    a[i + 1] = (vo[s[i]] ? -1 : 2) + a[i], H[a[i + 1]];
  int mx = 0, cnt = 0;
  H[0];
  for (auto &i : H) i.second = cnt++;
  cnt = 0;
  for (int i = 1; i <= 4 * n; i++) T[i] = INF32;
  for (int i = 0; i <= n; i++) {
    TAR = H[a[i]];
    VAL = i;
    update();
    int idx = query();
    if (idx == INF32) continue;
    if (mx < i - idx)
      mx = i - idx, cnt = 1;
    else if (mx == i - idx)
      cnt++;
  }
  if (mx)
    cout << mx << ' ' << cnt << endl;
  else
    cout << "No solution\n";
  return 0;
}
