#include <iostream>
#include <vector>
using namespace std;

int main(){
    string s,t;
    while (cin>>s>>t){
        int m = s.length();
        int n = t.length();
        vector<vector<bool>> dp(m+1,vector<bool>(n+1,false));
        dp[0][0] = true;
        // 动态规划思想

        // 处理模式以*开头的情况
        for(int i = 1; i < m+1; ++i){
            if(s[i-1] == '*'){
                dp[i][0] = dp[i-1][0];
            }
        }
        for(int i = 1; i < m+1; ++i){
            for(int j = 1; j < n+1; ++j){
                // 如果s[i-1] == t[j-1] 或s[i-1] = '?,意味着当前字符可用直接匹配
                if(tolower(s[i-1]) == tolower(t[j-1]) || s[i-1] == '?' ){ // 不缺分大小写,转为小写在进行比较
                    // ? 与 *匹配的都是字符或者数字才行
                    if(isalnum(t[j-1])){
                         dp[i][j] = dp[i-1][j-1];
                    }else{
                        // 不是字母或数字,正常进行比较
                        if(s[i-1] == t[j-1]){
                            dp[i][j] = dp[i-1][j-1];
                        }
                    }
                    // dp[i][j] = dp[i-1][j-1];
                }else if(s[i-1] == '*'){
                    if(isalnum(t[j-1])){
                        dp[i][j] = dp[i-1][j] || dp[i][j-1];
                    }else{
                        // *号可以匹配空字符串
                        dp[i][j] = dp[i-1][j];
                    }
                    // dp[i][j] = dp[i-1][j] || dp[i][j-1];
                }else{
                    // 添加普通字符的匹配
                    if(tolower(s[i-1]) == tolower(t[j-1])){
                        dp[i][j] = dp[i-1][j-1];
                    }
                }
            }
        }
        cout<<boolalpha<<dp[m][n]<<endl;
    }
}