#include<stdio.h>
#include<stack>
using namespace std;
stack <int> s;//定义一个堆栈
char str[101];//保存输入字符串
char ans[101];//保存输出字符串
int main()
{
while(scanf("%s",str)!=EOF)//输入字符串
{
int i;
for(i=0;str[i]!=0;i++)//从左到右遍历字符串
{
if(str[i]=='(')//若遇到(
{
s.push (i);///将其数组下标放入堆栈中
ans[i]=' ';//暂且对应字符串位置改为空格
}
else if(str[i]==')')//若遇到)
{
if(s.empty()==false)//此时堆非空
{
s.pop();//栈顶位置左括号与其匹配,从栈中弹出该已经匹配的(
ans[i]=' ';//修改输出中该位置为空格
}
else
ans[i]='?';//若栈为空,则无法找到(与之匹配,修改输出位置为?
}
else ans[i]=' ';//若为其他字符,与括号匹配无关,修改输出为空格
}
while(!s.empty())//字符串遍历完,栈中还有(无法匹配
{
ans[s.top()]='$';//修改输出位置
s.pop();//弹出
}
ans[i]=0;//使输出形成字符串,在最后一个字符后添加一个空字符
puts(str);//输出原字符串
puts(ans);//输出答案字符串
}
return 0;
}