1 #include<bits/stdc++.h>
2 using namespace std;
3 char str[102];
4 int dp[1020][1020];
5 int n;
6 bool check(int i,int j)
7 {
8 if((str[i-1]=='('&&str[j-1]==')')||(str[i-1]=='['&&str[j-1]==']'))
9 return true;
10 return false;
11 }
12 int main()
13 {
14 gets(str);
15 n=strlen(str);
16 for(int i=1;i<=n;i++)
17 {
18 dp[i][i]=1;
19 }
20 for(int len=2;len<=n;len++)
21 {
22 for(int st=1;st<=n*2-len+1;st++)
23 {
24 int ed=st+len-1;
25 dp[st][ed]=INT_MAX;
26 for(int bk=st;bk<=ed;bk++)
27 {
28 dp[st][ed]=min(dp[st][ed],dp[st][bk]+dp[bk+1][ed]);
29 }
30 if(check(st,ed)) dp[st][ed]=min(dp[st][ed],dp[st+1][ed-1]);
31 }
32 }
33 cout<<dp[1][n];
34 }