#include<bits/stdc++.h>

#define debug(x) cerr << #x << ": " << x << '\n'
#define debugArray(x,n) for(long long hoge = 0; (hoge) < (n); ++ (hoge)) cerr << #x << "[" << hoge << "]: " << x[hoge] << '\n'
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef vector<ll> vll;
const ll INF = INT_MAX;
const ll MOD = 1e9+7;

ll N,M;
vll G[100010];
ll dp[100010];

void dfs1(ll v,ll p){
  dp[v]=1;
  for(ll u:G[v])if(u!=p){
    dfs1(u,v);
    dp[v] = dp[v]*(dp[u]+1)%M;
  }
}

ll dp2[100010];
void dfs2(ll v,ll p,ll d_p){
  vll prol(G[v].size()+1,1),pror(G[v].size()+1,1);
  for(ull i=0;i<G[v].size();i++){
    if(G[v][i]==p){
      prol[i+1] = (d_p+1)*(prol[i])%M;
    }else{
      prol[i+1] = (dp[G[v][i]]+1)*(prol[i])%M;
    }
  }
  for(ull i=G[v].size();i>0;i--){
    if(G[v][i-1]==p){
      pror[i-1] = (d_p+1)*(pror[i])%M;
    }else{
      pror[i-1] = (dp[G[v][i-1]]+1)*(pror[i])%M;
    }
  }
  dp2[v] = dp[v]*(d_p+1)%M;
  for(ull i=0;i<G[v].size();i++)if(G[v][i]!=p){
    dfs2(G[v][i],v,prol[i]*pror[i+1]%M);
  }
}

int main(){
  cin.tie(0);
  ios::sync_with_stdio(false);
  cin>>N>>M;
  for(ll i=0;i<N-1;i++){
    ll x,y;cin>>x>>y;x--;y--;
    G[x].push_back(y);
    G[y].push_back(x);
  }
  dfs1(0,-1);
  //debugArray(dp,N);
  dfs2(0,-1,0);
  for(ll i=0;i<N;i++){
    cout<<dp2[i]<<endl;
  }
  return 0;
}
