#include <bits/stdc++.h>
using namespace std;
const int base = 37;
const int mod = 1000004329;
const int N = 1e6 + 1;
long long hashh[N], Inverse[N], p[N];
long long target = 0;
long long bin_expo(long long b, long long p)
{
if (p == 0) return 1;
if (p % 2 == 0) {
long long half = bin_expo(b, p / 2);
return (half * half) % mod;
} else {
return (b * bin_expo(b, p - 1)) % mod;
}
}
void power()
{
p[0] = 1;
for (int i = 1; i < N; i++) {
p[i] = (p[i - 1] * base) % mod;
Inverse[i] = bin_expo(p[i], mod - 2);
}
}
void hashh1(string s)
{
long long pre = 0;
int n=s.size();
for (int i = 0; i < n; i++) {
pre = pre + ((s[i] - 'a' + 1) * p[i]) % mod;
pre %= mod;
hashh[i] = pre;
}
}
void hashh2(string s)
{
long long pre = 0;
int n=s.size();
for (int i = 0; i < n ;i++) {
pre = pre + ((s[i] - 'a' + 1) * p[i]) % mod;
pre %= mod;
}
target = pre;
}
long long range_hash(int i, int j)
{
long long res = hashh[j];
if (i - 1 >= 0) {
res -= hashh[i - 1];
res = (res + mod) % mod;
}
res = (res*bin_expo(p[i],mod-2))%mod;
return res;
}
int main()
{
string n, m;
cin >> n >> m;
power();
hashh1(n);
hashh2(m);
int a = n.size(), b = m.size(), ans = 0;
for (int i = 0; i + b - 1 < a; i++) {
if (range_hash(i, i + b - 1) == target) ans++;
}
cout << ans << "\n";
return 0;
}
CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IGJhc2UgPSAzNzsKY29uc3QgaW50IG1vZCA9IDEwMDAwMDQzMjk7CmNvbnN0IGludCBOID0gMWU2ICsgMTsKbG9uZyBsb25nIGhhc2hoW05dLCBJbnZlcnNlW05dLCBwW05dOwpsb25nIGxvbmcgdGFyZ2V0ID0gMDsKbG9uZyBsb25nIGJpbl9leHBvKGxvbmcgbG9uZyBiLCBsb25nIGxvbmcgcCkKewogICAgaWYgKHAgPT0gMCkgcmV0dXJuIDE7CiAgICBpZiAocCAlIDIgPT0gMCkgewogICAgICAgIGxvbmcgbG9uZyBoYWxmID0gYmluX2V4cG8oYiwgcCAvIDIpOwogICAgICAgIHJldHVybiAoaGFsZiAqIGhhbGYpICUgbW9kOyAKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIChiICogYmluX2V4cG8oYiwgcCAtIDEpKSAlIG1vZDsKICAgIH0KfQoKdm9pZCBwb3dlcigpCnsKICAgIHBbMF0gPSAxOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBOOyBpKyspIHsKICAgICAgICBwW2ldID0gKHBbaSAtIDFdICogYmFzZSkgJSBtb2Q7CiAgICAgICAgSW52ZXJzZVtpXSA9IGJpbl9leHBvKHBbaV0sIG1vZCAtIDIpOyAKICAgIH0KfQp2b2lkIGhhc2hoMShzdHJpbmcgcykKewogICAgbG9uZyBsb25nIHByZSA9IDA7CiAgICBpbnQgbj1zLnNpemUoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgcHJlID0gcHJlICsgKChzW2ldIC0gJ2EnICsgMSkgKiBwW2ldKSAlIG1vZDsKICAgICAgICBwcmUgJT0gbW9kOwogICAgICAgIGhhc2hoW2ldID0gcHJlOwogICAgfQp9CnZvaWQgaGFzaGgyKHN0cmluZyBzKQp7CiAgICBsb25nIGxvbmcgcHJlID0gMDsKICAgIGludCBuPXMuc2l6ZSgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuIDtpKyspIHsKICAgICAgICBwcmUgPSBwcmUgKyAoKHNbaV0gLSAnYScgKyAxKSAqIHBbaV0pICUgbW9kOwogICAgICAgIHByZSAlPSBtb2Q7CiAgICB9CiAgICB0YXJnZXQgPSBwcmU7Cn0KCmxvbmcgbG9uZyByYW5nZV9oYXNoKGludCBpLCBpbnQgaikKewogICAgbG9uZyBsb25nIHJlcyA9IGhhc2hoW2pdOwogICAgaWYgKGkgLSAxID49IDApIHsKICAgICAgICByZXMgLT0gaGFzaGhbaSAtIDFdOwogICAgICAgIHJlcyA9IChyZXMgKyBtb2QpICUgbW9kOwogICAgfQogICAgcmVzID0gKHJlcypiaW5fZXhwbyhwW2ldLG1vZC0yKSklbW9kOwogICAgcmV0dXJuIHJlczsgCn0KCmludCBtYWluKCkKewogICAgc3RyaW5nIG4sIG07CiAgICBjaW4gPj4gbiA+PiBtOwogICAgcG93ZXIoKTsKICAgIGhhc2hoMShuKTsKICAgIGhhc2hoMihtKTsKICAgIGludCBhID0gbi5zaXplKCksIGIgPSBtLnNpemUoKSwgYW5zID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpICsgYiAtIDEgPCBhOyBpKyspIHsKICAgICAgICBpZiAocmFuZ2VfaGFzaChpLCBpICsgYiAtIDEpID09IHRhcmdldCkgYW5zKys7CiAgICB9CiAgICBjb3V0IDw8IGFucyA8PCAiXG4iOwogICAgcmV0dXJuIDA7Cn0KICAgIA==