#include <bits/stdc++.h>
using namespace std;
const long long maxn = 5e5 + 7;
const long long mod = 1e9 + 7;
const long long INF = 1e9 + 7;
const long long mlog = 20;
const long long maxl = 26;
const long long SQ = 400;
long long n, m;
long long a[maxn], b[maxn], fen[maxn];
pair<long long, long long> ans;
inline bool is_vowel(char c) {
  if (c < 'a') c += 'a' - 'A';
  for (auto x : {'a', 'e', 'i', 'o', 'u'})
    if (c == x) return true;
  return false;
}
inline void ADD(long long p, long long x) {
  for (p = m - p; p; p -= p & -p) {
    fen[p] = min(fen[p], x);
  }
}
inline long long GET(long long p) {
  long long ans = n;
  for (p = m - p; p <= m; p += p & -p) ans = min(ans, fen[p]);
  return ans;
}
int32_t main() {
  ios_base::sync_with_stdio(false), cin.tie(), cout.tie();
  ;
  string s;
  cin >> s;
  n = s.size();
  for (long long i = 0; i < n; i++)
    a[i + 1] = b[i + 1] = a[i] + (is_vowel(s[i]) ? -1 : 2);
  sort(b, b + n + 1);
  memset(fen, 63, sizeof fen);
  m = unique(b, b + n + 1) - b;
  for (long long i = 0; i < n; i++) {
    long long id = lower_bound(b, b + m, a[i]) - b;
    ADD(id, i);
    long long idx = lower_bound(b, b + m, a[i + 1]) - b;
    long long len = i + 1 - GET(idx);
    if (ans.first < len)
      ans = {len, 1};
    else if (ans.first == len)
      ans.second++;
  }
  if (!ans.first) return cout << "No solution\n", 0;
  cout << ans.first << ' ' << ans.second << "\n";
  return 0;
}
