#include<bits/stdc++.h>
using namespace std;
int len;
char s[110];
char ps[110];
const long long INF=(1ll<<50);
bool parseQ(int &t);
long long parseE(int &t);
long long parseT(int &t);
long long parseF(int &t);
long long parseN(int &t);
pair<long long,int> parseB(int &t);
bool parseQ(int &t)
{
	long long v1=parseE(t);
	//cout<<v1<<endl;
	if(v1==INF) return 0;
	if(s[t]!='=') return 0;
	t++;
	long long v2=parseE(t);
	if(t!=len+1) return 0;
	//cout<<v1<<" "<<v2<<endl;
	return v1==v2;
}
long long parseE(int &t)
{
	long long res=parseT(t);
	if(res==INF) return res;
	while(t<=len)
	{
		if(s[t]!='-'&&s[t]!='+') return res;
		char c=s[t];
		t++;
		long long v=parseT(t);
		if(v==INF) return INF;
		if(c=='-') res-=v;
		else res+=v;
	}
	return res;
}
long long parseT(int &t)
{
	long long res=parseF(t);
	if(res==INF) return res;
	while(t<=len)
	{
		if(s[t]!='*') return res;
		t++;
		long long v=parseF(t);
		if(v==INF) return INF;
		res*=v;
	}
	return res;
}
long long parseF(int &t)
{
	if(s[t]=='-')
	{
		t++;
		long long v=parseF(t);
		if(v==INF) return INF;
		return -v;
	}
	else if(s[t]=='(')
	{
		t++;
		long long v=parseE(t);
		if(v==INF) return INF;
		if(s[t]!=')') return INF;
		t++;
		return v;
	}
	else
	{
		return parseN(t);
	}
}
long long parseN(int &t)
{
	if(s[t]=='0')
	{
		t++;
		return 0;
	}
	else
	{
		if(s[t]!='1') return INF;
		t++;
		auto pre=parseB(t);
		if(pre.first==INF) return INF;
		//cout<<(1ll<<pre.second)+pre.first<<endl;
		//cout<<t<<" "<<s[t]<<endl;
		return (1ll<<pre.second)+pre.first;
	}
}
pair<long long,int> parseB(int &t)
{
	if(s[t]=='0')
	{
		t++;
		auto pre=parseB(t);
		return {pre.first,pre.second+1};
	}
	else if(s[t]=='1')
	{
		t++;
		auto pre=parseB(t);
		return {pre.first+(1ll<<pre.second),pre.second+1};
	}
	else
	{
		return {0ll,0};
	}
}
bool ischar(char a)
{
	return ((a>='a'&&a<='z')||(a>='A'&&a<='Z'));
}
int ans;
int cnt;
int num[256]={};
bool vis[8]={};
int ding[10]={};
char st[]="+-*=()01";
void dfs(int d)
{
	if(d==cnt+1)
	{
		//cout<<"***********"<<len<<endl;
		//cout<<(ps+1)<<endl;
		for(int i=1;i<=len;i++)
		{
			if(ischar(ps[i]))
			{
				s[i]=st[ding[num[ps[i]]]];
			}
			else s[i]=ps[i];
			//cout<<s[i];
		}
		//cout<<endl;
		int tt=1;
		if(parseQ(tt))
		{
			ans++;
		}
		return;
	}
	for(int i=0;i<8;i++)
	{
		if(!vis[i])
		{
			vis[i]=1;
			ding[d]=i;
			dfs(d+1);
			vis[i]=0;
		}
	}
}
int main()
{
	scanf("%s",ps+1);
	len=strlen(ps+1);
	for(int i=1;i<=len;i++)
	{
		if(ischar(ps[i])&&num[ps[i]]==0)
		{
			cnt++;
			num[ps[i]]=cnt;
		}
	}
	//cout<<cnt<<endl;
	if(cnt>8)
	{
		cout<<0<<endl;
		return 0;
	}
	dfs(1);
	cout<<ans<<endl;
	return 0;
}