아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Block, Stock and Two Smoking Galaxy Notes

면접 대비

시간 제한1초메모리 제한512 MB

요약
효과적으로 협업하는 쌍의 그래프가 주어질 때, 테크리드를 한 명 고르고 나머지를 1인 팀이나 2인 팀으로 나누되 모든 2인 팀은 간선이고 각 팀에 테크리드와 인접한 사람이 최소 한 명 있어야 한다.
난이도

보통10점 중 7점

유형
그래프, 그리디, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

나는 암호화폐, 딥러닝, 자율주행 자동차, 그리고 어쩌면 모바일 음성 비서와 관련된 멋진 새 프로젝트를 시작하기로 했다(나중에 결정할 것이다). 이미 nn명의 유망한 소프트웨어 엔지니어로 구성된 팀이 있고, 마지막으로 남은 일은 그중에서 테크리드를 뽑는 것이다.

테크리드를 제외한 모든 엔지니어는 한 명 또는 두 명으로 구성된 팀으로 나뉘어야 한다(최근에 책 ``Agile Software Development: Programming in Pairs''의 처음 열 페이지를 읽고 그 기법이 매우 유용하다고 생각했다!). 엔지니어 쌍마다 서로 효과적으로 협력할 수 있는지 알고 있다.

테크리드의 선택과 팀 배분이 효과적이라는 것은 두 명으로 구성된 모든 팀이 효과적으로 협력할 수 있는 두 엔지니어로 이루어져 있고, 모든 팀에 테크리드와 효과적으로 협력할 수 있는 엔지니어가 적어도 한 명 있다는 뜻이다.

가능한 한 빨리 적절한 회사 구조를 찾아서 우리 스타트업이 IPO나 ICO를 할 수 있게 해 주거나(무슨 뜻인지는 아직 잘 모르겠다, 지금 그것까지 볼 시간은 없다), 그것이 불가능하고 성공과 영광의 세계가 나와는 상관없다고 판단해 달라(적어도 오늘만큼은).

입력

입력의 첫 줄에는 두 정수 nn과 mm이 주어진다(2≤n≤10002 \le n \le 1000, 0≤m≤10 0000 \le m \le 10\,000). 각각 소프트웨어 엔지니어의 수와 성공적으로 협력하는 쌍의 수이다.

다음 mm개 줄에는 각각 두 정수 u_iu\_i, v_iv\_i가 주어진다(1≤u_i,v_i≤n1 \le u\_i, v\_i \le n, u_i≠v_iu\_i \ne v\_i). 효과적으로 협력하는 쌍을 이루는 엔지니어의 번호이다.

모든 순서 없는 엔지니어 쌍은 서로 다르다.

출력

내 요구 사항을 만족하는 회사 구조를 만들 수 없다면 한 단어 No를 출력한다.

그렇지 않다면 첫 줄에 Yes를 출력한다.

둘째 줄에는 두 정수 ll, kk(1≤l≤n1 \le l \le n, ⌈n−12⌉≤k≤n−1\left\lceil \frac{n-1}{2} \right\rceil \leq k \leq n - 1)를 출력한다. 각각 테크리드의 번호와 팀의 수이다.

다음 kk개 줄에는 각각 팀을 정의하는 두 정수 t_1t\_1과 t_2t\_2를 출력한다. 팀이 두 명으로 구성되면 t_1t\_1과 t_2t\_2는 그 팀을 이루는 엔지니어의 번호이고, 그렇지 않으면 t_1t\_1은 팀의 유일한 엔지니어의 번호이고 t_2t\_2는 −1-1이다.

정답이 여러 개라면 아무거나 출력한다.

예제3

  1. 예제 1

    입력
    5 4
    1 2
    2 3
    3 4
    4 5
    
    예상 출력
    Yes
    3 2
    2 1
    4 5
    
  2. 예제 2

    입력
    4 4
    1 2
    2 3
    3 4
    4 1
    
    예상 출력
    Yes
    1 2
    2 3
    4 -1
    
  3. 예제 3

    입력
    4 3
    1 2
    2 3
    3 1
    
    예상 출력
    No