Gửi bài giải


Điểm: 0,01 (OI)
Giới hạn thời gian: 0.6s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Cho một cây gồm ~n~ đỉnh, mỗi đỉnh ~i~ ứng với một dãy ~m~ bit, bit thứ ~j~ nếu như có món quà loại ~j~ xuất hiện tại đỉnh ~i~ và ngược lại nếu bit thứ ~j = 0~. Loại quà thứ ~j~ được gọi là "trọn vẹn" nếu như bit thứ ~j~ của mọi đỉnh trong tập đỉnh của đồ thị con được bật. Do đó, với mọi đồ thị con của đồ thị ban đầu đều ứng với một số nguyên ~k~ là số món quà được "trọn vẹn". Nhiệm vụ của bạn là đếm xem có bao nhiêu đồ thị con của đồ thị ban đầu cho ra ~k~ món quà "trọn vẹn", với ~k~ từ ~0~ đến ~m~.

Input

Dòng đầu tiên chứa hai số nguyên ~n~ và ~m~ (~1 \leq n \leq 5000, 1 \leq m \leq 10~).

~n - 1~ dòng tiếp theo, mỗi dòng chứa 2 số nguyên ~u, v~ biểu thị một cạnh của đồ thị.

Tiếp theo là ~n~ dòng, dòng thứ ~i~ gồm ~m~ số nguyên tương ứng với dãy bit của các quà tại đỉnh ~i~.

Output

In ra ~m + 1~ số nguyên trên một dòng, số thứ ~k~ là số lượng đồ thị con liên thông sao cho tồn tại đúng ~k~ món quà trọn vẹn. Kết quả chia lấy dư cho ~10^9 + 7~.

Scoring

Subtask Điểm Giới hạn
1 ~50~ ~n \le 200~
2 ~50~ Không ràng buộc gì thêm.

Sample Input 1

3 2
1 2
1 3
1 0
1 1
0 1

Sample Output 1

2 3 1

Notes

Các đồ thị con liên thông là:

1. ~\{1\}~, loại quà: 1.

2. ~\{2\}~, loại quà: ~\{1, 2\}~.

3. ~\{3\}~, loại quà: 2.

4. ~\{1, 2\}~, loại quà: 1.

5. ~\{1, 3\}~, loại quà: ~\varnothing~.

6. ~\{1, 2, 3\}~, loại quà: ~\varnothing~.

Vì vậy, đáp án là ~[2, 3, 1]~.


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • -5
    nguyenvothanhan12345  đã bình luận lúc 8, Tháng 4, 2025, 11:28

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.