#include <bits/stdc++.h>
using namespace std;
#define int int64_t
const int N=2e5+44;
int f[N][44],par[N],h[N],n,q,mod;
vector<int>g[N];
void dfs(int u,int p){
	par[u]=p;
	for(int v:g[u])
		if(v^p)dfs(v,u);
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    cin>>n>>mod;
    for(int i=1,u,v;i<n;++i){
    	cin>>u>>v;
    	g[u].push_back(v);
    	g[v].push_back(u);
    }
    for(int i=1;i<=n;++i)
    	cin>>h[i];
    dfs(1,0);
    for(int i=1;i<=n+40;++i){
    	for(int j=0;j<=40;++j)
    		f[i][j]=1;
    }
    par[1]=n+1;
    for(int i=n+1;i<=n+42;++i)
    	par[i]=i+1;
    cin>>q;
    while(q--){
    	int tp;
    	cin>>tp;
    	if(tp==2){
    		int u,hummer;
    		cin>>u;
    		hummer=h[u];
    		for(int i=0;i<=40&&u;++i){
    			hummer*=(f[u][i]);
    			hummer%=mod;
    			u=par[u];
    		}
    		cout<<hummer<<'\n';
    	}else{
    		int u,d,w;
    		cin>>u>>d>>w;
    		while(d>=0&&u){
    			f[u][d]*=w;
    			if(d)f[u][d-1]*=w;
    			f[u][d]%=mod;
    			if(d)f[u][d-1]%=mod;
    			--d;
    			u=par[u];
    		}
    	}
    }
}
| # | 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... |