#include <bits/stdc++.h>

using namespace std;


class BracketSequenceDiv1 {
public:
int n;
string s;
typedef long long LL;
LL memo[41][41][41][4];

LL f(int p, int Lr, int Ls, int last)
{
	if (p == n)
		return Lr == 0 && Ls == 0 && last != 3;
	
	LL& res = memo[p][Lr][Ls][last];
	if (res != -1LL)
		return res;
	res = 0;
	if (s[p] == '(')
	{
		res = f(p+1, Lr+1, Ls, 0)+f(p+1, Lr, Ls, last);
	}
	else if (s[p] == '[')
	{
		res = f(p+1, Lr, Ls+1, 1)+f(p+1, Lr, Ls, last);
	}
	else if (s[p] == ')')
	{
		if (Lr == 0 && Ls == 0)
			res = f(p+1, Lr, Ls, last);
		else if (Lr > 0 && Ls == 0)
			res = f(p+1, Lr, Ls, last)+f(p+1, Lr-1, Ls, Lr-1?0:2);
		else if (Lr == 0 && Ls > 0)
			res = f(p+1, Lr, Ls, last);
		else // Lr > 0 && Ls > 0
		{
			res = f(p+1, Lr, Ls, last);
			if (last != 1)
				res += f(p+1, Lr-1, Ls, Lr-1?0:1);
		}
	}
	else // s[p] == ']'
	{
		if (Lr == 0 && Ls == 0)
			res = f(p+1, Lr, Ls, last);
		else if (Lr > 0 && Ls == 0)
			res = f(p+1, Lr, Ls, last);
		else if (Lr == 0 && Ls > 0)
			res = f(p+1, Lr, Ls, last)+f(p+1, Lr, Ls-1, Ls-1?1:2);
		else
		{
			res = f(p+1, Lr, Ls, last);
			if (last != 0)
				res += f(p+1, Lr, Ls-1, Ls-1?1:0);
		}
	}
	return res;
}

long long count(string s_) 
{
	s = s_;
	n = s.size();	
	memset(memo, -1, sizeof(memo));
	
	return f(0, 0, 0, 3);
}
};


<%:testing-code%>
//Powered by KawigiEdit 2.1.4 (beta) modified by pivanof!