Додати або помножити#2281

Додати або помножити

3 секунди
256 мегабайтів
Дуже легка

Компанія Industrial Computer Processor Company пропонує дуже швидкі, спеціалізовані обчислювальні модулі, розроблені під потреби клієнтів. Процесори сімейства -C- (наприклад, -C- і -C-) мають набір інструкцій, що складається лише з двох різних операцій:

A додати

M помножити на

Процесор отримує ціле число, виконує послідовність операцій та (програму), які змінюють вхідне число, і видає результат. Наприклад, процесор -C-, виконуючи програму зі входом , видасть (обчислення: 2 \to 3 \to 4 \to 5 \to 10), тоді як процесор -C- дає за тією ж програмою і входом (2 \to 7 \to 12 \to 17 \to 51).

Ви — програміст -C-, залучений до надсекретного проєкту. Це означає, що вам не повідомили точні обчислення, які має виконувати ваша програма. Але вам задані конкретні значення , , і та такі умови:

  1. Вхід гарантовано є числом між та .

  2. Вихід має бути деяким числом між та .

Маючи процесор -C- і числа , , , , ваше завдання — сконструювати найкоротшу -C- програму, яка для кожного входу такого, що p \leq x \leq q, дає вихідне число , для якого r \leq y \leq s. Якщо існує кілька програм мінімальної довжини, оберіть ту, що йде найпершою в лексикографічному порядку, розглядаючи програму як рядок з літер та .

Вхідні дані

Вхід містить кілька тестових випадків. Кожен тестовий випадок задається рядком із шести цілих чисел , , , , , (1 \leq a, m, p, q, r, s \leq 10^9, p \leq q, r \leq s).

Останній тестовий випадок завершується рядком із шістьма нулями.

Вихідні дані

Для кожного тестового випадку виведіть номер випадку та найкращу програму, описану вище. Виведіть слово empty, якщо найкраща програма не містить операцій. Виведіть слово impossible, якщо не існує програми, що задовольняє умови.

Виводьте програму у вигляді послідовності рядків, розділених пробілами, чергуючи рядки вигляду nA і рядки вигляду nM, де n > 0. Рядки першого типу означають послідовних -операцій, другого — послідовних -операцій.

Приклади

Приклад 1

Loading
Loading