Контрольний блок
Фірма Macrohard розробила новий протокол обміну даними по мережі. Кожен блок даних при цьому обміні складається з N чисел з діапазону від 0 до M-1 включно. Щоб підвищити надійність передачі, разом з блоком даних пересилається контрольний блок такої ж довжини.
Припустимо, що заданий блок складається з чисел a_1, a_2, ..., a_N. Тодя, контрольний блок складається з чисел b_1, b_2, ..., b_N, з діапазону від 0 до 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 означає залишок від ділення X на M, наприклад, 7 mod 4 = 3, 6 mod 2 = 0).
Блоки даних, для яких не можна побудувати контрольний блок, який задовольняє вказаній властивості, вважаються підозрілими і їх передача по мережі не дозволяється.
Ваня хоче поступити на работу програмістом у фірму Macrohard, і у якості вступного завдання йому доручили написати процедуру побудови контрольного блоку для заданого блоку даних. Допоможіть йому!
Вхідні дані
Перший рядок вхідного файлу містить числа N та M (1 ≤ N ≤ 1000, 2 ≤ M ≤ 10^9). Наступний рядок містить блок даних, для якого потрібно побудувати контрольний блок, числа відокремлено пропусками.
Вихідні дані
У першому рядку вихідного файлу виведіть YES, якщо для заданого блоку даних можна побудувати контрольний блок і NO, якщо не можна. У випадку, якщо контрольний блок побудувати можна, у другому рядку виведіть контрольний блок. Числа відокремлюйте пропусками. Якщо розв'язків декілька, можна вивести довільний з них.