Фірма 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