/*
之前一直不重视链表 (好吧说实话主要是看着板子都是指针就怂了T.T)
这道题比较基础 应用了链表的思想 数组模拟指针
遇到的问题就是跑着跑着光标跳到前面或者跳到后面
我们用next储存每个点下一个点在哪 这样我们不仅能往开头和结尾插入
中间任意一个地方都ok、
这题数据范围题目描述小了 0.0
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100010
using namespace std;
int now,last,l,next[maxn];
char s[maxn];
int main()
{
while(scanf("%s",s+1))
{
next[0]=0;//因为待会用到的next的部分会有赋值 所以不用memset一遍
l=strlen(s+1);now=last=0;
for(int i=1;i<=l;i++)
{
if(s[i]=='['){now=0;continue;}
if(s[i]==']'){now=last;continue;}
next[i]=next[now];next[now]=i;//i插入now后面
if(now==last)last=i;now=i;
}
for(int i=next[0];i;i=next[i])
printf("%c",s[i]);
printf("\n");
}
return 0;
}