/* Author : Do Thanh Triet - Tran Hung Dao High School for Gifted Student */
/* Algorithms + Data structures + Arts programming = Program <3 */
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ft first
#define sc second
#define oset tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define FOR(i, l, r) for (int i = (l); i <= (r); ++i)
#define FORD(i, r, l) for (int i = (r); i >= (l); --i)
#define all(x) x.begin(), x.end()
#define endl '\n'
#define int ll
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef pair<int, int> ii;
const int maxn = 2e5 + 9;
const int N = 2e5 + 9;
const int MOD = 1e9 + 7;
const long long INF = 0x3f;
const long long oo = 1e18 + 9;
#define TASK "code"
int n, ans = 0;
char a[maxn];
int cnt[maxn], cntLef[maxn], cntRig[maxn];
char s[maxn], t[maxn];
int ddLef[maxn], ddRig[maxn];
queue<int>vec[maxn];
int lz[4 * N], st[4 * N];
void update(int id, int l, int r, int u, int v, int val) {
if (lz[id]) {
st[id] += lz[id];
if (l != r) {
lz[id * 2 + 1] += lz[id];
lz[id * 2] += lz[id];
}
lz[id] = 0;
}
if (l > v || r < u || l > r || u > v) return;
if (l >= u && r <= v) {
st[id] += val;
if (l != r) {
lz[id * 2] += val;
lz[id * 2 + 1] += val;
}
return;
}
int mid = (l + r) >> 1;
update(id * 2, l, mid, u, v, val);
update(id * 2 + 1, mid + 1, r, u, v, val);
st[id] = max(st[id * 2], st[id * 2 + 1]);
}
int get(int id, int l, int r, int u, int v) {
if (lz[id]) {
st[id] +=lz[id];
if(l != r) {
lz[id * 2 + 1] +=lz[id];
lz[id * 2] +=lz[id];
}
lz[id] = 0;
}
if (l > v || r < u) return INT_MIN;
if (l >= u && r <= v) {
return st[id];
}
int mid = (l + r) >> 1;
return max(get(id * 2, l, mid, u, v), get(id * 2 + 1, mid + 1, r, u, v));
}
void solve() {
cin >> n;
FOR(i,1,2 * n) {
cin >> a[i];
cnt[a[i] - 'a' + 1]++;
}
int tmp = n;
FOR(i,1,n) {
cntLef[a[i] - 'a' + 1]++;
cntRig[a[i + n] - 'a' + 1]++;
}
int ans = 0;
//cout << cnt[4] << ' ' << cntRig[4];
int ct = 0;
string outLef = "", outRig = "";
FORD(i, n, 1) {
if (cntLef[a[i] - 'a' + 1] > cnt[a[i] - 'a' + 1] / 2) {
--cntLef[a[i] - 'a' + 1];
ans += (tmp - i);
--tmp;
++ct;
ddLef[i] = true;
}
}
tmp = n + 1;
FOR(i,n + 1, 2 * n) {
if (cntRig[a[i] - 'a' + 1] > cnt[a[i] - 'a' + 1] / 2) {
--cntRig[a[i] - 'a' + 1];
ans += (i - tmp);
++tmp;
ddRig[i] = true;
}
}
ans += ct * ct;
int c1 = 0, c2 = 0;
FOR(i,1,n) {
if (!ddLef[i]) {
s[++c1] = a[i];
}
else {
outLef = outLef + a[i];
}
}
FOR(i,n + 1, 2 * n) {
if (ddRig[i]) outRig = outRig + a[i];
}
for (char ch : outLef) {
t[++c2] = ch;
}
FOR(i,n + 1, 2 * n) if (!ddRig[i]) t[++c2] = a[i];
for (char ch : outRig) {
s[++c1] = ch;
}
for (int i = 1; i <= c2; ++i) {
vec[t[i] - 'a' + 1].push(i);
}
FOR(i, 1, c2) {
update(1,1,c2,i,i,i);
}
int cur = 0;
FOR(i, 1, c1) {
int pos = vec[s[i] - 'a' + 1].front();
vec[s[i] - 'a' + 1].pop();
int realpos = get(1,1,c2,pos,pos);
ans += realpos - i;
update(1,1,c2,i,realpos - 1,1);
}
cout << ans;
}
signed main()
{
ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
//freopen(TASK ".inp", "r", stdin);
//freopen(TASK ".out", "w", stdout);
solve();
return 0;
}
//Take a deep breath, don't be nervous, read the question slowly and understand the question, the question is often simpler than you think.
/*
Input:
*/
/*
Output:
*/
LyogQXV0aG9yIDogRG8gVGhhbmggVHJpZXQgLSBUcmFuIEh1bmcgRGFvIEhpZ2ggU2Nob29sIGZvciBHaWZ0ZWQgU3R1ZGVudCAqLwovKiAgICAgIEFsZ29yaXRobXMgKyBEYXRhIHN0cnVjdHVyZXMgKyBBcnRzIHByb2dyYW1taW5nID0gUHJvZ3JhbSA8MyAgICAgICovCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KCiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKI2RlZmluZSBvc2V0IHRyZWU8aW50LCBudWxsX3R5cGUsbGVzczxpbnQ+LCByYl90cmVlX3RhZyx0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+CiNkZWZpbmUgRk9SKGksIGwsIHIpIGZvciAoaW50IGkgPSAobCk7IGkgPD0gKHIpOyArK2kpCiNkZWZpbmUgRk9SRChpLCByLCBsKSBmb3IgKGludCBpID0gKHIpOyBpID49IChsKTsgLS1pKQojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgaW50IGxsCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwoKY29uc3QgaW50IG1heG4gPSAyZTUgKyA5Owpjb25zdCBpbnQgTiA9ICAyZTUgKyA5Owpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKY29uc3QgbG9uZyBsb25nIElORiA9IDB4M2Y7CmNvbnN0IGxvbmcgbG9uZyBvbyA9IDFlMTggKyAgOTsKCiNkZWZpbmUgVEFTSyAiY29kZSIKCmludCBuLCBhbnMgPSAwOwpjaGFyIGFbbWF4bl07CgppbnQgY250W21heG5dLCBjbnRMZWZbbWF4bl0sIGNudFJpZ1ttYXhuXTsKCmNoYXIgc1ttYXhuXSwgdFttYXhuXTsKaW50IGRkTGVmW21heG5dLCBkZFJpZ1ttYXhuXTsKCnF1ZXVlPGludD52ZWNbbWF4bl07CgppbnQgbHpbNCAqIE5dLCBzdFs0ICogTl07Cgp2b2lkIHVwZGF0ZShpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2LCBpbnQgdmFsKSB7CgogICAgaWYgKGx6W2lkXSkgewogICAgICAgIHN0W2lkXSArPSBseltpZF07CiAgICAgICAgaWYgKGwgIT0gcikgewogICAgICAgICAgICBseltpZCAqIDIgKyAxXSArPSBseltpZF07CiAgICAgICAgICAgIGx6W2lkICogMl0gKz0gbHpbaWRdOwogICAgICAgIH0KICAgICAgICBseltpZF0gPSAwOwogICAgfQogICAgaWYgKGwgPiB2IHx8IHIgPCB1IHx8IGwgPiByIHx8IHUgPiB2KSByZXR1cm47CiAgICBpZiAobCA+PSB1ICYmIHIgPD0gdikgewogICAgICAgIHN0W2lkXSArPSB2YWw7CiAgICAgICAgaWYgIChsICE9IHIpIHsKICAgICAgICAgICAgbHpbaWQgKiAyXSArPSB2YWw7CiAgICAgICAgICAgIGx6W2lkICogMiArIDFdICs9IHZhbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICB1cGRhdGUoaWQgKiAyLCBsLCBtaWQsIHUsIHYsIHZhbCk7CiAgICB1cGRhdGUoaWQgKiAyICsgMSwgbWlkICsgMSwgciwgdSwgdiwgdmFsKTsKICAgIHN0W2lkXSA9IG1heChzdFtpZCAqIDJdLCBzdFtpZCAqIDIgKyAxXSk7Cn0KCmludCBnZXQoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdikgewogICAgaWYgKGx6W2lkXSkgewogICAgICAgIHN0W2lkXSArPWx6W2lkXTsKICAgICAgICBpZihsICE9IHIpIHsKICAgICAgICAgICAgbHpbaWQgKiAyICsgMV0gKz1seltpZF07CiAgICAgICAgICAgIGx6W2lkICogMl0gKz1seltpZF07CiAgICAgICAgfQogICAgICAgIGx6W2lkXSA9IDA7CiAgICB9CiAgICBpZiAobCA+IHYgfHwgciA8IHUpIHJldHVybiBJTlRfTUlOOwogICAgaWYgKGwgPj0gdSAmJiByIDw9IHYpIHsKICAgICAgICByZXR1cm4gc3RbaWRdOwogICAgfQogICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKCiAgICByZXR1cm4gbWF4KGdldChpZCAqIDIsIGwsIG1pZCwgdSwgdiksIGdldChpZCAqIDIgKyAxLCBtaWQgKyAxLCByLCB1LCB2KSk7Cn0KCnZvaWQgc29sdmUoKSB7CiAgICBjaW4gPj4gbjsKICAgIEZPUihpLDEsMiAqIG4pIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgICAgICBjbnRbYVtpXSAtICdhJyArIDFdKys7CiAgICB9CiAgICBpbnQgdG1wID0gbjsKICAgIEZPUihpLDEsbikgewogICAgICAgIGNudExlZlthW2ldIC0gJ2EnICsgMV0rKzsKICAgICAgICBjbnRSaWdbYVtpICsgbl0gLSAnYScgKyAxXSsrOwogICAgfQogICAgaW50IGFucyA9IDA7CiAgICAvL2NvdXQgPDwgY250WzRdIDw8ICcgJyA8PCBjbnRSaWdbNF07CiAgICBpbnQgY3QgPSAwOwogICAgc3RyaW5nIG91dExlZiA9ICIiLCBvdXRSaWcgPSAiIjsKICAgIEZPUkQoaSwgbiwgMSkgewogICAgICAgIGlmIChjbnRMZWZbYVtpXSAtICdhJyArIDFdID4gY250W2FbaV0gLSAnYScgKyAxXSAvIDIpIHsKICAgICAgICAgICAgLS1jbnRMZWZbYVtpXSAtICdhJyArIDFdOwogICAgICAgICAgICBhbnMgKz0gKHRtcCAtIGkpOwogICAgICAgICAgICAtLXRtcDsKICAgICAgICAgICAgKytjdDsKICAgICAgICAgICAgZGRMZWZbaV0gPSB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHRtcCA9IG4gKyAxOwogICAgRk9SKGksbiArIDEsIDIgKiBuKSB7CiAgICAgICAgaWYgKGNudFJpZ1thW2ldIC0gJ2EnICsgMV0gPiBjbnRbYVtpXSAtICdhJyArIDFdIC8gMikgewogICAgICAgICAgICAtLWNudFJpZ1thW2ldIC0gJ2EnICsgMV07CiAgICAgICAgICAgIGFucyArPSAoaSAtIHRtcCk7CiAgICAgICAgICAgICsrdG1wOwogICAgICAgICAgICBkZFJpZ1tpXSA9IHRydWU7CiAgICAgICAgfQogICAgfQogICAgYW5zICs9IGN0ICogY3Q7CiAgICBpbnQgYzEgPSAwLCBjMiA9IDA7CiAgICBGT1IoaSwxLG4pIHsKICAgICAgICBpZiAoIWRkTGVmW2ldKSB7CiAgICAgICAgICAgIHNbKytjMV0gPSBhW2ldOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgb3V0TGVmID0gb3V0TGVmICsgYVtpXTsKICAgICAgICB9CiAgICB9CiAgICBGT1IoaSxuICsgMSwgMiAqIG4pIHsKICAgICAgICBpZiAoZGRSaWdbaV0pIG91dFJpZyA9IG91dFJpZyArIGFbaV07CiAgICB9CiAgICBmb3IgKGNoYXIgY2ggOiBvdXRMZWYpIHsKICAgICAgICB0WysrYzJdID0gY2g7CiAgICB9CiAgICBGT1IoaSxuICsgMSwgMiAqIG4pIGlmICghZGRSaWdbaV0pIHRbKytjMl0gPSBhW2ldOwogICAgZm9yIChjaGFyIGNoIDogb3V0UmlnKSB7CiAgICAgICAgc1srK2MxXSA9IGNoOwogICAgfQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gYzI7ICsraSkgewogICAgICAgIHZlY1t0W2ldIC0gJ2EnICsgMV0ucHVzaChpKTsKICAgIH0KICAgIEZPUihpLCAxLCBjMikgewogICAgICAgIHVwZGF0ZSgxLDEsYzIsaSxpLGkpOwogICAgfQogICAgaW50IGN1ciA9IDA7CiAgICBGT1IoaSwgMSwgYzEpIHsKICAgICAgICBpbnQgcG9zID0gdmVjW3NbaV0gLSAnYScgKyAxXS5mcm9udCgpOwogICAgICAgIHZlY1tzW2ldIC0gJ2EnICsgMV0ucG9wKCk7CiAgICAgICAgaW50IHJlYWxwb3MgPSBnZXQoMSwxLGMyLHBvcyxwb3MpOwogICAgICAgIGFucyArPSByZWFscG9zIC0gaTsKICAgICAgICB1cGRhdGUoMSwxLGMyLGkscmVhbHBvcyAtIDEsMSk7CiAgICB9CiAgICBjb3V0IDw8IGFuczsKfQoKc2lnbmVkIG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSwgY2luLnRpZSgwKSwgY291dC50aWUoMCk7CiAgICAvL2ZyZW9wZW4oVEFTSyAiLmlucCIsICJyIiwgc3RkaW4pOwogICAgLy9mcmVvcGVuKFRBU0sgIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0KLy9UYWtlIGEgZGVlcCBicmVhdGgsIGRvbid0IGJlIG5lcnZvdXMsIHJlYWQgdGhlIHF1ZXN0aW9uIHNsb3dseSBhbmQgdW5kZXJzdGFuZCB0aGUgcXVlc3Rpb24sIHRoZSBxdWVzdGlvbiBpcyBvZnRlbiBzaW1wbGVyIHRoYW4geW91IHRoaW5rLgovKgpJbnB1dDoKCiovCi8qCk91dHB1dDoKCiovCg==