#include #include #include #include #include #include #include using namespace std; string str; int tab[110][110]; void doit(int beg, int end) { if(beg == end) {tab[beg][end] = 0; return;} int best = 0; for(int x = beg; x <= end; x++) { int val = tab[beg][x]+tab[x][end]; if(val > best) best = val; } if((str[beg] == '(' && str[end-1] == ')') || (str[beg] == '[' && str[end-1] == ']')) { int val = 2+tab[beg+1][end-1]; if(val > best) best = val; } tab[beg][end] = best; } void setup() { memset(tab,0xCC, sizeof(tab)); for(int len = 0; len <= str.length(); len++) for(int beg = 0; beg + len <= str.length(); beg++) doit(beg, beg+len); } void run() { getline(cin, str); if(str == "end") exit(0); setup(); cout << tab[0][str.length()] << endl; } int main() { while(1) run(); }