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>

int main(){
  char s[500001];
  scanf("%s", s);
  int len = strlen(s);
  int u[len];
  int d[len];
  int sect = 0;
  int up = 0;
  int down = 0;
  for(int i = 0; i < len; i++){
    if((s[i] == '<') && (down == 0)){
      up++;
    }else if(s[i] == '>'){
      down++;
    }else{
      u[sect] = up;
      d[sect] = down;
      sect++;
      up = 1;
      down = 0;
    }
  }
  u[sect] = up;
  d[sect] = down;
  sect++;
  int sumu, sumd, minud;
  int ans = 0;
  for(int i = 0; i < sect; i++){
    sumu = (0 + u[i]) * (u[i] + 1) / 2;
    sumd = (0 + d[i]) * (d[i] + 1) / 2;
    minud = u[i];
    if(d[i] < minud){
      minud = d[i];
    }
    //printf("%d %d %d %d\n", i, sumu, sumd, minud);
    ans += sumu + sumd - minud;
  }
  printf("%d\n", ans);

  return 0;
}