#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; class Solution { public: long long count(int start, int size); vector < vector > cache; string s; }; long long Solution::count(int start, int size) { long long rv; int i; if (size <= 1) return 0; if (cache[start][size] != -1) return cache[start][size]; rv = count(start+1, size-1); // Delete the first character. if (s[start] == '(' || s[start] == '[') { for (i = 1; i < size; i++) { if ((s[start] == '(' && s[start+i] == ')') || (s[start] == '[' && s[start+i] == ']') ) { rv += ( (count(start+1, i-1)+1) * (count(start+i+1, size-(i+1))+1) ); } } } cache[start][size] = rv; return rv; } int main() { Solution sol; int i; cin >> sol.s; sol.cache.resize(sol.s.size()); for (i = 0; i < sol.s.size(); i++) { sol.cache[i].resize(sol.s.size()-i+1, -1); } cout << sol.count(0, sol.s.size()) << endl; return 0; }