#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cmath>
#include <map>
#include <queue>
#include <iomanip>
#define MOD 1000000007
typedef long long ll;
using namespace std;

int N,M;
vector<int> g[100010];

ll dp[100010];
ll ans[100010];
vector<ll> child[100010];

ll dfs(int now,int par){
  ll res=1;
  for(int nex:g[now]){
    if(nex==par) continue;
    ll z=dfs(nex,now);
    child[now].push_back(z);
    res=res*(z+1)%M;
  }
  res=(res+M)%M;
  return dp[now]=res;
}

void solve(int now,int par,ll pans){
  if(par!=-1){
    ll res=(pans+1)%M;
    for(int i=0;i<child[now].size();i++){
      res=(res*(child[now][i]+1))%M;
    }
    ans[now]=res;
  }

  int n=child[now].size();
  vector<ll> left(n+2),right(n+2);
  left[0]=1;
  right[n+1]=1;
  for(int i=1;i<=n;i++) left[i]=(left[i-1]*(child[now][i-1]+1)%M)%M;
  for(int i=n;i>=1;i--) right[i]=(right[i+1]*(child[now][i-1]+1)%M)%M;

  int p=0;
  for(int i=0;i<g[now].size();i++){
    if(g[now][i]==par){
      p=1;
      continue;
    }
    solve(g[now][i],now,((left[i-p]*right[i+2-p])%M*(pans+1)%M)%M);
  }
}

int main(){
  cin>>N>>M;
  for(int i=1;i<N;i++){
    int x,y;
    cin>>x>>y;
    x--;y--;
    g[x].push_back(y);
    g[y].push_back(x);
  }

  ans[0]=dfs(0,0);
  solve(0,-1,0);
  for(int i=0;i<N;i++) cout<<ans[i]<<endl;

  return 0;
}
