#10034. SECRETGIFT - Tặng quà

Bộ nhớ: 256 MiB Thời gian: 1000 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: So sánh văn bản
Đưa lên bởi: Nguyễn Văn Đạt

Đề bài

Tổ chức FC có một sự kiện đặc biệt trong tháng 10 . Do đó, vào ngày này, người thứ i có nhiệm vụ tặng quà bí mật cho duy nhất một người a_i .

Không có nhân viên nào trong tổ chức được tặng quà cho chính mình và cũng không có hai nhân viên nào được giao nhiệm vụ tặng quà cho cùng một người.

Nói cách khác: a _i \ne i a_i \ne a_j \forall 1 ≤ i < j ≤ n .

Mọi năm, việc sinh giá trị dãy a_i được vận hành random bằng máy tính. Tuy nhiên năm nay mọi người có nguyện vọng muốn được tặng quà cho người mà họ quý mến. (Hiển nhiên là cũng không có ai ái kỷ đến mức tự muốn tặng quà cho bản thân mình).

Do đó, sếp của tổ chức muốn nhờ bạn tìm hộ cách giao nhiệm vụ giao quà hợp lý nhất sao cho có nhiều người được đặng quà cho người mà họ quý mến nhất có thể.

Dữ liệu:

  • Dòng thứ nhất ghi số n là số nhân viên của tổ chức FC (2 ≤ n ≤ 2\times 10^5) ;
  • Dòng thứ hai ghi n số b_1, b_2, \ldots, b_n . Trong đó b_ i là người mà nhân viên thứ i yêu quý, (1 ≤ b_i ≤ n, b_i != i) .

Kết quả:

  • Dòng thứ nhất in số k là số người nhiều nhất có thể mà nguyện vọng của họ có thể được thoả mãn;
  • Dòng thứ hai in n số a_1,a_2,\ldots,a_n là cách giao nhiệm vụ thoả mãn yêu cầu công ty và có k người có nguyện vọng được thoả mãn.

Do có thể có nhiều đáp án nên bất kì cách giao nhiệm vụ nào thoả mãn đều được chấp nhận.

Ví dụ:

Dữ liệu: Kết quả:
3 2
2 1 2 3 1 2
Dữ liệu: Kết quả:
7 4
6 4 6 2 4 5 6 6 4 7 2 3 5 1

Giới hạn:

  • Subtask \#1: ( 50\% số test): n ≤ 10 ;
  • Subtask \#2: ( 50\% số test): Không có ràng buộc gì thêm.

Nguồn: Freecontest beginer 36