#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;
}
