#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int D = 40; 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n, md; 
    cin >> n >> md; 
    vector<vector<int>> g(n); 
    for (int i = 0; i < n - 1; ++i) {
        int x, y; 
        cin >> x >> y; 
        x--; y--; 
        g[x].push_back(y); 
        g[y].push_back(x); 
    }
    for (int i = 0; i < D; ++i) {
        g.push_back({n - 1}); 
        g[n - 1].push_back({n}); 
        n++; 
    }
    
    vector<int> par(n, -1); 
    function<void(int, int)> dfs = [&] (int x, int p) {
        for (auto y: g[x]) {
            if (y != p) {
                dfs(y, x); 
                par[y] = x; 
            }
        }
    }; 
    dfs(n - 1, -1); 
    vector<vector<ll>> f(n, vector<ll>(D + 1, 1)); 
    for (int i = 0; i < n - D; ++i) {
        int x; 
        cin >> x; 
        f[i][0] = x;
    }
    int q;
    cin >> q; 
    while (q--) {
        int t; 
        cin >> t; 
        if (t == 1) {
            int x, d, w; 
            cin >> x >> d >> w; 
            x--; 
            while (d >= 0) {
                f[x][d] = (f[x][d] * w) % md; 
                // if (d) f[x][d - 1] = (f[x][d - 1] * w) % md; 
                d--; 
                x = par[x]; 
            }
        } else {
            int x; 
            cin >> x; 
            x--; 
            ll res = 1; 
            for (int d = 0; d <= D; ++d) {
                res *= f[x][d]; 
                res %= md; 
                if (d + 1 <= D) res *= f[x][d + 1]; 
                if (res >= md) res %= md; 
                x = par[x]; 
            }
            
            cout << res << '\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... |