괄호 경로

각 간선에 괄호 기호가 붙은 방향 그래프에서 s에서 t로 가는 경로 중 간선의 기호가 올바른 괄호열을 이루는 가장 짧은 경로의 길이를 구하고, 없으면 -1을 출력한다.

어려움8그래프BFS동적 계획법최단 경로아직 제출이 없습니다시간 제한0.2초메모리 제한512 MB

문제

괄호 문자는 (, ), [, ], {, }, <, > 여덟 개 중 하나다. 괄호 문자로만 이루어진 문자열이 다음 두 조건을 만족하면 올바른 괄호 식이라고 한다.

  • 모든 여는 괄호는 같은 종류의 닫는 괄호와 짝을 이루고, 모든 닫는 괄호도 짝이 있다.
  • 짝을 이루는 두 괄호 쌍은 교차하지 않는다. 두 쌍은 서로 떨어져 있거나, 한 쌍이 다른 쌍 안에 완전히 들어 있다.

예를 들어 ([])<> 는 올바른 괄호 식이지만, <{>} 는 중괄호 쌍과 꺾쇠 괄호 쌍이 교차하므로 올바르지 않다.

정점이 nn개인 방향 그래프가 주어진다. 각 간선에는 괄호 문자가 하나씩 적혀 있다. 어떤 경로가 지나는 간선의 문자를 순서대로 이어 붙인 문자열이 올바른 괄호 식이면 그 경로를 올바른 경로라고 한다. 정점 ss에서 정점 tt까지 가는 가장 짧은 올바른 경로의 길이를 구하라. 경로는 같은 정점을 여러 번 지나도 된다. 경로의 길이는 지나는 간선의 개수다.

간선을 하나도 지나지 않는 빈 경로도 올바른 괄호 식이므로, sstt가 같으면 답은 00이다.

입력

첫째 줄에 정수 nn, mm, ss, tt가 주어진다 (1n2001 \leq n \leq 200, 0m20000 \leq m \leq 2000, 1s,tn1 \leq s, t \leq n). 차례대로 정점 개수, 간선 개수, 시작 정점, 도착 정점이다.

다음 mm개 줄에는 각각 정수 xx, yy와 괄호 문자 bb가 주어진다 (1x,yn1 \leq x, y \leq n). 정점 xx에서 정점 yy로 가는 간선에 문자 bb가 적혀 있다는 뜻이다. 자기 자신으로 돌아오는 간선이나 같은 두 정점을 잇는 간선이 여러 개 있을 수 있다.

출력

ss에서 tt까지 가는 가장 짧은 올바른 경로의 길이를 한 줄에 출력한다. 그런 경로가 없으면 1-1을 출력한다. 경로가 존재한다면 그 길이는 101810^{18}을 넘지 않는다.