//
// Created by David on 2020/10/03 0003.
//

#include <iostream>
#include <cstring>
#include <map>

using namespace std;

string str;
int n;

struct complex {
    int real, imagine;

    explicit complex(int re = 0, int im = 0) : real(re), imagine(im) {}

    friend complex operator+(complex a, complex b) {
        complex c;
        c.real = a.real + b.real;
        c.imagine = a.imagine + b.imagine;
        return c;
    }

    friend complex operator-(complex a, complex b) {
        complex c;
        c.real = a.real - b.real;
        c.imagine = a.imagine - b.imagine;
        return c;
    }

    friend bool operator==(complex a, int b) {
        return a.imagine == 0 && a.real == b;
    }
};

complex a[5004], s[5004];
int ans;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    cin >> n >> str;
    for (int i = 1; i <= n; i++) {
        char ch = str[i - 1];
        if (ch == 'A') a[i] = complex(1, 0);
        if (ch == 'T') a[i] = complex(-1, 0);
        if (ch == 'C') a[i] = complex(0, 1);
        if (ch == 'G') a[i] = complex(0, -1);
        s[i] = s[i - 1] + a[i];
    }
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j < i; j++) {
            if (s[i] - s[j] == 0 || s[j] - s[i] == 0) ans++;
        }
    }
    cout << ans;

    return 0;
}

/*
_/_/_/_/    _/_/_/_/_/  _/_/_/
_/      _/      _/    _/      _/
_/      _/      _/    _/      _/
_/      _/      _/    _/      _/
_/      _/      _/    _/  _/  _/
_/      _/  _/  _/    _/    _/_/
_/_/_/_/      _/_/     _/_/_/_/_/

_/_/_/_/    _/    _/  _/      _/
_/      _/   _/  _/   _/_/  _/_/
_/      _/    _/_/    _/ _/_/ _/
_/      _/     _/     _/  _/  _/
_/      _/    _/_/    _/      _/
_/      _/   _/  _/   _/      _/
_/_/_/_/    _/    _/  _/      _/

_/_/_/_/_/ _/_/_/_/_/ _/_/_/_/_/
    _/         _/     _/
    _/         _/     _/
    _/         _/     _/_/_/_/
    _/         _/     _/
    _/         _/     _/
    _/     _/_/_/_/_/ _/_/_/_/_/

_/_/_/_/_/ _/_/_/_/_/ _/_/_/_/_/
    _/         _/     _/
    _/         _/     _/
    _/         _/     _/_/_/_/
    _/         _/     _/
    _/         _/     _/
    _/     _/_/_/_/_/ _/_/_/_/_/
*/
#include <cassert>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cctype>

#include <algorithm>
#include <random>
#include <bitset>
#include <queue>
#include <functional>
#include <set>
#include <map>
#include <vector>
#include <chrono>
#include <iostream>
#include <iomanip>
#include <limits>
#include <numeric>

#define LOG(FMT...) fprintf(stderr, FMT)

using namespace std;

typedef long long ll;
typedef unsigned long long ull;

// mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

template<class T>
istream &operator>>(istream &is, vector<T> &v) {
  for (T &x : v)
    is >> x;
  return is;
}

template<class T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  if (!v.empty()) {
    os << v.front();
    for (int i = 1; i < v.size(); ++i)
      os << ' ' << v[i];
  }
  return os;
}

const int P = 998244353;

int norm(int x) { return x >= P ? (x - P) : x; }

void add(int &x, int y) { if ((x += y) >= P) x -= P; }

void sub(int &x, int y) { if ((x -= y) < 0) x += P; }

void exGcd(int a, int b, int &x, int &y) {
  if (!b) {
    x = 1;
    y = 0;
    return;
  }
  exGcd(b, a % b, y, x);
  y -= a / b * x;
}

int inv(int a) {
  int x, y;
  exGcd(a, P, x, y);
  return norm(x + P);
}

const int N = 3010, L = 15;

int A[L], B[L];
int f[L][N];
int ans[N], q[N];

int main() {
#ifdef ELEGIA
  freopen("test.in", "r", stdin);
  int nol_cl = clock();
#endif
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int n, k;
  cin >> n >> k;

  for (int i = 1; i != L; ++i) {
    B[i] = (1 << i) - 1;
    A[i] = A[i - 1] + B[i];
  }

  f[0][0] = 1;
  for (int i = 0; i <= n; ++i) {
    for (int j = 1; A[j] <= i; ++j)
      sub(f[0][i], f[j][i - A[j]]);
    int j;
    for (j = 1; B[j] <= i; ++j)
      f[j][i] = norm(P - f[j - 1][i] + f[j][i - B[j]]);
    for (; B[j] <= n; ++j)
      f[j][i] = norm(P - f[j - 1][i]);
  }

  {
    int C = 0;
    for (int i = 0; C <= n; ++i, C = A[i]) {
      if (i)
        for (int j = B[i]; j <= n; ++j) add(f[0][j], f[0][j - B[i]]);
      memset(q, 0, sizeof(q));
      if (i & 1)
        for (int j = 0; j <= n - C; ++j) sub(q[j + C], f[0][j]);
      else for (int j = 0; j <= n - C; ++j) add(q[j + C], f[0][j]);
      for (int j = 1; j <= n >> i; ++j)
        add(ans[j], q[n - j * (1 << i)]);
    }
  }

  cout << ans[k] << '\n';

#ifdef ELEGIA
  LOG("Time: %dms\n", int ((clock()
      -nol_cl) / (double)CLOCKS_PER_SEC * 1000));
#endif
  return 0;
}
