#include <bits/stdc++.h>
#pragma GCC optimize "trapv"
long long int power(long long int x, long long int b) {
  long long int p = 1;
  while (b > 0) {
    if (b & 1) {
      p = p * x;
      p %= 1000000007;
    }
    b >>= 1;
    x *= x;
    x %= 1000000007;
  }
  return p % 1000000007;
}
using namespace std;
struct ppp {
  char a;
  long long int b, c, d;
};
long long int N;
struct lex_compare {
  bool operator()(ppp p1, ppp p2) {
    if (p1.a == p2.a) {
      if (p1.b == p2.b)
        return p1.c < p2.c;
      else
        return p1.b < p2.b;
    } else {
      return p1.a < p2.a;
    }
  }
};
struct BIT {
  vector<long long int> arr;
  int sizet;
  void init(int n) {
    sizet = n;
    arr.assign(sizet + 5, 0);
    return;
  }
  void add(int x, int val) {
    x++;
    while (x <= sizet) {
      arr[x] += val;
      x += (x & (-x));
    }
    return;
  }
  long long int query(int x) {
    x++;
    long long int ans = 0;
    while (x > 0) {
      ans += arr[x];
      x -= (x & -x);
    }
    return ans;
  }
};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ;
  long long int n;
  cin >> n;
  string s;
  cin >> s;
  string t = s;
  reverse(t.begin(), t.end());
  deque<long long int> arr[26];
  for (long long int i = 0; i < n; i++) {
    arr[int(s[i] - 'a')].push_back(i);
  }
  BIT bit;
  bit.init(n + 1);
  long long int ans = 0;
  for (long long int i = 0; i < n; i++) {
    long long int c = t[i] - 'a';
    int ind = arr[c].front();
    arr[c].pop_front();
    long long int infront = bit.query(n) - bit.query(ind);
    ans += (infront + ind - i);
    bit.add(ind, 1);
  }
  cout << ans << "\n";
  return 0;
}
