Контрольний блок#6100

Контрольний блок

1 секунда
64 мегабайти
Дуже легка

Фірма Macrohard розробила новий протокол обміну даними по мережі. Кожен блок даних при цьому обміні складається з чисел з діапазону від до M-1 включно. Щоб підвищити надійність передачі, разом з блоком даних пересилається контрольний блок такої ж довжини.

Припустимо, що заданий блок складається з чисел a_1, a_2, \ldots, a_N. Тоді, контрольний блок складається з чисел b_1, b_2, \ldots, b_N, з діапазону від до M-1 включно, таких що виконуються наступні рівності: b_1=(a_N+b_N) \mod M, b_2=(a_1+b_1) \mod M, b_3=(a_2+b_2) \mod M, ..., b_N=(a_{N-1}+b_{N-1}) \mod M, (позначення X \mod M означає залишок від ділення на , наприклад, 7 \mod 4 = 3, 6 \mod 2 = 0).

Блоки даних, для яких не можна побудувати контрольний блок, який задовольняє вказаній властивості, вважаються підозрілими і їх передача по мережі не дозволяється.

Ваня хоче влаштуватися на роботу програмістом у фірму Macrohard, і у якості вступного завдання йому доручили написати процедуру побудови контрольного блоку для заданого блоку даних. Допоможіть йому!

Вхідні дані

Перший рядок вхідного файлу містить числа та (1 \le N \le 1000, 2 \le M \le 10^9). Наступний рядок містить блок даних, для якого потрібно побудувати контрольний блок, числа відокремлено пропусками.

Вихідні дані

У першому рядку вихідного файлу виведіть YES, якщо для заданого блоку даних можна побудувати контрольний блок і NO, якщо не можна. У випадку, якщо контрольний блок побудувати можна, у другому рядку виведіть контрольний блок. Числа відокремлюйте пропусками. Якщо розв'язків декілька, можна вивести довільний з них.

Приклади

Приклад 1

Loading
Loading