민수는 충남대학교 정원에서 잔디를 깎는 일을 맡았다. 정원은 단위 정사각형 모양의 칸들로 이루어진 거대한 차원 격자판으로 생각할 수 있다.
민수는 일 때 격자의 한 칸에서 시작하여 그 칸의 잔디를 깎는다. 처음에는 이 시작 칸만 잔디가 깎인 상태이다. 이후 민수는 개의 명령에 따라 움직이며 잔디를 깎는다. 예를 들어, 첫 번째 명령이 W 10이라면 부터 까지(즉, 그다음 단위 시간 동안) 민수는 서쪽으로 매초 한 칸씩 이동하며 경로에 있는 모든 칸의 잔디를 깎는다. 이 명령을 마치면 에 민수는 처음 위치에서 서쪽으로 칸 떨어진 곳에 있게 된다.
민수의 작업 속도가 느리기 때문에, 민수가 작업을 마치기 전에 깎았던 잔디가 다시 자랄 수도 있다. 시간 에 깎인 잔디는 시간에 다시 자라난다.
민수는 이동 경로 중에 같은 칸을 여러 번 방문할 수도 있다. 하지만 민수는 잔디를 깎으러 어떤 칸에 들어섰을 때, 그 칸의 잔디가 이미 깎여 있는 상태였던 적은 없었다고 회상했다. 즉, 민수가 어떤 칸을 방문할 때마다, 해당 칸을 마지막으로 방문했던 시간으로부터 최소 단위 시간이 흘러 잔디가 이미 다시 자라 있어야 한다.
민수의 회상이 사실이 될 수 있게 하는 의 최댓값을 구하시오.
입력
첫째 줄에 명령의 개수 이 주어진다. ()
다음 개의 줄에는 각각 하나의 명령이 'D S' 형태로 주어진다. 는 방향을 나타내는 문자(N=북, E=동, S=남, W=서)이고, 는 해당 방향으로 이동하는 칸 수이다. ()
출력
민수가 잔디가 이미 깎인 칸을 밟지 않도록 하는 의 최댓값을 출력한다. 만약 민수가 어떤 칸도 두 번 이상 방문하지 않는다면 -1을 출력한다.
예제 입력 1
6
N 10
E 2
S 3
W 4
S 5
E 8
예제 출력 1
10
코드를 제출하려면 로그인이 필요합니다.
로그인