각 간선에 괄호 기호가 붙은 방향 그래프에서 s에서 t로 가는 경로 중 간선의 기호가 올바른 괄호열을 이루는 가장 짧은 경로의 길이를 구하고, 없으면 -1을 출력한다.
괄호 문자는 (, ), [, ], {, }, <, > 여덟 개 중 하나다. 괄호 문자로만 이루어진 문자열이 다음 두 조건을 만족하면 올바른 괄호 식이라고 한다.
(
)
[
]
{
}
<
>
예를 들어 ([])<> 는 올바른 괄호 식이지만, <{>} 는 중괄호 쌍과 꺾쇠 괄호 쌍이 교차하므로 올바르지 않다.
([])<>
<{>}
정점이 nnn개인 방향 그래프가 주어진다. 각 간선에는 괄호 문자가 하나씩 적혀 있다. 어떤 경로가 지나는 간선의 문자를 순서대로 이어 붙인 문자열이 올바른 괄호 식이면 그 경로를 올바른 경로라고 한다. 정점 sss에서 정점 ttt까지 가는 가장 짧은 올바른 경로의 길이를 구하라. 경로는 같은 정점을 여러 번 지나도 된다. 경로의 길이는 지나는 간선의 개수다.
간선을 하나도 지나지 않는 빈 경로도 올바른 괄호 식이므로, sss와 ttt가 같으면 답은 000이다.
첫째 줄에 정수 nnn, mmm, sss, ttt가 주어진다 (1≤n≤2001 \leq n \leq 2001≤n≤200, 0≤m≤20000 \leq m \leq 20000≤m≤2000, 1≤s,t≤n1 \leq s, t \leq n1≤s,t≤n). 차례대로 정점 개수, 간선 개수, 시작 정점, 도착 정점이다.
다음 mmm개 줄에는 각각 정수 xxx, yyy와 괄호 문자 bbb가 주어진다 (1≤x,y≤n1 \leq x, y \leq n1≤x,y≤n). 정점 xxx에서 정점 yyy로 가는 간선에 문자 bbb가 적혀 있다는 뜻이다. 자기 자신으로 돌아오는 간선이나 같은 두 정점을 잇는 간선이 여러 개 있을 수 있다.
sss에서 ttt까지 가는 가장 짧은 올바른 경로의 길이를 한 줄에 출력한다. 그런 경로가 없으면 −1-1−1을 출력한다. 경로가 존재한다면 그 길이는 101810^{18}1018을 넘지 않는다.