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 n hàng và m cột, mỗi ô của lưới sẽ chứa đúng một đoạn ống.

4 loại đoạn ống, đánh số từ 1 đến 4. 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 1: đầu ống ở cạnh trên và cạnh trái.
  • Loại 2: đầu ống ở cạnh dưới và cạnh trái.
  • Loại 3: đầu ống ở cạnh dưới và cạnh phải.
  • Loại 4: đầ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 4 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 1000003.

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 nm: số hàng và số cột của lưới.
  • n dòng tiếp theo, mỗi dòng chứa đúng m ký tự mô tả một hàng của lưới. Ký tự là 1, 2, 3, 4 nế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 1000003. Nếu không tồn tại cách nào, in ra 0.

Ràng buộc

  • 1n, 1m, n·m5·105
  • 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 Ô (1,1) loại 1 không có đầu ở cạnh dưới nên ô (2,1) không được có đầu ở cạnh trên; ô (1,2) loại 3 có đầu ở cạnh dưới nên ô (2,2) 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 Ô (1,1) loại 1 không có đầu ở cạnh dưới, nhưng ô (2,1) loại 4 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 Ô (1,1) loại 3 ép ô (1,2) có đầu trái và ô (2,1) có đầu trên; ô (2,2) loại 1 ép ô (1,2) có đầu dưới và ô (2,1) có đầu phải. Chỉ còn đúng một lưới hợp lệ: hàng 1 là 32, hàng 2 là 41.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 csc 6.12.0.200 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 kotlinc 2.4.10 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0