/*
#include <stdio.h>
#include <string.h>
#define SIZE 201
int stack[SIZE];
int top=-1;
void push(int data)
{
stack[++top]=data;
}
int pop()
{
if(top==-1) return 0;
return stack[top--];
}
int main()
{
char str[SIZE];
gets(str);
for(int i=0; str[i]!=NULL; i++)
{
if(str[i]>='0' && str[i]<='9')
{
int num = 0;
for( ; ; i++)
{
if(str[i]<'0' || str[i]>'9') break;
num = num*10 + str[i] - '0';
}
push( num );
}
else if(str[i] == '+')
{
push( pop() + pop() );
}
else if(str[i] == '-')
{
int x=pop();
int y=pop();
push(y-x);
// push( -pop() + pop() ); =>외않되?
}
else if(str[i] == '*')
{
push( pop() * pop() );
}
}
printf("%d", pop());
}
*/
#include <stdio.h>
#include <string.h>
#define SIZE 31
int stack[SIZE];
int top = -1;
void push(int data)
{
stack[++top]=data;
}
int pop()
{
if (top==-1) return 0;
return stack[top--];
}
int main()
{
char str[SIZE];
scanf("%s", str);
for(int i=0; str[i]!=NULL; i++)
{
if(str[i]=='(')
push(-1);
else if(str[i]=='[')
push(-2);
else if(str[i]==')')
{
if(stack[top]==-1) //바로 여는괄호 나옴
{
pop();
push(2);
}
else
{
int sum=0;
while(stack[top]!=-1)
{
sum+=pop();
if(top==-1||stack[top]==-2)
{
printf("0");
return 0;
}
}
pop();
push(sum*2);
}
}
else if(str[i]==']')
{
if(stack[top]==-2) //바로 여는괄호 나옴
{
pop();
push(3);
}
else
{
int sum=0;
while(stack[top]!=-2)
{
sum+=pop();
if(top==-1||stack[top]==-1)
{
printf("0");
return 0;
}
}
pop();
push(sum*3);
}
}
}
int n=0,tmp;
while(top!=-1)
{
tmp=pop();
if(tmp<0)
{
printf("0");
return 0;
}
n+=tmp;
}
printf("%d", n);
}