#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:300000000")
using namespace std;
const double pi = 3.1415926535897932384626433832795;
template <class T>
T abs(const T &a) {
  return a >= 0 ? a : -a;
};
template <class T>
T sqr(const T &x) {
  return x * x;
}
string s;
int ma = 0;
int blockSize = 450;
int v[500000];
int add[600];
int bMax[600];
void doAdd(int r, int d) {
  int b = r / blockSize;
  for (int i = 0; i < (b); i++) add[i] += d;
  for (int i = b * blockSize; i <= r; i++) v[i] += d;
}
int getF(int r) {
  int b = r / blockSize;
  for (int i = 0; i < (b); i++)
    if (bMax[i] + add[i] >= 0) {
      for (int j = 0; j < (blockSize); j++)
        if (v[i * blockSize + j] + add[i] >= 0) return i * blockSize + j;
    }
  for (int i = b * blockSize; i <= r; i++)
    if (v[i] >= 0) return i;
  return 123456789;
}
bool isVowel(char ch) {
  return ch == 'a' || ch == 'o' || ch == 'e' || ch == 'i' || ch == 'u';
}
int main() {
  cin >> s;
  for (int i = 0; i < (int((s).size())); i++) s[i] = tolower(s[i]);
  for (int i = 0; i < (600); i++) bMax[i] = -123456789;
  int maLen = 0;
  for (int i = 0; i < (int((s).size())); i++) {
    int d;
    if (isVowel(s[i]))
      d = -1;
    else
      d = 2;
    doAdd(i, d);
    int b = i / blockSize;
    bMax[b] = max(bMax[b] + d, d);
    int f = getF(i);
    int len = i - f + 1;
    maLen = max(maLen, len);
  }
  if (maLen == 0) {
    cout << "No solution";
    return 0;
  }
  int cnt = 0;
  int D = 0;
  for (int i = 0; i < (int((s).size())); i++) {
    int d;
    if (isVowel(s[i]))
      d = -1;
    else
      d = 2;
    D += d;
    if (i >= maLen) {
      if (isVowel(s[i - maLen]))
        d = 1;
      else
        d = -2;
      D += d;
    }
    if (D >= 0 && i >= maLen - 1) cnt++;
  }
  cout << maLen << ' ' << cnt;
}
