#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;
}
}