#include <iostream>
#include <sstream>
#include <string>
#include <queue>

using namespace std;

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int val) : val(val), left(nullptr), right(nullptr) {}
};

bool isSame(TreeNode* p, TreeNode* q) {
    if (p == nullptr && q == nullptr) return true;
    if (p == nullptr || q == nullptr) return false;
    if (p->val != q->val) return false;
    return isSame(p->left, q->left) && isSame(p->right, q->right);
}

TreeNode* buildTree() {
    string line;
    // Read lines, skipping accidental empty lines
    while (getline(cin, line)) {
        // Strip trailing carriage return if present
        if (!line.empty() && line.back() == '\r') {
            line.pop_back();
        }
        if (!line.empty()) break;
    }
    if (line.empty()) return nullptr;

    stringstream ss(line);
    int x;
    if (!(ss >> x) || x == -1) return nullptr;

    TreeNode* root = new TreeNode(x);
    queue<TreeNode*> q;
    q.push(root);

    while (!q.empty()) {
        auto u = q.front();
        q.pop();

        if (ss >> x && x != -1) {
            u->left = new TreeNode(x);
            q.push(u->left);
        }

        if (ss >> x && x != -1) {
            u->right = new TreeNode(x);
            q.push(u->right);
        }
    }
    return root;
}

int main() {
    TreeNode* p = buildTree();
    TreeNode* q = buildTree();
    cout << (isSame(p, q) ? "true" : "false") << "\n";
    return 0;
}