Сортування чергами
Черга - структура даних, побудована по принципу «перший прийшов - перший пішов» (FIFO, First In - First Out). Добавлення елемента можливо тільки в кінець черги, вилучення елемент - тільки з початку черги. Таким чином, елементи можна взяти (видалити) з черги в тому ж порядку, в якому вони були в добавлені.
Задача сортування полягає в впорядкуванні заданого масиву чисел (або інших об'єктів) за зростанням або спаданням. У цій задачі існує дуже багато варіантів, для багатьох із яких існує досить ефективні алгоритми.
Далі в задачі розглядається спеціальний пристрій, що містить вхідний потік, вихідний потік і k черг, пронумерованих чисел від 1 до k.
Ваша задача полягає в тому, щоб по заданій послідовності різних чисел, яку потрібну відсортувати, написати програму для даного пристрою, яка буде виводити в вихідний потік ті ж числа, що поступили у вхідний потік, але впорядкованиі за зростанням.
Програма повинна містити рівно 2n операцій, кожна з яких або зчитує число з вхідного потоку і добавляє його в одну з черг, або бере число з однієї з черг і виводить його у вихідний потік.
Вхідні дані
Перший рядок містить ціле число n (1 ≤ n ≤ 300). Другий рядок містить n різних цілих чисел a[1]
, ..., a[n]
в тому порядку, в якому вони поступають з вхідного потоку (1 ≤ a[i]
≤ 10^9
для всіх i от 1 до n). Третій рядок містить ціле число k (1 ≤ k ≤ n).
Вихідні дані
Якщо сортування виконати неможливо, виведіть слово NO.
Інакше виведіть слово YES і 2n рядків, що задає програму сортування. Кажен з цих рядків повинен описувати одну операцію і мати наступний формат:
I(j) - зчитати елемент з вхідного потоку і добавити його в чергу номер j (1 ≤ j ≤ k);
R(j) - вилучити елемент з черги номер j (1 ≤ j ≤ k) і вивести його у вихідний потік.