게임

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

요약
합과 곱을 아는 두 사람이 '모르겠다'를 M번 말한 뒤 정답을 맞히는 상황에서, 주인이 고를 수 있었던 모든 두 수의 쌍을 N 범위 안에서 찾는다.
난이도

보통10점 중 7점

유형
시뮬레이션, 수학, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

18세기 수학자들이 즐겼다고 전해지는 게임이 있다.

세 명의 수학자가 참가하며, 그중 한 명이 진행자이다. 진행자는 먼저 양의 정수 NN을 발표한다. 그런 다음 11 이상 NN 이하의 서로 다른 두 정수 XX와 YY를 몰래 고르고, 두 수의 합 X+YX + Y를 플레이어 SS에게, 두 수의 곱 X⋅YX \cdot Y를 플레이어 PP에게 각각 비밀리에 알려 준다. 각 플레이어는 자신이 받은 값 하나만 알며, 그것이 합인지 곱인지도 안다.

두 플레이어는 정해진 순서 SS, PP, SS, PP, …\dots 로 번갈아 말하며, 항상 SS가 먼저 말한다. 자기 차례가 되면 플레이어는 자신이 받은 값과 지금까지 공개된 모든 발언만으로 추론하여(모든 발언은 공개된다) "나는 두 수를 안다" 또는 "나는 두 수를 모른다" 중 하나를 말한다. 어떤 플레이어가 두 수를 정확히 맞힐 수 있는 것은 가능한 쌍이 오직 하나만 남았을 때이다. 누군가 "안다"라고 말하는 순간 게임이 끝난다.

예를 들어 대화는 다음과 같이 진행될 수 있다.

  • 진행자: "NN을 1010으로 하자." (그런 다음 11부터 1010 사이의 두 수를 골라 합을 SS에게, 곱을 PP에게 알려 준다)
  • 플레이어 SS: "나는 두 수를 모른다."
  • 플레이어 PP: "나는 두 수를 모른다."
  • 플레이어 SS: "나는 두 수를 모른다."
  • 플레이어 PP: "나는 두 수를 모른다."
  • 플레이어 SS: "이제 알겠다 — 당신은 33과 66을 골랐다."

NN과 MM이 주어진다. 여기서 MM은 게임이 끝나기 전까지 "나는 두 수를 모른다"라는 말이 나온 총 횟수이다(따라서 마지막 "안다" 발언은 M+1M + 1번째 발언이다). 진행자가 골랐을 수 있는 모든 수의 쌍을 구하여라.

입력

한 줄에 두 정수 NN과 MM이 주어진다 (2≤N≤2002 \le N \le 200, 0≤M≤1000 \le M \le 100).

출력

첫째 줄에, 게임이 끝나기 전까지 두 플레이어가 "나는 두 수를 모른다"를 정확히 MM번 말하도록 하는, 진행자가 11부터 NN까지 중에서 골랐을 수 있는 쌍의 개수를 출력한다.

그다음 그러한 쌍들을 한 줄에 하나씩, a<ba < b인 두 정수 "aa bb" 형태로 출력한다. 쌍은 오름차순으로 정렬하여 출력한다. 즉 첫 번째 수를 기준으로 정렬하고, 첫 번째 수가 같으면 두 번째 수를 기준으로 정렬한다.

예제3

  1. 예제 1

    입력
    10 4
    
    예상 출력
    3
    2 5
    3 6
    3 10
    
  2. 예제 2

    입력
    10 0
    
    예상 출력
    4
    1 2
    1 3
    8 10
    9 10
    
  3. 예제 3

    입력
    10 5
    
    예상 출력
    3
    1 10
    2 9
    5 6