#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 200000;
const int MAX_E2 = 1 << 19;
const long long LINF = 1LL << 62;
const char vcs[] = "AEIOUaeiou";
template <typename T, const int MAX_E2>
struct SegTreeMax {
  int n, e2;
  T nodes[MAX_E2], tinf;
  SegTreeMax() {}
  void init(int _n, T _tinf) {
    n = _n;
    tinf = _tinf;
    for (e2 = 1; e2 < n; e2 <<= 1)
      ;
    fill(nodes, nodes + MAX_E2, -tinf);
  }
  T &get(int i) { return nodes[e2 - 1 + i]; }
  void set(int i, T v) { get(i) = v; }
  void setall() {
    for (int j = e2 - 2; j >= 0; j--)
      nodes[j] = max(nodes[j * 2 + 1], nodes[j * 2 + 2]);
  }
  int find_maxindex(int r0, int r1, T v, int k, int i0, int i1) {
    if (r1 <= i0 || i1 <= r0) return -1;
    if (r0 <= i0 && i1 <= r1) {
      if (nodes[k] < v) return -1;
      if (i0 + 1 >= i1) return i0;
    }
    int im = (i0 + i1) / 2;
    int idx1 = find_maxindex(r0, r1, v, k * 2 + 2, im, i1);
    if (idx1 >= 0) return idx1;
    int idx0 = find_maxindex(r0, r1, v, k * 2 + 1, i0, im);
    return idx0;
  }
  int find_maxindex(int r0, int r1, T v) {
    return find_maxindex(r0, r1, v, 0, 0, e2);
  }
};
bool vmap[128];
SegTreeMax<long long, MAX_E2> st;
char s[MAX_N + 4];
int as[MAX_N + 1];
int main() {
  for (int i = 0; vcs[i]; i++) vmap[vcs[i]] = true;
  scanf("%s", s);
  int n = strlen(s);
  st.init(n + 1, LINF);
  st.set(0, 0);
  for (int i = 0; i < n; i++) st.set(i + 1, st.get(i) + (vmap[s[i]] ? -1 : 2));
  st.setall();
  int maxl = 0, maxc = 0;
  for (int i = 0; i < n; i++) {
    int l = st.find_maxindex(i, n + 1, st.get(i)) - i;
    if (maxl < l)
      maxl = l, maxc = 1;
    else if (maxl == l)
      maxc++;
  }
  if (maxl <= 0)
    puts("No solution");
  else
    printf("%d %d\n", maxl, maxc);
  return 0;
}
