#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const int maxn = 2e5 + 4;
const int maxm = 1e3 + 4;
const double pi = acos(-1.0);
int n;
vector<long long> pos[26], pre[26], aft[26];
char s[maxn], t[maxn];
int main() {
  int ik, i, j, k, kase;
  scanf("%d%s%s", &n, s, t);
  for (i = 0; t[i]; ++i) pos[t[i] - 'A'].push_back(i);
  for (i = 0; i < 26; ++i) {
    for (j = 0; j < pos[i].size(); ++j) {
      pre[i].push_back(pos[i][j] + 1);
      aft[i].push_back(n - pos[i][j]);
      if (j) pre[i][j] += pre[i][j - 1];
    }
    for (j = pos[i].size() - 2; j >= 0; --j) aft[i][j] += aft[i][j + 1];
  }
  double fenzi = 0, fenmu = 0;
  for (i = 0; i < n; ++i) {
    fenmu += 1LL * (i + 1) * (i + 1);
    int id = s[i] - 'A';
    int idx = upper_bound(pos[id].begin(), pos[id].end(), i) - pos[id].begin();
    if (idx != pos[id].size()) fenzi += (1LL + i) * aft[id][idx];
    if (idx != 0) fenzi += (n - i) * 1LL * pre[id][idx - 1];
  }
  printf("%.10f\n", fenzi * 1.0 / fenmu);
  return 0;
}
