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"
#include<boost/multi_array.hpp>
#include<boost/optional.hpp>
#include<boost/range/irange.hpp>
#include<boost/range/algorithm.hpp>
#include<boost/range/adaptors.hpp>
#include<boost/operators.hpp>
#include<boost/dynamic_bitset.hpp>

namespace adaptor = boost::adaptors;
using index_t = std::size_t;

void Main()
{
	std::string str;
	std::cin >> str;
	auto N = str.size() + 1;
	std::set<index_t> bottom;
	if (str.front() == '<')
	{
		bottom.emplace(0);
	}
	for (auto i : boost::irange<index_t>(1, N - 1))
	{
		if (str[i - 1] == '>' && str[i] == '<')
		{
			bottom.emplace(i);
		}
	}
	if (str.back() == '>')
	{
		bottom.emplace(str.size());
	}
	std::vector<std::int64_t> vec(N);
	for (auto b : bottom)
	{
		vec[b] = 0;
		for (auto i = b; 0 < i; --i)
		{
			if (str[i - 1] == '>')
			{
				vec[i - 1] = std::max(vec[i - 1], vec[i] + 1);
			}
			else
			{
				break;
			}
		}
		for (auto i = b; i < N - 1; ++i)
		{
			if (str[i] == '<')
			{
				vec[i + 1] = std::max(vec[i + 1], vec[i] + 1);
			}
			else
			{
				break;
			}
		}
	}
	std::cout << std::accumulate(vec.begin(), vec.end(), 0) << std::endl;
}

int main()
{
	std::cin.tie(nullptr);
	std::ios_base::sync_with_stdio(false);
	std::cout << std::fixed << std::setprecision(15);
	Main();
}