Lưu ý : Bài này chỉ khác phiên bản dễ ở cấu trúc của dữ liệu, và giới hạn của giá trị ai
Ami có một cái cây (đơn đồ thị vô hướng liên thông không chu trình) có n nút. Các nút được đánh số từ 1. Trên các nút của cây có các giá trị, giá trị trên nút i là vi. Đường đi từ nút u đến v là một dãy a1, a2, a3, ..., at thoả mãn các điều kiện sau :
1) a1 = u và at = v
2) Đường đi là ngắn nhất giữa 2 đỉnh u và v
3) Với mọi i < t, có cạnh nối trực tiếp giữa ai và ai+1.
Các bạn cần tính xem có bao nhiêu giá trị D ≥ 0 mà tồn tại ít nhất một đường đi giữa 2 nút u và v bất kỳ trên cây là một cấp số cộng với công sai D. Với mỗi D ≥ 0 tìm được, hãy tìm xem đường đi dài nhất thoả mãn điều kiện đó.
Input
Dòng đầu tiên gồm một số nguyên dương n (n ≤ 3*105) là số đỉnh của cây.
N-1 dòng tiếp theo, mỗi dòng chứa 2 số u và v (u , v ≤ n), biểu diễn một cạnh nối giữa 2 đỉnh u và v.
Dòng tiếp theo gồm n số nguyên a1, a2, a3, ..., an (|ai| ≤ 109). Ai là giá trị trên nút i.
Output
Gồm một vài dòng, mỗi dòng có 2 số D x. Với ý nghĩa, đường đi dài nhất có công sai D có độ dài là x.
Các bạn cần in D theo thứ tự tăng dần.
Giải thích
Một đường đi có công sai 1 là đường đi từ nút 9 đến 1. Dãy số là -2 -1 0 1 và có độ dài là 4
Một đường đi có công sai 3 là đường đi từ nút 1 đến nút 8. Dãy số là 1 4 7 10 và có độ dài là 4.