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 Rust (1.42.0) (judge verdict: Accepted)

use std::cmp::*;
use std::collections::*;
use std::io::*;
use std::str::FromStr;
fn read<T: FromStr>() -> T {
    let stdin = stdin();
    let stdin = stdin.lock();
    let token: String = stdin
        .bytes()
        .map(|c| c.expect("failed to read char") as char)
        .skip_while(|c| c.is_whitespace())
        .take_while(|c| !c.is_whitespace())
        .collect();
    token.parse().ok().expect("failed to parse token")
}
fn main(){
    let s:String = read();
    let v:Vec<char> = s.chars().collect();
    let mut sum:Vec<usize> = vec![0;s.len() + 1];
    for i in 0..s.len(){
        let mut flag = 0;
        if(v[i] == '<'){
            flag += 1;
            sum[i + 1] = max(sum[i] + flag ,sum[i + 1]);
        }

    }
    for i in (0..s.len()).rev(){
        let mut flag = 0;
        if v[i] == '>'{
            flag += 1;
            sum[i] = max(sum[i + 1] + flag,sum[i]);
        }
        //sum_b[s.len() - 1 - i] = max(sum_b[s.len() - i] + flag,sum_b[s.len() - i - 1]);
    }
    let mut ans = 0;
    for i in 0..s.len() + 1{
        ans += sum[i];
    }
    //println!("{:?}",sum_a);
    //println!("{:?}",sum_b);
    println!("{}",ans);
}