#include <bits/stdc++.h>
using namespace std;
int n, i, j, sol[200010], arb[4 * 200010], nr = 0, maxx = 0, pos;
char s[200010];
inline int min(int a, int b) {
  if (a < b)
    return a;
  else
    return b;
}
bool vowel(char s) {
  if (s < 97) s = s + 32;
  return (s == 'a' || s == 'e' || s == 'i' || s == 'o' || s == 'u');
}
void build(int nod, int st, int dr) {
  if (st == dr)
    arb[nod] = sol[st];
  else {
    int m = (st + dr) / 2;
    build(nod * 2, st, m);
    build(nod * 2 + 1, m + 1, dr);
    arb[nod] = min(arb[nod * 2], arb[nod * 2 + 1]);
  }
}
void query(int nod, int st, int dr) {
  if (st == dr) {
    pos = st;
    return;
  } else {
    int m = (st + dr) / 2;
    if (arb[nod * 2] <= sol[i])
      query(nod * 2, st, m);
    else
      query(nod * 2 + 1, m + 1, dr);
  }
}
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  sol[1] = 0;
  n++;
  for (i = 2; i <= n; i++)
    if (vowel(s[i - 1]))
      sol[i] = sol[i - 1] - 1;
    else {
      maxx = 1;
      sol[i] = sol[i - 1] + 2;
    }
  sol[0] = 0x3f3f3f3f;
  build(1, 1, n);
  for (i = n; i >= 0; i--) {
    pos = 0;
    query(1, 1, n);
    if (i - pos > maxx)
      maxx = i - pos, nr = 1;
    else if (i - pos == maxx)
      nr++;
  }
  if (maxx == 0)
    puts("No solution");
  else
    printf("%d %d\n", maxx, nr);
  return 0;
}
