#include <bits/stdc++.h>
using namespace std;
template <class T>
T sqr(const T &a) {
  return a * a;
}
const int MAXN = 100;
const int INF = 1e9;
char s[MAXN];
int len;
int d[MAXN][MAXN][MAXN][2];
vector<pair<int, pair<int, int>>> V, K, C;
void relax(int &x, int y) { x = min(x, y); }
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  scanf("%d %s", &len, s);
  for (int i = 0; i < (len); i++) {
    if (s[i] == 'V')
      V.push_back({i, {(int)K.size(), i - (int)V.size() - (int)K.size()}});
    else if (s[i] == 'K')
      K.push_back({i, {(int)V.size(), i - (int)V.size() - (int)K.size()}});
    else
      C.push_back({i, {(int)V.size(), (int)K.size()}});
  }
  for (int i = 0; i < (MAXN); i++)
    for (int j = 0; j < (MAXN); j++)
      for (int k = 0; k < (MAXN); k++)
        for (int l = 0; l < (2); l++) d[i][j][k][l] = INF;
  d[0][0][0][0] = 0;
  for (int i = 0; i < ((int)V.size() + 1); i++) {
    for (int j = 0; j < ((int)K.size() + 1); j++) {
      for (int pos = 0; pos < (len); pos++) {
        if (pos < i + j) continue;
        for (int flag = 0; flag < (2); flag++) {
          int val = d[i][j][pos][flag];
          if (i < (int)V.size()) {
            relax(d[i + 1][j][pos + 1][1],
                  val + abs(j - V[i].second.first) +
                      abs(pos - i - j - V[i].second.second));
          }
          if (j < (int)K.size() && !flag) {
            relax(d[i][j + 1][pos + 1][0],
                  val + abs(i - K[j].second.first) +
                      abs(pos - i - j - K[j].second.second));
          }
          if (pos - i - j < C.size())
            relax(d[i][j][pos + 1][0],
                  val + abs(i - C[pos - i - j].second.first) +
                      abs(j - C[pos - i - j].second.second));
        }
      }
    }
  }
  printf("%d\n", min(d[(int)V.size()][(int)K.size()][len][0],
                     d[(int)V.size()][(int)K.size()][len][1]) /
                     2);
}
