Вам дано два натуральних числа і , де є простим числом.
У вас є загадковий обчислювач, що містить комірки пам'яті. Кожна комірка може зберігати число від до p−1. Обчислювач підтримує дві інструкції: додавання і піднесення до степеня . Обидві операції виконуються за модулем .
Комірки пам'яті пронумеровані від до . Спочатку комірки і містять числа і відповідно (0 \le x,y \le p−1). Усі інші комірки заповнені одиницями.
Ви не маєте прямого доступу до значень і , і їх точні значення невідомі. Ваше завдання — написати програму, яка, використовуючи доступні інструкції, обчислює добуток за модулем в одній з комірок. Програма повинна працювати для всіх можливих і .
Інструкція додавання обчислює суму значень у двох комірках і записує результат у третю. Ця інструкція записується як "+ e1 e2 to", що означає, що сума значень у комірках e1 і e2 буде записана в комірку to. Будь-які з номерів e1, e2, to можуть збігатися.
Друга інструкція обчислює -ту степінь числа в комірці і записує результат в іншу комірку. Ця інструкція записується як "^ e to". Значення e і to можуть збігатися, у цьому випадку значення в комірці буде перезаписано.
Остання інструкція — це спеціальна інструкція повернення, яка записується як "f target". Це означає, що результат mod отримано в комірці target. Ця інструкція повинна бути останньою.
Знайдіть послідовність інструкцій, яка обчислює mod і використовує не більше інструкцій (включаючи інструкцію повернення).
Гарантовано, що за даних обмежень рішення існує.
Єдиний рядок містить числа і , розділені пробілом (2 \le d \le 10,~ d \lt p,~ 3 \le p \le 10^9 + 9,~ p просте .
Виведіть послідовність інструкцій, по одній інструкції в рядку. Програма повинна містити не більше рядків. Остання інструкція повинна бути інструкцією повернення.
У цій задачі відсутні тести з умови. Приклад виводу наведено нижче. Зверніть увагу, що цей вивід не є рішенням ні для якого тесту, і потрібен лише для того, щоб продемонструвати формат виводу.
+ 1 1 3
^ 3 3
+ 3 2 2
+ 3 2 3
^ 3 1
f 1Нижче наведено покроковий опис роботи програми:
комірка 1 | комірка 2 | комірка 3 | |
початково | |||
| |||
| (2x)^d | ||
| y+(2x)^d | (2x)^d | |
| y+(2x)^d | y+2 \cdot (2x)^d | |
| (y+2 \cdot (2x)^d)^d | y+(2x)^d | y+2 \cdot (2x)^d |
Нехай d=2 і p=3. Оскільки при x=0 і y=1 повернений результат дорівнює 1 \ne 0 \cdot 1 mod , програма була оцінена як невірна.