Secret Santa

Xem dạng PDF

Gửi bài giải


Điểm: 1,50 (OI)
Giới hạn thời gian: 2.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

Nhân dịp Giáng Sinh, Kuroni và ~n~ người bạn chơi một phiên bản của trò Secret Santa với Kuroni làm quản trò. Trò chơi sẽ diễn ra trong ~d~ ngày (với ~d~ được chọn bởi Kuroni); diễn biến mỗi ngày xảy ra như sau:

  • Đầu tiên, Kuroni chọn ~k~ bạn khác nhau ~u_1, u_2, \dots, u_k~, rồi đề xuất với một giá trị thực dương ~w~. Lưu ý là ~k~, ~w~, và ~u_1, u_2, \dots, u_k~ có thể có giá trị khác nhau qua từng ngày.

  • Sau đó, mỗi bạn được chọn sẽ mua một món đồ có giá trị đúng bằng ~w~.

  • Cuối cùng, các bạn tặng món đồ mình đã mua theo vòng tròn: ~u_1~ tặng món quà của mình cho ~u_2~, ~u_2~ tặng món quà của mình cho ~u_3~, ..., ~u_k~ tặng món quà của mình cho ~u_1~.

Để gắn kết ~n~ người bạn của mình lại gần nhau hơn, Kuroni đã lên sẵn một danh sách gồm ~m~ cặp ~(u, v)~, với mong muốn rằng khi kết thúc trò chơi này, bạn thứ ~u~ phải gửi cho bạn thứ ~v~ ít nhất một món quà; ngoài ra, với những cặp ~(x, y)~ không nằm trong danh sách của anh ấy, bạn thứ ~x~ không được phép gửi quà cho bạn thứ ~y~ (vì như thế sẽ khiến bạn ~y~ hiểu nhầm ý định của bạn ~x~).

Dĩ nhiên, Kuroni cũng không muốn nảy sinh tình cảm không trong sáng giữa ~n~ bạn của mình, nên anh ấy muốn rằng khi kết thúc trò chơi, với mọi bạn ~u~, tổng giá trị quà ~u~ nhận được từ các bạn đã tặng quà cho ~u~ là như nhau. Nói cách khác, nếu ~v~ và ~t~ là hai bạn đã tặng cho ~u~ ít nhất một món quà, thì tổng giá trị quà ~v~ tặng ~u~ phải bằng với tổng giá trị quà ~t~ tặng ~u~ (nếu không thì ~u~ sẽ ưu ái bạn tặng nhiều quà hơn).

Kuroni nghĩ nát óc vẫn chưa tìm được cách dàn xếp trò chơi để đạt được nguyện vọng của mình. Bạn hãy giúp anh ấy nhé!

Input

Dòng đầu tiên bao gồm hai số nguyên dương ~n~ và ~m~ (~1 \le n, m \le 200~) — số lượng bạn của Kuroni và số lượng cặp đôi trong danh sách của anh.

Dòng thứ ~i~ trong ~m~ dòng tiếp theo bao gồm hai số nguyên dương ~u_i~ và ~v_i~ (~1 \le u_i, v_i \le n~) — biểu diễn cặp thứ ~i~ trong danh sách của Kuroni.

Dữ liệu đảm bảo rằng không tồn tại cặp nhau xuất hiện lại nhiều lần trong danh sách, cũng như không tồn tại cặp nào nối một bạn về chính bạn ấy.

Output

Ở dòng đầu tiên, in ra "YES" (không chứa ngoặc nháy) nếu tồn tại một cách dàn xếp trò chơi để đạt được ý muốn của Kuroni; nếu không, in ra "NO" (không chứa ngoặc nháy).

Nếu dòng đầu tiên in ra "YES", bạn cần in ra ở dòng thứ hai số ~d~ không quá ~500~ là số lượng ngày mà mọi người sẽ chơi. Ta có thể chứng minh được rằng dưới giới hạn của bài này, nếu tồn tại một cách dàn xếp trò chơi thỏa mãn điều kiện thì cũng tồn tại một cách mà không cần chơi quá ~500~ ngày.

