// Problem : V - Subtree
// Contest : AtCoder - Educational DP Contest
// URL : https://atcoder.jp/contests/dp/tasks/dp_v
// Memory Limit : 1024 MB
// Time Limit : 2000 ms
// Powered by CP Editor (https://github.com/cpeditor/cpeditor)


#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")  //Optimization flags
#define pb push_back
#define IOS                                                                    \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(0);                                                                  \
  cout.tie(0);cout<<fixed<<setprecision(16);
#define ll long long int
#define ld long double
#define el '\n'
#define El '\n'
#define PI (ld)3.141592653589793238462643383279502884197169399375105820974944
#define inf (ll)1000000000
#define binf (ll)1000000000*(ll)1000000000
#define mod (ll)1000000007
#define mod1 (ll)998244353
#define fo(i, n) for (long long i = 0; i < n; i++)
#define pll pair<ll, ll>
#define ml map<ll,ll>
#define vpl vector<pll>
#define vvl vector<vector<ll> >
#define vvpl vector< vector<pll> >
#define ff first
#define ss second
#define pqueue priority_queue< ll >
#define pdqueue priority_queue< ll,vl ,greater< ll > >
#define mem(a,b) memset(a,b,sizeof(a));
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define sz(a) (ll)a.size()
#define all(a) a.begin(),a.end()
#define vl vector<ll>


/*#define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }

void err(istream_iterator<string> it) {}
template<typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
	cerr << *it << " = " << a << endl;
	err(++it, args...);
}*/


//#define x ff
//#define y ss
#define pt(a) for(auto it:a)cout<<it<<" ";cout<<endl;
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
using namespace std;

using namespace __gnu_pbds;
 
typedef tree<pll,null_type,less<pll>,rb_tree_tag,tree_order_statistics_node_update> order_set;

// vector
template<class T> istream& operator >> (istream &is , vector<T> &v) { for(T &a : v) is >> a; return is; }
template<class T> ostream& operator << (ostream &os , const vector<T> &v) { for(const T &t : v) os << t<<" "; return os << endl; }
// pair
template<class T, class U> ostream& operator << (ostream &os , const pair<T, U> &v) { return os << v.first << " " << v.second ; }

double gcd(double a, double b) { return a < 0.01 ? b : gcd(fmod(b, a), a); }

long long bpow(long long a, long long b, long long m) {
  a %= m;
  long long res = 1;
  while (b > 0) {
    if (b & 1)res = res * a % m;
      a = a * a % m;
      b >>= 1;
  }
  return res;
}


ll kv;
ll t,n,x,y,h,k,z,p,q,w;
string s,s1,s2;
vvl v;
vl ans,d;

ll extend_gcd(ll a,ll b,ll &x,ll &y){
    if(b==0){
        x=1;
        y=0;
        return a;
    }
    ll x1,y1;
    ll ans =extend_gcd(b,a%b,x1,y1);
    x=y1;
    y=x1-(a/b)*y1;

    return ans;
}
ll inverse(ll a,ll m){
    ll x,y;
    extend_gcd(m,a,x,y);
    y%=m;
    y+=m;
    y%=m;
    return y;
}

void dfs1(ll s,ll p=-1){
	for(ll u:v[s]){
		if(u==p)continue;
		dfs1(u,s);
		d[s]*=1+d[u];
		d[s]%=k;
	}
}

void dfs2(ll s,ll p=-1,ll pre=1){
	ans[s]=d[s]*pre%k;
	vl prefix,suffix,temp;
	prefix.pb(1);
	for(ll u:v[s]){
		if(u==p)continue;
		temp.pb(d[u]+1);
	}
	suffix.assign(sz(temp)+1,1);
	fo(i,sz(temp)){
		prefix.pb(prefix.back()*temp[i]%k);
		suffix[sz(temp)-1-i]=suffix[sz(temp)-i]*temp[sz(temp)-1-i]%k;
	}
	//cout<<s<<el;
	//pt(prefix);pt(suffix);
	ll j=0;
	fo(i,sz(v[s])){
		if(v[s][i]==p)continue;
		ll send=prefix[j]*suffix[j+1]%k*pre%k+1;
		//cout<<v[s][i]<<" "<<s<<" "<<send<<el;
		dfs2(v[s][i],s,send);
		j++;
	}
}

void solve(){
	cin>>n>>k;
	v.resize(n);
	ans.assign(n,1);
	d=ans;
	fo(i,n-1){
		cin>>x>>y;x--;y--;
		v[x].pb(y),v[y].pb(x);
	}
	dfs1(0);
	dfs2(0);
	//pt(d);
	//pt(ans);
	for(ll u:ans)cout<<u<<el;
}

int main() {
    IOS;
    //cin>>t;
    t=1;	
	fo(l,t){
		solve();
	}
    return 0;
}


Measured memory_bytes: 27776