#include <bits/stdc++.h>
using namespace std;
const int Max = 500005;
struct data {
  int l, r, num;
} node[3 * Max];
int num[Max];
void BuildTree(int left, int right, int u) {
  node[u].l = left;
  node[u].r = right;
  if (left == right)
    node[u].num = num[left];
  else {
    BuildTree(left, (left + right) / 2, 2 * u);
    BuildTree((left + right) / 2 + 1, right, 2 * u + 1);
    node[u].num = node[2 * u].num + node[2 * u + 1].num;
  }
}
int updata(int camp, int w, int u) {
  node[u].num += w;
  if (node[u].l == node[u].r)
    return 0;
  else if (camp <= node[2 * u].r)
    updata(camp, w, 2 * u);
  else
    updata(camp, w, 2 * u + 1);
  return 0;
}
int query(int left, int right, int u) {
  if (node[u].l == left && node[u].r == right) return node[u].num;
  if (right <= node[2 * u].r) return query(left, right, 2 * u);
  if (left >= node[2 * u + 1].l) return query(left, right, 2 * u + 1);
  int a = query(left, (node[u].l + node[u].r) / 2, 2 * u);
  int b = query((node[u].l + node[u].r) / 2 + 1, right, 2 * u + 1);
  return a + b;
}
char str[500009];
int fuck[1000];
double ddd[500009];
int main() {
  int i, j, k, a, b, c, len;
  memset(fuck, 0, sizeof(fuck));
  fuck['I'] = fuck['E'] = fuck['A'] = fuck['O'] = fuck['U'] = fuck['Y'] = 1;
  while (scanf("%s", str) != EOF) {
    double res = 0;
    len = strlen(str);
    double afk = 0;
    for (i = 1; i <= len; i++) {
      afk += (1.0) / i;
    }
    b = 1, c = len;
    ddd[1] = afk;
    for (i = 2; i <= (len + 1) / 2; i++) {
      ddd[i] = ddd[i - 1] + afk;
      ddd[i] -= (1.0) / (1.0 * b);
      ddd[i] -= (1.0) / (1.0 * c);
      afk -= (1.0) / (1.0 * c);
      afk -= (1.0) / (1.0 * b);
      b++, c--;
    }
    b = 1;
    for (i = len; i > (len + 1) / 2; i--) {
      ddd[i] = ddd[b];
      b++;
    }
    for (i = 0; i < len; i++) {
      if (fuck[str[i]]) {
        res += ddd[i + 1];
      }
    }
    printf("%.6f\n", res);
  }
  return 0;
}
