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>
#include <string.h>
char str[500000];
int a[500001];

void dac(int le, int ri){
  if(ri<le) return;
  if(le>ri) return;
  int i, mina, minidx;
  mina=a[le];
  minidx=le;
  for(i=le+1;i<=ri;i++){
    if(a[i]<mina){
      mina=a[i];
      minidx=i;
    }
  }
  for(i=le;i<=ri;i++){
    a[i]-=mina;
  }
  
  int nle = minidx - 1;
  int nri = minidx;
  while (str[nle] == '>' && nle) nle--;
  if (!(nle == 0 && nle == '>')) nle++; //le is last >
  while (str[nri] == '<') nri++;
  nri--; //ri is last <
  dac(le, nle - 1);
  dac(nri + 2, ri);
  return;
}

int main()
{
  scanf("%s", str);
  int len=strlen(str);
  int i;
  a[0]=0;
  for(i=0;i<len;i++){
    if(str[i]=='<'){
      a[i+1]=a[i]+1;
    }else{
      a[i+1]=a[i]-1;
    }
  }
  int mina, minidx;
  mina=0;
  minidx=0;
  for(i=1;i<=len;i++){
    if(a[i]<mina){
      mina=a[i];
      minidx=i;
    }
  }
  for(i=0;i<=len;i++){
    a[i]-=mina;
  }
  int le=minidx-1;
  int ri=minidx;
  while(str[le]=='>' && le) le--;
  if(!(le==0 && le=='>')) le++; //le is last >
  while(str[ri]=='<') ri++;
  ri--; //ri is last <
  dac(0,le-1);
  dac(ri+2,len);
  
  long sum=0;
  for(i=0;i<=len;i++){
    sum+=a[i];
  }
  printf("%ld\n",sum);
  return 0;
}