#BST0000009. Xóa nút có một con (Delete a One-Child Node from a BST)

Xóa nút có một con (Delete a One-Child Node from a BST)

Xóa nút có một con (Delete a One-Child Node from a BST)

Nguồn: Phước Hưng OJ

Phiên bản: Phước Hưng OJ Extended

Đề bài

Dựng BST từ dãy a1,a2,…,ana_1,a_2,\ldots,a_n theo đúng thứ tự chèn; khóa trùng bị bỏ qua.

Cho khóa xx được bảo đảm tồn tại và nút mang khóa xx có đúng một nút con. Khi xóa xx, nút con duy nhất của xx thay thế vị trí của xx trong cây:

  • nếu xx không phải gốc, cha của xx được nối trực tiếp với nút con duy nhất đó;
  • nếu xx là gốc, nút con duy nhất trở thành gốc mới.

Sau khi xóa, hãy in preorder của cây thu được.

Input

Dòng đầu chứa số nguyên nn.

Dòng thứ hai chứa nn số nguyên a1,a2,…,ana_1,a_2,\ldots,a_n theo thứ tự chèn.

Dòng thứ ba chứa khóa xx cần xóa.

Output

In các khóa của cây sau khi xóa theo preorder, cách nhau bởi một dấu cách.

Subtask

Subtask 1 (20 điểm): 2≤n≤202\le n\le 20.

Subtask 2 (30 điểm): 2≤n≤50002\le n\le 5000.

Subtask 3 (50 điểm): 2≤n≤2000002\le n\le 200000.

Trong tất cả các subtask, aia_i và xx là số nguyên có dấu 64-bit; khóa trùng bị bỏ qua khi dựng cây; xx tồn tại và nút mang khóa xx có đúng 11 con.

Ví dụ

Input

4
8 3 10 14
10

Output

8 3 14

Giải thích

Sau khi dựng cây, nút 1010 là con phải của 88 và chỉ có một con phải là 1414. Khi xóa 1010, nút 1414 được nối trực tiếp vào vị trí con phải của 88.

Preorder của cây còn lại là 8 3 14.