#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<string>
#include<set>
using namespace std;
vector<int>g[1100];
char in[1100];
int bb[1100];
int bs[1100];
int cur;
int num;
void expr(){
	int at=num;
	if(in[cur]=='('){
	//	printf("%d %d\n",at,num+1);
		num++;
		if(~at)g[at].push_back(num);
		cur++;
		expr();
		cur++;
	}else{
		num++;
	//	printf("%d %d\n",at,num+1);
		if(~at)g[at].push_back(num);
		cur++;
	}
	cur++;
	if(in[cur]=='('){
	//	printf("%d %d\n",at,num+1);
		num++;
		if(~at)g[at].push_back(num);
		cur++;
		expr();
		cur++;
	}else{
	//	printf("%d %d\n",at,num+1);
		num++;
		if(~at)g[at].push_back(num);
		cur++;
	}
}
string lb[1100];
string dfs(int a){
	if(g[a].size()==0){
		string ret="x";
		return lb[a]=ret;
	}
	string L=dfs(g[a][0]);
	string R=dfs(g[a][1]);
	if(L>R)swap(L,R);
	lb[a]="("+L+","+R+")";
	//printf("%d: %s\n",a,lb[a].c_str());
	return lb[a];
}
set<string> v1[2];
set<string> v2;
void dfs2(int a,int b){
	v2.insert(lb[a]);
	v1[b].insert(lb[a]);
	for(int i=0;i<g[a].size();i++)dfs2(g[a][i],b);
}
int dp[130][130];
int comp(int a,int b){
	if(~dp[a][b])return dp[a][b];
	if(bs[a]*bb[b]!=bs[b]*bb[a])return bs[a]*bb[b]>bs[b]*bb[a];
	if(g[a].size()==0&&g[b].size()==0)return -2;
	int lh=comp(g[a][0],g[a][1]);
	if(lh==-2)lh=0;
	int rh=comp(g[b][0],g[b][1]);
	if(rh==-2)rh=0;
	int res=comp(g[a][lh],g[b][rh]);
	if(res!=-2)return res;
	res=comp(g[a][!lh],g[b][!rh]);
	return res;
}
void dfs3(int a,int b){
	if(g[a].size()==0)return;
	if(b==0){
		if(comp(g[a][0],g[a][1])==1)swap(g[a][0],g[a][1]);
	}else{
		if(comp(g[a][0],g[a][1])==0)swap(g[a][0],g[a][1]);
	}
	for(int i=0;i<g[a].size();i++)dfs3(g[a][i],i);
}
void out(int a){
	if(g[a].size()==0){printf("x");return ;}
	printf("(");
	out(g[a][0]);
	printf(" ");
	out(g[a][1]);
	printf(")");
}
int main(){
	while(1){
		gets(in);
		if(in[0]=='0')return 0;
		//printf("%s\n",in);
		if(in[0]=='x'){
			printf("x\n");continue;
		}
		for(int i=0;i<1100;i++)g[i].clear();
		cur=0;
		num=-1;
		expr();
		dfs(0);
		for(int i=0;i<num;i++){
			if(!g[i].size()){
				bs[i]=0;
				bb[i]=1;
			}else{
				v1[0].clear();
				v1[1].clear();
				v2.clear();
				dfs2(g[i][0],0);
				dfs2(g[i][1],1);
				bb[i]=v2.size();
				bs[i]=0;
				for(set<string>::iterator it=v1[0].begin();it!=v1[0].end();it++){
					if(v1[1].count(*it))bs[i]++;
				}
			}
			//printf("%d %d\n",bs[i],bb[i]);
		}
		for(int i=0;i<130;i++)for(int j=0;j<130;j++)
			dp[i][j]=-1;
		dfs3(0,0);
		out(0);
		printf("\n");
	}
}