Контрольный блок
Фирма 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, если нельзя. В случае, если контрольный блок построить можно, на второй строке выведите контрольный блок. Числа разделяйте пробелами. Если решений несколько, можно выдать любое из них.