#include <bits/stdc++.h>
const int mod = 1000000007;
const int modd = 233317;
const int base = 131;
const double pi = acos(-1);
const int N = 2e5 + 10;
const int M = 1e9;
using namespace std;
long long int n, m, k, tot = 0, b[501000], a[30][300010];
string s, s1;
struct node {
  long long int sum, l, r, tag;
} t[2000010];
void innt() {
  for (long long int i = 0; i < 30; i++) a[i][0] = 1;
}
void build(long long int l, long long int r, long long int ri) {
  t[ri].tag = 0;
  t[ri].l = l;
  t[ri].r = r;
  if (l == r) {
    b[l] = ri;
    t[ri].sum = 0;
    return;
  }
  long long int mid = (l + r) >> 1;
  build(l, mid, ri << 1);
  build(mid + 1, r, ri << 1 | 1);
  t[ri].sum = 0;
}
void update(long long int l, long long int r, long long int ri) {
  if (t[ri].l >= l && t[ri].r <= r) {
    t[ri].sum += 1;
    t[ri].tag += 1;
    return;
  }
  long long int mid = (t[ri].l + t[ri].r) >> 1;
  if (l <= mid) update(l, r, ri << 1);
  if (r >= mid + 1) update(l, r, ri << 1 | 1);
  return;
}
long long int qurry(long long int ri, long long int x) {
  if (t[ri].tag) {
    t[ri << 1].sum += t[ri].tag;
    t[ri << 1 | 1].sum += t[ri].tag;
    t[ri << 1].tag += t[ri].tag;
    t[ri << 1 | 1].tag += t[ri].tag;
    t[ri].tag = 0;
  }
  if (b[x] == ri) {
    return t[ri].sum;
  }
  long long int mid = (t[ri].l + t[ri].r) >> 1;
  if (x <= mid)
    return qurry(ri << 1, x);
  else
    return qurry(ri << 1 | 1, x);
}
int main() {
  long long int zt, i, j, ma, x, y, z, q, l, r;
  ios::sync_with_stdio(false);
  cin >> n >> s;
  memset(a, 0, sizeof(a));
  for (i = 0; i < n; i++) {
    x = s[i] - 'a';
    a[x][++a[x][0]] = i + 1;
  }
  innt();
  build(1, n, 1);
  reverse(s.begin(), s.end());
  ma = 0;
  for (i = 0; i < n; i++) {
    x = s[i] - 'a';
    y = a[x][a[x][0]];
    a[x][0]++;
    l = y;
    y += qurry(1, y);
    update(1, l, 1);
    ma += y - i - 1;
  }
  cout << ma;
  return 0;
}
