#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i(j);i<=k;++i)
#define drp(i,j,k) for(register int i(j);i>=k;--i)
using namespace std;
inline char gt()
{
return getchar();
}
template <typename T>
inline void read(T &x)
{
register char ch = gt();
x = 0;
int w(0);
while(!(ch >= '0' && ch <= '9'))w |= ch == '-', ch = gt();
while(ch >= '0' && ch <= '9')x = x * 10 + (ch & 15), ch = gt();
w ? x = ~(x - 1) : x;
}
template <typename T>
inline void out(T x)
{
if(x < 0) x = -x, putchar('-');
char ch[20];
int num(0);
while(x || !num) ch[++num] = x % 10 + '0', x /= 10;
while(num) putchar(ch[num--]);
putchar('\n');
}
int n;
const int N = 1000079;
char s[N];
int f[N];
int ans;
int main()
{
scanf("%s", s + 1);
int n = strlen(s + 1);
rep(i, 1, n)
{
if(s[i] == '(' || s[i] == '[')
{
f[i] = 0;
}
else if(s[i] == ')' || s[i] == ']')
{
if(s[i - 1] == '(' || s[i - 1] == '[')
{
if ( ( s[i - 1] == '(' && s[i] == ')' ) || ( s[i - 1] == '[' && s[i] == ']'))
f[i] =max(f[i], f[i - 1] + 2);
}
else if(s[i - 1] == ')' || s[i - 1] == ']')
{
if( (s[i - f[i - 1] - 1] == '(' && s[i] == ')' ) || ( s[i - f[i - 1] - 1] == '[' && s[i] == ']' ) )
f[i] = max(f[i],f[i - 1] + 2);
}
if(s[i-2]==')'||s[i-2]==']')
{
f[i]+=f[i-2];
}
}
ans = max(f[i], ans);
}
rep(i, 1, n)
if(f[i] == ans)
{
rep(j, i - f[i] + 1, i)
cout << s[j];
return 0;
}
return 0;
}