use anyhow::Result;
pub trait Solver<I, S> {
fn solve(
&self,
n: usize,
a_i: &[I],
a_p: &[I],
a_x: &[S],
b: &mut [S],
trans: bool,
) -> Result<()>;
}
pub trait FactorSolver<I, S, F> {
fn factor(&self, n: usize, a_i: &[I], a_p: &[I], a_x: &[S]) -> Result<F>;
fn solve(&self, f: &F, b: &mut [S], trans: bool) -> Result<()>;
}