#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pb push_back
const int N=2e5+5,inf=1e9,MOD=1e9+7;
int n,l,par[N],h[N],suff[N][42];
vector<int> adj[N];
void dfs(int node,int p){
    par[node]=p;
    for(auto i:adj[node]){
        if(i!=p)dfs(i,node);
    }
}
signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin>>n>>l;
    for(int i=0;i<n-1;i++){
        int x,y; cin>>x>>y;
        adj[x].pb(y); adj[y].pb(x);
    }
    dfs(1,0);
    for(int i=1;i<=n;i++){
        cin>>h[i];
        for(int j=0;j<42;j++)suff[i][j]=1;
    }
    
    int q; cin>>q;
    while(q--){
        int type; cin>>type;
        if(type==1){
            int x,d,w; cin>>x>>d>>w;
            while(d>=0){
                suff[x][d]*=w; suff[x][d]%=l;
                d--;
                if(d>=0){
                    suff[x][d]*=w; suff[x][d]%=l;
                }
                if(x!=1)x=par[x];
                else d--;
            }
        }
        else{
            int x; cin>>x;
            int ans=1,d=0;
            while(x>0 && d<41){
                ans*=suff[x][d]; ans%=l;
                d++;
                x=par[x];
            }
            cout<<ans<<endl;
        }
    }
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |