library_checker/polynomial/sqrt_of_formal_power_series_sparse.rs
1use competitive::prelude::*;
2use competitive::{math::Fps998244353, num::Zero as _, num::montgomery::MInt998244353 as M};
3
4#[verify::library_checker("sqrt_of_formal_power_series_sparse")]
5pub fn sqrt_of_formal_power_series_sparse(reader: impl Read, writer: impl Write) {
6 prepare_io!(reader, writer);
7 sc!(n, k);
8 let mut a = vec![M::zero(); n];
9 for _ in 0..k {
10 sc!(i, a_i: M);
11 a[i] = a_i;
12 }
13 let f = Fps998244353::from_vec(a);
14 if let Some(g) = f.sqrt(n) {
15 pp!(@it g.data);
16 } else {
17 pp!("-1");
18 }
19}