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: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;

using lint = long long int;
using pint = pair<int, int>;
using plint = pair<lint, lint>;
#define ALL(x) (x).begin(), (x).end()
#define SZ(x) ((lint)(x).size())
#define POW2(n) (1LL << (n))
#define FOR(i, begin, end) for (int i = (begin), i##_end_ = (end); i < i##_end_; i++)
#define IFOR(i, begin, end) for (int i = (end)-1, i##_begin_ = (begin); i >= i##_begin_; i--)
#define REP(i, n) FOR(i, 0, n)
#define IREP(i, n) IFOR(i, 0, n)

int main()
{
    string s;cin >> s;
    lint ans=0;
    lint num = 0;
    vector<lint> v(SZ(s)+1);
    v[0] = 0;
    lint min_s = 1;
    lint uc = 0, dc = 0;
    lint down = 0;

    REP(i,SZ(s)){
        if(s[i]=='<'){
            uc += 1;
            if (num<0){
                if(-num<down){
                    ans += (dc) * (-num);
                }else{
                    ans += (dc + 1) * (-num);
                }
                down = 0;
                num = 1;
            }else{
                num += 1;
            }
            dc = 0;
        }else{
            dc += 1;
            if(num>1){
                down = num;
                num = 0;
            }else{
                num -= 1;
            }
            uc = 0;
        }
        //min_s = min(min_s, num);
        ans += num;
        v[i + 1] = num;
    }
    if (-num < down)
    {
        ans += (dc) * (-num);
    }
    else
    {
        ans += (dc + 1) * (-num);
    }
    //REP(i, SZ(s) + 1)
        //cout << v[i] << " "; cout << "\n";
    //cout << min_s<< "\n";
    //ans += (-min_s) * SZ(s);
    cout << ans <<"\n";

    return 0;
}