Moving Formation

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

요약
네 드론을 정사각형의 네 꼭짓점에서 평행이동한 위치로 옮기되, 이동 중 인접한 드론 쌍 A-B, B-C, C-D, D-A 사이의 거리가 항상 N 이하가 되도록 최대 1000번의 작업을 출력한다.
난이도

보통10점 중 7점

유형
기하, 구현, 그리디, 시뮬레이션
정답자
아직 제출이 없습니다

문제

무한한 2차원 좌표 평면 위에 네 대의 드론 AA, BB, CC, DD가 배치되어 있다. 최초에는 각각 순서대로 (0,0)(0,0), (0,N)(0,N), (N,N)(N,N), (N,0)(N,0)에 배치되어 있다. 이때, 네 개의 드론 쌍 (A,B)(A,B), (B,C)(B,C), (C,D)(C,D), (D,A)(D,A)는 서로 통신하며 정보를 주고받고 있다. 예를 들어 드론 AA는 드론 BB, DD와 통신을 주고받고 있지만, 드론 CC와는 통신을 주고받고 있지 않다.

각 드론의 통신 가능 거리는 최대 NN까지로 제한되어 있다. 어느 순간이라도 통신을 주고받고 있는 두 드론 사이의 거리가 NN을 초과하면 드론이 오작동을 일으키며 추락한다. 이때 두 드론이 (x_1,y_1)(x\_1,y\_1), (x_2,y_2)(x\_2,y\_2)에 위치할 때, 드론 사이의 거리는 (x_1−x_2)2+(y_1−y_2)2\sqrt{(x\_1-x\_2)^2+(y\_1-y\_2)^2}로 계산한다.

드론 조종사인 상우는 네 대의 드론이 오작동을 일으키지 않게 하면서, 각각 순서대로 도착 지점인 (x,y)(x,y), (x,y+N)(x,y+N), (x+N,y+N)(x+N,y+N), (x+N,y)(x+N,y)로 이동시키고자 한다. 상우는 이를 위해 다음과 같이 드론을 조종하는 작업을 00회 이상, 1,0001\\, 000회 이하 수행할 수 있다.

  • 드론 AA, BB, CC, DD 중 하나를 선택한다. 선택한 드론을 RR, 그리고 RR의 현재 좌표를 P=(x_1,y_1)P=(x\_1,y\_1)이라고 하자.
  • 드론 RR을 이동시킬 목표 좌표 Q=(x_2,y_2)Q=(x\_2,y\_2)를 선택한다. 단, (x_2,y_2)(x\_2,y\_2)에 다른 드론이 없어야 한다. RR은 PP와 QQ를 잇는 선분을 따라 이동한다.

상우는 드론을 기가 막히게 조종할 수 있지만 머리는 좋지 않아 여러분에게 도움을 요청했다. 즉, 드론이 오작동을 일으키지 않게 하면서 네 대의 드론을 도착 지점까지 이동시키기 위한 작업을 출력하는 프로그램을 작성해 보자. 단, 작업 횟수를 최소화할 필요는 없다.

입력

첫째 줄에 세 정수 NN, xx, yy가 공백으로 구분되어 주어진다. (2≤N≤10;0≤x,y≤100)(2\le N\le 10;0\le x,y\le 100)

출력

첫째 줄에 네 대의 드론을 도착 지점으로 옮기는 데 필요한 작업 횟수 KK를 출력한다. 단, KK가 최소일 필요는 없다. (0≤K≤1,000)(0\le K\le 1\\,000)

KK가 11 이상이라면, 둘째 줄부터 KK개의 줄에 수행할 작업을 순서대로 한 줄에 하나씩 출력한다. 각 줄은 R X Y의 형식으로 출력하며, 각 값이 가지는 의미는 다음과 같다.

  • RR: 네 대의 드론 중 이동시킬 드론을 의미하는 영어 대문자. RR은 영어 대문자 A, B, C, D 중 하나여야 한다.
  • XX: 드론 RR이 이동할 목표 지점의 xx좌표. (0≤X≤200)(0\le X\le 200)
  • YY: 드론 RR이 이동할 목표 지점의 yy좌표. (0≤Y≤200)(0\le Y\le 200)
  • XX와 YY는 정수여야 한다.

가능한 모든 입력에 대해서 위 출력 조건을 만족하는 출력이 항상 존재함을 증명할 수 있다.

정답이 여러 개라면 그중 하나만 출력한다.

예제1

  1. 예제 1

    입력
    2 1 1
    
    예상 출력
    4
    A 1 1
    B 1 3
    D 3 1
    C 3 3