#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pli = pair<ll, int>;
using pil = pair<int, ll>;
template <typename T>
using Array = vector<T>;
template <typename T>
using Matrix = Array<Array<T>>;
using Graph = Matrix<int>;
template <typename T>
bool relax(T& r, const T& first) {
  if (first < r) {
    r = first;
    return true;
  }
  return false;
}
template <typename T>
bool heavy(T& h, const T& first) {
  if (h < first) {
    h = first;
    return true;
  }
  return false;
}
const int DX[8] = {-1, +1, +0, +0, +1, -1, +1, -1};
const int DY[8] = {+0, +0, -1, +1, +1, -1, -1, +1};
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  string s;
  cin >> s;
  map<int, int> stock;
  stock[0] = -1;
  int pref = 0;
  int mxlen = 0, cnt = 0;
  for (int r = 0; r < ((int)s.size()); r++) {
    char c = tolower(s[r]);
    pref +=
        ((c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') ? +1 : -2);
    auto it = stock.lower_bound(pref);
    if (it != stock.end()) {
      int l = it->second;
      int len = r - l;
      if (mxlen == len) cnt++;
      if (len > mxlen) {
        mxlen = len;
        cnt = 1;
      }
    }
    if (stock.empty() || pref > prev(stock.end())->first) stock[pref] = r;
  }
  if (!mxlen || !cnt)
    cout << "No solution";
  else
    cout << mxlen << ' ' << cnt;
  return false;
}
