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
*)