Cho hai dãy hệ số a0,…,aN−1,b0,…,bM−1 trong trường modulo 998244353. Hãy in dãy c0,…,cN+M−2, trong đó ck bằng tổng ai⋅bj qua mọi cặp chỉ số thỏa i+j=k, rồi lấy modulo 998244353.
Input
Dòng đầu chứa hai số nguyên NM.
Dòng thứ hai chứa N hệ số của đa thức thứ nhất theo bậc tăng dần.
Dòng thứ ba chứa M hệ số của đa thức thứ hai theo bậc tăng dần.
Output
In N+M−1 hệ số của tích, theo bậc tăng dần và lấy modulo 998244353.
Constraints
1≤N,M≤5.24288⋅105.
0≤ai,bi<998244353.
Scoring
Subtask 1 (50 điểm): Đại lượng N không vượt 2000.
Subtask 2 (50 điểm): Không có ràng buộc bổ sung.
Example
Test 1
Input
2 2
12 32
33 76
Output
396 1968 2432
Giải thích: Nhân hai đa thức của mẫu và gom các tích có cùng tổng chỉ số sẽ tạo đúng dãy hệ số được in.
Lời giải tóm tắt
Thuật toán: 1. Xem hai dãy là hai đa thức A(x) và B(x). 2. Chọn Z là lũy thừa hai nhỏ nhất không bé hơn N+M-1; thêm các hệ số 0 đến độ dài Z. 3. NTT thuận hai mảng. Ở miền giá trị tại các căn bậc Z, tích đa thức trở thành phép nhân từng vị trí. 4. Đặt FA[t] = FA[t] * FB[t]. 5. NTT ngược, nhân mọi phần tử với Z^{-1}, rồi lấy N+M-1 phần tử đầu.
Thuật toán: Mã dùng modulus 998244353 = 119*2^23+1 và căn nguyên thủy 3, nên mọi độ dài lũy thừa hai đến 2^23 đều hợp lệ.
Chứng minh đúng: NTT là phép đánh giá đa thức tại các lũy thừa của một căn nguyên thủy. Với mỗi điểm w^t, ta có (A*B)(w^t)=A(w^t)B(w^t). NTT ngược là phép nội suy duy nhất trong trường, vì vậy dãy thu được chính là hệ số tích A(x)B(x). Việc đệm 0 ngăn tích chập vòng chồng lên phần cần lấy.
Độ phức tạp: Thời gian O(Z log Z), bộ nhớ O(Z), với Z = 2^ceil(log2(N+M-1)).