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 Java8 (OpenJDK 1.8.0) (judge verdict: Accepted)

//make sure to make new file!
import java.io.*;
import java.util.*;

public class Main{
   
   public static void main(String[] args)throws IOException{
      BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
      PrintWriter out = new PrintWriter(System.out);
      
      char[] s = f.readLine().toCharArray();
      
      int n = s.length;
      
      int[] array = new int[n+1];
      Arrays.fill(array,-1);
      
      HashSet<Integer> hset = new HashSet<Integer>();
      
      if(s[0] == '<'){
         array[0] = 0;
         hset.add(0);
      }
      
      if(s[n-1] == '>'){
         array[n] = 0;
         hset.add(n);
      }
      
      for(int k = 1; k < n; k++){
         if(s[k-1] == '>' && s[k] == '<'){
            array[k] = 0;
            hset.add(k);
         }
      }
      
      
      for(int i : hset){
         int index = i-1;
         //go left
         while(index >= 0 && s[index] == '>'){
            if(array[index] != -1){
               array[index] = Math.max(array[index],i-index);
               break;
            }
            array[index] = i-index;
            index--;
         }
         
         index = i+1;
         while(index <= n && s[index-1] == '<'){
            if(array[index] != -1){
               array[index] = Math.max(array[index],index-i);
               break;
            }
            array[index] = index-i;
            index++;
         }
      }
      
      long answer = 0;
      for(int k = 0; k <= n; k++){
         answer += (long)array[k];
      }
      
      out.println(answer);
      
      
      
      
      
      out.close();
   }
   
      
}