In Takahashi's mind, there is always an integer sequence of length 2 \times 10^9 + 1: A = (A_{-10^9}, A_{-10^9 + 1}, ..., A_{10^9 - 1}, A_{10^9}) and an integer P.

Initially, all the elements in the sequence A in Takahashi's mind are 0, and the value of the integer P is 0.

When Takahashi eats symbols `+`, `-`, `>` and `<`, the sequence A and the integer P will change as follows:

* When he eats `+`, the value of A_P increases by 1;
* When he eats `-`, the value of A_P decreases by 1;
* When he eats `>`, the value of P increases by 1;
* When he eats `<`, the value of P decreases by 1.



Takahashi has a string S of length N. Each character in S is one of the symbols `+`, `-`, `>` and `<`. He chose a pair of integers (i, j) such that 1 \leq i \leq j \leq N and ate the symbols that are the i-th, (i+1)-th, ..., j-th characters in S, in this order. We heard that, after he finished eating, the sequence A became the same as if he had eaten all the symbols in S from first to last. How many such possible pairs (i, j) are there?

Constraints

* 1 \leq N \leq 250000
* |S| = N
* Each character in S is `+`, `-`, `>` or `<`.

Input

Input is given from Standard Input in the following format:


N
S


Output

Print the answer.

Examples

Input

5
+>+<-


Output

3


Input

5
+>+-<


Output

5


Input

48
-+><<><><><>>>+-<<>->>><<><<-+<>><+<<>+><-+->><<


Output

475
#include<bits/stdc++.h>
typedef long long ll;
const int N=250005,mo1=998244853,mo2=993244853;
struct pii{
	int x,y;
	inline void operator+=(const pii&rhs){x+=rhs.x-mo1;y+=rhs.y-mo2;x+=x>>31&mo1;y+=y>>31&mo2;}
	inline void operator-=(const pii&rhs){x-=rhs.x;y-=rhs.y;x+=x>>31&mo1;y+=y>>31&mo2;}
	inline pii operator*(const pii&rhs)const{return (pii){int(1ll*x*rhs.x%mo1),int(1ll*y*rhs.y%mo2)};}
	inline operator ll(){return (ll(x)<<30)|y;}
}f[N],mi[N*2],t,nw;
int n,i,p,pp[N];
char c[N];
std::unordered_map<ll,int>mp;
ll ans;
int main(){
	mi[0]=(pii){487619673,250267803};for(i=1;i<N*2;++i)mi[i]=mi[i-1]*(pii){789322,989432};
	scanf("%d%s",&n,c+1);
	for(i=1;i<=n;++i){
		if(c[i]=='+')nw+=mi[p+N];
		if(c[i]=='-')nw-=mi[p+N];
		if(c[i]=='>')++p;
		if(c[i]=='<')--p;f[i]=nw;pp[i]=p;
	}
	++mp[f[n]];
	for(i=1;i<=n;++i)ans+=mp[t=f[i]],t+=f[n]*mi[pp[i]+N],++mp[t];
	printf("%lld\n",ans);
	return 0;
}