넥슨의 한 게임에는 신규 유저의 게임 적응을 돕기 위한 멘토링 시스템이 있다.
이 멘토링 시스템에는 게임을 오래 플레이한 멘토가 명 등록되어있고, 새로 게임에 가입한 멘티 명이 등록되어 있어, 이들을 1:1 매칭시킨다. 편의상, 각 멘토는 부터 까지 번호가 매겨져 있고, 각 멘티 또한 부터 까지 번호가 매겨져 있다.
어떤 멘토와 어떤 멘티를 아무 이유 없이 매칭시켜주면 멘토링 시스템의 질이 떨어질 수 있기 때문에, 유저들의 접속 시간대, 플레이 스타일, 직업군 등 다양한 요소를 고려하여 멘토링이 가능한 멘토와 멘티 쌍이 결정되었다.
예를 들어, 인 상황을 보자.
- 멘토 이 멘티 과 멘토링이 가능하고,
- 멘토 가 멘티 과 멘토링이 가능하고,
- 멘토 가 멘티 와 멘토링이 가능하고,
- 멘토 이 멘티 과 멘토링이 가능하고,
- 멘토 이 멘티 와 멘토링이 가능하다고 하자.
멘토 을 멘티 과, 멘토 를 멘티 과, 멘토 을 멘티 와 매칭해줄 수 있다.
다른 방법 또한 가능한데, 멘토 을 멘티 과, 멘토 를 멘티 와, 멘토 을 멘티 과 매칭해줄 수도 있다. 즉, 1:1 매칭은 가능하지만 그 방법이 유일하지 않다.
인 다른 상황을 보자.
- 멘토 이 멘티 와 멘토링이 가능하고,
- 멘토 가 멘티 과 멘토링이 가능하고,
- 멘토 가 멘티 와 멘토링이 가능하고,
- 멘토 가 멘티 과 멘토링이 가능하고,
- 멘토 이 멘티 와 멘토링이 가능하다고 하자.
이 경우, 멘토 은 멘티 와만 멘토링이 가능하고, 멘토 또한 멘티 와만 멘토링이 가능하다. 즉, 1:1 매칭이 불가능하다.
마지막으로, 인 다른 상황을 보자.
- 멘토 이 멘티 와 멘토링이 가능하고,
- 멘토 가 멘티 와 멘토링이 가능하고,
- 멘토 가 멘티 과 멘토링이 가능하고,
- 멘토 이 멘티 과 멘토링이 가능하고,
- 멘토 이 멘티 과 멘토링이 가능하다고 하자.
멘토 은 멘티 와, 멘토 는 멘티 과, 멘토 은 멘티 과 매칭해줄 수 있다. 다른 방법으로는 매칭이 불가능하다. 즉, 1:1 매칭이 가능하며 그 방법이 유일하다.
멘토와 멘티의 수 과 멘토링이 가능한 멘토와 멘티 쌍이 주어졌을 때, 이들을 1:1 매칭시키는 것이 가능하며, 그 방법이 유일한지 구하는 프로그램을 작성하시오.
입력 형식
첫 줄에 멘토와 멘티의 수를 나타내는 정수 과 멘토링이 가능한 멘토와 멘티 쌍의 수를 나타내는 정수 이 공백으로 구분되어 주어진다. ()
이어지는 개의 줄에 멘토의 번호를 나타내는 정수 와 멘티의 번호를 나타내는 정수 가 공백으로 구분되어 주어진다. ()
이는 멘토 와 멘티 가 멘토링이 가능하다는 것을 의미한다. 같은 쌍이 여러 번 주어지지 않는다.
출력 형식
첫 줄에
명의 멘토와 명의 멘티를 1:1 매칭시키는 것이 가능하며, 그 방법이 유일하다면
YES를 출력하고, 그렇지 않다면 NO를 출력한다.
만약 답이 YES라면, 이어지는 줄의 번째 줄에 멘토 와 매칭될 멘티의 번호 를 출력한다.
예제 1
입력
3 5 1 2 2 2 2 3 3 1 3 3
출력
YES 2 3 1
예제 2
입력
3 5 1 3 2 1 2 2 3 1 3 2
출력
NO
예제 3
입력
3 5 1 2 2 1 2 2 2 3 3 2
출력
NO
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 19점
종류 2: 24점
종류 3: 28점
종류 4: 29점
추가적인 제한 조건이 없음.
해설
어떤 멘토가 가르칠 수 있는 멘티가 하나뿐이라면, 해당 멘티는 해당 멘토랑 이어져야 합니다. 마찬가지로, 어떤 멘티를 가르칠 수 있는 멘토가 하나뿐이라면, 해당 멘토는 해당 멘티랑 이어져야 합니다. 이 과정을 여러 번 반복해서, 남은 멘토와 멘티가 없다면 이렇게 구한 방법이 유일한 해답이고, 이를 출력하면 됩니다. 만약에 남은 멘토와 멘티가 있다면 두 가지 경우의 수가 있습니다.
-
어떤 멘토가 가르칠 수 있는 멘티가 하나도 남지 않았거나, 어떤 멘티를 가르칠 수 있는 멘토가 하나도 남지 않은 경우.
이 경우에는 해답이 없으므로,NO를 출력하면 됩니다. -
모든 멘토가 가르칠 수 있는 멘티가 명 이상이고, 모든 멘티를 가르칠 수 있는 멘토가 명 이상인 경우.
이 경우에는 또 다시 두 가지 경우가 존재합니다.- 답이 하나라도 존재하는 경우. 답 중 하나에서 번 멘토와 이어진 멘티를 , 번 멘티와 이어진 멘토를 라고 해 봅시다. 모든 멘토가 가르칠 수 있는 멘티가 명 이상이므로, 번 멘토와 이어진 다른 멘티 가 존재합니다.
번 멘토가 번 멘티 대신 번 멘티와 이어지고, 번 멘토는 번 멘티 대신 다른 멘티 와 이어지고, 번 멘토는 번 멘티 대신 또 다른 멘티 와 이어지고,... 이를 반복하다 보면 어느 순간 번 멘토로 돌아오게 됩니다. 이는 처음의 답과는 다른 답이고, 따라서 답이 존재한다면 유일하지 않으므로NO가 답이 됩니다. - 답이 존재하지 않는 경우. 이 경우에는 해답이 없으므로,
NO가 답이 됩니다.
따라서 어느 경우에도 답이 존재하거나 유일한 지 확인하지 않고NO를 출력하는 것이 정답입니다.
- 답이 하나라도 존재하는 경우. 답 중 하나에서 번 멘토와 이어진 멘티를 , 번 멘티와 이어진 멘토를 라고 해 봅시다. 모든 멘토가 가르칠 수 있는 멘티가 명 이상이므로, 번 멘토와 이어진 다른 멘티 가 존재합니다.
자료구조를 이용해 차수가 1인 정점들을 보면서 하나씩 이어주면, 에 문제를 해결할 수 있습니다.