시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 512 MB 263 61 58 26.728%

문제

성우는 편안한 수열을 좋아한다.

길이가 N인 수열 A1, A2, ..., AN에 1부터 N까지의 정수가 한 번씩 오름차순으로 있다면, 그 수열은 편안한 수열이라고 한다.

예를 들어, N = 5일 때 A = [1 ,2, 3, 4, 5], N = 8일 때 A = [1, 2, 3, 4, 5, 6, 7, 8] 과 같은 수열이다.

장난기 많은 재현이는 성우 몰래 편안한 수열의 오른쪽 K개의 원소를 떼어내어 가장 왼쪽으로 보내버렸다!

하단의 그림은 N = 7, K = 3일 때의 변경된 수열의 예시이다.

불편해진 성우는 편안해지기 위해 이 수열을 편안한 수열로 바꾸려고 한다.

이때 성우가 사용 가능한 연산은 다음과 같다.

  • swap L R : AL, AR의 값을 서로 바꾼다. (1 ≤ L < R ≤ N)
  • reverse L R : 부분 수열 [AL, AL+1, ..., AR] 을 뒤집는다. (1 ≤ L < R ≤ N)

많은 수의 연산을 이용하여 편안한 수열을 만들 수 있겠지만 성우는 정확히 5번 만에 편안한 수열을 만들려고 한다.

이것이 가능한지, 가능하다면 연산을 차례대로 출력해주는 프로그램을 작성하자.

입력

첫째 줄에 수열의 길이 N과 K가 주어진다. (1 ≤ K < N ≤ 10,000,000)

출력

정확히 5번의 연산으로 편안한 수열을 만드는 것이 가능하면 첫째 줄에 YES를 출력한다.

다음 5개의 줄에는 문제에서 정의한 형식에 맞게 순서대로 연산을 출력한다.

방법이 여러 가지가 있다면 아무거나 출력해도 좋다.

불가능하다면 첫째 줄에 NO를 출력한다.

예제 입력 1

8 4

예제 출력 1

YES
swap 1 4
swap 2 3
swap 5 8
swap 6 7
reverse 1 8

[5, 6, 7, 8, 1, 2, 3, 4] : N = 8, K = 4 일 때 변경 된 수열

[5, 6, 7, 8, 1, 2, 3, 4] → swap 1 4 → [8, 6, 7, 5, 1, 2, 3, 4]

[8, 6, 7, 5, 1, 2, 3, 4] → swap 2 3 → [8, 7, 6, 5, 1, 2, 3, 4]

[8, 7, 6, 5, 1, 2, 3, 4] → swap 5 8 → [8, 7, 6, 5, 4, 2, 3, 1]

[8, 7, 6, 5, 4, 2, 3, 1] → swap 6 7 → [8, 7, 6, 5, 4, 3, 2, 1]

[8, 7, 6, 5, 4, 3, 21] → reverse 1 8 → [1, 2, 3, 4, 5, 6, 78]