스코어보드 조작
시간 제한1초메모리 제한128 MB
동결된 스코어보드와 남은 제출 기록이 주어질 때, B가 기록을 조작해 A를 확실히 앞설 수 있는지 판정하고 사전순으로 가장 작은 조작 방법을 출력한다.
문제
대회 순위는 이렇게 정한다. 푼 문제 수가 많은 사람이 위에 온다. 푼 문제 수가 같으면 페널티가 낮은 사람이 위에 온다.
페널티는 푼 문제에 대해서만 계산한다. 어떤 문제를 처음 맞히기까지 제출한 횟수가 번이면 그 문제의 페널티는 이고, 푼 문제마다 구한 값을 모두 더한 것이 그 사람의 페널티다.
이미 맞힌 문제에 다시 제출해도 페널티는 달라지지 않는다. 대회가 끝날 때까지 맞히지 못한 문제는 몇 번을 틀렸든 페널티에 더하지 않는다. 실제 대회라면 맞힌 시각도 페널티에 들어가지만, 이 문제에서는 시각을 무시하고 제출 횟수만 본다.
대회가 시작한 지 4시간이 지나자 스코어보드가 더 이상 갱신되지 않았다. B는 이 대회에서 꼭 우승하고 싶지만 강력한 우승 후보 A를 이길 자신이 없었다. 잠시 고민한 B는 스코어보드가 멈춰 있다는 점을 이용해 기록을 조작하고 우승 상금을 타기로 했다.
앞으로 들어올 제출 로그마다 B는 아래 네 가지 중 하나를 적용한다.
- A가 같은 제출을 한 것으로 만든다. 그 로그의 주인과 A는 이 제출에 대해 같은 결과를 받는다. 이 조작은 A의 로그에는 쓸 수 없다.
- B가 같은 제출을 한 것으로 만든다. 그 로그의 주인과 B는 이 제출에 대해 같은 결과를 받는다. 이 조작은 B의 로그에는 쓸 수 없다.
- A와 B가 모두 같은 제출을 한 것으로 만든다. 그 로그의 주인과 A, B가 모두 이 제출에 대해 같은 결과를 받는다. 이 조작은 A의 로그와 B의 로그에는 쓸 수 없다.
- 아무것도 하지 않는다. 로그는 원래대로 그 로그의 주인에게만 적용된다.
B는 대회가 끝날 때까지 들어올 제출 로그를 모두 분석해 두었다. A와 B가 아닌 다른 학생이 우승할 가능성이 없다는 것도 알아냈다.
당신은 불의를 싫어하지만 이 문제 자체는 제법 재미있다고 생각했다. 남은 제출 로그를 조작해서 B가 A를 이기고 우승할 수 있는지 판정하라.
입력
첫째 줄에 대회 문제의 수 와 남은 제출 로그의 수 이 주어진다. (, )
둘째 줄에 A가 지금까지 푼 문제 수 와 B가 지금까지 푼 문제 수 가 주어진다. ()
셋째 줄에 A가 푼 문제 번호 개가 오름차순으로 주어진다. 넷째 줄에 B가 푼 문제 번호 개가 오름차순으로 주어진다. 푼 문제가 없는 학생의 줄은 빈 줄로 주어진다. 문제 번호는 이상 이하의 정수이고, 한 줄에 같은 번호가 두 번 주어지지 않는다.
다섯째 줄에 A의 현재 페널티 와 B의 현재 페널티 가 주어진다. () 푼 문제가 없는 학생의 페널티는 항상 이다.
이어지는 개 줄에 남은 제출 로그가 제출된 순서대로 주어진다. 각 줄은 정수 세 개 로 이루어진다. 는 , , 중 하나로, 이면 A의 로그, 이면 B의 로그, 이면 다른 학생의 로그다. 는 문제 번호로 이상 이하다. 는 이면 틀렸다는 뜻이고, 이면 맞혔다는 뜻이다.
A와 B는 지금까지 맞힌 문제를 빼면 나머지 문제에 제출한 적이 한 번도 없다.
이미 맞힌 문제에 다시 제출해서 맞거나 틀려도 그 사람의 푼 문제 수와 페널티는 달라지지 않는다. 그런 제출도 몇 번이든 들어올 수 있다. 제출한 사람은 아무 영향을 받지 않지만, 조작하면 다른 사람에게 영향을 줄 수도 있다.
출력
로그를 조작해서 B가 우승할 수 있으면 첫째 줄에 YES를, 불가능하면 NO를 출력한다. A와 B의 푼 문제 수와 페널티가 모두 같으면 B가 진 것으로 본다.
YES를 출력했다면 이어지는 개 줄에 각 로그를 어떤 방식으로 조작했는지 , , , 중 하나로 순서대로 출력한다. 답이 여러 가지면 그중 사전 순으로 가장 앞선 것을 출력한다.