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

class node
{
	public:
	int parent=-1;//親のindex
	int left=-1;
	int right=-1;//右側の子のindex
	int num;//書いてある数字
	int depth;
	node(int n,int d)
	{
		depth=d;
		num=n;
	}
};

int aparentid;
int bparentid;

vector<node> decode(string s,int mode)
{
	vector<node> ret;
	int predepth=-1;
	int now=1;//現在の深さ
	//それぞれのノードの深さと数字だけ求める
	for(int i=0;i<s.size();i++)
	{
		if(s[i]=='(')
			now++;
		else if(s[i]==')')
			now--;
		else{
			i++;
			int num=0;
			while(s[i]!=']')
			{
				num*=10;
				num+=(int)(s[i]-'0');
				i++;
			}
			ret.push_back(node(num,now));
			if(now==1)
			{
				if(mode==0)
					aparentid=ret.size()-1;
				else
					bparentid=ret.size()-1;
			}
		}
	}
	//深さ情報から木を復元する
	for(int i=0;i<ret.size();i++)
	{
		int dp=ret[i].depth;
		if(dp==1)
			continue;
		//親を探す
		//両向きに探して近いほうが答え
		int lind=i;
		int rind=i;
		while(ret[lind].depth!=dp-1)
		{
			lind--;
			if(lind==-1 || ret[lind].depth<dp-1)
			{
				lind=-10000;
				break;
			}
		}
		while(ret[rind].depth!=dp-1)
		{
			rind++;
			if(rind==ret.size() || ret[rind].depth<dp-1)
			{
				rind=50000;
				break;
			}
		}
		if(i-lind<rind-i)
		{
			ret[lind].right=i;
			ret[i].parent=lind;
		}else{
			ret[rind].left=i;
			ret[i].parent=rind;
		}
	}
	return ret;
}

vector<node> ans;
//2つの木を結合する
void ketu(vector<node> a,vector<node> b,int anow,int bnow,int oya)
{
	//cerr<<a[anow].num<<" "<<b[bnow].num<<endl;
	bool f;
	//aの情報からどっち向きの子かを調べる
	if(oya!=-1)
	{
		if(anow==a[a[anow].parent].left)
			f=true;
		else
			f=false;
	}
	//aの現在地とbの現在地をマージする
	ans.push_back(node(a[anow].num+b[bnow].num,a[anow].depth));
	int now=ans.size()-1;//現在のノード番号
	if(oya!=-1)
	{
		ans[now].parent=oya;
		//左の子
		if(f)
		{
			ans[oya].left=now;
		}else{//右の子
			ans[oya].right=now;
		}
	}
	//継続判定
	if(a[anow].left!=-1 && b[bnow].left!=-1)
		ketu(a,b,a[anow].left,b[bnow].left,now);
	if(a[anow].right!=-1 && b[bnow].right!=-1)
		ketu(a,b,a[anow].right,b[bnow].right,now);
	return;
}

string encode(vector<node> a,int now)
{
	string ret;
	ret+='(';
	if(a[now].left!=-1)
		ret+=encode(a,a[now].left);//左側
	ret+=")[";
	ret+=to_string(a[now].num);//数字を文字列にして加える
	ret+="](";
	if(a[now].right!=-1)
		ret+=encode(a,a[now].right);//右側
	ret+=')';
	return ret;
}

int main()
{
	string a,b;
	cin>>a;
	cin>>b;
	vector<node> atree;
	vector<node> btree;
	atree=decode(a,0);
	btree=decode(b,1);
	//デコード結果を結合する
	ketu(atree,btree,aparentid,bparentid,-1);
	//cerr<<atree.size()<<" "<<btree.size()<<" "<<ans.size()<<endl;
	cout<<encode(ans,0)<<endl;
}
