#include <bits/stdc++.h>
using namespace std;
#define int long long
#define f first
#define s second
#define pb push_back
#define sz(x) (int)x.size()
const int maxn=1000005;
int p[maxn];
int par(int x){
if(p[x]==0)return x;
return p[x]=par(p[x]);
}
signed main(){
string s;cin>>s;
vector<char> t(maxn);
vector<vector<int>> ch(maxn), cl(maxn);
vector<int> v, pa(maxn);
int ptr=1, n=0;
for(char c : s){
if(c=='m' or c=='a' or c=='i' or c=='(' or c==')' or c==',')continue;
int ind = ptr++;
t[ind]=c;
if(c=='?'){
n++;
assert(t[v.back()] == 'n' or t[v.back()] == 'x');
int cur=ind;
while(true){
ch[v.back()].pb(cur);
pa[cur]=v.back();
if(t[v.back()] == t[cur])p[cur]=v.back();
if(sz(ch[v.back()]) == 2){
cur=v.back();
v.pop_back();
}
else break;
}
}
else v.pb(ind);
/*for(auto it : v){
cout<<t[it]<<" ";
}
cout<<endl;*/
}
for(int i=1;i<ptr;i++){
int head=par(i);
for(auto it : ch[i]){
if(t[it] != t[i]){
cl[head].pb(it);
}
}
}
vector<int> num(n+1, 0);
auto dfs=[&](auto && dfs, int x, int lt, int gt) -> void{
//cout<<"at node x " << x<<" type is " << t[x]<<endl;
int nc=0;
for(auto it : cl[x]){
nc++;
//cout<<"children " << it<<endl;
}
for(auto it : cl[x]){
dfs(dfs, it, lt + (t[x] == 'x' ? nc-1:0), gt+(t[x]=='n'?nc-1:0));
}
if(nc==0){
assert(lt + gt <= n-1);
num[lt+1]++;
num[n-gt+1]--;
}
};
dfs(dfs, 1, 0, 0);
int run=0, ans=0;
for(int i=1;i<=n;i++){
run += num[i];
if(run > 0) ans++;
}
cout<<ans;
}