#include using namespace std; char x[200]; int longest[101][101]; int getLongest(int i1, int i2) { if (longest[i1][i2] != -1) return longest[i1][i2]; int val = 0; if (i1 > i2) return 0; val >?= getLongest(i1+1, i2); val >?= getLongest(i1, i2-1); for (int j1 = i1; j1 <= i2; j1++) for (int j2 = j1; j2 <= i2; j2++) if ( (x[j1] == '(' && x[j2] == ')') || (x[j1] == '[' && x[j2] == ']')) { val >?= 2 + getLongest(i1,j1-1) + getLongest(j1+1,j2-1) + getLongest(j2+1, i2); } longest[i1][i2] = val; return val; } int main() { int i, j; while (1) { cin >> x; if (x[0] == 'e') return 0; for (i = 0; i < 101; i++) for (j = 0; j < 101; j++) longest[i][j] = -1; cout << getLongest(0, strlen(x)-1) << endl; } }