#include <iostream>
using namespace std;
typedef struct TreeNode{
char val;
TreeNode* left;TreeNode* right;
TreeNode():val('0'),left(nullptr),right(nullptr){}
TreeNode(char x):val(x),left(nullptr),right(nullptr){}
}TreeNode,*BiTree;
BiTree PreInsert(){
char x;
cin>>x;
if(x == '0') return nullptr;
TreeNode* root = new TreeNode (x);
root->left = PreInsert();
root->right = PreInsert();
return root;
}
int flag = 0;
void TreeEqual(BiTree T1,BiTree T2){
if(T1 == nullptr && T2 == nullptr) return ;
if(T1 == nullptr || T2 == nullptr || T1->val !=T2->val){
flag = 1;
return ;
}
TreeEqual(T1->left,T2->left);
TreeEqual(T1->right,T2->right);
}
int main(){
while(1){
BiTree T1 = PreInsert();
if(T1 == nullptr)break;
BiTree T2 = PreInsert();
TreeEqual(T1,T2);
if(flag == 1){
cout<<"NO"<<endl;
}else{
cout<<"YES"<<endl;
}
flag = 0;
}
return 0;
}