时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
            空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
             64bit IO Format: %lld
        
     
    题目描述
        
        
    
            
            【题目背景】
2019年,nzhtl挑战10分钟手写平衡树,一战告捷!
2023年,在华农校赛,聪明的你,需要几分钟来A掉这道题呢?
【题目描述】
给你一棵树,默认1号节点为根节点,每条边都有边权,要求你维护以下操作
	- 
		1 x y :查寻节点x到y的路径上边权的平方和
	
- 
		2 x y z :将节点x到节点y的路径所经过的边的边权增加z
	
- 
		3 x y z :将节点x到节点y的路径所经过的边的边权修改为z
	
输入描述:
                                                    第一行两个数n,m)
接下来n-1行,每行3个数x,y,z,表示s与y之间有一条边权为z的边)
接下来m行,表示你所需要维护的操作
                                                                            输出描述:
                                                    对于每一次的操作1,输出一个数,表示两点路径途径边的边权的平方和
由于答案可能很大,因此只需输出对1e9+7取模的结果即可
                                                                            
                        
                            示例1
                        
                        
                            
                                输入
                                复制
                                
                                
                                    8 5
1 2 1
1 3 5
1 6 1
1 7 10
1 8 10
2 4 3
2 5 5
3 6 4 5
1 6 4
1 2 5
2 8 5 5
1 8 6