#include <bits/stdc++.h>
using namespace std;
#define ld long double
#define ll long long
#define P pair<int,int>
#define fi first
#define se second
#define rep(i,n) for(int i=0;i<n;i++)
#define all(v) v.begin(),v.end()
#define pb push_back
template<class T>void chmax(T &a,T b){if(a<b)a=b;}
template<class T>void chmin(T &a,T b){if(a>b)a=b;}
int p;
int modpow(int a,int b){
    if(b==0)return 1;
    if(b%2)return modpow(a,b-1)*a%p;
    int memo=modpow(a,b/2);
    return memo*memo%p;
}
vector<int>kaijo,invkaijo;
void init_fact(int n){
    kaijo.resize(n+1);
    invkaijo.resize(n+1);
    kaijo[0]=1;
    for(int i=1;i<=n;i++){
        kaijo[i]=kaijo[i-1]*i;
        kaijo[i]%=p;
    }
    rep(i,n+1)invkaijo[i]=modpow(kaijo[i],p-2);
}
int comb(int a,int b){
    if(a<b)return 0;
    if(a<0||b<0)return 0;
    return kaijo[a]*invkaijo[a-b]%p*invkaijo[b]%p;
}
int inv(int x){
    x=modpow(x,p-2);
    return x;
}
int a[3010],ans[3010];
signed main(){
    cin.tie(0);ios::sync_with_stdio(false);
    cin>>p;
    init_fact(p);
    rep(i,p)cin>>a[i];
    rep(i,p){
        if(a[i]==1){
            ans[0]++;
            rep(j,p){;
                if(j%2==0)ans[p-1-j]-=comb(p-1,j)*modpow(i,j)%p;
                else ans[p-1-j]+=comb(p-1,j)*modpow(i,j)%p;
                ans[p-1-j]+=p;
                ans[p-1-j]%=p;
            }
        }
    }
    rep(i,p)cout<<ans[i]<<" ";
    cout<<endl;
    return 0;
}