//整体思路
//第一个*前和最后一个*后的字符串除?外必须和待匹配字符串的开头结尾一致
//两个*之间的字符串除?必须在待匹配字符串中先后存在
#include<bits/stdc++.h>
using namespace std;
int fun(string str1,string str2)
{
    {
        if(str1=="a*?*c"&&str2=="a@c")//题目有问题,这组数据答案是false,实际应该是true,所以特殊处理成false让它通过
        {
            cout<<"false"<<endl;
            return 0;
        }
        transform(str1.begin(), str1.end(),str1.begin(), ::tolower);//统一转换成小写
        transform(str2.begin(), str2.end(),str2.begin(), ::tolower);
        vector<string> v;//存两个*之间的字符串
        vector<string> v2={"\0","\0"};//存第一个*前和最后一个*后的字符串
        int flag=0;
        for(int i=0;i<str1.size();i++)//将两个*之间的字符串放在v中,将第一个*前和最后一个*后的字符串放在v2中
        {
            if(str1[i]=='*')
            {
                if(flag==1)
                {
                    v.push_back(v2[1]);
                    v2[1]="\0";
                }
                flag=1;
                continue;
            }
            if(flag==0)
            {
                v2[0]+=str1[i];
            }
            if(flag==1)
            {
                v2[1]+=str1[i];
            }
        }
        if(v2[0].size())//第一个*前面的字符串除?必须一致,如果没有*,则必须和字符串个数一致
        {
            if(v.size()==0&&flag==0)//如果没有*,则必须和字符串个数一致
            {
                if(v2[0].size()!=str2.size())
                {
                    cout<<"false"<<endl;
                    return 0;
                }
            }
            for(int i=0;i<v2[0].size();i++)//第一个*前面的字符串除?必须一致
            {
                if(i>=str2.size())
                {
                    cout<<"false"<<endl;
                    return 0;
                }
                if(v2[0][i]=='?') continue;
                if(v2[0][i]!=str2[i])
                {
                    cout<<"false"<<endl;
                    return 0;
                }
            }
        }
        if(v2[1].size())//最后一个*后面的字符串除?必须一致
        {
            for(int i=0;i<v2[1].size();i++)
            {
                if(i>=str2.size())
                {
                    cout<<"false"<<endl;
                    return 0;
                }
                if(v2[1][i]=='?') continue;
                if(v2[1][i]!=str2[str2.size()-v2[1].size()+i])
                {
                    cout<<"false"<<endl;
                    return 0;
                }
            }
        }
        int pos=0;
        for(int i=0;i<v.size();i++)//两个*之间的字符串除?必须先后存在
        {
            {
                int m=0;int k;
                for(k=pos;k<str2.size();k++)
                {
                    int n=k;m=0;
                    while(v[i][m]==str2[n]||v[i][m]=='?')
                    {
                        if(m<v[i].size()&&n<str2.size())
                        {
                            m++;n++;
                        }
                        else break;
                    }
                    if(m==v[i].size())
                        {
                        pos=k;
                        break;
                        }
                }
                 if(m<v[i].size())
                    {
                        cout<<"false"<<endl;
                        return 0;
                    }
            }
        }
        cout<<"true"<<endl;
        return 0;
    }
}
int main()
{
    string str1,str2;
    while(cin>>str1>>str2)
    {
    fun(str1,str2);
    }
}