Một công ty có n nhân viên và n công việc. Chi phí để nhân viên i thực hiện công việc j là ci[j].
Hãy giao cho mỗi nhân viên đúng một công việc, đồng thời mỗi công việc cũng được giao cho đúng một nhân viên, sao cho tổng chi phí nhỏ nhất. Ngoài giá trị tối ưu, bạn phải in ra một phương án đạt được giá trị đó.
Input
Dòng đầu chứa số nguyên n.
Mỗi dòng trong n dòng tiếp theo chứa n số nguyên. Số thứ j trên dòng thứ i là ci[j].
Output
Dòng đầu in tổng chi phí nhỏ nhất.
Trong n dòng tiếp theo, mỗi dòng in hai số nguyên ab, nghĩa là giao công việc b cho nhân viên a. Mỗi chỉ số nhân viên và mỗi chỉ số công việc phải xuất hiện đúng một lần.
Nếu có nhiều phương án tối ưu, bạn có thể in bất kỳ phương án nào.
Constraints
1≤n≤200.
1≤ci[j]≤1000.
Scoring
Subtask 1 (50% số điểm): n≤9.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
3
9 2 7
6 4 3
5 8 1
Output
9
1 2
2 1
3 3
Giải thích: Phương án trên có chi phí 2+6+1=9. Mọi phép gán khác đều có tổng chi phí không nhỏ hơn 9.
Lời giải tóm tắt
Mô hình hóa: Nhân viên là phía trái, công việc là phía phải. Cạnh (i,j) có trọng số c[i][j]. Ta cần một perfect matching có tổng trọng số nhỏ nhất.
Thuật toán Hungarian: Duy trì các thế đỉnh u[i], v[j] và một matching hiện tại trên các cột. Khi thêm nhân viên i, thuật toán tìm một đường tăng có reduced cost nhỏ nhất. Mảng minv lưu chi phí bổ sung tốt nhất để đi tới từng công việc chưa xét; way lưu đường truy vết. Sau khi cập nhật thế đỉnh và gặp một công việc chưa được ghép, đảo các cạnh trên đường tăng để thêm nhân viên mới.
Thuật toán Hungarian: Cuối cùng, p[j] cho biết nhân viên đang nhận công việc j; đảo ánh xạ này để in các cặp theo thứ tự nhân viên.
Chứng minh tính đúng đắn: Hungarian duy trì một nghiệm đối ngẫu khả thi và một matching chỉ dùng các cạnh có reduced cost bằng 0. Mỗi vòng tìm đường tăng rồi cập nhật thế với lượng nhỏ nhất cần thiết, nên tính khả thi đối ngẫu được giữ nguyên và xuất hiện một đường tăng gồm các cạnh chặt. Sau n vòng ta có perfect matching. Giá của matching bằng giá nghiệm đối ngẫu, vì vậy theo đối ngẫu mạnh nó có tổng chi phí nhỏ nhất. Các cặp in ra chính là perfect matching đó.