Các tài liệu HTML phổ biến có cấu trúc phân cấp. Điều này có nghĩa là chúng bao gồm các phần tử được gọi là có tên và các thuộc tính nhất định và có thể chứa các phần tử khác. Trong nhiệm vụ này, chúng tôi xem xét các tài liệu chỉ bao gồm các phần tử div lồng nhau. Cụ thể, mỗi tài liệu gồm các dòng có dạng sau:
<div id=’name’ class=’class1 class2 . . . classK’> phần tử đầu
... nội dung
</div> phần từ cuối
Do đó, một phần tử duy nhất bao gồm một dòng kích hoạt phần đầu của nó, một dòng biểu thị phần cuối của nó và ở giữa hai dòng này là nội dung của phần tử có thể trống hoặc bao gồm một loạt các phần tử khác có thể chứa lại. các yếu tố khác và như vậy. Bản thân tài liệu bao gồm một loạt các phần tử (một số phần tử trong đó có thể chứa các phần tử khác). Ngoài ra, những điều sau đây đúng cho việc biểu diễn một phần tử:
- Tên của phần tử là một mảng các chữ cái viết thường trong bảng chữ cái tiếng Anh. Tên xác định duy nhất thành phần trong tài liệu và không có hai thành phần nào khác nhau có cùng tên.
- Mỗi lớp phần tử cũng là một mảng các chữ cái viết thường trong bảng chữ cái tiếng Anh. Nếu một lớp được liệt kê trong danh sách các phần tử ban đầu, chúng ta nói rằng phần tử đó thuộc về lớp đó. Mỗi phần tử có thể thuộc về một hoặc nhiều lớp khác nhau. Các phần tử khác nhau có thể thuộc về cùng một lớp.
- Các ký tự khoảng trắng duy nhất xuất hiện khi biểu diễn một phần tử lần lượt là một khoảng trắng trước id, một khoảng trắng trước lớp và các khoảng trắng có thể có giữa các lớp riêng lẻ, chính xác là một khoảng trắng giữa hai lớp liền kề.
Nếu phần tử E được viết trong nội dung của phần tử F (ở bất kỳ vị trí nào giữa các dòng biểu thị phần đầu và phần cuối của phần tử E), chúng ta nói rằng F chứa E hay nói cách khác là E được chứa trong F. Chúng ta nói rằng phần tử E là cha của phần tử F nếu F được chứa trong E và không có một phần tử G nào sao cho F được chứa trong G và G được chứa trong E.
CSS là ngôn ngữ biểu định kiểu được sử dụng để mô tả giao diện và định dạng của các thành phần HTML khi nhìn thấy trong trình duyệt Web. Một phần quan trọng của ngôn ngữ đó được gọi là bộ chọn và bộ phân loại. Bộ phân loại là một chuỗi các ký tự bắt đầu bằng dấu chấm và theo sau là một hoặc nhiều lớp được phân tách bằng dấu chấm. Một lần nữa, chỉ các chữ cái viết thường của bảng chữ cái tiếng Anh mới được xuất hiện trong các lớp học. Một số ví dụ về trình phân loại là: ".banana.apple", ".banana", ".apple.banana.mango". Các bộ phân loại này lần lượt bao gồm hai, một và ba lớp. Chúng ta nói rằng một phần tử HTML nhất định tương ứng với một bộ phân loại nếu nó thuộc về tất cả các lớp được liệt kê trong bộ phân loại.
Bộ chọn bao gồm một hoặc nhiều bộ phân loại và hai bộ phân loại liền kề trong bộ chọn có thể được phân tách bằng một khoảng trắng hoặc một chuỗi ký tự khoảng trắng lớn hơn khoảng trắng (' > '). Sự tương ứng của một phần tử HTML với bộ chọn được xác định đệ quy theo cách sau:
- Nếu S là bộ chọn bao gồm chính xác một bộ phân loại k, thì phần tử tương ứng với S nếu nó tương ứng với k.
- Nếu S là bộ chọn ở dạng 'T k' trong đó T là bộ chọn và k là bộ phân loại, phần tử E tương ứng với S nếu nó tương ứng với k và được chứa (không nhất thiết trực tiếp) trong phần tử F tương ứng tới T.
- Nếu S là bộ chọn có dạng ‘T > k’ trong đó T là bộ chọn và k là bộ phân loại, phần tử E tương ứng với S nếu nó tương ứng với k và cha F của nó tương ứng với T.
Bạn được cung cấp một tài liệu bao gồm N dòng và bạn có M bộ chọn. Viết chương trình đó đối với mỗi bộ chọn nhất định, sẽ xuất ra tên của tất cả các phần tử tương ứng với nó. Đối với mỗi cá nhân bộ chọn, các tên phải được xuất ra theo thứ tự chúng xuất hiện trong tài liệu đã cho.
Input
- Dòng đầu tiên chứa số nguyên ~N~ ~(2 \le N \le 10 000)~, số dòng trong tài liệu.
- ~N~ dòng tiếp theo chứa nội dung của tài liệu. Mỗi dòng sẽ tương ứng với phần đầu hoặc phần cuối của một phần tử như được mô tả trong nhiệm vụ.
- Dòng tiếp theo chứa số nguyên ~M~ ~(1 \le M \le 5)~, số lượng bộ chọn.
- Mỗi dòng trong số ~M~ dòng tiếp theo chứa một bộ chọn.
- Tên của tất cả các thành phần và lớp trong dữ liệu đầu vào sẽ chỉ bao gồm các chữ cái viết thường trong bảng chữ cái tiếng Anh và độ dài của chúng sẽ không lớn hơn ~20~ ký tự.
- Ngoài ra, không một dòng nào trong dữ liệu đầu vào sẽ dài hơn ~5 000~ ký tự và tổng độ dài của tất cả các dòng trong dữ liệu đầu vào sẽ không vượt quá ~5 000 000~ .
Output
- Đối với mỗi bộ chọn trong dữ liệu đầu vào, hãy xuất ra một dòng. Đầu tiên, xuất số lượng phần tử tương ứng với bộ chọn đã cho và sau đó là tên của các phần tử tương ứng theo thứ tự đã nói ở trên.
Scoring
- Trong các trường hợp thử nghiệm chiếm 50% tổng số điểm, bộ chọn sẽ không chứa ký tự '>'.
Sample Input
22
<div id=’a’ class=’banana mango’>
<div id=’b’ class=’orange’>
<div id=’c’ class=’banana’>
<div id=’d’ class=’apple mango orange’>
<div id=’e’ class=’orange’>
</div>
</div>
</div>
</div>
<div id=’f’ class=’orange apple’>
<div id=’g’ class=’apple’>
<div id=’h’ class=’orange apple’>
<div id=’i’ class=’banana’>
</div>
</div>
</div>
<div id=’j’ class=’banana’>
</div>
</div>
</div>
<div id=’k’ class=’glupo voce daj mi sarme’>
</div>
5
.banana
.banana > .sarme
.banana > .orange > .banana
.banana .apple.orange > .orange
.mango > .orange .banana
Sample Output
4 a c i j
0
2 c j
1 e
3 c i j
Bình luận