#include<iostream>
#include<map>
using namespace std;
int solve(string A, string B) {
map<char, int> hashMapA, hashMapB;
for(char c : A) hashMapA[c]++;
int start = 0;
for(int end = 0; end < B.length(); end++) {
char c = B[end];
hashMapB[c]++;
while(hashMapB[c] > hashMapA[c] && start <= end) {
hashMapB[ B[start] ]--;
start++;
}
if(end - start + 1 == A.length())
return true;
}
return false;
}
int main() {
cout << solve("abcd", "hbadcg") << '\n';
cout << solve("aabc", "abcag") << '\n';
cout << solve("aabcd", "adcbga") << '\n';
cout << solve("abcd", "abbcdg") << '\n';
cout << solve("abc", "cbeccbba") << '\n';
cout << solve("abc", "cebbaabc") << '\n';
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPG1hcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBzb2x2ZShzdHJpbmcgQSwgc3RyaW5nIEIpIHsKCW1hcDxjaGFyLCBpbnQ+IGhhc2hNYXBBLCBoYXNoTWFwQjsKCWZvcihjaGFyIGMgOiBBKSBoYXNoTWFwQVtjXSsrOwoJaW50IHN0YXJ0ID0gMDsKCWZvcihpbnQgZW5kID0gMDsgZW5kIDwgQi5sZW5ndGgoKTsgZW5kKyspIHsKCQljaGFyIGMgPSBCW2VuZF07CgkJaGFzaE1hcEJbY10rKzsKCQl3aGlsZShoYXNoTWFwQltjXSA+IGhhc2hNYXBBW2NdICYmIHN0YXJ0IDw9IGVuZCkgewoJCQloYXNoTWFwQlsgQltzdGFydF0gXS0tOwoJCQlzdGFydCsrOyAgCgkJfQoJCWlmKGVuZCAtIHN0YXJ0ICsgMSA9PSBBLmxlbmd0aCgpKQoJCQlyZXR1cm4gdHJ1ZTsKCX0gCgoJcmV0dXJuIGZhbHNlOwp9CgppbnQgbWFpbigpIHsKCWNvdXQgPDwgc29sdmUoImFiY2QiLCAiaGJhZGNnIikgPDwgJ1xuJzsKCWNvdXQgPDwgc29sdmUoImFhYmMiLCAiYWJjYWciKSA8PCAnXG4nOwoJY291dCA8PCBzb2x2ZSgiYWFiY2QiLCAgImFkY2JnYSIpIDw8ICdcbic7Cgljb3V0IDw8IHNvbHZlKCJhYmNkIiwgICJhYmJjZGciKSA8PCAnXG4nOwoJY291dCA8PCBzb2x2ZSgiYWJjIiwgICJjYmVjY2JiYSIpIDw8ICdcbic7Cgljb3V0IDw8IHNvbHZlKCJhYmMiLCAgImNlYmJhYWJjIikgPDwgJ1xuJzsKfQo=