Antichain
Xem dạng PDF
Gửi bài giải
Điểm:
0,01 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Input:
stdin
Output:
stdout
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch
Cho số nguyên dương ~n~. Gọi ~S~ là tập tất cả các ước dương của ~n~.
Hãy chia tập ~S~ thành các tập con sao cho:
mỗi phần tử của ~S~ thuộc một tập con;
không có hai tập con nào chứa cùng một phần tử;
với mọi cặp phần tử ~x, y~ thuộc cùng một tập con thì ~x|y~ hoặc ~y|x~.
Hãy tìm ra số lượng tập con ít nhất cần phải tạo và một cách chia thỏa mãn.
Input
Dòng đầu tiên gồm một số ~t~ ~(1 \leq t \leq 10)~ là số lượng testcase.
Mỗi test case mỗi dòng gồm một số ~n~ ~(1 \leq n \leq 10^{18})~.
Output
Với mỗi test case:
Dòng đầu tiên là số ~k~, chính là số tập con ít nhất có thể chia.
Mỗi dòng trong ~k~ dòng tiếp theo có dạng ~m, a_1, a_2, \dots, a_m~ thể hiện cho một tập con gồm các phần tử ~a_1, a_2, \ldots, a_m~.
Scoring
| Subtask | Điểm | Ràng buộc |
|---|---|---|
| 1 | ~500~ | ~n \leq 1000~ |
| 2 | ~1000~ | ~n \leq 10^{12}~ |
| 3 | ~2000~ | Không có ràng buộc gì thêm |
| Tổng | ~3500~ |
Sample Input 1
3
6
60
36
Sample Output 1
2
3 1 3 6
1 2
4
5 1 5 15 30 60
3 3 6 12
3 2 10 20
1 4
3
5 1 3 9 18 36
3 2 6 12
1 4
Bình luận