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 OCaml (4.10.0) (judge verdict: Accepted)

Scanf.scanf "%s" (fun s ->
    let n = String.length s in
    let b = Array.make (n + 1) (-1) in

    (*     0 1 2 3 4 5 n = 6
     * s:  > > > < < <
     * b: 3 2 1 0 1 2 3
     *    0 1 2 3 4 5 6
     *)

    let fill start =
        let rec left i cur =
            if b.(i) < cur then (
                b.(i) <- cur;
                if i > 0 && s.[i - 1] = '>' then (
                    left (i - 1) (cur + 1)
                )
            )
        in
        let rec right i cur =
            b.(i) <- cur;
            if i < n && s.[i] ='<' then (
                right (i + 1) (cur + 1)
            ) else i
        in
        left start 0;
        right start 0
    in

    let rec loop i =
        if i = n then (if b.(i) < 0 then fill i else 0) else
            if s.[i] = '>' then loop (i + 1) else
                loop (fill i)
    in
    let _ = loop 0 in
    Array.fold_left (+) 0 b |> Printf.printf "%d\n"
)

(*
   .         .           .     
 0 1 2 3 4 5 6 7 8 9 A B C D E F
 < > > > < < > < < < < < > > > <
0 3 2 1 0 1 2 0 1 2 3 4 5 2 1 0 0
0 1 2 3 4 5 6 7 8 9 A B C D E F 0
*)