#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000001;
const double EPS = 10e-9;
const int SIZE = 200005;
const int DRZEWO_SIZE = 524288;
char s[SIZE];
int suma[SIZE];
int drzewo[DRZEWO_SIZE];
bool samogloska(char x) {
  switch (x) {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
    case 'A':
    case 'E':
    case 'I':
    case 'O':
    case 'U':
      return true;
  }
  return false;
}
int szukaj(int x) {
  if (drzewo[1] < x) return -1;
  int i = 1;
  while (i < DRZEWO_SIZE / 2) {
    if (drzewo[i * 2 + 1] < x)
      i *= 2;
    else
      i = i * 2 + 1;
  }
  return i - DRZEWO_SIZE / 2;
}
void wstaw(int poz, int x) {
  while (poz > 0) {
    drzewo[poz] = max(drzewo[poz], x);
    poz /= 2;
  }
}
void stworz(int n) {
  for (typeof(0) i = (0); i < (DRZEWO_SIZE); ++i) drzewo[i] = -INF;
  for (typeof(0) i = (0); i < (n); ++i) wstaw(DRZEWO_SIZE / 2 + i, suma[i]);
}
int main() {
  scanf("%s", s);
  int n = strlen(s);
  for (typeof(0) i = (0); i < (n); ++i) {
    suma[i] = suma[i - 1] + (samogloska(s[i]) ? -1 : 2);
  }
  stworz(n);
  int mx = szukaj(0) + 1;
  int ret = 1;
  int j;
  for (typeof(1) i = (1); i < (n); ++i) {
    j = szukaj(suma[i - 1]) - i + 1;
    if (j > mx) {
      mx = j;
      ret = 1;
    } else if (j == mx) {
      ++ret;
    }
  }
  if (!mx)
    printf("No solution\n");
  else
    printf("%d %d\n", mx, ret);
  return 0;
}
