#include<iostream>
#include<string.h>
using namespace std;
bool isMatching( char * str, char * reg, int n, int m, int i, int j) {
cout << "FD " << i<< " " << str[ i] << " " << j<< " " << reg[ j] << endl;
if ( i== n&& j== m) return true ;
if ( i>= n|| j>= m) return false ;
if ( reg[ j] < 'a' || reg[ j] > 'z' ) return false ;
if ( j+ 1 >= m&& reg[ j] == str[ i] ) return true ;
if ( j+ 1 >= m) return false ;
if ( reg[ j+ 1 ] == '?' ) {
//0 case
if ( isMatching( str, reg, n, m, i, j+ 2 ) ) return true ;
//1 case
if ( reg[ j] == str[ i] ) return isMatching( str, reg, n, m, i+ 1 , j+ 2 ) ;
return false ;
}
if ( reg[ j+ 1 ] == '*' ) {
//0 case
if ( isMatching( str, reg, n, m, i, j+ 2 ) ) return true ;
while ( i< n&& str[ i] == reg[ j] ) {
cout << i<< " " << j<< " " << str[ i] << " " << reg[ j] << endl;
if ( isMatching( str, reg, n, m, ++ 1 , j+ 2 ) ) return true ;
cout << i<< " " << j<< " " << str[ i] << " " << reg[ j] << endl;
}
return false ;
}
if ( reg[ j] == str[ i] ) return isMatching( str, reg, n, m, i+ 1 , j+ 1 ) ;
return false ;
}
int main( ) {
char reg[ 10 ] , str[ 256 ] ;
scanf ( "%s%s" ,str, reg) ;
cout << isMatching( str, reg, strlen ( str) , strlen ( reg) , 0 , 0 ) << endl;
return 0 ;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0cmluZy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBpc01hdGNoaW5nKGNoYXIgKnN0ciwgY2hhciAqcmVnLCBpbnQgbiwgaW50IG0sIGludCBpLCBpbnQgaikgewoJY291dDw8IkZEICI8PGk8PCIgIjw8c3RyW2ldPDwiICI8PGo8PCIgIjw8cmVnW2pdPDxlbmRsOwoJaWYoaT09biYmaj09bSkgcmV0dXJuIHRydWU7CglpZihpPj1ufHxqPj1tKSByZXR1cm4gZmFsc2U7CglpZihyZWdbal08J2EnfHxyZWdbal0+J3onKSByZXR1cm4gZmFsc2U7CglpZihqKzE+PW0mJnJlZ1tqXT09c3RyW2ldKSByZXR1cm4gdHJ1ZTsKCWlmKGorMT49bSkgcmV0dXJuIGZhbHNlOwoJaWYocmVnW2orMV09PSc/JykgewoJCS8vMCBjYXNlCgkJaWYoaXNNYXRjaGluZyhzdHIsIHJlZywgbiwgbSwgaSwgaisyKSkgcmV0dXJuIHRydWU7CgkJLy8xIGNhc2UKCQlpZihyZWdbal09PXN0cltpXSkgcmV0dXJuIGlzTWF0Y2hpbmcoc3RyLCByZWcsIG4sIG0sIGkrMSwgaisyKTsKCQlyZXR1cm4gZmFsc2U7Cgl9CglpZihyZWdbaisxXT09JyonKSB7CgkJLy8wIGNhc2UKCQlpZihpc01hdGNoaW5nKHN0ciwgcmVnLCBuLCBtLCBpLCBqKzIpKSByZXR1cm4gdHJ1ZTsKCQl3aGlsZShpPG4mJnN0cltpXT09cmVnW2pdKSB7CgkJCWNvdXQ8PGk8PCIgIjw8ajw8IiAiPDxzdHJbaV08PCIgIjw8cmVnW2pdPDxlbmRsOwoJCQlpZihpc01hdGNoaW5nKHN0ciwgcmVnLCBuLCBtLCArKzEsIGorMikpIHJldHVybiB0cnVlOwoJCQljb3V0PDxpPDwiICI8PGo8PCIgIjw8c3RyW2ldPDwiICI8PHJlZ1tqXTw8ZW5kbDsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoJaWYocmVnW2pdPT1zdHJbaV0pIHJldHVybiBpc01hdGNoaW5nKHN0ciwgcmVnLCBuLCBtLCBpKzEsIGorMSk7CglyZXR1cm4gZmFsc2U7Cn0KCmludCBtYWluKCkgewoJY2hhciByZWdbMTBdLCBzdHJbMjU2XTsKCXNjYW5mKCIlcyVzIixzdHIsIHJlZyk7Cgljb3V0PDxpc01hdGNoaW5nKHN0ciwgcmVnLCBzdHJsZW4oc3RyKSwgc3RybGVuKHJlZyksIDAsIDApPDxlbmRsOwoJcmV0dXJuIDA7Cn0=
compilation info
prog.cpp: In function ‘bool isMatching(char*, char*, int, int, int, int)’:
prog.cpp:24: error: lvalue required as increment operand
prog.cpp: In function ‘int main()’:
prog.cpp:35: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
stdout