Tiếp theo, bạn cần in ra ~d~ dòng, với dòng thứ ~i~ biểu diễn ngày chơi thứ ~i~. Ở mỗi dòng:

  • Đầu tiên, in ra số thực dương không quá ~10^{15}~ ~w~ là giá trị quà được đề xuất ở ngày này. Ta có thể chứng minh được rằng dưới giới hạn của bài này, nếu tồn tại một cách dàn xếp trò chơi thỏa mãn điều kiện thì cũng tồn tại một cách mà giá trị quà ở mỗi ngày không quá ~10^{15}~.

  • Tiếp theo, in ra số nguyên dương ~k~ là số lượng bạn được chọn chơi ở ngày thứ ~i~.

  • Cuối cùng, in ra ~k~ số nguyên dương đôi một khác nhau ~u_1, u_2, \dots, u_k~ biểu diễn các bạn được chọn (~1 \le u_j \le n~ với mọi ~1 \le j \le k~).

Các giá trị trên cần được in ra trên cùng một dòng, tách nhau bởi dấu cách.

Định nghĩa ~f(u \to v)~ là tổng giá trị quà ~u~ đã gửi cho ~v~ xuyên suốt trò chơi. Trình chấm sẽ nhận diện cách dàn xếp trò chơi được in ra là hợp lệ nếu như với mọi bạn ~u~ và hai bạn ~v~ và ~t~ có gửi quà cho ~u~, sai số tương đối giữa tổng giá trị quà ~v~ gửi cho ~u~ và tổng giá trị quà ~t~ gửi cho ~u~ không vượt quá ~10^{-6}~; nói cách khác, nếu ~x = f(v \to u)~ và ~y = f(t \to u)~ thì ~\frac{|x - y|}{\min(x, y)} \le 10^{-6}~.

Dữ liệu được sinh ra sẽ thỏa mãn rằng nếu tồn tại một cách dàn xếp hợp lệ thì sẽ tồn tại một cách dàn xếp sao cho với hai cặp ~(u, v)~ và ~(x, y)~ trong danh sách, tỉ lệ của ~f(u \to v)~ và ~f(x \to y)~ không vượt quá ~10^{10}~. Tuy nhiên, đáp án bạn in ra không cần phải thỏa mãn điều kiện này.

Scoring

Nếu coi như danh sách của Kuroni tương ứng với một đồ thị có hướng ~G~ gồm ~n~ đỉnh ~m~ cạnh, với mỗi cặp ~(u, v)~ tương ứng với một cạnh có hướng ~u \to v~ trong ~G~ thì

Subtask Điểm Giới hạn
1 1000 Mọi cạnh ~u \to v~ của ~G~ thuộc tối đa ~1~ chu trình đơn của ~G~
2 1000 Mọi cạnh ~u \to v~ của ~G~ thỏa mãn ~u \lt v~ ngoại trừ cạnh ~n \to 1~
3 1500 Không có ràng buộc gì thêm
Tổng 3500

Sample Input 1

5 7
1 2
2 3
3 1
2 4
3 5
4 5
5 2

Sample Output 1

YES
3
1.0 3 1 2 3
0.5 3 2 3 5
0.5 3 2 4 5

Sample Input 2

3 4
1 2
2 1
1 3
2 3

Sample Output 2

NO

Sample Input 3

6 6
1 2
2 3
3 1
4 5
5 6
6 4

Sample Output 3

YES
2
0.3 3 1 2 3
0.6 3 5 6 4

Notes

Ở ví dụ đầu tiên, ta có các hình minh họa sau cho đồ thị ~G~ ban đầu, cách dàn xếp trò chơi, và tổng giá trị quà mà các bạn đã tặng cho nhau; ba ngày chơi được biểu diễn bởi ba màu khác nhau.

image image image

Đồ thị ~G~ ban đầu, cách dàn xếp trò chơi, và tổng giá trị quà mà các bạn đã tặng cho nhau.

Tương tự, ta có ba hình minh họa sau cho ví dụ thứ ba.

image image image

Đồ thị ~G~ ban đầu, cách dàn xếp trò chơi, và tổng giá trị quà mà các bạn đã tặng cho nhau.


Bình luận

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


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