#include <cassert>
#include <cctype>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <string>
#include <vector>
#include <deque>
#include <list>
#include <set>
#include <map>
#include <bitset>
#include <stack>
#include <queue>
#include <algorithm>
#include <functional>
#include <iterator>
#include <numeric>
#include <utility>
using namespace std;
#define forn(i, n) for(int i = 0; i < (int)(n); i++)
#define ford(i, n) for(int i = (int)(n) - 1; i >= 0; i--)
#define fore(i, a, n) for(int i = (int)(a); i < (int)(n); i++)
#define DEBUG if(0)
#define PAUSE system("pause")
#define READ(f) freopen(f, "r", stdin)
#define WRITE(f) freopen(f, "w", stdout)
#define ALL(c) c.begin(), c.end()
#define PB(x) push_back(x)
#define UB(s, e, x) upper_bound(s, e, x)
#define LB(s, e, x) lower_bound(s, e, x)
#define REV(s, e) reverse(s, e);
#define SZ(c) c.size()
#define SET(p) memset(p, -1, sizeof(p))
#define CLR(p) memset(p, 0, sizeof(p))
#define MEM(p, v) memset(p, v, sizeof(p))
#define LAST(a) (int(a.size()) - 1)
#define PN(n) printf("%d",n)
#define PDN(n) printf("%lf",n)
#define PLN(n) printf("%lld",n)
#define PS(n) printf("%s",n)
#define PL() printf("\n")
#define SN(n) scanf("%d",&n)
#define SDN(n) scanf("%lf",&n)
#define SLN(n) scanf("%lld",&n)
#define SS(n) scanf("%s",n)
#define i64 long long
#define ff first
#define ss second
template< class T > T sq(T &x) { return x * x; }
template< class T > T abs(T &n) { return (n < 0 ? -n : n); }
template< class T > T max(T &a, T &b) { return (!(a < b) ? a : b); }
template< class T > T min(T &a, T &b) { return (a < b ? a : b); }
template< class T > T gcd(T a, T b) { return (b != 0 ? gcd<T>(b, a%b) : a); }
template< class T > T lcm(T a, T b) { return (a / gcd<T>(a, b) * b); }
template< class T > T mod(T &a, T &b) { return (a < b ? a : a % b); }
template< class T > bool inside(T &a, T &b, T &c) { return a<=b && b<=c; }
template< class T > void setmax(T &a, T b) { if(a < b) a = b; }
template< class T > void setmin(T &a, T b) { if(b < a) a = b; }
const double EPS = 1E-9;
//const int INF = 100000000;
const int INF = 0x3f3f3f3f;
const double PI = 3.1415926535897932384626433832795;
const int MAX = 150;
int dx[]={ 0, 0, -1, 1, -1, 1,-1, 1};
int dy[]={-1, 1, 0, 0, -1,-1, 1, 1};
string preProcess(string s) {
int n = s.length();
if (n == 0) return "^$";
string ret = "^";
for (int i = 0; i < n; i++)
ret += "#" + s.substr(i, 1);
ret += "#$";
return ret;
}
void countPalindrome(int k, string s) {
string T = preProcess(s);
int n = T.length();
int *P = new int[n];
int C = 0, R = 0;
for (int i = 1; i < n-1; i++) {
int i_mirror = 2*C-i;
P[i] = (R > i) ? min(R-i, P[i_mirror]) : 0;
while (T[i + 1 + P[i]] == T[i - 1 - P[i]])
P[i]++;
if (i + P[i] > R) {
C = i;
R = i + P[i];
}
}
set<int>st;
for (int i = 1; i < n-1; i++) {
if (P[i] == k ) {
st.insert((i - 1 - P[i])/2);
}
}
delete[] P;
PN(st.size()); PL();
}
int main()
{
int k;
SN(k);
string s;
cin>>s;
if(k==1) printf("%d\n",s.size());
else if(k>s.size()) printf("0\n");
else countPalindrome(k,s);
return 0;
}
I2luY2x1ZGUgPGNhc3NlcnQ+CiNpbmNsdWRlIDxjY3R5cGU+CiNpbmNsdWRlIDxjbGltaXRzPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxjc3RkaW8+CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8ZGVxdWU+CiNpbmNsdWRlIDxsaXN0PgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8Yml0c2V0PgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpdGVyYXRvcj4KI2luY2x1ZGUgPG51bWVyaWM+CiNpbmNsdWRlIDx1dGlsaXR5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBmb3JuKGksIG4pIGZvcihpbnQgaSA9IDA7IGkgPCAoaW50KShuKTsgaSsrKQojZGVmaW5lIGZvcmQoaSwgbikgZm9yKGludCBpID0gKGludCkobikgLSAxOyBpID49IDA7IGktLSkKI2RlZmluZSBmb3JlKGksIGEsIG4pIGZvcihpbnQgaSA9IChpbnQpKGEpOyBpIDwgKGludCkobik7IGkrKykKI2RlZmluZSBERUJVRyBpZigwKQojZGVmaW5lIFBBVVNFIHN5c3RlbSgicGF1c2UiKQojZGVmaW5lIFJFQUQoZikgZnJlb3BlbihmLCAiciIsIHN0ZGluKQojZGVmaW5lIFdSSVRFKGYpIGZyZW9wZW4oZiwgInciLCBzdGRvdXQpCiNkZWZpbmUgQUxMKGMpIGMuYmVnaW4oKSwgYy5lbmQoKQojZGVmaW5lIFBCKHgpIHB1c2hfYmFjayh4KQojZGVmaW5lIFVCKHMsIGUsIHgpIHVwcGVyX2JvdW5kKHMsIGUsIHgpCiNkZWZpbmUgTEIocywgZSwgeCkgbG93ZXJfYm91bmQocywgZSwgeCkKI2RlZmluZSBSRVYocywgZSkgcmV2ZXJzZShzLCBlKTsKI2RlZmluZSBTWihjKSBjLnNpemUoKQojZGVmaW5lIFNFVChwKSBtZW1zZXQocCwgLTEsIHNpemVvZihwKSkKI2RlZmluZSBDTFIocCkgbWVtc2V0KHAsIDAsIHNpemVvZihwKSkKI2RlZmluZSBNRU0ocCwgdikgbWVtc2V0KHAsIHYsIHNpemVvZihwKSkKI2RlZmluZSBMQVNUKGEpIChpbnQoYS5zaXplKCkpIC0gMSkKI2RlZmluZSBQTihuKSAgIHByaW50ZigiJWQiLG4pCiNkZWZpbmUgUEROKG4pICBwcmludGYoIiVsZiIsbikKI2RlZmluZSBQTE4obikgIHByaW50ZigiJWxsZCIsbikKI2RlZmluZSBQUyhuKSAgIHByaW50ZigiJXMiLG4pCiNkZWZpbmUgUEwoKSAgICBwcmludGYoIlxuIikKI2RlZmluZSBTTihuKSAgIHNjYW5mKCIlZCIsJm4pCiNkZWZpbmUgU0ROKG4pICBzY2FuZigiJWxmIiwmbikKI2RlZmluZSBTTE4obikgIHNjYW5mKCIlbGxkIiwmbikKI2RlZmluZSBTUyhuKSAgIHNjYW5mKCIlcyIsbikKI2RlZmluZSBpNjQgbG9uZyBsb25nCiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBzcyBzZWNvbmQKCnRlbXBsYXRlPCBjbGFzcyBUID4gVCBzcShUICZ4KSB7IHJldHVybiB4ICogeDsgfQp0ZW1wbGF0ZTwgY2xhc3MgVCA+IFQgYWJzKFQgJm4pIHsgcmV0dXJuIChuIDwgMCA/IC1uIDogbik7IH0KdGVtcGxhdGU8IGNsYXNzIFQgPiBUIG1heChUICZhLCBUICZiKSB7IHJldHVybiAoIShhIDwgYikgPyBhIDogYik7IH0KdGVtcGxhdGU8IGNsYXNzIFQgPiBUIG1pbihUICZhLCBUICZiKSB7IHJldHVybiAoYSA8IGIgPyBhIDogYik7IH0KdGVtcGxhdGU8IGNsYXNzIFQgPiBUIGdjZChUIGEsIFQgYikgeyByZXR1cm4gKGIgIT0gMCA/IGdjZDxUPihiLCBhJWIpIDogYSk7IH0KdGVtcGxhdGU8IGNsYXNzIFQgPiBUIGxjbShUIGEsIFQgYikgeyByZXR1cm4gKGEgLyBnY2Q8VD4oYSwgYikgKiBiKTsgfQp0ZW1wbGF0ZTwgY2xhc3MgVCA+IFQgbW9kKFQgJmEsIFQgJmIpIHsgcmV0dXJuIChhIDwgYiA/IGEgOiBhICUgYik7IH0KdGVtcGxhdGU8IGNsYXNzIFQgPiBib29sIGluc2lkZShUICZhLCBUICZiLCBUICZjKSB7IHJldHVybiBhPD1iICYmIGI8PWM7IH0KdGVtcGxhdGU8IGNsYXNzIFQgPiB2b2lkIHNldG1heChUICZhLCBUIGIpIHsgaWYoYSA8IGIpIGEgPSBiOyB9CnRlbXBsYXRlPCBjbGFzcyBUID4gdm9pZCBzZXRtaW4oVCAmYSwgVCBiKSB7IGlmKGIgPCBhKSBhID0gYjsgfQoKY29uc3QgZG91YmxlIEVQUyA9IDFFLTk7Ci8vY29uc3QgaW50IElORiA9IDEwMDAwMDAwMDsKY29uc3QgaW50IElORiA9IDB4M2YzZjNmM2Y7CmNvbnN0IGRvdWJsZSBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTsKY29uc3QgaW50IE1BWCA9IDE1MDsKaW50IGR4W109eyAwLCAwLCAtMSwgMSwgLTEsIDEsLTEsIDF9OwppbnQgZHlbXT17LTEsIDEsICAwLCAwLCAtMSwtMSwgMSwgMX07CgoKc3RyaW5nIHByZVByb2Nlc3Moc3RyaW5nIHMpIHsKICBpbnQgbiA9IHMubGVuZ3RoKCk7CiAgaWYgKG4gPT0gMCkgcmV0dXJuICJeJCI7CiAgc3RyaW5nIHJldCA9ICJeIjsKICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHJldCArPSAiIyIgKyBzLnN1YnN0cihpLCAxKTsKCiAgcmV0ICs9ICIjJCI7CiAgcmV0dXJuIHJldDsKfQoKdm9pZCBjb3VudFBhbGluZHJvbWUoaW50IGssIHN0cmluZyBzKSB7CgogIHN0cmluZyBUID0gcHJlUHJvY2VzcyhzKTsKICBpbnQgbiA9IFQubGVuZ3RoKCk7CiAgaW50ICpQID0gbmV3IGludFtuXTsKICBpbnQgQyA9IDAsIFIgPSAwOwoKICBmb3IgKGludCBpID0gMTsgaSA8IG4tMTsgaSsrKSB7CiAgICBpbnQgaV9taXJyb3IgPSAyKkMtaTsKCiAgICBQW2ldID0gKFIgPiBpKSA/IG1pbihSLWksIFBbaV9taXJyb3JdKSA6IDA7CgoKICAgIHdoaWxlIChUW2kgKyAxICsgUFtpXV0gPT0gVFtpIC0gMSAtIFBbaV1dKQogICAgICBQW2ldKys7CgogICAgaWYgKGkgKyBQW2ldID4gUikgewogICAgICBDID0gaTsKICAgICAgUiA9IGkgKyBQW2ldOwogICAgfQogIH0KCgogIHNldDxpbnQ+c3Q7CiAgZm9yIChpbnQgaSA9IDE7IGkgPCBuLTE7IGkrKykgewogICAgaWYgKFBbaV0gPT0gayApIHsKICAgICAgICBzdC5pbnNlcnQoKGkgLSAxIC0gUFtpXSkvMik7CiAgICB9CiAgfQogIGRlbGV0ZVtdIFA7CgogIFBOKHN0LnNpemUoKSk7IFBMKCk7Cn0KCmludCBtYWluKCkKewogICAgaW50IGs7CiAgICBTTihrKTsKICAgIHN0cmluZyBzOwogICAgY2luPj5zOwoKICAgIGlmKGs9PTEpIHByaW50ZigiJWRcbiIscy5zaXplKCkpOwogICAgZWxzZSBpZihrPnMuc2l6ZSgpKSBwcmludGYoIjBcbiIpOwogICAgZWxzZSBjb3VudFBhbGluZHJvbWUoayxzKTsKICAgIHJldHVybiAwOwp9Cg==