#include <iostream>
#include <vector>
#include <cctype>
using namespace std;
int main() {
string s1,s2;
while(cin >> s1 >> s2){
int m = s1.length();//通配符字符串长度
int n = s2.length();//匹配字符串长度
vector<vector<int> > dp(m+1,vector<int>(n+1,0));//dp[m][n]表示通配字符串前m位与匹配字符串前n位匹配情况,匹配为1
dp[0][0] = 1;//都为空,匹配
for(int i = 1 ; i <= m; i++) dp[i][0] = dp[i-1][0] & (s1[i-1] == '*');//只要通配符字符串全为 * 则dp[i][0] = 1 匹配
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++){
if(s1[i-1] == s2[j-1] || tolower(s1[i-1]) == s2[j-1] || toupper(s1[i-1]) == s2[j-1])//两字符匹配,字母不区分大小写
dp[i][j] = dp[i-1][j-1];
else if( (s1[i-1] == '?') && (isdigit(s2[j-1]) || isalpha(s2[j-1])))//通配符为?且匹配字符为字母或数字
dp[i][j] = dp[i-1][j-1];
else if(s1[i-1] == '*' && (isdigit(s2[j-1]) || isalpha(s2[j-1])))//通配符为 * 且匹配字符为数字或字母
dp[i][j] = dp[i-1][j-1] || dp[i-1][j] || dp[i][j-1];//通配符*与字符x匹配分三种:1.下标一样时匹配,继承dp[i-1][j-1]
//2.错位匹配时 继承dp[i][j-1] 3.匹配0个字符时(即忽略不用) 继承dp[i-1][j]
}
}
if(dp[m][n]) cout << "true" << endl;
else cout << "false" << endl;
}
}
// 64 位输出请用 printf("%lld")