import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class Main {
// 用来匹配的方法
public static boolean isMatch(String s,String p){// p是模式串,带'*'的,s是非模式串,是待匹配的串
if(s == null|| s == ""){
if(p == null || p == "" )
return true;
else return false;
}else if(p == null || p == ""){
return false;
}
char[] textChars = s.toLowerCase().toCharArray();
char[] patternChars = p.toLowerCase().toCharArray();
// 遍历文本串,查看是否符合要求
for(int i = 0; i < textChars.length;i++){
if(Character.isLetter(textChars[i]) || textChars[i] >= '0' && textChars[i] <= '9' || textChars[i] == '.')
continue;
else { return false;}
}
// 1.双指针逆序比对
int sRight = textChars.length - 1;
int pRight = patternChars.length - 1;
while(sRight >= 0 && pRight >= 0 && patternChars[pRight] != '*'){
if(textChars[sRight] == patternChars[pRight] || patternChars[pRight] == '?'){
sRight--;pRight--;
}else return false;// 因为字符不匹配没必要再比较下去
}
// 2. 循环借宿,如果pRight到了起始位置,但是如果s没有到达起始位置,是要返回false
if(pRight < 0) return sRight < 0;
// 3. 如果逆序比对完成,或者遇到了*,开始正序比对
int pLeft = 0;
int sLeft = 0;
// 回溯的位置
int sRecord = -1;
int pRecord = -1;
while(sLeft <= sRight && pLeft <= pRight){// 结束条件就是都到达了逆序比对的位置
// 1. 如果p串的字符为*,先按照空字符比较,p右移,记下回溯位置
if(patternChars[pLeft]=='*'){
pLeft++;sRecord = sLeft;pRecord = pLeft;
}else if(textChars[sLeft] == patternChars[pLeft] || patternChars[pLeft] == '?'){
pLeft++;sLeft++;
}else if(sRecord != -1 && sRecord + 1 <= sRight)// 回溯条件
{
sRecord++;sLeft = sRecord;pLeft = pRecord;
}else return false;// 不匹配
}
// 4.循环走完,如果s都结束了,需要看p中没有比对的是不是都是*
boolean flag = true;
for(int i = pLeft; i <= pRight;i++){
if(patternChars[i] != '*') flag = false;
}
return flag;
}
public static void main(String[] args) {
// 字符串通配符
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String bf1 = sc.nextLine();
String bf2 = sc.nextLine();
System.out.println(isMatch(bf2,bf1));
}
}
}