상사

아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

회사 “Ūbr”에는 프로그래머 NN명이 근무한다. 각 프로그래머에게는 11부터 NN까지의 정수 코드가 하나씩 부여되며, 모든 코드는 서로 다르다.

회사는 MM개의 프로젝트를 진행한다. 각 프로젝트는 두 프로그래머가 공동으로 담당하며, 그중 코드가 더 작은 사람이 다른 사람의 상사가 된다. 어떤 두 프로그래머도 함께 담당하는 프로젝트가 둘 이상 있을 수는 없다.

그림 1. 이 예시에서는 N=6N = 6이고 다섯 개의 프로젝트가 진행 중이다. 2번, 3번, 6번 프로그래머는 각각 상사가 한 명이고, 4번 프로그래머는 상사가 두 명이다.

“Ūbr”는 상사가 둘 이상인 프로그래머일수록 업무 만족도가 낮다는 것을 알게 되었다. 그래서 모든 직원이 상사를 최대 한 명만 두도록 조직을 개편하려고 한다. 개편은 기존 프로젝트 일부를 중단하고 새 프로젝트를 시작하는 방식으로 이루어진다. 위 예시는 프로젝트 3–4를 없애고 새 프로젝트 3–5를 만드는 방식으로 개편할 수 있지만, 이것이 유일한 방법은 아니다.

어떤 프로그래머도 상사를 둘 이상 두지 않도록 개편하는 방법을 찾아라. 그러한 개편 중에서 회사는 개편 후 진행하는 프로젝트 수를 최대한 많게 하고 싶어 하며, 그다음으로는 중단하는 기존 프로젝트 수를 최대한 적게 하고 싶어 한다.

입력

첫 번째 줄에 프로그래머 수 NN과 개편 전 진행 중이던 프로젝트 수 MM이 주어진다. 이어지는 MM개의 줄에는 각 프로젝트가 하나씩 주어지며, 각 줄에는 그 프로젝트를 담당하는 두 프로그래머의 코드를 나타내는 서로 다른 두 정수(11 이상 NN 이하)가 주어진다.

출력

한 줄에 세 정수 KK, PP, SS를 공백으로 구분하여 출력한다.

  • KK — 개편 후 회사가 진행하게 될 프로젝트 수
  • PP — 중단되는 프로젝트 수
  • SS — 새로 시작되는 프로젝트 수

세 값은 K=MP+SK = M - P + S를 만족해야 한다. 먼저 KK를 최대로 하고, 그러한 방법들 중에서 PP를 최소로 하는 개편을 선택한다. 이 두 조건을 만족하면 KK, PP, SS의 값은 유일하게 결정되므로, 그 세 수를 정확히 출력한다.

제한

  • 1N1061 \le N \le 10^6
  • 0M1060 \le M \le 10^6