#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i = 0; i < (int)n; i++)
using ll = long long;
const int MAX = 1e5;

ll mod;
vector<int> g[MAX];
vector<ll> dp(MAX,-1);
vector<ll> ans(MAX,-1);

ll dfs1(int i,int p = -1) {
  if(dp[i] != -1) return dp[i];
  ll res = 1;
  for(auto k : g[i]) {
    if(k != p) (res *= dfs1(k,i) + 1) %= mod;
  }
  return dp[i] = res;
}

void dfs2(int i, int p = -1) {
  int l = g[i].size();
  vector<ll> left(l+1,1);
  vector<ll> right(l+2,1); 
  for(int j = 1; j <= l; j++) {
    left[j] = (left[j-1]*(dp[g[i][j-1]]+1)) % mod;
    right[l+1-j] = (right[l+2-j]*(1+dp[g[i][l-j]])) % mod;
  }
  ans[i] = left[l];
  for(int j = 1; j <= g[i].size(); j++){
    ll v = dp[i];
    dp[i] = (left[j-1]*right[j+1]) % mod;
    if(g[i][j-1] != p) dfs2(g[i][j-1],i);
    dp[i] = v;
  }
}

int main(){
  int n;
  cin >> n >> mod;
  rep(i,n-1) {
    int x, y;
    cin >> x >> y;
    x--; y--;
    g[x].push_back(y);
    g[y].push_back(x);
  }
  ll a = dfs1(0); dfs2(0);
  rep(i,n) cout << ans[i] << endl;
  return 0;
}