#include<bits/stdc++.h>
using namespace std;
long long i,j,n,m,a,b,sak[100005],bei[100005],sum1[100005],sum2[100005],dp[100005][2],liel,k,rez[100005][2],li[100005][2],rr;
long long bins(long long l,long long r,long long y,long long p)
{
    long long c=r-(r-l)/2;
    if (l<r)
    {
        if (dp[c][p]<=y)
        {
            return bins(c,r,y,p);
        }
        else
        {
            return bins(l,c-1,y,p);
        }
    }
    else
    {
        if (dp[l][p]>y)
        {
            return 0;
        }
        else
        {
            return l;
        }
    }
}
long long bins2(long long l,long long r,long long y,long long p)
{
    long long c=r-(r-l)/2;
    if (l<r)
    {
        if (dp[c][p]<=y)
        {
            return bins2(c,r,y,p);
        }
        else
        {
            return bins2(l,c-1,y,p);
        }
    }
    else
    {
        if (dp[l][p]>y)
        {
            return 0;
        }
        else
        {
            return l;
        }
    }
}
int main()
{
    std::cin.sync_with_stdio(false);
    std::cin.tie(0);
    cin >> n >> m;
    i=0;
    while (i<n)
    {
        cin >> a >> b;
        sak[a]++;
        bei[b]++;
        i++;
    }
    i=2;
    sum1[1]=sak[1];
    while (i<=m)
    {
        sum1[i]=sum1[i-1]+sak[i]-bei[i-1];
        i++;
    }
    i=m-1;
    sum2[m]=bei[m];
    while (i>0)
    {
        sum2[i]=sum2[i+1]+bei[i]-sak[i+1];
        i--;
    }
    dp[1][0]=sum1[1];
    liel=1;
    i=2;
    while (i<=m)
    {
        k=bins(1,liel,sum1[i],0)+1;
        dp[k][0]=sum1[i];
        rez[i][0]=k;
        liel=max(liel,k);
        i++;
    }
    rez[1][0]=1;
    dp[1][1]=sum2[m];
    rez[m][1]=1;
    liel=1;
    k=0;
    i=m-1;
    while (i>=1)
    {
        k=bins2(1,liel,sum2[i],1)+1;
        dp[k][1]=sum2[i];
        rez[i][1]=k;
        liel=max(liel,k);
        i--;
    }
    i=1;
    while (i<=m)
    {
        li[i][0]=max(li[i-1][0],rez[i][0]);
        i++;
    }
    i=m;
    while (i>=1)
    {
        li[i][1]=max(li[i+1][1],rez[i][1]);
        i--;
    }
    i=1;
    rr=0;
    while (i<=m+1)
    {
        //cout << sum2[i] << " " << rez[i][0] << " " << rez[i][1] << " " << li[i-1][0] << " " << li[i][1] << "\n";
        rr=max(rr,li[i-1][0]+li[i][1]);
        i++;
    }
    cout << rr;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
struct masivs{int l;int r;};
masivs mas[100005];
bool compare1(masivs maz,masivs liel)
{
    if (maz.l==liel.l)
    {
        return maz.r<liel.r;
    }
    else
    {
        return maz.l<liel.l;
    }
}
int i,j,n,m,a,b,sak[100005],bei[100005],sum1[100005],sum2[100005],dp[100005][2],liel,k,rez[100005][2],li[100005][2],rr;
int bins(int l,int r,int y,int p)
{
    int c=r-(r-l)/2;
    if (l<r)
    {
        if (dp[c][p]<=y)
        {
            return bins(c,r,y,p);
        }
        else
        {
            return bins(l,c-1,y,p);
        }
    }
    else
    {
        if (dp[l][p]>y)
        {
            return 0;
        }
        else
        {
            return l;
        }
    }
}
int bins2(int l,int r,int y,int p)
{
    int c=r-(r-l)/2;
    if (l<r)
    {
        if (dp[c][p]>=y)
        {
            return bins2(c,r,y,p);
        }
        else
        {
            return bins2(l,c-1,y,p);
        }
    }
    else
    {
        if (dp[l][p]>y)
        {
            return 0;
        }
        else
        {
            return l;
        }
    }
}
int main()
{
    std::cin.sync_with_stdio(false);
    std::cin.tie(0);
    cin >> n >> m;
    i=0;
    while (i<n)
    {
        cin >> a >> b;
        mas[i].l=a;
        mas[i].r=b;
        sak[a]++;
        bei[b]++;
        i++;
    }
    sort(mas,mas+n,compare1);
    i=2;
    sum1[1]=sak[1];
    while (i<=m)
    {
        sum1[i]=sum1[i-1]+sak[i]-bei[i-1];
        i++;
    }
    i=m-1;
    sum2[m]=bei[m];
    while (i>0)
    {
        sum2[i]=sum2[i+1]+bei[i]-sak[i+1];
        i--;
    }
    dp[1][0]=sum1[1];
    liel=1;
    i=2;
    li[1][0]=sum1[1];
    while (i<=m)
    {
        k=bins(1,liel,sum1[i],0)+1;
        dp[k][0]=sum1[i];
        rez[i][0]=k;
        liel=max(liel,k);
        li[i][0]=max(li[i-1][0],sum1[i]);
        i++;
    }
    rez[1][0]=1;
    dp[m][1]=sum2[m];
    rez[m][1]=1;
    liel=1;
    k=0;
    li[m][1]=sum2[m];
    i=m-1;
    while (i>=1)
    {
        k=bins2(1,liel,sum2[i],1)+1;
        dp[k][1]=sum2[i];
        rez[i][1]=k;
        liel=max(liel,k);
        li[i][1]=max(li[i+1][1],sum2[i]);
        i--;
    }
    i=2;
    rr=m;
    while (i<=m-1)
    {
        if (li[i-1][0]>sum1[i]&&li[i+1][1]>sum2[i])
        {
            if (rez[i-1][0]+rez[i+1][1]<rr)
            {
                rr=rez[i-1][0]+rez[i+1][1];
            }
        }
        i++;
    }
    i=1;
    while (i<=m)
    {
        //cout << rez[i][0] << " " << rez[i][1] << " " << li[i][0] << " " << li[i][1] << "\n";
        i++;
    }
    cout << rr;
    //cout << m-rez;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
int i,j,n,m,a,b,sak[100005],bei[100005],rez;
int main()
{
    std::cin.sync_with_stdio(false);
    std::cin.tie(0);
    cin >> n >> m;
    i=0;
    while (i<n)
    {
        cin >> a >> b;
        sak[a]++;
        bei[b]++;
        i++;
    }
    i=2;
    while (i<m-1)
    {
        //cout << i << " " << bei[i-1] << " " << sak[i] << " " << bei[i] << " " << sak[i+1] << "\n";
        if (bei[i-1]>sak[i]&&bei[i]<sak[i+1])
        {
            rez++;
        }
        i++;
    }
    cout << m-rez;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
long long i,j,n,m,a,b,sak[100005],bei[100005],sum1[100005],sum2[100005],dp[100005][2],liel,k,rez[100005][2],li[100005][2],rr;
long long bins(long long l,long long r,long long y,long long p)
{
    long long c=r-(r-l)/2;
    if (l<r)
    {
        if (dp[c][p]<=y)
        {
            return bins(c,r,y,p);
        }
        else
        {
            return bins(l,c-1,y,p);
        }
    }
    else
    {
        if (dp[l][p]>y)
        {
            return 0;
        }
        else
        {
            return l;
        }
    }
}
long long bins2(long long l,long long r,long long y,long long p)
{
    long long c=r-(r-l)/2;
    if (l<r)
    {
        if (dp[c][p]>=y)
        {
            return bins2(c,r,y,p);
        }
        else
        {
            return bins2(l,c-1,y,p);
        }
    }
    else
    {
        if (dp[l][p]>y)
        {
            return 0;
        }
        else
        {
            return l;
        }
    }
}
int main()
{
    std::cin.sync_with_stdio(false);
    std::cin.tie(0);
    cin >> n >> m;
    i=0;
    while (i<n)
    {
        cin >> a >> b;
        sak[a]++;
        bei[b]++;
        i++;
    }
    i=2;
    sum1[1]=sak[1];
    while (i<=m)
    {
        sum1[i]=sum1[i-1]+sak[i]-bei[i-1];
        i++;
    }
    i=m-1;
    sum2[m]=bei[m];
    while (i>0)
    {
        sum2[i]=sum2[i+1]+bei[i]-sak[i+1];
        i--;
    }
    dp[1][0]=sum1[1];
    liel=1;
    i=2;
    while (i<=m)
    {
        k=bins(1,liel,sum1[i],0)+1;
        dp[k][0]=sum1[i];
        rez[i][0]=k;
        liel=max(liel,k);
        i++;
    }
    rez[1][0]=1;
    dp[m][1]=sum2[m];
    rez[m][1]=1;
    liel=1;
    k=0;
    i=m-1;
    while (i>=1)
    {
        k=bins2(1,liel,sum2[i],1)+1;
        dp[k][1]=sum2[i];
        rez[i][1]=k;
        liel=max(liel,k);
        i--;
    }
    i=1;
    while (i<=m)
    {
        li[i][0]=max(li[i-1][0],rez[i][0]);
        i++;
    }
    i=m;
    while (i>=1)
    {
        li[i][1]=max(li[i+1][1],rez[i][1]);
        i--;
    }
    i=1;
    rr=0;
    while (i<=m)
    {
        //cout << rez[i][0] << " " << rez[i][1] << " " << li[i][0] << " " << li[i][1] << "\n";
        rr=max(rr,li[i][0]+li[i][1]-1);
        i++;
    }
    cout << rr;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
struct masivs{long long l;long long r;};
masivs mas[100005];
bool compare1(masivs maz,masivs liel)
{
    if (maz.l==liel.l)
    {
        return maz.r<liel.r;
    }
    else
    {
        return maz.l<liel.l;
    }
}
long long i,j,n,m,a,b,sak[100005],bei[100005],sum1[100005],sum2[100005],dp[100005][2],liel,k,rez[100005][2],li[100005][2],rr;
long long bins(long long l,long long r,long long y,long long p)
{
    long long c=r-(r-l)/2;
    if (l<r)
    {
        if (dp[c][p]<=y)
        {
            return bins(c,r,y,p);
        }
        else
        {
            return bins(l,c-1,y,p);
        }
    }
    else
    {
        if (dp[l][p]>y)
        {
            return 0;
        }
        else
        {
            return l;
        }
    }
}
long long bins2(long long l,long long r,long long y,long long p)
{
    long long c=r-(r-l)/2;
    if (l<r)
    {
        if (dp[c][p]>=y)
        {
            return bins2(c,r,y,p);
        }
        else
        {
            return bins2(l,c-1,y,p);
        }
    }
    else
    {
        if (dp[l][p]>y)
        {
            return 0;
        }
        else
        {
            return l;
        }
    }
}
int main()
{
    std::cin.sync_with_stdio(false);
    std::cin.tie(0);
    cin >> n >> m;
    i=0;
    while (i<n)
    {
        cin >> a >> b;
        mas[i].l=a;
        mas[i].r=b;
        sak[a]++;
        bei[b]++;
        i++;
    }
    sort(mas,mas+n,compare1);
    i=2;
    sum1[1]=sak[1];
    while (i<=m)
    {
        sum1[i]=sum1[i-1]+sak[i]-bei[i-1];
        i++;
    }
    i=m-1;
    sum2[m]=bei[m];
    while (i>0)
    {
        sum2[i]=sum2[i+1]+bei[i]-sak[i+1];
        i--;
    }
    dp[1][0]=sum1[1];
    liel=1;
    i=2;
    li[1][0]=sum1[1];
    while (i<=m)
    {
        k=bins(1,liel,sum1[i],0)+1;
        dp[k][0]=sum1[i];
        rez[i][0]=k;
        liel=max(liel,k);
        li[i][0]=max(li[i-1][0],sum1[i]);
        i++;
    }
    rez[1][0]=1;
    dp[m][1]=sum2[m];
    rez[m][1]=1;
    liel=1;
    k=0;
    li[m][1]=sum2[m];
    i=m-1;
    while (i>=1)
    {
        k=bins2(1,liel,sum2[i],1)+1;
        dp[k][1]=sum2[i];
        rez[i][1]=k;
        liel=max(liel,k);
        li[i][1]=max(li[i+1][1],sum2[i]);
        i--;
    }
    i=2;
    rr=m;
    while (i<=m-1)
    {
        if (li[i-1][0]>sum1[i]&&li[i+1][1]>sum2[i])
        {
            if (rez[i-1][0]+rez[i+1][1]<rr)
            {
                rr=rez[i-1][0]+rez[i+1][1];
            }
        }
        i++;
    }
    i=1;
    while (i<=m)
    {
        //cout << rez[i][0] << " " << rez[i][1] << " " << li[i][0] << " " << li[i][1] << "\n";
        i++;
    }
    cout << rr;
    //cout << m-rez;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
long long i,j,n,m,a,b,sak[100005],bei[100005],sum1[100005],sum2[100005],dp[100005][2],liel,k,rez[100005][2],li[100005][2],rr;
long long bins(long long l,long long r,long long y,long long p)
{
    long long c=r-(r-l)/2;
    if (l<r)
    {
        if (dp[c][p]<=y)
        {
            return bins(c,r,y,p);
        }
        else
        {
            return bins(l,c-1,y,p);
        }
    }
    else
    {
        if (dp[l][p]>y)
        {
            return 0;
        }
        else
        {
            return l;
        }
    }
}
long long bins2(long long l,long long r,long long y,long long p)
{
    long long c=r-(r-l)/2;
    if (l<r)
    {
        if (dp[c][p]>y)
        {
            return bins2(c,r,y,p);
        }
        else
        {
            return bins2(l,c-1,y,p);
        }
    }
    else
    {
        if (dp[l][p]>y)
        {
            return 0;
        }
        else
        {
            return l;
        }
    }
}
int main()
{
    std::cin.sync_with_stdio(false);
    std::cin.tie(0);
    cin >> n >> m;
    i=0;
    while (i<n)
    {
        cin >> a >> b;
        sak[a]++;
        bei[b]++;
        i++;
    }
    i=2;
    sum1[1]=sak[1];
    while (i<=m)
    {
        sum1[i]=sum1[i-1]+sak[i]-bei[i-1];
        i++;
    }
    i=m-1;
    sum2[m]=bei[m];
    while (i>0)
    {
        sum2[i]=sum2[i+1]+bei[i]-sak[i+1];
        i--;
    }
    dp[1][0]=sum1[1];
    liel=1;
    i=2;
    while (i<=m)
    {
        k=bins(1,liel,sum1[i],0)+1;
        dp[k][0]=sum1[i];
        rez[i][0]=k;
        liel=max(liel,k);
        i++;
    }
    rez[1][0]=1;
    dp[m][1]=sum2[m];
    rez[m][1]=1;
    liel=1;
    k=0;
    i=m-1;
    while (i>=1)
    {
        k=bins2(1,liel,sum2[i],1)+1;
        dp[k][1]=sum2[i];
        rez[i][1]=k;
        liel=max(liel,k);
        i--;
    }
    i=1;
    while (i<=m)
    {
        li[i][0]=max(li[i-1][0],rez[i][0]);
        i++;
    }
    i=m;
    while (i>=1)
    {
        li[i][1]=max(li[i+1][1],rez[i][1]);
        i--;
    }
    i=1;
    rr=0;
    while (i<=m-1)
    {
        //cout << li[i][0] << " " << li[i][1] << "\n";
        rr=max(rr,li[i][0]+li[i+1][1]);
        i++;
    }
    cout << rr;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int maxn = 1e5 + 666;
int n, m, v[maxn], d[maxn], rd[maxn], ml[maxn];
struct bit
{
    ll b[maxn];
    inline void init() { fill(b, b+maxn, 0); }
    inline int lowbit(int p) { return p&(-p); }
    void _add(int p, int val)
    {
        for(; p < maxn; p += lowbit(p))
            b[p] += val;
    }
    ll sum(int p)
    {
        ll rt = 0;
        for(; p; p -= lowbit(p))
            rt += b[p];
        return rt;
    }
    void add(int l, int r, int val)
    {
        _add(l, val); _add(r+1, -val);
    }
}bt;
int main(void)
{
    cin >> n >> m;
    int l, r;
    for(int i = 0; i < n; ++i)
    {
        scanf("%d%d", &l, &r);
        bt.add(l, r, 1);
    }
    for(int i = 1; i <= m; ++i)
    {
        v[i] = bt.sum(i);
    }
    d[1] = 1; ml[1] = v[1]; r = 2;
    for(int i = 2; i <= m; ++i)
    {
        int p = upper_bound(ml+1, ml+r, v[i]) - ml;
        d[i] = p; ml[p] = v[i]; r = max(r, p+1);
    }
    fill(ml, ml+m, 0);
    rd[m] = 1; ml[1] = v[m]; r = 2;
    for(int i = m-1; i >= 1; --i)
    {
        int p = upper_bound(ml+1, ml+r, v[i]) - ml;
        rd[i] = p; ml[p] = v[i]; r = max(r, p+1);
    }
    int rt = 0;
    for(int i = 1; i <= m; ++i)
    {
        rt = max(rt, d[i]+rd[i]-1);
    }
    cout << rt << endl;
}
// 5 6 1 6 2 6 3 6 4 6 5 6


#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<functional>
using namespace std;
using namespace std;
const int maxm = 100005;
int a[maxm];
int s1[maxm], s2[maxm], dp1[maxm], dp2[maxm];
int main()
{
	int n, i, j, k, sum, l, r, m;
	scanf("%d%d", &n, &m);
	for (i = 1;i <= n;i++)
	{
		scanf("%d%d", &l, &r);
		a[l]++, a[r + 1]--;
	}
	for (i = 1;i <= m;i++)
		a[i] += a[i - 1];
	s1[1] = 1, dp1[1] = a[1];
	int now = 1;
	for (i = 2;i <= m;i++)
	{
		if (a[i] >= dp1[now])
			dp1[++now] = a[i];
		else
		{
			int id = upper_bound(dp1 + 1, dp1 + 1 + now, a[i]) - dp1;
			dp1[id] = a[i];
		}
		s1[i] = now;
	}
	s2[m] = 1, dp2[1] = a[m];
	now = 1;
	for (i = m - 1;i >= 1;i--)
	{
		if (a[i] >= dp2[now])
			dp2[++now] = a[i];
		else
		{
			int id = upper_bound(dp2 + 1, dp2 + 1 + now, a[i]) - dp2;
			dp2[id] = a[i];
		}
		s2[i] = now;
	}
	int ans = 0;
	for (i = 1;i <= m;i++)
		ans = max(ans, s1[i] + s2[i] - 1);
	printf("%d\n", ans);
	return 0;
}


#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
#include<map>
#include<set>
//#include<unordered_map>
//#include<unordered_set>
#include<iostream>
#include<sstream>
#include<queue>
#include<ctime>
#pragma GCC optimize(2)
#define X first
#define Y second
#define abs(x) ((x)>0?(x):-(x))
#define random(a,b) (rand()%(b-a+1)+a)
#define equal(x,y) (!((x)^(y)))

using namespace std;

typedef long long LL;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;

const int maxn=200000+1000;
const int maxm=300000+100;
const int inf=0x3f3f3f3f;
const LL INF=0x3f3f3f3f3f3f3f3;

template<class T>
inline bool scan(T&ret)
{
    ret=0;
    char c;
    int sgn;
    T bit=0.1;
    if(c=getchar(),c==EOF)
        return 0;
    while(c!='-'&&c!='.'&&(c<'0'||c>'9'))
        c=getchar();
    sgn=(c=='-')?-1:1;
    ret=(c=='-')?0:(c-'0');
    while(c=getchar(),c>='0'&&c<='9')
        ret=ret*10+(c-'0');
    if(c==' '||c=='\n')
    {
        ret*=sgn;
        return 1;
    }
    while(c=getchar(),c>='0'&&c<='9')
        ret+=(c-'0')*bit,bit/=10;
    ret*=sgn;
    return 1;
}

template<class T,class... Args>
inline void scan(T &x,Args &... args)
{
    scan(x),scan(args...);
}

int kase=0;
template<class T>
T exgcd(T a,T b,T &x,T &y)
{
    if(b==0)
    {
        x=1,y=0;
        return a;
    }
    T res=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return res;
}
template<class T>
T gcd(T a,T b)
{
    return b==0?a:gcd(b,a%b);
}
template<class T>
T qpow(T a,T n,T mod)
{
    T res=1;
    while(n)
    {
        if(n&1)
        {
            res=res*a%mod;
        }
        a=a*a%mod,n>>=1;
    }
    return res;
}

void init(){}

LL cnt[500000+1000];

bool yuan(char ch){
    return ch=='A'||ch=='E'||ch=='I'||ch=='O'||ch=='U'||ch=='Y';
}

double sum[maxn],ssum[maxn];

void solve(){
    string str;
    cin>>str;
    sum[0]=0;
    ssum[0]=0;
    int l=str.size();
    for(int i=1;i<=l;i++) sum[i]=sum[i-1]+(1.0/double(i));
    for(int i=1;i<=l;i++) ssum[i]=ssum[i-1]+sum[i];
    double ans=0.0;
    for(int i=0;i<l;i++){
        if(!yuan(str[i])) continue;
        //cout<<i<<endl;
        ans+=sum[l-i]+sum[i+1]-1;
        //cout<<l-i<<" "<<i+1<<endl;
        ans+=ssum[l]-ssum[l-i]-ssum[i+1]+1;
    }
    printf("%.6f\n",ans);
}

void solve(int i){

}

int main()
{
#ifdef LOCAL
    freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
#endif // LOCAL
    int T=1;
    //init();
    //ios::sync_with_stdio(false),cin.tie(0);
    //cin>>T;
    //scan(T);
    //init();
    //scanf("%d",&T);
    while(T--)
    {
        solve();
        //solve(1);
    }
}


#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
#include<map>
#include<set>
//#include<unordered_map>
//#include<unordered_set>
#include<iostream>
#include<sstream>
#include<queue>
#include<ctime>
#pragma GCC optimize(2)
#define X first
#define Y second
#define abs(x) ((x)>0?(x):-(x))
#define random(a,b) (rand()%(b-a+1)+a)
#define equal(x,y) (!((x)^(y)))

using namespace std;

typedef long long LL;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;

const int maxn=500000+1000;
const int maxm=300000+100;
const int inf=0x3f3f3f3f;
const LL INF=0x3f3f3f3f3f3f3f3;

template<class T>
inline bool scan(T&ret)
{
    ret=0;
    char c;
    int sgn;
    T bit=0.1;
    if(c=getchar(),c==EOF)
        return 0;
    while(c!='-'&&c!='.'&&(c<'0'||c>'9'))
        c=getchar();
    sgn=(c=='-')?-1:1;
    ret=(c=='-')?0:(c-'0');
    while(c=getchar(),c>='0'&&c<='9')
        ret=ret*10+(c-'0');
    if(c==' '||c=='\n')
    {
        ret*=sgn;
        return 1;
    }
    while(c=getchar(),c>='0'&&c<='9')
        ret+=(c-'0')*bit,bit/=10;
    ret*=sgn;
    return 1;
}

template<class T,class... Args>
inline void scan(T &x,Args &... args)
{
    scan(x),scan(args...);
}

int kase=0;
template<class T>
T exgcd(T a,T b,T &x,T &y)
{
    if(b==0)
    {
        x=1,y=0;
        return a;
    }
    T res=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return res;
}
template<class T>
T gcd(T a,T b)
{
    return b==0?a:gcd(b,a%b);
}
template<class T>
T qpow(T a,T n,T mod)
{
    T res=1;
    while(n)
    {
        if(n&1)
        {
            res=res*a%mod;
        }
        a=a*a%mod,n>>=1;
    }
    return res;
}

void init(){}

bool yuan(char ch){
    return ch=='A'||ch=='E'||ch=='I'||ch=='O'||ch=='U'||ch=='Y';
}

double sum[maxn],ssum[maxn];

void solve(){
    string str;
    cin>>str;
    sum[0]=0;
    ssum[0]=0;
    int l=str.size();
    for(int i=1;i<=l;i++) sum[i]=sum[i-1]+(1.0/double(i));
    for(int i=1;i<=l;i++) ssum[i]=ssum[i-1]+sum[i];
    double ans=0.0;
    for(int i=0;i<l;i++){
        if(!yuan(str[i])) continue;
        //cout<<i<<endl;
        ans+=sum[l-i]+sum[i+1]-1;
        //cout<<l-i<<" "<<i+1<<endl;
        ans+=ssum[l]-ssum[l-i]-ssum[i+1]+1;
    }
    printf("%.6f\n",ans);
}

void solve(int i){

}

int main()
{
#ifdef LOCAL
    freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
#endif // LOCAL
    int T=1;
    //init();
    //ios::sync_with_stdio(false),cin.tie(0);
    //cin>>T;
    //scan(T);
    //init();
    //scanf("%d",&T);
    while(T--)
    {
        solve();
        //solve(1);
    }
}


// Alapan
// IIITH

#include<bits/stdc++.h>
using namespace std;

// data types
#define ll long long int
#define ld long double

//funtion macros

// stl
#define lp(var,start,end) for (ll var = start; var <=end ; ++var)
#define ilp(var,start,end) for(ll var = start; var>=end ; var--)
#define pb push_back
#define mp make_pair
#define pf push_front
#define ff first
#define ss second
#define vll vector<ll>
#define vld vector<ld>
#define pll pair<ll,ll>
#define pld pair<ld,ld>
#define vpll vector<pll>
#define vpld vector<pld>
#define all(X) X.begin(),X.end()
#define sz(x) ((ll)((x).size()))

#define mod 1000000007

// utility functions
ll max(ll a, ll b){
    if(a>b)return a;
    return b;
}

ll min(ll a, ll b){
	if(a<b)return a;
    return b;
}

ll power(ll x, ll y, ll m=mod){
	if(y<0){
		x = power(x,m-2);
		y = -y;
	}
	ll ans=1;
	x = x % m;
	while(y){
		if(y&1) ans = (ans*x)%m;
		y=y/2;
		x=(x*x)%m;
	}
	return ans;
}

ll factorial(ll n, ll m=mod){
    ll ans = 1;
	ll i=1;
    while(i<=n){
        ans = (ans*i)%m;
        i++;
    }
    return ans;
}

///////////////////////////////////////////////////////////
ll v[50];
ll pre[50];
char arr[50];
int main(){
    cin >> arr;
    ll len = strlen(arr);
    for(ll i=0;i<len;i++){
        if(arr[i]=='A' || arr[i]=='E' || arr[i]=='I' || arr[i]=='O' || arr[i]=='U' || arr[i]=='Y'){
            v[i]=1;
        }
        else v[i]=0;
    }
    pre[0]=0;
    for(ll i=1;i<=len;i++){
        pre[i]=pre[i-1]+v[i-1];
    }
    double sum=0;
    ll total_vowels=0;
    ll l=1;
    ll r=len;
    ll i=0;
    while(l<=r){
        total_vowels = total_vowels+(pre[len-i] - pre[0+i]);
        if(l!=r)sum = sum + (double)total_vowels/l + (double)total_vowels/r;
        else sum = sum + (double)total_vowels/l;
        i++;
        l++;
        r--;
    }
    cout << sum << endl;
	return 0;
}


// Alapan
// IIITH

#include<bits/stdc++.h>
using namespace std;

// data types
#define ll long long int
#define ld long double

//funtion macros

// stl
#define lp(var,start,end) for (ll var = start; var <=end ; ++var)
#define ilp(var,start,end) for(ll var = start; var>=end ; var--)
#define pb push_back
#define mp make_pair
#define pf push_front
#define ff first
#define ss second
#define vll vector<ll>
#define vld vector<ld>
#define pll pair<ll,ll>
#define pld pair<ld,ld>
#define vpll vector<pll>
#define vpld vector<pld>
#define all(X) X.begin(),X.end()
#define sz(x) ((ll)((x).size()))

#define mod 1000000007

// utility functions
ll max(ll a, ll b){
    if(a>b)return a;
    return b;
}

ll min(ll a, ll b){
	if(a<b)return a;
    return b;
}

ll power(ll x, ll y, ll m=mod){
	if(y<0){
		x = power(x,m-2);
		y = -y;
	}
	ll ans=1;
	x = x % m;
	while(y){
		if(y&1) ans = (ans*x)%m;
		y=y/2;
		x=(x*x)%m;
	}
	return ans;
}

ll factorial(ll n, ll m=mod){
    ll ans = 1;
	ll i=1;
    while(i<=n){
        ans = (ans*i)%m;
        i++;
    }
    return ans;
}

///////////////////////////////////////////////////////////
ll v[500005];
ll pre[500005];
char arr[500005];
int main(){
    cin >> arr;
    ll len = strlen(arr);
    for(ll i=0;i<len;i++){
        if(arr[i]=='A' || arr[i]=='E' || arr[i]=='I' || arr[i]=='O' || arr[i]=='U' || arr[i]=='Y'){
            v[i]=1;
        }
        else v[i]=0;
    }
    pre[0]=0;
    for(ll i=1;i<=len;i++){
        pre[i]=pre[i-1]+v[i-1];
    }
    double sum=0;
    ll total_vowels=0;
    ll l=1;
    ll r=len;
    ll i=0;
    while(l<=r){
        total_vowels = total_vowels+(pre[len-i] - pre[0+i]);
        if(l!=r)sum = sum + (double)total_vowels/l + (double)total_vowels/r;
        else sum = sum + (double)total_vowels/l;
        i++;
        l++;
        r--;
    }
    printf("%.6lf\n",sum);
	return 0;
}


// Alapan
// IIITH

#include<bits/stdc++.h>
using namespace std;

// data types
#define ll long long int
#define ld long double

//funtion macros

// stl
#define lp(var,start,end) for (ll var = start; var <=end ; ++var)
#define ilp(var,start,end) for(ll var = start; var>=end ; var--)
#define pb push_back
#define mp make_pair
#define pf push_front
#define ff first
#define ss second
#define vll vector<ll>
#define vld vector<ld>
#define pll pair<ll,ll>
#define pld pair<ld,ld>
#define vpll vector<pll>
#define vpld vector<pld>
#define all(X) X.begin(),X.end()
#define sz(x) ((ll)((x).size()))

#define mod 1000000007

// utility functions
ll max(ll a, ll b){
    if(a>b)return a;
    return b;
}

ll min(ll a, ll b){
	if(a<b)return a;
    return b;
}

ll power(ll x, ll y, ll m=mod){
	if(y<0){
		x = power(x,m-2);
		y = -y;
	}
	ll ans=1;
	x = x % m;
	while(y){
		if(y&1) ans = (ans*x)%m;
		y=y/2;
		x=(x*x)%m;
	}
	return ans;
}

ll factorial(ll n, ll m=mod){
    ll ans = 1;
	ll i=1;
    while(i<=n){
        ans = (ans*i)%m;
        i++;
    }
    return ans;
}

///////////////////////////////////////////////////////////
ll v[500005];
ll pre[500005];
char arr[500005];
int main(){
    cin >> arr;
    ll len = strlen(arr);
    for(ll i=0;i<len;i++){
        if(arr[i]=='A' || arr[i]=='E' || arr[i]=='I' || arr[i]=='O' || arr[i]=='U' || arr[i]=='Y'){
            v[i]=1;
        }
        else v[i]=0;
    }
    pre[0]=0;
    for(ll i=1;i<=len;i++){
        pre[i]=pre[i-1]+v[i-1];
    }
    double sum=0;
    ll total_vowels=0;
    ll l=1;
    ll r=len;
    ll i=0;
    while(l<=r){
        total_vowels = total_vowels+(pre[len-i] - pre[0+i]);
        if(l!=r)sum = sum + (double)total_vowels/l + (double)total_vowels/r;
        else sum = sum + (double)total_vowels/l;
        i++;
        l++;
        r--;
    }
    cout << sum << endl;
	return 0;
}


#include <bits/stdc++.h>

using namespace std;

#define mx 500005
#define int long long
#define pii pair <int, int>
#define piii pair <int, pii>
#define fi first
#define se second
#define mod 1000000007
#define inf 1e18+19
#define pb push_back
#define mem(ara, x) memset(ara, x, sizeof ara)
#define read() freopen("in.txt", "r", stdin)
#define write() freopen("out.txt", "w", stdout)
#define fst ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

string str;
int ara[30];
double dp[mx];

void gen(){
    mem(ara, 0);
    for(char ch='A';ch<='Z';ch++) if(ch=='A'||ch=='I'||ch=='E'||ch=='O'||ch=='U'||ch=='Y') ara[ch-'A'] = 1;
}

int32_t main(){
    //read();
    fst;
    int n, q;
    gen();
    while(cin >> str){
        n = str.length();
        dp[0] = 0.0;
        for(int i=1;i<=n;i++){
            dp[i] = dp[i-1] + 1.0/(i*1.0);
        }
        for(int i=1;i<=n;i++){
            dp[i] = dp[i-1] + dp[i];
        }
        double ans = 0.0;
        for(int i=0;i<n;i++){
            if(ara[str[i]-'A']){
                ans += (dp[n] - dp[i] - dp[n-i-1]);
            }
        }
        cout << fixed;
        cout << setprecision(10) << ans << endl;
    }
    return 0;
}


#include<bits/stdc++.h>
#define AMX 500500
#define ll long long int
#define lf double
using namespace std;
int n;
int bu[200];
int sub[AMX],pre[AMX],sum[AMX];

lf res=0;
string a,we;
lf check(int tam){
    //cout<<tam<<endl;
    lf acu=0;
    int ri,rf;
    ri=rf=0;
    ri=tam; rf=n-tam+1;
    //cout<<ri<<"---"<<rf<<endl;
    if( ri<=rf )
        acu=pre[ri-1]+sub[rf+1]+(sum[rf]-sum[ri-1])*tam;
    else {
        swap(ri,rf);
        acu=(sum[rf]-sum[ri-1])*ri+pre[ri-1]+sub[rf+1];
    }

    //cout<<tam<<" "<<acu<<" "<<tam<<endl;
    return (double)acu/(double)tam;
}
int main (){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>we;
    n=we.size();
    a+='0'; a+=we;
    bu['A']=bu['E']=bu['O']=bu['I']=bu['U']=bu['Y']=1;
    for(int i=1;i<=n;i++){
        sum[i]=sum[i-1]+bu[ a[i] ];
        pre[i]=pre[i-1]+bu[ a[i] ]*i;
    }
    for(int i=n,f=1;i>=1;i--,f++)
        sub[i]=sub[i+1]+bu[ a[i] ]*f;
    /*
    for(int i=1;i<=n;i++)
        cout<<pre[i]<<" ";
    cout<<endl;
    for(int i=n;i>=1;i--)
        cout<<sub[i]<<" ";
    cout<<endl;
    */
    for(int i=1;i<=n;i++)
        res+=check(i);
    printf("%.6lf\n",res);
    return 0;
}


#include<bits/stdc++.h>
#define AMX 500500
#define ll long long int
#define lf double
using namespace std;
int n;
int bu[200];
int sub[AMX],pre[AMX],sum[AMX];

lf res=0;
string a,we;
lf check(int tam){
    //cout<<tam<<endl;
    lf acu=0;
    int ri,rf;
    ri=rf=0;
    ri=tam; rf=n-tam+1;
    //cout<<ri<<"---"<<rf<<endl;
    if( ri<=rf )
        acu=pre[ri-1]+sub[rf+1]+(sum[rf]-sum[ri-1])*tam;
    else {
        swap(ri,rf);
        acu=(sum[rf]-sum[ri-1])*ri+pre[ri-1]+sub[rf+1];
    }

    //cout<<tam<<" "<<acu<<" "<<tam<<endl;
    return (double)acu/(double)tam;
}
int main (){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>we;
    n=we.size();
    a+='0'; a+=we;
    bu['A']=bu['E']=bu['O']=bu['I']=bu['U']=bu['Y']=1;
    for(int i=1;i<=n;i++){
        sum[i]=sum[i-1]+bu[ a[i] ];
        pre[i]=pre[i-1]+bu[ a[i] ]*i;
    }
    for(int i=n,f=1;i>=1;i--,f++)
        sub[i]=sub[i+1]+bu[ a[i] ]*f;
    /*
    for(int i=1;i<=n;i++)
        cout<<pre[i]<<" ";
    cout<<endl;
    for(int i=n;i>=1;i--)
        cout<<sub[i]<<" ";
    cout<<endl;
    */
    for(int i=1;i<=n;i++)
        res+=check(i);
    printf("%.6f\n",res);
    return 0;
}


#include<bits/stdc++.h>
#define AMX 700500
#define int long long int
#define lf double
using namespace std;
int n;
int bu[200];
int sub[AMX],pre[AMX],sum[AMX];

lf res=0;
string a,we;
lf check(int tam){
    //cout<<tam<<endl;
    lf acu=0;
    int ri,rf;
    ri=rf=0;
    ri=tam; rf=n-tam+1;
    //cout<<ri<<"---"<<rf<<endl;
    if( ri<=rf )
        acu=pre[ri-1]+sub[rf+1]+(sum[rf]-sum[ri-1])*tam;
    else {
        swap(ri,rf);
        acu=(sum[rf]-sum[ri-1])*ri+pre[ri-1]+sub[rf+1];
    }

    //cout<<tam<<" "<<acu<<" "<<tam<<endl;
    return (double)acu/(double)tam;
}
 main (){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>we;
    n=we.size();
    a+='0'; a+=we;
    bu['A']=bu['E']=bu['O']=bu['I']=bu['U']=bu['Y']=1;
    for(int i=1;i<=n;i++){
        sum[i]=sum[i-1]+bu[ a[i] ];
        pre[i]=pre[i-1]+bu[ a[i] ]*i;
    }
    for(int i=n,f=1;i>=1;i--,f++)
        sub[i]=sub[i+1]+bu[ a[i] ]*f;
    /*
    for(int i=1;i<=n;i++)
        cout<<pre[i]<<" ";
    cout<<endl;
    for(int i=n;i>=1;i--)
        cout<<sub[i]<<" ";
    cout<<endl;
    */
    for(int i=1;i<=n;i++)
        res+=check(i);
    printf("%.8lf\n",res);
    return 0;
}


#include<bits/stdc++.h>
#define AMX 500500
#define ll long long int
#define lf double
using namespace std;
int n;
int bu[200];
int sub[AMX],pre[AMX],sum[AMX];

lf res=0;
string a,we;
lf check(int tam){
    //cout<<tam<<endl;
    lf acu=0;
    int ri,rf;
    ri=rf=0;
    ri=tam; rf=n-tam+1;
    //cout<<ri<<"---"<<rf<<endl;
    if( ri<=rf )
        acu=pre[ri-1]+sub[rf+1]+(sum[rf]-sum[ri-1])*tam;
    else {
        swap(ri,rf);
        acu=(sum[rf]-sum[ri-1])*ri+pre[ri-1]+sub[rf+1];
    }

    //cout<<tam<<" "<<acu<<" "<<tam<<endl;
    return (double)acu/(double)tam;
}
int main (){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>we;
    n=we.size();
    a+='0'; a+=we;
    bu['A']=bu['E']=bu['O']=bu['I']=bu['U']=bu['Y']=1;
    for(int i=1;i<=n;i++){
        sum[i]=sum[i-1]+bu[ a[i] ];
        pre[i]=pre[i-1]+bu[ a[i] ]*i;
    }
    for(int i=n,f=1;i>=1;i--,f++)
        sub[i]=sub[i+1]+bu[ a[i] ]*f;
    /*
    for(int i=1;i<=n;i++)
        cout<<pre[i]<<" ";
    cout<<endl;
    for(int i=n;i>=1;i--)
        cout<<sub[i]<<" ";
    cout<<endl;
    */
    for(int i=1;i<=n;i++)
        res+=check(i);
    printf("%.8lf\n",res);
    return 0;
}


#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <initializer_list>
#include <functional>
#include <unordered_set>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair <int, int> par;
typedef pair <ll, ll> parll;
int const INF = 1e9 + 7;
ll const LLINF = 1e18 + 7;
ld const eps = 1e-8;
ld const PI = acos(-1);
ll const p_hash = 257;
ll const mod = 1e9 + 7;
bool operator == (par const& a, par const& b) {
	return (a.first == b.first && a.second == b.second);
}
par operator + (par const& a, par const& b) {
	return{ a.first + b.first, a.second + b.second };
}
par operator - (par const& a, par const& b) {
	return{ a.first - b.first, a.second - b.second };
}
inline ll binpow(ll const& a, ll const& st) {
	if (!st) return 1;
	if (st % 2) return (a * binpow(a, st - 1)) % mod; else return (binpow(a, st / 2) * binpow(a, st / 2)) % mod;
}

bool is_vowel(char const& a) {
	return (a == 'I' || a == 'E' || a == 'A' || a == 'O' || a == 'U' || a == 'Y');
}

int v[500500];

int getv(int const& l, int const& r) {
	if (l) return v[r] - v[l - 1]; else return v[r];
}

int main() {
#ifdef _DEBUG
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
	string s;
	cin >> s;
	v[0] = is_vowel(s[0]);
	for (int i = 1; i < s.size(); i++) v[i] = v[i - 1] + is_vowel(s[i]);
	int l = 0, r = s.size() - 1;
	ld ans = 0;
	int open = 0;
	int denom = 1;
	while (l <= r) {
		open += getv(l++, r--);
		ans += ld(open) / ld(denom++);
	}//A A A A A A A === 7/1 + (7+5)/2 + (7+5+3)/3 + (7+5+3+1)/4 + (7+5+3)/5 + (7+5)/6 + 7/7 = 7 + 6 + 5 + 4 + 3 + 2 + 1 = 28;
	l--; r++;
	if (s.size() % 2 == 0) ans += ld(open) / ld(denom++);
	while (l >= 0 && r < s.size()) {
		open -= getv(l--, r++);
		ans += ld(open) / ld(denom++);
	}
	cout << fixed << setprecision(6) << ans;
	return 0;
}


#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <initializer_list>
#include <functional>
#include <unordered_set>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair <int, int> par;
typedef pair <ll, ll> parll;
int const INF = 1e9 + 7;
ll const LLINF = 1e18 + 7;
ld const eps = 1e-8;
ld const PI = acos(-1);
ll const p_hash = 257;
ll const mod = 1e9 + 7;
bool operator == (par const& a, par const& b) {
	return (a.first == b.first && a.second == b.second);
}
par operator + (par const& a, par const& b) {
	return{ a.first + b.first, a.second + b.second };
}
par operator - (par const& a, par const& b) {
	return{ a.first - b.first, a.second - b.second };
}
inline ll binpow(ll const& a, ll const& st) {
	if (!st) return 1;
	if (st % 2) return (a * binpow(a, st - 1)) % mod; else return (binpow(a, st / 2) * binpow(a, st / 2)) % mod;
}

ld is_vowel(char const& a) {
	return ld(a == 'I' || a == 'E' || a == 'A' || a == 'O' || a == 'U' || a == 'Y');
}

ld v[500500];

ld getv(int const& l, int const& r) {
	if (l) return v[r] - v[l - 1]; else return v[r];
}

int main() {
#ifdef _DEBUG
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
	string s;
	cin >> s;
	v[0] = is_vowel(s[0]);
	for (int i = 1; i < s.size(); i++) v[i] = v[i - 1] + is_vowel(s[i]);
	int l = 0, r = s.size() - 1;
	ld ans = 0;
	ld open = 0;
	ld denom = 1;
	while (l <= r) {
		open += getv(l++, r--);
		ans += open / denom++;
	}//A A A A A A A === 7/1 + (7+5)/2 + (7+5+3)/3 + (7+5+3+1)/4 + (7+5+3)/5 + (7+5)/6 + 7/7 = 7 + 6 + 5 + 4 + 3 + 2 + 1 = 28;
	l--; r++;
	if (s.size() % 2 == 0) ans += open / denom++;
	while (l >= 0 && r < s.size()) {
		open -= getv(l--, r++);
		ans += open / denom++;
	}
	cout << fixed << setprecision(8) << ans;
	return 0;
}


#include<bits/stdc++.h>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);
    char str[50005];
    int i,n;
    double arr[50005]={0},sum;
    double b;
    cin >> str;
    n=strlen(str);

    for(i=0;i<n;i++)
    {
        if(str[i]=='I'||str[i]=='E'||str[i]=='A'||str[i]=='O'||str[i]=='U'||str[i]=='Y')
            arr[i]=1;
    }

    if(n==1)
    {
        if(arr[0]==1)
            cout << "1.0000000\n";
        else cout << "0.0000000\n";
        return 0;
    }
    for(i=1;i<n;i++){
        arr[i]+=arr[i-1];
        //cout << arr[i] << " ";
    }
    //cout << endl;*/
    sum=arr[n-1];
    b=arr[n-1];
    b+=(double)arr[n-1]/n;
    for(i=1;i<n/2;i++)
    {
        //cout << sum << endl;
        sum+=arr[n-i-1]-arr[i-1];

        b+=(double)sum/(i+1);
        b+=(double)sum/(n-i);
    }

    if(n%2==1)
    {
        sum+=arr[n/2]-arr[n/2-1];
        b+=(double)sum/(n/2+1);
    }
    printf("%.8lf\n",b);

    /*for(i=0;i<vec.size();i++)
        cout << vec[i] << " ";*/
}


#include<bits/stdc++.h>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);
    char str[500005];
    int i,n,arr[500005]={0};
    float b,sum;
    cin >> str;
    n=strlen(str);

    for(i=0;i<n;i++)
    {
        if(str[i]=='I'||str[i]=='E'||str[i]=='A'||str[i]=='O'||str[i]=='U'||str[i]=='Y')
            arr[i]=1;
    }

    if(n==1)
    {
        if(arr[0]==1)
            cout << "1.0000000\n";
        else cout << "0.0000000\n";
        return 0;
    }
    for(i=1;i<n;i++){
        arr[i]+=arr[i-1];
        //cout << arr[i] << " ";
    }
    //cout << endl;*/
    sum=arr[n-1];
    b=arr[n-1];
    b+=(float)arr[n-1]/n;
    for(i=1;i<n/2;i++)
    {
        //cout << sum << endl;
        sum+=arr[n-i-1]-arr[i-1];

        b+=(float)sum/(i+1);
        b+=(float)sum/(n-i);
    }

    if(n%2==1)
    {
        sum+=arr[n/2]-arr[n/2-1];
        b+=(float)sum/(n/2+1);
    }
    printf("%.12f\n",b);

    /*for(i=0;i<vec.size();i++)
        cout << vec[i] << " ";*/
}


#include<bits/stdc++.h>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);
    char str[50005];
    long long int arr[50005]={0},sum,i,n;
    double b;
    cin >> str;
    n=strlen(str);

    for(i=0;i<n;i++)
    {
        if(str[i]=='I'||str[i]=='E'||str[i]=='A'||str[i]=='O'||str[i]=='U'||str[i]=='Y')
            arr[i]=1;
    }

    if(n==1)
    {
        if(arr[0]==1)
            cout << "1.0000000\n";
        else cout << "0.0000000\n";
        return 0;
    }
    for(i=1;i<n;i++){
        arr[i]+=arr[i-1];
        //cout << arr[i] << " ";
    }
    //cout << endl;*/
    sum=arr[n-1];
    b=arr[n-1];
    b+=(double)arr[n-1]/n;
    for(i=1;i<n/2;i++)
    {
        //cout << sum << endl;
        sum+=arr[n-i-1]-arr[i-1];

        b+=(double)sum/(i+1);
        b+=(double)sum/(n-i);
    }

    if(n%2==1)
    {
        sum+=arr[n/2]-arr[n/2-1];
        b+=(double)sum/(n/2+1);
    }
    printf("%.8lf\n",b);

    /*for(i=0;i<vec.size();i++)
        cout << vec[i] << " ";*/
}


#include<bits/stdc++.h>

using namespace std;

int main()
{
    char str[500005];
    int arr[500005]={0},sum,i,n;
    double b;
    vector<int> vec;
    cin >> str;
    n=strlen(str);

    for(i=0;i<n;i++)
    {
        if(str[i]=='I'||str[i]=='E'||str[i]=='A'||str[i]=='O'||str[i]=='U'||str[i]=='Y')
            arr[i]=1;
    }
    if(n==1)
    {
        if(arr[0]==1)
            cout << "1.0000000\n";
        else cout << "0.0000000\n";
        return 0;
    }
    for(i=1;i<n;i++){
        arr[i]+=arr[i-1];
        //cout << arr[i] << " ";
    }
    //cout << endl;*/
    sum=arr[n-1];
    b=arr[n-1];
    vec.push_back(sum);
    b+=(double)arr[n-1]/n;
    for(i=1;i<n/2;i++)
    {
        //cout << sum << endl;
        sum+=arr[n-i-1]-arr[i-1];
        vec.push_back(sum);
        b+=(double)sum/(i+1);
        b+=(double)sum/(n-i);
    }

    if(n%2==1)
    {
        sum+=arr[n/2]-arr[n/2-1];
        b+=(double)sum/(n/2+1);
    }
    printf("%.8lf\n",b);

    /*for(i=0;i<vec.size();i++)
        cout << vec[i] << " ";*/
}


#include<bits/stdc++.h>

using namespace std;

int main()
{
    char str[50005];
    long long int arr[50005]={0},sum,i,n;
    double b;
    vector<int> vec;
    cin >> str;
    n=strlen(str);

    for(i=0;i<n;i++)
    {
        if(str[i]=='I'||str[i]=='E'||str[i]=='A'||str[i]=='O'||str[i]=='U'||str[i]=='Y')
            arr[i]=1;
    }
    if(n==1)
    {
        if(arr[0]==1)
            cout << "1.0000000\n";
        else cout << "0.0000000\n";
        return 0;
    }
    for(i=1;i<n;i++){
        arr[i]+=arr[i-1];
        //cout << arr[i] << " ";
    }
    //cout << endl;*/
    sum=arr[n-1];
    b=arr[n-1];
    vec.push_back(sum);
    b+=(double)arr[n-1]/n;
    for(i=1;i<n/2;i++)
    {
        //cout << sum << endl;
        sum+=arr[n-i-1]-arr[i-1];
        vec.push_back(sum);
        b+=(double)sum/(i+1);
        b+=(double)sum/(n-i);
    }

    if(n%2==1)
    {
        sum+=arr[n/2]-arr[n/2-1];
        b+=(double)sum/(n/2+1);
    }
    printf("%.8lf\n",b);

    /*for(i=0;i<vec.size();i++)
        cout << vec[i] << " ";*/
}


/// You just can't beat the person who never gives up
/// ICPC next year

#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

#include<bits/stdc++.h>
using namespace std ;
const int N = 5e5+5 ;

string vowels = "IEAOUY" ;
bool vowel(char x){
    for(char ch:vowels) if(ch==x) return 1;
    return 0 ;
}

char str[N] ;
bool Never_give_up(){
    scanf("%s",str);
    long long val=1 ,cnt = 0 ,cur=0 ;
    long double ans = 0 ;
    for(int i=0;str[i];++i) cnt += vowel(str[i]);
    for(int len1=1,len2=strlen(str);len1<=len2;++len1,--len2){
        long long cur_ans = cur + val*cnt ;
        ans += (long double)cur_ans / len1 ;
        if(len1!=len2) ans += (long double)cur_ans / len2 ;
        cnt -= vowel(str[len1-1]) + vowel(str[len2-1]) ;
        cur += vowel(str[len1-1])*val +  vowel(str[len2-1])*val ;
        ++val ;
    }
    cout << fixed << setprecision(15) << ans << endl ;
    return 0;
}
int main(){
#ifndef ONLINE_JUDGE
    freopen("input.txt" ,"r" ,stdin);
    freopen("output.txt" ,"w" ,stdout);
#endif
    //std::ios::sync_with_stdio(0);
    //cin.tie(0) ,cout.tie(0);
    int t = 1 ,tc = 0 ;
    scanf("%d",&t);
    while(t--){
        Never_give_up();
    }
    return 0;
}


#include <iostream>
#include <cstring>
using namespace std;

bool isVowel(char ch) {
	return (ch == 'A' || ch == 'E' || ch == 'I'
			|| ch == 'O' || ch == 'U' || ch == 'Y');
}

const int maxn = 1000000;
long long prefix[maxn], sumPrefix[maxn];
string str;
double ans = 0.0;

long long getSum(int l, int r) {
	l -= 1;
	long long ret = sumPrefix[r];
	if (l >= 0) ret -= sumPrefix[l];
	return ret;
}

int main() {
	cin >> str;
	int N = str.size();
	for (int i = 1; i <= N; i++) {
		prefix[i] = prefix[i - 1] + isVowel(str[i - 1]);
		sumPrefix[i] = sumPrefix[i - 1] + prefix[i];
	}
	for (int len = 1; len <= N; len++) {
		long long currentSum = getSum(len, N) - getSum(0, N - len);
		ans += (1.0 * currentSum) / len;
	}
	printf("%.9f\n", ans);
	return 0;
}


#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <vector>
#include <utility>
#include <algorithm>
#include <unordered_map>
#include <numeric>
using namespace std;

typedef long long ll;
typedef pair<int,int> pii;

const int maxn = 5e5+10;
const int MOD = 1e9+7;

char s[maxn];
int pre[maxn];

inline isvoc(char c){
    return c=='A' or c=='E' or c=='I' or c=='O' or c=='U' or c=='Y';
}

int main()
{
    scanf("%s",s);
    int len = strlen(s);
    for(int i=1; i<=len; i++){
        pre[i]=pre[i-1]+(isvoc(s[i-1])?1:0);
    }
    ll temp = 0;
    double ans = 0.0;
    for(int l=1; l<=len; l++){
        temp += pre[len+1-l]-pre[l-1];
        ans += 1.0*temp/l;
    }
    printf("%.7f",ans);
    return 0;
}


#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <vector>
#include <utility>
#include <algorithm>
#include <unordered_map>
#include <numeric>
using namespace std;

typedef long long ll;
typedef pair<int,int> pii;

const int maxn = 5e5+10;
const int MOD = 1e9+7;

char s[maxn];
int pre[maxn];

inline isvoc(char c){
    return c=='A' or c=='E' or c=='I' or c=='O' or c=='U' or c=='Y';
}

int main()
{
    scanf("%s",s);
    int len = strlen(s);
    for(int i=1; i<=len; i++){
        pre[i]=pre[i-1]+(isvoc(s[i-1])?1:0);
    }
    int temp = 0;
    double ans = 0.0;
    for(int l=1; l<=len; l++){
        temp += pre[len+1-l]-pre[l-1];
        ans += 1.0*temp/l;
    }
    printf("%.7f",ans);
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long double ld;
ld dp[500005];
int main()
{
    dp[0]=0;
    dp[1]=1;
    ld sum=1;
    for(int i=2;i<=500000;i++)
    {
        sum=sum+(1.0/(ld)i);
        dp[i]=dp[i-1]+sum;
    }
    string s;
    cin>>s;
    long long n=s.size();
    ld ans=0;
    for(int i=0;i<n;i++)
    {
        if(s[i]=='A'||s[i]=='E'||s[i]=='I'||s[i]=='O'||s[i]=='U'||s[i]=='Y')
        {
            ans-=dp[i];
            ans-=dp[n-1-i];
            ans+=dp[n];
        }
    }
    cout<<fixed<<setprecision(10)<<ans<<'\n';
}


#define _CRT_SECURE_NO_WARNINGS
#define isws std::ios::sync_with_stdio(false)
#define _USE_MATH_DEFINES
#define ll long long

#include <bits/stdc++.h>
#include <unordered_map>

using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mt make_tuple
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef pair<int, int> PII;
const ll mod = 1000000007;
const ll INF = 998244353;

const int N = 500000 + 7;

string str;

bool vowel(int i)
{
	char c = str[i];
	if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' || c == 'Y') return true;
	return false;
}

double pre[N];
double suf[N];

int main()
{
	isws;
	cin.tie(NULL);
	cout.tie(NULL);
	cin >> str;
	int l = str.length();
	for (int i = 1; i <= l; i++)
	{
		double cur = 1.0 / i;
		pre[i] = pre[i - 1] + cur;
	}
	for (int i = l; i >= 1; i--)
	{
		double cur = 1.0 * (l-i+1) / i;
		suf[i] = suf[i + 1] + cur;
	}
	double ans = 0;
	//cout << pre[l] << "\n";
	for (int i = 0; i < l; i++)
	{
		if (vowel(i))
		{
			int maxlen = min(i + 1, l - i) - 1;
			//cout << maxlen << endl;
			double tmp = 1.0 * maxlen +suf[l - maxlen + 1] + 1.0 * (maxlen + 1) * (pre[l-maxlen] - pre[maxlen]);
			//cout << tmp << "\n";
			ans += tmp;
		}
	}
	cout << fixed << setprecision(10) << ans << "\n";
	return 0;
}


#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define speed std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define int long long

using namespace std;
int v[91];
int pre[500005],dp[500005];
main()
{
    v['A']=1;
    v['E']=1;
    v['I']=1;
    v['O']=1;
    v['U']=1;
    v['Y']=1;
   speed
   // freopen("input.txt","r",stdin);
    string s;
    cin>>s;
    int l=s.length();
    for(int i=0; i<l; i++)
    {
        if(i==0)
            pre[i]=v[s[i]];
        else
            pre[i]=pre[i-1]+v[s[i]];
    }
    double sum=0.0;
    int fl=0,l1=1,r1=l-2;
    for(int i=1; i<=l; i++)
    {
        double num,den;
        den=(l-i+1.0)*i;
        if(r1<l1)
        {
            fl=1;
        }
        if(i==1||i==l)
        {
            num=pre[l-1];
            dp[i]=num;

        }
        else
        {
            if(!fl)
            {
                dp[i]=dp[i-1]+pre[r1]-pre[l1-1];
                l1++;
                r1--;
                if(r1<l1)
                {
                    fl=1;
                }
            }
            else
            {
                int a=l1,b=r1;
                if(a-b==2)
                {
                    l1--;
                    r1++;
                    dp[i]=dp[i-1]-pre[r1]+pre[l1-1];
                    l1--;
                    r1++;
                }
                else if(a-b==1)
                {
                    dp[i]=dp[i-1];
                    l1--;
                    r1++;
                }
                else
                {
                    dp[i]=dp[i-1]-pre[r1]+pre[l1-1];
                    l1--;
                    r1++;
                }

            }
        }
        den=i;
      //  cout<<dp[i]<<" ";
        sum+=(dp[i]/den);
    }
    cout<<setprecision(7)<<sum;
    return 0;
}


#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define speed std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define int long long

using namespace std;
int v[91];
int pre[500005],dp;
main()
{
    v['A']=1;
    v['E']=1;
    v['I']=1;
    v['O']=1;
    v['U']=1;
    v['Y']=1;
   speed
   // freopen("input.txt","r",stdin);
    string s;
    cin>>s;
    int l=s.length();
    for(int i=0; i<l; i++)
    {
        if(i==0)
            pre[i]=v[s[i]];
        else
            pre[i]=pre[i-1]+v[s[i]];
    }
    double sum=0.0;
    int fl=0,l1=1,r1=l-2;
    for(int i=1; i<=l; i++)
    {
        double num,den;
        den=(l-i+1.0)*i;
        if(r1<l1)
        {
            fl=1;
        }
        if(i==1||i==l)
        {
            num=pre[l-1];
            dp=num;

        }
        else
        {
            if(!fl)
            {
                dp=dp+pre[r1]-pre[l1-1];
                l1++;
                r1--;
                if(r1<l1)
                {
                    fl=1;
                }
            }
            else
            {
                int a=l1,b=r1;
                if(a-b==2)
                {
                    l1--;
                    r1++;
                    dp=dp-pre[r1]+pre[l1-1];
                    l1--;
                    r1++;
                }
                else if(a-b==1)
                {
                    //dp[i]=dp[i-1];
                    l1--;
                    r1++;
                }
                else
                {
                    dp=dp-pre[r1]+pre[l1-1];
                    l1--;
                    r1++;
                }

            }
        }
        den=i;
      //  cout<<dp[i]<<" ";
        sum+=(dp/den);
    }
    cout<<setprecision(7)<<sum;
    return 0;
}


//#pragma optimization_level 3
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("fast-math")
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define mod 1000000007
#include<string.h>
#define inf 1000000000000000000
#define maxn 200005
typedef pair<ll,ll> pll;
typedef pair<int,int> pint;
#define PI 3.14159265359
#define endl '\n'
#define mapint_iterator map<int,int> :: iterator
#define mapll_iterator map<ll,ll> :: iterator
#define setint_iterator set<int> :: iterator
#define setll_iterator set<ll> :: iterator
#define cps CLOCKS_PER_SEC
#define setpint_iterator set<pint> :: iterator
#define setpll_iterator set<pll> :: iterator
#define cout1(a) cout<<a<<endl
#define cout2(a,b) cout<<a<<' '<<b<<endl
#define cout3(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define cout4(a,b,c,d) cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl
#define vcout(v,i) cout<<v[i].fi<<" "<<v[i].se<<endl
#define print_double(i) printf("%.9llf\n",i)
typedef priority_queue<ll,vector<ll>,greater<ll> > pqset;
typedef priority_queue<pll,vector<pll>,greater<pll> > pqset_ll;
#define pb push_back
#define pf push_front
#define fi first
#define mkp make_pair
#define se second
ll dxk[]={0,0,1,-1,1,1,-1,-1};
ll dyk[]={1,-1,0,0,1,-1,1,-1};
#include <ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> os;
typedef tree<pll,null_type,less<pll>,rb_tree_tag,tree_order_statistics_node_update> os_pair;
#define acc (ios::sync_with_stdio(false),cin.tie(0))
#define rep(i,n) for(ll i=0;i<n;i++)
#define per(i,n) for(ll i=n-1;i>=0;i--)
#define rep1(i,n) for(ll i=1;i<=n;i++)
#define per1(i,n) for(ll i=n;i>0;i--)
#define repeat(i,start,n) for(ll i=start;i<n;i++)
#define power2(i) ((ll)1<<(ll)i)
ll ll_max(ll a,ll b,ll c){return max(a,max(b,c));}
int int_max(int a,int b,int c){return max(a,max(b,c));}
ll ll_min(ll a,ll b,ll c){return min(a,min(b,c));}
int int_min(int a,int b,int c){return min(a,min(b,c));}
ll max(int a,ll b){ return max((ll)a,b);}
ll min(int a,ll b){ return min((ll)a,b);}
ll min(ll a,int b){ return min(a,(ll)b);}
ll max(ll a,int b){ return max(a,(ll)b);}
ll dx[]={0,0,1,-1};
ll dy[]={1,-1,0,0};
ll power(ll a,ll b){
	if(a==1)
		return 1;
	if(b==0)
		return 1;
	ll c=power(a,b/2);
	ll res=1;
	if(b%2){
		res=(c*c);
		if(res>=mod)
			res%=mod;
		res*=a;
	}
	else
		res=((c*c));
	if(res>=mod)
		res%=mod;
	return res;
}
ll power(ll a,ll b,ll mod1){
	if(a==1)
		return 1;
	if(b==0)
		return 1;
	ll c=power(a,b/2,mod1);
	ll res=1;
	if(b%2){
		res=(c*c);
		if(res>=mod1)
			res%=mod1;
		res*=a;
	}
	else
		res=((c*c));
	if(res>=mod1)
		res%=mod1;
	return res;
}
ll modInv(ll a){return power(a,mod-2);}
ll fact[1],inv[1];
void factorial(ll n){
	fact[0]=1;
	for(ll i=1;i<=n;i++){
		fact[i]=fact[i-1]*i;
		if(fact[i]>=mod)
			fact[i]%=mod;
	}
}
void InvFactorial(ll n){
	inv[0]=1;
	for(ll i=1;i<=n;i++)
		inv[i]=modInv(fact[i]);
}
ll ncr(ll n,ll r){
	if(n<r||n<0||r<0)
		return 0;
	ll b=inv[n-r];
	ll c=inv[r];
	ll a=fact[n]*b;
	if(a>=mod)
		a%=mod;
	a*=c;
	if(a>=mod)
		a%=mod;
	return a;
}
bool prime[1];
vector<int> primes;
void sieve(ll n){
    memset(prime,true,sizeof(prime));
	prime[1]=false;
    for (ll p=2;p*p<=n;p++){
        if (prime[p]){
            for (ll i=p*p;i<=n;i+=p)
                prime[i]=false;
        }
    }
    repeat(i,2,n+1)
    	if(prime[i])
    		primes.pb(i);
}
//ifstream cin("b_read_on.txt"); ofstream cout("output3.txt");
//Use (<<) for multiplication
//Use (>>) for division
//ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);cout<<fixed;cerr.tie(NULL);
// find_by_order -> value at index
// order_of_key -> index of value
// while using (1<<i) use ((ll)1<<(ll)i)
// in Floyd-Warshall Algo, k is outer loop
// If an element was not initially in map and if asked mp[a],the element gets inserted
// a%=mod take a lot of time... try to use it minimum and use memset as it reduces a lot of time usage...use if(a>=mod) a%=mod
//cout<<(double) can be harmful , always use printf(%.9llf)...take scanf("%lf",&p[i][j]) as input , not llf;
//use s.erase(it++) for erasing iterator and then moving to the next one
//never use adj.resize(n) as value is persistent, always erase
//use __builtin_popcountll() for ll
// no of prime numbers in range : (70,19) , (1000,168) , (100000,1229) , (sqrt(10^9),3409) ;
//always check the use of segment tree using bottom-up dp
//__gcd(0,0) gives runtime error
//power(a,b) == power(a,b%phi(a)) Fermet's Theorem
//never use "=" operator in compare function
//For checking odd cycles, check bipartite
char a[]={'A','E','I','O','U','Y'};
bool is_vowel(char a1){
	rep(i,6){
		if(a1==a[i])
			return 1;
	}
	return 0;
}
void solve(int countu){
	string s;
	cin>>s;
	int n=s.size();
	ll dp[n]={0};
	rep(i,n){
		if(is_vowel(s[i]))
			dp[i]++;
		if(i>0)
			dp[i]+=dp[i-1];
	}
	ll dp1[n]={0};
	rep(i,n){
		if(is_vowel(s[i]))
			dp1[i]+=(i+1);
		if(i>0)
			dp1[i]+=dp1[i-1];
	}
	ll dp2[n]={0};
	for(ll i=n-1,j=0;i>=0,j<n;i--,j++){
		if(is_vowel(s[i]))
			dp2[j]+=(j+1);
		if(j>0)
			dp2[j]+=dp2[j-1];
	}
	double ans=0.0;
	repeat(i,1,n+1){
		ll sum=i*dp[n-1];
		if(i>1){
			sum-=i*(dp[i-2]+dp[n-1]-dp[n-i]);
			sum+=dp1[i-2]+dp2[i-2];
		}
		ans+=(double)sum/(double)i;
	}
	cout1(ans);
}
int main(){
	cin.tie(NULL);cout.tie(NULL);cin.sync_with_stdio(0);cout.sync_with_stdio(0);cout<<fixed;
	srand(time(0));
	cout.precision(9);
	int t=1;
	//cin>>t;
	int countu=1;
    for(int i=1;i<=t;i++){
    	solve(countu);
    	countu++;
    }
}


#pragma optimization_level 3
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("fast-math")
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define mod 1000000007
#include<string.h>
#define inf 1000000000000000000
#define maxn 200005
typedef pair<ll,ll> pll;
typedef pair<int,int> pint;
#define PI 3.14159265359
#define endl '\n'
#define mapint_iterator map<int,int> :: iterator
#define mapll_iterator map<ll,ll> :: iterator
#define setint_iterator set<int> :: iterator
#define setll_iterator set<ll> :: iterator
#define cps CLOCKS_PER_SEC
#define setpint_iterator set<pint> :: iterator
#define setpll_iterator set<pll> :: iterator
#define cout1(a) cout<<a<<endl
#define cout2(a,b) cout<<a<<' '<<b<<endl
#define cout3(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define cout4(a,b,c,d) cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl
#define vcout(v,i) cout<<v[i].fi<<" "<<v[i].se<<endl
#define print_double(i) printf("%.9llf\n",i)
typedef priority_queue<ll,vector<ll>,greater<ll> > pqset;
typedef priority_queue<pll,vector<pll>,greater<pll> > pqset_ll;
#define pb push_back
#define pf push_front
#define fi first
#define mkp make_pair
#define se second
ll dxk[]={0,0,1,-1,1,1,-1,-1};
ll dyk[]={1,-1,0,0,1,-1,1,-1};
#include <ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> os;
typedef tree<pll,null_type,less<pll>,rb_tree_tag,tree_order_statistics_node_update> os_pair;
#define acc (ios::sync_with_stdio(false),cin.tie(0))
#define rep(i,n) for(ll i=0;i<n;i++)
#define per(i,n) for(ll i=n-1;i>=0;i--)
#define rep1(i,n) for(ll i=1;i<=n;i++)
#define per1(i,n) for(ll i=n;i>0;i--)
#define repeat(i,start,n) for(ll i=start;i<n;i++)
#define power2(i) ((ll)1<<(ll)i)
ll ll_max(ll a,ll b,ll c){return max(a,max(b,c));}
int int_max(int a,int b,int c){return max(a,max(b,c));}
ll ll_min(ll a,ll b,ll c){return min(a,min(b,c));}
int int_min(int a,int b,int c){return min(a,min(b,c));}
ll max(int a,ll b){ return max((ll)a,b);}
ll min(int a,ll b){ return min((ll)a,b);}
ll min(ll a,int b){ return min(a,(ll)b);}
ll max(ll a,int b){ return max(a,(ll)b);}
ll dx[]={0,0,1,-1};
ll dy[]={1,-1,0,0};
ll power(ll a,ll b){
	if(a==1)
		return 1;
	if(b==0)
		return 1;
	ll c=power(a,b/2);
	ll res=1;
	if(b%2){
		res=(c*c);
		if(res>=mod)
			res%=mod;
		res*=a;
	}
	else
		res=((c*c));
	if(res>=mod)
		res%=mod;
	return res;
}
ll power(ll a,ll b,ll mod1){
	if(a==1)
		return 1;
	if(b==0)
		return 1;
	ll c=power(a,b/2,mod1);
	ll res=1;
	if(b%2){
		res=(c*c);
		if(res>=mod1)
			res%=mod1;
		res*=a;
	}
	else
		res=((c*c));
	if(res>=mod1)
		res%=mod1;
	return res;
}
ll modInv(ll a){return power(a,mod-2);}
ll fact[1],inv[1];
void factorial(ll n){
	fact[0]=1;
	for(ll i=1;i<=n;i++){
		fact[i]=fact[i-1]*i;
		if(fact[i]>=mod)
			fact[i]%=mod;
	}
}
void InvFactorial(ll n){
	inv[0]=1;
	for(ll i=1;i<=n;i++)
		inv[i]=modInv(fact[i]);
}
ll ncr(ll n,ll r){
	if(n<r||n<0||r<0)
		return 0;
	ll b=inv[n-r];
	ll c=inv[r];
	ll a=fact[n]*b;
	if(a>=mod)
		a%=mod;
	a*=c;
	if(a>=mod)
		a%=mod;
	return a;
}
bool prime[1];
vector<int> primes;
void sieve(ll n){
    memset(prime,true,sizeof(prime));
	prime[1]=false;
    for (ll p=2;p*p<=n;p++){
        if (prime[p]){
            for (ll i=p*p;i<=n;i+=p)
                prime[i]=false;
        }
    }
    repeat(i,2,n+1)
    	if(prime[i])
    		primes.pb(i);
}
//ifstream cin("b_read_on.txt"); ofstream cout("output3.txt");
//Use (<<) for multiplication
//Use (>>) for division
//ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);cout<<fixed;cerr.tie(NULL);
// find_by_order -> value at index
// order_of_key -> index of value
// while using (1<<i) use ((ll)1<<(ll)i)
// in Floyd-Warshall Algo, k is outer loop
// If an element was not initially in map and if asked mp[a],the element gets inserted
// a%=mod take a lot of time... try to use it minimum and use memset as it reduces a lot of time usage...use if(a>=mod) a%=mod
//cout<<(double) can be harmful , always use printf(%.9llf)...take scanf("%lf",&p[i][j]) as input , not llf;
//use s.erase(it++) for erasing iterator and then moving to the next one
//never use adj.resize(n) as value is persistent, always erase
//use __builtin_popcountll() for ll
// no of prime numbers in range : (70,19) , (1000,168) , (100000,1229) , (sqrt(10^9),3409) ;
//always check the use of segment tree using bottom-up dp
//__gcd(0,0) gives runtime error
//power(a,b) == power(a,b%phi(a)) Fermet's Theorem
//never use "=" operator in compare function
//For checking odd cycles, check bipartite
char a[]={'A','E','I','O','U','Y'};
bool is_vowel(char a1){
	rep(i,6){
		if(a1==a[i])
			return 1;
	}
	return 0;
}
void solve(int countu){
	string s;
	cin>>s;
	int n=s.size();
	ll dp[n]={0};
	rep(i,n){
		if(is_vowel(s[i]))
			dp[i]++;
		if(i>0)
			dp[i]+=dp[i-1];
	}
	ll dp1[n]={0};
	rep(i,n){
		if(is_vowel(s[i]))
			dp1[i]+=(i+1);
		if(i>0)
			dp1[i]+=dp1[i-1];
	}
	ll dp2[n]={0};
	for(ll i=n-1,j=0;i>=0,j<n;i--,j++){
		if(is_vowel(s[i]))
			dp2[j]+=(j+1);
		if(j>0)
			dp2[j]+=dp2[j-1];
	}
	double ans=0.0;
	repeat(i,1,n+1){
		ll sum=i*dp[n-1];
		if(i>1){
			sum-=i*(dp[i-2]+dp[n-1]-dp[n-i]);
			sum+=dp1[i-2]+dp2[i-2];
		}
		ans+=(double)sum/(double)i;
	}
	cout1(ans);
}
int main(){
	cin.tie(NULL);cout.tie(NULL);cin.sync_with_stdio(0);cout.sync_with_stdio(0);cout<<fixed;
	srand(time(0));
	cout.precision(9);
	int t=1;
	//cin>>t;
	int countu=1;
    for(int i=1;i<=t;i++){
    	solve(countu);
    	countu++;
    }
}


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[500005];
double sum[500005];
int len;
void init(){
	int i=1;
	double d=0;
	for(i=1;i<=500000;i++){
		d+=1.0/i;
		sum[i]=sum[i-1]+d;
	}
}
int judge(char t){
	if(t=='A'||t=='I'||t=='E'||t=='U'||t=='O'||t=='Y')return 1;
	return 0;
}
double solve(int t){
	return sum[len]-sum[len-t]-sum[t-1];
}
int main(){
	init();
	scanf("%s",s+1);
	len=strlen(s+1);
	int i;
	double ans=0;
	for(i=1;i<=len;i++){
		if(judge(s[i])){
			ans+=solve(i);
		}
	}
	printf("%.8f\n",ans);
	return 0;
}


#include <bits/stdc++.h>

#define pb          push_back
#define pii         pair<int,int>
#define vi          vector<int>
#define vii         vector<pii>
#define mi          map<int,int>
#define mii         map<int,pii>
#define all(a)      (a).begin(),(a).end()
#define x           first
#define y           second
#define sz(x)       (int)x.size()
#define hell        1000007
#define endl        '\n'
#define rep(i,a,b)  for(int i=a;i<b;i++)
using namespace std;
double p[1000006];
string s;
set<char> vowels;
double f(int a,int b){
    if(a>b) return f(b,a);
    double cur=0;
    cur+=a;
    cur+=(a+1)*(p[b+1]-p[a]);
    cur+=(a+b+2)*(p[a+b+1]-p[b+1])-a;
    return cur;
}
void solve(){
    rep(i,1,1000005){
        p[i]=p[i-1]+1.0l/i;
    }
    cin>>s;
    double ans=0;
    rep(i,0,sz(s)){
        if(vowels.find(s[i])!=vowels.end()){
            ans=ans+f(i,sz(s)-i-1);
        }
    }
    cout<<fixed<<setprecision(10)<<ans<<endl;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    vowels.insert({'A','E','I','O','U','Y'});
    int t=1;
    // cin>>t;
    while(t--){
        solve();
    }
    return 0;
}


/*input
YISVOWEL
*/
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
#define REP(i , j , k)     for(int i = j ; i < k ; ++i)
#define RREP(i , j , k)    for(int i = j ; i >=k ; --i)
#define A    first
#define B    second
#define mp   make_pair
#define pb   emplace_back
#define PII pair<int , int>
#define MEM(i , j)   memset(i , j , sizeof i)
#define ALL(i)     i.begin() , i.end()
#define DBGG(i , j)     cout << i << " " << j << endl
#define DB4(i , j , k , l)  cout << i << " " << j << " " << k << " " << l << endl
#define IOS cin.tie() , cout.sync_with_stdio(0)
#define endl "\n"
///------------------------------------------------------------
#define int long long
#define MAX 600000
#define INF 0x3f3f3f3f

string s;
int bit1[MAX] , bit2[MAX];
void update1(int from , int val){ for(int i = from ; i < MAX ; i += i & -i) bit1[i] += val; }
void update2(int from , int val){ for(int i = from ; i < MAX ; i += i & -i) bit2[i] += val; }
int query1(int from){
	int res = 0;
	for(int i = from ; i > 0 ; i -= i & -i) res += bit1[i];
	return res;
}
int query2(int from){
	int res = 0;
	for(int i = from ; i > 0 ; i -= i & -i) res += bit2[i];
	return res;
}
int query1(int l , int r){ return query1(r) - query1(l - 1); }
int query2(int l , int r){ return query2(r) - query2(l - 1); }
int32_t main(){
	cin >> s;
	REP(i , 0 , s.size()){
		int ok = 0;
		if(s[i] == 'I')	ok = 1;
		if(s[i] == 'E')	ok = 1;
		if(s[i] == 'A')	ok = 1;
		if(s[i] == 'O')	ok = 1;
		if(s[i] == 'U')	ok = 1;
		if(s[i] == 'Y')	ok = 1;
		if(ok){
			update1(i + 1 , 1);
			update2(i + 1 , min(i + 1 , (int)(s.size()) - i));
		}
	}
	double ans = 0;
	REP(i , 1 , s.size() + 1){
		int tmp = min(i , (int)(s.size()) + 1 - i);
		int l = tmp , r = (int)(s.size()) + 1 - tmp;
		double v = query1(l + 1 , r - 1) * tmp + query2(1 , l) + query2(r , s.size());
		// DB4(i , l , r , query1(l + 1 , r - 1) * tmp + query2(1 , l) + query2(r , s.size()));
		ans += v / i;
	}
	printf("%.11f\n", ans);
    return 0;
}


/* In The Name Of God */
#include <bits/stdc++.h>

# define xx first
# define yy second
# define pb push_back
# define pp pop_back
# define eps 1e-9

using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef vector<int> vint;
ll psum[500500],cur;
string temp="IEAOUY";
double ans;
int main(){
	ios_base::sync_with_stdio (0);
    string s;cin>>s;
    for(int i=1 ; i<=(int)s.size() ; i++){
        bool mark = false;
        for(int j=0 ; j<6 ; j++)
            mark |= (temp[j]==s[i-1]);
        psum[i] = psum[i-1] + mark;
    }
    ll len = s.size();
    vint v;
    bool mark = false;
    for(int i=1 ; i<=len ; i++){
        if(i <= len-i+1){
            cur += psum[len-i+1] - psum[i-1];
            v.pb(psum[len-i+1] - psum[i-1]);
        }
        else{
            if(len%2==0 && !mark){
                mark = true;
            }
            else{
                cur -= v.back();
                v.pp();
            }
        }
        ans += (double)cur / i;
    }
    cout<<setprecision(10)<<fixed<<ans<<endl;
	return 0;
}


/* In The Name Of God */
#include <bits/stdc++.h>

# define xx first
# define yy second
# define pb push_back
# define pp pop_back
# define eps 1e-9

using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef vector<int> vint;
int psum[500500],cur;
string temp="IEAOUY";
double ans;
int main(){
	ios_base::sync_with_stdio (0);
    string s;cin>>s;
    for(int i=1 ; i<=(int)s.size() ; i++){
        bool mark = false;
        for(int j=0 ; j<6 ; j++)
            mark |= (temp[j]==s[i-1]);
        psum[i] = psum[i-1] + mark;
    }
    int len = s.size();
    vint v;
    bool mark = false;
    for(int i=1 ; i<=len ; i++){
        if(i <= len-i+1){
            cur += psum[len-i+1] - psum[i-1];
            v.pb(psum[len-i+1] - psum[i-1]);
        }
        else{
            if(len%2==0 && !mark){
                mark = true;
            }
            else{
                cur -= v.back();
                v.pp();
            }
        }
        ans += (double)cur / i;
    }
    cout<<setprecision(10)<<fixed<<ans<<endl;
	return 0;
}


#include <bits/stdc++.h>
using namespace std;
const int N = 500 * 1001;
string s;
int n;
long double ans, ps[N], from_end[N];
set<char> vowel = {'I', 'E', 'A', 'O', 'U', 'Y'};
void check(int dis) {
	ans += dis;
	ans += from_end[n - dis + 2];
	ans += dis * (ps[n - dis + 1] - ps[dis]);
}
int main() {
	cin >> s;
	n = s.length();
	from_end[n] = 1.0 / n;
	for (int i = 1; i < n; i++)
		from_end[n - i] = from_end[n - i + 1] + (i + 1) * 1.0 / (n - i) * 1.0;
	for (int i = 1; i <= n; i++)
		ps[i] = ps[i - 1] + (1.0 / i);
	for(int i = 0; i < n; i++)
		if(vowel.find(s[i]) != vowel.end())
			check(min(i + 1, int(n - i)));
	cout << fixed << setprecision(7) << ans;
	return 0;
}


#include <bits/stdc++.h>

#define all(A) begin(A), end(A)
#define rall(A) rbegin(A), rend(A)
#define sz(A) int(A.size())

using namespace std;

typedef long long ll;
typedef pair <int, int> pii;
typedef long double LD;

bool isVowel (char ch) {
  if (ch == 'A') return true;
  if (ch == 'E') return true;
  if (ch == 'I') return true;
  if (ch == 'O') return true;
  if (ch == 'U') return true;
  if (ch == 'Y') return true;
  return false;
}

int main () {
  ios::sync_with_stdio(false); cin.tie(0);
  string s;
  cin >> s;
  int n = sz(s);
  vector <LD> f(n + 1);
  f[1] = 1;
  for (int i = 2; i <= n; i++) f[i] = LD(1) / i + 2 * f[i - 1] - f[i - 2];
  LD ans = 0;
  for (int i = 0; i < n; i++) {
    if (isVowel(s[i])) {
      int a = i;
      int b = n - i - 1;
      ans += f[n] - f[a] - f[b];
    }
  }
  cout << fixed << setprecision(12) << ans << '\n';
  return (0);
}


#include <bits/stdc++.h>

using namespace std;

//9:30 pm

string s;
int n, a[500100], f[500100];

void Input()
{
    ios_base::sync_with_stdio(0);   cin.tie(0);

    cin >> s;   n = s.length();

    for (int i=0; i<=s.length()-1; i++)
        if (s[i] == 'I' || s[i] == 'E' || s[i] == 'A'
            || s[i] == 'O' || s[i] == 'U' || s[i] == 'Y')
                a[i + 1] = 1;

    for (int i=1; i<=n; i++) f[i] = f[i-1] + a[i];
}

void Process()
{
    double res = 0;
    long long u = 0;

    for (int i=1; i<=n/2; i++)
    {
        u += f[n-i+1] - f[i-1];

        res += (double) u / (n - i + 1);
        res += (double) u / i;
    }

    if (n % 2 == 1)
    {
        u += f[n / 2 + 1];

        res += double (u / (int) (n / 2 + 1));
    }

    cout << fixed << setprecision(7) << res;
}

int main()
{
    Input();
    Process();
    return 0;
}


#include <bits/stdc++.h>

using namespace std;

//9:30 pm

string s;
int n, a[500100], f[500100];

void Input()
{
    ios_base::sync_with_stdio(0);   cin.tie(0);

    cin >> s;   n = s.length();

    for (int i=0; i<=s.length()-1; i++)
        if (s[i] == 'I' || s[i] == 'E' || s[i] == 'A'
            || s[i] == 'O' || s[i] == 'U' || s[i] == 'Y')
                a[i + 1] = 1;

    for (int i=1; i<=n; i++) f[i] = f[i-1] + a[i];
}

void Process()
{
    double res = 0;
    long long u = 0;

//    for (int i=1; i<=n; i++)
//        cout << a[i] << " ";
//    cout << endl;

    for (int i=1; i<=n/2; i++)
    {
        u += f[n-i+1] - f[i-1];

        res += (double) u / (n - i + 1);
        res += (double) u / i;
    }

    if (n % 2 == 1)
    {
        u += a[n / 2 + 1];

        res += (double) u / (n / 2 + 1);
    }

    cout << fixed << setprecision(7) << res;
}

int main()
{
    Input();
    Process();
    return 0;
}


#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

ll pref[500006];

char s[500006];

bool vowel(char c)
{
	return c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' || c == 'Y';
}

int main()
{
	scanf("%s",s+1);
	int n = 1;
	for(; s[n]; n++);
	n--;
	for(int i = 1; i <= n ; i++)
	{
		pref[i] = pref[i-1] + (vowel(s[i]));
	}
	double ans = 0;
	double sum = 0;
	for(int i = 1; i <= n; i++)
	{
		sum += pref[n-i+1] - pref[i-1];
		ans += (sum/i);
	}
	printf("%.10lf\n",ans);

	return 0;
}


#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <list>
#include <set>
#include <map>
#include <unordered_map>
#include <bitset>
#include <algorithm>
#include <cmath>
#include <locale>
using namespace std;
#define MS0(I) memset(I, 0, sizeof(I));
#define MS1(I) memset(I, -1, sizeof(I));
#define rep(i, n) for(int i = 0; i < (n); ++i)
#define rep1(i, s, n) for(int i = (s); i < (n); ++i)
#define per1(i, a, b) for(int i = a; i >= b; --i)
#define DRI(A) int A; scanf("%d", &A);
#define DRII(A, B) int A, B; scanf("%d %d", &A, &B);
#define DRIII(A, B, C) int A, B, C; scanf("%d %d %d", &A, &B, &C);
#define SZ(X) ((int)X.size() )
#define MP make_pair
#define pb push_back
#define F first
#define S second
#define ALL(I) (I).begin(), (I).end()
typedef const void CV;
typedef long long LL;
typedef unsigned long long ULL;
typedef long double LDB;
typedef pair<int, int> PII;
const double eps = 1e-7;
const double PI = acos(-1);
const LL INFF = (LL)1e18;
const int INF = (int)1e9;
const int mod = (int)1e9+7;
const int MAX = (int)5e5+7;
char s[MAX];
LL p[MAX], m[MAX];
bool vow(char ch){
	if(ch == 'A') return 1;
	if(ch == 'E') return 1;
	if(ch == 'I') return 1;
	if(ch == 'O') return 1;
	if(ch == 'U') return 1;
	if(ch == 'Y') return 1;
	return 0;
}
int main(void){
	scanf("%s", s + 1);
	int l = strlen(s + 1);
	LL cnt = 0;
	rep1(i, 1, l+1) if(vow(s[i])){
		cnt ++;
		int ll = i, rr = l + 1 - i;
		m[rr+1]++;
		p[ll+1]++;
	}
	LL cur = cnt;
	LDB ans = cnt;
	rep1(i, 2, l+1){
		cnt -= (m[i] + p[i]);
		cur += cnt;
		ans += (LDB)cur / i;
	}
	printf("%.13Lf\n", ans);
	return 0;
}


#include<iostream>
#include<algorithm>
#include<vector>
#include<string.h>
#include<cmath>
#include<iomanip>
#include<string.h>
#include<limits.h>
#include<queue>
#include<set>
#include<map>
#include<bits/stdc++.h>
using namespace std;
typedef long long int llt;
typedef pair<llt,llt> pll;
typedef pair<char,char> pcc;
typedef pair<string,string> pss;
typedef pair<llt,char> plc;
#define sd(x) scanf("%d",&x)
#define sd2(x,y) scanf("%d%d",&x,&y)
#define sd3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define pb(x) push_back(x)
#define mp(x,y) make_pair(x,y)
#define tr(x) cout<<x<<endl;
#define tr2(x,y) cout<<x<<" "<<y<<endl;
#define tr3(x,y,z) cout<<x<<" "<<y<<" "<<z<<endl;
#define tr4(w,x,y,z) cout<<w<<" "<<x<<" "<<y<<" "<<z<<endl;
bool cmp(plc p1,plc p2){
	return p1.first>p2.first;
}
bool isvowel(char c){
	if(c=='A'||c=='I'||c=='E'||c=='O'||c=='U'||c=='Y')
		return true;
	return false;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	string s;
	cin>>s;
	llt n=s.size();
	llt v[n+1],arr[n+1],i;
	v[0]=0;
	for(i=1;i<=n;i++){
		arr[i]=0;
		if(isvowel(s[i-1])==true)
			v[i]=v[i-1]+1;
		else
			v[i]=v[i-1];
	}
	arr[0]=0;
	arr[n]=0;
	for(i=1;i<=n;i++){
		// tr4(i,n-i+1,v[i],v[n-i+1-1]);
		if(i-1>n-i-1+1)
			arr[i]=arr[i-1]-(v[i-1]-v[n-i+1]);
		else
			arr[i]=arr[i-1]+(v[n-i+1]-v[i-1]);
	}
	double sum=0;
	for(i=1;i<=n;i++){
		// cout<<arr[i]<<endl;
		sum+=(arr[i]*1.0)/i;
	}
	printf("%0.8lf\n",sum);
}


#include<iostream>
#include<algorithm>
#include<vector>
#include<string.h>
#include<cmath>
#include<iomanip>
#include<string.h>
#include<limits.h>
#include<queue>
#include<set>
#include<map>
#include<bits/stdc++.h>
using namespace std;
typedef long long int llt;
typedef pair<llt,llt> pll;
typedef pair<char,char> pcc;
typedef pair<string,string> pss;
typedef pair<llt,char> plc;
#define sd(x) scanf("%d",&x)
#define sd2(x,y) scanf("%d%d",&x,&y)
#define sd3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define pb(x) push_back(x)
#define mp(x,y) make_pair(x,y)
#define tr(x) cout<<x<<endl;
#define tr2(x,y) cout<<x<<" "<<y<<endl;
#define tr3(x,y,z) cout<<x<<" "<<y<<" "<<z<<endl;
#define tr4(w,x,y,z) cout<<w<<" "<<x<<" "<<y<<" "<<z<<endl;
bool cmp(plc p1,plc p2){
	return p1.first>p2.first;
}
bool isvowel(char c){
	if(c=='A'||c=='I'||c=='E'||c=='O'||c=='U'||c=='Y')
		return true;
	return false;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	string s;
	cin>>s;
	llt n=s.size();
	llt v[n+1],arr[n+1],i;
	v[0]=0;
	for(i=1;i<=n;i++){
		arr[i]=0;
		if(isvowel(s[i-1])==true)
			v[i]=v[i-1]+1;
		else
			v[i]=v[i-1];
	}
	arr[0]=0;
	arr[n]=0;
	for(i=1;i<=n;i++){
		// tr4(i,n-i+1,v[i],v[n-i+1-1]);
		if(i-1>n-i-1+1)
			arr[i]=arr[i-1]-(v[i-1]-v[n-i+1]);
		else
			arr[i]=arr[i-1]+(v[n-i+1]-v[i-1]);
	}
	double sum=0;
	for(i=1;i<=n;i++){
		// cout<<arr[i]<<endl;
		sum+=(arr[i]*1.0)/i;
	}
	cout<<sum<<endl;
}


//Template

//By Anik :)

#include <bits/stdc++.h>
using namespace std;

#define   f(i,n) 					for(int i=0;i<(n);i++)
#define   ff(i,n) 					for(int i=1;i<=(n);i++)
#define   m0(X) 					memset((X), 0, sizeof((X)))
#define   m1(X) 					memset((X), -1, sizeof((X)))
#define   pb(x) 					push_back(x)
#define   F     					first
#define   S  						second
#define   mp 						make_pair
//#define   inf                       1LL<<60LL

typedef long long ll;

int rd(int &x){ return scanf("%d",&x);}
int rd(int &x,int &y){ return scanf("%d %d",&x,&y);}
int rd(int &x,int &y,int &z){return scanf("%d %d %d",&x,&y,&z);}
int rd(int &x,int &y,int &z,int &s){return scanf("%d %d %d %d",&x,&y,&z,&s);}

#define debug(args...) { cerr<<__LINE__<<":: ";dbg,args; cerr<<endl;}
struct debugger { template<class T> debugger& operator,(const T& v) { cerr<<v<<" "; return *this; } } dbg ;
template <typename T> void debugv (vector <T> vec) {cerr<<"printing vector:: ";f(i,vec.size()){cout<<vec[i]<<" ";}cerr<<endl;}
template <typename T> void debugs (set <T> s){cerr<<"printing set:: ";for(auto it=s.begin();it!=s.end();it++){cout<<(*it)<<" ";}cerr<<endl;}

string s;
int n;
ll yo[500005], a[500005];

bool isV (char c)
{
    return (c=='A' || c=='E' || c=='I' || c=='O' || c=='U' || c=='Y');
}

int main()
{
    cin>>s;
    n=s.length();

    s="a"+s;

    for(int i=1; i<=n; i++){
        a[i] = a[i-1] + isV(s[i]);
    }

    for(int i=1, p=n; i<=n; i++, p--){
        yo[i] = yo[i-1] + a[p] - a[i-1];
    }

    long double ans=0.0;

    for(int i=1; i<=n; i++){
        ans += (1.0*yo[i])/(1.0*i);
    }

    cout<<fixed<<setprecision(14);
    cout<<(long double)(ans);

    return 0;
}


//Template

//By Anik :)

#include <bits/stdc++.h>
using namespace std;

#define   f(i,n) 					for(int i=0;i<(n);i++)
#define   ff(i,n) 					for(int i=1;i<=(n);i++)
#define   m0(X) 					memset((X), 0, sizeof((X)))
#define   m1(X) 					memset((X), -1, sizeof((X)))
#define   pb(x) 					push_back(x)
#define   F     					first
#define   S  						second
#define   mp 						make_pair
//#define   inf                       1LL<<60LL

typedef long long ll;

int rd(int &x){ return scanf("%d",&x);}
int rd(int &x,int &y){ return scanf("%d %d",&x,&y);}
int rd(int &x,int &y,int &z){return scanf("%d %d %d",&x,&y,&z);}
int rd(int &x,int &y,int &z,int &s){return scanf("%d %d %d %d",&x,&y,&z,&s);}

#define debug(args...) { cerr<<__LINE__<<":: ";dbg,args; cerr<<endl;}
struct debugger { template<class T> debugger& operator,(const T& v) { cerr<<v<<" "; return *this; } } dbg ;
template <typename T> void debugv (vector <T> vec) {cerr<<"printing vector:: ";f(i,vec.size()){cout<<vec[i]<<" ";}cerr<<endl;}
template <typename T> void debugs (set <T> s){cerr<<"printing set:: ";for(auto it=s.begin();it!=s.end();it++){cout<<(*it)<<" ";}cerr<<endl;}

string s;
int n;
ll b[500005], a[500005];

bool isV (char c)
{
    return (c=='A' || c=='E' || c=='I' || c=='O' || c=='U' || c=='Y');
}

int main()
{
    cin>>s;
    n=s.length();

    s="a"+s;

    for(int i=1; i<=n; i++){
        a[i] = a[i-1] + isV(s[i]);
    }

    for(int i=1; i<=n; i++){
        b[i] = b[i-1] + a[i];
    }

    long double ans=0.0;

    for(int i=1; i<=n; i++){
        ll sum = b[n] - b[i-1] - b[n-i];
        ans += (1.0*sum)/(i*1.0);
    }

    cout<<fixed<<setprecision(14);
    cout<<(long double)(ans);

    return 0;
}


//Template

//By Anik :)

#include <bits/stdc++.h>
using namespace std;

#define   f(i,n) 					for(int i=0;i<(n);i++)
#define   ff(i,n) 					for(int i=1;i<=(n);i++)
#define   m0(X) 					memset((X), 0, sizeof((X)))
#define   m1(X) 					memset((X), -1, sizeof((X)))
#define   pb(x) 					push_back(x)
#define   F     					first
#define   S  						second
#define   mp 						make_pair
//#define   inf                       1LL<<60LL

typedef long long ll;

int rd(int &x){ return scanf("%d",&x);}
int rd(int &x,int &y){ return scanf("%d %d",&x,&y);}
int rd(int &x,int &y,int &z){return scanf("%d %d %d",&x,&y,&z);}
int rd(int &x,int &y,int &z,int &s){return scanf("%d %d %d %d",&x,&y,&z,&s);}

#define debug(args...) { cerr<<__LINE__<<":: ";dbg,args; cerr<<endl;}
struct debugger { template<class T> debugger& operator,(const T& v) { cerr<<v<<" "; return *this; } } dbg ;
template <typename T> void debugv (vector <T> vec) {cerr<<"printing vector:: ";f(i,vec.size()){cout<<vec[i]<<" ";}cerr<<endl;}
template <typename T> void debugs (set <T> s){cerr<<"printing set:: ";for(auto it=s.begin();it!=s.end();it++){cout<<(*it)<<" ";}cerr<<endl;}

string s;
int n, yo[500005], a[500005];

bool isV (char c)
{
    return (c=='A' || c=='E' || c=='I' || c=='O' || c=='U' || c=='Y');
}

int main()
{
    cin>>s;
    n=s.length();

    s="a"+s;

    for(int i=1; i<=n; i++){
        a[i] = a[i-1] + isV(s[i]);
    }

    for(int i=1, p=n; i<=n; i++, p--){
        yo[i] = yo[i-1] + a[p] - a[i-1];
    }

    long double ans=0.0;

    for(int i=1; i<=n; i++){
        ans += (1.0*yo[i])/(1.0*i);
    }

    cout<<fixed<<setprecision(14);
    cout<<(long double)(ans);

    return 0;
}


#include<bits/stdc++.h>
using namespace std;

#define llong long long int
#define ll long long int
#define mod 1000000007

int main()
{
//	ios_base::sync_with_stdio(false);

	string str;

	cin>>str;

	int n = str.length();

	double sum = 0;

	vector<int> tempsum(n+5, 0);
	vector<int> ranges(n+5, 0);

	for(int i=0;i<n;i++)
	{
		bool vow = (str[i]!='A' && str[i]!='E' && str[i]!='I' && str[i]!='O' && str[i]!='U' && str[i]!='Y');

		if(vow)
			continue;

		int l = i+1;
		int r = n-i;

		int x = min(l, r);

		sum += x;

		tempsum[x+1] += x;

		ranges[n-x+1] += 1;
	}

	double cur = 0;
	double curranges = 0;

	for(int i=1;i<=n;i++)
	{
		cur -= curranges;

		cur += tempsum[i];

		sum += (cur/i);

		curranges += ranges[i];
	}

//	cout<<setprecision(8)<<sum<<endl;
printf("%.7f\n",sum);
}


#include <cstdio>
#include <vector>
#include <algorithm>
#include <cassert>
#include <cstring>

using namespace std;

using lint = long long;

const int N = 5*1e5 + 5;

lint get(char c){
    if(c=='I' || c=='E' || c=='A' || c=='O' || c=='U' || c=='Y')return 1;
    else return 0;
}

char s[N];
lint a[N];
lint d[N];

lint get(int a,int b){
    assert(a<=b);
    return d[b] - d[a-1];
}

int main(){
    int n;
    scanf("%s",s+1);
    n = strlen(s+1);
    for(int i=1;i<=n;i++){
        a[i] = get(s[i]);
        d[i] = d[i-1];
        if(a[i]){
            d[i]++;
        }
    }
    double ans = d[n];
    lint t = d[n];
    for(int i=2;i<=n;i++){
        t -= get(n-i+2,n);
        t += get(i,n);
        ans = ans + (double)t/i;
    }
    printf("%.7lf\n",ans);
    return 0;
}


#include <bits/stdc++.h>
typedef long long ll;
typedef long double ld;
using namespace std;
ll n;
string s;
set<char> st;
ll v[500005];
ld hsum[500005];
int main()
{
        cout << setprecision(12) << fixed ;
        cin >> s;
        n = s.length();
        s = "#" + s;
        st.insert('A');
        st.insert('E');
        st.insert('I');
        st.insert('O');
        st.insert('U');
        st.insert('Y');
        for(ll i=1;i<=n;i++){
                v[i] = v[i-1];
                if(st.find(s[i]) != st.end()) v[i]++;
        }
        ld ans = 0.0;
        hsum[1] = 1.0;
        for(ll i=2;i<=n;i++){
                hsum[i] = hsum[i-1];
                hsum[i] += (ld)(1.0 / (1.0*i));
        }
        for(ll i=1;i<=n;i++){

                ans += (ld)((1.0*v[i])*hsum[i]);
        }
        for(ll i=2;i<=n;i++){
                ans -= (ld)((1.0*v[i-1])*hsum[n-i+1]);
        }
        cout << ans << endl;
        return 0;
}


#define _CRT_SECURE_NO_WARNINGS 1
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <ctime>
#include <queue>
#include <map>
using namespace std;
typedef long long LL;

int num[500005];
int main()
{
	//ios_base::sync_with_stdio(false);
	char temp;
	double ans = 0;
	int cnt = 0;
	while (cin >> temp)
	{
		if (temp == '1')
			break;
		cnt++;
		if (temp == 'A' || temp == 'E' || temp == 'I' || temp == 'O' || temp == 'U' || temp == 'Y')
			num[cnt]++;
		num[cnt] += num[cnt - 1];
	}
	double tmp = 0;
	for (int i = 0; i < cnt; i++)
	{
		tmp += num[cnt - i] - num[i];
		ans += tmp / (i + 1);
	}
	printf("%.7lf\n", ans);
	return 0;
}


#include <cstdio>
#include <cassert>
#include <cstring>
#include <iostream>
#include <string>

using namespace std;

bool isVowels(char c){
    return 'I' == c || 'E' == c || 'A' == c || 'O' == c || 'U' == c || 'Y' == c;
}

#define int long long

int SUM[500001];
int SS[500001];

signed main(){
//    ios::sync_with_stdio(false);
//    cin.tie(nullptr);
//    cout.tie(nullptr);

    string str;
    cin >> str;

    for(int i = 0; i < str.size(); i++){
        if(isVowels(str[i])){
            SUM[i+1] = SUM[i]+1;
        }else{
            SUM[i+1] = SUM[i];
        }
    }
    //SS[i] = SUM[0] + ... + SUM[i]
    for(int i = 1; i <= str.size(); i++){
        SS[i] = SS[i-1] + SUM[i];
    }

    double result = 0;
    int n = str.size();
    for(int i = 1; i <= n; i++){
        int up = (SS[n] - SS[n-i]) -
                (SS[i-1]);
 //       cout << up << endl;
        result += (1. * up) / i;
    }
    printf("%.8lf\n", result);
 //   cout << result << endl;
    return 0;
}


#include <iostream>
#include <cstdio>
#include <cmath>
#include <queue>
#include <list>
#include <cstring>
#include <algorithm>
using namespace std;

int n;
char s[500050];
int a[500050];
double sum1[500050],sum2[500050];
double ans;

int main(){
	scanf("%s",s);
	n=strlen(s);
	for (int i=1;i<=n;i++){
		if (s[i-1]=='I'||s[i-1]=='E'||s[i-1]=='A'||s[i-1]=='O'||s[i-1]=='U'||s[i-1]=='Y'){
			a[i]=1.0;
		}
	}
/*	for (int i=1;i<=n;i++){
		cout<<sum[i]<<' ';
	}
	cout<<endl;
*/
	for (int i=1;i<=n;i++){
		sum1[i]=sum1[i-1]+(1.0)/i;
	}//求每行之和
	for (int i=1;i<=n;i++){
		sum2[i]=sum2[i-1]+sum1[i];
	}//求矩阵加左下角三角形
	for (int i=1;i<=n;i++){
		if (a[i]){
			ans+=sum2[n]-sum2[i-1]-sum2[n-i];
		}
	}
	printf("%.7f\n",ans);
}


#include <cstdio>
#include <cassert>
#include <cstring>
#include <iostream>
#include <string>

using namespace std;

bool isVowels(char c){
    return 'I' == c || 'E' == c || 'A' == c || 'O' == c || 'U' == c || 'Y' == c;
}

int SUM[500001];
int SS[500001];

int main(){
//    ios::sync_with_stdio(false);
//    cin.tie(nullptr);
//    cout.tie(nullptr);

    string str;
    cin >> str;

    for(int i = 0; i < str.size(); i++){
        if(isVowels(str[i])){
            SUM[i+1] = SUM[i]+1;
        }else{
            SUM[i+1] = SUM[i];
        }
    }
    //SS[i] = SUM[0] + ... + SUM[i]
    for(int i = 1; i <= str.size(); i++){
        SS[i] = SS[i-1] + SUM[i];
    }

    double result = 0;
    int n = str.size();
    for(int i = 1; i <= n; i++){
        int up = (SS[n] - SS[n-i]) -
                (SS[i-1]);
 //       cout << up << endl;
        result += (1. * up) / i;
    }
    printf("%.8lf\n", result);
 //   cout << result << endl;
    return 0;
}


// fyt
#include<bits/stdc++.h>
#define int long long
#define double long double
#define endl '\n'
using namespace std;

inline bool check(char &ch) {
	if(ch == 'I' || ch == 'E' || ch == 'A' || ch == 'O' || ch == 'U' || ch == 'Y')return 1;
	else return 0;
}
double fa[512345];
double pre[512345];
double suf[512345];
double val[512345];

signed main(){
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	string s;
	cin >> s;
	int len = s.size();
	for (int i=1; i<512345; i++){
		fa[i] = fa[i-1] + (1.0/(double)i);
	}

	for (int i=1; i<=len; i++){
		pre[i] = fa[i] + pre[i-1];
		suf[i] = suf[i-1] + fa[len-i+1];
	}

	for (int i=1; i<=len; i++){
		val[i] = suf[i] - pre[i-1];
	}

	double ans = 0;

	for (int i=0; i<s.size(); i++){
		if(check(s[i])) {
			ans += val[i+1];
		}
	}
	cout << fixed << setprecision(10) << ans << endl;
	return 0;
}


#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cstdio>
#include <vector>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <map>

using namespace std;

typedef long long LL;
const int maxn = 1e6+10;
const int inf = 0x3f3f3f3f;
const LL mod = 1e9+7;

int n;
char a[maxn];
double ans , s[maxn] , p[maxn];

int main()
{
	int i , j;
	cin >> a+1;
	n = strlen(a+1);
	for (i = 1 ; i <= n ; i++)
		s[i] = s[i-1]+(double)1/(double)i;
	p[0] = s[n]-s[0];
	for (i = 1 ; i <= n/2 ; i++)
		p[i] = p[i-1]+s[n-i]-s[i];
	for (i = 1 ; i <= n ; i++)
		if (a[i] == 'A' || a[i] == 'E' || a[i] == 'I' || a[i] == 'O' || a[i] == 'U' || a[i] == 'Y')
			ans += p[min(i-1,n-i)];
	printf("%.9lf\n",ans);
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
const int Maxn = 500010;
char s[Maxn];
int a[Maxn];
bool is(char c){
	return (c == 'I' || c == 'E' || c == 'A'
	|| c == 'O' || c == 'U' || c == 'Y');
}
int main()
{
	scanf("%s", s);
	int len = strlen(s);
	for (int i = 0;i < len;i++)
		a[i+1] = a[i] + (is(s[i]) ? 1 : 0);
	double ans = 0, sum = 0;
	int l = 0, r = len;
	for (int i = 1;i <= len;i++){
		sum += a[r--] - a[l++];
		ans += sum/i;
	}
	printf("%.7lf\n", ans);
	return 0;
}


#include <bits/stdc++.h>
using namespace std;

// Hate My Life //

#define ff first
#define ss second
#define pb push_back
#define pf push_front
#define ppb pop_back()
#define ppf pop_front()
#define all(vec) vec.begin(), vec.end()
#define fol(i,a,b) for(int i=a;i<b;i++)
#define loop(i,a,b) for(int i=a;i>=b;i--)
#define forr(x,arr) for(auto& x:arr)
#define mod 1000000007
#define INF 0x3f3f3f3f3f3f3f3f
#define EPS 1e-7
#define sz(x) ((lli)(x).size())

using   lli     =   long long;
using   lld     =   long double;
using   ulli    =   unsigned long long int;
using   pll     =   pair<lli, lli>;
using   ttt     =   pair<lli, pll>;
using   vttt    =   vector<ttt>;
using   vll     =   vector<pll>;
using   vl      =   vector<lli>;
using   vi      =   vector<int>;
using   vvi     =   vector<vector<int>>;
using   cd      =   complex<lld>;
const double PI = acos(-1);

#ifndef tejasp
#define trace(...) {}
#define cotra(...) {}
#define end_routine() {}
#define localsys 0
#define endl '\n'
#endif

#define FMAX 500010
lli tre1[FMAX], tre2[FMAX];

void add(lli tre[], int x, lli val)    {
    for (x+=3; x < FMAX; x += (x&(-x))) tre[x]+=val;
}

void add(lli tre[], int l, int r, lli val)    {
    add(tre, l,val); add(tre, r+1,-val);
}

lli get(lli tre[], int x)    {
    lli res = 0;
    for (x+=3; x > 0; x -= (x&(-x))) res += tre[x];
    return res;
}

lli  get(lli tre[], int l, int r)    {
    return (l>r) ? 0 : get(tre,r)-get(tre,l-1);
}

void upd(lli x, lli val)
{
    add(tre1, x, val);
    add(tre2, x, val*(x-1));
}

void upd(lli l, lli r, lli val)
{
    if(l>r) return;
    add(tre1, l, val);
    add(tre1, r+1, -val);
    add(tre2, l, val*(l-1));
    add(tre2, r+1, -val*r);
}

lli query (lli x)           {   return x*get(tre1, x) - get(tre2, x);   }
lli query (int l, int r)    {   return query(r) - query(l-1);           }

set<char> vow ({'I', 'E', 'A', 'O', 'U', 'Y'});

void process (string &s) {
    int ind=1;
    fol(i,0,sz(s)/2) {
        if(vow.find(s[i])!=vow.end()) {
            upd(1,ind,1);
            upd(sz(s)-ind+2, sz(s),-1);
        }
        ind++;
    }
}

int tejas_919(int kkkk)
{
    lli n, m, k, q, u, v, temp=0;
    lld ans=0;
    string s;
    cin>>s;
    process(s);
    reverse(all(s));
    process(s);
    if(sz(s)%2) {
        if(vow.find(s[(sz(s)/2)+1])!=vow.end()) {
            upd(1,(sz(s)/2)+1,1);
            upd((sz(s)/2)+2,sz(s),-1);
        }
    }
    fol(i,1,sz(s)+1) {
        lld cur = query(i), di=i;
        cur /= di;
        ans += cur;
    }
    cout<<ans<<endl;
    return 0;
}

signed main()
{
    #ifdef tejasp
            freopen("input.txt", "rt", stdin);
            freopen("output.txt", "wt", stdout);
    #endif
    if(!localsys) { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); }
    cout << fixed << setprecision(10);
    int t=1;
    //cin>>t;
    fol(i,0,t) { tejas_919(i+1); }
    end_routine();
    //if(localsys) system("pause");
}


#include <bits/stdc++.h>
using namespace std;

// Hate My Life //

#define ff first
#define ss second
#define pb push_back
#define pf push_front
#define ppb pop_back()
#define ppf pop_front()
#define all(vec) vec.begin(), vec.end()
#define fol(i,a,b) for(int i=a;i<b;i++)
#define loop(i,a,b) for(int i=a;i>=b;i--)
#define forr(x,arr) for(auto& x:arr)
#define mod 1000000007
#define INF 0x3f3f3f3f3f3f3f3f
#define EPS 1e-7
#define sz(x) ((lli)(x).size())

using   lli     =   long long;
using   lld     =   long double;
using   ulli    =   unsigned long long int;
using   pll     =   pair<lli, lli>;
using   ttt     =   pair<lli, pll>;
using   vttt    =   vector<ttt>;
using   vll     =   vector<pll>;
using   vl      =   vector<lli>;
using   vi      =   vector<int>;
using   vvi     =   vector<vector<int>>;
using   cd      =   complex<lld>;
const double PI = acos(-1);

#ifndef tejasp
#define trace(...) {}
#define cotra(...) {}
#define end_routine() {}
#define localsys 0
#define endl '\n'
#endif

#define FMAX 500010
lli tre1[FMAX], tre2[FMAX];

void add(lli tre[], int x, lli val)    {
    for (x+=3; x < FMAX; x += (x&(-x))) tre[x]+=val;
}

void add(lli tre[], int l, int r, lli val)    {
    add(tre, l,val); add(tre, r+1,-val);
}

lli get(lli tre[], int x)    {
    lli res = 0;
    for (x+=3; x > 0; x -= (x&(-x))) res += tre[x];
    return res;
}

lli  get(lli tre[], int l, int r)    {
    return (l>r) ? 0 : get(tre,r)-get(tre,l-1);
}

void upd(lli x, lli val)
{
    add(tre1, x, val);
    add(tre2, x, val*(x-1));
}

void upd(lli l, lli r, lli val)
{
    if(l>r) return;
    add(tre1, l, val);
    add(tre1, r+1, -val);
    add(tre2, l, val*(l-1));
    add(tre2, r+1, -val*r);
}

lli query (lli x)           {   return x*get(tre1, x) - get(tre2, x);   }
lli query (int l, int r)    {   return query(r) - query(l-1);           }

set<char> vow ({'I', 'E', 'A', 'O', 'U', 'Y'});

void process (string &s) {
    int ind=1;
    fol(i,0,sz(s)/2) {
        if(vow.find(s[i])!=vow.end()) {
            upd(1,ind,1);
            upd(sz(s)-ind+2, sz(s),-1);
        }
        ind++;
    }
}

int tejas_919(int kkkk)
{
    lli n, m, k, q, u, v, temp=0;
    lld ans=0;
    string s;
    cin>>s;
    n=sz(s);
    process(s);
    reverse(all(s));
    process(s);
    if(sz(s)%2) {
        if(vow.find(s[(sz(s)/2)])!=vow.end()) {
            upd(1,(sz(s)/2)+1,1);
            upd((sz(s)/2)+2,sz(s),-1);
        }
    }
    fol(i,1,sz(s)+1) {
        lld cur = query(i), di=i;
        cur /= di;
        ans += cur;
    }
    cout<<ans<<endl;
    return 0;
}

signed main()
{
    #ifdef tejasp
            freopen("input.txt", "rt", stdin);
            freopen("output.txt", "wt", stdout);
    #endif
    if(!localsys) { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); }
    cout << fixed << setprecision(10);
    int t=1;
    //cin>>t;
    fol(i,0,t) { tejas_919(i+1); }
    end_routine();
    //if(localsys) system("pause");
}


#include <bits/stdc++.h>
using namespace std;
#define int               long long
#define pb                push_back
#define ppb               pop_back
#define pf                push_front
#define ppf               pop_front
#define all(x)            (x).begin(),(x).end()
#define uniq(v)           (v).erase(unique(all(v)),(v).end())
#define sz(x)             (int)((x).size())
#define fr                first
#define sc                second
#define pii               pair<int,int>
#define rep(i,a,b)        for(int i=a;i<b;i++)
#define mem1(a)           memset(a,-1,sizeof(a))
#define mem0(a)           memset(a,0,sizeof(a))
#define ppc               __builtin_popcount
#define ppcll             __builtin_popcountll

template<typename T1,typename T2>istream& operator>>(istream& in,pair<T1,T2> &a){in>>a.fr>>a.sc;return in;}
template<typename T1,typename T2>ostream& operator<<(ostream& out,pair<T1,T2> a){out<<a.fr<<" "<<a.sc;return out;}
template<typename T,typename T1>T amax(T &a,T1 b){if(b>a)a=b;return a;}
template<typename T,typename T1>T amin(T &a,T1 b){if(b<a)a=b;return a;}

const long long INF=1e18;
const int32_t M=1e9+7;
const int32_t MM=998244353;

const int N=5e5+5;
string s = "AEIOUY";
bool vowel(char c){
	for(char z:s){
		if(c==z)return 1;
	}
	return 0;
}

double d[N];

void solve(){
	string s;
	cin>>s;
	int n = sz(s);
	double ans =0 , tmp = 0;
	rep(i,1,N){
		d[i] = 1.0/i + d[i-1];
	}
	int l=0,r=sz(s)-1;
	tmp = d[n];
	for(char c:s){
		if(vowel(c)){
			ans += tmp;
		}
		tmp += d[n] - d[++l];
		tmp -= d[n] - d[r--];
	}
	cout<<setprecision(9);
	cout<<fixed;
	cout<<ans;
}
signed main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	#ifdef SIEVE
		sieve();
	#endif
	#ifdef NCR
		init();
	#endif
	int t=1;
	//cin>>t;
	while(t--) solve();
	return 0;
}


#include<iostream>
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
#define int long long int
#define double long double
const int N=5e5+5;
void fun(){
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
   #endif
}
int md=1e9+7;
int __gcd(int a, int b) {if(b==0) return a; return __gcd(b, a%b);}
int poww(int a, int b) {int res=1;while(b) {if(b&1){res*=a;res%=md;}a*=a;a%=md;b>>=1;}return res;}
void ainp(int arr[], int n) {for(int i=1;i<=n;i++) cin>>arr[i];}
string s;int pref[N], dpref[N];
bool isvowel(char ch)
{
	if(ch=='A'||ch=='E'||ch=='I'||ch=='O'||ch=='U'||ch=='Y') return true;
	return false;
}
signed main()
{
	ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);fun();
	cin>>s;
	int n=s.length();
	for(int i=1;i<=n;i++)
		pref[i]=pref[i-1]+isvowel(s[i-1]);

	double ans=0;double count=0;
	for(int i=1;i<=n;i++)
	{
		int low=i;int up=n-i;
		if(low>up+1){
			count-=pref[low-1]-pref[up+1];
		}
		else
		{
			count+=pref[up+1]-pref[low-1];
		}
		ans+=count/i;
	}
	cout<<setprecision(12)<<ans<<"\n";
}


#include <bits/stdc++.h>
using namespace std;
bool f(char x) {
    if (x == 'A') return 1;
    if (x == 'E') return 1;
    if (x == 'O') return 1;
    if (x == 'U') return 1;
    if (x == 'Y') return 1;
    if (x == 'I') return 1;
    return 0;
}
const int MAXN = 5e5 + 77;
double d[MAXN];
double ans[MAXN];
int main() {
    string a;
    cin >> a;
    for (int i = 1; i <= a.size(); i++) {
        d[i] = d[i - 1] + 1.0 / i;
    }
    for (int i = 1; i <= a.size(); i++) {
        ans[i] = ans[i -1 ] + d[i];
    }
    double res = 0;
    for (int i = 1; i <= a.size(); i++) {
        if (f(a[i-1])) {
            res += ans[a.size()] - ans[i - 1] - ans[a.size() - i];
        }
    }
    cout << fixed << setprecision(6)<< res;
}


#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
typedef long long int lld;
lld dp[555555],dp2[555555];
string kk="AEIOUY";
double tot;
int main(void){
	string a;
	cin >> a;
	for(int e=0;e<a.size();e++){
		dp[e+1]=dp[e];
		int cc=0;
		for(int p=0;p<6;p++){
			if(a[e]==kk[p]) cc++;
		}
		if(cc){
			dp[e+1]++;
		}
	}
	for(int p=0;p<=a.size();p++) dp2[p]=dp2[p-1]+dp[p];
	for(int p=1;p<=a.size();p++){
		lld now = dp2[a.size()]-dp2[a.size()-p]-dp2[p-1];
		tot+=(double)now/(double)p;
	}
	printf("%.9lf",tot);
}


#include <bits/stdc++.h>

#define fi first
#define se second
#define mp make_pair
#define pb push_back

using namespace std;
typedef long long ll;

const int maxn = 5e5 + 5;

int N;
char vowels[] = {'I', 'E', 'A', 'O', 'U', 'Y'};
int s[maxn];

bool is (char x){
	for (int i=0; i<6; ++i)
		if (x == vowels[i]) return true;
	return false;
}

signed main(void){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

	string str;
	cin >> str;
	N = str.size();
	str = " " + str;
	for (int i=1; i<=N; ++i)
		s[i] = s[i-1] + is(str[i]);
	double ans = 0, ret = 0;
	for (int len=1; len<=N; ++len){
		ret += s[N-len+1] - s[len-1];
		ans += ret * 1.0 / len;
	}
	cout << fixed << setprecision (6) << ans << '\n';
}