#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool check(int arr[],int length);
int count_anaagrans(char text[],char word[],int m,int n);
void copy(int *source,int * destination,int length);
bool check_word(char text[],int word[],int i,int j);
int main()
{
char text[100];
char word[100];
int m,n;
printf("%d",count_anaagrans
(text
,word
,m
,n
)); }
int count_anaagrans(char text[],char word[],int m,int n){
int count=0;
int occ[26];
int temp[26];
int i=0;
int length =0;
int start =0;
for(i=0;i<26;i++){
occ[i]=0;
}
for(i=0;i<n;i++){
occ[*(word+i)-'a'] = occ[*(word+i)-'a']+1;
}
start =0;
i=n-1;
while(i<m){
if(check_word(text,occ,start,i)){
count++;
start++;
i++;
}
else{
start++;
i++;
}
}
return count;
}
bool check(int arr[],int length){
bool ans = true;
int i=0;
for(i=0;i<length;i++){
if(arr[i]>0){
ans = false;
break;
}
}
return ans;
}
void copy(int *source,int * destination,int length){
int i=0;
for(i=0;i<length;i++){
*(destination+i) = *(source+i);
}
}
bool check_word(char text[],int word[],int i,int j){
int temp[26];
copy(word,temp,26);
int k=0;
for(k=i;k<=j;k++){
temp[*(text+k)-'a'] = temp[*(text+k)-'a']-1;
}
if(check(temp,26)){
return true;
}
else{
return false;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGJvb2wuaD4KYm9vbCBjaGVjayhpbnQgYXJyW10saW50IGxlbmd0aCk7CmludCBjb3VudF9hbmFhZ3JhbnMoY2hhciB0ZXh0W10sY2hhciB3b3JkW10saW50IG0saW50IG4pOwp2b2lkIGNvcHkoaW50ICpzb3VyY2UsaW50ICogZGVzdGluYXRpb24saW50IGxlbmd0aCk7CmJvb2wgY2hlY2tfd29yZChjaGFyIHRleHRbXSxpbnQgd29yZFtdLGludCBpLGludCBqKTsKaW50IG1haW4oKQp7CiAgICBjaGFyIHRleHRbMTAwXTsKICAgIGNoYXIgd29yZFsxMDBdOwogICBpbnQgbSxuOwogICBzY2FuZigiJXMiLHRleHQpOwogICBzY2FuZigiJXMiLHdvcmQpOwogICBtID0gc3RybGVuKHRleHQpOwogICBuID0gc3RybGVuKHdvcmQpOwogICBwcmludGYoIiVkIixjb3VudF9hbmFhZ3JhbnModGV4dCx3b3JkLG0sbikpOwp9CgppbnQgY291bnRfYW5hYWdyYW5zKGNoYXIgdGV4dFtdLGNoYXIgd29yZFtdLGludCBtLGludCBuKXsKICAgIGludCBjb3VudD0wOwogICAgaW50IG9jY1syNl07CiAgICBpbnQgdGVtcFsyNl07CiAgICBpbnQgaT0wOwogICAgaW50IGxlbmd0aCA9MDsKICAgIGludCBzdGFydCA9MDsKICAgIGZvcihpPTA7aTwyNjtpKyspewogICAgICAgIG9jY1tpXT0wOwogICAgfQogICAgZm9yKGk9MDtpPG47aSsrKXsKICAgICAgICBvY2NbKih3b3JkK2kpLSdhJ10gPSBvY2NbKih3b3JkK2kpLSdhJ10rMTsKICAgIH0KICAgIHN0YXJ0ID0wOwogICAgaT1uLTE7CiAgICB3aGlsZShpPG0pewogICAgICAgIGlmKGNoZWNrX3dvcmQodGV4dCxvY2Msc3RhcnQsaSkpewogICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgICAgIHN0YXJ0Kys7CiAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIHN0YXJ0Kys7CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICAgICAKICAgIH0KICAgIHJldHVybiBjb3VudDsKfQpib29sIGNoZWNrKGludCBhcnJbXSxpbnQgbGVuZ3RoKXsKICAgIGJvb2wgYW5zID0gdHJ1ZTsKICAgIGludCBpPTA7CiAgICBmb3IoaT0wO2k8bGVuZ3RoO2krKyl7CiAgICAgICAgaWYoYXJyW2ldPjApewogICAgICAgICAgICBhbnMgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGFuczsKfQoKdm9pZCBjb3B5KGludCAqc291cmNlLGludCAqIGRlc3RpbmF0aW9uLGludCBsZW5ndGgpewogICAgaW50IGk9MDsKICAgIGZvcihpPTA7aTxsZW5ndGg7aSsrKXsKICAgICAgICAqKGRlc3RpbmF0aW9uK2kpID0gKihzb3VyY2UraSk7CiAgICB9Cn0KCmJvb2wgY2hlY2tfd29yZChjaGFyIHRleHRbXSxpbnQgd29yZFtdLGludCBpLGludCBqKXsKICAgIGludCB0ZW1wWzI2XTsKICAgIGNvcHkod29yZCx0ZW1wLDI2KTsKICAgIGludCBrPTA7CiAgICBmb3Ioaz1pO2s8PWo7aysrKXsKICAgICAgICB0ZW1wWyoodGV4dCtrKS0nYSddID0gdGVtcFsqKHRleHQrayktJ2EnXS0xOwogICAgfQogICAgaWYoY2hlY2sodGVtcCwyNikpewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZWxzZXsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0K