func_code_string: #include <bits/stdc++.h>   using namespace std;   char s1[200100], s2[200100];   vector<int> pos[26];   long long sum1[27][200100];   long long sum2[27][200100];   int main() {     int n;     scanf( %d , &n);     long long res2 = 0;     for (int i = (1); i < (n + 1); ++i) res2 += (n - i + 1) * 1ll * (n - i + 1);     scanf( %s%s , &s1, &s2);     for (int i = (0); i < (n); ++i) pos[s2[i] -  A ].push_back(i);     for (int i = (0); i < (26); ++i) {       for (int j = (0); j < (pos[i].size()); ++j) {         sum1[i][j] += pos[i][j] + 1;         if (j) sum1[i][j] += sum1[i][j - 1];       }       for (int j = (int)pos[i].size() - 1; j >= 0; --j) {         sum2[i][j] += n - pos[i][j];         if (j != (int)pos[i].size() - 1) sum2[i][j] += sum2[i][j + 1];       }     }     double res1 = 0;     for (int i = (0); i < (n); ++i) {       int v = s1[i] -  A ;       int l = 0;       int r = (int)pos[v].size() - 1;       int best = -1;       while (l <= r) {         int m = (l + r) / 2;         if (pos[v][m] <= i) {           best = m;           l = m + 1;         } else           r = m - 1;       }       if (best != -1) res1 += (sum1[v][best]) * 1ll * (n - i);       if (res1 < 0) cout <<  FAIL  << endl;       best++;       if (best != pos[v].size()) res1 += (sum2[v][best]) * 1ll * (i + 1);       if (res1 < 0) cout <<  FAIL  << endl;     }     double res = res1 / (double)res2;     printf( %.15lf n , res);     return 0;   }   