#include <iostream>
#include <string>

using namespace std;

bool match(const string& pat,const string& tag,int pidx,int tidx){
    // 同时到达末尾!
    if(pidx >= pat.size() && tidx >=  tag.size()) return true;
    // 只有一个到达末尾!
    if(pidx >= pat.size() || tidx >=  tag.size()) return false;
    // 模式串是 ? 单字符通配符!
    if(pat[pidx] == '?'){
        // 如果对应到的位置不能被替代!
        if(!isdigit(tag[tidx]) && !isalpha(tag[tidx])) return false;
        // 能被替代,向下继续走!
        return match(pat,tag,pidx + 1,tidx + 1);
    }else if(pat[pidx] == '*'){ // 遇到的是一个 * 无穷通配符!
        while(pat[pidx] == '*') pidx ++; // 连续的 * 只能算是一个 * 
        pidx --; // 只认为连续的*中最后一个*有效!
        if(!isdigit(tag[tidx]) && !isalpha(tag[tidx])) return match(pat,tag,pidx + 1,tidx); // 当* 无法匹配 * 做空字符!
        return match(pat,tag,pidx + 1,tidx) || match(pat,tag,pidx + 1,tidx + 1) || match(pat,tag,pidx,tidx + 1); // * 可以不用于匹配, 可以用于匹配单个字符,可以匹配多个字符!
    }else if(tolower(pat[pidx]) == tolower(tag[tidx])){ // 当对应位置字符相同,就直接一起向下即可!
        return match(pat,tag,pidx + 1,tidx + 1);
    }
    return false;
}

int main(){
    string pat,tag;
    getline(cin,pat);
    getline(cin,tag);
    if(match(pat,tag,0,0)) cout<<"true";
    else cout<<"false";
    cout<<endl;
    return 0;
}