dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
pub fn count_toposort(
    adj_bits: &[usize],
    modulus: usize,
) -> usize {
    let g = adj_bits;

    let n = g.len();

    let mut dp = vec![0; 1 << n];

    dp[0] = 1;

    for s in 0..1 << n {
        for i in 0..n {
            if s >> i & 1 == 1 || g[i] & s != 0 {
                continue;
            }

            let t = s | 1 << i;

            dp[t] = (dp[t] + dp[s]) % modulus;
        }
    }

    *dp.last().unwrap()
}

#[cfg(test)]

mod tests {

    #[test]

    fn test() {}
}