#include <bits/stdc++.h>
#define pb emplace_back
#define fi first
#define se second
#define int long long
using namespace std;
mt19937_64 rang(chrono::high_resolution_clock::now().time_since_epoch().count());
int rng(int l) { uniform_int_distribution<int> uid(0, l - 1); return uid(rang); }
std::vector<int> adj[100004];
int dp[100005];
std::vector<int> pdp[100004];
std::vector<int> sdp[100004];
int M;
void dfs(int u, int p) {
	dp[u] = 1;
	pdp[u].pb(1);
	for (int v : adj[u]) 
		if (v != p) {
			dfs(v, u);
			dp[u] = (dp[u] * (dp[v] + 1)) % M;
			pdp[u].pb(dp[u]);
		}
	sdp[u].pb(1);
	reverse(adj[u].begin(), adj[u].end());
	for (int v : adj[u]) 
		if (v != p)
			sdp[u].pb(sdp[u].back() * (dp[v] + 1) % M); 
}

void dfs2(int u, int p, int val) {
	dp[u] = (dp[u] * (val + 1));
	reverse(adj[u].begin(), adj[u].end());
	int in = 0;
	int sin = (int)sdp[u].size() - 2;
	for (int v : adj[u]) 
		if (v != p)
			dfs2(v, u, (pdp[u][in++] * sdp[u][sin--] % M) * (val + 1) % M);
}

int32_t main() {
	ios::sync_with_stdio(false); cin.tie(NULL); cout.precision(10); srand(chrono::high_resolution_clock::now().time_since_epoch().count());
	int n; cin >> n;
	cin >> M;
	for (int i = 0; i < n - 1; ++i) 
	{
		int u; cin >> u; u--;
		int v; cin >> v; v--;
		adj[u].pb(v);
		adj[v].pb(u);
	}
	dfs(0, 0);
	dfs2(0, 0, 0);
	for (int i = 0; i < n; ++i) cout << dp[i] % M << "\n";
}