Problem:
Score : 600 points

Problem Statement

Given are a prime number p and a sequence of p integers a_0, \ldots, a_{p-1} consisting of zeros and ones.

Find a polynomial of degree at most p-1, f(x) = b_{p-1} x^{p-1} + b_{p-2} x^{p-2} + \ldots + b_0, satisfying the following conditions:

For each i (0 \leq i \leq p-1), b_i is an integer such that 0 \leq b_i \leq p-1.

For each i (0 \leq i \leq p-1), f(i) \equiv a_i \pmod p.

Constraints

2 \leq p \leq 2999

p is a prime number.

0 \leq a_i \leq 1

Input

Input is given from Standard Input in the following format:

p
a_0 a_1 \ldots a_{p-1}

Output

Print b_0, b_1, \ldots, b_{p-1} of a polynomial f(x) satisfying the conditions, in this order, with spaces in between.

It can be proved that a solution always exists. If multiple solutions exist, any of them will be accepted.

Sample Input 1

2
1 0

Sample Output 1

1 1

f(x) = x + 1 satisfies the conditions, as follows:

f(0) = 0 + 1 = 1 \equiv 1 \pmod 2

f(1) = 1 + 1 = 2 \equiv 0 \pmod 2

Sample Input 2

3
0 0 0

Sample Output 2

0 0 0

f(x) = 0 is also valid.

Sample Input 3

5
0 1 0 1 0

Sample Output 3

0 2 0 1 3

Solution in Ruby (2.3.3) (judge verdict: Wrong Answer)

class Integer
  @@mod = 1000000007
  @@inverse = {}
  @@factorial = {}
  def self.mod
    @@mod
  end
  def self.mod=(value)
    @@mod = value
  end
  # a + b
  def plus(other)
    (self + other) % @@mod
  end
  # a - b
  def minus(other)
    (self - other) % @@mod
  end
  # a * b
  def mult(other)
    (self * other) % @@mod
    # ((self % @@mod) * (other % @@mod)) % @@mod
  end
  # a / b
  def divi(other)
    (self * other.inverse) % @@mod
  end
  # a ** b
  def power(n)
    res = 1
    a = self
    while (n > 0) do
      res = res.mult(a) if n[0]==1
      a = a.mult(a)
      n = n >> 1
    end
    res
  end
  # nCk
  def combi(k)
    return 0 if self < k
    return 1 if k == 0 || k == self
    self.! .mult k.!.inverse .mult (self-k).!.inverse
  end
  # 逆元
  def inverse
    @@inverse[self] ||= self.power(@@mod - 2)
  end
  # 階乗
  def factorial
    # @@factorial[self] ||= (1..self).reduce(&:mult)
    @@factorial[self] ||= begin
      return 1 if self==1
      (self-1).factorial
    end
  end
  alias :! :factorial
end

# require 'benchmark'

# ABC 137-F
p = gets.to_i
Integer.mod = p
array = gets.split.map(&:to_i)
p.factorial
p_1C = {}
(0..(p-1)).each do |k|
  p_1C[k] = (p-1).combi(k)
end

# time = Benchmark.realtime do
  # 1 - (x-j)^(p-1) = 0 if x != j
  #                   1 if x == j
  ans = Array.new(p, 0)
  p.times do |j|
    next if array[j]==0
    ans[0] += 1
    j_times = 1
    (p-1).downto(0) do |k|
      ans[k] -= (p_1C[k] * j_times)
      j_times *= -j
      j_times %= p
    end
  end
  puts ans.map{|i| i % p}.join(' ')
# end
# puts time