Problem:
Score : 300 points

Problem Statement

Given is a string S of length N-1.
Each character in S is < or >.

A sequence of N non-negative integers, a_1,a_2,\cdots,a_N, is said to be good when the following condition is satisfied for all i (1 \leq i \leq N-1):

If S_i= <: a_i<a_{i+1}

If S_i= >: a_i>a_{i+1}

Find the minimum possible sum of the elements of a good sequence of N non-negative integers.

Constraints

2 \leq N \leq 5 \times 10^5

S is a string of length N-1 consisting of < and >.

Input

Input is given from Standard Input in the following format:

S

Output

Find the minimum possible sum of the elements of a good sequence of N non-negative integers.

Sample Input 1

<>>

Sample Output 1

3

a=(0,2,1,0) is a good sequence whose sum is 3.
There is no good sequence whose sum is less than 3.

Sample Input 2

<>>><<><<<<<>>><

Sample Output 2

28

Solution in C (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <stdio.h>
char string[512345];int num[512345];
long long sum = 0;
int maxv(int a, int b){
	//return a > b ? a: b;
	if(a <= b){
		return b-a;
	}
	return a;
}
char last; int pos = 0; int lnum = 1; int volta = 0;
int funcao(/*char last, int pos, int lnum, int volta*/){// volta = seq start;
	//printf("%c %d %d %d %d\n", last, pos, lnum, volta, num[volta]);
	//if(pos > 10) return -1;
	if(string[pos+1] != last){
		num[pos] = lnum;
		if(last == '<'){
			last = '>';
			volta = pos;
			pos++;
			lnum = 0;
			//funcao();
		}else{
			//printf("sa%d\n", sum);
			sum += ((lnum)*(lnum+2))/2;//pa
			//printf("sa%d\n", sum);
			sum += maxv(num[volta], lnum+1) +1;
			//printf("sd%d\n", sum);
			last = '<';
			pos++;
			lnum = 0;
			volta = 0;
			//funcao();
		}
		if(string[pos/*+1*/] == '\0') return -1;
		return 1;
	}else{
		if(last == '<'){
			//printf("else\n");
			sum += ++lnum;
			pos++;
			//lnum++;
			//funcao();
		}else{
			pos++;
			lnum++;
			//funcao();
		}
		return 1;
	}
}

int main(){
	scanf(" %s", string);
	num[0] = 0;
	last = string[0];
	while(funcao() == 1);
	printf("%lld\n", sum);
	return 0;
}