//UVA1626BracketsSequence
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN = 100 + 10;
char s[MAXN];
int d[MAXN][MAXN];
int len;
inline bool Match(int a, int b) {
return (a == '(' && b == ')') || (a == '[' && b == ']');
}
void dp() {
for(int i = 0; i < len; i++) {
d[i][i] = 1;
d[i + 1][i] = 0;
}//递推终止条件
for(int i = len - 2; i >= 0; i--) {
for(int j = i + 1; j < len; j++) {
d[i][j] = len;
if(Match(s[i], s[j])) {
d[i][j] = min(d[i][j], d[i + 1][j - 1]);
}
for(int k = i; k < j; k++) {
d[i][j] = min(d[i][k] + d[k + 1][j], d[i][j]);
}
}
}
}
void print(int i, int j) {
if(i > j) return ;
if(i == j) {
if(s[i] == '(' || s[i] == ')') printf("()");
else printf("[]"); return ;
}
int ans = d[i][j];
if(Match(s[i], s[j]) && ans == d[i + 1][j - 1]) {
printf("%c", s[i]); print(i + 1, j - 1); printf("%c", s[j]);
return ;
}
for(int k = i; k < j; k++) {
if(d[i][k] + d[k + 1][j] == ans) {
print(i, k); print(k + 1, j); return ;
}
}
}
int main() {
int kase;
//freopen("UVA1626out.txt", "w", stdout);
scanf("%d\n", &kase);
for(int i = 0; i < kase; i++) {
if(i) printf("\n");
fgets(s, sizeof(s), stdin);
getchar();
len = strlen(s) - 1;//fgets会读入换行符
dp();
print(0, len - 1);
printf("\n");
}
return 0;
}
/*
2
([(]
*/