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++14 (GCC 5.4.1) (judge verdict: Accepted)

#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<iomanip>
#include<math.h>
#include<complex>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#include<functional>
#include<assert.h>
#include<numeric>
using namespace std;
#define REP(i,m,n) for(int i=(int)(m) ; i < (int) (n) ; ++i )
#define rep(i,n) REP(i,0,n)
using ll = long long;
const int inf=1e9+7;
const ll longinf=1LL<<60 ;
const ll mod=1e9+7 ;

int main(){
  string S; cin >> S;
  int N = S.size()+1;
  int tmp[N] = {0}; 
  if(S[0]=='<'){
    int i=0; tmp[0] = 0;
    while(S[i]=='<' && i<N-1){
      tmp[i+1]=max(i+1, tmp[i+1]); i++;
    }
  }
  if(S[N-2]=='>'){
    int i=N-1; tmp[i] = 0;
    while(S[i-1]=='>' && i>0){
      i--;  tmp[i]=max(N-i-1, tmp[i]); 
    }
  }
  rep(i, N-2){
    if(S[i]=='>' && S[i+1]=='<'){
      tmp[i+1]=0;
      int j=i, k=0;
      while(S[j]=='>'){
        j--; k++; tmp[j+1]=max(k, tmp[j+1]);
      }
      j=i+1; k=0;
      while(S[j]=='<'){
        j++; k++; tmp[j]=max(k, tmp[j]);
      }
    }
  }
  ll ans = 0;
  rep(i, N){
    ans += (ll) tmp[i];
  }
  cout << ans << endl;

}