#include <bits/stdc++.h>
using namespace std;
struct segtree {
  long long sz;
  vector<long long> val;
  void init(long long n) {
    sz = 1;
    long long i;
    while (sz < n) {
      sz *= 2;
    }
    for (i = 0; i < 2 * sz; i++) {
      val.push_back(0);
    }
  }
  void set(long long i, long long v, long long x, long long lx, long long rx) {
    if (rx - lx == 1) {
      val[x] = v;
      return;
    }
    long long mid = (lx + rx) / 2;
    if (i < mid) {
      set(i, v, 2 * x + 1, lx, mid);
    } else {
      set(i, v, 2 * x + 2, mid, rx);
    }
    val[x] = val[2 * x + 1] + val[2 * x + 2];
  }
  void set(long long i, long long v) { set(i, v, 0, 0, sz); }
  long long sum(long long l, long long r, long long x, long long lx,
                long long rx) {
    if (rx <= l || lx >= r) {
      return 0;
    }
    if (rx <= r && lx >= l) {
      return val[x];
    }
    long long mid = (lx + rx) / 2;
    long long s1 = sum(l, r, 2 * x + 1, lx, mid);
    long long s2 = sum(l, r, 2 * x + 2, mid, rx);
    return s1 + s2;
  }
  long long sum(long long l, long long r) { return sum(l, r, 0, 0, sz); }
};
int main() {
  long long n;
  cin >> n;
  string s;
  cin >> s;
  std::vector<long long> ok;
  set<long long> v[27];
  long long i, x, ans = 0;
  segtree st;
  st.init(n);
  for (i = 0; i < s.length(); i++) {
    v[s[i] - 'a'].insert(s.length() - i - 1);
  }
  for (i = 0; i < s.length(); i++) {
    x = *v[s[i] - 'a'].begin();
    v[s[i] - 'a'].erase(x);
    ok.push_back(x);
  }
  for (i = 0; i < ok.size(); i++) {
    ans += st.sum(ok[i], n);
    st.set(ok[i], 1);
  }
  cout << ans << " ";
  return 0;
}
