Cho ma trận vuông A cấp n và mô-đun p. Số pkhông được bảo đảm là số nguyên tố. Hãy tính định thức của A theo modulo p.
Input
Dòng đầu chứa hai số nguyên n và p.
Mỗi trong n dòng tiếp theo chứa n số nguyên; số thứ j trên dòng thứ i là ai,j.
Output
In một số nguyên trong đoạn [0,p) bằng det(A)modp. Khi p=1, hãy in 0.
Constraints
1≤n≤600.
1≤p≤1000000007.
0≤ai,j<p.
p có thể là hợp số.
Scoring
Subtask 1 (50% số điểm): n≤8.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
2 8
1 2
3 4
Output
6
Giải thích: Định thức bằng 1⋅4−2⋅3=−2, và −2mod8=6.
Lời giải tóm tắt
Ý tưởng: Không thể dùng nghịch đảo Fermat vì p có thể hợp số. Ở cột i, với mỗi hàng j>i, áp dụng thuật toán Euclid lên cặp a[i][i],a[j][i]: lấy thương nguyên q=a[i][i]/a[j][i], thay R_i bởi R_i-qR_j rồi đổi hai hàng. Cộng bội một hàng không đổi định thức; đổi hàng làm đổi dấu. Giá trị pivot giảm như phép chia lấy dư nên vòng lặp kết thúc mà không cần phép chia modulo.
Ý tưởng: Khi ma trận đã tam giác trên, định thức là tích đường chéo nhân dấu của số lần đổi hàng. Nếu một pivot bằng 0, kết quả là 0. Độ phức tạp an toàn là O(n^3 log p), bộ nhớ O(n^2).