Cơ sở trượt tuyết

Đề bài

Mô tả

Một khu trượt tuyết đang được quy hoạch trên một khu đất lớn có n ngã rẽ, đánh số từ 1 đến n. Ban đầu các ngã rẽ chưa được nối với nhau.

Trong quá trình thi công, m con đường trượt hai chiều sẽ được xây lần lượt: đầu tiên là đường số 1, rồi đường số 2, và cứ thế tiếp tục. Đường thứ i nối ngã rẽ ai với ngã rẽ bi. Giữa một cặp ngã rẽ có thể có nhiều hơn một con đường.

Một đường đua là một lộ trình thoả mãn đồng thời:

  • Lộ trình khép kín, tức là bắt đầu và kết thúc tại cùng một ngã rẽ.
  • Lộ trình chứa ít nhất một con đường.
  • Lộ trình không đi qua con đường nào quá một lần, nhưng có thể đi qua một ngã rẽ nhiều lần.

Một cơ sở trượt tuyết là một tập khác rỗng các con đường, sao cho tập đó có thể chia thành một hoặc nhiều đường đua, mỗi con đường trong tập thuộc đúng một đường đua và mỗi đường đua chỉ dùng các con đường trong tập. Cơ sở trượt tuyết không nhất thiết phải liên thông.

Hai cơ sở trượt tuyết được xem là khác nhau nếu chúng gồm hai tập con đường khác nhau.

Sau khi xây xong mỗi con đường, hãy đếm số cách chọn một cơ sở trượt tuyết từ những con đường đã được xây.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên n và m là số ngã rẽ và số con đường.
  • m dòng tiếp theo, dòng thứ i chứa hai số nguyên ai và bi mô tả con đường thứ i, theo đúng thứ tự chúng được xây.

Dữ liệu ra

In ra m dòng: dòng thứ i là số cách chọn cơ sở trượt tuyết sau khi xây xong con đường thứ i, lấy phần dư khi chia cho 109+9.

Ràng buộc

  • 2≤n≤105
  • 1≤m≤105
  • 1≤ai,bi≤n và ai≠bi

Ví dụ

Input Output Giải thích
3 4
1 3
2 3
1 2
1 2
0
0
1
3
Sau hai con đường đầu chưa có lộ trình khép kín nào. Sau đường thứ ba, ba con đường tạo thành tam giác 1−2−3−1, cho đúng 1 cách chọn. Sau đường thứ tư có 3 cách: tam giác cũ; tam giác dùng con đường 1−2 thứ hai; và tập gồm hai con đường song song giữa 1 và 2, tạo thành lộ trình khép kín 1−2−1.
4 5
1 2
2 3
3 4
4 1
1 3
0
0
0
1
3
Bốn con đường đầu tạo thành chu trình 1−2−3−4−1, cho 1 cách chọn. Thêm đường 1−3 ta có thêm hai tập nữa là {1−2,2−3,3−1} và {1−3,3−4,4−1}, tổng cộng 3 cách.

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 dotnet 10.0.402 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.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0