#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> GetNextTable(const string& p){
//初始化Next[0] = -1——在第一个字符就不匹配时,直接在主串上后移动一格和pattern[0]匹配
vector<int> Next = {-1};
//初始情况下令j=Next[i-1];
int j = -1;
for(int i = 1; i < p.size(); ){
//匹配时的情况 和 j回退到Next[0]=-1时都不匹配时的情况
if(j == -1 || p[j] == p[i]){
Next.push_back(j + 1);
j++;
i++;
}
//不匹配则回退j
else{
j = Next[j];
}
}
return Next;
}
int KMP_count(string& text, string& pattern, vector<int>& Next){
int i = 0, j = 0, numOfShift = 0;
while(i < text.size()){
if(j == pattern.size()){
numOfShift++;
j = 0;
i -= (pattern.size() - 1);
}
//在第一个字符就不匹配时,直接在主串上后移动一格和pattern[0]匹配
//在当前位置匹配时则继续往后匹配
if(text[i] == pattern[j] || j == -1){
i++;
j++;
}
else{
j = Next[j];
}
}
if(j == pattern.size()) numOfShift++;
return numOfShift;
}
int main() {
string text, pattern;
cin >> text >> pattern;
vector<int> next = GetNextTable(pattern);
cout << KMP_count(text, pattern, next);
return 0;
}