#include <bits/stdc++.h>
using namespace std;
const int N = 200021;
struct Tree {
  int l, r, val;
};
int maxm;
char s[N];
Tree tree[N * 4];
int sum[N];
inline int value(char c) {
  if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') return 1;
  if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') return 1;
  return 0;
}
void build(int now, int l, int r) {
  if (l == r) {
    tree[now].l = l;
    tree[now].r = r;
    tree[now].val = 3 * sum[l] - 2 * l;
    return;
  }
  int mid = (l + r) >> 1;
  tree[now].l = l;
  tree[now].r = r;
  build(now * 2, l, mid);
  build(now * 2 + 1, mid + 1, r);
  tree[now].val = min(tree[now * 2].val, tree[now * 2 + 1].val);
}
void fnd(int now, int a, int b) {
  int l = tree[now].l, r = tree[now].r;
  if (a <= l && r <= b) {
    maxm = min(maxm, tree[now].val);
    return;
  }
  int mid = (l + r) >> 1;
  if (b <= mid)
    fnd(now * 2, a, b);
  else if (a > mid)
    fnd(now * 2 + 1, a, b);
  else {
    fnd(now * 2, a, mid);
    fnd(now * 2 + 1, mid + 1, b);
  }
}
inline int erfen(int l, int r, int x) {
  int ans = -1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    maxm = 1e9;
    fnd(1, mid, r);
    if (maxm <= x) {
      ans = mid;
      l = mid + 1;
    } else {
      maxm = 1e9;
      fnd(1, l, mid);
      if (maxm <= x) {
        ans = mid;
        r = mid - 1;
      } else
        return ans;
    }
  }
  return ans;
}
int main() {
  scanf("%s", s);
  int len = strlen(s);
  for (int i = len - 1; i >= 0; i--) s[i + 1] = s[i];
  sum[0] = 0;
  for (int i = 1; i <= len; i++) sum[i] = sum[i - 1] + value(s[i]);
  build(1, 1, len);
  int m = -1, t = 0;
  for (int i = 1; i <= len; i++) {
    int v = 3 * sum[i - 1] - 2 * (i - 1);
    int pos = erfen(i, len, v);
    if (pos != -1) {
      int l = pos - i + 1;
      if (l > m) {
        m = l;
        t = 1;
      } else if (l == m)
        t++;
    }
  }
  if (m == -1) {
    puts("No solution");
    return 0;
  } else
    printf("%d %d\n", m, t);
}
