#include <bits/stdc++.h>
using namespace std;
bool is_match(char a, char b) {
return (a == '(' && b == ')') ||
(a == '[' && b == ']') ||
(a == '{' && b == '}');}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
string s;
cin >> s;
int n = s.length();
vector<vector<int>> dp(n, vector<int>(n, 0));
for (int len = 1; len <= n; ++len) {
for (int i = 0; i + len - 1 < n; ++i) {
int j = i + len - 1;
if (i == j) {
dp[i][j] = 1;
} else {
dp[i][j] = 1e9;
if (is_match(s[i], s[j])) {
dp[i][j] = dp[i + 1][j - 1];
}
for (int k = i; k < j; ++k) {
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j]);
}
}
}
}
cout << dp[0][n - 1] << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpib29sIGlzX21hdGNoKGNoYXIgYSwgY2hhciBiKSB7CiAgICByZXR1cm4gKGEgPT0gJygnICYmIGIgPT0gJyknKSB8fAogICAgICAgICAgIChhID09ICdbJyAmJiBiID09ICddJykgfHwKICAgICAgICAgICAoYSA9PSAneycgJiYgYiA9PSAnfScpO30KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgc3RyaW5nIHM7CiAgICBjaW4gPj4gczsKICAgIGludCBuID0gcy5sZW5ndGgoKTsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gZHAobiwgdmVjdG9yPGludD4obiwgMCkpOwoKICAgIGZvciAoaW50IGxlbiA9IDE7IGxlbiA8PSBuOyArK2xlbikgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpICsgbGVuIC0gMSA8IG47ICsraSkgewogICAgICAgICAgICBpbnQgaiA9IGkgKyBsZW4gLSAxOwogICAgICAgICAgICBpZiAoaSA9PSBqKSB7CiAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IDE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IDFlOTsKICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaChzW2ldLCBzW2pdKSkgewogICAgICAgICAgICAgICAgICAgIGRwW2ldW2pdID0gZHBbaSArIDFdW2ogLSAxXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSBpOyBrIDwgajsgKytrKSB7CiAgICAgICAgICAgICAgICAgICAgZHBbaV1bal0gPSBtaW4oZHBbaV1bal0sIGRwW2ldW2tdICsgZHBbayArIDFdW2pdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgZHBbMF1bbiAtIDFdIDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQo=