빚 정산하기
시간 제한1초메모리 제한128 MB
각 사람의 잔액과 친구 관계 그래프가 주어질 때, 연결 요소 안에서만 돈을 옮겨 모든 빚을 정산할 수 있는지 판정한다.
문제
친한 친구들이 함께 풍경이 아름다운 나라 몰바니아로 여행을 떠났습니다. 여행 도중 여러 사건이 벌어졌고, 결국 마지막 날 밤에는 서로 "다시는 보고 싶지 않아!"라는 말을 주고받으며 여행이 끝나고 말았습니다.
집으로 돌아온 뒤, 이제는 사이가 틀어진 친구들은 여행 중에 쓴 비용을 공평하게 나누지 않았다는 사실을 깨달았습니다. 어떤 사람은 수천 크로나를 더 냈을 수도 있습니다. 그런데 정산이 생각보다 까다롭습니다. 많은 사람이 더 이상 서로 말을 섞으려 하지 않고, 돈을 주고받는 것은 더더욱 꺼리기 때문입니다.
당신은 이들을 돕기 위해 각 사람에게 자신이 얼마를 갚아야 하는지(또는 돌려받아야 하는지)와 아직 누구와 친구로 남아 있는지를 물어보았습니다. 이 정보만으로, 아직 친구로 남아 있는 사람들끼리만 돈을 주고받아서 모든 사람이 빚을 정확히 청산할 수 있는지 판단하려고 합니다. 돈은 친구 사이에서만 오갈 수 있지만, 친구를 거쳐 여러 사람에게 전달될 수는 있습니다.
입력
첫째 줄에 두 정수 ()과 ()이 주어집니다. 은 친구의 수, 은 아직 남아 있는 친구 관계의 수입니다.
이어지는 개의 줄에는 각각 정수 ()가 주어지며, 번째 줄은 번 사람이 갚아야 할 금액을 나타냅니다. 이면 그만큼 돌려받아야 함을 뜻합니다. 이 값들의 합은 항상 입니다.
그다음 개의 줄에는 각각 두 정수 , ()가 주어지며, 번 사람과 번 사람이 아직 친구 사이임을 나타냅니다.
출력
모든 사람이 빚을 청산할 수 있으면 "POSSIBLE"을, 그렇지 않으면 "IMPOSSIBLE"을 한 줄에 출력합니다.