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 <iostream>
#include <cstdio>
#include <map>
#define MN 250005

const long long mod = 213668850274623167;
const long long base = 257;
char s[MN];
long long c[MN];
long long fac[MN], inv[MN];
std::map<long long, int> mp;

long long mul(long long a, long long b)
{
	a = (a + mod) % mod;
	b = (b + mod) % mod;
	return (a * b - (long long)((long double) a / mod * b) * mod + mod) % mod;
}

long long qpow(long long x, long long p)
{
	long long ans = 1;
	while(p)
	{
		if(p & 1) ans = mul(ans, x);
		x = mul(x, x); p >>= 1;
	}
	return ans;
}

void add(int x, int o, long long &now)
{
	long long u;
	if(x < 0) u = inv[-x];
	else u = fac[x];
	now = (mul(u, o) + now) % mod;
}

int main()
{
	int n; scanf("%d", &n);
	scanf("%s", s);
	long long p = 0, now = 0;
	inv[1] = qpow(base, mod - 2);
	fac[0] = 1; fac[1] = base;
	for(int i = 2; i <= n; i++) inv[i] = mul(inv[i - 1], inv[1]), fac[i] = mul(fac[i - 1], fac[1]);
	for(int i = 0; i < n; i++)
	{
		if(s[i] == '<') p--;
		if(s[i] == '>') p++;
		if(s[i] == '+') add(p, 1, now);
		if(s[i] == '-') add(p, -1, now);
	}
	long long e = now; p = 0; now = 0;
	mp[e]++;
	long long ans = 0;
	for(int i = 0; i < n; i++)
	{
		if(s[i] == '<') p--;
		if(s[i] == '>') p++;
		if(s[i] == '+') add(p, 1, now);
		if(s[i] == '-') add(p, -1, now);
		long long u;
		if(p < 0) u = inv[-p];
		else u = fac[p];
		ans += mp[now];
		mp[(mul(e, u) + now ) % mod]++;
	}
	printf("%lld\n", ans);
	return 0;
} 