#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<ll,ll> P;

#define fr first
#define sc second

const ll MOD[2] = {1000000007,1000000009};

ll modpow(ll x,ll k,int t){
	if(k==0)return 1;
	ll ret=modpow(x,k/2,t);
	ret*=ret; ret%=MOD[t];
	if(k%2==1){
		ret*=x; ret%=MOD[t];
	}
	return ret;
}

int main(){
	int n;
	string s;
	cin>>n>>s;
	
	srand((unsigned)time(NULL));
	ll r[2]={rand()+n,rand()+n};
	
	P hash[250010],h=P(0,0);
	ll loc[250010],p=0;
	for(int i=0;i<n;i++){
		if(s[i]=='+'){
			h.fr+=modpow(r[0],p+MOD[0]-1,0);
			if(h.fr>=MOD[0])h.fr-=MOD[0];
			h.sc+=modpow(r[1],p+MOD[1]-1,1);
			if(h.sc>=MOD[1])h.sc-=MOD[1];
		}
		else if(s[i]=='-'){
			h.fr+=MOD[0]-modpow(r[0],p+MOD[0]-1,0);
			if(h.fr>=MOD[0])h.fr-=MOD[0];
			h.sc+=MOD[1]-modpow(r[1],p+MOD[1]-1,1);
			if(h.sc>=MOD[1])h.sc-=MOD[1];
		}
		else if(s[i]=='>'){
			p++;
		}
		else {
			p--;
		}
		hash[i]=h;
		loc[i]=p;
	}
	
	ll ret=0;
	map<P,ll> cnt;
	for(int i=n-1;i>=0;i--){
		P nex=hash[i];
		P dif=hash[n-1];
		dif.fr*=modpow(r[0],loc[i]+MOD[0]-1,0); dif.fr%=MOD[0];
		dif.sc*=modpow(r[1],loc[i]+MOD[1]-1,1); dif.sc%=MOD[1];
		nex.fr+=dif.fr; nex.fr%=MOD[0];
		nex.sc+=dif.sc; nex.sc%=MOD[1];
		ret+=cnt[nex];
		cnt[hash[i]]++;
	}
	cout<<ret+cnt[hash[n-1]]<<endl;
}

