eolymp
bolt
Try our new interface for solving problems
Problems

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

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

Time limit 1 second
Memory limit 64 MiB

Фирма 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, и в качестве вступительного задания ему поручили написать процедуру построения контрольного блока для заданного блока данных. Помогите ему!

Input data

Первая строка входного файла содержит числа N и M (1N1000, 2M10^9). Следующая строка содержит блок данных, для которого следует построить контрольный блок, числа разделены пробелами.

Output data

В первой строке выходного файла выведите YES, если для данного блока данных можно построить контрольный блок и NO, если нельзя. В случае, если контрольный блок построить можно, на второй строке выведите контрольный блок. Числа разделяйте пробелами. Если решений несколько, можно выдать любое из них.

Examples

Input example #1
4 2
0 0 0 0
Output example #1
YES
0 0 0 0