#include <bits/stdc++.h>
using namespace std;
unordered_map< char , string> ump;
bool isFeasible( string pattern, string st, int stIndex, int patIndex) {
cout << "1" << endl;
if ( stIndex == st.length ( ) || patIndex == pattern.length ( ) ) {
//cout << "2" << endl;
if ( stIndex == st.length ( ) && patIndex == pattern.length ( ) ) {
return true ;
}
return false ;
}
string patString = "" ;
for ( int i = stIndex; i < st.length ( ) ; ) {
cout << "3" << endl;
if ( ump.find ( pattern[ patIndex] ) ! = ump.end ( ) ) {
cout << "4" << endl;
string patString = ump[ pattern[ patIndex] ] ;
for ( int j = 0 ; j < patString.length ( ) ; j++ ) {
cout << "5" << endl;
if ( patString[ j] ! = st[ i] ) {
cout << "6" << endl;
return false ;
}
i++ ;
}
if ( isFeasible( pattern, st, i, patIndex + 1 ) ) {
cout << "7" << endl;
return true ;
}
}
else {
cout << "8" << endl;
patString + = st[ i] ;
cout << "patString is " << patString << " and patIndex value is " << pattern[ patIndex] << " index is " << i << " patternIndex is " << patIndex << endl;
ump[ pattern[ patIndex] ] = patString;
if ( i == st.length ( ) - 1 && patIndex == pattern.length ( ) - 1 && pattern[ patIndex] ! = st[ i] ) {
return false ;
}
if ( isFeasible( pattern, st, i + 1 , patIndex + 1 ) ) {
cout << "9" << endl;
return true ;
}
ump.erase ( pattern[ patIndex] ) ;
i++ ;
}
}
return false ;
}
int main( ) {
string pat, str;
cin >> pat >> str;
bool isPossible = isFeasible( pat, str, 0 , 0 ) ;
cout << isPossible;
cout << endl;
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVub3JkZXJlZF9tYXA8Y2hhciwgc3RyaW5nPiB1bXA7CmJvb2wgaXNGZWFzaWJsZShzdHJpbmcgcGF0dGVybiwgc3RyaW5nIHN0LCBpbnQgc3RJbmRleCwgaW50IHBhdEluZGV4KSB7Cgljb3V0IDw8ICIxIiA8PCBlbmRsOwoJaWYgKHN0SW5kZXggPT0gc3QubGVuZ3RoKCkgfHwgcGF0SW5kZXggPT0gcGF0dGVybi5sZW5ndGgoKSkgewoJCS8vY291dCA8PCAiMiIgPDwgZW5kbDsKICAgICAgICBpZiAoc3RJbmRleCA9PSBzdC5sZW5ndGgoKSAmJiBwYXRJbmRleCA9PSBwYXR0ZXJuLmxlbmd0aCgpKSB7CgkJcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKCX0KCXN0cmluZyBwYXRTdHJpbmcgPSAiIjsKCWZvciAoaW50IGkgPSBzdEluZGV4OyBpIDwgc3QubGVuZ3RoKCk7ICkgewoJCWNvdXQgPDwgIjMiIDw8IGVuZGw7CgkJaWYgKHVtcC5maW5kKHBhdHRlcm5bcGF0SW5kZXhdKSAhPSB1bXAuZW5kKCkpIHsKCQkJY291dCA8PCAiNCIgPDwgZW5kbDsKCQkJc3RyaW5nIHBhdFN0cmluZyA9IHVtcFtwYXR0ZXJuW3BhdEluZGV4XV07CgkJCWZvciAoaW50IGogPSAwOyBqIDwgcGF0U3RyaW5nLmxlbmd0aCgpOyBqKyspIHsKCQkJCWNvdXQgPDwgIjUiIDw8IGVuZGw7CgkJCQlpZiAocGF0U3RyaW5nW2pdICE9IHN0W2ldKSB7CgkJCQkJY291dCA8PCAiNiIgPDwgZW5kbDsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCQlpKys7CgkJCX0KCQkJaWYoaXNGZWFzaWJsZShwYXR0ZXJuLCBzdCwgaSwgcGF0SW5kZXggKyAxKSkgewoJCQkJY291dCA8PCAiNyIgPDwgZW5kbDsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJfQoJCWVsc2UgewoJCQljb3V0IDw8ICI4IiA8PCBlbmRsOwoJCQlwYXRTdHJpbmcgKz0gc3RbaV07CgkJCWNvdXQgPDwgInBhdFN0cmluZyBpcyAiIDw8IHBhdFN0cmluZyA8PCAiIGFuZCBwYXRJbmRleCB2YWx1ZSBpcyAiIDw8IHBhdHRlcm5bcGF0SW5kZXhdIDw8ICIgaW5kZXggaXMgIiA8PCBpIDw8ICIgcGF0dGVybkluZGV4IGlzICIgPDwgcGF0SW5kZXggPDwgZW5kbDsKCQkJdW1wW3BhdHRlcm5bcGF0SW5kZXhdXSA9IHBhdFN0cmluZzsKCQkJaWYgKGkgPT0gc3QubGVuZ3RoKCkgLSAxICYmIHBhdEluZGV4ID09IHBhdHRlcm4ubGVuZ3RoKCkgLSAxICYmIHBhdHRlcm5bcGF0SW5kZXhdICE9IHN0W2ldKSB7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCQkKCQkJfQoJCQkKCQkJCgkJCWlmKGlzRmVhc2libGUocGF0dGVybiwgc3QsIGkgKyAxLCBwYXRJbmRleCArIDEpKSB7CgkJCQljb3V0IDw8ICI5IiA8PCBlbmRsOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQkJdW1wLmVyYXNlKHBhdHRlcm5bcGF0SW5kZXhdKTsKCQkJaSsrOwoJCX0KCX0KCXJldHVybiBmYWxzZTsKfQoKaW50IG1haW4oKSB7CglzdHJpbmcgcGF0LCBzdHI7CgljaW4gPj4gcGF0ID4+IHN0cjsKCWJvb2wgaXNQb3NzaWJsZSA9ICBpc0ZlYXNpYmxlKHBhdCwgc3RyLCAwLCAwKTsKCWNvdXQgPDwgaXNQb3NzaWJsZTsKCQoJY291dCA8PCBlbmRsOwoJCgkKIAlyZXR1cm4gMDsKfQ==