This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define f first
#define s second
#define m_p make_pair
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define vec vector
#define pb push_back
#define sz(x) (int)(x).size()
#define pw(x) (1LL<<(x))
#define fast_prep ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef long double ld;
typedef pair<int,ll> pil;
template<class T> bool umin(T &a,const T &b){return (a>b?a=b,1:0);}
template<class T> bool umax(T &a,const T &b){return (a<b?a=b,1:0);}
int M;
const int N=2e5+41;
int par[N];
int mt[N][42];
vec<int> g[N];
int a[N];
int mult(int a,int b){
    return 1ll*a*b%M;
}
void dfs(int v,int p){
    for(auto &z : g[v]){
        if(z==p) continue;
        par[z]=v;
        dfs(z,v);
    }
}
signed main(){
    fast_prep;
    int n;
    cin>>n>>M;
    for(int i=1;i<n;i++){
        int v,u;
        cin>>v>>u;--v;--u;
        g[v].pb(u);g[u].pb(v);
    }
    g[n].pb(0);g[0].pb(n);
    for(int i=n+1;i<n+40;i++){
        g[i].pb(i-1);g[i-1].pb(i);
    }
    n+=40;
    dfs(n-1,n-1);
    for(int i=0;i<n;i++)
        fill(mt[i],mt[i]+42,1);
    for(int i=0;i<n-40;i++) cin>>a[i];
    int q;
    cin>>q;
    while(q--){
        int type;
        cin>>type;
        if(type==1){
            int v,d,w;
            cin>>v>>d>>w;--v;
            while(d>=0){
//                cout<<"UPD "<<v<<' '<<d<<' '<<w<<endl;
//                cout<<"HEY "<<mt[v][d]<<' '<<mult(mt[v][d],w)<<endl;
                mt[v][d]=mult(mt[v][d],w);
                --d;v=par[v];
            }
        }
        else{
            int v;
            cin>>v;--v;
            int ans=a[v];
            for(int i=0;i<=40;i++){
                ans=mult(ans,mt[v][i]);
                ans=mult(ans,mt[v][i+1]);
                v=par[v];
            }
            cout<<ans<<'\n';
        }
    }
    return 0;
}
/*
*/
| # | 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... |