Một cây gốc gồm n đỉnh được đánh số từ 1 đến n, gốc là đỉnh 1. Với mỗi đỉnh v từ 2 đến n, biết cha trực tiếp pv; luôn có pv<v.
Xét phép duyệt DFS preorder của một cây con: ghi đỉnh gốc của cây con trước, sau đó lần lượt duyệt toàn bộ cây con của các con trực tiếp theo thứ tự số hiệu tăng dần.
Mỗi truy vấn gồm hai số u,k. Hãy in đỉnh đứng thứ k trong preorder của cây con gốc u. Nếu cây con đó có ít hơn k đỉnh, in −1. Các truy vấn độc lập và không làm thay đổi cây.
Input
Dòng đầu chứa hai số nguyên n và q.
Dòng tiếp theo chứa n−1 số p2,p3,…,pn, trong đó pv là cha trực tiếp của đỉnh v.
Mỗi dòng trong q dòng cuối chứa hai số nguyên u và k.
Output
Với mỗi truy vấn, in số hiệu đỉnh cần tìm hoặc −1 nếu vị trí đó vượt quá cây con của u.
Constraints
2≤n≤2⋅105.
1≤q≤2⋅105.
1≤pv<v với mọi 2≤v≤n.
1≤u,k≤n.
Scoring
Subtask 1 (50% số điểm): n,q≤2000.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
9 7
1 1 2 2 3 3 6 6
1 1
1 6
2 3
3 4
6 3
6 4
7 1
Output
1
6
5
9
9
-1
7
Giải thích: Preorder toàn cây là 1,2,4,5,3,6,8,9,7; vì vậy phần tử thứ sáu là 6. Cây con của 6 có thứ tự 6,8,9, nên truy vấn (6,4) vượt phạm vi và cho −1.
Lời giải tóm tắt
Phân tích: Trong preorder, khi bắt đầu xử lý một đỉnh u, DFS hoàn thành toàn bộ cây con của u trước khi sang phần nằm ngoài cây con. Vì vậy các đỉnh của cây con u tạo thành một đoạn liên tiếp trong mảng preorder.
Thuật toán: Dựng danh sách con từ mảng cha. Do các đỉnh được đọc theo thứ tự tăng và p_v<v, danh sách con tự có thứ tự số hiệu tăng. Duyệt DFS lặp để tạo mảng euler, lưu vị trí đầu tin[u] và kích thước cây con size[u].
Thuật toán: Với truy vấn (u,k), nếu k>size[u] thì in -1; ngược lại đáp án là euler[tin[u]+k-1].
Chứng minh tính đúng đắn: Preorder ghi u đầu tiên rồi xử lý trọn vẹn từng cây con của con trực tiếp, nên toàn bộ cây con u là đoạn bắt đầu tại tin[u] và có đúng size[u] phần tử. Phần tử thứ k của đoạn nằm ở độ lệch k-1, đúng với công thức của thuật toán. Nếu k lớn hơn độ dài đoạn thì vị trí không tồn tại, nên -1 là kết quả đúng.
Độ phức tạp: Tiền xử lý O(n), mỗi truy vấn O(1), tổng O(n+q) thời gian và O(n) bộ nhớ.