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>
#define MAX(a, b)  ((a > b) ? a : b)

void do_right(int v[], char s[], int idx, int n){
  while(idx < n - 1 && s[idx] == '<'){
    v[idx + 1] = MAX(v[idx] + 1, v[idx + 1]);
    idx += 1;
  }
}

void do_left(int v[], char s[], int idx, int n){
  while(idx > 0 && s[idx - 1] == '>'){
    v[idx - 1] = MAX(v[idx] + 1, v[idx - 1]);
    idx -= 1;
  }
}

int main(){
  char s[5000000];
  scanf("%s", s);
  int n = strlen(s) + 1;
  int v[n] = {0};
  
  if(s[0] == '<'){
    v[0] = 0;
    do_right(v, s, 0, n);
  }
  
  for(int i = 1; i < n - 1; i++){
    if(s[i - 1] == '>' && s[i] == '<'){
      v[i] = 0;
      do_right(v, s, i, n);
      do_left(v, s, i, n);
    }
  }
  
  if(s[n - 2] == '>'){
    v[n - 1] = 0;
    do_left(v, s, n - 1, n);
  }
  
  /*
  for(int i = 0; i < n; i++){
    printf("%d,", v[i]);
  }
  printf("\n");
  */
  int x = 0;
  for(int i = 0; i < n; i++){
    x += v[i];
  }
  printf("%d\n", x);
}