Пусть есть многочлен p(x) = anxn + ... + a1x + a0 степени n и мы хотим построить этот многочлен в m целых точках x = 0, 1, ..., m-1. Простой алгоритм определения значений в этих точках потребует mn умножений и mn сложений.
Одним из способов ускорения вычислений является использование результатов, вычисленных ранее. Например, если p(x) = a1x + a0 и p(i) уже вычислено, то p(i + 1) = p(i) + a1. Таким образом, каждое последующее значение p(x) может быть вычислено за одну операцию сложения каждое.
В общем случае мы можем вычислить p(i + 1) из p(i) за n сложений после соответствующей инициализации. Если мы инициализируем константы C0, C1, ..., Cn соответственно, можно вычислять p(i), используя следующий псевдокод:
p(0) = C_0; t_1 = C_1; ... t_n = C_n; for i from 1 to m-1 do p(i) = p(i-1) + t_1; t_1 = t_1 + t_2; t_2 = t_2 + t_3; ... ... t_(n-1) = t_(n-1) + t_n; end
Например, если p(x) = a1x + a0, можно инициализировать C0 = a0 и C1 = a1
Ваша задача - определить константы C0, C1, ..., Cn.
Ввод состоит из одной строки. Первое число в строке - n, 1≤n≤6. Далее через пробел идут n целых чисел an, ..., a1, a0. Вы можете считать, что |ai|≤50 для всех i, и an≠0.
Выведите числа C0, C1, ..., Cn через пробел.
Sample input | Sample Output |
---|---|
1 5 2 | 2 5 |
2 2 -4 5 | 5 -2 4 |
6 1 -20 4 30 0 -1 2 | 2 14 -302 -2136 -3144 -600 720 |