func_code_string: #include <bits/stdc++.h>   using namespace std;   int N;   char S[500050];   int Aint[4 * 500050];   int pa, pb, pv;   long long A[500050];   void update(int k, int st, int dr) {     if (pa <= st && dr <= pb) {       Aint[k] += pv;       return;     }     int m = (st + dr) / 2;     if (pa <= m) {       update(2 * k, st, m);     }     if (pb > m) {       update(2 * k + 1, m + 1, dr);     }   }   void goUpdates(int p) {     int a = p + 1;     int b = N - p;     if (a > b) {       swap(a, b);     }     pa = 1;     pb = a;     pv = 1;     update(1, 1, N);     if (b + 1 <= N) {       pa = b + 1;       pb = N;       pv = -1;       update(1, 1, N);     }   }   void go(int k, int st, int dr, long long sum) {     sum += Aint[k];     if (st == dr) {       A[st] = sum;       return;     }     int m = (st + dr) / 2;     go(2 * k, st, m, sum);     go(2 * k + 1, m + 1, dr, sum);   }   int main() {     cin.sync_with_stdio(false);     fgets(S, sizeof(S), stdin);     N = 0;     for (int i = 0; S[i] !=   n  && S[i] !=   0 ; i++, N++)       ;     for (int i = 0; i < N; i++) {       if (S[i] ==  I  || S[i] ==  E  || S[i] ==  A  || S[i] ==  O  ||           S[i] ==  U  || S[i] ==  Y ) {         goUpdates(i);       }     }     go(1, 1, N, 0);     double ans = 0.0;     for (int i = 1; i <= N; i++) {       A[i] += A[i - 1];       ans += (double)A[i] / i;     }     cout << fixed << setprecision(10) << ans << endl;     return 0;   }   