Submission

Status:

----------

Subtask/Task Score:

0/100

Score: 0

User: C12

Problemset: Dvaravati-LCS

Language: cpp

Time: 0.003 second

Submitted On: 2026-01-21 11:21:18

#include <bits/stdc++.h>
using namespace std;

#define f first
#define s second
#define pii pair<ll,ll>
#define puii pair<ull,ull>
#define piii pair<ll,pii>
#define ll long long
#define ull unsigned long long
#define mp make_pair
 
#define mpiii(a,b,c) make_pair(a,make_pair(b,c));
int32_t mod = 1e9+7;

/*
    left    **2
    right   **2 + 1
*/

int out[100000] = {0};

void recursive(int i){
    if(i >= 100000 || out[i] == 0)return;
    cout << out[i];
    cout << '(';
    recursive(i*2);
    cout << ')';
    cout << '(';
    recursive(i*2 + 1);
    cout << ')';
    return;
}

void solve(){
    int arr1[100000] = {0};
    int arr2[100000] = {0};

    string st;
    cin >> st;
    
    stack<ll>pos_back;
    ll pos = 0;
    ll index = 1;
    ll num,last = 0;

    for(int i = 0;i < st.length();i++){
        if(st[i] == '('){
            if(last == 1){
                pos = 1;
                index = (index*2) + pos;
            }
            else if(last == 0){
                pos = 0;
                index = (index*2);
            }

            pos_back.push(pos);
            last = 0;

            // index = (index*2) + pos;
        }
        else if(st[i] == ')' && !pos_back.empty()){
            pos = pos_back.top();
            pos_back.pop();

            index = (index-pos) / 2;

            // pos++;
            last = 1;
        }
        else{
            num = int(st[i])-int('0');
            if(index < 100000){
                arr1[index] = num;
            }
        }
        // cout << st[i] << ' ' << index << '\n';
    }
    while(!pos_back.empty())pos_back.pop();

    st.clear();
    cin >> st;
    
    pos = 0;
    index = 1;
    last = 0;

    for(int i = 0;i < st.length();i++){
        if(st[i] == '('){
            if(last == 1){
                pos = 1;
                index = (index*2) + pos;
            }
            else if(last == 0){
                pos = 0;
                index = (index*2);
            }

            pos_back.push(pos);
            last = 0;

            // index = (index*2) + pos;
        }
        else if(st[i] == ')' && !pos_back.empty()){
            pos = pos_back.top();
            pos_back.pop();

            index = (index-pos) / 2;

            // pos++;
            last = 1;
        }
        else{
            num = int(st[i])-int('0');
            if(index < 100000){
                arr2[index] = num;
            }
        }
        // cout << st[i] << ' ' << index << '\n';
    }
    while(!pos_back.empty())pos_back.pop();

    for(int i = 0;i < 100000;i++){

        if(arr1[i] > 0 && arr2[i] > 0){
            out[i] = arr1[i] + arr2[i];
        }

    }

    pos = 0;
    index = 1;

    recursive(1);
    
    return;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    // ll q;
 
    // cin >> q;
    
    // while(q--) 
    solve();

    return 0;
}

/*
5(2(8(5(2(8(5(2(8(5(2(8()())())(1(6(2()())(3()()))()))())())(1(6(2()())(3()()))(5(2(8(5(2(8()())())(1(6(2()())(3()()))()))())())(1(6(2()())(3()()))()))))(5(2(8(5(2(8()())())(1(6(2()())(3()()))()))())())(1(6(2()())(3()()))(5(2(8(5(2(8()())())(1(6(2()())(3()()))()))())())(1(6(2()())(3()()))())))))())(1(6(2()())(3()()))()))())())(1(6(2()())(3()()))(5(2(8(5(2(8()())())(1(6(2()())(3()()))()))())())(1(6(2()())(3()()))())))
3(4()())(8(1(2()())())(3()()))

9(2(8()())())(1(6(2()())(3()()))())
9(4()())(8(1(2()())())(3()()))

*/