Hệ thống ống nước
Đề bài
Mô tả
An đang tập làm thợ sửa ống nước. Cậu vẽ một lưới gồm hàng và cột, mỗi ô của lưới sẽ chứa đúng một đoạn ống.
Có loại đoạn ống, đánh số từ đến . Mỗi đoạn ống có đúng hai đầu ống, nằm ở hai cạnh khác nhau của ô chứa nó:
- Loại : đầu ống ở cạnh trên và cạnh trái.
- Loại : đầu ống ở cạnh dưới và cạnh trái.
- Loại : đầu ống ở cạnh dưới và cạnh phải.
- Loại : đầu ống ở cạnh trên và cạnh phải.
Như vậy mỗi đoạn ống luôn có đúng một đầu nằm ở cạnh trên hoặc cạnh dưới, và đúng một đầu nằm ở cạnh trái hoặc cạnh phải.
Hệ thống ống bị rò rỉ nếu có ít nhất một đầu ống không nối được vào đầu ống nào khác và cũng không nằm trên biên của lưới. Cụ thể, với hai ô kề nhau theo chiều ngang, ô bên trái có đầu ống ở cạnh phải khi và chỉ khi ô bên phải có đầu ống ở cạnh trái; tương tự, với hai ô kề nhau theo chiều dọc, ô phía trên có đầu ống ở cạnh dưới khi và chỉ khi ô phía dưới có đầu ống ở cạnh trên. Đầu ống nằm trên biên của lưới luôn được chấp nhận.
An đã điền sẵn một số ô, các ô còn lại vẫn đang trống. Hãy đếm số cách điền tất cả các ô trống (mỗi ô nhận một trong loại đoạn ống) sao cho hệ thống thu được không bị rò rỉ, rồi in kết quả theo modulo .
Hai cách điền là khác nhau nếu tồn tại một ô mà loại đoạn ống đặt tại đó khác nhau. Phép quay hay lật lưới không được tính, tức là hai cấu hình chỉ trùng nhau sau khi quay hoặc lật vẫn được coi là khác nhau.
Dữ liệu vào
- Dòng đầu tiên chứa hai số nguyên và : số hàng và số cột của lưới.
- dòng tiếp theo, mỗi dòng chứa đúng ký tự mô tả một hàng của lưới. Ký tự là
1,2,3,4nếu ô đó đã được đặt đoạn ống loại tương ứng, hoặc.nếu ô đó còn trống.
Dữ liệu ra
In ra một số nguyên duy nhất: số cách điền hợp lệ theo modulo . Nếu không tồn tại cách nào, in ra .
Ràng buộc
- , ,
- Mỗi ký tự của lưới thuộc tập
1,2,3,4,.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 2 2 13 .. |
2 | Ô loại không có đầu ở cạnh dưới nên ô không được có đầu ở cạnh trên; ô loại có đầu ở cạnh dưới nên ô bắt buộc phải có đầu ở cạnh trên. Hai cách điền hàng thứ hai là 24 và 31. |
| 3 1 1 4 . |
0 | Ô loại không có đầu ở cạnh dưới, nhưng ô loại lại có đầu ở cạnh trên. Đầu ống này không nối được vào đâu nên lưới đã rò rỉ sẵn, không cách điền nào cứu được. |
| 2 2 3. .1 |
1 | Ô loại ép ô có đầu trái và ô có đầu trên; ô loại ép ô có đầu dưới và ô có đầu phải. Chỉ còn đúng một lưới hợp lệ: hàng là 32, hàng là 41. |
Bình luận