#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vec;
typedef vector<vec> mat;
typedef pair<ll,ll> pll;
const ll mod=1e9+7;
//const ll mod=998244353;
const ll inf=5e18;

const ll N=1e5+10;
ll n,m;
mat G(N);
vec dp(N);

void dfs1(ll cur, ll pre) {
  dp[cur]=1;
  for(ll nex:G[cur]) {
    if(nex==pre) continue;
    dfs1(nex,cur);
    (dp[cur]*=1+dp[nex])%=m;
  }
}

void dfs2(ll cur, ll pre, ll dp_p=0) {
  ll n=G[cur].size();
  vec mul1(n),mul2(n);
  for(ll i=0;i<n;i++) {
    ll nex=G[cur][i];
    if(nex==pre) {
      mul1[i]=mul2[i]=(dp_p+1)%m;
      (dp[cur]*=dp_p+1)%=m;
    } else mul1[i]=mul2[i]=(dp[nex]+1)%m;
  }
  for(ll i=0;i+1<n;i++) {
    (mul1[i+1]*=mul1[i])%=m;
  }
  for(ll i=n-1;i>0;i--) {
    (mul2[i-1]*=mul2[i])%=m;
  }
  for(ll i=0;i<n;i++) {
    ll nex=G[cur][i];
    if(nex==pre) continue;
    ll a=(i?mul1[i-1]:1);
    ll b=(i+1<n?mul2[i+1]:1);
    dfs2(nex,cur,a*b%m);
  }
}

int main() {
  cin >> n >> m;
  for(ll i=0;i<n-1;i++) {
    ll x,y;
    cin >> x >> y;
    G[x].push_back(y);
    G[y].push_back(x);
  }
  dfs1(1,0);
  dfs2(1,0);
  for(ll i=1;i<=n;i++) {
    cout << dp[i] << endl;
  }
}