#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
int main()
{
unsigned n; scanf("%u", &n); //количество команд
int* to_sort = new int[n]; //исходный массив
for(int i = 0; i < n; i++)
scanf("%d", to_sort + i);
unsigned k; scanf("%u", &k); //количество очередей
queue<int>* sorting_machine = new queue<int>[k]; //массив очередей
int *order = new int[n]; //порядок размещения чисел по очередям
for(int i = 0; i < n; i++){
//подходящая очередь либо пуста, либо имеет последний элемент, меньший данного
//найти её номер в массиве
int available = find_if(sorting_machine, sorting_machine + k,
[&](const queue<int> &q){return q.empty() || q.back() <= to_sort[i];}) - sorting_machine;
//если таких очередей нет, то сортировка невозможна
if(available >= k){
puts("NO");
return 0;
}
//добавить элемент массива в одну из очередей
sorting_machine[available].push(to_sort[i]);
order[i] = available + 1;
}
puts("YES");
for(int i = 0; i < n; i++){
//вывод порядка размещения исходного массива чисел по очередям
printf("I(%d)\n", order[i]);
}
for(int i = 0; i < n; i++){
//так как и очередей, и элементов мало, найти минимальный доступный элемент
queue<int>* minimum = min_element(sorting_machine, sorting_machine + k,
[&](const queue<int> x, const queue<int> y){
return !x.empty() && !y.empty() && x.front() < y.front();
});
minimum->pop(); //удалить его
//и вывести номер соответствующей очереди
printf("R(%d)\n", minimum-sorting_machine+1);
}
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKQp7CiAgICB1bnNpZ25lZCBuOyBzY2FuZigiJXUiLCAmbik7ICAgIC8v0LrQvtC70LjRh9C10YHRgtCy0L4g0LrQvtC80LDQvdC0CiAgICBpbnQqIHRvX3NvcnQgPSBuZXcgaW50W25dOyAgICAgIC8v0LjRgdGF0L7QtNC90YvQuSDQvNCw0YHRgdC40LIKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgc2NhbmYoIiVkIiwgdG9fc29ydCArIGkpOwoKICAgIHVuc2lnbmVkIGs7IHNjYW5mKCIldSIsICZrKTsgICAgLy/QutC+0LvQuNGH0LXRgdGC0LLQviDQvtGH0LXRgNC10LTQtdC5CiAgICBxdWV1ZTxpbnQ+KiBzb3J0aW5nX21hY2hpbmUgPSBuZXcgcXVldWU8aW50PltrXTsgICAgLy/QvNCw0YHRgdC40LIg0L7Rh9C10YDQtdC00LXQuQoKICAgIGludCAqb3JkZXIgPSBuZXcgaW50W25dOyAgICAvL9C/0L7RgNGP0LTQvtC6INGA0LDQt9C80LXRidC10L3QuNGPINGH0LjRgdC10Lsg0L/QviDQvtGH0LXRgNC10LTRj9C8CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKICAgICAgICAvL9C/0L7QtNGF0L7QtNGP0YnQsNGPINC+0YfQtdGA0LXQtNGMINC70LjQsdC+INC/0YPRgdGC0LAsINC70LjQsdC+INC40LzQtdC10YIg0L/QvtGB0LvQtdC00L3QuNC5INGN0LvQtdC80LXQvdGCLCDQvNC10L3RjNGI0LjQuSDQtNCw0L3QvdC+0LPQvgogICAgICAgIC8v0L3QsNC50YLQuCDQtdGRINC90L7QvNC10YAg0LIg0LzQsNGB0YHQuNCy0LUKICAgICAgICBpbnQgYXZhaWxhYmxlID0gZmluZF9pZihzb3J0aW5nX21hY2hpbmUsIHNvcnRpbmdfbWFjaGluZSArIGssCiAgICAgICAgICAgIFsmXShjb25zdCBxdWV1ZTxpbnQ+ICZxKXtyZXR1cm4gcS5lbXB0eSgpIHx8IHEuYmFjaygpIDw9IHRvX3NvcnRbaV07fSkgLSBzb3J0aW5nX21hY2hpbmU7CiAgICAgICAgLy/QtdGB0LvQuCDRgtCw0LrQuNGFINC+0YfQtdGA0LXQtNC10Lkg0L3QtdGCLCDRgtC+INGB0L7RgNGC0LjRgNC+0LLQutCwINC90LXQstC+0LfQvNC+0LbQvdCwCiAgICAgICAgaWYoYXZhaWxhYmxlID49IGspewogICAgICAgICAgICBwdXRzKCJOTyIpOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgLy/QtNC+0LHQsNCy0LjRgtGMINGN0LvQtdC80LXQvdGCINC80LDRgdGB0LjQstCwINCyINC+0LTQvdGDINC40Lcg0L7Rh9C10YDQtdC00LXQuQogICAgICAgIHNvcnRpbmdfbWFjaGluZVthdmFpbGFibGVdLnB1c2godG9fc29ydFtpXSk7CiAgICAgICAgb3JkZXJbaV0gPSBhdmFpbGFibGUgKyAxOwogICAgfQoKICAgIHB1dHMoIllFUyIpOwogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgICAgLy/QstGL0LLQvtC0INC/0L7RgNGP0LTQutCwINGA0LDQt9C80LXRidC10L3QuNGPINC40YHRhdC+0LTQvdC+0LPQviDQvNCw0YHRgdC40LLQsCDRh9C40YHQtdC7INC/0L4g0L7Rh9C10YDQtdC00Y/QvAogICAgICAgIHByaW50ZigiSSglZClcbiIsIG9yZGVyW2ldKTsKICAgIH0KICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgIC8v0YLQsNC6INC60LDQuiDQuCDQvtGH0LXRgNC10LTQtdC5LCDQuCDRjdC70LXQvNC10L3RgtC+0LIg0LzQsNC70L4sINC90LDQudGC0Lgg0LzQuNC90LjQvNCw0LvRjNC90YvQuSDQtNC+0YHRgtGD0L/QvdGL0Lkg0Y3Qu9C10LzQtdC90YIKICAgICAgICBxdWV1ZTxpbnQ+KiBtaW5pbXVtID0gbWluX2VsZW1lbnQoc29ydGluZ19tYWNoaW5lLCBzb3J0aW5nX21hY2hpbmUgKyBrLAogICAgICAgIFsmXShjb25zdCBxdWV1ZTxpbnQ+IHgsIGNvbnN0IHF1ZXVlPGludD4geSl7CiAgICAgICAgICAgIHJldHVybiAheC5lbXB0eSgpICYmICF5LmVtcHR5KCkgJiYgeC5mcm9udCgpIDwgeS5mcm9udCgpOwogICAgICAgIH0pOwogICAgICAgIG1pbmltdW0tPnBvcCgpOyAvL9GD0LTQsNC70LjRgtGMINC10LPQvgogICAgICAgIC8v0Lgg0LLRi9Cy0LXRgdGC0Lgg0L3QvtC80LXRgCDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC10Lkg0L7Rh9C10YDQtdC00LgKICAgICAgICBwcmludGYoIlIoJWQpXG4iLCBtaW5pbXVtLXNvcnRpbmdfbWFjaGluZSsxKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==