malachite-nz 0.3.2

The bignum types Natural and Integer, with efficient algorithms partially derived from GMP and FLINT
Documentation
use malachite_base::num::arithmetic::traits::{
    CeilingDivAssignNegMod, CeilingDivNegMod, DivAssignMod, DivAssignRem, DivMod, DivRem, DivRound,
    NegMod, PowerOf2,
};
use malachite_base::num::basic::integers::PrimitiveInt;
use malachite_base::num::basic::traits::{One, Two, Zero};
use malachite_base::num::conversion::traits::{ExactFrom, JoinHalves};
#[cfg(feature = "32_bit_limbs")]
use malachite_base::num::logic::traits::LeadingZeros;
use malachite_base::num::logic::traits::LowMask;
use malachite_base::rounding_modes::RoundingMode;
use malachite_base::test_util::generators::common::GenConfig;
use malachite_base::test_util::generators::{
    unsigned_gen_var_12, unsigned_pair_gen_var_12, unsigned_pair_gen_var_35,
    unsigned_vec_pair_gen_var_11, unsigned_vec_triple_gen_var_50, unsigned_vec_triple_gen_var_51,
    unsigned_vec_triple_gen_var_53, unsigned_vec_unsigned_pair_gen_var_22,
    unsigned_vec_unsigned_vec_unsigned_triple_gen_var_13,
};
use malachite_nz::natural::arithmetic::div_mod::{
    limbs_div_limb_in_place_mod, limbs_div_limb_mod, limbs_div_limb_to_out_mod, limbs_div_mod,
    limbs_div_mod_barrett, limbs_div_mod_barrett_scratch_len, limbs_div_mod_by_two_limb_normalized,
    limbs_div_mod_divide_and_conquer, limbs_div_mod_extra, limbs_div_mod_extra_in_place,
    limbs_div_mod_schoolbook, limbs_div_mod_three_limb_by_two_limb, limbs_div_mod_to_out,
    limbs_invert_approx, limbs_invert_basecase_approx, limbs_invert_limb,
    limbs_invert_newton_approx, limbs_two_limb_inverse_helper,
};
use malachite_nz::natural::Natural;
use malachite_nz::platform::{DoubleLimb, Limb};
use malachite_nz::test_util::generators::{
    large_type_gen_var_11, large_type_gen_var_12, large_type_gen_var_18, large_type_gen_var_19,
    natural_gen, natural_gen_var_2, natural_pair_gen_var_5, natural_pair_gen_var_6,
    unsigned_sextuple_gen_var_2, unsigned_vec_quadruple_gen_var_1,
    unsigned_vec_quadruple_gen_var_5,
};
use malachite_nz::test_util::natural::arithmetic::div_mod::{
    limbs_div_limb_in_place_mod_alt, limbs_div_limb_in_place_mod_naive,
    limbs_div_limb_to_out_mod_alt, limbs_div_limb_to_out_mod_naive, rug_ceiling_div_neg_mod,
};
use num::{BigUint, Integer};
use rug;
use std::str::FromStr;

#[cfg(feature = "32_bit_limbs")]
#[test]
fn test_limbs_invert_limb() {
    let test = |x: Limb, inv: Limb| {
        assert_eq!(limbs_invert_limb(x), inv);
    };
    test(0x80000000, u32::MAX);
    test(0x80000001, 0xfffffffc);
    test(0x80000002, 0xfffffff8);
    test(0x89abcdef, 0xdc08767e);
    test(0xfffffffd, 3);
    test(u32::MAX - 1, 2);
    test(u32::MAX, 1);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
fn test_limbs_div_limb_mod_and_limbs_div_limb_in_place_mod() {
    let test = |ns: &[Limb], d: Limb, q: Vec<Limb>, r: Limb| {
        let (q_alt, r_alt) = limbs_div_limb_mod(ns, d);
        assert_eq!(q_alt, q);
        assert_eq!(r_alt, r);
        let old_ns = ns;

        let mut ns = old_ns.to_vec();
        assert_eq!(limbs_div_limb_in_place_mod(&mut ns, d), r);
        assert_eq!(ns, q);

        let mut ns = old_ns.to_vec();
        assert_eq!(limbs_div_limb_in_place_mod_alt(&mut ns, d), r);
        assert_eq!(ns, q);

        let mut ns = old_ns.to_vec();
        assert_eq!(limbs_div_limb_in_place_mod_naive(&mut ns, d), r);
        assert_eq!(ns, q);
    };
    test(&[0, 0], 2, vec![0, 0], 0);
    test(&[6, 7], 1, vec![6, 7], 0);
    test(&[6, 7], 2, vec![0x80000003, 3], 0);
    test(&[100, 101, 102], 10, vec![1288490198, 858993469, 10], 8);
    test(&[123, 456], 789, vec![2482262467, 0], 636);
    test(&[u32::MAX, u32::MAX], 2, vec![u32::MAX, 0x7fffffff], 1);
    test(&[u32::MAX, u32::MAX], 3, vec![0x55555555, 0x55555555], 0);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_limb_mod_fail_1() {
    limbs_div_limb_mod(&[10], 10);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_limb_mod_fail_2() {
    limbs_div_limb_mod(&[10, 10], 0);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_limb_in_place_mod_fail_1() {
    limbs_div_limb_in_place_mod(&mut [10], 10);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_limb_in_place_mod_fail_2() {
    limbs_div_limb_in_place_mod(&mut [10, 10], 0);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
fn test_limbs_div_limb_to_out_mod() {
    let test = |out_before: &[Limb], ns: &[Limb], d: Limb, r: Limb, out_after: &[Limb]| {
        let mut out = out_before.to_vec();
        assert_eq!(limbs_div_limb_to_out_mod(&mut out, ns, d), r);
        assert_eq!(out, out_after);

        let mut out = out_before.to_vec();
        assert_eq!(limbs_div_limb_to_out_mod_alt(&mut out, ns, d), r);
        assert_eq!(out, out_after);

        let mut out = out_before.to_vec();
        assert_eq!(limbs_div_limb_to_out_mod_naive(&mut out, ns, d), r);
        assert_eq!(out, out_after);
    };
    test(&[10, 10, 10, 10], &[0, 0], 2, 0, &[0, 0, 10, 10]);
    test(&[10, 10, 10, 10], &[6, 7], 1, 0, &[6, 7, 10, 10]);
    test(&[10, 10, 10, 10], &[6, 7], 2, 0, &[0x80000003, 3, 10, 10]);
    test(
        &[10, 10, 10, 10],
        &[100, 101, 102],
        10,
        8,
        &[1288490198, 858993469, 10, 10],
    );
    test(
        &[10, 10, 10, 10],
        &[123, 456],
        789,
        636,
        &[2482262467, 0, 10, 10],
    );
    test(
        &[10, 10, 10, 10],
        &[u32::MAX, u32::MAX],
        2,
        1,
        &[u32::MAX, 0x7fffffff, 10, 10],
    );
    test(
        &[10, 10, 10, 10],
        &[u32::MAX, u32::MAX],
        3,
        0,
        &[0x55555555, 0x55555555, 10, 10],
    );
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_limb_to_out_mod_fail_1() {
    limbs_div_limb_to_out_mod(&mut [10], &[10], 10);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_limb_to_out_mod_fail_2() {
    limbs_div_limb_to_out_mod(&mut [10, 10], &[10, 10], 0);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_limb_to_out_mod_fail_3() {
    limbs_div_limb_to_out_mod(&mut [10], &[10, 10], 10);
}

fn verify_limbs_div_mod_extra(
    original_out: &[Limb],
    fraction_len: usize,
    ns: &[Limb],
    d: Limb,
    out: &[Limb],
    r: Limb,
) {
    let out_len = ns.len() + fraction_len;
    let mut extended_ns = vec![0; out_len];
    extended_ns[fraction_len..].copy_from_slice(ns);
    let n = Natural::from_owned_limbs_asc(extended_ns);
    let d = Natural::from(d);
    let (expected_q, expected_r) = (&n).div_mod(&d);
    let q = Natural::from_limbs_asc(&out[..out_len]);
    assert_eq!(q, expected_q);
    assert_eq!(r, expected_r);
    assert_eq!(&out[out_len..], &original_out[out_len..]);
    assert!(r < d);
    assert_eq!(q * d + Natural::from(r), n);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
fn test_limbs_div_mod_extra() {
    let test = |out_before: &[Limb],
                fraction_len: usize,
                ns: &[Limb],
                d: Limb,
                r: Limb,
                out_after: &[Limb]| {
        let mut out = out_before.to_vec();
        let shift = LeadingZeros::leading_zeros(d);
        let d_inv = limbs_invert_limb(d << shift);
        assert_eq!(
            limbs_div_mod_extra(&mut out, fraction_len, ns, d, d_inv, shift),
            r
        );
        assert_eq!(out, out_after);
        verify_limbs_div_mod_extra(out_before, fraction_len, ns, d, &out, r);
    };
    // shift != 0
    // ns_last >= d
    // !ns.is_empty()
    test(&[10, 10, 10, 10], 0, &[123], 7, 4, &[17, 10, 10, 10]);
    test(
        &[10, 10, 10, 10],
        1,
        &[123],
        7,
        2,
        &[2454267026, 17, 10, 10],
    );
    test(
        &[10, 10, 10, 10],
        0,
        &[123, 456],
        7,
        1,
        &[613566774, 65, 10, 10],
    );
    test(
        &[10, 10, 10, 10],
        1,
        &[123, 456],
        7,
        4,
        &[613566756, 613566774, 65, 10],
    );
    // ns_last < d
    // ns.is_empty()
    test(&[10; 3], 0, &[1], 2, 1, &[0, 10, 10]);
    test(&[10; 4], 0, &[0, 1], 2, 0, &[0x80000000, 0, 10, 10]);
    // shift == 0
    test(
        &[10; 10],
        6,
        &[1494880112, 1342788885],
        3459538423,
        503849941,
        &[
            3112466029, 4165884652, 3488895153, 1476752580, 2095685273, 2437515973, 1667053127, 0,
            10, 10,
        ],
    );
    test(
        &[10; 3],
        0,
        &[3702397177],
        3086378613,
        616018564,
        &[1, 10, 10],
    );
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_mod_extra_fail_1() {
    let d = 7;
    let shift = LeadingZeros::leading_zeros(d);
    let d_inv = limbs_invert_limb(d << shift);
    limbs_div_mod_extra(&mut [10; 2], 1, &[123, 456], d, d_inv, shift);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_mod_extra_fail_2() {
    limbs_div_mod_extra(&mut [10; 4], 1, &[123, 456], 0, 0, 0);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_mod_extra_fail_3() {
    let d = 7;
    let shift = LeadingZeros::leading_zeros(d);
    let d_inv = limbs_invert_limb(d << shift);
    limbs_div_mod_extra(&mut [10; 4], 1, &[], d, d_inv, shift);
}

fn verify_limbs_div_mod_extra_in_place(
    original_ns: &[Limb],
    fraction_len: usize,
    d: Limb,
    ns: &[Limb],
    r: Limb,
) {
    let mut extended_ns = vec![0; ns.len()];
    extended_ns[fraction_len..].copy_from_slice(&original_ns[fraction_len..]);
    let n = Natural::from_owned_limbs_asc(extended_ns);
    let d = Natural::from(d);
    let (expected_q, expected_r) = (&n).div_mod(&d);
    let q = Natural::from_limbs_asc(ns);
    assert_eq!(q, expected_q);
    assert_eq!(r, expected_r);
    assert!(r < d);
    assert_eq!(q * d + Natural::from(r), n);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
fn test_limbs_div_mod_extra_in_place() {
    let test = |ns_before: &[Limb], fraction_len: usize, d: Limb, r: Limb, ns_after: &[Limb]| {
        let mut ns = ns_before.to_vec();
        let shift = LeadingZeros::leading_zeros(d);
        let d_inv = limbs_invert_limb(d << shift);
        assert_eq!(
            limbs_div_mod_extra_in_place(&mut ns, fraction_len, d, d_inv, shift),
            r
        );
        assert_eq!(ns, ns_after);
        verify_limbs_div_mod_extra_in_place(ns_before, fraction_len, d, &ns, r);
    };
    // shift != 0
    // ns_last >= d
    // !ns.is_empty()
    test(&[123], 0, 7, 4, &[17]);
    test(&[10, 123], 1, 7, 2, &[2454267026, 17]);
    test(&[123, 456], 0, 7, 1, &[613566774, 65]);
    test(&[10, 123, 456], 1, 7, 4, &[613566756, 613566774, 65]);
    // ns_last < d
    // ns.is_empty()
    test(&[1], 0, 2, 1, &[0]);
    test(&[0, 1], 0, 2, 0, &[0x80000000, 0]);
    // shift == 0
    test(
        &[10, 10, 10, 10, 10, 10, 1494880112, 1342788885],
        6,
        3459538423,
        503849941,
        &[3112466029, 4165884652, 3488895153, 1476752580, 2095685273, 2437515973, 1667053127, 0],
    );
    test(&[3702397177], 0, 3086378613, 616018564, &[1]);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_mod_extra_in_place_fail_1() {
    limbs_div_mod_extra_in_place(&mut [0, 123, 456], 1, 0, 0, 0);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_mod_extra_in_place_fail_2() {
    let d = 7;
    let shift = LeadingZeros::leading_zeros(d);
    let d_inv = limbs_invert_limb(d << shift);
    limbs_div_mod_extra_in_place(&mut [], 0, d, d_inv, shift);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
#[should_panic]
fn limbs_div_mod_extra_in_place_fail_3() {
    let d = 7;
    let shift = LeadingZeros::leading_zeros(d);
    let d_inv = limbs_invert_limb(d << shift);
    limbs_div_mod_extra_in_place(&mut [123, 456], 2, d, d_inv, shift);
}

fn verify_limbs_two_limb_inverse_helper(hi: Limb, lo: Limb, result: Limb) {
    let b = Natural::power_of_2(Limb::WIDTH);
    let b_cubed_minus_1 = Natural::low_mask(Limb::WIDTH * 3);
    let x = Natural::from(DoubleLimb::join_halves(hi, lo));
    let expected_result = &b_cubed_minus_1 / &x - &b;
    assert_eq!(result, expected_result);
    assert!(b_cubed_minus_1 - (Natural::from(result) + b) * &x < x);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
fn test_limbs_two_limb_inverse_helper() {
    let test = |hi, lo, result| {
        assert_eq!(limbs_two_limb_inverse_helper(hi, lo), result);
        verify_limbs_two_limb_inverse_helper(hi, lo, result);
    };
    // hi_product >= lo
    // hi_product >= lo_product_hi
    test(0x80000000, 0, u32::MAX);
    test(0x80000000, 123, u32::MAX);
    test(0x80000123, 1, 0xfffffb74);
    test(u32::MAX, 0, 1);
    // hi_product < lo
    test(u32::MAX, 123, 0);
    test(0xfffff123, 1, 0xedd);
    test(u32::MAX, u32::MAX, 0);
    // hi_product < lo_product_hi
    // !(hi_product > hi || hi_product == hi && lo_product_lo >= lo)
    test(0x80000001, 3, 0xfffffffb);
    // hi_product > hi || hi_product == hi && lo_product_lo >= lo
    test(2325651385, 3907343530, 3636893938);
}

#[test]
#[should_panic]
fn limbs_two_limb_inverse_helper_fail() {
    limbs_two_limb_inverse_helper(0, 10);
}

fn verify_limbs_div_mod_three_limb_by_two_limb(
    n_2: Limb,
    n_1: Limb,
    n_0: Limb,
    d_1: Limb,
    d_0: Limb,
    q: Limb,
    r: DoubleLimb,
) {
    let n = Natural::from_owned_limbs_asc(vec![n_0, n_1, n_2]);
    let d = Natural::from(DoubleLimb::join_halves(d_1, d_0));
    let r = Natural::from(r);
    assert_eq!((&n).div_mod(&d), (Natural::from(q), r.clone()));
    assert!(r < d);
    assert_eq!(Natural::from(q) * d + r, n);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
fn test_limbs_div_mod_three_limb_by_two_limb() {
    let test = |n_2, n_1, n_0, d_1, d_0, q, r| {
        assert_eq!(
            limbs_div_mod_three_limb_by_two_limb(
                n_2,
                n_1,
                n_0,
                d_1,
                d_0,
                limbs_two_limb_inverse_helper(d_1, d_0)
            ),
            (q, r)
        );
        verify_limbs_div_mod_three_limb_by_two_limb(n_2, n_1, n_0, d_1, d_0, q, r);
    };
    // r < d
    // r.upper_half() >= q_0
    test(1, 2, 3, 0x80000004, 5, 1, 0x7ffffffdfffffffe);
    test(2, 0x40000000, 4, 0x80000000, 0, 4, 0x4000000000000004);
    // r >= d
    // r.upper_half() < q_0
    test(
        1614123406,
        3687984980,
        2695202596,
        2258238141,
        1642523191,
        3069918587,
        274277675918877623,
    );
}

fn verify_limbs_div_mod_by_two_limb_normalized(
    qs_in: &[Limb],
    ns_in: &[Limb],
    ds: &[Limb],
    q_highest: bool,
    qs_out: &[Limb],
    ns_out: &[Limb],
) {
    let n = Natural::from_limbs_asc(ns_in);
    let d = Natural::from_limbs_asc(ds);
    let (expected_q, expected_r) = (&n).div_mod(&d);
    let base_q_len = ns_in.len() - 2;
    let mut qs = qs_out[..base_q_len].to_vec();
    if q_highest {
        qs.push(1);
    }
    let q = Natural::from_owned_limbs_asc(qs);
    let r = Natural::from_limbs_asc(&ns_out[..2]);
    assert_eq!(q, expected_q);
    assert_eq!(r, expected_r);
    assert_eq!(&qs_in[base_q_len..], &qs_out[base_q_len..]);
    assert_eq!(&ns_in[2..], &ns_out[2..]);

    assert!(r < d);
    assert_eq!(q * d + r, n);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
fn test_limbs_div_mod_by_two_limb_normalized() {
    let test = |qs_in: &[Limb], ns_in: &[Limb], ds, q_highest, qs_out: &[Limb], ns_out: &[Limb]| {
        let mut qs = qs_in.to_vec();
        let mut ns = ns_in.to_vec();
        assert_eq!(
            limbs_div_mod_by_two_limb_normalized(&mut qs, &mut ns, ds),
            q_highest
        );
        assert_eq!(qs, qs_out);
        assert_eq!(ns, ns_out);
        verify_limbs_div_mod_by_two_limb_normalized(qs_in, ns_in, ds, q_highest, &qs, &ns);
    };
    // !highest_q
    test(&[10], &[1, 2], &[3, 0x80000000], false, &[10], &[1, 2]);
    test(
        &[10, 10, 10, 10],
        &[1, 2, 3, 4, 5],
        &[3, 0x80000000],
        false,
        &[4294967241, 7, 10, 10],
        &[166, 2147483626, 3, 4, 5],
    );
    // highest_q
    test(
        &[0, 0],
        &[4142767597, 2922703399, 3921445909],
        &[2952867570, 2530544119],
        true,
        &[2360708771, 0],
        &[3037232599, 1218898013, 3921445909],
    );
}

#[test]
#[should_panic]
fn limbs_div_mod_by_two_limb_normalized_fail_1() {
    limbs_div_mod_by_two_limb_normalized(&mut [10], &mut [1, 2], &[3, 4]);
}

#[test]
#[should_panic]
fn limbs_div_mod_by_two_limb_normalized_fail_2() {
    limbs_div_mod_by_two_limb_normalized(&mut [10], &mut [1, 2], &[3, 0x80000000, 4]);
}

#[test]
#[should_panic]
fn limbs_div_mod_by_two_limb_normalized_fail_3() {
    limbs_div_mod_by_two_limb_normalized(&mut [10], &mut [1, 2, 3, 4], &[3, 0x80000000]);
}

fn verify_limbs_div_mod_1(
    qs_in: &[Limb],
    ns_in: &[Limb],
    ds: &[Limb],
    q_highest: bool,
    qs_out: &[Limb],
    ns_out: &[Limb],
) {
    let n = Natural::from_limbs_asc(ns_in);
    let d = Natural::from_limbs_asc(ds);
    let (expected_q, expected_r) = (&n).div_mod(&d);
    let base_q_len = ns_in.len() - ds.len();
    let mut qs = qs_out[..base_q_len].to_vec();
    if q_highest {
        qs.push(1);
    }
    let q = Natural::from_owned_limbs_asc(qs);
    let r = Natural::from_limbs_asc(&ns_out[..ds.len()]);
    assert_eq!(q, expected_q);
    assert_eq!(r, expected_r);
    assert_eq!(&qs_in[base_q_len..], &qs_out[base_q_len..]);
    assert!(r < d);
    assert_eq!(q * d + r, n);
}

#[test]
fn test_limbs_div_mod_schoolbook() {
    let test = |qs_in: &[Limb],
                ns_in: &[Limb],
                ds: &[Limb],
                q_highest,
                qs_out: &[Limb],
                ns_out: &[Limb]| {
        let mut qs = qs_in.to_vec();
        let mut ns = ns_in.to_vec();
        let inv = limbs_two_limb_inverse_helper(ds[ds.len() - 1], ds[ds.len() - 2]);
        assert_eq!(
            limbs_div_mod_schoolbook(&mut qs, &mut ns, ds, inv),
            q_highest
        );
        assert_eq!(qs, qs_out);
        assert_eq!(ns, ns_out);
        verify_limbs_div_mod_1(qs_in, ns_in, ds, q_highest, &qs, &ns);
    };
    #[cfg(feature = "32_bit_limbs")]
    {
        // !highest_q
        test(
            &[10],
            &[1, 2, 3],
            &[3, 4, 0x80000000],
            false,
            &[10],
            &[1, 2, 3],
        );
        // !(n_1 == d_1 && ns[i - 1] == d_0)
        // !carry
        test(
            &[10, 10, 10, 10],
            &[1, 2, 3, 4, 5, 6],
            &[3, 4, 0x80000000],
            false,
            &[4294967207, 9, 12, 10],
            &[268, 328, 2147483575, 4294967251, 5, 6],
        );
        // carry
        test(
            &[10],
            &[0, 0, 0, 1],
            &[1, 0, 0x80000000],
            false,
            &[1],
            &[u32::MAX, u32::MAX, 0x7fffffff, 1],
        );
        // highest_q
        test(
            &[10; 10],
            &[
                2460989955, 642673607, 1971681331, 2338977519, 475442971, 2516527409, 3470931196,
                4262052990,
            ],
            &[
                1430162564, 1873089879, 3090281851, 2861182896, 2502166555, 2486624904, 960387080,
                3073064701,
            ],
            true,
            &[10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
            &[
                1030827391, 3064551024, 3176366775, 3772761918, 2268243711, 29902504, 2510544116,
                1188988289,
            ],
        );
        // n_1 == d_1 && ns[i - 1] == d_0
        test(
            &[10; 8],
            &[
                0,
                0x4000000,
                0xfffff000,
                63,
                4294443008,
                u32::MAX,
                u32::MAX,
                8388575,
                4294836224,
                0x3fffffff,
            ],
            &[33554304, 4294443008, u32::MAX],
            false,
            &[0, 4294443008, u32::MAX, u32::MAX, u32::MAX, u32::MAX, 0x3fffffff, 10],
            &[
                0,
                0,
                0,
                4294443072,
                0xfff00000,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                4294836224,
                0x3fffffff,
            ],
        );
    }
    #[cfg(not(feature = "32_bit_limbs"))]
    {
        test(
            &[10; 17],
            &[
                9995257893114397114,
                9401504468144459131,
                558615837638945228,
                10733662027974786928,
                18295107704289976677,
                1814706268673753787,
                12474943759854623335,
                8814778832826774208,
                9159057654048965906,
                4451260977376821357,
                18241701617364042056,
                6169989192350218482,
                15071965537117101028,
                13509168527678537782,
                12224278653171635329,
                16077066393714953826,
                1433938684868066489,
                13014970036232570373,
                899282336249563956,
                3089487642230339536,
                3787737519477527148,
                16667686214395942740,
                8787122953224574943,
                7841835218775877827,
                9693303502025838409,
                16122224776459879427,
                144327425397945219,
            ],
            &[
                2350654041004706911,
                7834348511584604247,
                12756796070221345724,
                3842923787777653903,
                12373799197090248752,
                9712029403347085570,
                1426676505264168302,
                10586232903332693517,
                8387833601131974459,
                6290888746273553243,
                9503969704425173615,
            ],
            false,
            &[
                89235393247566392,
                5198286616477507104,
                15671556528191444298,
                6642842185819876016,
                1703950202232719208,
                6620591674460885314,
                9897211438557358662,
                12382449603707212210,
                13586842887558233290,
                11884313943008627054,
                3205830138969300059,
                4257812936318957065,
                11084100237971796628,
                13937343901544333624,
                11743372027422931451,
                280132530083052382,
                10,
            ],
            &[
                12688955427180652274,
                7641660693922643933,
                8789985477567049482,
                5698832637416200787,
                14684840547760545685,
                2822100467869581421,
                3557573565928866957,
                4409631974409684922,
                16994214656621423610,
                4513108841166793667,
                9009005527785483287,
                4330767427200269309,
                11409205475757922767,
                12430752173702915207,
                11990819624778098799,
                4145020291153594556,
                7099200056207569977,
                3510167930325480168,
                4731667122118327121,
                10720310942075546738,
                5799804483118787221,
                17268037247251138479,
                13305947798457087249,
                1405091439325174594,
                13072181651983436371,
                16122224776459879427,
                144327425397945219,
            ],
        )
    }
}

#[test]
#[should_panic]
fn limbs_div_mod_schoolbook_fail_1() {
    let ds = &[3, 0x80000000];
    let inv = limbs_two_limb_inverse_helper(ds[ds.len() - 1], ds[ds.len() - 2]);
    limbs_div_mod_schoolbook(&mut [10], &mut [1, 2, 3], ds, inv);
}

#[test]
#[should_panic]
fn limbs_div_mod_schoolbook_fail_2() {
    let ds = &[3, 4, 5, 0x80000000];
    let inv = limbs_two_limb_inverse_helper(ds[ds.len() - 1], ds[ds.len() - 2]);
    limbs_div_mod_schoolbook(&mut [10], &mut [1, 2, 3], ds, inv);
}

#[test]
#[should_panic]
fn limbs_div_mod_schoolbook_fail_3() {
    let ds = &[3, 4, 0x80000000];
    let inv = limbs_two_limb_inverse_helper(ds[ds.len() - 1], ds[ds.len() - 2]);
    limbs_div_mod_schoolbook(&mut [10], &mut [1, 2, 3, 4, 5], ds, inv);
}

#[test]
#[should_panic]
fn limbs_div_mod_schoolbook_fail_4() {
    let ds = &[3, 4, 5];
    let inv = limbs_two_limb_inverse_helper(ds[ds.len() - 1], ds[ds.len() - 2]);
    limbs_div_mod_schoolbook(&mut [10], &mut [1, 2, 3], ds, inv);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
fn test_limbs_div_mod_divide_and_conquer() {
    let test = |qs_in: &[Limb],
                ns_in: &[Limb],
                ds: &[Limb],
                q_highest,
                qs_out: &[Limb],
                ns_out: &[Limb]| {
        let mut qs = qs_in.to_vec();
        let mut ns = ns_in.to_vec();
        let ds_len = ds.len();
        let inv = limbs_two_limb_inverse_helper(ds[ds_len - 1], ds[ds_len - 2]);
        assert_eq!(
            limbs_div_mod_divide_and_conquer(&mut qs, &mut ns, ds, inv),
            q_highest
        );
        assert_eq!(qs, qs_out);
        assert_eq!(&ns[..ds_len], ns_out);
        verify_limbs_div_mod_1(qs_in, ns_in, ds, q_highest, &qs, &ns);
    };
    // q_len <= d_len
    // q_len < DC_DIV_QR_THRESHOLD
    // m != 0
    test(
        &[10; 4],
        &[1, 2, 3, 4, 5, 6, 7, 8, 9],
        &[3, 4, 5, 6, 7, 0x80000000],
        false,
        &[4294967057, 15, 18, 10],
        &[718, 910, 1080, 1286, 1492, 2147483434],
    );
    // carry != 0 second time
    test(
        &[0; 3],
        &[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
        &[0, 0, 0, 0, 1, 0, 0, 0x80000000],
        false,
        &[1, 0, 0],
        &[0, 0, 0, 0, u32::MAX, u32::MAX, u32::MAX, 0x7fffffff],
    );
    // highest_q third time
    test(
        &[
            1341443830, 680228019, 2358294753, 4240552485, 4220791420, 3445360969, 1267691556,
            3340881424, 992535572, 1421700486, 4136881179,
        ],
        &[
            342694080, 2041952014, 1126110022, 386493367, 2712278177, 1646877232, 868323005,
            1128141558, 2508964077, 2270408768, 413397861, 276293957, 2413870149, 3904853505,
            1276303079, 2556190902, 3967785388, 2803311564, 1963309088, 2281251697, 108392083,
            3821172642, 2048710986, 445614759, 2901896991, 3601903082, 1748962330, 658337341,
            3756770944, 2926642090, 7482898, 2241569433, 3381544088, 3275875595, 3036252835,
            2075586864, 1267727773, 221607050, 3946214050, 921175728, 655433083, 3594825352,
            1857831165, 3460211778, 2710641188, 1271591399, 263125866, 3619333728, 1041602820,
            3231202083, 259949419, 4156557841, 3419638674, 3270070813, 2084018311, 2951772182,
            860428573, 1138531819, 71044931, 3406637788, 3662652535, 3741808197, 86584983,
            1543795459, 160951322, 1039367499, 2428548772, 3604743617, 1138310711, 2881638514,
            2899388867, 3501166651, 161644747, 2395978477, 2682256494, 3417971200, 624066885,
            1772236754, 48275686, 3979745914, 2458268763, 2470110876, 3143857674, 3359279240,
            46246098, 2912257532, 2916568936,
        ],
        &[
            4267671814, 3181376526, 4204274026, 2772982826, 171341955, 3239339748, 83269891,
            2325049318, 746305994, 1290717192, 1805639230, 1856363646, 3445599715, 1388597950,
            2699498310, 246990054, 1396771726, 265087723, 3372840761, 3260397695, 2010115470,
            2211074582, 1883962263, 256363687, 4012920099, 2367091978, 1485341992, 1836339208,
            1434180757, 2616877872, 1145425491, 1261399773, 3926766027, 3115015865, 1741783714,
            3802513218, 4081750672, 3856503286, 2137512595, 1192985123, 1863041957, 700637154,
            2503934926, 2021744810, 157763047, 453501781, 1898727251, 3741166728, 105996483,
            3390681922, 1127471458, 4229032301, 254843851, 2729237155, 1707011850, 1756734415,
            1864969309, 96539023, 220456923, 3061776324, 1741151628, 1199010536, 2099212259,
            3095715999, 1369052975, 2575251120, 1821995904, 4169452262, 3299830336, 666854626,
            3647011057, 3965571435, 1551218489, 726151433, 1730753749, 750433250, 2084548637,
            475638490, 3209308986, 1536371286, 3458731894, 451976715, 1463077982, 2401462738,
        ],
        true,
        &[
            4074815036, 3472841870, 921256965, 4240552485, 4220791420, 3445360969, 1267691556,
            3340881424, 992535572, 1421700486, 4136881179,
        ],
        &[
            50882392, 3543059939, 2606418187, 171797978, 3702339267, 3400795540, 1675838746,
            3131956910, 3246773095, 2366066134, 1942572319, 200951604, 2751524401, 2229461380,
            953596498, 2149080321, 992246008, 2665146762, 3598754770, 101403369, 2364937647,
            3687287854, 3518388658, 3773344884, 2952272227, 2179289728, 3985568008, 2985468384,
            1733586261, 4006520661, 592636589, 1738983882, 3771432433, 334405279, 30528997,
            3353300809, 3694124666, 1257341879, 1142716002, 3178475445, 1431232435, 2733787829,
            2350134046, 162973337, 604966704, 1355497537, 2006066960, 1053669332, 2166548589,
            1297102232, 878976420, 1030095675, 3202690801, 955256572, 1487108550, 2945568597,
            3875785235, 1390419282, 1216776596, 786261001, 3784540042, 1845909951, 1777517834,
            12237310, 475982412, 3059699536, 4125207911, 2924612871, 3238196381, 2479221661,
            1483884124, 433754513, 447002430, 2684532044, 3494064078, 619277683, 2680056541,
            538552294, 1984267024, 700348592, 1278341418, 1614761367, 3944408375, 1269851701,
        ],
    );
    // hi < DC_DIV_QR_THRESHOLD in limbs_div_mod_divide_and_conquer_helper
    // carry != 0 first time in limbs_div_mod_divide_and_conquer_helper
    // lo < DC_DIV_QR_THRESHOLD in limbs_div_mod_divide_and_conquer_helper
    // carry != 0 second time in limbs_div_mod_divide_and_conquer_helper
    // q_len > d_len
    // q_len_mod_d_len == 1
    // 2 < q_len_mod_d_len < DC_DIV_QR_THRESHOLD
    // q_len_mod_d_len != d_len
    // highest_q second time
    // carry != 0 first time
    test(
        &[
            3656551823, 3383257247, 550091805, 1932339117, 3279901067, 2864941409, 3440756420,
            466783416, 651341619, 2318022162, 1201487629, 3064175522, 2345469826, 3581748650,
            2606599593, 3742095121,
        ],
        &[
            3689695988, 3117118992, 1237207334, 1180101208, 2947083336, 2827697081, 221923985,
            2507264800, 619323315, 1516562901, 3186068769, 1013769776, 1271582351, 1669896397,
            2497959088, 3504047880, 4212568439, 1608150067, 4150555892, 374787916, 889323122,
            3833122938, 4262272989,
        ],
        &[
            3226059476, 722714803, 1915993039, 2160412527, 1484228011, 1715426198, 1611850737,
            3097214810,
        ],
        true,
        &[
            3948774568, 277233294, 951139522, 4214130560, 3551225641, 3386184722, 1565143611,
            2922369553, 2764255027, 5466750, 2823931470, 3552636955, 545484857, 803194457,
            1615608566, 3742095121,
        ],
        &[
            1074470868, 2174113464, 1715956530, 3963027838, 1871758691, 1809783936, 3173233408,
            1926929270,
        ],
    );
    // hi >= DC_DIV_QR_THRESHOLD in limbs_div_mod_divide_and_conquer_helper
    // lo >= DC_DIV_QR_THRESHOLD in limbs_div_mod_divide_and_conquer_helper
    // q_len_mod_d_len >= DC_DIV_QR_THRESHOLD
    test(
        &[
            2108009976, 2838126990, 827008974, 4157613011, 3782799311, 839921672, 879731301,
            1926496935, 3712149888, 2363043408, 3863476261, 1703718215, 499165670, 2993223230,
            4279694017, 2976095205, 2193242813, 3593708162, 586354096, 296757650, 242624274,
            199363552, 2802933005, 2759687879, 3925865458, 4217980786, 621040829, 4008464542,
            3795907109, 270168250, 3625538473, 759155103, 3959828159, 1835721901, 1818377089,
            114690984, 2967220963, 2377698568, 2241245638, 2252300906, 3116551983, 3644576818,
            2608501946, 2181270779, 1815210824, 1268283136, 484429506, 1180516809, 559610343,
            2543044915, 3719740023, 558939794, 3989231279, 1089033996, 3509826828, 3545449066,
            3353643945, 2822587915, 2300900020, 309191900, 2371088678, 1169317833, 2688462322,
            704882387, 1429447898, 2514029776, 1955158460, 3862686818, 1584130288, 482000750,
            4224830364, 2104097699, 1183456674, 2270729014, 2607655660, 2966545947, 2931252595,
            759652385, 3970839358, 2487392344, 1507124762, 758697388, 3840603988, 1293583672,
            252424514, 646352064, 1756992845, 2309291248, 3392597937, 2946557682, 3659552460,
            1720311830, 3395887210, 2674135679, 3196424053, 2895118562, 1256983146, 2482795730,
            1922474903, 2105232035, 3692384401, 2891711374, 3496171341, 515080177, 4073860792,
            2051799135, 2279442367, 3258846627, 70977295, 1937954703, 2800340027, 1760719187,
            646417623, 3158839049, 3176203007, 213391749, 869819866, 3906922929, 1586646665,
            1614123406, 3687984980, 1177302158, 272342927, 1441818617, 2083855650, 1541781406,
            3311904586, 106907162, 4108429222, 662974012, 4140594255, 1984524179, 3259771450,
            3863443649, 3307256449, 3597197635, 3771753969, 3551628070, 3550518548, 2546464879,
            3812123817, 2299164636, 2258249267, 815945886, 3725185601, 738801212, 3862546442,
            207778311, 1535617953, 2150997157, 729581295, 143725958, 1410055499, 4204574368,
            2185442793, 3653861199, 1767186378, 3537808267, 1766021033, 2239408696, 1986025224,
            3625288948, 4046347844, 2490523057, 3491861717, 1312039469, 597857291, 206880668,
            1812928615, 3684502664, 3820772609, 1327777451, 1237379465, 764273090, 3594853086,
            2859643842, 1243019386, 3444655918, 1596721727, 2221238575, 2483346164, 2064518283,
            2282844430, 1960424205, 4028198846, 2342293800, 1645322170, 3508868511, 2376856302,
            1764497492, 2461899059, 3430260828, 1083983032, 1448541077, 2081767380, 1131293272,
            2121152826, 4212689224, 2039367869, 2193844060, 1864700761, 1182989130, 1481869846,
            969270162, 3997775597, 1483663077, 394034269, 1586435653, 2281434261, 1937512315,
            836935557, 59742568, 1854699653, 2116629465, 328821302, 1999851100, 604863759,
            556389113, 2057620108, 1992554416, 427465103, 813735424, 487055225, 402647361,
            3006998394, 2146302389, 2308517156, 1063328348, 2382344201, 2665908320, 481118926,
            2376219143, 1164055989, 128362737, 2711666601, 1898018298, 2928344090, 3862251511,
            749517272, 2790599579, 3506539103, 2592038317, 1682088920, 1332639030, 3053921374,
            3066891587, 242466377, 3536065834, 2016487096, 1321862427, 2409873623, 3088797737,
            2840818323, 2052021858, 4079299898, 452968540, 3880575723, 2680668784, 1502544423,
            1619882634, 1068420458, 3236073318, 1740351058, 1183565882, 2761799103, 246817911,
            2967032269, 4003972840, 969974269, 3193561842, 1002645557, 2347161653, 4272895273,
            1522072178, 972383725, 3026624523, 434293193, 2855690795, 2455822196, 2413168892,
            2999634230, 784531194, 249556803, 2559695464, 3131798530, 668810109, 2114036394,
            2861740558, 370716909, 2126014070, 3913884200, 1577476936, 855642956, 2074597201,
            3461659621, 3292762038, 2153122643, 1658901071, 1562860969, 501980289, 1611843440,
            2433026108, 3791871978,
        ],
        &[
            2325147333, 1406197332, 1502532645, 137754493, 1488912421, 1014222449, 1678300831,
            2078887154, 2311629707, 3855402290, 1904906031, 1350026944, 314061674, 919972212,
            1429252796, 544807358, 2607111216, 3001219316, 160533550, 2875169678, 1402474615,
            3234840532, 1662112023, 1943050521, 4132256985, 2915369430, 699620367, 59590583,
            2461837586, 3986106860, 2659659366, 3589796255, 4168995860, 2337625655, 4292546333,
            1793085295, 2647770730, 2871508164, 2660729400, 3630964395, 3874212033, 1240042620,
            1713051992, 2105061240, 968807145, 3026819276, 2442427316, 2718248469, 2572140009,
            1793916894, 2112926236, 1058005225, 1528978151, 98430379, 3348888463, 2121431457,
            3545708238, 3975070402, 764453596, 192861224, 2698588322, 1493819664, 2502294971,
            3139295505, 1318649192, 1552623529, 2989328476, 1592829691, 1175278450, 182489613,
            1858350437, 2440903999, 1622786339, 162763913, 4106583944, 609833788, 1344925844,
            3910333895, 1369398307, 51929280, 2214052160, 78601532, 642016948, 3966440550,
            4161875340, 3764174238, 2944905670, 832634369, 2082700552, 3444794582, 962611192,
            38510846, 2733538376, 2141542785, 621670923, 3130866640, 1666281368, 3628581169,
            3965100367, 2889091703, 762371524, 3752935086, 656901001, 2374421435, 3084212494,
            1186140919, 3420046356, 775236355, 1337865306, 2051118555, 713071112, 1946850844,
            1427068060, 3949026319, 3075128554, 438166063, 3975561046, 858907746, 26964870,
            3843362808, 1461820702, 3090970200, 1037540471, 289966660, 2768763862, 50890120,
            580189324, 2911422550, 3684738914, 2025034397, 414622319, 2287243961, 3268939669,
            3547523099, 4011963324, 1768695320, 1859343614, 2123856143, 4141054481, 765801396,
            359993985, 3668605792, 3613648266, 1778728280, 2547397231, 2456061149, 2562918666,
            2903450513, 1994190773, 99234624, 3722083920, 4262323306, 202219441, 4201857695,
            3988878636, 1533308334, 401400520, 1069756554, 2457773969, 2892388936, 3423117995,
            1944069442, 492036629, 3426800580, 2282483359, 4006366620, 1695364515, 2555180845,
            1669287836, 349290429, 778467450, 2020203604, 2218159817, 1450404019, 1278304750,
            2412695340, 1592154884, 3868182043, 2240370481, 3859902860, 1008825116, 412233394,
            2475457637, 3664379433, 4204584226, 2750684469, 4113507475, 2916584959, 285955744,
            739598569, 18278051, 3768126932, 2181905109, 2612988076, 1827656088, 1160380415,
            4160443718, 1846086671, 3050604645, 2547108010, 2828666778, 3252702258, 3885923576,
            2331974758, 730724707, 1528859315, 4288784328, 3677151116, 445199233, 3304488688,
            3566979465, 3541025426, 2491779846, 3112990742, 2583249486, 3403111749, 1930721237,
            3428792463, 2896462048, 2985885576, 1819460734, 21206096, 3560441846, 987100555,
            2844904275, 84854892, 1268249628, 3963306788, 3338670067, 2504599089, 65588657,
            321493327, 4249673617, 4150876068, 721566898, 2186945060, 922948272, 1502464627,
            1426914435, 2906888275, 3454987739, 2609132626, 2073366782, 1058809001, 1226951003,
            2624503637, 282722778, 1407178266, 3304346308, 3613017687, 2397594777, 161128076,
            1938083248, 3042822216, 3958145306, 1431161184, 4147630074, 1744618540, 3729847703,
            2366216428, 2101731625, 2812677939, 3587016062, 1626785569, 3117017254, 3720581461,
            4254564252, 2400911475, 750362271, 3062375802, 2182368701, 268751862, 2682134876,
            274793576, 2417658182, 2321240923, 4200603818, 1349142841, 4066976957, 1043247680,
            679021323, 2933095037, 1621487581, 225868669, 1030678959, 1236344244, 972640788,
            1784301152, 578117349, 3509551550, 214420003, 3786992737, 802372148, 3562194086,
            2187046946, 3600373521, 4275090943, 2120016813, 4177241875, 3185774231, 2397692077,
            1015362399, 2178889151, 3433916223, 1688082118, 1971242178, 236388706, 3802829765,
            521309115, 2299816689, 3207614143, 1053195464, 3584561145, 1178690670, 2940812254,
            3321982035, 2754825123, 3073598062, 202404806, 547895545, 1188944547, 1056841779,
            529463805, 204665384, 850370055, 2063320161, 3724100092, 1180272690, 1398467003,
            2814052449, 1311768018, 659771105, 3226477227, 4230080238, 2134344405, 1461172705,
            2728018383, 1816821358, 3231137250, 2012377728, 2206916761, 3121807673, 3037967028,
            3653505029, 4164239058, 1337501466, 2487452346, 428839025, 3321493092, 2920064796,
            2750126813, 3635762100, 2659829309, 1992243088, 2359420187, 861816585, 4182313312,
            1389528266, 2890138969, 2195001695, 576635805, 1974585967, 851480113, 1896534852,
            3143828462, 4276040597, 3921135859, 2394233682, 2692972118, 2103941456, 3931376544,
            3790764632, 2278428793, 3381340311, 3516241824, 2923157557, 1276268033, 3471729699,
            2370137091, 2637023305, 4027814477, 3711009696, 3667995314, 459819000, 1002878772,
            2658190707, 1189561796, 1831813150, 2874008201,
        ],
        &[
            1703326352, 1625259628, 3642322228, 911402341, 2158835226, 939248485, 3607511108,
            2863853568, 1611642161, 1312857772, 1839433327, 567060478, 3139863681, 3642698184,
            3744632443, 712538472, 2692932947, 576185818, 156934113, 518107105, 2803035863,
            2284220097, 3447382922, 2400125006, 3565062840, 160044186, 3644393084, 4196433258,
            3391883838, 1115703759, 2380388002, 962895870, 4001772616, 2311278419, 2620271020,
            3047789793, 3229254302, 3182628087, 2718480927, 2872538422, 1963990826, 2856537226,
            1729736384, 372544200, 1482170753, 3370665422, 305555060, 4060802437, 1456459795,
            2848113958, 1036273297, 3245835346, 3355862097, 3242734427, 3313897419, 4230036415,
            1425594704, 2428756491, 420147714, 3218149930, 1791217142, 2881741659, 3231612869,
            845372829, 1635665046, 1525482197, 3779462557, 2279005731, 626908159, 2963734610,
            215448882, 2517668355, 3294128769, 1167990371, 2344651228, 2882002195, 3350056381,
            3749638142, 476010196, 2304276366, 1088082897, 1927672185, 3316329053, 1174989749,
            1101596429, 3054511229, 1685228241, 2301284206, 2526016461, 684171580, 3869889559,
            2606492401, 2114658735, 1419214215, 2779052449, 2594333668, 2225446358, 1211258458,
            4029343999, 2816277230, 4098142949, 1987363952, 2732004911, 2516355975, 2365350298,
            1747416524, 3951513077, 3526462790,
        ],
        false,
        &[
            1303670916, 3965736473, 654490008, 3337248200, 112312312, 2506678400, 713192736,
            901474194, 2359721047, 1133557120, 3068598661, 3136858413, 4095957211, 3057328754,
            1900588230, 1315930687, 3273808327, 2821746043, 4255148500, 3072995291, 1472014781,
            922081554, 1759317078, 149072645, 2712091402, 2134310281, 708105323, 3703209145,
            2071594694, 8111834, 3766831226, 2182956891, 2525476614, 1478202223, 4199311113,
            3813148212, 316780911, 1396844257, 2321402831, 1151134318, 848673799, 735789140,
            1092813310, 738412079, 1895091662, 2947844274, 31103395, 2559694049, 1194304023,
            3260126654, 1118043028, 1552558623, 3016599055, 1053142289, 446041643, 2615854004,
            2105823819, 3769707039, 2784177611, 9564629, 580911617, 1979035813, 1479556681,
            2599744262, 3097426153, 4195176293, 3497554127, 3484306250, 2114827319, 2314051712,
            1210812068, 4158781103, 478301760, 2027533091, 1682020897, 129914624, 2066167843,
            3989890251, 1378700448, 170057876, 3992582209, 1541347967, 3421610776, 697014638,
            2834243941, 3504973679, 630519426, 1551901326, 3092678418, 1136389639, 1806538485,
            2208151411, 1598302001, 4041410193, 3574334276, 2340664244, 1624426425, 1200740723,
            2912910258, 671197404, 2272603994, 909857936, 792804858, 3083891114, 3143045405,
            2389563439, 115312858, 1445242760, 2065820105, 256586994, 1432132569, 1549619424,
            2631865338, 1674212272, 2599765330, 3713129178, 1590556325, 3610491293, 709987753,
            3230113618, 1606099993, 3453954266, 3501213811, 3278809492, 3770342657, 1534951916,
            1366321311, 3149479124, 3987513652, 2108936446, 1162972378, 279205823, 3711325879,
            2278557694, 2305274058, 3709507652, 3805940202, 3778288085, 1061153771, 491180471,
            479623642, 2960728114, 553156023, 1863065855, 2253455830, 14222934, 2488687289,
            3378176628, 1136227234, 3805644784, 3175842224, 463501844, 2100687360, 2025076951,
            4064921772, 1000043802, 2482142143, 1463585061, 1044328896, 3966669663, 1023595412,
            2689537057, 685044345, 2599439954, 3302022962, 2669841238, 3358991646, 351579450,
            2303934592, 2098132645, 2239011851, 1623838039, 790570033, 2288992150, 2252675624,
            2479618080, 3624986625, 2129338944, 3796999988, 465518072, 620957443, 1836556967,
            2894771224, 2904933718, 287211723, 1386209013, 2288387719, 162551270, 370319691,
            2924564913, 2947669880, 3390862854, 1797811, 3097227838, 2245950593, 1664498395,
            3380635348, 3536484871, 1217287925, 3149066538, 154911037, 1960867817, 4238493382,
            1991791660, 509572665, 3386968719, 3880405816, 2335816696, 2519967410, 3482574698,
            1501302597, 2415671279, 715902305, 1920401004, 3735445496, 1792155851, 2110622431,
            3695395614, 3311496726, 4035668560, 187609524, 3743601469, 2990357125, 3084998227,
            767424914, 1388627321, 1381810466, 3799640235, 1423360242, 3375037167, 979951340,
            3463933333, 387599460, 229837304, 1394766077, 1068156038, 1135935924, 86516134,
            142150630, 448211640, 3205606056, 1420159909, 4203558153, 2816235778, 4188064475,
            1490981561, 2934083684, 2693435736, 1351552613, 962789901, 1071201732, 3244341475,
            1855681940, 4210620238, 2129345127, 2909949483, 3992748944, 3928807766, 2014533910,
            3099391001, 3112195816, 4009296318, 1247610431, 1474512546, 2530880557, 3597268331,
            764359883, 4198267775, 1228639730, 736768887, 396797847, 799410613, 582496441,
            2658423343, 1643853660, 1258585041, 3767032705, 3709454541, 892807168, 1443895160,
            3500326521, 784531194, 249556803, 2559695464, 3131798530, 668810109, 2114036394,
            2861740558, 370716909, 2126014070, 3913884200, 1577476936, 855642956, 2074597201,
            3461659621, 3292762038, 2153122643, 1658901071, 1562860969, 501980289, 1611843440,
            2433026108, 3791871978,
        ],
        &[
            1707334789, 979340170, 3926273349, 2029694660, 686358037, 1260123629, 689471236,
            4127009836, 1697317324, 3024229658, 3968952300, 2265029759, 733830093, 2234057965,
            799627406, 1641742523, 2511563041, 678204198, 60484965, 1732955108, 1348641815,
            1389334445, 3762643904, 3914179461, 4076462931, 3234877741, 2806715190, 3058911852,
            3068848122, 80861952, 660210165, 2035863667, 3882844515, 2652987274, 207029959,
            4170201248, 1224653886, 3554890284, 323203565, 969583090, 2280910221, 2548241625,
            2048045350, 3691775573, 3750377304, 2623340073, 1726676400, 2551234664, 3420452119,
            1785849707, 3581615935, 3521097022, 4008380099, 4200557552, 3795120169, 488463511,
            3784467967, 2462685342, 1684084055, 1072125823, 765304928, 2900468163, 3209242917,
            399160769, 3897765190, 3241572534, 1027203705, 4127226109, 154941175, 1755153596,
            4225252328, 1209101989, 2906888698, 1481930532, 2884731435, 2416462752, 553651049,
            2247421040, 3347507436, 1936621186, 3156059073, 4059864280, 3191940359, 3872902453,
            783002816, 3711047515, 1471051688, 357992570, 1061754510, 3765779801, 4106840335,
            3213049794, 1824410844, 2555550067, 1066295382, 3248869963, 4006861446, 3297772017,
            3418388327, 2284151457, 766215224, 1091253635, 2070830666, 1435103841, 1408352671,
            338399542, 2946293497, 412804347,
        ],
    );
    // q_len >= DC_DIV_QR_THRESHOLD
    test(
        &[
            3333140561, 2349469031, 666934289, 3646788197, 3373340607, 3062489357, 1781577064,
            3971231072, 2027939726, 18149756, 461121573, 1026270057, 4154481498, 3854995191,
            2829169318, 2604923553, 1399568275, 4214150257, 1269657447, 527209086, 559827800,
            1978807620, 1942748659, 3544969161, 760896836, 694370989, 3323597771, 1950755821,
            1740588707, 2716546795, 1636681281, 131422512, 2683077565, 4107286368, 3475458482,
            1406752921, 2741526831, 625075474, 1356017187, 660778033, 4078598031, 2127023485,
            1900179860, 2413773277, 2442990944, 850894581, 1061627184, 2255197913, 490496693,
            400007380, 3092474488, 1228905086, 1949288324, 1866222251, 4084867584, 219026194,
            1513678816, 2415719293, 671740632, 2331463444, 1649508273, 622524186, 36198287,
            385821590, 3891184984, 3888867762, 823766845, 871168771, 4220135146, 3182319759,
            3811051122, 2244319794, 1994956782, 3515960993, 3523512148, 4142104035, 11404747,
            3407068856, 2661473296, 1343912700, 1278923149, 1319603671, 3928437020, 2678906106,
            1133029551, 3498992572, 3960506675, 2156562886, 2180928089, 4027866586, 3363079195,
            2699625088, 10633112, 1776348429, 2657266039, 366882369, 3755249663, 1513004482,
            385462618, 1235118123, 2498536948, 2963795538, 373052379, 4211662453, 1125414031,
            3132282357, 2555861787, 3949045845, 2694335672, 335933961, 2882374566, 3487775198,
            1816750435, 3017829161, 964613564, 159555703, 1822850997, 2275865751, 4158541302,
            2501990511, 3721844651, 2781838144, 1795741626, 377630941, 2137086277, 150771080,
            3410699853, 2181744662, 3165518125, 156617039, 3099687100, 2159351188, 340108091,
            2408725718, 1639869303, 1752843886, 1941447467, 2157946488, 1515895552, 3624132653,
            3556726921, 2697391196, 3650363912, 2596921683, 3641623430, 3884964637, 4229700714,
            1936259996, 3765315225, 4087511128, 746291101, 1752759843, 699518598, 2102672534,
            2335948897, 4138231225, 3162828440, 2881768368, 1254885146, 2977691172, 2250072411,
            2614007259, 2771551612, 776074685, 3162839614, 1471012556, 523323297, 1856466918,
            4090405884, 813410161, 100155385, 1084252628, 1599609446, 139407955, 4121369443,
            1963225032, 2735275753, 100107317, 1064061529, 50786861, 1654370440, 3334472166,
            1385803654, 3881645932, 3538258401, 1238925138, 1307191791, 2439918414, 1853442725,
            3584719283, 2139830944, 1008033673, 2159214266, 1728151904, 2054140804, 2246372905,
            1296034828, 732486414, 4197166746, 2149038695, 2421556216, 2209917678, 2053724924,
            3695308867, 2810551805, 3486105675, 979515789, 2065617241, 3321246575, 4275036932,
            3028497318, 1883398852, 1301060583, 2486427309, 592113155, 2482121819, 53211642,
            3067158128, 2316354328, 2457370797, 1766767168, 4130364650, 1394191393, 893956183,
            3188688185, 1875859783, 3686866863, 3294062742, 2146834313, 2406586432, 1574602180,
            3208002016, 1067708846, 1620126309, 593911816, 1573785767, 2208656217, 4037191927,
            3437397556, 425721135, 3749387007, 407468749, 4203518167, 557223936, 3186718435,
            3473504989, 2673679280, 1478635903, 4172750097, 1469776418, 2542136327, 941914936,
            3438581078, 3116581940, 3479694655, 159558945, 3809792710, 2458053073, 945749848,
            3386290936, 950397544, 148027778, 275178526, 1664599931, 2000347485, 3312866545,
            4123761723, 2408292910, 4050298, 4225958969, 2745635153, 1877283873, 90573827,
            3031684040, 2275034810, 476532317, 4006527249, 2818283214, 661127690, 2880950746,
            3285389422, 965419004, 1273458580, 1611437669, 4165036259, 503131762, 337440890,
            1274837150, 3486913543, 1110808141, 3573281492, 3543428578, 4165550725, 79661970,
            1465954224, 4160343768, 3753977684, 849800837, 1568284940, 1214508489, 777072754,
            3766232553, 4163385462, 3428999259, 906027128, 4231567110, 1070253805, 2975789822,
            1794042990, 2937404746, 3315145973, 3978541255, 191961431, 2940436214, 614874984,
            868388988, 4078685796, 2613877234, 3380127687, 2664922311, 3262235038, 741871774,
            1144269180, 4258950699, 3668553647, 3162392321, 927199539, 557637561, 1114912670,
            84346866, 4241634616, 592125931, 1914166161, 1225886409, 722682712, 2163011354,
            2585075265, 2786722853, 1993844439, 3433052694, 3718814733, 3881165856, 1749980152,
            2115861966, 3664836486, 1644814678, 603487648, 821270634, 3041437740, 925329308,
            414275079, 3675481275, 583965775, 3319812843, 270816609, 1752806861, 3191564196,
            3197116565, 2440000620, 4074382088, 3346183865, 176525856, 3011091744, 746158938,
            1522027948, 930706422, 2574400675, 4141639266, 758742087, 1418306156, 493509688,
            4102390641, 3757183059, 2174506350, 3715933078, 3450125642, 1345548124, 3845070193,
            1563795423, 1304049315, 2604880108, 1998271877, 4078353958, 966179722, 3401781407,
            1708183977, 3890171386, 698646214, 604975097, 4189977050, 1847675543, 2745048720,
            1585177380, 3886892753, 2534712423, 1830125662, 796996186, 3789574770, 2219095884,
            38427113, 3653683439, 1791769536, 3941686320, 2991883118, 1081207663, 3863639548,
            3017351034, 741393256, 2333573607, 2783158305, 2015776314, 3034707152, 1871224010,
            1795881414, 928539629, 3211747317, 461147496, 1512738445, 1178891684, 2603472964,
            1694950214, 3121022285, 91788635, 2303571910, 3259041724, 1240577113, 827064078,
            3847765430, 1254285617, 2609289648, 82835530, 2235563901, 2939680484, 3327268666,
            3659752183, 1783109461, 2828509671, 3804296197, 406800911, 2037292519, 941994402,
            3350211940, 4004870359, 1105941782, 2367553097, 2440982990, 1468367, 2369391483,
            3613174135, 2337161925, 2600055725, 1612773644, 1037201309, 919122459, 1114016493,
            670586694, 594109706, 113464329, 4093636009, 307208587, 3876235186, 3370598978,
            934478190, 2843794891,
        ],
        &[
            2368917411, 3160758175, 1531480588, 2746326450, 3122359045, 1995296172, 310451197,
            1100329853, 2141732304, 3562890277, 4172526924, 4143185198, 2397101926, 620168044,
            828452963, 3271569899, 2726758945, 1647557222, 2748652901, 1029871186, 1773072595,
            1311795717, 2792240418, 3100733307, 298902661, 2608361440, 642743765, 3026335712,
            1586592828, 1251923561, 2152803283, 3359308047, 3979690761, 2548031009, 2148504694,
            2514911217, 401310800, 1418125404, 2325652800, 716233458, 422262103, 376190943,
            1713380879, 2534508846, 2080413009, 2690193951, 2909422387, 2435837201, 176977642,
            224472737, 1590904934, 1664979624, 1748982641, 1284257790, 2779881254, 385265989,
            1148527382, 800142050, 3595556318, 3950265146, 3931111523, 3399894595, 4200004994,
            3727110364, 1510525540, 429323681, 2586345405, 3441619670, 94654169, 2266545045,
            1451808026, 286040435, 364003484, 2106693078, 1916214330, 2622096560, 3504008387,
            1867458297, 4209615436, 2899684845, 3149003214, 2731979274, 2481557740, 234269740,
            1239420776, 2726912636, 1844267393, 1488044058, 1587005400, 145015793, 1637696129,
            1990069464, 3053970062, 676336554, 625771493, 1492378707, 1231018082, 3059699722,
            4113615249, 2967103567, 3335726303, 2137774253, 273460502, 1561489611, 1227429414,
            778315897, 3061631993, 2437789514, 2566029814, 3017507824, 3219754602, 35255136,
            1934306764, 1655248959, 3655963814, 2821596564, 1431977748, 3114012833, 3915822059,
            343010167, 3704265251, 2691314567, 2602475242, 2459094882, 58857240, 2230690665,
            1357656795, 3025543277, 3488674640, 408985076, 80729036, 246851391, 1419653386,
            530010128, 3529087076, 3980421141, 4129023783, 1630771696, 2057278583, 2501545742,
            790764428, 3984347668, 2562445985, 2262348292, 2515967925, 1103371818, 3735595401,
            3210477145, 3387257181, 538884374, 2695206119, 4211749041, 1006274735, 2406061865,
            2654644297, 1268724640, 2399689302, 157759259, 564853502, 865205768, 2174783618,
            3167863384, 1770172407, 1906775255, 3171669377, 2455086709, 1355327864, 3351895167,
            4184858376, 2699533565, 2939169294, 1702277740, 3447680482, 3322351998, 4248517760,
            4100425921, 1169799041, 524849931, 1743345401, 3987645088, 3022177240, 3263737545,
            3656340460, 239445170, 4089162190, 1208712978, 1453215235, 3390225374, 3337889603,
            717395279, 1066458381, 2162685522, 4009460245, 2575879990, 2578471337, 4218103221,
            3046325563, 1352991515, 1561949281, 3488911174, 295633326, 1993756395, 3677304657,
            796898320, 45622345, 2999482773, 2078651788, 1552765091, 428170722, 1748054862,
            4158222865, 1050292437, 249107, 2651086861, 1540178674, 1275557298, 651050585,
            1895599156, 4150309716, 2064336046, 1021257319, 2422595446, 3116755258, 2756656575,
            2328011578, 3632905157, 2576200202, 830418644, 2430246370, 3913080080, 2371749061,
            2683067461, 3611558701, 1603392737, 796477803, 604567756, 1376069347, 1491246154,
            2728262664, 4138498935, 3008562381, 1061547384, 285679033, 2358943172, 1884649492,
            1783482693, 1010268161, 176114433, 794165875, 2362278477, 3903204233, 326754905,
            1988607850, 3187254334, 1749797209, 2986661384, 1759716588, 3137467938, 4067743599,
            1134210801, 3799848836, 1955405545, 3881788427, 3097574490, 3844756657, 3183850151,
            2496328910, 1468671385, 2888878911, 2306353811, 1498824361, 4152891378, 1588217107,
            79108222, 2883552792, 2390312777, 1587172303, 2070384343, 2265280181, 4013380367,
            2742676878, 2654283484, 1471778694, 970959698, 1006151052, 1276307400, 2874101774,
            3169092608, 244587925, 2402787407, 1635687252, 835856534, 321407542, 2307278464,
            2272745321, 2574317642, 729437319, 1682288870, 1482920833, 776000268, 3908963888,
            214874919, 4233311318, 1441385448, 2358127573, 2753681514, 467574656, 4139948165,
            1538275035, 3244920878, 2576965792, 584068468, 3054546876, 2629688518, 4253271747,
            3723872815, 1652066683, 990821089, 2335421805, 1989570928, 240486517, 2872315587,
            3869991906, 3870517664, 1540804424, 397183643, 3750033565, 1433260634, 1506168711,
            3616651625, 512028445, 3746712828, 3278592880, 2611514549, 1214563129, 1259227909,
            1067976218, 3425169051, 741795595, 893688343, 2674408703, 3694908868, 2478153735,
            2220661625, 1022546736, 3719214155, 3161293211, 4131981986, 1473264088, 1651777063,
            1438502715, 290022167, 59234682, 3458968160, 2552001459, 3451530289, 3800073253,
            717882913, 845719525, 1038699111, 3058303772, 1117505279, 3682430977, 2869037104,
            2562493618, 960519305, 4147639705, 1817463351, 3166022129, 3200769866, 789666262,
            2654485924, 3686362402, 2179867687, 3980226915, 3671542918, 1896992204, 1514962591,
            815867715, 3924270086, 4262628477, 3977258034,
        ],
        &[
            491933121, 4095154087, 1190388341, 2123387578, 3299683037, 3840239224, 3891252433,
            3823858915, 548023871, 3189021809, 130119335, 1406023029, 1691542279, 2101470388,
            367145009, 521045073, 1370995123, 202251222, 2377400220, 3656022509, 2413445446,
            3583191945, 150872893, 1253881977, 3664619565, 661519973, 672952411, 1111416155,
            2582282747, 2253466637, 3993637585, 1023965093, 4055175549, 1721196160, 4271105372,
            1844335262, 794907961, 3970777280, 1279126024, 3389187110, 6388771, 3557792034,
            2503975364, 1216157736, 4081863507, 1212796362, 22717034, 3517296783, 3126258972,
            454147562, 4182968994, 685295412, 2996150679, 840677609, 2775806132, 2555856748,
            2855553012, 2971949846, 3057579317, 954558068, 1251032539, 2673204563, 697957636,
            1312479140, 2686740988, 2005131101, 664387193, 2169938189, 4081160067, 3469684725,
            123152292, 2899902365, 1142266692, 2066860665, 647803613, 3574778631, 1302596512,
            678200322, 3509569151, 849744577, 1521760114, 3195673981, 111241164, 623461570,
            3571445453, 200189218, 4138515602, 665845464, 4184871542, 1353865395, 2913489035,
            3076207781, 2549062531, 3446687793, 685940105, 1430268106, 2488363196, 1172253595,
            4151501269, 3292280286, 2025935004, 3388911026, 1080796771, 3386986959, 4175562557,
            2440556214, 9871988, 5488492, 4179517076, 908443542, 364965294, 2303037125, 369102673,
            1570100894, 3615415741, 3133015360, 2623933135, 211314818, 3377760249, 2285528104,
            3096807957, 3213907502, 3633343924, 2065769028, 300167487, 1745300631, 1943126607,
            1065862406, 2422304458, 523765517, 57630113, 520436682, 581485167, 527613705,
            1677813796, 2698743484, 2448718551, 1681977324, 4183961145, 333724319, 2667028740,
            3403027352, 1499647517, 2965583197, 1090547876, 1536215624, 3407325498, 1392474450,
            3354142052, 3326326224, 1138672330, 1577104875, 235932133, 3877789753, 1822119722,
            305251772, 3802044423, 608489509, 2727503310, 865373313, 3763994776, 3206318655,
            88097048, 4241064408, 1171067683, 4250936686, 729121178, 763857558, 450636528,
            2096197907, 1427186250, 1251064262, 3036762405, 2966424923, 880639864, 1995310474,
            2023015792, 4198637421, 3996151657, 3070092174, 331733799, 2680348059, 2601390369,
            92920881, 600583651, 1323663334, 4258529164, 2493258032, 3313489774, 2050494797,
            1494880112, 1342788885, 2493538385, 1096813856, 27701253, 2762164402, 3934044073,
            2289089808, 721323988, 2246162231, 2514451824, 3095057964, 1921436785, 2847276160,
            1369952734, 4246781184, 3442030977, 3930627222, 614706399, 3051396564, 3044240928,
            3450585985, 2120836933, 3006035710, 178202067, 736149219, 623937260, 1958379885,
            3104814268, 3269365015, 914726129, 2951180538, 3940965189, 1869582492, 2599100173,
            1009213592, 1410445689, 1179880005, 3583285938, 1921636631, 434725812, 735782942,
            2548761027, 3733379485, 3466163816, 2455801926, 1673952134, 2422059957, 4005305357,
            2795894062, 3245947918, 4171997564, 2269244989, 1975479474, 2449387935, 2550893401,
            4033149, 3723976428, 3871853952, 3210178057, 2062131312, 1434821634, 1130065536,
            4276609753, 41976415, 968125282, 853099726, 3675357389, 3545982836, 1237895428,
            88970686, 4259275077,
        ],
        false,
        &[
            2046945960, 1873732058, 883136475, 2335087597, 1091742925, 3913267466, 1586245016,
            4163559950, 1402352044, 2528046476, 1941819469, 2309605638, 3377063311, 3151818591,
            494038776, 3426549387, 3253079763, 124752778, 4008075289, 327167526, 1965527166,
            717131100, 1676230023, 3836503956, 3686584911, 550652113, 589790309, 2877365586,
            2824639624, 3138038419, 3640799592, 585603054, 1414821912, 3869326513, 3124646127,
            813686461, 180141293, 2274287537, 3375883484, 3539423998, 2876480809, 1880629606,
            2803556469, 687655801, 393062928, 524210967, 2366097978, 2175763640, 3159336997,
            790281459, 3247341866, 170318031, 1506555227, 246985421, 2165448534, 4166633223,
            3351234404, 3976060563, 3925058943, 398933467, 3413453047, 3215824401, 2764818555,
            2281679666, 2124899687, 3988046369, 3496024103, 1898489528, 3748055383, 1888289090,
            3518616015, 2878886670, 1858863206, 1865431124, 2320246513, 1797214962, 3620561150,
            3636061735, 1288494915, 1503932934, 333549760, 2000535203, 2963961099, 151292676,
            4071971672, 2869808036, 801933070, 1423471894, 477371428, 3645363638, 2586777443,
            3381283382, 3165264014, 1496932333, 2011004150, 558029532, 1103521912, 3099006002,
            2922027532, 2250375874, 869652089, 386060205, 514086971, 679438817, 2922028193,
            3519808732, 1083788073, 2102488620, 2723526073, 3287730376, 3961054192, 1086172650,
            3775096139, 3273358074, 3471776285, 4280446341, 1945339479, 3318103287, 2895065752,
            4010586984, 3721844651, 2781838144, 1795741626, 377630941, 2137086277, 150771080,
            3410699853, 2181744662, 3165518125, 156617039, 3099687100, 2159351188, 340108091,
            2408725718, 1639869303, 1752843886, 1941447467, 2157946488, 1515895552, 3624132653,
            3556726921, 2697391196, 3650363912, 2596921683, 3641623430, 3884964637, 4229700714,
            1936259996, 3765315225, 4087511128, 746291101, 1752759843, 699518598, 2102672534,
            2335948897, 4138231225, 3162828440, 2881768368, 1254885146, 2977691172, 2250072411,
            2614007259, 2771551612, 776074685, 3162839614, 1471012556, 523323297, 1856466918,
            4090405884, 813410161, 100155385, 1084252628, 1599609446, 139407955, 4121369443,
            1963225032, 2735275753, 100107317, 1064061529, 50786861, 1654370440, 3334472166,
            1385803654, 3881645932, 3538258401, 1238925138, 1307191791, 2439918414, 1853442725,
            3584719283, 2139830944, 1008033673, 2159214266, 1728151904, 2054140804, 2246372905,
            1296034828, 732486414, 4197166746, 2149038695, 2421556216, 2209917678, 2053724924,
            3695308867, 2810551805, 3486105675, 979515789, 2065617241, 3321246575, 4275036932,
            3028497318, 1883398852, 1301060583, 2486427309, 592113155, 2482121819, 53211642,
            3067158128, 2316354328, 2457370797, 1766767168, 4130364650, 1394191393, 893956183,
            3188688185, 1875859783, 3686866863, 3294062742, 2146834313, 2406586432, 1574602180,
            3208002016, 1067708846, 1620126309, 593911816, 1573785767, 2208656217, 4037191927,
            3437397556, 425721135, 3749387007, 407468749, 4203518167, 557223936, 3186718435,
            3473504989, 2673679280, 1478635903, 4172750097, 1469776418, 2542136327, 941914936,
            3438581078, 3116581940, 3479694655, 159558945, 3809792710, 2458053073, 945749848,
            3386290936, 950397544, 148027778, 275178526, 1664599931, 2000347485, 3312866545,
            4123761723, 2408292910, 4050298, 4225958969, 2745635153, 1877283873, 90573827,
            3031684040, 2275034810, 476532317, 4006527249, 2818283214, 661127690, 2880950746,
            3285389422, 965419004, 1273458580, 1611437669, 4165036259, 503131762, 337440890,
            1274837150, 3486913543, 1110808141, 3573281492, 3543428578, 4165550725, 79661970,
            1465954224, 4160343768, 3753977684, 849800837, 1568284940, 1214508489, 777072754,
            3766232553, 4163385462, 3428999259, 906027128, 4231567110, 1070253805, 2975789822,
            1794042990, 2937404746, 3315145973, 3978541255, 191961431, 2940436214, 614874984,
            868388988, 4078685796, 2613877234, 3380127687, 2664922311, 3262235038, 741871774,
            1144269180, 4258950699, 3668553647, 3162392321, 927199539, 557637561, 1114912670,
            84346866, 4241634616, 592125931, 1914166161, 1225886409, 722682712, 2163011354,
            2585075265, 2786722853, 1993844439, 3433052694, 3718814733, 3881165856, 1749980152,
            2115861966, 3664836486, 1644814678, 603487648, 821270634, 3041437740, 925329308,
            414275079, 3675481275, 583965775, 3319812843, 270816609, 1752806861, 3191564196,
            3197116565, 2440000620, 4074382088, 3346183865, 176525856, 3011091744, 746158938,
            1522027948, 930706422, 2574400675, 4141639266, 758742087, 1418306156, 493509688,
            4102390641, 3757183059, 2174506350, 3715933078, 3450125642, 1345548124, 3845070193,
            1563795423, 1304049315, 2604880108, 1998271877, 4078353958, 966179722, 3401781407,
            1708183977, 3890171386, 698646214, 604975097, 4189977050, 1847675543, 2745048720,
            1585177380, 3886892753, 2534712423, 1830125662, 796996186, 3789574770, 2219095884,
            38427113, 3653683439, 1791769536, 3941686320, 2991883118, 1081207663, 3863639548,
            3017351034, 741393256, 2333573607, 2783158305, 2015776314, 3034707152, 1871224010,
            1795881414, 928539629, 3211747317, 461147496, 1512738445, 1178891684, 2603472964,
            1694950214, 3121022285, 91788635, 2303571910, 3259041724, 1240577113, 827064078,
            3847765430, 1254285617, 2609289648, 82835530, 2235563901, 2939680484, 3327268666,
            3659752183, 1783109461, 2828509671, 3804296197, 406800911, 2037292519, 941994402,
            3350211940, 4004870359, 1105941782, 2367553097, 2440982990, 1468367, 2369391483,
            3613174135, 2337161925, 2600055725, 1612773644, 1037201309, 919122459, 1114016493,
            670586694, 594109706, 113464329, 4093636009, 307208587, 3876235186, 3370598978,
            934478190, 2843794891,
        ],
        &[
            3428605691, 3747865452, 3179948115, 2350061225, 568002466, 1150456745, 398797276,
            1289784855, 1713342581, 1243415582, 2262476431, 2640854581, 2126611553, 279688048,
            1750838292, 4147801215, 1090003542, 3022523567, 193306367, 3095010320, 4106129220,
            2615828356, 2229875117, 1066352114, 1628397898, 370050060, 4157038478, 3551524420,
            3356007005, 71309641, 801692593, 3448737794, 2187893878, 3694205688, 3993669226,
            1704384353, 437976508, 281233142, 3685881986, 557022935, 2623696682, 3473835466,
            2373703925, 4102552649, 3005124737, 1604665678, 2894612216, 113726438, 326916434,
            2354584210, 2207672568, 1272863868, 1643657755, 453968751, 3873638645, 2388412558,
            2026577065, 3555348237, 2342844423, 564662317, 3301275728, 2205414701, 1980322846,
            2111846734, 3351655044, 3986317737, 3746472405, 4065813457, 3783710419, 2063617629,
            3337397526, 396000532, 1367889075, 3493608147, 3502046919, 4063752078, 2026966957,
            1730343114, 1889308216, 2064908820, 1350757250, 953211432, 3171180512, 3683852864,
            2865517189, 9728788, 4075807873, 230559850, 3447666295, 3875782338, 2964025959,
            3279832060, 1701408562, 1524777719, 2018628821, 877683542, 2894422993, 2842238026,
            2368190181, 2574790540, 3301078931, 519264490, 2640226714, 1382986517, 2712031077,
            1268830384, 2018243821, 1374899410, 1932087493, 4236194373, 2079152365, 1069353434,
            2794047491, 3019576051, 1360117274, 3615353679, 3816194597, 563906666, 1827758233,
            3391740972, 4039283822, 474920421, 602146150, 3520459365, 2217822485, 1815675107,
            1257332805, 101198736, 3156910259, 1281759597, 2577040428, 1316988841, 790502779,
            2183328888, 3514409721, 3117638288, 2751392867, 625199304, 4183171081, 810287943,
            199775540, 2896399552, 1276626819, 3536203521, 3977249862, 1553852925, 1596788767,
            4199876212, 4164476281, 1700598937, 4111801568, 897035781, 3318378574, 4049506305,
            2522517679, 2296942227, 91515126, 2738354614, 3444113221, 776723413, 2322159108,
            258188842, 4014626824, 2677530556, 2630906411, 2348643583, 2619411399, 1783064149,
            3684137491, 4249816060, 2342260236, 4186117248, 3931377058, 283592002, 2818946531,
            2155019855, 1212182985, 937681548, 520081464, 1686760025, 4003314294, 120323668,
            3282730481, 1331500167, 2103184161, 453960707, 3079516933, 4193898972, 279508919,
            2459211929, 4262295127, 1413249938, 2652447340, 1521334653, 3641279725, 1047788888,
            2569690437, 3517124875, 527659101, 950373677, 562851515, 3518587604, 2668894245,
            2265163836, 2975852422, 3168107907, 3219343979, 3364338005, 4122186542, 3517854206,
            626303838, 201513242, 4042863292, 4203206994, 154681851, 1046188872, 1014035958,
            1565481708, 783475007, 1419399714, 1439418252, 3671223860, 338436030, 2221870804,
            275182251, 790279697, 3288665213, 3033639795, 2320556485, 1648356934, 326278183,
            429784181, 104482651, 1051376296, 3823684587, 3057907898, 4214146560, 2770254088,
            2132180852, 515232230, 3723417512, 3994583184, 1170935740, 565152109, 1486190861,
            2906472005, 3154973145, 1571950735, 1391459913, 2972445791, 1670706254, 2522911431,
            2665886703, 2875123532, 623767904, 1291947264, 3935970871, 2500309617, 3931020115,
            3436644927, 3672390796, 2307254280,
        ],
    );
    // q_len_mod_d_len == 1
    // !(n_2 == d_1 && n_1 == d_0)
    test(
        &[
            386353625, 2283334827, 253851108, 4279287864, 2561872983, 1000131216, 216965099,
            1733322743, 3814906874, 520558483, 2573981410, 3011109093, 1361665859, 2981910167,
            2501833654, 2673979284, 2696912361, 797890797, 97183495, 2324611911, 3471887001,
            1013155374, 524729310, 3971281568, 2873934524, 1076401482, 1645093822, 423739674,
            3400177353, 3716049850, 2858905860, 3351077705, 1478568656, 3370413874, 3966773377,
            1660817988, 3770638166, 698194415, 92466505, 399941585, 3301477423, 2578917060,
            3012966571, 1915213695, 3062576400, 2979801504, 3838450560, 975685759, 3154985631,
            1986911427, 3559636850, 2134674515, 3128102806, 1097660929, 1212690783, 3611467219,
            1232001761, 904465835, 671601217, 2829397960, 3910014855, 2035732477, 3262086074,
            3077756473, 1064556527, 3095006074, 436186642, 3844079107, 2798261317, 3470373096,
            218408908, 4184804463, 2826021777, 1939569756, 1452808097, 1149547097, 316749819,
            1631475409, 4023391942, 513096309, 3730431754, 3391919570, 4153138767, 1328779762,
            3015228258, 2487205968, 213982794, 1927310263, 897606115,
        ],
        &[
            133654450, 371159391, 40768202, 2113895976, 2732923987, 3215138425, 2391931662,
            2672734577, 195120416, 939150931, 1941696822, 2919872876, 2564539452, 3080820908,
            2846583634, 3349568397, 3465385329, 3550405793, 1724556069, 151917586, 3772273289,
            4156003461, 2380288065, 356475766, 4123619567, 1619017859, 3739529130, 490749645,
            267879469, 2890847693, 3854244893, 3384266657, 115723042, 103663103, 267682519,
            965965574, 1841386548, 2476428873, 6965648, 3347378817, 4174270937, 911558590,
            1958087705, 1467103561, 1925556384, 607664404, 2051263137, 3092553737, 3239342455,
            1360744647, 331798903, 938411111, 3063265275, 4144610940, 624250586,
        ],
        &[
            3712980585, 4273305215, 2588121912, 1482202110, 247010829, 2649827458, 2673293530,
            50266420, 3870816552,
        ],
        false,
        &[
            362121003, 2089507514, 1304606762, 1263278756, 358438501, 2269424948, 3806457519,
            1279073058, 2059434869, 1815692099, 652038027, 526160281, 1238911451, 1042947643,
            2960978573, 3022105016, 2649279744, 1198671551, 2684187685, 1000492760, 431499902,
            183857299, 3280835037, 1246895529, 2318725685, 2267164315, 979921718, 3857707914,
            3760109217, 2715707691, 1406885970, 2988297028, 209159729, 4186884247, 1096787060,
            1637274376, 3553955911, 204938738, 2626213055, 3882415239, 2634475536, 1602083916,
            1366306436, 671584326, 4002679807, 692653815, 3838450560, 975685759, 3154985631,
            1986911427, 3559636850, 2134674515, 3128102806, 1097660929, 1212690783, 3611467219,
            1232001761, 904465835, 671601217, 2829397960, 3910014855, 2035732477, 3262086074,
            3077756473, 1064556527, 3095006074, 436186642, 3844079107, 2798261317, 3470373096,
            218408908, 4184804463, 2826021777, 1939569756, 1452808097, 1149547097, 316749819,
            1631475409, 4023391942, 513096309, 3730431754, 3391919570, 4153138767, 1328779762,
            3015228258, 2487205968, 213982794, 1927310263, 897606115,
        ],
        &[
            3140142351, 3638334268, 927590030, 3257445174, 190628332, 423978494, 2125526010,
            2335881748, 2011775260,
        ],
    );
    // q_len_mod_d_len == 2
    test(
        &[
            3451729766, 1173985848, 93029266, 2489920009, 3973680219, 780152687, 1953113811,
            856318718, 3314090115, 2569865885, 10849561, 743853677, 1946859719, 3063924404,
            3352045106, 101532091, 429420318, 3158186124, 1342100634, 1680882573, 4042659776,
            565667221, 989688746, 4541446, 834463803, 3523014310, 3432977627, 1818084880,
            3544409611, 1926948225, 3663387900, 1035293697, 285923430, 3096314023, 664014848,
            2054069437, 3124990832, 115905130, 1379323203, 2244054884, 2012040660, 1620087465,
            1907788850, 132467852, 3020885577, 238576412, 567018667, 3426013542, 3145012002,
            2070201540, 1421424259, 2074360440, 810615969, 153078550, 825376847, 2436604908,
            1365021492, 288298963, 3753461462, 4215347696, 514661745, 3484458912, 4247537127,
            1579462876, 3865189996, 1018915575, 2974009562, 3501816358, 2821759336, 2722697353,
            517866351, 632193686, 1959130106, 2570573609, 3726681184, 1695074321, 1803440017,
            268435105, 2059636298, 1870796488, 3616705235, 779907146, 3840642834, 3690603635,
            889240128, 4220497978, 1506894274, 3744062951, 3031958651, 4062058444, 2309758423,
            1411665710, 1638698058, 1784343146, 373693019, 3239595939, 1656022725, 1985062241,
            2188775097, 395478226, 2732514978, 2804731752, 4294707867, 2796289890, 4286815139,
            2694259304, 3400027223, 2866208426, 712658287, 3005677674, 3799280383, 333964254,
            426632823, 1071506508, 424615774, 1216913008, 1528084851, 2440789637, 8647650,
            1482353199, 1079815951, 1741478231, 335212928, 3230225069, 812456049, 1107265661,
            309740350, 39813940, 1038050523, 3708554333, 2276389162, 3145208114, 286364489,
            2078653938, 2343246544, 761958231, 2400118006, 2820784413, 91083352, 868359282,
            2976918690, 1899156995, 2927253740, 2971404198, 955553520, 2163090892, 1779162381,
            3706789234, 1427323973, 2892945053, 3765307938, 1888304940, 4281185143, 4063224403,
            3895821018, 292451283, 1315405597, 1278053061, 2659048964, 1651475603, 2464063324,
            2470117886, 885060568, 2223396118, 983203622, 2153273837, 909540554, 11662729,
            1290088356, 3558268851, 2470462290, 3816443571, 1219777270, 1663771088, 2059674235,
            3741754207, 918293007, 1170814255, 2592844500, 34078497, 868179007, 2916133370,
            224466504, 1457353443, 743181292, 2045016399, 4268051489, 2582113750, 108054210,
            1045580699, 1021681246, 4287699909, 2442965928, 2358040249, 2188665290, 2493816549,
            1868457202, 1538714165, 3141445884, 1886427078, 2413842865, 3754082182, 1242353411,
            837326189, 1891378866, 2004934119, 2718308820, 1293740965, 3706050263, 660923758,
            4037329521, 1659464686, 3767070633, 2733667846, 1303579884, 720201259, 4178102594,
            1521257108, 3676354960, 2861869547, 1694835235, 1663377877, 1033893232, 1788049008,
            2131980496, 1380320795, 1706971693, 1547085187, 4249747381, 4022331904, 3773862935,
            186851005, 1122661765, 2869769810, 714482846, 122240297, 1990969517, 1505355345,
            1418846887, 2157766299, 3944099174, 752193837, 2717991695, 3106584127, 2176113460,
            2424010054, 2202537322, 735567917, 2635174646, 57167007, 1501943516, 3981020168,
            2264071537, 1811387936, 3230232665, 2056500724, 2470649052, 298208196, 361093257,
            837772742,
        ],
        &[
            3759203346, 4116788486, 472182301, 1657732406, 1379670583, 1302865697, 694415200,
            281678172, 1654699562, 3014506006, 1741431230, 3860463155, 1145719988, 3566676616,
            2320845102, 2321995000, 536415919, 2387437419, 3567575351, 89009414, 1112333426,
            3147195251, 3149954561, 1503279897, 3064049622, 172526224, 3226367243, 4252316042,
            2985921401, 3319920602, 2971463135, 662010514, 2716903751, 3114900209, 4294888231,
            2302528059, 2985636330, 4227410510, 523042380, 1128527265, 2237860860, 2902190407,
            2028066064, 43980114, 85965472, 1423570354, 370469915, 2799642260, 678694776,
            4007712353, 1236341524, 2105667795, 1513858354, 3031596159, 3550734930, 4152331215,
            778814882, 736616127, 1334786757, 193672910, 4005017476, 49451649, 274162308,
            193472860, 3849716547, 1147344616, 3779102036, 636364760, 49841072, 4203872775,
            2917594088, 2516158563, 1718950767, 2409600701, 4112139783, 968713133, 2367692503,
            1383637739, 1447827357, 70112330, 1597216524, 1036612170, 47442040, 3535655506,
            3217988958, 1524147015, 1542229372, 4278993048, 1177373055, 2455939135, 3977288741,
            2323766505, 2631150922, 2494146789, 1766908673, 2014027584, 3170299898, 2200469205,
            447095672, 3553741345, 1471247393, 1705231371, 3597764506, 2179927417, 2057038135,
            2877684583, 4157842671, 3988568107, 136943619, 1758053719, 133243005, 1316787143,
            3912460869, 3007503154, 673776671, 2300353234, 2544200665, 1154464703, 2377559298,
            2085288775, 570803259, 1718587627, 1887771341, 2141823671, 812587685, 473768462,
            3537328856, 2051785610, 1867482529, 386483431, 2102139021, 3579998391, 1082229057,
            4197498026, 2004997074,
        ],
        &[3960768807, 1512612890, 3846503597, 4289005374, 3202073567, 4260281911, 4219386150],
        false,
        &[
            3383011450, 2938966556, 422368941, 3441497106, 3409423652, 2305567488, 3562827580,
            1338876308, 1099736044, 1201047259, 1743369967, 1491174234, 287230448, 3116597437,
            1643175661, 4211676401, 601814058, 2723977393, 3228175296, 3419496235, 2059811269,
            2947984775, 469809020, 251557204, 3013739023, 3166260707, 517974662, 920653259,
            3867055574, 34801513, 4073639353, 766741992, 3966323891, 2226406520, 2341832923,
            2682492751, 1942828791, 1732324839, 3967931993, 929680784, 1485027211, 2843893078,
            430780969, 4066926931, 3159632662, 3397052086, 2311817261, 2992832593, 1564064832,
            3020792541, 1056579269, 3627023013, 1422659846, 3325045886, 345931608, 1290807491,
            3973995577, 3750219800, 350963107, 4053409628, 4058696363, 3668673317, 1418277077,
            2159286564, 1868951430, 1399034844, 2585316317, 3592102683, 4163508856, 4075983119,
            78320926, 2811875443, 4059965405, 1357445571, 2986007740, 326981837, 3415489538,
            2531041805, 234199714, 3488607804, 1688036115, 744596707, 3014071644, 2766006369,
            2628073818, 654781813, 4265430858, 4287622569, 2665792473, 4154810693, 2848091329,
            755306763, 1245738903, 3190845925, 604185632, 294919488, 4045732560, 3602930508,
            1226696054, 2425992356, 2138768869, 1417531642, 3016312849, 1435667556, 3658864646,
            277170454, 1681853564, 2140619166, 76500316, 3095347477, 473108630, 4089067082,
            1142664387, 709297371, 1129824116, 1641660886, 4174467937, 869296342, 332188854,
            3873253978, 2646933540, 331422365, 2123872788, 1908091634, 1952247202, 3839276275,
            3725920254, 2040912245, 1038050523, 3708554333, 2276389162, 3145208114, 286364489,
            2078653938, 2343246544, 761958231, 2400118006, 2820784413, 91083352, 868359282,
            2976918690, 1899156995, 2927253740, 2971404198, 955553520, 2163090892, 1779162381,
            3706789234, 1427323973, 2892945053, 3765307938, 1888304940, 4281185143, 4063224403,
            3895821018, 292451283, 1315405597, 1278053061, 2659048964, 1651475603, 2464063324,
            2470117886, 885060568, 2223396118, 983203622, 2153273837, 909540554, 11662729,
            1290088356, 3558268851, 2470462290, 3816443571, 1219777270, 1663771088, 2059674235,
            3741754207, 918293007, 1170814255, 2592844500, 34078497, 868179007, 2916133370,
            224466504, 1457353443, 743181292, 2045016399, 4268051489, 2582113750, 108054210,
            1045580699, 1021681246, 4287699909, 2442965928, 2358040249, 2188665290, 2493816549,
            1868457202, 1538714165, 3141445884, 1886427078, 2413842865, 3754082182, 1242353411,
            837326189, 1891378866, 2004934119, 2718308820, 1293740965, 3706050263, 660923758,
            4037329521, 1659464686, 3767070633, 2733667846, 1303579884, 720201259, 4178102594,
            1521257108, 3676354960, 2861869547, 1694835235, 1663377877, 1033893232, 1788049008,
            2131980496, 1380320795, 1706971693, 1547085187, 4249747381, 4022331904, 3773862935,
            186851005, 1122661765, 2869769810, 714482846, 122240297, 1990969517, 1505355345,
            1418846887, 2157766299, 3944099174, 752193837, 2717991695, 3106584127, 2176113460,
            2424010054, 2202537322, 735567917, 2635174646, 57167007, 1501943516, 3981020168,
            2264071537, 1811387936, 3230232665, 2056500724, 2470649052, 298208196, 361093257,
            837772742,
        ],
        &[1749675900, 83311145, 2319870768, 2301367900, 1271820700, 747192890, 2232034578],
    );
    // highest_q first time
    test(
        &[
            1444823481, 1895962470, 1145820971, 951685031, 1619286897, 645659681, 3225126137,
            1237595037, 528204561, 3332610202, 2935828481, 3511627759, 3794280700, 504366468,
            2867551534, 432130908, 1682537913, 2112976328, 291513836, 2849031909, 3326433036,
            1925364297, 3779561553, 487877982, 435659240, 1540143453, 3711236017, 1440132082,
            825660149, 1624471959, 1941539144,
        ],
        &[
            110690520, 2114031203, 436730283, 2624140005, 3364550071, 806172129, 2495686202,
            3508099340, 1915440069, 3196245075, 3757278096, 786923263, 1820433641, 3283619351,
            2326488762, 119217121, 3545365539, 3063896557, 1866040341, 3325517573, 713948948,
            2863092530, 2356199798, 3131342786, 4122497749, 3637172320, 2586791774, 2794104974,
            1738360752, 1591954820, 2633103962, 398797289, 30804220, 2682142316, 1858898375,
            2406882215, 999588447, 645011646, 3469603876, 3657151690, 2477958807, 286833025,
            1802487901, 2709688493, 2318425877, 3516543869,
        ],
        &[
            3866576925, 1873138890, 1768109056, 2705255084, 4241776445, 658244374, 286815054,
            153522406, 2020517918, 87408861, 541283899, 2327698817, 696800449, 1357243166,
            2373189783,
        ],
        true,
        &[
            4258888914, 1485342244, 864808754, 1855573169, 2779156179, 2884098865, 3015216190,
            233158379, 2131022258, 2947161299, 1457166139, 936993560, 1814334647, 2085655570,
            1964344103, 3265126561, 2194874867, 2958220463, 1400730387, 3516776467, 3089823491,
            3793414649, 3469628691, 1982433652, 3254747018, 787956375, 1101033526, 351690326,
            3218501609, 2653245227, 2069227013,
        ],
        &[
            1748815118, 2402822363, 2091637344, 2074482742, 2316188658, 2370992052, 3607116276,
            2077769165, 1723590682, 2807481888, 338472032, 1807369086, 4009280963, 3941733223,
            1094544382,
        ],
    );
    // carry
    test(
        &[0; 7],
        &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
        &[0, 0, 0, 1, 0, 0x80000000],
        false,
        &[7, 0, 0, 0xfffffffc, u32::MAX, u32::MAX, 1],
        &[0, 0, 0, 0xfffffff9, u32::MAX, 0x7fffffff],
    );
    // highest_q in limbs_div_mod_divide_and_conquer_helper
    test(
        &[
            2516900350, 3628420684, 45459239, 1513614219, 989392388, 453507217, 1512254264,
            2426221826, 1233076550, 244898124, 2764583004, 3329101881, 1699874673, 3208045667,
            2210327365, 948719692, 29636434, 309163724, 626642377, 3476255186, 2213282765,
            3561515942, 4189534597, 950518908, 139348404, 1259661856, 694161725, 2634491186,
            3727710582, 788362676, 3045474119, 4091304988, 2805201294, 3987583308, 1169494314,
            1793738933, 1926962859, 143323906, 3767356737, 2736821279, 3155234958, 369913573,
            2104538395, 1964464892, 120182245, 1607533355, 3512159772, 428709975, 3273911427,
            1151542509, 2860816013, 1136173381, 662332459, 3578077057, 3243603823, 818341966,
            1912641848, 3483224197, 605429894, 746864868, 3712846888, 2818736253, 462940792,
            3732576280, 1660947800, 1011233610, 843846147, 2308498613, 1878649446, 1442264468,
            2962205673, 2832862233, 1244894861, 1156622958, 1582973750, 1574948490, 3846938629,
            935089728, 1705244040, 4043433438, 3114254174, 1062986960, 3905677705, 1930766407,
            1354562200, 955778452, 2932639939, 249007379, 3763599833, 32702674, 3759419411,
            4281057196, 1688108074, 3861261668, 444663411, 2875533494, 971084229, 1671724356,
            681694042, 1336342690, 3989885039, 3351736702, 3656186109, 2518436399, 3272921467,
            235621572, 641659042, 2119882595, 1983842751, 1488017726, 3187465143, 2506358055,
            3348535321, 999852594, 4293611527, 1073384603, 250481194, 4148825621, 3839501948,
            3818994640, 1414056232, 2701465891, 499495991, 1361504858, 1308748876, 1650859371,
            3722040369, 223548436, 2431095012, 3829963049, 367284736, 451104830, 3192609374,
            959276880, 2266256342, 4176815348, 3580491737, 674113379, 4084740134, 883805748,
            892822580, 2297912891, 2348080766, 3777075710, 2743249275, 1929349295, 2464988855,
            1327032420, 1398791640, 2085211945, 889984414, 883598216, 1429348413, 154972877,
            3622910749, 1670306325, 2187005411, 651154286, 2688016708, 1041316505, 2776658464,
            161390395, 3846865057, 3267383835, 1010302540, 3607316170, 1418199870, 3954492322,
            922710287, 1323651551, 2431904946, 3054195005, 902509698, 1670133092, 1092971517,
            1075109776,
        ],
        &[
            1426636939, 2291732338, 3067548371, 1958595483, 4265832187, 1189668824, 2839754982,
            3301139255, 530760593, 3029188645, 1298922175, 1055363550, 2070850046, 992858009,
            1206997984, 1510007185, 2204463849, 2600547912, 3402640587, 372285673, 54684613,
            211924658, 2690037178, 1114469505, 374316665, 319939537, 1363579227, 25099128,
            2808696886, 2318162131, 1283473588, 4173665536, 1302236115, 2981103428, 364658024,
            3500679214, 73401477, 2399140443, 2401409782, 974668784, 3260945138, 700031094,
            619920306, 2267288646, 225106679, 2520705554, 760523499, 2971006600, 2155228491,
            967349835, 2899641188, 2567983244, 1086821788, 208644014, 2327565301, 3873773388,
            1254243651, 3371628757, 1486945462, 3153661571, 3596439034, 3448680976, 2884772533,
            2113693162, 3571562346, 3271064301, 2352298427, 2624271304, 2147301202, 1628031526,
            2268489536, 2460058239, 3824853526, 1114448457, 1711950597, 2805133745, 3886047152,
            1482425544, 3015333985, 1726209429, 1945238011, 2536476005, 1974758758, 3373425305,
            2797746190, 1649833243, 2549697741, 2772403629, 1276934258, 1197267921, 480328120,
            3145095762, 647795990, 605209910, 1896440782, 2021024361, 4280085434, 384535302,
            228210377, 1342562609, 550195641, 304643910, 803682708, 2640613597, 214734489,
            3610647775, 3787633026, 3169459037, 2718345417, 1486978425, 4213419405, 2452166506,
            2369416903, 2146131022, 3632701374, 857903632, 2077812289, 2633196639, 1727541399,
            1445819648, 1663740433, 2573746586, 150961985, 2843003920, 2121435332, 503235641,
            2162411412, 2641993335, 2306838455, 3013627797, 187911601, 2832638744, 3245525711,
            4114681913, 4248626985, 892023341, 4180070411, 462293938, 2339665566, 886499165,
            2680618581, 1275413281, 1653569893, 3506841220, 805196234, 2798162194, 2468871331,
            3396930973, 2515921922, 897743120, 2034157178, 2373161268, 3355723218, 3914014661,
            994426990, 2992401161, 2581503631, 697892172, 82419160, 2053001658, 3320533046,
            3791389127, 1839288008, 270908689, 1413534997, 429338594, 997502210, 3103236226,
            2401510054, 2663896427, 3727426794, 2724686279, 3944143754,
        ],
        &[
            3845376373, 2532376922, 273377135, 3677509657, 2349096840, 865593650, 3913447585,
            3605798835, 2383627001, 256434907, 1598943794, 582857664, 2095029213, 493203050,
            4072709797, 2373943493, 3435129133, 3493851471, 1582101091, 2328189763, 853133742,
            2400321806, 3544763029, 3255311766, 2487877428, 2345846021, 3540974504, 1867377852,
            2499885368, 3386759756, 3964579463, 3290899719, 2797957335, 2863338106, 3380325251,
            1361967176, 2820693326, 1270065483, 2316076985, 20080038, 2796142674, 1493193006,
            3582143536, 1315905237, 884491638, 2352205614, 3522766470, 1928358187, 1698951621,
            4079830723, 3210021170, 3465329392, 3919799352, 4222905913, 255999498, 707431500,
            4259794201, 604859264, 3884712299, 2790776367, 3466495862, 1352500875, 1421557254,
            3449668508, 339288181, 2600471637, 2364459698, 1593691125, 3908068568, 1590428078,
            3967743945, 361284513, 1947639764, 2146594709, 698658216, 2934691142, 3852641925,
            2677524346, 3136105113, 3755616420, 393422782, 4055467971, 836734774, 1342622278,
            1842869702, 3646198604, 3250586544, 1155965487, 3143510276, 264136749, 764849704,
            2833843864, 3628999351, 1603529516, 3414178524, 2241268229, 1653241000, 3792840587,
        ],
        true,
        &[
            3369583400, 1798959332, 2489167563, 2461009697, 1361288842, 1654052513, 3133509548,
            2052390470, 2454818186, 91621325, 3151880750, 1899967999, 2316081396, 3597413959,
            4267146135, 1546768645, 474411717, 1597284556, 2105139892, 4124114432, 3190771802,
            3793203026, 3276311936, 2880323996, 1248675214, 83340366, 3739848429, 2035483515,
            2728839161, 2427538604, 1330706703, 3030714454, 1781130352, 2866672350, 1381956557,
            989054476, 1246309158, 3420842543, 2855783980, 2430281813, 846960251, 2085811611,
            1851093062, 1216231642, 2046747009, 771854370, 301562071, 2564992655, 13210966,
            3346332460, 602343193, 4038323773, 3846528060, 3292787443, 2312570709, 772642248,
            3361839528, 2269167700, 4111218264, 1417638867, 3914782282, 3574321715, 2749659194,
            3611340496, 3547422042, 662840159, 4181609060, 2617950548, 3566455037, 4058070983,
            3770037022, 2124212778, 1485396640, 423608280, 171333896, 1574948490, 3846938629,
            935089728, 1705244040, 4043433438, 3114254174, 1062986960, 3905677705, 1930766407,
            1354562200, 955778452, 2932639939, 249007379, 3763599833, 32702674, 3759419411,
            4281057196, 1688108074, 3861261668, 444663411, 2875533494, 971084229, 1671724356,
            681694042, 1336342690, 3989885039, 3351736702, 3656186109, 2518436399, 3272921467,
            235621572, 641659042, 2119882595, 1983842751, 1488017726, 3187465143, 2506358055,
            3348535321, 999852594, 4293611527, 1073384603, 250481194, 4148825621, 3839501948,
            3818994640, 1414056232, 2701465891, 499495991, 1361504858, 1308748876, 1650859371,
            3722040369, 223548436, 2431095012, 3829963049, 367284736, 451104830, 3192609374,
            959276880, 2266256342, 4176815348, 3580491737, 674113379, 4084740134, 883805748,
            892822580, 2297912891, 2348080766, 3777075710, 2743249275, 1929349295, 2464988855,
            1327032420, 1398791640, 2085211945, 889984414, 883598216, 1429348413, 154972877,
            3622910749, 1670306325, 2187005411, 651154286, 2688016708, 1041316505, 2776658464,
            161390395, 3846865057, 3267383835, 1010302540, 3607316170, 1418199870, 3954492322,
            922710287, 1323651551, 2431904946, 3054195005, 902509698, 1670133092, 1092971517,
            1075109776,
        ],
        &[
            2033854275, 3346500754, 1026391195, 2931755468, 4132970223, 507488150, 3787819697,
            4267307150, 2229023955, 3535124792, 2115982537, 3261552465, 1403786253, 4168838966,
            2905077003, 3343366362, 4058434477, 3051762274, 2754465216, 2139644668, 2121257326,
            147231635, 1411313351, 1942773925, 1518792733, 4026871852, 1608765600, 2674641821,
            3388658059, 4045496133, 4161170911, 1328400056, 1288717066, 741487928, 2130937044,
            3073981280, 486422437, 2174741216, 4004413829, 1284627600, 1179437164, 1177246499,
            2634583310, 2950709339, 3500520165, 502702338, 3556716680, 3168781392, 201139498,
            1773610178, 1336109110, 75169920, 4261358748, 3946913462, 1177416531, 1904421971,
            529501654, 760059661, 2718436151, 1695275660, 769729199, 1160292778, 1476806846,
            913674448, 1863234151, 2549859956, 2693241338, 2672780028, 1641057282, 3939169714,
            1414934690, 318354912, 300864018, 400872379, 1081977009, 3047385148, 3103660917,
            175274494, 1331622900, 1558233166, 3851938640, 205628404, 992837552, 615234521,
            3588694980, 848421132, 513268312, 468730797, 1030322804, 1991013271, 1629772980,
            3351179781, 2259742484, 957712992, 1217297297, 2285959262, 947300257, 3115413281,
        ],
    );
    // q_lo && limbs_sub_same_length_in_place_left(&mut ns_lo[lo..], ds_lo)
    test(
        &[0; 91],
        &[
            0,
            0,
            0,
            2,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0xfffff000,
            4294959103,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            0x1000000,
            0,
            0,
            0,
            0xfff00000,
            0xfffff,
            0,
            0x1000000,
            0,
            u32::MAX - 1,
            u32::MAX,
            4294965247,
            u32::MAX,
            u32::MAX,
            4294967279,
            u32::MAX,
            u32::MAX,
            0x7fffff,
            1,
            u32::MAX,
            4160782335,
            4294443007,
            532479,
            0,
            0,
            0,
            u32::MAX - 1,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            4160749631,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            16383,
            0,
            4294709248,
            u32::MAX,
            u32::MAX,
            2151677951,
            16383,
            4294950912,
            u32::MAX,
            u32::MAX,
            0x7ffffff,
            0,
            0,
            0xfffffff8,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0xfffffffd,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            4294966783,
            16383,
            8192,
            0x4000,
            0,
            0x4000000,
            4294966784,
            511,
            0,
            4227858432,
            4290772991,
            u32::MAX,
            u32::MAX,
            4265607135,
            4290772991,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            7,
            0,
            32,
            0,
            16,
            0,
            u32::MAX - 1,
            0x10001,
            0,
            4292870144,
            4294950911,
            4294836223,
            u32::MAX,
            4026531839,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0x1000003,
            0xff000000,
            u32::MAX,
            u32::MAX,
            0xfffffff,
            32,
            0,
            0,
            0,
            0,
            4294959104,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            4294443007,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            15,
        ],
        &[
            0,
            0,
            0,
            u32::MAX - 1,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            4095,
            0,
            0,
            0,
            0,
            0,
            0xff000000,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0xfffff,
            0xfff00000,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            1,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
        ],
        false,
        &[
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            4095,
            0,
            0,
            0x80000000,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0x3ffffff,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            4292870144,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            3,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            4294959104,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            15,
        ],
        &[0; 47],
    );
    test(
        &[10; 151],
        &[
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            131071,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            4227858432,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            4095,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
        ],
        &[
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
        ],
        false,
        &[
            0,
            1,
            4096,
            0,
            4227825664,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            131071,
            0,
            0,
            1,
            4096,
            0,
            4227825664,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            4096,
            0,
            4227825664,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            4096,
            0,
            4227825664,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            4096,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            4096,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            4096,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            4096,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            0,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            0,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            0,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            0,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            0,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            0,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            0,
            0,
            0,
            4294934528,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
            u32::MAX,
        ],
        &[u32::MAX, 0, 4096, 0, 4227825664, u32::MAX, u32::MAX, u32::MAX, 131071, 0],
    );
}

#[test]
#[should_panic]
fn limbs_div_mod_divide_and_conquer_fail_1() {
    let ds = &[3, 4, 5, 6, 0x80000000];
    let inv = limbs_two_limb_inverse_helper(ds[ds.len() - 1], ds[ds.len() - 2]);
    limbs_div_mod_divide_and_conquer(&mut [10; 4], &mut [1, 2, 3, 4, 5, 6, 7, 8, 9], ds, inv);
}

#[test]
#[should_panic]
fn limbs_div_mod_divide_and_conquer_fail_2() {
    let ds = &[3, 4, 5, 6, 7, 0x80000000];
    let inv = limbs_two_limb_inverse_helper(ds[ds.len() - 1], ds[ds.len() - 2]);
    limbs_div_mod_divide_and_conquer(&mut [10; 4], &mut [1, 2, 3, 4, 5, 6, 7, 8], ds, inv);
}

#[test]
#[should_panic]
fn limbs_div_mod_divide_and_conquer_fail_3() {
    let ds = &[3, 4, 5, 6, 7, 0x80000000];
    let inv = limbs_two_limb_inverse_helper(ds[ds.len() - 1], ds[ds.len() - 2]);
    limbs_div_mod_divide_and_conquer(&mut [10, 10], &mut [1, 2, 3, 4, 5, 6, 7, 8, 9], ds, inv);
}

#[test]
#[should_panic]
fn limbs_div_mod_divide_and_conquer_fail_4() {
    let ds = &[3, 4, 5, 6, 7, 8];
    let inv = limbs_two_limb_inverse_helper(ds[ds.len() - 1], ds[ds.len() - 2]);
    limbs_div_mod_divide_and_conquer(&mut [10; 4], &mut [1, 2, 3, 4, 5, 6, 7, 8, 9], ds, inv);
}

fn verify_limbs_invert_approx(
    is_in: &[Limb],
    ds: &[Limb],
    result_definitely_exact: bool,
    is_out: &[Limb],
) {
    let d = Natural::from_limbs_asc(ds);
    let n = ds.len();
    let bits = u64::exact_from(n << Limb::LOG_WIDTH);
    let product = Natural::power_of_2(bits << 1);
    //TODO compare to limbs_invert
    let mut expected_i = (&product - Natural::ONE) / &d;
    let offset = Natural::power_of_2(bits);
    expected_i -= &offset;
    let i = Natural::from_limbs_asc(&is_out[..n]);
    let x = (&i + &offset) * &d;
    let result_exact = i == expected_i;
    if result_definitely_exact {
        assert!(result_exact);
    }
    let y = if result_exact {
        assert_eq!(i, expected_i);
        (i + offset + Natural::ONE) * d
    } else {
        assert_eq!(&i + Natural::ONE, expected_i);
        (i + offset + Natural::TWO) * d
    };
    assert!(x < product);
    assert!(product <= y);
    assert_eq!(&is_in[n..], &is_out[n..]);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
fn test_limbs_invert_basecase_approx() {
    let test = |is_in: &[Limb], ds: &[Limb], result_definitely_exact, is_out: &[Limb]| {
        let mut is = is_in.to_vec();
        let mut scratch = vec![0; is_in.len() << 1];
        assert_eq!(
            limbs_invert_basecase_approx(&mut is, ds, &mut scratch),
            result_definitely_exact
        );
        assert_eq!(is, is_out);
        verify_limbs_invert_approx(is_in, ds, result_definitely_exact, &is);
    };
    // d_len == 1
    test(&[10; 3], &[0x80000000], true, &[u32::MAX, 10, 10]);
    // d_len == 2
    test(&[10; 3], &[0, 0x80000000], true, &[u32::MAX, u32::MAX, 10]);
    // d_len > 2
    // !MAYBE_DCP1_DIVAPPR || d_len < DC_DIVAPPR_Q_THRESHOLD
    test(
        &[10; 3],
        &[1, 2, 0x80000000],
        false,
        &[0xfffffffb, 0xfffffff7, u32::MAX],
    );
    // !(!MAYBE_DCP1_DIVAPPR || d_len < DC_DIVAPPR_Q_THRESHOLD)
    let mut ds = vec![123; 175];
    ds.push(0x80000000);
    test(
        &[10; 176],
        &ds,
        false,
        &[
            2468656776,
            458964117,
            2715468315,
            1790012879,
            3522999749,
            4214715874,
            561506786,
            3302400720,
            534918344,
            1263272887,
            3075782921,
            2067555491,
            746647830,
            518406956,
            2268770356,
            199166681,
            585200343,
            2568074090,
            496918528,
            707408551,
            2864167181,
            2697486675,
            365965986,
            566676423,
            4243405542,
            2529073250,
            1738952834,
            695156794,
            4116132056,
            240876219,
            2603129425,
            2192004736,
            1342688443,
            2964614325,
            4249182840,
            2414593720,
            2593965601,
            2916418334,
            2637652497,
            994042154,
            3834346320,
            2159029599,
            988365118,
            3644217481,
            1407533479,
            654358021,
            2493606292,
            4023096448,
            1141066521,
            983459780,
            3892764635,
            2438657556,
            46466645,
            374378413,
            979049107,
            3284790741,
            3990074329,
            928205488,
            3007997859,
            3046358137,
            2915845116,
            628001258,
            3465083935,
            4236663285,
            474535350,
            2027435145,
            3567992797,
            4283770508,
            2324985479,
            376140225,
            777742614,
            1991983228,
            354120270,
            1512293869,
            1872844204,
            2864777182,
            1662657829,
            3120313116,
            1367744326,
            3903740266,
            1092780358,
            4056570813,
            2945196325,
            187533600,
            931587688,
            2394937291,
            1507441207,
            345576625,
            1601524905,
            476504330,
            1269949561,
            3390313417,
            881580197,
            1002436463,
            2217811800,
            685849999,
            185823896,
            1272490189,
            3967659522,
            3205992619,
            2860215323,
            3472978514,
            1224636072,
            305126296,
            1759643037,
            3515215216,
            4075133951,
            1224421257,
            774076486,
            3594767960,
            1443121990,
            2854565002,
            2031006704,
            3471036315,
            2258092726,
            3015513815,
            1591867662,
            2298829418,
            2586837892,
            4173923545,
            3288784297,
            1655027454,
            674268161,
            118227690,
            4135574019,
            3420877922,
            3419101194,
            2933141174,
            801148518,
            2138817011,
            4265486539,
            2610068278,
            3432736337,
            4263393041,
            3163494866,
            1217674034,
            638081175,
            1411840480,
            38063796,
            989590891,
            457807629,
            1412034828,
            1103809621,
            2233526783,
            1436248111,
            1917272861,
            1485988800,
            1517198661,
            126869,
            2315908856,
            3274287261,
            3670331343,
            473008784,
            1471036169,
            231026838,
            3870905408,
            2284494418,
            3904415704,
            3550806025,
            1919076393,
            1355185851,
            1830925510,
            1032027683,
            3523514211,
            219638593,
            1697572843,
            1874144044,
            3230672849,
            2851366658,
            4206129317,
            4265556027,
            241571,
            120540,
            4294966804,
            4294966803,
            u32::MAX,
        ],
    );
}

#[test]
#[should_panic]
fn limbs_invert_basecase_approx_fail_1() {
    limbs_invert_basecase_approx(&mut [10; 3], &[1], &mut [10, 10]);
}

#[test]
#[should_panic]
fn limbs_invert_basecase_approx_fail_2() {
    limbs_invert_basecase_approx(&mut [10; 3], &[1, 0x80000000], &mut [10; 3]);
}

#[test]
#[should_panic]
fn limbs_invert_basecase_approx_fail_3() {
    limbs_invert_basecase_approx(&mut [10; 3], &[], &mut [10; 3]);
}

#[test]
#[should_panic]
fn limbs_invert_basecase_approx_fail_4() {
    limbs_invert_basecase_approx(&mut [10; 1], &[1, 0x80000000], &mut [10; 4]);
}

#[test]
fn test_limbs_invert_newton_approx() {
    let test = |is_in: &[Limb], ds: &[Limb], result_definitely_exact: bool, is_out: &[Limb]| {
        let mut is = is_in.to_vec();
        let mut scratch = vec![0; is_in.len() << 1];
        assert_eq!(
            limbs_invert_newton_approx(&mut is, ds, &mut scratch),
            result_definitely_exact
        );
        assert_eq!(is, is_out);
        verify_limbs_invert_approx(is_in, ds, result_definitely_exact, is_out);
    };
    #[cfg(feature = "32_bit_limbs")]
    {
        // d_len < INV_MULMOD_BNM1_THRESHOLD
        // condition
        // scratch[d_len] >= 2
        // scratch_hi[0] == Limb::MAX
        test(
            &[10; 6],
            &[1, 2, 3, 4, 0x80000000],
            true,
            &[187, 120, 0xfffffff4, 4294967279, u32::MAX, 10],
        );
        // scratch_hi[0] != Limb::MAX
        test(
            &[10; 5],
            &[0, 0, 0, 0, 0x80000000],
            false,
            &[u32::MAX, u32::MAX, u32::MAX, u32::MAX, u32::MAX],
        );
        // scratch[d_len] < 2
        // carry != 2 || limbs_sub_same_length_in_place_left(scratch_lo, ds_hi)
        // limbs_cmp_same_length(scratch_lo, ds_hi_lo) == Ordering::Greater
        test(
            &[10; 14],
            &[
                299802232, 2821120521, 3181086016, 891739326, 736497831, 3980709285, 3375818113,
                818447231, 2663163337, 699303808, 3766306416, 1006926545, 2441137698, 2544067966,
            ],
            true,
            &[
                229224643, 1806820748, 815670549, 204407994, 3185958944, 3971027994, 2329129898,
                1099516923, 4253768807, 1256057898, 821933298, 3636132439, 2794702458, 2955917631,
            ],
        );
        // limbs_cmp_same_length(scratch_lo, ds_hi_lo) != Ordering::Greater
        test(
            &[10; 17],
            &[
                1333179288, 1649693138, 1336899365, 4171117151, 3070030019, 3225196885, 4108439079,
                3954646297, 638063024, 4277538414, 3277457249, 211212338, 1364200948, 4280413500,
                4293399504, 2216765967, 2874951670,
            ],
            true,
            &[
                3443915210, 2295603218, 2419744057, 2759520395, 1944568016, 862757513, 374771378,
                2859328789, 3506872242, 2421673342, 2468885898, 3005107568, 562470030, 1627801097,
                2440421683, 35821881, 2121399373,
            ],
        );
        // carry == 2 && !limbs_sub_same_length_in_place_left(scratch_lo, ds_hi)
        test(
            &[10; 386],
            &[
                4139195837, 2812339247, 712806962, 1626328903, 2947517926, 2755997282, 2347019211,
                3654990401, 2055029559, 2047178043, 738069620, 2149818033, 309630864, 294595925,
                984043983, 951236822, 3743724193, 376648825, 1593339365, 227563185, 1874134978,
                2807943566, 2192306383, 2417491485, 3316512293, 297138568, 2944100909, 2810082512,
                665119620, 3864239577, 3520109855, 3002981822, 2546622683, 1756025151, 1423319454,
                599853088, 460530389, 705981334, 552539618, 3941502084, 3349709634, 3660369568,
                4191516275, 1528800983, 2348924921, 536392452, 3446783547, 4055134021, 3504562733,
                2929958411, 901778770, 4237963198, 259318031, 1332469925, 397810510, 2137922926,
                2519380736, 2577896406, 1043505431, 785332849, 2822966324, 4191916739, 3770327065,
                3847462252, 3402720200, 251432210, 1578533442, 1712937183, 923979930, 280220794,
                3293380821, 58676675, 1844830895, 1423620414, 4194849677, 2680873227, 2987401408,
                3054997563, 3873823475, 3253516897, 3108585700, 1036642260, 3701470592, 3361442680,
                3546225277, 2218739223, 564155191, 702047302, 1856675496, 4272520963, 3616818204,
                3227622340, 7791852, 1610528696, 3522462693, 2296449042, 1081049555, 3405408505,
                3147562914, 1940148078, 1129402371, 1876701550, 836206182, 1223716477, 1698320293,
                2529561505, 564212319, 2789696380, 443251042, 2823939041, 3786276490, 4195951187,
                3667489226, 971532893, 2743600172, 3037330715, 4224128528, 2995464410, 3050205287,
                3794514069, 3133644716, 856691943, 4201452292, 348501153, 1203620471, 1838400383,
                3827770633, 2962797354, 3177076525, 845486999, 3837777196, 20436524, 4276721373,
                1755330325, 2585578623, 1854317259, 959489662, 1160837498, 3571761559, 3163627715,
                2901883906, 2062957005, 3360581687, 1107261099, 228566566, 2557814383, 3508583772,
                3839775630, 1987907537, 3937116357, 4075557942, 1464892113, 135879982, 601922490,
                4155196105, 2081104107, 839459275, 557861287, 880140789, 1056812723, 2199617957,
                3317528481, 2087992298, 958637907, 921274851, 3154866102, 264017075, 877303542,
                3865752723, 3807776374, 1302371900, 1869052069, 811485110, 140041357, 2676834656,
                4125536053, 171179365, 3771700498, 3425440532, 3227264309, 1543154128, 2694625489,
                3220336965, 2749044579, 709181621, 2938548554, 4119990906, 2253937157, 2107618938,
                1207222516, 1683811680, 4221953072, 2171761912, 2361269244, 1218314377, 987928344,
                960497416, 4031250239, 1639847512, 3905432218, 2367546610, 57458558, 3770185025,
                3589850319, 287603777, 924162991, 4243441755, 28593432, 2234223762, 1214198168,
                2213332087, 3246012885, 529821154, 1596080010, 2256716924, 2362237023, 1879143372,
                799154828, 2678703189, 1929808701, 4081552632, 3350711293, 1794596388, 1913506378,
                2737040879, 198149267, 1887090525, 2083508083, 4031867527, 836150409, 1487419119,
                3649006840, 1344342026, 3117129602, 3286034010, 531726714, 3818493634, 2688829452,
                3432248157, 3806552324, 3379192093, 398164062, 4196498468, 1734011552, 3599517541,
                241509852, 3872917131, 1538621009, 2828040157, 1983017593, 1489296752, 1386698908,
                156979201, 1922448841, 4076360550, 1664424704, 1927752777, 123651960, 3939944267,
                3005604, 3709073637, 2967489805, 2852961368, 1801607632, 3956884953, 454504210,
                748001653, 3508419959, 2390033624, 4237480745, 1883803406, 59501653, 488021688,
                3997215744, 144013454, 4156138229, 3207190384, 167672785, 256377941, 3785838836,
                3977721847, 3392462430, 4056881256, 3422674218, 1637604924, 3061791480, 3075439268,
                2345796777, 3039548956, 3679830975, 4100519548, 4223820878, 1246251349, 2789094988,
                1261279528, 4128764694, 1552408181, 166251596, 2264884840, 806042015, 1273344257,
                1858140664, 1995440463, 3254742107, 175101411, 1875902902, 4071806551, 786127358,
                2299796383, 1344001864, 4174715279, 1521370160, 2176319001, 1345743938, 2456867417,
                3171076699, 3897764891, 2772973782, 514961974, 3464245463, 1978612418, 292121862,
                3636736076, 2272659407, 2274331899, 2772880215, 1604910771, 2954725178, 123316598,
                545555686, 1505282294, 4191700344, 1093499729, 3833383026, 694388959, 2893900278,
                3764927679, 4192192353, 3782397072, 133448517, 509945324, 2954071581, 722765544,
                1180635727, 285984716, 2936179119, 967121404, 2905768257, 491288904, 600135579,
                3439065503, 14264794, 483956926, 686531157, 3363035798, 3905972150, 150791166,
                2723784356, 3266626182, 1371155093, 250336761, 679758430, 2220669843, 1371404999,
                4205993408, 537317422, 3612437196, 1870187644, 503652613, 899335706, 1295444931,
                858056159, 3581382201, 2982334041, 600961969, 1040115528, 3630194218, 3183659540,
                4266985633, 3006565428, 1121854128, 4106907361, 44957935, 1229739423, 2382159630,
                2285266310,
            ],
            true,
            &[
                1760088770, 4080526177, 2608023608, 2694893566, 3004066830, 2214237510, 2072514982,
                3451962427, 3485197532, 1515079746, 943350838, 4214976192, 2981850513, 1937549988,
                1829233582, 632967491, 3914179126, 2456791403, 3628658525, 2007162807, 1521235463,
                948161520, 3827351402, 2205307930, 1303273516, 2090403955, 3125120326, 2973550249,
                2163659402, 170314532, 2876229226, 494968470, 3718668508, 3650935973, 107817707,
                2532423658, 285835761, 2250301255, 139168257, 2806883602, 578805866, 3326219151,
                1901602970, 2556068326, 2844199513, 2698479894, 3728787046, 3617123572, 2737802465,
                2919596304, 2536928839, 2842472828, 1114232765, 175110451, 2394784754, 1073221182,
                1632800088, 1157318295, 1717474331, 946089681, 3106197206, 615168037, 418892634,
                501982827, 2986457953, 1893146468, 2870765383, 2995035310, 2573692899, 3477374183,
                2071198427, 408851767, 3229401245, 2377739259, 1928791437, 578119252, 2254241267,
                78652380, 2481343171, 2555454369, 243482381, 3700865683, 2995183706, 2488100778,
                58054772, 3942346233, 2473745660, 1701522923, 493462489, 2470313146, 1819837247,
                2330284930, 3142712167, 3950226677, 4007462473, 949452561, 172944267, 1691823870,
                2219435104, 3533670123, 4033487402, 2444553587, 636683551, 47678947, 1065529762,
                3263050320, 2092343545, 2519888675, 702264901, 4018827207, 3006140979, 818479576,
                3732144508, 1702177720, 3844143349, 836374747, 1688156611, 1269107088, 1920184236,
                3443692773, 2073861277, 891840490, 2064863720, 1253640243, 2497953103, 2358358733,
                3466359679, 3365482312, 3043490905, 3493002877, 2370987911, 2125398795, 2298093147,
                3168989499, 37076949, 1291478294, 1505564872, 3116600055, 2110018206, 4029514678,
                1008993328, 2147039657, 1901430028, 2950027853, 2946649371, 4134547468, 3226580242,
                67002805, 2061914186, 3435506795, 3305296188, 3118926502, 295938263, 3154848702,
                1589297569, 1009644335, 1975002616, 494351062, 177792213, 892936667, 1985856724,
                663011930, 2023064427, 3079345397, 2280115487, 4203733211, 3138908774, 3421884238,
                3191420860, 764158096, 2603879287, 498589969, 4170367159, 2819475894, 1727077689,
                1873104274, 915049813, 3805534647, 176482024, 403322181, 3368346834, 727193433,
                900646796, 3136999543, 1613355909, 3820352029, 471439511, 3471432766, 2597114568,
                2009837938, 2097632715, 389166167, 1520996840, 2344734085, 512633468, 3658635856,
                3326549414, 541537802, 3175329594, 1115521890, 3735752302, 533040624, 56216564,
                1874766932, 1607160247, 3369156252, 1450323938, 1142635331, 4207543509, 435950743,
                481361367, 3824656441, 125520431, 3292911980, 1675469381, 2431218394, 511182588,
                3479222912, 589490204, 3553506996, 3661709471, 2316618654, 3550373878, 637631474,
                3286110763, 244959945, 2755104673, 808873559, 1203129909, 1782570471, 1686763662,
                4191962546, 2412523467, 1421588889, 723752795, 1565383987, 1318771925, 2220007547,
                735466750, 230658922, 2961374421, 3695325463, 332357800, 2802182630, 1730542835,
                2333489502, 2835283919, 2570040420, 1616532567, 3720529315, 4255972038, 829762005,
                3700718193, 548891081, 4072462181, 2065133636, 1848015799, 3443807950, 2405066408,
                3915008762, 1771214599, 2430422722, 1128497450, 3442687835, 470675323, 555235400,
                3286905630, 2352651205, 432555847, 1420447424, 4040437919, 338923254, 2725984822,
                2023735825, 1460042409, 1908406675, 227654190, 1604523408, 3244243921, 133688164,
                3064060274, 825400946, 2986602176, 515391607, 3051097076, 300579920, 315609812,
                2442041976, 3222865686, 118218402, 64228258, 3425231024, 1070030503, 3353054629,
                1626756792, 1818031100, 2401051982, 1526192477, 3602675682, 4033108418, 591128181,
                3633475386, 3157206335, 4104216, 4025784094, 4266193286, 3001126208, 1337250415,
                849416722, 3366284510, 2345597524, 2989746743, 2720174096, 1786442541, 3985055947,
                4203001741, 3820341370, 471657766, 2355959089, 230906874, 1276534260, 2537678103,
                811570777, 2584355518, 485370897, 387761024, 1152564004, 3275183056, 53471703,
                3659550427, 2979266253, 2595802853, 826532396, 204030308, 4056457437, 3759821833,
                554940888, 3898319353, 3448792241, 43692421, 3180294571, 3458984544, 3685975113,
                2826822888, 1945528754, 1535708884, 3885432471, 3758699446, 1165404565, 2794772054,
                3117403039, 1044526214, 2907540110, 633050460, 2831691446, 2669183055, 1559434402,
                664522226, 458177657, 1420820322, 1119080846, 977395351, 1701334796, 3891507914,
                3557298907, 1340368221, 4100667588, 2864910492, 1990253606, 3528312622, 322862997,
                3522066321, 257961239, 4264277879, 2930887517, 1076405866, 1366357571, 2601454765,
                1784972437, 1588243763, 991217823, 620712910, 2406746141, 2860518703, 3892074672,
                3777065266,
            ],
        );
    }
    #[cfg(not(feature = "32_bit_limbs"))]
    {
        // d_len >= INV_MULMOD_BNM1_THRESHOLD
        // !condition
        test(
            &[0; 892],
            &[
                996305544975114981,
                12929066524383774152,
                16956610067055251962,
                13012122099231548957,
                14395689158572846177,
                7935429077563080059,
                17542764935243101497,
                18413828249925519615,
                17271321257298840331,
                406766324155888956,
                14818331828215117974,
                8187386216945380849,
                16792638575276899182,
                6540004189057298818,
                465689003663102769,
                11974785539062893556,
                11523099967255714584,
                14591636912283935445,
                4871757987380755363,
                9308130069290886865,
                10612219179153523310,
                5420071244571425562,
                12724302122592532888,
                5173545157589181140,
                1429324130148847596,
                18414282026575416657,
                1721766939064217260,
                185288146264311331,
                8027581238524003859,
                12629121378225318691,
                5422022678890177669,
                6300007666394297907,
                13771277516427401556,
                4461063943424152501,
                5814271695863693557,
                9833762282568603070,
                5534898830643720899,
                11414581203473717153,
                13252208296859650317,
                6070377927034194834,
                468982118171070321,
                15569817073538385644,
                8515954578625472255,
                17703147536676285546,
                2713926565223832109,
                16501613896332875878,
                12360649233716580846,
                6951122318765494287,
                1255018572838364315,
                5022530899188934293,
                14471021290055621346,
                3965972119993826976,
                10914640319991729939,
                4671893019190076511,
                8132288757883741990,
                7379730619550447967,
                7082846353163966035,
                7749284037330602929,
                17090786448482076935,
                3623093583024522445,
                6775174256836032571,
                5932859643874401763,
                9263718069255818484,
                11941172789559596258,
                7505495305758940713,
                8374557854631657796,
                5030384219708396008,
                3609081759463861677,
                2444176790044307758,
                12883357531875110193,
                2545675590276006076,
                1091049428613676247,
                3001645527995991696,
                9613284625002680960,
                13486970893816936976,
                11564610387350917328,
                7838720830134816136,
                3368189672511472263,
                16407993343222005051,
                3965440550685537978,
                4708478243468404768,
                1875742626798710446,
                109477476572266497,
                9185060711428219960,
                2062557879153655855,
                15504010890019002364,
                1436468774610332740,
                470895386030379118,
                11192666441535176072,
                7094623340817246353,
                16041820192281853667,
                5048179711756437977,
                1908765243120848557,
                10810219542319634593,
                15971282719319513661,
                8395180060853137311,
                17415231760777435363,
                10489441496511966940,
                3213813993411776195,
                13309643264471443871,
                14152370013037392509,
                9805694808649718454,
                2991106746654603900,
                2279780759950444362,
                13989789024965052794,
                11942900996372546394,
                15051646099368945987,
                7583267444740224154,
                5192555551306992142,
                13216959612015226558,
                14397593124921798192,
                4374707725758052604,
                15529039788482882168,
                16475619415913302762,
                2649655538625316107,
                11899566009797061232,
                16892018353302708322,
                12364166218684092426,
                10372683350152669575,
                5328477050361662527,
                10949313792626687170,
                11924230090558408019,
                636095257275314085,
                10210914536395617961,
                6515368615710817299,
                17001040330117317563,
                4519581466335837391,
                12514298524110577503,
                1744739741016504912,
                9689951195577973993,
                2774540351629210180,
                7646006525601223889,
                7530479442266342421,
                10538917317906671989,
                6031253606146099659,
                4606167752034374890,
                17763804757970320617,
                6871166461842469695,
                3069238346134678776,
                6898492556629873366,
                18330913680324098797,
                11469514731644700404,
                541525751461369940,
                18096353837092553451,
                16390355202675291281,
                11980660197830118439,
                15349236833293249382,
                1901608480726107605,
                10754477505423276549,
                1780265741680781169,
                6204486525934807168,
                2675596223932028138,
                1082656654749778403,
                15313246555910578407,
                16597928615331243076,
                9259667019969423039,
                13966308744186245944,
                3711817850123753976,
                10380302371138242940,
                1102076039759449071,
                1796134829015781040,
                8320143967311972799,
                12603759772660781109,
                9343508021191710450,
                11833581848018650785,
                5036078561764059265,
                14477046704375156568,
                17958581882146395247,
                6312863763728381603,
                5890775652924120757,
                3024100139720533291,
                15594980805126031556,
                9929023026443104564,
                6003618257535256748,
                10584762467178432077,
                8070692469310128137,
                3448506857138757663,
                12067250229870443464,
                8289617863280099780,
                7705347156484755083,
                8239333463449775936,
                12953560490361273923,
                7863343728067574413,
                15499170354027597711,
                16789849673988523596,
                193554686279189480,
                9324166766841362509,
                17865442848307712220,
                4017570072096420828,
                359910874540192895,
                14283136222667718022,
                15545842610688758167,
                9161703351540143861,
                10856046010222875891,
                270665191423043189,
                15816860058997167317,
                10604344774996324885,
                3421439666836669232,
                15362489920565158049,
                901986887674190509,
                8102011985696643347,
                9831189590417175739,
                7694208525827500802,
                17761503253302918415,
                16843825659097088549,
                15968418888658984723,
                13213298841864639514,
                10768746828601368994,
                15843374988242905966,
                10372481985078119452,
                7145529267057724453,
                588445411774656377,
                6907651744680403237,
                13729433346623178186,
                7466282812151723072,
                2397976897839660773,
                3595288154116844222,
                3771046205661211665,
                18292138992930644589,
                5076094080207419189,
                16955129624357257007,
                3929215337030354093,
                11057894513779502294,
                11863471976993485758,
                9408615240131003867,
                2448439901554368107,
                7669176413900589628,
                13955883899642443946,
                3559761514651432863,
                5999853120304570098,
                2807928142993089395,
                6880972979489023884,
                8540438276045396759,
                13336393887543928327,
                14948024915319356336,
                754486632845103448,
                16252590658474672770,
                11838852632524903679,
                16841746824793599992,
                4866584459095974245,
                13046184814853980498,
                8710985684981006226,
                2355658489901240093,
                17682251256218590491,
                12738885399031396318,
                3641463259326479601,
                11573802402437143897,
                4785854649163125380,
                17654700608592820265,
                7689738254866306083,
                3911334929659733907,
                3805687817679677472,
                3372180752527728873,
                12516023017017683246,
                6541569134387572029,
                14932792460356112158,
                274079842264421275,
                14741476297422044947,
                7640237864595124592,
                7990415001403780690,
                14485175485850127358,
                15701126719940798119,
                7497786401585040464,
                2046586308065249596,
                4234230752844127257,
                3490034085431124756,
                7410205974894450493,
                13594277608316567296,
                13163068385450899386,
                6911330603633557461,
                4165273348787835236,
                13196815825235476993,
                15409229411685315073,
                4238586327560550200,
                4274172509763128574,
                8233070080684386642,
                1152981557203525396,
                2258263369774438742,
                16860590243592954334,
                10642146327347114407,
                16394076595581895042,
                3547145813374894294,
                7303429257652622247,
                4599869911214805642,
                1470127264048118954,
                6553553520469198052,
                624221776008514758,
                16024993613079197687,
                12072685851575104500,
                4289561477780298769,
                14522030035108027997,
                10025959010474970695,
                4338629041423254482,
                12668451231751642706,
                7041673834301289685,
                1101300709714299914,
                15830324192849592102,
                6361267392222383309,
                12743724653827284764,
                13913765213720067888,
                12472686594479717483,
                17041667280903689118,
                12612588174971368395,
                4625038945277105759,
                4288983616264520473,
                13257170061268337928,
                15378358854815534796,
                1307879339751355693,
                9045256242044980161,
                13066137780318064542,
                17483698129188252816,
                5537781126683250458,
                15814088167067959984,
                17124111106622331645,
                2228813159198082553,
                12771677329276373795,
                7473600359686104579,
                10172401847101693206,
                8817322474066906889,
                10002046533039894942,
                18350636570159627372,
                2608194133937884904,
                16496103406635747044,
                3203166370447920771,
                1416097169966651887,
                860034031549905008,
                15435212006888252138,
                4982756044520683355,
                14527835149012332766,
                15648655845991912781,
                15220061209366144565,
                10713592116389348982,
                11856331444132914701,
                13011883287657858557,
                18375660967945668491,
                7611177834315648116,
                11475292136381607303,
                12142625427672665818,
                1644376245508948388,
                14986147846200059747,
                10358191212479538383,
                2124663276626493099,
                15025396046176607689,
                7566356641233415240,
                3834259550197202335,
                7422439917941038432,
                14335746041650957139,
                11010643115481291768,
                16639917992723217687,
                3400935192914355446,
                6526469202356090658,
                2911450085827434145,
                2592450403666061908,
                6573976403851247795,
                4285219873414520276,
                15329532146725863869,
                6799347789229688901,
                6639341479260471078,
                5137054100466749121,
                5102420602612942914,
                12454937665202983967,
                12962650067948965377,
                17483657740097839287,
                12223498331603994543,
                14079145217780475833,
                3310333423646124225,
                8148231670879135605,
                9541038636961784750,
                11089617618703446533,
                3560209342825276058,
                2574634823119268479,
                2588311243176990131,
                15013509191556503430,
                15455072885984268053,
                13986137485131324765,
                5720067926322634989,
                320358790111393789,
                15410939285136639329,
                15697272961739331244,
                1355846111750777085,
                2546959351276906905,
                14534695021313396715,
                12100942362109396400,
                1909839808518887758,
                15057164163203198957,
                10816292376571145141,
                17932667027515587541,
                8894763284691124395,
                17376767493810914651,
                1054656077023869452,
                8186894411081110112,
                4918609723063820894,
                10472223930221187526,
                8210872174259857628,
                8260857529094096436,
                11707883934354468821,
                7798711246011152830,
                12313898141945763999,
                4092899057830195664,
                12768752632246510730,
                7011904089799177666,
                18269846218072729005,
                4472126139715717850,
                7263280326862818361,
                4617033187864299345,
                16062484525314928005,
                7764862313171817272,
                5507098054488704246,
                15417948890339509732,
                3199184308759380889,
                12873647785813929264,
                15851634423390314715,
                3379562369756927370,
                2914796073219663247,
                9453518290639493724,
                10389507097848983202,
                6987583823829734148,
                5644521590882572085,
                16385036288302112854,
                14202037992186130818,
                1662729350231436066,
                16086866498209553899,
                11668110277201388817,
                2581723866463834707,
                14466562150912612524,
                18444381539786477861,
                11792751584642451686,
                644172128540161319,
                15714856399314491326,
                6336413224068482580,
                15648040294508822482,
                3581892413107868745,
                2087860646799841458,
                12928312782299116049,
                4630539989871908829,
                6915603518697601787,
                14918733616941773093,
                15087665207194981362,
                613969264471068110,
                3544544803540968193,
                5220360717428049381,
                3375260723217895506,
                16778447987047186697,
                11894812810172861433,
                14542979312432827779,
                13561316753657099179,
                1968473618327458185,
                5456934299993876358,
                7469735400543018284,
                7068657239043349097,
                9254040800524479410,
                5214107275553666760,
                5001330682797736624,
                17026132790954295091,
                10969354337912897232,
                869351389198733586,
                9574587810937905907,
                6923373747285449001,
                12719903474522918771,
                12250857818862900982,
                2153256573644871951,
                13709729097688338391,
                2899377834668376960,
                6841869401787596550,
                10339715141881541659,
                718655127116157511,
                13741406681906111321,
                15392288868670671619,
                17545786767738322758,
                11089794771839702758,
                219094231550242583,
                9674358307241496741,
                4002620491443309348,
                8012290324302967070,
                8714326673970415123,
                12380264119087982419,
                11108551912665576265,
                3708955946231240253,
                11607264285750874901,
                4216424611300123940,
                8256067698160491644,
                7506994298913059376,
                11501100133000306066,
                7549037119651533111,
                5112970978157051505,
                13518442004335850902,
                7350008695599366666,
                9542638447580599221,
                2158188779042279647,
                1604170908932337076,
                6391929341437538244,
                10779746559124306734,
                12656450449103176181,
                10121044395803332310,
                11651522650180060700,
                16328514328541821784,
                10523761782294701174,
                1822303728984452144,
                7260452386953933551,
                12204494523152059466,
                17100382786462731446,
                12548225060484474439,
                11326872465335361323,
                5596285187831113760,
                5909751003547848587,
                992306619579834385,
                2228664329259510492,
                15196270917670055982,
                2131889695890586742,
                9819776790840463517,
                1473593931814601068,
                14939513955417919643,
                7685117665289355354,
                6724244559482510387,
                101460542568704969,
                7352190705745517803,
                2150669404455836808,
                455126870518119052,
                11553577781469330615,
                10384536636375637150,
                14364597940339752635,
                2495319672618636831,
                8180783418013670444,
                3773765470722916252,
                10227754258298095569,
                4811293038656815364,
                2304664986814074602,
                2418992918773594204,
                6388448639180737685,
                6893696275605311774,
                13851958766811817366,
                4793074330182947851,
                4813793152033309122,
                1098414269347239038,
                11751908186279088029,
                15167430159498163699,
                10528686090760108130,
                17120804521852235295,
                5538072916971524268,
                18284870874128074659,
                224523015148941267,
                14496093443691170173,
                5490655299006793623,
                11584315652765207551,
                3229579698633170375,
                5527375504543907996,
                6239324650299686862,
                2232148196848710005,
                9031256656667465794,
                40023723987633148,
                14627741678268078967,
                11950626749898431344,
                14785414395108523186,
                870832948163923646,
                13004928204786500706,
                11732704426571300600,
                907514934656616373,
                11587740830029349245,
                7583505136677874861,
                2623787766244261370,
                10256163025245964672,
                7257287909572091733,
                4812915812660879618,
                3468364439026649335,
                6604147596013682093,
                16816894664989923710,
                3964120271755066308,
                6086548275463043980,
                10447117175471304144,
                12856607441078849807,
                10592398111690221432,
                14269275707379118835,
                4396127772639422927,
                10489721798852691549,
                6681412646421684356,
                12490106130106455109,
                3624408102113036819,
                17246634770535451304,
                73750230380742720,
                3858795004528971618,
                18037249274864620640,
                9013680198221453825,
                11909298583725721915,
                7512555591920604211,
                17449244834240874515,
                7793591661081767445,
                16652407448095073621,
                11804971167281860328,
                16410605854679152138,
                1713343542446776550,
                16483548344281970818,
                4628627981197409087,
                9083762764219706193,
                17065951854876058290,
                11490185594933330698,
                9891012968004512035,
                368256788081374064,
                470621950908252,
                17956316299265730194,
                8221822257224301188,
                6380872247545425488,
                9031471961851140451,
                17956391258409007260,
                13017604911584754606,
                9245778199486992293,
                8056793204522970093,
                2531655295742236851,
                16039488662052065607,
                4695551407385442957,
                16581782264738209135,
                9457268466305801158,
                2502271077174158302,
                836797013558343943,
                1224523470498102285,
                374165187087964522,
                10212314508075547184,
                7669093970332858967,
                9176723313583927295,
                8839526249801396044,
                9460240515540152245,
                526138750665184089,
                6908994573320912372,
                12176043050383940227,
                8431292525679019707,
                7800865258551716648,
                2930208417676545581,
                12001139080437682925,
                2848294057310329443,
                3495763019164815081,
                13998099468531902475,
                2334207795701343601,
                1265352082029868252,
                5352951968929077427,
                11045950825318827473,
                17705541510574119706,
                10388016860076689091,
                6188336841660552180,
                3874842388902329486,
                3586889024655840994,
                7577730940669490050,
                3828324032996703471,
                7382564057518691083,
                18020764642442034007,
                3255848346667024023,
                913981917700616307,
                6544220161742236189,
                628453794376152858,
                5273139986123145851,
                12804359385937816703,
                15490118777013724970,
                5004956137979193113,
                11537600208633214816,
                6041778305931749161,
                18021165191120757752,
                4439552721639804321,
                9445924893904633163,
                6333608419766441318,
                6265966168082228187,
                5090746176805509189,
                12079779788101746835,
                3405057163683809716,
                18176431495575685240,
                5416316679824315388,
                5666993498240944478,
                9396996717121195736,
                15077940112899068312,
                15769845674133811095,
                4172092555141541227,
                10535661541737621064,
                10760049649331328984,
                9044328015087752668,
                4208484814661836163,
                4524519455413453106,
                8416163180819044235,
                76133776812564214,
                8938397440798861336,
                7699462000599225384,
                9542247023407697767,
                1397476485288102889,
                12838783590422826565,
                11111769246893411506,
                17719085637529819037,
                18350048131892648764,
                647133208572620551,
                3545832683987398107,
                17392149180006432089,
                4645454948531556636,
                4638633830898005179,
                15832113029610700219,
                12312766094616504216,
                11054531676785061901,
                12882000175930708962,
                17065292675540451547,
                7348135285662513163,
                10368855461513742486,
                17213692472848349009,
                5448237816391429929,
                17475251701204191843,
                12352004908893419844,
                4421019229248084817,
                5233890583141520327,
                15415498665325430242,
                8699482400205838797,
                11081065321342975843,
                13692414560354688711,
                2057100631763259620,
                1768191442150902149,
                12463118341434320148,
                14697940362261450576,
                7225350934202123472,
                9180626944525820669,
                14817691250517499688,
                9524098384486815580,
                4894140555324164954,
                2309262794362375113,
                8645740617004046828,
                16829903653299752341,
                4278553392732422821,
                16174995535301769275,
                7274361875865992211,
                5483861345936568593,
                16555617280692737205,
                2106788877369503099,
                6355572984153420404,
                15413046204382700864,
                15184587830187202860,
                17638950466015943646,
                10142359495639047596,
                2852278080143788489,
                14902051473257283997,
                12684082230048932446,
                5127878269602498356,
                1458833335160283623,
                18343902965575788886,
                15956410439937236477,
                10143815431586875695,
                8519328419973108156,
                9379288137799805556,
                11116700304696206296,
                3269635235146511468,
                7446145908658980471,
                8423421258962502269,
                2960959498368537205,
                8029834119982365442,
                12951331847284209016,
                13335373530776006943,
                2051038411438343086,
                14988843915712852160,
                11070472159205332532,
                2405233098821133668,
                12872299485466251244,
                4146849588411590424,
                8652997027024585292,
                9417874732592565535,
                2771366489480367357,
                16381568131097774387,
                1160190173665475303,
                12142110843989704382,
                17157977103678150822,
                12240974252728213375,
                8005232037362794911,
                62748564819661432,
                15562900352067429326,
                13819933941831285726,
                8700733640462543781,
                17417693392111317966,
                11195518897113567806,
                8656545261572504126,
                2665140739762930045,
                2523114891549547532,
                15947075740878853027,
                16617762624958355772,
                9189411410511795645,
                9417682881040880723,
                1220008371097876826,
                4473435335583972063,
                12416336276688398745,
                9439155074539900208,
                17599514971068491442,
                1382978212068751289,
                12012964446858847311,
                13059411911626363940,
                9000605160655962560,
                18444429515577739106,
                1678358883660355393,
                5074103451266196440,
                1108189786283239561,
                10612698979413855931,
                4989895863474068758,
                653620819971957060,
                12060263383072344947,
                15076531277958824549,
                10597595939754188762,
                15724450558403473627,
                16382650125476798913,
                8738893762787150302,
                9733212779214420390,
                5558001311635500417,
                2720376062751869999,
                2936217033743496825,
                3059230718610361194,
                5589670835881847684,
                12297086381101763222,
                12830838307506907529,
                7727866232017902927,
                16978583538503170044,
                5646531489086592542,
                5696883024644775459,
                1778382958859079024,
                9219341275099378906,
                17593963150311257769,
                198176573650528594,
                10425519151629874209,
                13457055667833759545,
                17213583299444020650,
                14862117423842849302,
                16906392281688863338,
                4290302946266596427,
                13505570400341984024,
                2056510386911305907,
                11571082458161054292,
                7566281435617775832,
                10210241606684674096,
                10697498687651578080,
                4947318501826974509,
                5861434792576988890,
                9869040491958929661,
                5532013052186573089,
                12416594018569715230,
                10820734898252214278,
                8537468997207455166,
                439343392893541672,
                14734630723072977466,
                9898041261033982210,
                17393034157801306127,
                13758525217758656857,
                2713096067589327874,
                12442874178280670969,
                14498768890161377807,
                161967360889456606,
                11930601082339405958,
                11362787206913160786,
                12545070484550723467,
                14815095129086834610,
                8605787829002095856,
                12923597973881209899,
                10587151577465292584,
                14183134664818382968,
                5172374334040473114,
                9364926097792520560,
                6171919845492918332,
                4386231931762251578,
                2155663571428617218,
                7765511219465701910,
                12061535530010910259,
                16100330205655290696,
                9974384126080194942,
                9674175848724908032,
                1687977953933677553,
                2052842863240418404,
                18296704913226861337,
                4023434438910601547,
                9899743965354682742,
                5310198234766113901,
                5162456985274720081,
                8646509974119784542,
                6113717383160009894,
                6014191554047499022,
                8484348411248636487,
                2876047496375093909,
                6660788054730924011,
                1664197372146636482,
                2820993293910648101,
                11665512417100144808,
                6502457677692154814,
                2170150732610996776,
                15522116097990839236,
                15440086643427998964,
                3675113412536301313,
                8316358419658521853,
                189389437052919038,
                6981753429704993440,
                12802645856607643857,
                7243825699014665843,
                12796799374814419834,
                8068467907492367066,
                16310382387876189712,
                1486061732225930791,
                382533986053029739,
                16359148449656380800,
                17246074348224240328,
                11700746273206874174,
            ],
            true,
            &[
                15498103360604201801,
                14680681220073716272,
                2597755073189185031,
                3031720638800363592,
                1920406924732488878,
                10671706282978043129,
                6228787134876346903,
                379886459615822925,
                13395893364837647375,
                2539271575052356599,
                5822821431547583252,
                11653751705603753257,
                12529814421763290515,
                16725786429659625136,
                8733808577647898400,
                16438345524314195560,
                13777363959694830441,
                14778407189296268050,
                7947204033657518709,
                12198601215715000710,
                14004671183850272040,
                2889674051614386577,
                10853297240118727311,
                6550855388784511682,
                10594647619939535751,
                16524423461967409279,
                994846650169701593,
                4039993035738174198,
                7455026353542067531,
                13807909686230087400,
                16619061172485859478,
                1546401888779565694,
                9690928310204887436,
                5454239242551327618,
                3786919253240050536,
                2972332442098923930,
                1865268881810449860,
                8339549666946765074,
                13006352754592757965,
                1714792330552067567,
                6220026947940415121,
                4048069131584252803,
                17688504380133199508,
                17216109827709949817,
                11949387591167859998,
                6855711313153816508,
                17917442589402729465,
                8600885059137106442,
                14888743631958063001,
                9431744630167571473,
                8272246627545091450,
                17341832173311952535,
                5160662201476171772,
                15038444760033175970,
                14039296666679545981,
                2263167394422146208,
                8446862552035629888,
                4853953753265406906,
                6685969515208740927,
                8256430291108630658,
                10896747900245806123,
                14368162519606825238,
                7786764717051573685,
                5370546488631029142,
                15582578406703215017,
                9494185062826522189,
                6363441093260940599,
                16190691295942052876,
                12724998683972539048,
                2102181153200211977,
                879764964453554414,
                3347396463829460164,
                1027339669743783444,
                17583129106206895304,
                282387697705284642,
                17110710405896291662,
                11498688457889144764,
                6965355384393768126,
                13278709567767772146,
                4819923293192931680,
                1170338567469074232,
                763615589049737121,
                2348050584087482620,
                14097296695204456959,
                6384334913949883710,
                6028544760791927713,
                8187545488055362231,
                7063217129888877167,
                13479644449093004187,
                11992733912376194292,
                7409310591773283984,
                13031150744286911622,
                9332879416429877896,
                2001884409427827782,
                15203114628217631180,
                14017477444722883946,
                7610351877068962234,
                9319846690308621869,
                7203395294399241513,
                1778452692808043374,
                12850855729587627891,
                1360166033214989666,
                13959275740256150433,
                1843781989277689675,
                13164190414140016883,
                3081307608579392680,
                8221511042828430700,
                10565795978869754992,
                855511478939793280,
                17555024393632391969,
                4676606444126992994,
                16536255467354733310,
                7706482596057768719,
                7982435643880136195,
                2343558441420595688,
                8038073847992125590,
                6532371125691312796,
                3497211664997370445,
                17060901251779314901,
                8091433945761175425,
                16183609030655920635,
                16134243026506678734,
                9180668788515171706,
                18003960143664339508,
                13887735155279069367,
                2659683821455572987,
                1331603854454319596,
                16082403620038202501,
                369464106971055547,
                16311050942660421666,
                2994870778517660556,
                11130168214536899193,
                3300406311663170456,
                1075089886256539971,
                9012950151532917276,
                641757861159507369,
                15966286426551108727,
                1226877989263316310,
                17112637329270715265,
                17323663008089158231,
                10026469426888150267,
                524479246512834180,
                10905694386442894721,
                3672252371967730615,
                15037399789406973858,
                12269806864516545683,
                10761709967947971245,
                13105266188161840706,
                17338364687856820797,
                16100433027433167590,
                14337016682458810045,
                3332196670791019099,
                5195803899392128754,
                12941547540344482902,
                9032161337701862144,
                5119058081849308896,
                9293401341523949372,
                2355093473782322052,
                15065206658334786999,
                6783932346331470797,
                2282237337525993718,
                12116195797686921304,
                12268793128461513563,
                10265900513243166078,
                2970086998765846777,
                5285800515582961715,
                12385459780641615157,
                5601921082969230188,
                5739224955818992148,
                5974530395831456872,
                11711584111803267702,
                15646178135498987414,
                12157670326998106818,
                7791656942816786940,
                14344848147208564924,
                8700884833629903231,
                18177769559740364464,
                18382136005865921159,
                222823780357781604,
                497948724088869099,
                9863620480969751318,
                16308985429832874022,
                1368611891476963920,
                8858581712296235685,
                1793308458534327344,
                7396111023030682916,
                3895507615963378822,
                14177713440849561511,
                14508402349077922893,
                361323830993616269,
                2825345270910018629,
                3016833259740851983,
                14483705479778190024,
                3191843655544259254,
                17070318950017119283,
                2247769061143051061,
                10292893110800209725,
                11180590473858949296,
                491608769894573367,
                4091862619508686394,
                3622150583759937322,
                9568595877746213070,
                479214495394894017,
                13004153549418065685,
                11861044287632377914,
                5905426964527919438,
                15015303818527343634,
                9416264667829720601,
                16081900471086526579,
                9098802851390736358,
                7391232700349409101,
                13667214033814761539,
                12794230344463343073,
                10563713604936057218,
                10052294573876784373,
                7759412720896564264,
                9366854730557707997,
                2352461940723137072,
                11608039586815592966,
                6223890086918678767,
                16955768079151639030,
                13958082335128634418,
                6355109232855010962,
                1203057641719310190,
                11741473200072129728,
                5883089625042104026,
                697399775759770323,
                7003550520208088794,
                15639267143578516315,
                5207168854484713319,
                15549927463564155687,
                16813194272724195518,
                3203632921993014264,
                2659632200539494052,
                3200887485387849503,
                3016394023706511246,
                1685176993209004988,
                4998042426381070680,
                12308396269304618142,
                10440905572279671571,
                7289258316425236560,
                11420492019403843671,
                3435739014286885023,
                1183580578914549974,
                12391022286588593670,
                14444662377984361207,
                3027667768274959200,
                10234843522693820701,
                8137024801098838373,
                2175956518454571415,
                6512856431774372320,
                17425077298837902611,
                15619030842709663170,
                4328733858250197414,
                17049066271793844563,
                16740818455336098686,
                12803231563237450023,
                14343207585545120929,
                40565370554270873,
                12269808301108907911,
                14237854148444748363,
                10889535537041659002,
                5359832735901121412,
                2280455121926342381,
                3698460136651532460,
                15500853660111634993,
                4832455315374609219,
                11551934315514307960,
                15059280723596882650,
                11460904528728722381,
                9970203721365112078,
                13412504833312966786,
                2206569743519066169,
                9674034118822376378,
                1759760896325455600,
                10687307483631403928,
                132216754299839087,
                15289917908856362717,
                1309517963883189412,
                18384862652234479475,
                14945947123806962003,
                6882615358601571684,
                16513199887693192411,
                17124752213270846694,
                7283515403266723292,
                12670977044098443396,
                14485430674802409203,
                1442934611356195090,
                2021608864368655648,
                10147644583900548957,
                7371857896328825503,
                2026947477675445350,
                16313500187754293138,
                8719670043093194236,
                9933635014681005842,
                822035763478980397,
                2335471145280263358,
                6109201632743197420,
                6557042951458164883,
                18289983318532010507,
                9986031355445219324,
                15882873198924587879,
                1098360009929048631,
                7417842524061545043,
                11644845667626684475,
                12942727688395215899,
                581290207332301664,
                8125070223816106784,
                11423720844597916472,
                10762562165784879144,
                18174238106661068956,
                9781731830317872009,
                14559997564850144831,
                15072792132406040717,
                6428710680341821974,
                8638270714640158948,
                4747635406887618639,
                8166831520970770757,
                16942363651143481863,
                79838347512847759,
                6797482772873510007,
                8323313311501674325,
                17315123295476467077,
                17834823603692454763,
                10308328726247533052,
                12030775355448257403,
                2824788998758389510,
                14109078089313897312,
                11641130520145898166,
                5636888963936541037,
                18167395440091628041,
                13372321523258588071,
                4953410089393985196,
                16105978672566938901,
                10601583498278860290,
                422348575551778984,
                15238612832267589376,
                1558937784171631375,
                4331786449779679969,
                15337418327813603463,
                3313623259710416722,
                17208498059429816255,
                11251165400370815573,
                17196498271703547709,
                4097082694964734509,
                7556946433095242856,
                6347844528857916723,
                4396355829072866852,
                15635886121326888262,
                7946520529777546618,
                17096795895172408901,
                9111548767024605867,
                16907865654057151888,
                5359925595440508025,
                14237051989030130933,
                17920964492648856901,
                9862823344875030309,
                7831769621036765714,
                15021371912684571004,
                13219589878808411721,
                3953374146380746931,
                12281692872760829769,
                17693057212120612558,
                5241268511066516428,
                4584240683173043100,
                11307963236856502036,
                7464986033622734170,
                11524680505188643482,
                17257089978727055496,
                18059877653952752717,
                15575226900606154880,
                3221287664925276003,
                12861272282032425661,
                17679280856858968683,
                3805991681496902676,
                11826697782075950609,
                11798316213508884820,
                7256245301505607009,
                1942097151423080080,
                16676392041435466123,
                3541826565176409368,
                13666275375614477812,
                13646853539556393482,
                12122709830935888872,
                5785269903265304048,
                5868625090434118091,
                3864460472305508684,
                8895862569614586345,
                12252663534383898572,
                10626162454630951434,
                7883969995276923964,
                17478887037876608342,
                6525728841689878159,
                17336841599087317704,
                11085223335146350423,
                1222123164560134901,
                5595334910355692295,
                7363771988069998591,
                9010542397617207628,
                8434654566307931545,
                11206543728876967867,
                15587365405946669727,
                2320942588082952209,
                15311261788951755580,
                2614614644094425585,
                16217798751029591830,
                10309196366595871818,
                14539656466339188474,
                10003084092804057729,
                17222779654871765458,
                7744845468535171480,
                771418309849778572,
                11853058894145105205,
                7897815886550766898,
                5556587033994696457,
                5714513807268881046,
                17023601577918379389,
                7803604781873663765,
                9673291697515318071,
                751122971760046241,
                12388950643138021462,
                6504250773221959796,
                2900483328540996047,
                16094938562348725597,
                13572318981601654924,
                776133591684824066,
                17428665954631228492,
                8871325163368356380,
                6583256885218221021,
                1423625032359763948,
                8622740667699315995,
                15406519135004097712,
                9334369631470070512,
                561254366250448269,
                2451227769609519941,
                8184551011516832687,
                14941775554735050609,
                2759039806353480037,
                11925431361731619347,
                10618650992098344834,
                5791425757755968063,
                11660536948841586794,
                2857507999616493872,
                5825182218810570134,
                17584369622325436663,
                794055755026372106,
                12883797727322545150,
                18063953891303933291,
                1790841919243736465,
                5922286747060715395,
                13635166140759297450,
                12934485298710265323,
                11510394440285739488,
                12653058381697761786,
                3520206312932507527,
                4915681338581827651,
                14909516590488540050,
                8456908206610978485,
                2644237539946939762,
                6968908545546543585,
                17353040957162817288,
                228004544586749645,
                13386917106721017370,
                2184106151122208429,
                16467989441911105753,
                10601823028219711509,
                18167950260390545512,
                8277286857156019519,
                13563912571686595957,
                15582544648763444728,
                9860615950719022688,
                3933595180193208944,
                12737069340933819752,
                2548892651686437285,
                3303413609438162579,
                17777198402933062639,
                5612657840907832552,
                10097325046301879419,
                13502797453096229412,
                16293091837583275620,
                10149785319153721053,
                10917494345308567085,
                8633251221833283482,
                15738850746404276595,
                6752312563210507217,
                7135284369428244819,
                13321936134618682416,
                11186187484044006385,
                15467255718596759448,
                4015680278938498487,
                8912017791951568885,
                17369296825929516384,
                11139067090598960686,
                13891662388974658401,
                3024082309075874431,
                10424315222954594810,
                14513618925484751860,
                7276364549692054193,
                11034452333610388814,
                9789225329773407471,
                12095760644845543832,
                3633636993638476391,
                15639450070030165345,
                14131121496387047030,
                1997628424286182611,
                4886205421027198894,
                2281507686083878983,
                14449854216333401840,
                11502216356832663403,
                13217816854604559250,
                13361208817170243759,
                3141182044294776671,
                943014545321951171,
                9633879085127205937,
                16989828445793452648,
                11835207147831430092,
                7872611687915144993,
                4049881848896294199,
                3290792016280792924,
                16059058124944821524,
                18117071023279943008,
                2165714551511825906,
                4833662604885929274,
                10526578162287941048,
                13206778162496184746,
                3896743010069301483,
                16460014844475236489,
                15154725474972641298,
                14345270766528744663,
                17402402453289603334,
                3288718495566280780,
                8993733837232386155,
                3833085535083527294,
                7847978509748787883,
                7972924047649057079,
                12473398711254555491,
                15731808600224711384,
                3182304439100627450,
                2222507844556822292,
                12748274553933993123,
                3732391409121408330,
                5896704990342262438,
                10476090783680276673,
                7391366085325406250,
                9360823097004384536,
                1522113286895808467,
                12026598040119338948,
                12893282189675353714,
                1548700654335322520,
                11308375302858097618,
                6607303211456996260,
                12621767746489750095,
                16790296314382286229,
                4205006354245204458,
                6862768412190121175,
                6199274374008955620,
                6149173056349597341,
                4671022687150055483,
                2339406038313386086,
                2580712663495884399,
                5155064204644202167,
                10701280261854167679,
                2003705784272479623,
                891800345438178258,
                2015157615957402424,
                14734603996366190682,
                2500055061464995368,
                7565076598722386219,
                797833630650518729,
                8246811997609042702,
                307274411518370206,
                15392638891124529583,
                8133595059008797235,
                2133482744567035368,
                6768583867520736798,
                13870757981396451531,
                3905284165590317986,
                3725077298590384134,
                11913658005747634296,
                16413425521993511734,
                16928435840770689079,
                15158417916852732700,
                15078403577663587115,
                3604841662928070482,
                8779579673678636779,
                1844972348783550177,
                1955688372597214830,
                10648724934575366934,
                7678993761009537627,
                6073617291696587360,
                3615200825975967408,
                16371640817143729595,
                16928482556305122249,
                12990694152278275704,
                5640259820302602755,
                4989122819964029214,
                7590422812313190613,
                15721317340593136631,
                14456366058538546421,
                6859291583171100475,
                17730064557195549303,
                12219353466802479223,
                11213809090707058129,
                6321450736904845757,
                16151341499792188358,
                4253083896566756937,
                1178914272955904563,
                13890560466563563173,
                17998034639207894616,
                15698739872825380840,
                7704370348197248021,
                14688093845995269729,
                10994178222689427725,
                15202615776454662278,
                2397376818002250319,
                16152831963735085706,
                1343705646975602069,
                9971858951327064782,
                13758691325336329519,
                17302762426880499898,
                8807701590488219892,
                6199420116262704967,
                9664416484578619747,
                10236591429744542118,
                4423424052098369685,
                17610466725009345131,
                18294628161039087585,
                16968894997210109518,
                10551385103597485203,
                9947281806024743977,
                14758108212921747826,
                10549325689211416175,
                6587235771698546584,
                14966278167349758870,
                5528693664081443227,
                11949914318271519709,
                8016488460872121417,
                2207215439863076393,
                8975573544109811696,
                684661245008108269,
                9509929980012046821,
                3032917475263357561,
                2266490715697348333,
                8183312483725612477,
                240525392577752196,
                15478661834874363472,
                3470245043229935761,
                2464525278395619404,
                11110278275554344534,
                4908085575640720862,
                15064778674958610402,
                4828835356862930951,
                6202584064584953358,
                10295563005485174947,
                3163276082607976067,
                14049639598239105180,
                3650233217585203620,
                12608886534768827942,
                3981905877343315598,
                39468275061822561,
                17591426002006430904,
                7594517119640797959,
                14880567798374375908,
                4017486827885574448,
                13737692776882788427,
                6158794355989980812,
                383745276846808810,
                5108235151843952780,
                6581178451981594031,
                11451128845105388295,
                698564733531409693,
                13590491791704146886,
                10352604600393091731,
                6213449185937997650,
                4348280587322608966,
                959194844934412287,
                15484062908308664344,
                7387861422874591620,
                17667235454770559565,
                2440272288352768767,
                15313076085483229881,
                4394939461270873554,
                1628152315473173420,
                1415402097762366967,
                15346329547611571068,
                11311158606059373217,
                2366068387763653832,
                15827874528350068510,
                13478669408398828575,
                5936593674063517567,
                10584447941392540523,
                1317442477979981269,
                8979238841918884811,
                5240407513739116940,
                12227540356097433044,
                11331718208669401235,
                11393510971894295226,
                478480586582623369,
                2028112196418916108,
                16944217440280198338,
                9814942465102597148,
                3183401114378360681,
                7794238633501499150,
                6535042020255030123,
                16258670974723154594,
                2212968344770363453,
                5719260649695922910,
                4606011453115746425,
                18085523271336811794,
                17023461305362306011,
                4247443272385203825,
                6453251596576818368,
                18153292782216062723,
                5969466175493841801,
                6321027330911253733,
                10620114383079958080,
                11515725563710830976,
                4682443894174103379,
                9005330096592740147,
                11358291404660090303,
                15135083403206933818,
                6370715174201910549,
                6105822410739604100,
                8316207692961349510,
                8259189295390750903,
                2909742184369137309,
                931815393357021144,
                3709546617072645818,
                1586929876111184413,
                3725106404003481751,
                17989670899755090663,
                16491755486151566843,
                18235557335072238517,
                16819814180993789265,
                3041428806510990731,
                6865566553245145098,
                5559130936912499682,
                7868492591048735877,
                516631801965947304,
                12161391763229603010,
                2099765767202237253,
                11018187982047213443,
                1806434721568654790,
                14516670445144859820,
                14996026277919828161,
                1979400560260923097,
                530899540924426437,
                1544520666424388930,
                12533232064152026916,
                10636267691556545099,
                11484747390613915689,
                11975226862445058044,
                18241416109577265729,
                17650249201626190339,
                5761319483108090030,
                9726766041568799984,
                18315404984942763135,
                17485602863250344984,
                7542671955399167106,
                14167359599732935525,
                14822899150603891301,
                11294686994492532553,
                4045981924741516243,
                6288727179049989333,
                6271716940971079785,
                5997800943644820668,
                12705895494256190348,
                18325566440733423026,
                15268015809894548522,
                13529897842266058970,
                18331490128621572171,
                10350274989230142044,
                7235025897971980354,
                16944603767727061155,
                17046851593613065508,
                16086819789503268069,
                2290872333130971056,
                11984271223439423839,
                1968822742298832180,
                9083741104320807061,
                3490731051051179842,
                6072547544689161806,
                40892107681695834,
                8194227897552725559,
                2721703120818905136,
                9182734210123626257,
                10113312346515496162,
                1627809854903310227,
                4186406494017506284,
                10256817089933617761,
                2890871166679209745,
                9992704421054257501,
                13713795077083289625,
                3497800266051164878,
                577588120720483057,
                7743155312369684850,
                647582273058879352,
                11847425330561165923,
                7451614373862558947,
                787695141116308299,
                7020373641750093706,
                18434370843004147346,
                16766305512676347566,
                11415044418032097316,
                482952101064757562,
                18365897665965731898,
                6881852757206457367,
                13295203415856753793,
                4499519949012683341,
                17639942290890472204,
                2755065488659651945,
                9099541245887106039,
                8663706628944419889,
                17311177494160805304,
                3306401809449207660,
                2992016527983769757,
                6087225719072057672,
                6533774652927754545,
                18039943409631383264,
                1540245282770191318,
                15277302707208554957,
                17334457161902221476,
                10845441929461561460,
                11846394699980441664,
                9115621611590602269,
                2922854986832564065,
                17451398518651662455,
                1624359634333743178,
                14135939137800853431,
                5650014301091287122,
                1008856784246308033,
                16575426331385040544,
                11769760111485998379,
                18047362944033116891,
                4430274753462093265,
                10745539796374847916,
                10143880086904985637,
                11789608990060323996,
                9802343997665591732,
                5669534112895101423,
                16251907517385954967,
                6261903170633780259,
                8303151037984901826,
                13675205335362018011,
                4667052050829987784,
                5394729392207077204,
                3621809308351225757,
                17881301996012426281,
                18399425005085138360,
                11784479206713797182,
                10851557031496270555,
                18242614516595162924,
                3073485463193110742,
                13919662806477670818,
                15467987962430305736,
                17976204998667974976,
                8621215111631964342,
                7126454543525487791,
                12434044822613840789,
                17437950370500401683,
                8791748056601765148,
                7578617491717957648,
                17385069130528753926,
                9612850688404007777,
                8114351499558902046,
                2647542888905057502,
                4835591961742843525,
                5890936468602936453,
                13302065294648475030,
                14976820931424228464,
                3279343125067124808,
                10626838744682430018,
                12709395681192284704,
                7430874177645136330,
                18115853546653664013,
                371015040294693882,
                15943602063165443616,
                14943822821811562326,
                7804830422267751664,
                14895692916762302315,
                12698274826067610241,
                4758182647740913674,
                4888906871671527431,
                1572622354970534142,
                9250392132777844371,
                12615538942854370319,
                6020495506206849796,
                13058788715426468132,
                14422825795723441575,
                3943209974410467764,
                12768876895569234627,
                10635363936797354481,
            ],
        );
    }
}

#[test]
#[should_panic]
fn limbs_invert_newton_approx_fail_1() {
    limbs_invert_newton_approx(&mut [10; 6], &[1, 2, 3, 4, 5], &mut [10; 10]);
}

#[test]
#[should_panic]
fn limbs_invert_newton_approx_fail_2() {
    limbs_invert_newton_approx(&mut [10; 6], &[1, 2, 3, 4, 0x80000000], &mut [10; 8]);
}

#[test]
#[should_panic]
fn limbs_invert_newton_approx_fail_3() {
    limbs_invert_newton_approx(&mut [10; 6], &[1, 2, 3, 0x80000000], &mut [10; 10]);
}

#[test]
#[should_panic]
fn limbs_invert_newton_approx_fail_4() {
    limbs_invert_newton_approx(&mut [10; 4], &[1, 2, 3, 4, 0x80000000], &mut [10; 10]);
}

#[cfg(feature = "32_bit_limbs")]
#[test]
fn test_limbs_invert_approx() {
    let test = |is_in: &[Limb], ds: &[Limb], result_definitely_exact, is_out: &[Limb]| {
        let mut is = is_in.to_vec();
        let mut scratch = vec![0; is_in.len() << 1];
        assert_eq!(
            limbs_invert_approx(&mut is, ds, &mut scratch),
            result_definitely_exact,
        );
        assert_eq!(is, is_out);
        verify_limbs_invert_approx(is_in, ds, result_definitely_exact, &is);
    };
    // ds.len() < INV_NEWTON_THRESHOLD
    test(&[10; 3], &[0x80000000], true, &[u32::MAX, 10, 10]);
    // ds.len() >= INV_NEWTON_THRESHOLD
    let mut ds = vec![123; 175];
    ds.push(0x80000000);
    test(
        &[10; 176],
        &ds,
        false,
        &[
            2468656776,
            458964117,
            2715468315,
            1790012879,
            3522999749,
            4214715874,
            561506786,
            3302400720,
            534918344,
            1263272887,
            3075782921,
            2067555491,
            746647830,
            518406956,
            2268770356,
            199166681,
            585200343,
            2568074090,
            496918528,
            707408551,
            2864167181,
            2697486675,
            365965986,
            566676423,
            4243405542,
            2529073250,
            1738952834,
            695156794,
            4116132056,
            240876219,
            2603129425,
            2192004736,
            1342688443,
            2964614325,
            4249182840,
            2414593720,
            2593965601,
            2916418334,
            2637652497,
            994042154,
            3834346320,
            2159029599,
            988365118,
            3644217481,
            1407533479,
            654358021,
            2493606292,
            4023096448,
            1141066521,
            983459780,
            3892764635,
            2438657556,
            46466645,
            374378413,
            979049107,
            3284790741,
            3990074329,
            928205488,
            3007997859,
            3046358137,
            2915845116,
            628001258,
            3465083935,
            4236663285,
            474535350,
            2027435145,
            3567992797,
            4283770508,
            2324985479,
            376140225,
            777742614,
            1991983228,
            354120270,
            1512293869,
            1872844204,
            2864777182,
            1662657829,
            3120313116,
            1367744326,
            3903740266,
            1092780358,
            4056570813,
            2945196325,
            187533600,
            931587688,
            2394937291,
            1507441207,
            345576625,
            1601524905,
            476504330,
            1269949561,
            3390313417,
            881580197,
            1002436463,
            2217811800,
            685849999,
            185823896,
            1272490189,
            3967659522,
            3205992619,
            2860215323,
            3472978514,
            1224636072,
            305126296,
            1759643037,
            3515215216,
            4075133951,
            1224421257,
            774076486,
            3594767960,
            1443121990,
            2854565002,
            2031006704,
            3471036315,
            2258092726,
            3015513815,
            1591867662,
            2298829418,
            2586837892,
            4173923545,
            3288784297,
            1655027454,
            674268161,
            118227690,
            4135574019,
            3420877922,
            3419101194,
            2933141174,
            801148518,
            2138817011,
            4265486539,
            2610068278,
            3432736337,
            4263393041,
            3163494866,
            1217674034,
            638081175,
            1411840480,
            38063796,
            989590891,
            457807629,
            1412034828,
            1103809621,
            2233526783,
            1436248111,
            1917272861,
            1485988800,
            1517198661,
            126869,
            2315908856,
            3274287261,
            3670331343,
            473008784,
            1471036169,
            231026838,
            3870905408,
            2284494418,
            3904415704,
            3550806025,
            1919076393,
            1355185851,
            1830925510,
            1032027683,
            3523514211,
            219638593,
            1697572843,
            1874144044,
            3230672849,
            2851366658,
            4206129317,
            4265556027,
            241571,
            120540,
            4294966804,
            4294966803,
            u32::MAX,
        ],
    );
}

#[test]
#[should_panic]
fn limbs_invert_approx_fail_1() {
    limbs_invert_approx(&mut [10; 3], &[1], &mut [10, 10]);
}

#[test]
#[should_panic]
fn limbs_invert_approx_fail_2() {
    limbs_invert_approx(&mut [10; 3], &[1, 0x80000000], &mut [10; 3]);
}

#[test]
#[should_panic]
fn limbs_invert_approx_fail_3() {
    limbs_invert_approx(&mut [10; 3], &[], &mut [10; 3]);
}

#[test]
#[should_panic]
fn limbs_invert_approx_fail_4() {
    limbs_invert_approx(&mut [10; 1], &[1, 0x80000000], &mut [10; 4]);
}

fn verify_limbs_div_mod_2(
    qs_in: &[Limb],
    rs_in: &[Limb],
    ns: &[Limb],
    ds: &[Limb],
    q_highest: bool,
    qs_out: &[Limb],
    rs_out: &[Limb],
) {
    let n = Natural::from_limbs_asc(ns);
    let d = Natural::from_limbs_asc(ds);
    let d_len = ds.len();
    let (expected_q, expected_r) = (&n).div_mod(&d);
    let base_q_len = ns.len() - d_len;
    let mut qs = qs_out[..base_q_len].to_vec();
    if q_highest {
        qs.push(1);
    }
    let q = Natural::from_owned_limbs_asc(qs);
    let r = Natural::from_limbs_asc(&rs_out[..d_len]);
    assert_eq!(q, expected_q);
    assert_eq!(r, expected_r);
    assert_eq!(&qs_in[base_q_len..], &qs_out[base_q_len..]);
    assert_eq!(&rs_in[d_len..], &rs_out[d_len..]);
    assert!(r < d);
    assert_eq!(q * d + r, n);
}

#[test]
fn test_limbs_div_mod_barrett() {
    let test = |qs_in: &[Limb],
                rs_in: &[Limb],
                ns: &[Limb],
                ds: &[Limb],
                q_highest,
                qs_out: &[Limb],
                rs_out: &[Limb]| {
        let mut qs = qs_in.to_vec();
        let mut rs = rs_in.to_vec();
        let mut scratch = vec![0; limbs_div_mod_barrett_scratch_len(ns.len(), ds.len())];
        assert_eq!(
            limbs_div_mod_barrett(&mut qs, &mut rs, ns, ds, &mut scratch),
            q_highest,
        );
        assert_eq!(qs, qs_out);
        assert_eq!(rs, rs_out);
        verify_limbs_div_mod_2(qs_in, rs_in, ns, ds, q_highest, &qs, &rs);
    };
    #[cfg(feature = "32_bit_limbs")]
    {
        // q_len + MU_DIV_QR_SKEW_THRESHOLD >= d_len
        // d_len != i_len in limbs_div_mod_barrett_helper
        // !limbs_add_limb_to_out(scratch, &ds[d_len - i_len_plus_1..], 1)
        //      in limbs_div_mod_barrett_helper
        // !highest_q in limbs_div_mod_barrett_preinverted
        // i_len == chunk_len in limbs_div_mod_barrett_preinverted
        // i_len < MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD in limbs_div_mod_barrett_preinverted
        // n > 0 in limbs_div_mod_barrett_preinverted
        // limbs_cmp_same_length(ns_hi, ds) >= Ordering::Equal in limbs_div_mod_barrett_preinverted
        test(
            &[10, 10],
            &[10, 10, 10],
            &[1, 2, 3],
            &[1, 0x80000000],
            false,
            &[6, 10],
            &[0xfffffffb, 1, 10],
        );
        // highest_q in limbs_div_mod_barrett_preinverted
        // i_len >= MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD in limbs_div_mod_barrett_preinverted
        // d_len_plus_i_len > scratch_len in limbs_div_barrett_large_product
        // i_len != chunk_len in limbs_div_mod_barrett_preinverted
        // limbs_cmp_same_length(ns_hi, ds) == Ordering::Less in limbs_div_mod_barrett_preinverted
        test(
            &[
                3347432287, 667250836, 2974407817, 429996943, 2750501459, 981155607, 2784121354,
                3415523349, 1074478768, 1820977205, 231390348, 1372589414, 2069009514, 2430571486,
                1857553253, 1536218533, 3666738280, 3477095993, 1509486443, 3092180985, 1588218081,
                2448257324, 672729993, 2374023188, 2913701567, 2541072953, 762935357, 1333399576,
                2676378567, 2962748936, 744662462, 1379794240, 2290146289, 4080012384, 2739115667,
                701035190, 4208500661, 2190862255, 3061320303, 3853993751, 2324138270, 2878407932,
                3552024846, 3816909905, 3815506441, 1255343574, 1901570312, 91219029, 1399539132,
                3118241152, 3325617992, 2881339798, 2520199899, 3667594206, 1853889834, 866669545,
                4104229459, 2070282300, 1484152931, 3098893530, 358952500, 2164190448, 4138312509,
                727032566, 2750086730, 3119399990, 1390731909,
            ],
            &[
                1037101017, 1727794380, 1490452070, 1098486148, 4011045557, 2946764072, 697788893,
                2534857680, 3261736561, 2991036431, 3203952375, 678147993, 1718071908, 1324397528,
                3227412704, 2808109049, 2498489092, 1483895999, 1974627636, 774482390, 1844543122,
                3947438938, 1357670917, 3021715202, 2044056785, 26339702, 2002972036, 2442219903,
                3581261805, 291932047, 3070844846, 1561991523, 2591235485, 4062653222, 432295028,
                3024980126, 3174836607, 1645982854, 968272899, 3101889669, 3996099656, 1637081358,
                2998072999, 2235890151, 553838585, 1688691976, 4092350095, 2065416776, 3709647283,
                1072755910, 2385936305, 2615766642, 136864038, 757727106, 2199116578, 2066024664,
                3784388877, 896467499, 298040025, 315565009, 4174702765, 3225704704, 23210826,
                2346706257, 1990744556, 2040289114, 1584842987, 1498510914, 2668413122, 2503096531,
                2005961409, 2272795985, 394426800, 2285275525, 2471642108, 2784697818, 1258928804,
                151106578, 3449120105, 169880528, 3307735530, 1735274873, 1875100806, 2033402873,
                1707359177, 2748179285, 3611534985, 3379681783, 1722155183, 1210860589, 1583939074,
                1413313200, 1958033089, 1382323587, 3321046184, 2567768608, 2706224116, 1925292443,
                486456966, 33556563, 4003036360, 624876701, 2847313485, 3451353450, 3432337713,
                1567344163, 2879538252, 624051431, 1206504435, 3713613381, 1062990555, 498008949,
                1798769609, 3937669287, 4147083150, 2479873449, 1454286408, 665997230, 331654711,
                1482116196, 2545259161, 1591656626, 904758973, 1600224317, 3734588228, 2386781283,
                4212676921, 1479533912, 2157734799, 3588439224,
            ],
            &[
                3380102021, 2452922302, 1962966574, 3357220828, 3890634007, 1037328979, 1799391942,
                1004666291, 3982464365, 4257152024, 187444313, 3439720141, 1266693503, 724678963,
                3437259008, 1572104078, 4039559445, 3285865736, 3569601379, 1308348984, 1718729371,
                284719758, 444404442, 4151851178, 2692003849, 1055982587, 4035467383, 3921915216,
                3487944745, 1817447325, 1542763265, 3937726417, 2223825009, 1394339428, 1214099970,
                4192217805, 3753293552, 3811191236, 706896668, 1075933013, 3658129436, 156288657,
                1259909922, 1889374713, 2941065257, 81950085, 649933990, 3336906952, 2183193381,
                1175410937, 2580459452, 3904196981, 2723001189, 1789637716, 2009908016, 3170700121,
                18873175, 2237687603, 1424198121, 980763182, 1043721413, 1070004656, 3240828354,
                1874904174, 1859325685, 914946875, 3171367435, 891888508, 94557928, 2528939804,
                1026794028, 412407977, 1504097351, 2321903212, 4049474173, 2376576188, 2102495452,
                1976457360, 2692728936, 3130170922, 2123163736, 3537525633, 1557920518, 2628772698,
                453031939, 451448604, 2142259, 3310964267, 2745320950, 2734144127, 3699687158,
                784837860, 1503636827, 811700689, 582299446, 2429787592, 1210273821, 2702547973,
                2699574096, 3370153605, 1236597584, 1088015704, 2939670102, 165924895, 18853284,
                3700200624, 3220442711, 2965715000, 1488424876, 3464105223, 217616508, 315230760,
                1429465794, 1372241659, 4248780864, 767395681, 4105247821, 1532652179, 2100932260,
                2674903482, 484464190, 3609058420, 1471559178, 4122200129, 4198439348, 1623393770,
                4254969136, 2270601790, 4239377868, 588832613, 2695326914, 1952240370, 2369526722,
                669955508, 1561380904, 1661607015, 491163324, 4063133286, 339180970, 1218080293,
                2858927543, 2211268294, 4242441810, 4166777931, 459461625, 2722830085, 1984526624,
                2371328931, 3795073119, 313183280, 3291949415, 1843511154, 809173981, 3006056205,
                3286577997, 74654418, 3553288229, 2169290280, 151023939, 1586116459, 3040308252,
                4142315068, 2646953656, 4225002928, 4051564438, 1032308582, 4166856711,
            ],
            &[
                2427812263, 4051563058, 1632406385, 3107965286, 2723923069, 1032718410, 1300669246,
                1686783039, 2900234860, 381961320, 3860838802, 3653570244, 1848772343, 2404802446,
                17732494, 2990806772, 1910668969, 3421521828, 1829199569, 2997918403, 3557175274,
                3519619382, 740250212, 998547797, 140767728, 1892932539, 668118324, 497299250,
                937663333, 2612689662, 4010699478, 389960621, 3786256383, 1395295829, 1276717484,
                1869006600, 2093853956, 1555847120, 101097965, 231988325, 1792259822, 29327628,
                408838665, 3646864419, 2451151869, 3859710466, 2245716151, 2883931737, 1198282734,
                2659505911, 354206954, 3482662941, 3212522494, 4106878300, 1901956875, 645864641,
                1078147214, 1797412778, 3856838800, 2428567766, 662568175, 698243503, 4146493635,
                150220967, 3723014797, 1944885174, 2282033009, 3395489773, 473095209, 3085161317,
                2999589203, 3878818308, 1223719023, 352990164, 249223561, 4143029861, 2622703186,
                796827870, 1054862138, 677020780, 1289629518, 3449239587, 3541454564, 3311081075,
                583050818, 491332673, 1997521794, 627632367, 2864835203, 2880916227, 233376741,
                1067584403, 2454677969, 4048829167, 2955413920, 651548741, 1667224967, 659069317,
                4019573675, 3305249558, 3965166031, 2657374006, 1899323245, 2478966232, 2865170658,
                819362488, 2414458118, 203150817, 3555808793, 3366944226,
            ],
            true,
            &[
                318412713, 166261607, 2009115186, 2592695300, 909481568, 921495628, 1252820069,
                2134562168, 1472790817, 1608088310, 689541000, 69370609, 2685209974, 3562066729,
                55850493, 1884247907, 2876898529, 3115161272, 2620296992, 3497928383, 4079349604,
                2838452936, 3352297661, 3503798900, 2830174901, 2750509727, 1984400813, 797374166,
                112488353, 4244342514, 2411618910, 4209213781, 3477038403, 2142115980, 1949259992,
                1303854388, 2073509204, 1462419537, 1282719064, 770376429, 874669429, 674943385,
                4182481942, 2641210646, 1249878403, 721250586, 3561964927, 4189270923, 2494976587,
                1232128515, 2160491104, 2258727309, 3620010609, 252515683, 3388122763, 4155289792,
                1020390516, 2070282300, 1484152931, 3098893530, 358952500, 2164190448, 4138312509,
                727032566, 2750086730, 3119399990, 1390731909,
            ],
            &[
                2882761542, 785407498, 1124133487, 572386909, 1169675686, 3567625455, 4199715839,
                3851396630, 3274146684, 3477301663, 3302596192, 1480559142, 100842294, 3530609196,
                4086393700, 1190308308, 4263459677, 1142007717, 2247036858, 4120633014, 2294603452,
                2399429000, 2624162280, 1454610696, 270143073, 3957844361, 3046891288, 1549007386,
                233535161, 3109659080, 209449866, 498073310, 2626910641, 195499996, 3976787267,
                3922992490, 349292363, 3307104635, 365992265, 4190381097, 3755383481, 2478897620,
                1546723896, 4001998632, 1128630761, 2676599750, 2475921888, 3233603626, 1483504432,
                2551193799, 3557144097, 313815765, 1349744193, 1374844288, 2400211342, 2986607421,
                3195157472, 1299836347, 1861689827, 742292964, 2823852296, 448143737, 1667945403,
                633976860, 2902355589, 2157443145, 243118113, 2840619921, 2919500120, 2742747945,
                845926917, 220468159, 1355718767, 2330428847, 3717678284, 1787470596, 2523167223,
                2214932965, 2055827539, 27888400, 2211687684, 526284755, 994343204, 904008663,
                487598580, 2347713123, 3532282785, 3549720901, 2459046510, 338578128, 1168895967,
                3291681132, 3787087696, 1555047248, 894667165, 1085939503, 4100902874, 309142266,
                1088553857, 2096128611, 1104848719, 3907470805, 3414980158, 3260046959, 2704772147,
                288217831, 1781865616, 179692408, 1428188291, 2562193479, 1062990555, 498008949,
                1798769609, 3937669287, 4147083150, 2479873449, 1454286408, 665997230, 331654711,
                1482116196, 2545259161, 1591656626, 904758973, 1600224317, 3734588228, 2386781283,
                4212676921, 1479533912, 2157734799, 3588439224,
            ],
        );
        // r != 0 in limbs_div_mod_barrett_preinverted
        test(
            &mut [10, 10],
            &mut [10, 10],
            &[0, 0, 0, 1],
            &[1, 0x80000000],
            false,
            &[u32::MAX, 1],
            &[1, 0x7ffffffe],
        );
        // d_len == i_len in limbs_div_mod_barrett_helper
        // n == 0 in limbs_div_mod_barrett_preinverted
        test(
            &mut [10; 3],
            &mut [10, 10],
            &[0; 5],
            &[0, 0x80000000],
            false,
            &[0, 0, 0],
            &[0, 0],
        );
        // q_len + MU_DIV_QR_SKEW_THRESHOLD < d_len
        // !highest_q in limbs_div_mod_barrett_large_helper
        // !_limbs_sub_same_length_with_borrow_in_in_place_left(
        //            rs_hi,
        //            scratch_hi,
        //            limbs_sub_same_length_to_out(rs_lo, ns_lo, scratch_lo),
        //        ) in limbs_div_mod_barrett_large_helper
        test(
            &mut [10; 125],
            &mut [10; 405],
            &[
                2824467771, 3299124311, 2818671068, 3680778570, 981687343, 2406693669, 659467593,
                2993414243, 45406089, 1478779191, 1711786852, 1750419133, 2909274013, 511107722,
                3561218251, 1136025710, 993075881, 3516743656, 2114794292, 1997914, 3812643652,
                2505455342, 1465178283, 1978590884, 2983823507, 1628362808, 1695987706, 2508198478,
                518693670, 835288758, 1012607974, 749782274, 577737644, 2333209317, 4167594129,
                2270730042, 3116080031, 2989072664, 3700594452, 2080277190, 1740782490, 2022893854,
                2980102855, 751636825, 3922671264, 3391149880, 614930929, 120867901, 2567507861,
                1524427749, 2580678371, 2199894921, 1776614185, 1166041925, 1079838738, 110556090,
                2831653230, 2555307604, 1415160216, 250952335, 1727168666, 4114643415, 3895205129,
                692242739, 1888273350, 3407947612, 2500185766, 2392325992, 454908683, 1510488259,
                627605677, 2579656597, 503296566, 732883994, 1804534661, 1024632105, 2582676903,
                2186193446, 2035546222, 1537608294, 2871563506, 1842379464, 4285710796, 1145782664,
                2168389602, 2821015070, 3799000303, 1910989354, 2712163170, 2373188937, 94374379,
                745462864, 1273218817, 599427865, 3025428597, 4170147632, 654664457, 999597566,
                1301587861, 785951171, 1404519917, 226625774, 114784173, 1303174335, 1991080402,
                953508169, 2955695351, 4272100018, 4152229685, 505603829, 1367830508, 275280730,
                1743334800, 136640107, 543638242, 2867205034, 3205072197, 122133232, 2907110177,
                2577983454, 4044792269, 1426164254, 3391219052, 4077004042, 60445643, 361888880,
                1370511290, 4140611, 1545574856, 337863511, 2696753299, 882513095, 2220102704,
                4040224968, 3895008884, 3144563393, 2298197836, 2781817257, 1704369652, 3931316078,
                315544063, 3497851423, 3664143565, 952326443, 3938628137, 2331019960,
            ],
            &[
                3222658839, 1719980949, 49002116, 576454969, 2480526346, 4090562449, 3826526799,
                1957153338, 2225171960, 2687643162, 708981609, 3176715792, 2962973059, 2652817195,
                1197341180, 2939993186, 3554367730, 1570613844, 2536409086, 499280456, 3247067732,
                1595825640, 2368929206, 663346056, 3132360609, 1474802683, 2339072148, 2202454503,
                3728785029, 3203437738, 904057293, 3413710811, 2642403758, 3344563036, 4027597111,
                1888090288, 1863907782, 2464957062, 2688706102, 569142547, 397802070, 245946780,
                3489512252, 2617239243, 779718731, 179625066, 4023449096, 3996006819, 953561942,
                1127504598, 1992436862, 3073123794, 1835220635, 3142367806, 3159289192, 1927251431,
                2830198394, 910503635, 2897643083, 2932878381, 1507827586, 3067247947, 885528755,
                2017570727, 3134837176, 499511463, 1535166690, 1643153113, 2968177930, 3952804609,
                3989699184, 256167900, 567717900, 3896800262, 2310644620, 2351013373, 1964719080,
                1905779649, 3311747907, 1340733718, 2870734940, 3144732377, 1107086597, 3017452910,
                32224803, 2995638379, 1782145516, 3064028223, 405412838, 4063680301, 3415165225,
                1788170832, 3805938672, 1902801261, 2231309030, 1810036873, 3470233158, 2413346472,
                3530489706, 110880408, 887205258, 3604865827, 2857625992, 3018122209, 2631997677,
                1125977084, 2461114861, 2161802286, 273825728, 2086061888, 541221199, 1806844610,
                1376732414, 3802142465, 3535151037, 2954021790, 2116798495, 3735046347, 1186632354,
                2833281426, 3457883657, 3962766016, 13814577, 1650009216, 4147309188, 2302630822,
                3980940746, 4258997501,
            ],
            false,
            &[
                914514400, 3342502906, 521760868, 1049115929, 3824837806, 2763332026, 79145590,
                2361118660, 3694174875, 582606291, 2236610090, 245694427, 1561619352, 186706776,
                239856728, 3342500541, 3049919767, 2350706825, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
            ],
            &[
                671156763, 3522970087, 1803674928, 705095332, 2537912304, 2452859779, 3450873050,
                2679364048, 3526396093, 4177976105, 266611217, 1151557614, 2132817166, 3877142811,
                507210298, 2972523503, 3073806840, 3566048488, 880991998, 3345680417, 3235170656,
                2403723979, 1313154315, 2771932402, 1330267204, 3414255915, 1179382708, 3233207082,
                2503609750, 249317411, 2632726993, 130324620, 2032071659, 3005726146, 3875282024,
                887247870, 1998016163, 4254819443, 3740865454, 3553274754, 2446121384, 3275444724,
                233325872, 539446483, 1087952312, 1835245616, 3627109091, 2510529404, 185630261,
                3706778570, 3098183261, 1931085512, 798171652, 3040444481, 1161846676, 1038636293,
                3421904104, 2901743603, 300733872, 3719079820, 3468813384, 2881344572, 2125343174,
                1936937822, 598427076, 1712995528, 4084208860, 3733468538, 1669487237, 1385196430,
                4053752992, 3005943092, 2525935674, 282240792, 4279794411, 4125983631, 2329629976,
                2704369810, 1464421682, 1313908108, 1226002425, 1808406752, 3275768064, 3175836384,
                931684775, 589156533, 3002460872, 2667576199, 1619914000, 3662683434, 3389418364,
                772131109, 3768421507, 3396906380, 2736076174, 2900071166, 538472464, 373492649,
                1143475222, 591038056, 3736209846, 856338986, 232250025, 3427987228, 159577157,
                485970599, 624042727, 2427226926, 758605639, 309500365, 1623348751, 4085018849,
                1073894303, 3272403714, 3990448709, 1089031712, 1648217954, 1406121363, 1462876615,
                1399073841, 3264088864, 3357032142, 1754184006, 598504776, 2188603491, 1888083714,
                2827226198, 3414026126, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
            ],
        );
        // highest_q in limbs_div_mod_barrett_large_helper
        test(
            &[10; 115],
            &[10; 1254],
            &[
                2401497277, 3741262706, 691871239, 1949640889, 266070694, 3295242537, 3037066187,
                3875417448, 1358853731, 4158125741, 737486219, 2625351318, 2205206855, 501024225,
                2060376077, 1953521053, 3762056723, 163485007, 769999701, 2385831686, 2388009068,
                3120433785, 609866149, 1014929431, 4255522153, 3908104955, 1296186549, 1400337892,
                2481196402, 1530226708, 1736756203, 4267671814, 3181376526, 4204274026, 2772982826,
                171341955, 3239339748, 83269891, 2325049318, 746305994, 1290717192, 1805639230,
                1856363646, 3445599715, 1388597950, 2699498310, 246990054, 1396771726, 265087723,
                3372840761, 3260397695, 2010115470, 2211074582, 1883962263, 256363687, 4012920099,
                2367091978, 1485341992, 1836339208, 1434180757, 2616877872, 1145425491, 1261399773,
                3926766027, 3115015865, 1741783714, 3802513218, 4081750672, 3856503286, 2137512595,
                1192985123, 1863041957, 700637154, 2503934926, 2021744810, 157763047, 453501781,
                1898727251, 3741166728, 105996483, 3390681922, 1127471458, 4229032301, 254843851,
                2729237155, 1707011850, 1756734415, 1864969309, 96539023, 220456923, 3061776324,
                1741151628, 1199010536, 2099212259, 3095715999, 1369052975, 2575251120, 1821995904,
                4169452262, 3299830336, 666854626, 3647011057, 3965571435, 1551218489, 726151433,
                1730753749, 750433250, 2084548637, 475638490, 3209308986, 1536371286, 3458731894,
                451976715, 1463077982, 3275775647, 1176722184, 946473888, 295088963, 1154092407,
                103838303, 3743650178, 4149308777, 1617840168, 3465913339, 4133656500, 186966677,
                1624567957, 3264214229, 1285455678, 3951367256, 1685500601, 2890483019, 3692192743,
                503129144, 3972113270, 2472468030, 3386552094, 520995657, 318761291, 3652507947,
                876136924, 451086694, 2855321222, 557040372, 805677163, 2526778273, 2320694361,
                1256424719, 1952008095, 4056766614, 4133706458, 3948099450, 343436346, 4192911370,
                284826582, 674589589, 2186532130, 3868256489, 3551620239, 3301954255, 1174676675,
                603478538, 275555563, 2405977791, 1847784099, 896249737, 2255526478, 1787445221,
                239988612, 1297053793, 4022115314, 3399153034, 1717528213, 1660404772, 3074772866,
                2806710693, 1643510791, 3184377187, 1540838982, 134943412, 4022881239, 1840380980,
                3861497294, 2510066751, 1433230269, 2045075002, 2415627101, 1223566402, 3367143819,
                612631145, 1154322627, 3247079704, 1778868389, 272795417, 933297265, 3458460741,
                1389431679, 2907745644, 2086192882, 2684128325, 2650239535, 1784197442, 3949401651,
                1783533373, 4288056634, 888203755, 437001866, 1407050668, 3135687315, 3463879635,
                1702062054, 1204976730, 4177166610, 739673691, 2277342971, 3478834440, 4081300483,
                914246861, 2121339885, 1961961557, 92095006, 2260302382, 2461228008, 3993959318,
                2950464602, 1950783601, 1224172324, 2576903297, 576707684, 4125788986, 2560012161,
                1956729376, 1629575657, 4036954933, 300086502, 4022406600, 3237472700, 1646970397,
                2062807673, 1759249491, 1956866526, 2025198625, 1297980907, 2709447351, 3977405586,
                3105592010, 4167079730, 2234262082, 3282437095, 3492171389,
            ],
            &[
                414354569, 1366704839, 3104154714, 3052961192, 1917209478, 527538773, 96279538,
                131392026, 2197344782, 2544900655, 3721689046, 1511768113, 2703760155, 1445726112,
                1858496576, 1575565932, 3793123807, 1385830602, 411844037, 2236175811, 573323765,
                2565409615, 2461667516, 3785284514, 4260465727, 3052818977, 1895970970, 3792821387,
                4109605593, 1615504561, 3239716852, 1706559703, 3187779838, 3278892149, 3231274931,
                4198044737, 1513165468, 245082668, 1270047387, 3396787938, 1940745611, 3740768753,
                2072323188, 285189880, 644016853, 3495689253, 1168360917, 2400702434, 984958722,
                222994595, 3006232190, 2064852513, 2152929014, 1163603446, 3191172136, 1835493220,
                3277922296, 3636603619, 1531000264, 3057499684, 3823394467, 2647235938, 1717867123,
                499456838, 4094707383, 2454454468, 3671059285, 3201191048, 2439390676, 3022007460,
                4061878398, 4243531226, 3389689292, 558186288, 3777835601, 3123712634, 3503180938,
                3691679764, 1701324443, 835309072, 3906212426, 4049064285, 1768153688, 2228746280,
                3594304220, 2961136397, 213262897, 80889120, 4109164941, 1704207190, 149603550,
                4140450876, 835389387, 2885880052, 439529491, 1516869648, 2050960198, 926155485,
                475035022, 1187115633, 894340078, 343754206, 3955497730, 1344991704, 598758584,
                4056958135, 2153619389, 2541228501, 3084209032, 689848357, 1722405264, 3359713626,
                1572612273, 740065643, 1582253391, 4070651569, 1908850964, 495396647, 4057999777,
                3077955309, 4157175191, 2258556901, 2113839, 3880102604, 2790333280, 2943303426,
                3912791781, 4284145483, 1840413180, 3097912758, 1064553745, 1126983800, 2256085399,
                2448922218, 981100464, 266358012, 1971087790, 1988527723, 237308225, 1936681335,
                4258331432, 1348277821, 529864588, 2497818319, 4244738664, 564460927, 1832999941,
                65438986, 1185234412, 1316363591, 1608606945, 1000964619, 1732529786, 527797972,
                150140396, 2156815817, 4220448391, 1051855867, 4280728484, 1058663428, 4250194724,
                1036504424, 3657621656, 189944192, 57605355, 3072751931, 752978294, 1461890065,
                2724185615, 141061473, 1466705961, 304569847, 2188875717, 617186800, 3058558545,
                1591798676, 88078245, 623288082, 132838333, 1534710499, 2200810995, 2857112538,
                3863089059, 3060974440, 16773497, 1918012630, 3327340967, 3661341852, 2395761457,
                1535964139, 746843178, 4060399981, 4287382590, 1336021602, 1599090737, 1174816250,
                481099617, 918021470, 1173582832, 1368734491, 888221269, 510154884, 1262941262,
                2567813829, 1077623012, 2261930141, 2307570205, 2069365574, 3586190102, 1698424580,
                615530592, 4037104804, 1283475105, 4214495193, 3288288012, 3585802470, 261207221,
                3506861813, 1536248070, 3151134123, 645179327, 490399820, 2479385864, 3709733877,
                396138285, 2627168580, 4028642442, 2012757271, 1884810033, 4051927252, 2652348818,
                2069059332, 2416554871, 28369250, 1321756354, 3314148643, 2588326180, 3141604522,
                1974534297, 4170320959, 2683069809, 1278314467, 312763173, 1481522722, 2846196729,
            ],
            true,
            &[
                2089919886, 3662797229, 1688302765, 1220493490, 974788570, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
            ],
            &[
                3521949631, 142488398, 2558755806, 546733190, 2792635139, 1330279357, 3430917364,
                206259042, 1647608238, 3662226174, 2677354502, 501681320, 3339919968, 736768019,
                4258570929, 4202792087, 1651152858, 415339868, 1437647081, 1371825040, 1535867295,
                1113678172, 4268196599, 2619516870, 4117420686, 2491883937, 1711537149, 3681498741,
                487272454, 3249094136, 2833249206, 1984417080, 608254353, 2280645468, 3395986408,
                3532393236, 285299266, 249977069, 1222542802, 1102282847, 2598354195, 439643199,
                2126654464, 607909799, 2936741523, 3763227596, 4235714917, 1698786602, 1862433691,
                2965568505, 2196568398, 3068583313, 2467355500, 2575639252, 3699104542, 1440347634,
                2202871610, 1085633678, 2985993155, 1566387171, 2653399887, 3340197769, 2614511546,
                565555655, 4058797643, 1841325854, 671657716, 560998985, 334170781, 85067287,
                1935383603, 3452109092, 3454188157, 154367468, 3636444053, 3436201211, 2489786062,
                1247734460, 4255062573, 1485745449, 2725636745, 3754874076, 4135899179, 2423709040,
                392644331, 2072210265, 339068725, 3933463273, 4288485419, 4212008073, 3733609991,
                4120877958, 1466616375, 2958829060, 83050688, 4089523843, 2719660596, 3345635470,
                4218331277, 176804352, 2942885054, 1103429906, 1232548981, 3336211973, 2320933704,
                2354076844, 2529582693, 3959342251, 1769056129, 3021361560, 1001511651, 766365010,
                303546733, 2838329868, 696771802, 2198903959, 3831700812, 4192525926, 2867372730,
                3200189248, 2637281548, 3606733360, 2672897488, 2624221199, 1766256987, 3059086417,
                3482969658, 2697305862, 415920845, 1575345078, 931452186, 2064246173, 3556532318,
                1127897667, 4176776745, 1103206019, 759429637, 3840446634, 2669415208, 4098858695,
                3968696636, 474286523, 3603742455, 3683233930, 3910949095, 1016216353, 1693878242,
                2936976170, 2258461087, 1543964790, 1257134506, 2705742284, 619723369, 2313052342,
                1916338183, 3578695856, 2388468521, 1417556272, 2630850792, 2327790132, 3594026023,
                1659979016, 477242076, 1948563308, 2803059042, 2392360966, 2007275313, 272222339,
                264018609, 1147760126, 4131679216, 833601075, 1429546506, 3426172207, 1125974375,
                3584187622, 1582857679, 1084294484, 2193982331, 3084073169, 892928835, 2823566821,
                3544239939, 172135078, 2430777811, 1620416268, 1792703584, 2899867927, 3974701277,
                1890638601, 3367278100, 4278027820, 3171315428, 3696212814, 1038269559, 2729624661,
                173005716, 3652244541, 724827867, 3530325019, 2203073321, 2587791340, 1909841295,
                1412031121, 1429200221, 3614105795, 3265396657, 1362525000, 1906071103, 1060149404,
                2733619757, 2675449568, 3414488370, 210765135, 2800530139, 3014478492, 3230858260,
                3409460781, 3411785589, 2543986390, 3934724152, 3235965806, 2053739672, 4085596199,
                1563589410, 2817526968, 4048637993, 3055675422, 2173262993, 2970495556, 514198452,
                1591956633, 3852865086, 124440700, 1002712372, 596340824, 3999538417, 117476573,
                2037586050, 3291573274, 1511567035, 1614566437, 3821078763, 961133253, 2796121934,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10,
            ],
        );
        // limbs_div_mod_barrett_helper, limbs_add_limb_to_out
        test(
            &[10; 9],
            &[10; 167],
            &[
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                33554431,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4286578688,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                67108863,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4294965248,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
            ],
            &[
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                536870911,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4294967294,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
            ],
            false,
            &[0, 0, 0, 4294965248, u32::MAX, u32::MAX, u32::MAX, u32::MAX, 10],
            &[
                u32::MAX,
                u32::MAX,
                u32::MAX,
                4294965247,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                33554432,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4286578688,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                255,
                0,
                0,
                0,
                3758096384,
                67108863,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4294963200,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                1,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                10,
            ],
        );
        // limbs_div_mod_barrett_large_helper, limbs_sub_same_length_with_borrow_in_in_place_left
        test(
            &[10; 2],
            &[10; 452],
            &[
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4292870144,
                u32::MAX,
                1023,
                0,
                0,
                4294963200,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                134217727,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4294959104,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                1048575,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4278190080,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                1023,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4294966272,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
            ],
            &[
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                2147483648,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                16383,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4292870144,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                15,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4294959104,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                33554431,
                0,
                0,
                0,
                4026531840,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                2097151,
                4278190080,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
            ],
            false,
            &[u32::MAX, 10],
            &[
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                2145386496,
                2147483647,
                1024,
                0,
                0,
                4294963200,
                u32::MAX,
                u32::MAX,
                16383,
                4294950912,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                4292870143,
                2097151,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                134217728,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                16,
                4294967280,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                4294959103,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                4294959103,
                8191,
                0,
                0,
                0,
                0,
                33554432,
                4261412864,
                u32::MAX,
                u32::MAX,
                4026531839,
                268435455,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                1048576,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4278190080,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                1023,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                2097152,
                4276092928,
                16777215,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                4294966272,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                10,
            ],
        );
    }
    #[cfg(not(feature = "32_bit_limbs"))]
    {
        test(
            &[
                9467139676469209549,
                590281264913108801,
                2444597864339828042,
                14864081623018167053,
                17247631583397892818,
                14553244820490552393,
                12829855212365838534,
                3531466761266135925,
                11372171159031384620,
                5870847048926628622,
                9193240591510160396,
                4025304033900694645,
                17261252553070218810,
                1960954339685170046,
                9689788042403522315,
                6777781555383721706,
                564338697137211139,
                2236230241770389317,
                7260612298284603217,
                7551831827404764167,
                14240930170717885933,
                5403113159439788814,
                11890192816726889700,
                4571074562843162754,
                6585174915018781919,
                16820621164336832115,
                2906428786044704407,
                14549789283221663094,
                8574533295629171239,
                2554371108614275803,
                12102140726062325305,
                5927759880327312421,
                1947106727211751169,
                4243634376196439953,
                3958901784387088795,
                11997496505606868854,
                8614259227764305665,
                2851316343853334425,
                7360014330841540867,
                12833167596911644967,
                16420023392297553774,
                448987443751486030,
                1127916262354476550,
                998365641524414747,
                771182118275428982,
                3644906482543632509,
                12008471662501141232,
                6735530311778854203,
                14937996347189247818,
                10310266533399488799,
                14173112110010990829,
                10048196983951682150,
                7660343487007291390,
                5442254482173747309,
                11894682918116055490,
                555474340707057713,
                5454210195350763050,
                6335921756850263208,
                11125242160747149811,
                5950900297278200050,
                4972887779003626968,
                15099558014605218082,
                8070946285642924813,
                5661924633602804698,
                4017981546647826153,
                3298784914124356106,
                1048634509662954303,
            ],
            &[
                1601810336850541391,
                6414377018375174391,
                919960012376992260,
                7432535796251013733,
                14687204344100976419,
                4239980047441451729,
                3419961342059496953,
                16241811836659790563,
                582511433240649668,
                246415310737356671,
                4213289580820322712,
                6570486144808547472,
                649071692625916450,
                16246395526862594705,
                5418002168615819323,
                8787804720479728592,
                16606257073152622475,
                1410262373214068670,
                2846556520446018460,
                12702224195603835801,
                14824788470038136235,
                8070823597295684045,
                10064047777457825217,
                12473928276513608352,
                4502242984490214594,
                8213242804638977717,
                11407293275124988149,
                15303970978422100227,
                5734015081210218763,
                6780255848655226189,
                5308681743121306497,
                3590094480707706491,
                924657275311967241,
                13313245703725306506,
                13755314570936606477,
                1722612846595274627,
                11310713460998976321,
                17860713973992950196,
                4832972642835413575,
                6159638888337886550,
                16436259186156623772,
                8219825892743153908,
                12825816757113080127,
                17576561025816321316,
                16426316569762062979,
                7041069634919241163,
                14958139263401063299,
                8541928253694453091,
                14623281385826596559,
                5881920493887697974,
                2856125878289959548,
                13138961086309035424,
                1445182795958550281,
                989371283719803801,
                14414401959190662319,
                12694741659414145902,
                4944169755440522083,
                4850330269090259826,
                7263731888738583042,
                3847985956261979907,
                10886313908655224591,
                16884924304355496352,
                17434369248195376612,
                9624045826924140661,
                9440358242723121635,
                44413621672380228,
                14501853932445164832,
                4412509400967439905,
                4059150452772511000,
                14121559478607349396,
                6939247432141568945,
                9144772592231287902,
                9035665952014395555,
                14897716038428818227,
                15076823799682351749,
                16277606343067785741,
                1901372957955104636,
                9089098420745572372,
                7424125507905187829,
                12368330388186365917,
                12778631331588513256,
                7648700244963873530,
                3776028467270636181,
                16107369772612157292,
                9046543866366629415,
                13251838453492673272,
                2975138303374961664,
                2462966081502544324,
                814917744063498594,
                13005222969141014201,
                5026855542811222762,
                2382391535955253463,
                5899528506680208740,
                13336141787604226636,
                2972106516856532181,
                14045206722662122716,
                13361481863470745757,
                1303122885509130861,
                2127042842590220699,
                6185514996199626930,
                16622745329653187578,
                1256533115604594696,
                11243434057073050028,
                9066405370642929758,
                4552716624777987017,
                1128092841571320177,
                3756894170446405064,
                3328979948330012406,
                15049042231988504879,
                3530903968533512703,
                17905884378428276079,
                3713606437359152813,
                9370125751473669209,
                10012381228375856292,
                6916709082927033810,
                17606888822444197359,
                10818646898854586102,
                9927520028322801489,
                17015575684851383261,
                15287563104761130407,
                4246630569287612899,
                6737522138244324583,
                16956805675707509108,
                10507692348129622148,
                1144006384258648355,
                4260138925314579646,
                14508270375905482517,
                3559046762122289814,
                15199903498605585717,
                16432575538338639756,
            ],
            &[
                5592822181652430458,
                17506309594623475426,
                14050063092843436505,
                7714948654849123602,
                12960251261153655218,
                12293354553127881932,
                18236552269356335752,
                8116592444680865353,
                5788148289215893900,
                8971586422059718981,
                7830225577778842728,
                16542468928391674395,
                7685364916096821326,
                10621040870461365797,
                13017786142160529410,
                15623634767986429431,
                3570280230795725028,
                5462496964935066825,
                13096782281304038571,
                1028538565298248606,
                1306240401949593430,
                9752885768751332733,
                16834186448734276157,
                7637206024963845142,
                14347989823115406647,
                11694534965309339857,
                17506164867360865472,
                18226657528377127028,
                17113377911080849277,
                12836900580850373696,
                7624296086468816307,
                3241150049341673184,
                11432625191496196476,
                7201112746916642381,
                14159401858377741999,
                13042389876849434472,
                6539044773109830458,
                5626612565019858620,
                16855355146181557220,
                2896027096805100269,
                1749121842377065409,
                14486576285464434664,
                13003134176160772443,
                4520736241988979615,
                14386190542886985088,
                5203873393963986621,
                2767011034432552285,
                6993214728799607735,
                16219726698174042484,
                12883752315794694947,
                4638588568194864850,
                13671093412063473486,
                16507766724668892429,
                508640878850638089,
                10821378407060575406,
                7345992160360704865,
                10043908069076742056,
                18320857698273010360,
                2218460838923946432,
                12515547441597943704,
                8373193888106171069,
                11138535537637434655,
                2449630875466873477,
                8767699022869197665,
                6446940169111329267,
                12481583138381941451,
                18405856492243480913,
                8856983257605794349,
                11977198292403090397,
                4992072464455161558,
                1429124422280954077,
                16695629052720642207,
                15320583853113777709,
                9270873446273846783,
                9544568698292818385,
                16150036388405871492,
                4707553634577955164,
                12819651092171657742,
                6194167822526464289,
                3302239600303656809,
                13520149877311082646,
                3658928982143500918,
                6938149248133961941,
                3561482775788486836,
                11608588618646326460,
                9312042305619109305,
                7752033026671842884,
                17638989744464665362,
                11720586895422616384,
                17488161719714908794,
                14359533380966089634,
                9112047402314539693,
                9045007769242360827,
                14039981061261051366,
                12161985564133395359,
                12552005864162233454,
                13987473146854769743,
                18218863257920884509,
                527093394921779615,
                10809320813728048297,
                9176568449151735783,
                16181777654712188911,
                3708863559833042684,
                15705373009786311560,
                12044345266545331965,
                15745097802473032619,
                3448641903062070968,
                7079863925626111888,
                10936059842602692227,
                3949990826310278419,
                8781569794504977516,
                2710649351206510739,
                8045244454460377457,
                16793164706992819994,
                14171071447733414359,
                6442975288102390424,
                13408292761208182437,
                18190891873633561623,
                14416452326133420106,
                11467995109126255854,
                10355921853391241663,
                3362337025912778005,
                12828210017750944427,
                6724529289281531448,
                17910365619735459537,
                18061583666579344364,
                7385510916096038449,
                14735084634699542626,
                2983574817812405387,
                1160726944282883582,
                2119364765206141036,
                6464791768964988391,
                8824016806539484116,
                8270030586906660422,
                15002907845345901548,
                5776511587881140498,
                8026215921305305807,
                4715947225014261487,
                1386404302622265399,
                155879991043344208,
                7029054386547293524,
                11220489073691424833,
                2733588115435171341,
                5063187558440228172,
                14208382232307280669,
                3376720278729662133,
                14690710213721258877,
                11094816467682244196,
                13929756812886477086,
                14698847015580325706,
                15992372099283576304,
                5818288394714584003,
                5038324365106419021,
                506432342213631013,
                7781480413773762085,
                2275557418573742756,
                8703301345083257514,
                11424227525030059244,
                8529590924998378026,
                5577211436885609271,
                16859602499387351883,
                5848360527348246100,
                2118117857825986323,
                3178709503818913442,
                14068618324826971348,
                7820101807986528976,
                16849757836429474618,
            ],
            &[
                10900792384749518304,
                1752565570529908396,
                3402229115647561238,
                2472381872242532960,
                15748089475115162936,
                1958855681762413475,
                12100416912810779188,
                12256578057348862042,
                6556831077371185734,
                15914846823057329492,
                17346954154793811255,
                17566187606614467459,
                1433606366066775495,
                9089332045922722756,
                10056944581186126460,
                5324425019386643029,
                5281765195814058625,
                1449711238109407238,
                5903959110668039125,
                3336955200427408551,
                751494194154096512,
                15350321905800137137,
                12407374450431165353,
                8705815621686854350,
                18038286270431178148,
                11671842546699641930,
                9343865367071815679,
                13401838367914321671,
                18365991333043790435,
                17428290065100096976,
                6040216493892400727,
                4224515713015397505,
                16578741590625036060,
                11835373548777581169,
                18413478850867685366,
                8453265724386285209,
                5394500720474148965,
                1927463313122594080,
                4177838821929605731,
                10680620304882583021,
                180005403771618203,
                2256408572502279608,
                11718426532525535626,
                14260315287467647015,
                4035759666841010016,
                16259497729863184485,
                7772704202422133476,
                6815813069474359325,
                11207378575459431371,
                18308033894506293455,
                9875145231436590806,
                15354934628544213986,
                761822562304640527,
                7391550101325083295,
                4023926600201752832,
                922969942182092752,
                12110946035817932140,
                16574399923422896843,
                7087993004495856759,
                8299428112066197874,
                4589434828506762129,
                13978205413565566735,
                15675366647238478172,
                7819770375827015142,
                6823625407675143456,
                2042269662440457350,
                11521115322912473140,
                13703874674141705702,
                1295561690992462505,
                12464082489717915012,
                11378922861990148970,
                2076282285705918066,
                1390689690731346588,
                13670979351308531000,
                12980996477862222169,
                10496970808504864546,
                14015388605987660396,
                4171129107047347396,
                1656857204469415571,
                17492457435753920912,
                10132937897450237781,
                5065601177732655021,
                17498367701449356268,
                9552937910825811119,
                6213399497134928078,
                12865519292113075754,
                8548871019474664332,
                12973212090641168109,
                3018095992673320728,
                4102580256148037725,
                11411505815957245048,
                8044142604358855954,
                6163064685377006161,
                7676133172626151339,
                15177331097378985405,
                923128391789363540,
                8405355494789853124,
                8409013636286216842,
                17519952046647436442,
                12690425880634822079,
                7295927951214020420,
                5103171252065286692,
                4531269626482776566,
                17509133779966482098,
                16771567673323510549,
                9940518318209913958,
                2566490491730418524,
                4997841530198583881,
                11759671980624847072,
                12804335234851198898,
            ],
            true,
            &[
                564820221219774034,
                4488711358679422475,
                10020082426042197380,
                17225157352286806558,
                5780768250525361575,
                1970180556702143116,
                5857604197270789289,
                4060596445048742789,
                4197799076012455571,
                7044577438443748571,
                9865458079653433267,
                16329626967551115891,
                4152461199188161627,
                13000775528850398936,
                7619420622350160180,
                14900279174214956337,
                1704825421557733731,
                47372161928033978,
                3056759021249434255,
                16034528189533406528,
                6435981853629992716,
                7347416955208902363,
                7867885339734871956,
                16003312811447303393,
                11973054691848315139,
                4061237791967812067,
                2991418391396596002,
                4703879799196538602,
                7912263594713072930,
                10103623638174366026,
                10329033596439147117,
                17155789472068722424,
                811379340807249314,
                16011199724895161224,
                3304315874218574570,
                8105141063347209779,
                2750621792338662113,
                11379790872842995450,
                3804288408313301542,
                2401920265819467507,
                8046761544384349111,
                14485522278750006278,
                13468921503494590590,
                345391242184932873,
                13063364294012052475,
                9333826905573469899,
                194256409910599419,
                14732838482552366259,
                1399589143134623506,
                3979386708177190104,
                8831973874140082077,
                17265655065442874316,
                12810778560618597071,
                3646538182485961898,
                10947011750214431344,
                709929350993015196,
                5828094472112746203,
                6335921756850263208,
                11125242160747149811,
                5950900297278200050,
                4972887779003626968,
                15099558014605218082,
                8070946285642924813,
                5661924633602804698,
                4017981546647826153,
                3298784914124356106,
                1048634509662954303,
            ],
            &[
                11770973102809246906,
                5654064914644075203,
                14154195031168297145,
                3196816914765589663,
                13269534898382935070,
                6602763211194544985,
                16018516851544910792,
                3180625223944165224,
                5350941027330432714,
                6398743157953739295,
                1906167046060045935,
                3556291732895289080,
                17581917949159063577,
                11917842024560925369,
                5513291200181693371,
                2805207190711928628,
                10488935147153720707,
                9353681503295456349,
                11923702266366452872,
                16445534228693736707,
                1321572029020662220,
                2088179387423767363,
                2940575338916006997,
                5660751381096282465,
                9379032325552965866,
                6155754375040762615,
                17757845483758379498,
                4791726927249442785,
                2271154604380575561,
                2810516188026226067,
                17085166475121940699,
                99572451658953140,
                5696266492111718158,
                10862208603440047636,
                17394577092287756526,
                8594037627948854376,
                15384378431083587966,
                8688372331869182594,
                6898185140759317855,
                9871173932216986045,
                12528452101456458662,
                13557460938391962098,
                4450262203153213242,
                9384263431241833822,
                9013347668307504163,
                11311595079831956259,
                936915772753461789,
                8433063029106192581,
                16896552532247465449,
                436920621494623275,
                17030913520242164150,
                9892849888317096483,
                10846215292694646349,
                8237341484379572099,
                16094501558496758251,
                1945916543779639318,
                18090461816104963907,
                4146339453090156488,
                16829166437621172993,
                3078631608488886297,
                4439257821416126689,
                7705380192038328855,
                3538871580337510846,
                13746211561839200096,
                11905905983562326697,
                13358208869614303744,
                5843566918809605864,
                9427926296554685300,
                14598289187890400060,
                11008519655031485653,
                8593121017807548632,
                9396415039249055836,
                6268435325877250293,
                17232661262414298575,
                72834733148045272,
                10210620080322964005,
                4785045324389620807,
                12743978039683515133,
                1532018623508178307,
                1626858325392940984,
                14509988664710915642,
                11484970178386722683,
                9637331423956040786,
                16727570268905595418,
                17007646468471636895,
                11784309337440826435,
                8264087540904628249,
                5386650781848750246,
                2634849477861627672,
                13571530405202238935,
                957020390364360749,
                10551951282480361215,
                5860903308359481633,
                7956790956638521305,
                8737258119314118945,
                12342128112549159916,
                16715653993533680030,
                16954242660912593528,
                2489318600286989195,
                7710331526401780284,
                14799339212986303952,
                15607538409164651487,
                16839239842720015730,
                12565794445330275268,
                11582072386774199841,
                7158773820903321984,
                1329934199003039189,
                6297267245832566486,
                6153026408185751289,
                3259942857823462030,
                17905884378428276079,
                3713606437359152813,
                9370125751473669209,
                10012381228375856292,
                6916709082927033810,
                17606888822444197359,
                10818646898854586102,
                9927520028322801489,
                17015575684851383261,
                15287563104761130407,
                4246630569287612899,
                6737522138244324583,
                16956805675707509108,
                10507692348129622148,
                1144006384258648355,
                4260138925314579646,
                14508270375905482517,
                3559046762122289814,
                15199903498605585717,
                16432575538338639756,
            ],
        );
        test(
            &[0],
            &[0, 0],
            &[0, 0, 1],
            &[0, 0x8000000000000000],
            false,
            &[2],
            &[0, 0],
        );
    }
}

#[test]
#[should_panic]
fn limbs_div_mod_barrett_fail_1() {
    let ns = &[1, 2, 3];
    let ds = &[0x80000000];
    let mut scratch = vec![0; limbs_div_mod_barrett_scratch_len(ns.len(), ds.len())];
    limbs_div_mod_barrett(&mut [10, 10], &mut [10, 10, 10], ns, ds, &mut scratch);
}

#[test]
#[should_panic]
fn limbs_div_mod_barrett_fail_2() {
    let ns = &[1, 2];
    let ds = &[1, 0x80000000];
    let mut scratch = vec![0; limbs_div_mod_barrett_scratch_len(ns.len(), ds.len())];
    limbs_div_mod_barrett(&mut [10, 10], &mut [10, 10, 10], ns, ds, &mut scratch);
}

#[test]
#[should_panic]
fn limbs_div_mod_barrett_fail_3() {
    let ns = &[1, 2, 3, 4];
    let ds = &[1, 0x80000000];
    let mut scratch = vec![0; limbs_div_mod_barrett_scratch_len(ns.len(), ds.len())];
    limbs_div_mod_barrett(&mut [10], &mut [10, 10, 10], ns, ds, &mut scratch);
}

#[test]
#[should_panic]
fn limbs_div_mod_barrett_fail_4() {
    let ns = &[1, 2, 3];
    let ds = &[1, 2];
    let mut scratch = vec![0; limbs_div_mod_barrett_scratch_len(ns.len(), ds.len())];
    limbs_div_mod_barrett(&mut [10, 10], &mut [10, 10, 10], ns, ds, &mut scratch);
}

fn verify_limbs_div_mod_3(
    qs_in: &[Limb],
    rs_in: &[Limb],
    ns: &[Limb],
    ds: &[Limb],
    qs_out: &[Limb],
    rs_out: &[Limb],
) {
    let n = Natural::from_limbs_asc(ns);
    let d = Natural::from_limbs_asc(ds);
    let d_len = ds.len();
    let (expected_q, expected_r) = (&n).div_mod(&d);
    let base_q_len = ns.len() - d_len + 1;
    let qs = qs_out[..base_q_len].to_vec();
    let q = Natural::from_owned_limbs_asc(qs);
    let r = Natural::from_limbs_asc(&rs_out[..d_len]);
    assert_eq!(q, expected_q);
    assert_eq!(r, expected_r);
    assert_eq!(&qs_in[base_q_len..], &qs_out[base_q_len..]);
    assert_eq!(&rs_in[d_len..], &rs_out[d_len..]);
    assert!(r < d);
    assert_eq!(q * d + r, n);
}

#[test]
fn test_limbs_div_mod() {
    let test = |qs_in: &[Limb],
                rs_in: &[Limb],
                ns: &[Limb],
                ds: &[Limb],
                qs_out: &[Limb],
                rs_out: &[Limb]| {
        let mut qs = qs_in.to_vec();
        let mut rs = rs_in.to_vec();
        limbs_div_mod_to_out(&mut qs, &mut rs, ns, ds);
        assert_eq!(qs, qs_out);
        assert_eq!(rs, rs_out);

        let (qs, rs) = limbs_div_mod(ns, ds);
        let d_len = ds.len();
        let qs_limit = ns.len() - d_len + 1;
        assert_eq!(qs, &qs_out[..qs_limit]);
        assert_eq!(&qs_in[qs_limit..], &qs_out[qs_limit..]);
        let rs_limit = d_len;
        assert_eq!(rs, &rs_out[..rs_limit]);
        assert_eq!(&rs_in[rs_limit..], &rs_out[rs_limit..]);

        verify_limbs_div_mod_3(qs_in, rs_in, ns, ds, qs_out, rs_out);
    };
    #[cfg(feature = "32_bit_limbs")]
    {
        let test_only_verify = |qs_in: &[Limb], rs_in: &[Limb], ns: &[Limb], ds: &[Limb]| {
            let mut qs = qs_in.to_vec();
            let mut rs = rs_in.to_vec();
            limbs_div_mod_to_out(&mut qs, &mut rs, ns, ds);
            let qs_out_alt = qs;
            let rs_out_alt = rs;

            let (qs, rs) = limbs_div_mod(ns, ds);
            let d_len = ds.len();
            let qs_limit = ns.len() - d_len + 1;
            let mut qs_out = qs_in.to_vec();
            qs_out[..qs_limit].copy_from_slice(&qs);
            let rs_limit = d_len;
            let mut rs_out = rs_in.to_vec();
            rs_out[..rs_limit].copy_from_slice(&rs);

            assert_eq!(qs_out, qs_out_alt);
            assert_eq!(rs_out, rs_out_alt);
            verify_limbs_div_mod_3(qs_in, rs_in, ns, ds, &qs_out, &rs_out);
        };
        // d_len == 2
        // bits != 0 in limbs_div_mod_by_two_limb
        // carry == 0 in limbs_div_mod_by_two_limb
        test(
            &[10; 4],
            &[10; 4],
            &[1, 2],
            &[3, 4],
            &[0, 10, 10, 10],
            &[1, 2, 10, 10],
        );
        test(
            &[10; 4],
            &[10; 4],
            &[1, 2, 3],
            &[4, 5],
            &[2576980377, 0, 10, 10],
            &[2576980381, 2, 10, 10],
        );
        // bits == 0 in limbs_div_mod_by_two_limb
        test(
            &[10; 4],
            &[10; 4],
            &[1, 2, 3],
            &[4, 0x80000000],
            &[6, 0, 10, 10],
            &[4294967273, 1, 10, 10],
        );
        // adjusted_n_len < 2 * d_len
        // q_len == 0 in limbs_div_mod_balanced
        test(&[10], &[10; 3], &[0; 3], &[0, 0, 1], &[0], &[0; 3]);
        // _q_len > 0 in limbs_div_mod_balanced
        // adjust in limbs_div_mod_balanced
        // q_len == 0 in limbs_div_mod_balanced
        // i_len >= 2 in limbs_div_mod_balanced
        // ns_shifted[q_len - 1] >=
        //      (DoubleLimb::from(x) * DoubleLimb::from(qs[q_len - 1])).upper_half()
        //      in limbs_div_mod_balanced
        // bits != 0 limbs_div_mod_balanced
        // q_len == r_len in limbs_div_mod_balanced
        // do_extra_cleanup in limbs_div_mod_balanced
        // !quotient_too_large in limbs_div_mod_balanced
        test(&[10], &[10; 3], &[0, 0, 1], &[0, 0, 1], &[1], &[0; 3]);
        // !adjust in limbs_div_mod_balanced
        test(&[10, 10], &[10; 3], &[0; 4], &[0, 0, 1], &[0, 0], &[0; 3]);
        // quotient_too_large in limbs_div_mod_balanced
        test(&[10], &[10; 3], &[0, 0, 1], &[0, 1, 1], &[0], &[0, 0, 1]);
        // bits != 0 in limbs_div_mod_unbalanced
        // bits != 0 and Schoolbook condition in limbs_div_mod_unbalanced
        test(
            &[10; 264],
            &[10; 30],
            &[
                3099176493, 2686179191, 2963763290, 1498905807, 2459138342, 883505904, 186294937,
                1240988195, 1152000807, 3485254691, 3058980612, 4051918579, 84687528, 3474110821,
                825051253, 2495113655, 4269053297, 531158278, 2131423786, 735959410, 1116746011,
                2099249419, 427789428, 2182383446, 3493666451, 2086611578, 2349523902, 1865831092,
                104597580, 720145483, 1653677313, 2449086005, 1225118075, 1458687427, 2284889737,
                1178000580, 1204354477, 1109887135, 2302764777, 1833071533, 2749496868, 3989183692,
                3112262804, 2143914125, 71393498, 3686808425, 568295620, 856601035, 205234115,
                617861388, 102368116, 561132401, 733711249, 2931194848, 1371887453, 2942553563,
                977874680, 3567773306, 2225947571, 668306082, 3150218776, 3697051793, 4272816685,
                2926797142, 2177250555, 2840203688, 51052169, 1663516163, 3085068676, 471736374,
                3127282104, 1358199856, 250868071, 54398826, 2107868776, 1621910930, 1677400830,
                20889047, 4180454819, 908186988, 1625301399, 817226551, 4039437379, 261787419,
                1484678288, 1183594253, 3154399910, 888455895, 1713982625, 2925178936, 2076694919,
                2288237521, 620657938, 2457761902, 2906110636, 649773865, 1387981473, 1600821385,
                3512543520, 2803028516, 1584293468, 1443490691, 2589741655, 3170284085, 1902835632,
                1603116322, 2850443356, 60694796, 779743237, 4006039758, 3272304347, 2442366350,
                3601524312, 720808564, 3291979084, 1675880280, 4139440559, 3672978467, 3938651783,
                3257918674, 2077369764, 3027135446, 3940308694, 2533432781, 4105883289, 626796131,
                608794713, 810463080, 2363401530, 2800065942, 2679046183, 4063827982, 2327835929,
                522607612, 1660561124, 817356463, 2984129158, 146372510, 4293731514, 2558750639,
                3948304613, 1448810261, 826590770, 2423032883, 1050524737, 2770168039, 265887860,
                3353243705, 2674401993, 1496121248, 2053790031, 1863298286, 1068977659, 2875518960,
                4137037281, 2888534695, 473250405, 3368783492, 3797281057, 132028186, 316202261,
                381223941, 3366394660, 425124513, 4083952857, 2301832392, 3321645917, 509444341,
                361894284, 3976042471, 2957832871, 250836826, 1408114735, 1614725824, 4214313885,
                4081964203, 2663894263, 145380453, 2329325761, 2055092903, 126874014, 1000460254,
                3910319503, 2561073113, 4231784000, 1042785346, 3511487116, 1270832223, 3456586087,
                1210528079, 4119713948, 3299598065, 4178946856, 1623358249, 1001721969, 3964704699,
                4133343553, 2193492316, 407893767, 2484237727, 3782842008, 2959959832, 449539588,
                2978317444, 4008576738, 3478248618, 98697842, 3986898689, 1622966191, 3594042026,
                3280563264, 270713233, 3999415188, 401848066, 623805281, 1710411200, 1801291443,
                640646012, 2283134929, 1043531051,
            ],
            &[
                3120245340, 1558358768, 2311090615, 3377497278, 2047683134, 1453801550, 1974940808,
                1545066418, 2840151982, 2463969682, 2025473894, 697610529, 906262319,
            ],
            &[
                3603474202, 23640019, 2133576502, 3778379659, 883962915, 1866519837, 1888919496,
                2545522706, 1473641504, 1017307414, 1207107908, 43613763, 2001107652, 1295816376,
                3276720994, 750683734, 862054731, 2423105118, 647184565, 82749472, 3134905644,
                3469243304, 3869523273, 2200822282, 2271529456, 1805512365, 576197860, 1881352922,
                2694444088, 700188823, 4014261501, 998600230, 3921476919, 3042342458, 1113168589,
                1849643027, 272533119, 3745240014, 846408292, 2765600200, 337759056, 1580016038,
                958561971, 2320387143, 2022805900, 1706525297, 2849929806, 2816448769, 4287480228,
                531300416, 3987101730, 2194947684, 1539543472, 2563500078, 250905437, 2906546975,
                3420715312, 1399943972, 2573547036, 2517309835, 3506368432, 609682764, 2647408356,
                3234556565, 4224842927, 440117919, 2582391054, 3173478111, 1215556799, 1989776959,
                1675806417, 3878920467, 243984561, 272254140, 815747813, 2471627048, 531500590,
                126500733, 3476535401, 1877907075, 2939545031, 4041939245, 626658366, 2742940646,
                3814661399, 3153036624, 2080267727, 412913879, 709446334, 1928720530, 3215012198,
                1340243607, 4170012693, 1863453653, 1692829830, 3479433296, 1015591610, 2369310060,
                1289466663, 1652392162, 348688115, 2813901666, 1381977739, 3968353944, 3449363379,
                1249293688, 2453835214, 750904326, 577039386, 3965310144, 1188022514, 552527181,
                2964971453, 1145764708, 4147965668, 632850159, 2337487248, 3382593879, 3632939001,
                2658993791, 2820040018, 1556252114, 397274557, 490831003, 1052830763, 1914107101,
                1353387689, 2482075969, 976484162, 2282876383, 4269190628, 139809131, 1188730299,
                1650745941, 2014147322, 1678125742, 223161009, 123908503, 1950841716, 576079068,
                3330988019, 932533018, 1319346982, 1356010466, 1972839391, 3937944592, 2091834184,
                3610099681, 3420417182, 182310440, 651615236, 1741788918, 873416547, 99212541,
                4107741571, 15809533, 2996576548, 1121127050, 2786591053, 2205830989, 3933647253,
                3009211397, 2474199526, 616438769, 217585320, 626425556, 2196061289, 2231311076,
                2237166829, 683712700, 1232727911, 2782798599, 2626930217, 3593762186, 2432346581,
                1165370034, 134611782, 343289563, 4182953926, 3066331256, 1857734341, 132757904,
                2635310959, 1313863984, 2215899094, 2574941352, 2348626035, 2950919138, 181796835,
                3322669423, 3336363510, 767753600, 5374509, 3674971984, 1030279018, 550713284,
                1341338555, 3995296635, 1696197965, 1833947598, 4208080450, 377211595, 1040418139,
                1967465586, 998434750, 2027799751, 650545326, 1, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10,
            ],
            &[
                4239744213, 626950715, 3916878897, 2974637695, 488695410, 1094975104, 2496621051,
                205419221, 4192241096, 3583664917, 511224033, 2016541230, 718692763, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
            ],
        );
        // carry != 0 in limbs_div_mod_by_two_limb
        test(
            &[10; 148],
            &[10; 215],
            &[
                59488434, 3053025912, 3197673861, 28499967, 919132002, 3254889605, 3510992086,
                4155414397, 1401076337, 3663475665, 3859836963, 838452584, 1714061888, 756807500,
                721664913, 2122189093, 190377396, 772161692, 337532878, 2801246946, 3347165247,
                504261973, 4207433768, 3203836949, 1637702776, 3950126612, 3575550053, 630469114,
                2468674532, 3237190898, 2699368075, 2126693510, 2005217541, 990977199, 211751826,
                4095342386, 2390539499, 553381774, 1202910267, 3124334908, 3631027545, 3118560130,
                3505258080, 2533393565, 3897399802, 1644233433, 2966724466, 1228506720, 4266980301,
                1975806255, 3087455989, 430105567, 2496389669, 2559019944, 1343075842, 515604272,
                2623722375, 3549762134, 3517683279, 3564893038, 3816995397, 21727446, 2930818039,
                2672793843, 1589653728, 2917937865, 665591277, 1222288512, 1197537333, 2425822187,
                3647080994, 3180811677, 3800694132, 4006852228, 1392314914, 1823809919, 3315974102,
                2004045597, 2557007205, 532899885, 1088861606, 3969820933, 711573681, 3744617855,
                3618206965, 3834838995, 601286347, 1494520421, 2007503431, 3672534190, 3437739925,
                3075991743, 1108097829, 438830502, 854842946, 798336207, 2497251014, 985928236,
                1930130581, 260199427, 3446617597,
            ],
            &[4005818469, 1809723722],
            &[
                3451340519, 1823569360, 2748474762, 2379400860, 128212466, 361580627, 4041171442,
                914389241, 3615201878, 3760016986, 2510499050, 3863385767, 36040042, 2251851610,
                3210062577, 3672600394, 1663820028, 3073274096, 204666796, 2644054989, 1349439868,
                1510081385, 286811203, 2996214643, 52859440, 3057966118, 2864727410, 1423659659,
                1075210206, 3609454422, 3252263523, 2843960331, 927166023, 951309132, 672342687,
                3596154210, 3997816532, 417627069, 1674501808, 3480074829, 2081711134, 3258035904,
                1912656239, 2929955725, 1760162477, 3439128620, 3247428686, 2554948803, 1823534619,
                2390298418, 153525011, 2577068170, 2912027555, 3356439173, 2878222520, 3673969868,
                1465531030, 2707072452, 840674665, 2018453620, 3959489183, 853967262, 3462469779,
                4149541196, 2692208503, 130843211, 2074716794, 2092443671, 3814231863, 3497057086,
                3471416493, 1131939280, 2342388876, 299693157, 3210385182, 2920296477, 565691872,
                868167224, 3148093393, 1215844287, 3565781208, 3578206636, 1537052552, 2438538598,
                1664889116, 1383231686, 4042617071, 1777130014, 4179189376, 1391393677, 3822307038,
                597944414, 2695354041, 2634181099, 2054915922, 810822072, 2370856623, 1541755236,
                3884794992, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
            ],
            &[
                1137651599, 55996911, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10,
            ],
        );
        // bits == 0 in limbs_div_mod_balanced
        // q_len == 2 in limbs_div_mod_balanced
        test(
            &[10; 373],
            &[10; 178],
            &[
                3300759985, 47489222, 1596412201, 3681499224, 721942549, 2798268772, 1725678834,
                1018213306, 278963757, 2162182910, 4238919550, 1480123217, 3550714331, 2714414047,
                1584331762, 3790545549, 2452172382, 3823866136, 3793112677,
            ],
            &[
                2532879920, 749327979, 378994598, 3512427187, 1768486327, 874381062, 3750599339,
                1824619676, 4102262081, 3872688397, 4080392661, 1233784995, 3967512105, 536874,
                1334357500, 533131065, 3802334171, 2688028352,
            ],
            &[
                1765718367, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
            ],
            &[
                687097313, 233246948, 2670005176, 2918696316, 2059690051, 3559547370, 982825692,
                2828616847, 3397764024, 1640472335, 1827782800, 239756415, 4169556349, 1129911247,
                2514993175, 2469589340, 3137350801, 1512435665, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10,
            ],
        );
        // q_len > 2 in limbs_div_mod_balanced
        // q_len < DC_DIV_QR_THRESHOLD in limbs_div_mod_balanced
        test(
            &[10; 4],
            &[10; 6],
            &[1, 2, 3, 4, 5, 6, 7, 8, 9],
            &[3, 4, 5, 6, 7, 0x80000000],
            &[4294967057, 15, 18, 0],
            &[718, 910, 1080, 1286, 1492, 2147483434],
        );
        // i_len < 2 in limbs_div_mod_balanced
        // i_len_alt > 0 in limbs_div_mod_balanced
        test(
            &[10; 3],
            &[10; 4],
            &[0, 0, 0, 3, u32::MAX, 0x80000000],
            &[3, 4, u32::MAX, 0x80000000],
            &[u32::MAX, u32::MAX, 0],
            &[3, 4, 0xfffffffc, 0x7fffffff],
        );
        // i_len_alt == 0 in limbs_div_mod_balanced
        // !do_extra_cleanup in limbs_div_mod_balanced
        test(
            &[10; 10],
            &[10; 10],
            &[500160962, 3482059973, 3833374734, 2382534866, 7345183],
            &[1962915382, 2761901894, 931109938],
            &[4192427024, 33881415, 0, 10, 10, 10, 10, 10, 10, 10],
            &[3497463394, 501014622, 297308821, 10, 10, 10, 10, 10, 10, 10],
        );
        // ns_shifted[q_len - 1] <
        //      (DoubleLimb::from(x) * DoubleLimb::from(qs[q_len - 1])).upper_half()
        //      in limbs_div_mod_balanced
        // carry in limbs_div_mod_balanced
        // q_len != rn in limbs_div_mod_balanced
        test(
            &[10; 25],
            &[10; 20],
            &[
                3406830026, 653096149, 665840651, 3475733215, 2990001405, 3962996135, 1125790437,
                510807273, 2268497988, 3801098676, 4251717337, 4009243500, 3093915781, 2221063229,
                1145961534, 1520950302, 4156341537, 4051749345, 1887697916, 2938053362, 1317017771,
                2551451381, 1165783725, 1692722530,
            ],
            &[
                757200076, 1850648953, 1310285965, 43796838, 2811750593, 2350568971, 1162649579,
                3588922014, 843685186, 327689313, 822131258, 632127361, 4287259347, 855554137,
                2978907761, 2140676852,
            ],
            &[
                1485327588, 946067489, 2418948212, 1981289301, 1964021912, 3125032408, 3497971833,
                3396209894, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
            ],
            &[
                1472562202, 467285767, 3874015352, 3774608073, 3547803297, 3252310888, 379016022,
                3915526178, 172347662, 1424794357, 2354655682, 1763403834, 1622341466, 1527845266,
                321699454, 1968063162, 10, 10, 10, 10,
            ],
        );
        // carry in limbs_div_mod_balanced
        test(
            &[10, 10],
            &[10; 3],
            &[3156053040, 2869923590, 2300216426, 1369503],
            &[177914576, 1102898054, 1547778],
            &[3800268463, 0],
            &[0, 0, 0],
        );
        // divide-and-conquer condition in limbs_div_mod_unbalanced
        // bits != 0 and divide-and-conquer condition in limbs_div_mod_unbalanced
        test(
            &[10; 674],
            &[10; 255],
            &[
                4077004042, 60445643, 361888880, 1370511290, 4140611, 1545574856, 337863511,
                2696753299, 882513095, 2220102704, 4040224968, 3895008884, 3144563393, 2298197836,
                2781817257, 1704369652, 3931316078, 315544063, 3497851423, 3664143565, 952326443,
                3938628137, 2331019960, 3709840874, 886597817, 2718223965, 2271519236, 1069952925,
                2973484971, 694036791, 3948658826, 1091836994, 3976014345, 2590014773, 1030558914,
                3050284515, 4064531951, 227487465, 1614818201, 2853653798, 312516670, 1131265287,
                1079324522, 2790732553, 2857570668, 2459258033, 3676592728, 1861660079, 3846516218,
                2487383610, 820186200, 670229005, 795815915, 4236865449, 388462685, 3530199852,
                4067109237, 228011739, 3243897206, 2102622551, 3066279582, 2307396469, 3918457987,
                3177100158, 1165801255, 3470877002, 730654273, 225744395, 303984647, 71923315,
                2631641933, 642193977, 214491076, 4083126324, 1300818039, 3145270519, 3071074628,
                533164498, 2260983885, 2398373112, 2291850622, 2549903002, 2876921663, 2087750942,
                3012568578, 2072377257, 2300996389, 1724754966, 3663537905, 2452259556, 681943280,
                495483009, 1806854180, 2022877157, 3545541285, 3155213185, 1520127898, 881038528,
                2682219847, 2061051159, 4091777429, 2973569703, 2243163157, 3812478845, 2868568231,
                538252316, 915738068, 3645567840, 557499318, 586868707, 334386881, 1009292772,
                9683309, 1394382805, 1469121902, 3538152891, 192398621, 3298083372, 291538032,
                454155529, 3467440904, 107593274, 2581455983, 4068643130, 1289926312, 2620830750,
                3599696168, 845286964, 93649777, 211929373, 405469122, 2046160625, 4269019707,
                3153165259, 3273675158, 740768718, 1724953971, 4107531497, 3669145824, 2308427932,
                4057339865, 30691770, 4215434099, 2209368084, 3410096812, 3930010459, 4058257897,
                1401228000, 3205298856, 919645629, 1080800085, 3531478127, 4244298042, 1920158944,
                4150416695, 2942997287, 621554087, 2193963845, 3535984780, 1948458592, 1237268195,
                4059838770, 4178023707, 2225635923, 1078133440, 1904752780, 1129557671, 2721601376,
                3991770285, 2491529378, 2424674576, 4164361438, 1566434777, 3112804218, 2185237562,
                2557399204, 967876237, 2243639679, 2436745635, 2376273731, 3848434966, 1970386149,
                294413738, 1420657192, 694358663, 647017168, 4094657777, 3013362236, 590143693,
                2285757920, 2393504081, 116938458, 891518480, 696284131, 2710811430, 3317562620,
                1647436225, 1605219555, 3358343198, 2183786684, 1105785201, 248367120, 1398964063,
                3309346508, 3273593185, 2032930327, 2675472140, 557577078, 692086759, 1588022257,
                1734092444, 927029618, 3696557822, 3370092072, 2151067302, 2650483754, 3670460764,
                2763985465, 1126450086, 3029345718, 1504895755, 3694166108, 578785502, 294874178,
                110079616, 1327583117, 2661938072, 2345632606, 3722933355, 656745495, 671269721,
                2346516327, 1169529001, 4238866211, 949351039, 3500460463, 4199863511, 2082398726,
                1281275042, 2560151133, 1138051905, 468589983, 727511715, 2554428159, 2014177155,
                3346720979, 1317583392, 1714879892, 4249909774, 2158352329, 3040382616, 964600510,
                319055149, 890296957, 2071841867, 2811829970, 3945344817, 4075668231, 1336582250,
                1632615222, 2996499016, 1247703908, 2161089989, 1757474064, 1957983140, 2427088146,
                3819098678, 1414774317, 1685786700, 2842967660, 2434489739, 2748571761, 2393986575,
                585646425, 733271380, 4096908487, 866235842, 1811304066, 2337315068, 4064326552,
                2517677609, 595634311, 929413085, 2556167349, 2814648343, 3447175234, 4171314821,
                3354462286, 2190450759, 3693163187, 817168953, 753817804, 2679932775, 2584000650,
                511478235, 2858863655, 2320104001, 2367392444, 1724096919, 1152655320, 3131579385,
                2076635048, 3557452129, 3931367674, 1011051727, 3910860016, 3742755232, 3977120817,
                178461096, 1938068862, 1480470517, 2997286985, 196403685, 3581556360, 3800228840,
                2583177118, 3801520456, 1254931401, 3392702841, 1046934176, 412728369, 2864978525,
                970771733, 672204372, 1528132877, 2673063996, 740759188, 1840165684, 1821213771,
                3111387733, 2386566079, 2682984985, 808050061, 4160818440, 1656303941, 2884647798,
                3997066586, 3727980283, 4181671626, 2736389654, 1808865173, 1642983278, 875419327,
                3960909969, 3751011271, 2807559080, 1535615269, 2321637137, 2745054513, 3020092780,
                1359015906, 2466514344, 591997660, 2754906030, 3487658632, 3722637404, 1613546148,
                915678357, 1842708127, 701921987, 1207101857, 1974760740, 2410755764, 3324705651,
                3105821672, 335929431, 1887715703, 4035171395, 2815003797, 3632947325, 3664189665,
                2211203246, 1473602679, 3802261181, 3699100807, 3964975584, 2757250875, 3240191191,
                3824907808, 1582581356, 116402974, 2321914135, 933007824, 136161346, 2857937718,
                1044097090, 477414473, 3966936277, 21169877, 2518410639, 1938987054, 4164953085,
                3287593768, 96004465, 3316812094, 2635456314, 2931969475, 3535012794, 3954299175,
                4188146823, 1054040153, 4020697192, 3043463112, 487456176, 1536604607, 2191156801,
                2869189759, 650124563, 54254415, 910946976, 3240585021, 4240104628, 989174439,
                3235043341, 607641178, 2910679971, 4072297259, 2664931864, 2560203429, 3992282762,
                480443057, 3944140064, 1601223002, 3984987075, 3894479377, 1082591102, 2444518988,
                2566734417, 1272094512, 2581007089, 3838472665, 2810473520, 1590808097, 143027202,
                1667662742, 3686892725, 228309572, 4091365295, 1107025920, 938240502, 567559985,
                2237721627, 1939039548, 3053102548, 3379831217, 3536253061, 1586694963, 931323468,
                593457460, 1981974171, 443146100, 11888347, 2403661012, 2646485528, 528884126,
                1040587284, 2828170682, 512577110, 3534338212, 1642316111, 124785841,
            ],
            &[
                3924577409, 3801138880, 2554871927, 1797946680, 1773117295, 3509783608, 281892096,
                2358224613, 4217828194, 1339769957, 439570060, 3151617679, 1384372613, 4141908033,
                3034076248, 201556707, 1940999750, 1134129834, 1062995144, 3653931665, 1653789920,
                2219526834, 849219893, 3448402897, 890163003, 378127096, 3324725657, 2858888153,
                4101277783, 1736762052, 4083759525, 1398269743, 946713296, 1332088349, 1241448676,
                820326205, 1554372778, 2902257209, 2531752530, 593903741, 283370156, 1184475111,
                4048000423, 3262885223, 3065903568, 2181798675, 970937186, 2831985588, 3318099557,
                125775489, 2602810229, 1265835529, 370295842, 3885440035, 332195328, 803805465,
                2339766805, 3074827324, 176637217, 2717782694, 3228882886, 2079180306, 1985828369,
                1451458086, 2647399511, 653380804, 2816232893, 580123271, 1284828784, 1488365849,
                3992136885, 1712696753, 3200712671, 4019248351, 2502831049, 3353947366, 3805407296,
                3975182552, 1255379188, 3079539536, 2754826248, 2654365805, 1932758080, 2018940849,
                3987435655, 2107608701, 1979416324, 2553264951, 2332482333, 3854067399, 7383141,
                2032883058, 209316404, 1509786266, 891329562, 2446773803, 981357189, 289424276,
                1563495883, 1124421740, 4019623418, 229810471, 1293459273, 685378813, 763089605,
                543868756, 4294383498, 4256223402, 3521141578, 1300426165, 4203249157, 2446225842,
                3483103616, 2930204118, 3459214772, 2242535858, 2845721016, 2523036196, 1191008269,
                1438983871, 1990994626, 1369473842, 3325530252, 2436280648, 3247037040, 1827745637,
                1440370214, 565710731, 918521819, 3174181412, 2021188910, 1292274207, 3161583133,
                1940037031, 1320244184, 1944735324, 1624924970, 1914256377, 1558283566, 1557557944,
                819014915, 3477749819, 2317549528, 1815788616, 3410581584, 865672422, 3902451420,
                47231850, 2052078859, 2128580726, 2861615294, 2875806926, 2504678981, 2922243612,
                2567002225, 3176460060, 3501319351, 256937154, 986867411, 2877370533, 3829593455,
                169449010, 1762966206, 126552381, 3303194639, 437611604, 2065984359, 215674808,
                2549495983, 226202732, 19733282, 265226462, 732006741, 2011526642, 2592527346,
                3141322109, 980881336, 4085884669, 2038689570, 3704380296, 1688979285, 1869912321,
                1472588169, 3395855158, 2409096192, 2603014340, 2571643809, 1244430574, 2331499515,
                234553812, 3949996932, 1906820531, 1849149876, 4204335779, 1113287279, 1165814564,
                3834491692, 3992932111, 1545656810, 1251393152,
            ],
            &[
                1794394879, 681672307, 1749784971, 3875852290, 2605775875, 3830937493, 1776664153,
                2164658304, 3052389122, 121103990, 2532311556, 2668274136, 1883610764, 747104693,
                408690547, 2248739723, 259855129, 2934993883, 2176924250, 1485355327, 1127644750,
                856342931, 303483764, 5142053, 651773086, 625244098, 2731424936, 2350150371,
                112631240, 1275290840, 4277356426, 3524679625, 242960953, 38072741, 2625824106,
                3378716297, 2200097651, 3700674881, 2915988853, 596256955, 3040402748, 3720241079,
                1756922775, 3093790065, 1609216017, 3777740724, 3784972477, 1832540396, 3490124554,
                1020072047, 4238953885, 2842509290, 1000994976, 1809915247, 2550234689, 278010821,
                2286612383, 3355766530, 3432337462, 2193122316, 1639147782, 3225990501, 208759694,
                998787272, 1642795010, 1560281600, 2893662837, 3412088625, 1789543945, 134279791,
                138110696, 3588552537, 3112564659, 3163154447, 877493420, 3664273345, 2755762243,
                1258332153, 471466382, 304823311, 4211933030, 2150727708, 2218469374, 2393674811,
                1501890427, 196739488, 341729196, 1105616285, 1176146479, 2705538889, 3565383221,
                2299341008, 1060768503, 3218783689, 1009846994, 3473661394, 397249216, 13506754,
                3621623374, 3497151661, 2898512014, 3630774848, 1935370085, 4267120880, 4135899051,
                1799409148, 3505276358, 269078904, 2454901039, 25026941, 3541071795, 320224295,
                25570166, 3637410887, 3066266074, 1551849913, 3855206886, 646778908, 3499920598,
                1807392173, 2974658193, 3899170154, 2028217657, 223895356, 2694366517, 2696487317,
                1259241092, 1452450347, 2872701257, 1465266387, 1227664185, 1852988079, 3265840174,
                1314955140, 4073824270, 3212823909, 218445285, 1520746645, 4031847794, 3149615466,
                1274808703, 370944499, 1824664178, 2735686429, 266060777, 3448762326, 53610860,
                2123530021, 4143115834, 3225521174, 4010735833, 2635569855, 986902780, 122656384,
                1339558267, 1284193679, 2736231797, 2963307804, 1626189148, 1233185099, 4139608947,
                464077508, 4046285469, 2555743157, 3580743777, 3735247525, 4127955544, 4010576069,
                1345310021, 3320552976, 3399711244, 3850568096, 1644768234, 2092743449, 1307520618,
                3326695560, 649696140, 702848925, 138141565, 644912687, 2425292401, 1411631036,
                3440461177, 3328837680, 2755185884, 2989552286, 2790272888, 3664124418, 3269945962,
                2604287363, 1618340662, 3679959200, 4050805993, 1339789151, 3336692676, 2115818874,
                2085307949, 2292717793, 3240684688, 2542744650, 2126759311, 399221966, 123686284,
                4172595169, 3670712777, 2379819943, 3438823735, 3774292021, 506637095, 1055885463,
                25709264, 3995986987, 742675655, 349888342, 3977445313, 3680517912, 4131805201,
                3892493076, 2099913466, 1704689141, 578202598, 982472653, 3353811282, 3106111697,
                2102812484, 1381551617, 1645348055, 3743699078, 4026522120, 1465113716, 2586289393,
                2164999569, 748805860, 2837286220, 1641999730, 4171579513, 3835462317, 3732455291,
                876396979, 3868206280, 2846621181, 3305441853, 3080114558, 1862673159, 2378144974,
                3952061855, 1185723458, 3653385196, 1985735779, 847725020, 3859801001, 1049156371,
                1895793200, 1830383465, 746355981, 281226425, 692646446, 2574915700, 1101022556,
                3422609839, 428283554, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
            ],
            &[
                1301325451, 2202463531, 827674839, 2990077551, 3515177881, 1362651403, 481136630,
                3397298241, 3518449263, 76128572, 4225087952, 1094548681, 282440964, 1243437992,
                2536206935, 1312305087, 2350135248, 1191467757, 772049416, 1651785710, 13757971,
                4177684085, 4225218737, 3829973687, 4224488792, 835349925, 807373018, 2003072240,
                1998180420, 1893011542, 2772647530, 1845722545, 3927750947, 1582656468, 3929302887,
                2309901890, 2219253077, 74452907, 3721812597, 3102504646, 1837697683, 4169869788,
                1109227870, 1893389948, 1637025892, 401123956, 2362840033, 3249816285, 1331916977,
                11330013, 1790389738, 4046514714, 4242300773, 386281183, 4154390602, 2907471583,
                596332521, 1031920105, 1416982457, 936732589, 620289351, 2021344934, 4134683536,
                254271151, 3153428294, 2775130118, 767392350, 1524517878, 1803212363, 1935475282,
                476597337, 1665283842, 385826494, 1418089792, 1583155781, 904332458, 2167494919,
                4213977373, 2749948942, 1366862995, 974249813, 2151831423, 2426239456, 4154619782,
                1909704093, 82889380, 1836307000, 1860128761, 2497608852, 302875545, 2512570768,
                3465381901, 3664521586, 2113690348, 3208498261, 211553098, 1122435807, 3989762258,
                1790955068, 1274985561, 801567833, 206607829, 1945509947, 2689438654, 630881630,
                3166357111, 950757161, 2525660644, 2782583030, 2082925684, 4017471838, 2770389652,
                3152723497, 2730012549, 375610667, 331640140, 3189394626, 1169047456, 1269402316,
                366259196, 659129976, 1835642575, 1109092533, 1409510258, 1055228915, 3865844484,
                1951513725, 1561115766, 1535328235, 566121235, 1218990885, 2397023975, 110038834,
                410651474, 2293988363, 1341825237, 3049031992, 1068909343, 3433095008, 226980250,
                234888265, 3753182189, 712474545, 3392300015, 358854770, 2053632965, 2314494072,
                3270641699, 1763895670, 4027033942, 3610557903, 1952033954, 3311300088, 2108677074,
                2293958755, 649449413, 1137877459, 1632674803, 3368118971, 4027363661, 3533599056,
                4112294692, 1992613374, 2157460184, 2344709644, 3126961604, 3915648450, 163946806,
                3452706048, 3278493797, 3569418312, 619110361, 1791108219, 53432167, 1675611199,
                3468608269, 3380246190, 3977636639, 2303818017, 2959386722, 4259696814, 2826759181,
                1786462977, 974733518, 2879253522, 3102475706, 2731858652, 2537398244, 2096104946,
                3000514581, 821433471, 3175348116, 2836803346, 3386301193, 400757797, 3528093517,
                689295706, 494008951, 3664544857, 1053036864, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10,
            ],
        );
        // DC_DIV_QR_THRESHOLD <= q_len < MU_DIV_QR_THRESHOLD in limbs_div_mod_unbalanced
        test(
            &[10; 62],
            &[10; 1098],
            &[
                1563750116, 2761722522, 2234492700, 664378669, 2289696554, 166287485, 476834844,
                2920420087, 2528304999, 1938173917, 3950825207, 4243596790, 2986888741, 3513584208,
                1621935302, 3010962100, 97331004, 3497602837, 3156993605, 4246943277, 3773399914,
                1791046376, 1330596670, 2066725731, 3080890361, 1411737887, 1547876370, 3080590448,
                1532248923, 1435492412, 3448185497, 1125870178, 3236487585, 411921826, 2813696973,
                3217407722, 3223519146, 3065092232, 2369951103, 2509352358, 926337125, 3014682136,
                2966028824, 1505359010, 1713762975, 4092602064, 637732943, 1302647295, 2902550792,
                889992967, 3865589903, 1419953312, 9792449, 3415320263, 564771153, 1688162383,
                2484779041, 309493832, 218454065, 3482805065, 3854968150, 917520015, 394395502,
                1316087688, 4013170326, 3611139371, 3969996396, 845435642, 1250928392, 3564637530,
                3534519817, 4193257039, 1210838207, 1018604374, 1039438522, 3241956599, 283401613,
                3791643370, 2495704071, 2807365421, 66163757, 3720427495, 929326153, 1056427022,
                2224017890, 3983649303, 3242577483, 2252715700, 3763817420, 3945056819, 2536219802,
                2347365037, 1332467980, 932313386, 1344905435, 1546705437, 2064541576, 1511380419,
                3830839286, 1360902083, 3503290266, 3917441903, 1833414880, 3943874358, 1755117544,
                2923194969, 2839238526, 1436154878, 2022570233, 2627252135, 514344885, 3629007310,
                2734265902, 3693108522, 3208247898, 2234133971, 1972552128, 2954899309, 2020593517,
                2046949131, 3731357545, 1937584680, 3590346900, 3944796673, 1847972007, 2243279972,
                659814707, 354026232, 3897554349, 2861167827, 616720453, 3566033773, 667580062,
                2925065641, 1209421025, 2590558623, 4061392256, 1200913167, 951116272, 3677973046,
                3503505276, 3890324717, 588682794, 1822470598, 3062466072, 1622960923, 2217967478,
                1671943310, 3797078111, 306673750, 416365363, 1127402537, 4051830565, 1295357578,
                3597600014, 3944475003, 289083572, 792152829, 1866204223, 154676033, 1521441452,
                3508161103, 925444108, 1492828246, 661274700, 3234551268, 2848116256, 2684114954,
                1278505794, 1135004416, 1528837298, 903435517, 897822285, 1306717602, 1475128383,
                1820901356, 1682104357, 2694156349, 1295051939, 3518824442, 250688398, 2216356021,
                3513738778, 1822646861, 2230691522, 3766112863, 615919379, 1974329303, 1351423644,
                2477642991, 1213629777, 1378792281, 2617577340, 2140073178, 2191340227, 2566413020,
            ],
            &[
                3993985187, 418743558, 1313360511, 1682822200, 2190606963, 1153956890, 2732042229,
                1286070126, 662863720, 4186279397, 540453600, 3865675059, 1267823400, 3515598059,
                2652841176, 1202274130, 1747727592, 4024332644, 1774850346, 681999022, 3602470822,
                2758087563, 1879963947, 3431635945, 246837220, 425774791, 1105979956, 2942553343,
                1698889280, 2350552370, 3068812671, 3185616175, 3088938498, 878065968, 4173406915,
                3359260462, 3381157370, 170884832, 4229318755, 2494013993, 1549083413, 4140845217,
                4084551031, 3363271174, 234069829, 579586268, 409399673, 3823445787, 644521777,
                2518846537, 536802144, 2920279334, 18872050, 1166062818, 330384075, 567479240,
                242105288, 2256634487, 2099809688, 3182064703, 3455323968, 3796049588, 913224553,
                1273986744, 1216752331, 3471953608, 4141617369, 113668956, 2271813874, 3836046471,
                1442113087, 1985184453, 1605355495, 4002876308, 3555195054, 1327862010, 2467826608,
                2786784068, 2229364499, 4162880057, 2362120653, 2428764072, 3253302211, 4041072194,
                3342725375, 5091414, 4236090390, 645428080, 2998645452, 2029624491, 56740124,
                2165228859, 3087533984, 1636492749, 2209776976, 3692581237, 607934780, 2356087899,
                844604833, 3795358717, 1191407440, 2348446542, 2260870238, 3095317646, 2239633241,
                1510395276, 1414456297, 1992793921, 2093060671, 3555947012, 2097207883, 2341507439,
                1797902178, 3894103463, 589765482, 4279776370, 1462654158, 1306903445, 2072601153,
                2881422521, 41492691, 12234573, 1317588012, 460035424, 2087095783, 1325294692,
                639610198, 163158835, 583584804, 2753511772, 3964488699, 2486983401, 2238895215,
                1588375790, 2681620680, 4165955199,
            ],
            &[
                191160977, 1213228253, 1438665503, 2959833037, 428771185, 3495423600, 919673997,
                3884278974, 2821606108, 3332861208, 2205644743, 3483267644, 3604026186, 2215417553,
                2139152976, 746332817, 1763682853, 1100669552, 495776985, 2816532175, 2063832600,
                3128459671, 3849765047, 1543117375, 4168563146, 912783864, 700345848, 4172185590,
                3008292117, 4097449922, 3103811732, 3816126299, 2071211439, 2427293197, 1964661455,
                1195541057, 490289276, 795794482, 314985500, 672557932, 539503340, 2302303785,
                1102570205, 3216815566, 2112797258, 2783671087, 1390099077, 3312724493, 908130100,
                1220098318, 1193663953, 1149221829, 819778349, 3289614534, 865016664, 2219777967,
                589857044, 2513517779, 639503753, 2645890189, 0, 10,
            ],
            &[
                847465617, 4013314980, 3846912964, 910246757, 2972404216, 2762134840, 1953196515,
                4029750073, 4055861164, 1261155057, 4100430088, 2785511074, 497236120, 1367918422,
                3738577206, 736241263, 650868678, 2349520844, 3387563635, 741561301, 2423229549,
                2724745547, 894805326, 2982356553, 4201925489, 3718492797, 3268940283, 1316855216,
                535979702, 1867135512, 2894454664, 1953954059, 3331547089, 3629484636, 809197002,
                3453878941, 2710176999, 2236099000, 2474407754, 508610082, 3021250908, 950343151,
                2347617926, 3116087366, 387686701, 1840236979, 608794169, 80987566, 2929948001,
                3099591933, 1498594442, 976518465, 2412591727, 4182908032, 3079365048, 2450010282,
                2281968581, 2243779001, 309401913, 3783895152, 2093682035, 2006514294, 2836109544,
                964684103, 1645279117, 3042605589, 3518893342, 3753614018, 3245078642, 976146102,
                470909372, 417907929, 584991811, 4141480919, 3596625836, 3530716922, 1149488478,
                595234233, 353336372, 638993563, 341110766, 984515266, 1262652725, 843520981,
                594906936, 3922870845, 2571018879, 2329734185, 4233366705, 2923004114, 168356226,
                666545721, 3625364230, 2627653737, 2717371138, 3344260869, 893744508, 407453169,
                1376334915, 1670800848, 320471216, 2114539766, 1671037181, 886024377, 1940914459,
                1457430737, 1427559259, 3091470472, 2856003945, 2098123517, 1418768818, 2088924969,
                3884270171, 233325771, 2475658630, 3306400235, 1042747488, 2251057616, 288186037,
                1069520858, 1716749834, 2851756715, 3107695069, 4055132959, 1800778936, 1250813397,
                4225902318, 3898227912, 2436303557, 4099682647, 4014271299, 2579688947, 2474049743,
                1793988451, 1750223744, 2886556309, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10,
            ],
        );
        // bits == 0 and divide-and-conquer condition in limbs_div_mod_unbalanced
        test(
            &[10; 320],
            &[10; 915],
            &[
                685114319, 3257424506, 414393229, 2860628494, 121479429, 2579870766, 1597023839,
                2474392621, 3223958133, 1457435159, 3048194581, 3047568591, 328216793, 3688729284,
                1474966660, 3229714080, 1674178552, 3622356479, 2813923308, 420491140, 1181947036,
                2552013519, 2545590339, 977030817, 1410754865, 418734423, 3219708398, 3814271579,
                856825330, 886986018, 2340527841, 1574000724, 1326246490, 2345646501, 3649082184,
                1757236341, 3333117097, 4191792834, 771549916, 4014890173, 1767239699, 1537408864,
                860021926, 3301854273, 2439584990, 3450574632, 2067936331, 2217599411, 1936116337,
                3184038132, 3501118169, 1312763670, 1815889084, 4185547518, 1921708290, 4252193163,
                733366199, 1748333822, 3613571030, 2021878401, 674325326, 1834274504, 1974211381,
                2155793730, 666543182, 3988638747, 719903603, 4243752700, 3417033998, 578937389,
                1954345891, 438767411, 1067012960, 2140679028, 2616731558, 3608791372, 234168266,
                115663374, 37715525, 3155431063, 1484074906, 2987669067, 1980354536, 201618151,
                2443603378, 442745319, 2757914412, 1266139308, 4142086597, 1989465976, 3517367864,
                1441253229, 1295109068, 2757883716, 1533532909, 4121897334, 3324479034, 33282683,
                1821922930, 1002968212, 762196862, 13770263, 826603273, 4072569825, 780821896,
                788706413, 2104768306, 1607373740, 341951230, 1675442736, 3679554432, 4040499065,
                571466582, 467434507, 1883560688, 3831540337, 740943368, 2376257013, 1304728970,
                917813781, 3342830532, 3374539547, 1366263565, 1830393744, 3801219913, 3174561984,
                3973286677, 1398849159, 369072692, 656722452, 2994544393, 2007585192, 3393313477,
                2976738602, 1184554260, 1566038994, 826752733, 477094709, 3837269061, 2769881480,
                2709841643, 2163313442, 1223013930, 2855285371, 472880962, 695734454, 3106659328,
                336220721, 2424316775, 1005851508, 3997249632, 3813922059, 4109122372, 1011074885,
                44571353, 3135429322, 2678006854, 1812501650, 531726754, 684688016, 82728273,
                2816638159, 2837354685, 3655899911, 36796549, 4088908020, 1199108102, 2363335387,
                2702162409, 1359179115, 4038752961, 4132030616, 3472925013, 918360670, 1612076468,
                1617334280, 3399902835, 1794719516, 1364930290, 3884047381, 1715844217, 2543581627,
                1948226880, 3734808909, 1123962649, 6885664, 4055662667, 2036545059, 1825684950,
                626135857, 3682021373, 2923868404, 1141437069, 301320286, 2038697946, 4203441370,
                2625080149, 2416510088, 3453059660, 2196830401, 1003239496, 766384828, 1454135529,
                3753927217, 289196672, 3027589815, 386319177, 4286570851, 34998813, 2808034465,
                654631613, 2919774640, 3980646343, 3390105294, 3876707444, 342623382, 3063311246,
                2951194817, 2409427609, 277380170, 1128962197, 512899487, 1130696384, 337608154,
                4248250968, 2538526153, 408791364, 1355901969, 930023605, 619907788, 1270155017,
                2669635170,
            ],
            &[
                933436633, 2314417619, 1779862136, 2339830299, 3359221691, 1983848875, 2097698892,
                1645402710, 49190984, 3806363526, 2374325643, 638588450, 3467828663, 2693267297,
                3081019625, 2568134532, 3644457728, 2630819968, 707790566, 1984505565, 3749563552,
                3700374589, 2579510542, 4246015133, 1527325532, 3034605869, 2134963426, 3613350443,
                2082268909, 3145097012, 497158738, 1750605816, 1683654362, 1392048080, 2595287102,
                1859642116, 3880370994, 773829956, 2727575776, 868421082, 910865307, 4010486592,
                72360528, 2330397412, 2764112435, 2833247271, 1236763483, 1139702723, 3454679019,
                3138128998, 3268622050, 3622582141, 1726130545, 2831795892, 391680447, 1964919870,
                2937963749, 260385042, 1893950828, 1182888075, 3460030123, 2590897592, 3391091057,
                3700415037, 1619162545, 1524016666, 1313243906, 3716478858, 1054838129, 1929422210,
                4093970820, 1243478860, 3650034984, 3598628391, 99479112, 2103638976, 3422493162,
                3133671222, 3540259323, 1874029880, 1634209319, 2379655185, 1946213151, 2520479253,
            ],
            &[
                3601647142, 1198081127, 2017909663, 2850560144, 2525189596, 3322651433, 1196731903,
                2005963472, 2134066324, 2610149081, 450546169, 188828597, 1723795042, 2336113352,
                3907052140, 3494836209, 715365512, 1993048254, 1925488994, 823976428, 2233248290,
                2422705001, 3872792781, 2414526209, 1756149349, 1280574399, 1755135863, 1247153316,
                1728175244, 1243737647, 2892353496, 4039291447, 2822417936, 1802319071, 2421598944,
                3822986016, 1165555397, 2706895746, 3653134185, 3710916752, 2131271858, 1948052061,
                263095829, 3665120472, 3941304005, 2412990560, 214802237, 2000697426, 2019125997,
                4285690497, 458482240, 3763367750, 3740974398, 18717988, 2994310518, 31139573,
                2962856782, 2635167300, 1374305995, 1904881724, 594198221, 3362552684, 4265460501,
                274321353, 561861394, 1648066133, 2292362828, 3514463789, 3295772513, 2531715202,
                3705228042, 3001079609, 3079883010, 3054352160, 2260450577, 4705408, 1098764342,
                3839802990, 2734256, 1555041092, 1134828750, 3567598995, 192771362, 2717018386,
                662391953, 2584453057, 2585537103, 2576027868, 1668324201, 3624757426, 460065697,
                1929435817, 3408543056, 2538334724, 3248763392, 549345600, 386006368, 3558580119,
                3062181549, 1775062641, 2633004162, 2187541778, 4022833250, 2741897083, 3947772701,
                679751089, 158802595, 285267524, 328299044, 3021797568, 2510593713, 2545541570,
                1206900374, 1414348252, 4082633309, 274916917, 477912774, 1556311254, 3077433173,
                2797875659, 3143263862, 465042590, 2147512274, 3300509342, 3506297514, 2410981614,
                2358295490, 3388832427, 667531680, 2815589176, 4196689902, 1375855277, 3423352186,
                1308972370, 3156982991, 3705393539, 756586648, 1240095514, 4216114488, 559069171,
                2307911019, 636721718, 223194289, 1878543863, 53769785, 1002080984, 368614887,
                254165863, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10,
            ],
            &[
                4135839129, 3082159379, 2808741151, 2746492478, 1317271925, 1590248590, 1871245480,
                883232624, 3985674442, 3997584338, 2338792001, 1776575346, 2531584902, 261625854,
                3578066182, 2058830353, 684820033, 3683099826, 1776182826, 2182228087, 919424929,
                4095708279, 1423878550, 172604911, 255380658, 4104949687, 3178922494, 1444103543,
                1691042525, 1011488353, 3955571774, 2253259467, 3143874569, 377143694, 2390377782,
                1070304427, 1715840158, 2972468795, 455414172, 3300053546, 2552753048, 3276730351,
                1581696761, 1405031742, 2503564946, 1980393840, 2686153828, 3279538716, 1074513470,
                2389426005, 592338809, 348493719, 3669366843, 2086362650, 1888752201, 1485850549,
                3098846363, 839653456, 2380177511, 1732519385, 1998829691, 3296699081, 2705709135,
                2848494034, 4155180828, 1425421469, 3752183557, 2319259329, 2757221818, 1921158733,
                3302049214, 1696454223, 3356952349, 3100878977, 324054921, 2131412976, 1078305944,
                698318350, 4151030129, 2259288990, 762849915, 3134288938, 4090864118, 1223661238,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
            ],
        );
        // Barrett condition in limbs_div_mod_unbalanced
        // bits == 0 in Barrett condition in limbs_div_mod_unbalanced
        test(
            &[10; 1459],
            &[10; 1458],
            &[
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
                u32::MAX,
            ],
            &[
                1699768805, 1493014143, 2592376845, 190926105, 542951397, 3841252648, 1343830055,
                2073311615, 2471501748, 1744126095, 4269392231, 3721081862, 3530443208, 1084284148,
                467429630, 306942799, 1316059964, 2458728017, 4217570360, 2624704102, 3521450981,
                2608224726, 3040435965, 2267671055, 471534848, 3629410298, 1363200167, 203206966,
                3414918917, 3335382360, 1913622484, 1218762755, 3956682428, 1037359525, 5531615,
                3407338094, 3864111971, 3057551672, 1048359741, 3074041931, 1285559492, 2147056083,
                4091000908, 3900432305, 3556431023, 1451794634, 2393864263, 2505694122, 2968009980,
                1048797969, 1048151529, 817832869, 2521994756, 2426006163, 3275649087, 941801312,
                1575422758, 361314564, 722834359, 4247301247, 2186131251, 3429599060, 2212966801,
                1219957676, 1702525945, 940680423, 333505183, 2493537355, 354760063, 274436852,
                1639243309, 2924727204, 4285739645, 4001422648, 105606253, 3112142556, 3975066309,
                409404932, 3040839303, 4022137216, 276092852, 3345019055, 1650156126, 169273103,
                1920493641, 197903490, 4009771827, 838073342, 3939112618, 3406907996, 4120898973,
                2720730518, 2834644027, 3448317034, 3673080760, 1810888516, 2181591183, 2952080694,
                3794819074, 676604950, 3118739900, 606918192, 1316167449, 2730639798, 1815557579,
                1808982050, 2109827633, 1671035061, 7558450, 1554665087, 520056416, 4218246290,
                1161585267, 1878255675, 2486870832, 2088887262, 1303298097, 164712340, 2377403159,
                525890592, 3347413040, 1697811557, 3373912443, 1800652721, 1430587466, 630390988,
                1443110580, 572173114, 3006613569, 163802577, 3661300485, 2066285319, 3197778371,
                1266266830, 3617690296, 4233259050, 3805452611, 2682754452, 1121170085, 4239996815,
                2574739406, 3293943958, 589250712, 694935820, 2394149134, 3507180662, 2403010680,
                1341157799, 688040930, 1064943055, 1576175762, 2748814503, 3365706670, 2331616371,
                3891308187, 3625939659, 834228833, 2747861390, 4238259694, 2400594789, 1064448439,
                1457694712, 2503273199, 848323770, 3879018391, 419366498, 2787183492, 1572178433,
                1143352485, 4132728989, 3611364165, 2042218208, 4202715626, 4222254124, 3573214358,
                2530238089, 3214459960, 199438106, 1990033748, 3797350881, 2039620692, 2196170141,
                2867974320, 218349677, 2334991902, 2199173454, 2635928703, 1960733130, 3298739914,
                1745262170, 2022670546, 1773942006, 4022957449, 3487536364, 4203797706, 321674131,
                2963478216, 482717037, 423207073, 2529853593, 115650857, 1559406958, 2515253401,
                4253176221, 1494891359, 54215779, 145831030, 2534290332, 722379383, 3288965822,
                3478280697, 114345927, 438460383, 4120362834, 3417392370, 3871144709, 2774707897,
                2662801524, 3802201761, 1044223137, 817062608, 964570171, 2627601973, 2648686193,
                2728498120, 1589690733, 3285610776, 295629246, 3995872256, 2573726546, 231960020,
                4274030532, 3444536058, 3882840099, 2252235022, 3959235737, 3485371602, 1365773288,
                33313646, 1392617408, 1844121885, 993486158, 821274239, 2676605019, 3812510576,
                3432776114, 495146668, 216967234, 3172737228, 3417198461, 1629229154, 1821830950,
                1340735610, 3211463144, 3560398150, 1050123642, 874441227, 3169516221, 2783241998,
                99843330, 1175436161, 2825581162, 3259620982, 3350111857, 1606464613, 1911911079,
                4127551535, 3229370127, 3828823712, 2744685123, 2859704702, 1106636072, 369804135,
                2989745290, 2768260583, 3275220193, 1104864623, 2290350054, 1049972093, 1592992521,
                3598788064, 3350912109, 2954408081, 4230173468, 2901042813, 1614811380, 1930643862,
                4235254046, 3520012632, 1160373738, 3249852125, 923106635, 2511906301, 2055083218,
                3193170540, 843255473, 3274357481, 1069334404, 2160558830, 1247811861, 1960090087,
                1260505746, 273679994, 628898405, 3731946987, 3821611375, 1479367897, 406962212,
                1951524671, 151905808, 2697376333, 2827375721, 3738186384, 2398267382, 1189552516,
                3271847863, 3695955312, 839640611, 391563549, 2851226168, 533382637, 4005632192,
                779063015, 972248299, 4160069328, 1551848869, 2901173293, 1788886403, 7742522,
                1152154246, 3162815742, 3933026131, 2093435260, 293643707, 537139803, 166837469,
                1353454767, 647497063, 3056417780, 4130500121, 2563320691, 3004161478, 4266673072,
                1525376895, 2692236203, 612090721, 3803502732, 1472545930, 1285255741, 3563385061,
                354899818, 3985901869, 1077755288, 3764626839, 1736779714, 1388617683, 373259603,
                406803142, 2250511459, 3661744930, 1712371282, 3755716304, 1001652736, 1437790589,
                2722214878, 3509431789, 1045623456, 1477384299, 1529044191, 3485492831, 777726776,
                3111945645, 87325680, 3674053827, 3777562490, 2467629264, 3920974102, 1118313420,
                518650065, 2779852693, 3938004723, 351444334, 2301762313, 1696242659, 915234550,
                3426770333, 2623516555, 2367502869, 1764681654, 3012087599, 2970366387, 1214823325,
                1416807413, 1002068525, 902786108, 4219021066, 3685197343, 627261248, 275319515,
                1048180581, 184895903, 4054317442, 1164782510, 2969271356, 448119019, 3225650628,
                3586253056, 13844949, 4265695528, 3156376136, 2094798072, 857381027, 2996376430,
                2313835774, 421527113, 577824604, 2027011737, 1936987926, 1716119129, 2495416975,
                1566342556, 1974265475, 100699876, 3818621196, 864167162, 264481383, 2779691848,
                2519054856, 356904428, 1425193402, 2029146838, 3791198981, 1181286580, 2106244436,
                4074963191, 1156817098, 2002193018, 584536494, 1252244761, 3576951572, 2017920970,
                1604293290, 3010503460, 1201492606, 1555982397, 2556964369, 3428819809, 4168489079,
                4171058202, 404720822, 2480856269, 1813722898, 2093837710, 3164853594, 3430042720,
                2545385245, 1253945679, 2067139932, 1049755734, 4162345450, 1330690410, 2567802121,
                3494789533, 4027320953, 1359086506, 697144652, 2171860846, 1885681379, 3200348033,
                779514913, 3892431243, 3292022849, 3206367229, 141294896, 1247341423, 1286221471,
                2030904879, 133272354, 1441910339, 3982161305, 2696309947, 3801057775, 4053369379,
                3233631762, 3173498696, 19486328, 3282282805, 2117833655, 416934200, 2476837107,
                3550654071, 835595228, 2784887835, 1849982594, 1215825494, 120169702, 3628150453,
                813273996, 3164608875, 2585886019, 3468354974, 2529654702, 3937155612, 2948360421,
                3839784361, 3626976122, 3884938510, 2182665318, 1984077334, 3592802345, 974314095,
                2658877268, 3320515471, 3220348329, 2057524489, 3330170042, 1859432638, 180803537,
                1712128971, 2278567221, 2233418239, 2029256422, 183505236, 1671411329, 207176584,
                2036148357, 2313901094, 3988184694, 2436690588, 211724920, 3032356297, 3340214696,
                117345076, 1500403818, 1365050888, 2323945197, 2919933846, 3023641486, 599606728,
                3628676259, 1581385213, 1427038937, 807104522, 3978940995, 3629484758, 47151915,
                1224789415, 2759574529, 2839954032, 1315873434, 3168847820, 1610459325, 3726598118,
                896590825, 2419742875, 3430079217, 3778931934, 3687222980, 332999836, 1043316180,
                4189864653, 685607150, 3695627010, 196835870, 3941428183, 676485145, 986494888,
                1049128467, 1888162207, 2801108003, 2947315222, 1894059346, 454711531, 3589935315,
                1803051198, 3655137369, 983821858, 3081875497, 3803393764, 2428490033, 1679378736,
                246071720, 1483050983, 1382043974, 895942294, 2442009263, 68111122, 1626094364,
                1007851423, 4064984075, 1533309302, 3360582064, 2740180933, 883885210, 2989133634,
                678055765, 2661431250, 92559696, 1032783565, 22899740, 2361882691, 2393385114,
                992907787, 3373832203, 343145453, 1165167516, 290287284, 1707286378, 634939907,
                1875541381, 1297012104, 3157634640, 1929967474, 1519414443, 3881762803, 2681995819,
                1775206192, 2755218098, 3910825543, 1860602393, 1832806570, 415596447, 2186155905,
                2791826564, 1816344456, 4023525966, 243382839, 748453584, 512556810, 3922005623,
                1061467548, 276741166, 2229273612, 1738207771, 4128865796, 1984054190, 1324502121,
                2297662740, 1222235249, 3182342363, 1665477641, 2147473685, 2421806673, 2322492629,
                3459362839, 293710623, 3706578807, 1598383617, 3666283079, 1011133678, 2189483475,
                938644636, 847088475, 195518118, 544927250, 1332819612, 2366720962, 3995717811,
                1985243513, 948001598, 634366393, 3212334449, 4000960249, 3974258285, 4013403482,
                418753555, 1101654041, 1090819318, 1675158019, 3683152713, 1204756106, 3841987860,
                2260147808, 102023094, 238154404, 533560693, 4086126380, 642534617, 1632145671,
                1006291121, 1435987078, 1313038313, 4186175328, 843360286, 1839639056, 1353648132,
                2221125136, 3732368512, 3339185832, 662563454, 2744469998, 1331973650, 1343096038,
                3251304725, 3601378173, 3422205067, 172706680, 908147887, 3728762498, 3795011129,
                3044217576, 67031330, 2499472547, 4147725229, 2529069049, 3741434149, 4201254595,
                3779595001, 42489268, 2053548825, 985282652, 3980674776, 3248961215, 3376433654,
                38182659, 2602101994, 1925777855, 806407427, 2317267910, 1380652265, 3701097444,
                1220848862, 2025812459, 3482791264, 1753046753, 598143651, 2616070898, 2479609320,
                1868138196, 945178683, 3832269010, 2314371642, 2400732781, 2048750780, 54093670,
                327716566, 3334970102, 28861124, 4118278855, 3714357594, 541833330, 2000911880,
                2666752754, 499968133, 1548730866, 1814521338, 2487369228, 1138644653, 739248636,
                126190040, 3978033791, 1817304821, 1225794794, 2871919793, 940731169, 504076316,
                995594649, 3329757458, 2846947354, 3891292748, 3959049218, 2127628616, 810346662,
                2271875593, 3880247584, 1164066271, 1750445267, 338639562, 1699074958, 959302743,
                2956590033, 867798509, 627451437, 3510106002, 2473252158, 1509206912, 3352377241,
                3802665519, 2147957812, 56184472, 1718654148, 3672624374, 3511414009, 2682054173,
                3922316656, 2414259176, 1496250883, 3967344788, 3214918603, 1624761599, 2724006253,
                978208159, 1113357772, 3487098045, 4270740839, 633061828, 2261921853, 3462914738,
                1530768806, 1364864048, 2876294873, 2510835104, 4242821662, 2474987381, 3633586220,
                979932165, 4155189874, 2525154569, 1335483880, 639760624, 1660790427, 2226690500,
                4135706134, 150618757, 593063255, 3258479253, 3728374085, 3007800944, 3679685736,
                694904689, 102552353, 1428747995, 1176285881, 641509845, 3270509599, 272169854,
                3047261598, 1287492008, 3351279172, 2404469180, 459751592, 1333387953, 735177161,
                215716037, 536597459, 3665567562, 822815388, 3602692316, 3168229037, 1054147108,
                4146505577, 1580773238, 1088501561, 3629868530, 2978204283, 3610240644, 2223237525,
                3153209697, 448561701, 895234984, 1592358205, 57857782, 851682344, 4181525201,
                1988009551, 3651424110, 3655716749, 3787661870, 2925252014, 3708997912, 3309060091,
                4188222270, 1673276025, 2192528846, 958274526, 1258766035, 3525801758, 1215614889,
                3051826051, 2354974337, 1541657893, 1271755575, 496264166, 2626820052, 936952045,
                3785181421, 1294902361, 1958901697, 1604821791, 218282718, 2246953449, 538193118,
                1919817946, 1243076425, 799521120, 279827487, 2722496365, 4019574708, 990869332,
                2181585056, 2705356597, 610157367, 4119248513, 3343890269, 3121261960, 4085000780,
                1022014736, 4240976369, 2817889889, 4075894073, 560049242, 373205120, 334714162,
                1892034277, 51733004, 1776487312, 1265439929, 529285398, 2048981213, 1833004632,
                827301005, 1648393113, 4281016481, 2048185380, 784315559, 3245679058, 3513265995,
                1369181664, 4269143782, 113931975, 1398194472, 540409306, 216516009, 2627890586,
                3694809441, 2573974797, 1396611872, 2646365320, 988053471, 84792061, 963667070,
                2114579379, 3564371585, 3893773169, 4197725787, 2378021272, 3273607654, 1738197474,
                2402812179, 1278628015, 2317178895, 3160300732, 603898477, 1287079046, 392763347,
                445875312, 318139180, 1903469143, 3585413276, 885483094, 1674549044, 3911672420,
                1575430246, 1867282418, 2115410448, 4189894183, 3512999498, 2833930381, 4284803257,
                2594863293, 3053172089, 442647755, 2456733276, 3207156565, 1248598530, 3135346976,
                2511563725, 2761431370, 3552853409, 3064928230, 1668127734, 2151818142, 1573413967,
                2528903432, 2255579949, 4086541389, 1008056620, 651544198, 4099217330, 2147059795,
                4189054906, 3160158060, 3084688966, 1829066970, 366751766, 1086760266, 1823021570,
                3035776668, 3725549438, 303569416, 1637955291, 3070457854, 2756834184, 1117066585,
                2815830458, 1229154243, 978732541, 3666377420, 2646214554, 3084488532, 2757010866,
                1756160517, 2475577838, 467860047, 3125348085, 990351000, 3303850398, 1120462919,
                1920695807, 2980611720, 142863055, 2378648555, 2707355873, 3519612422, 3266835497,
                2512195477, 1941306513, 365527762, 592954943, 2552580189, 2606501901, 1933724422,
                2729691276, 28289820, 3017728757, 3650961916, 3696374759, 4228636665, 1241471494,
                3355869165, 1455843481, 2403725149, 829901760, 2618851388, 2623034964, 2752098284,
                962418521, 964160519, 1174284358, 2043907493, 848741317, 2520932535, 53649688,
                4228750878, 3694987632, 2694050164, 1097113047, 1221352269, 3997202409, 2858697527,
                2874569664, 82995009, 2474870382, 608319794, 2793235942, 1762763510, 593568738,
                4140942494, 3399850155, 3632742015, 1495257590, 1987803076, 3040781503, 4185563847,
                2095097137, 2984180367, 2385825018, 276655462, 2186224265, 242785858, 25971964,
                960934651, 4259630073, 2869516035, 1099452330, 1108772812, 2208212843, 138327599,
                3047969124, 2406962821, 3234115454, 2013090243, 1253595634, 379537518, 966627542,
                2289594467, 3820588844, 3307962615, 2251395356, 1086612191, 2411787092, 716861072,
                488537062, 4279016079, 1024670198, 3162868375, 2993498248, 318817475, 1204805151,
                2917216152, 202544687, 4055006202, 2166902046, 777932120, 1954248209, 1436706075,
                392807099, 3560992122, 3690436481, 4086456539, 1672219993, 718561908, 1329443408,
                41759831, 3830929272, 468558885, 2850993192, 1203438200, 173099196, 3100895691,
                3212371819, 2727223413, 265778175, 1306749738, 1945372531, 3409735664, 1829111612,
                73857789, 1967847248, 111126146, 1941085939, 2157306354, 932967688, 1524770100,
                3562820290, 1815865396, 618928660, 1954521715, 2791055048, 1472833149, 2745012885,
                2590581857, 764068138, 3810864565, 2068720839, 423731968, 2781829173, 671016197,
                3626671545, 578830019, 2263629204, 3196999908, 979097653, 3960854009, 2652280123,
                2014180777, 3212225669, 1901793582, 791028866, 1535961645, 3425925260, 1728220859,
                906987059, 1320441954, 103740087, 138471919, 2751991892, 3763793139, 1930252328,
                2302777807, 4166228863, 1898736904, 2679190175, 1902812084, 3494412200, 2003091421,
                647088593, 1275527793, 1571337951, 1296166873, 952173553, 3873665860, 2863399704,
                1687749991, 1019315430, 262989750, 1995806398, 3977438566, 3065387570, 194327737,
                2433254350, 3852864758, 3086016127, 1848276257, 872733825, 4293282833, 3839899541,
                1287823073, 2617969813, 1718468275, 640897626, 2796238324, 2471345611, 3038580905,
                1824539690, 2178312422, 3642675324, 4168141874, 4093223514, 1058804935, 1645178046,
                3320651392, 2520046692, 1724703883, 821899232, 481110608, 2492775734, 922020621,
                2923405792, 3392950548, 76237439, 3904683294, 256504571, 727968315, 59423766,
                3078236506, 2465675774, 2942973709, 2930861254, 2455418902, 2986403934, 3056400696,
                3599867309, 595501194, 2042151651, 2763604081, 65000450, 398696589, 3026108404,
                4199385741, 3349995311, 129915120, 2486649758, 775313272, 2784093349, 1582665104,
                2775814261, 1584569957, 2195691054, 2575677337, 3244017237, 2457054839, 3897157261,
                3195991591, 2030342150, 3727062402, 3706029571, 1179068874, 94821848, 2230566710,
                3669075264, 2425831169, 2438414276, 1720898289, 138216286, 3807634131, 346144588,
                1780209932, 694722911, 297024116, 2795490416, 1836169972, 2915769303, 591959219,
                2377921602, 4158591575, 1182337705, 231710027, 2274507465, 2241869617, 300827881,
                4150367209, 3585840019, 4167111741, 1023965277, 1674153048, 887595527, 1601672948,
                1765479313, 4065509701, 3915091640, 1297871355, 3479625154, 2831036720, 3785201761,
                1221164796, 1647627464, 2551945655, 1768755122, 2079192478, 347747455, 4045445050,
                2954562195, 3495749867, 2264323612, 3116421719, 2118887029, 432847575, 3976298717,
                30083877, 78749340, 2656872748, 3171516677, 944561854, 202462342, 339834758,
                1199920281, 488096540, 3380838041, 3470160182, 1755758102, 803450485, 738480354,
                357618351, 8551902, 812925594, 3218358491, 2918846080, 3174772578, 822290689,
                51990462, 3350891640, 2729296982, 2723805763, 3540769319, 1145905142, 1754039404,
                4289454572, 4153901476, 1336760032, 2717506348, 2938254966, 1476941276, 3458786809,
                2378593502, 1537570700, 476723401, 1207306095, 1092996894, 1187377294, 3666979500,
                3948059620, 4150681293, 719413909, 1118296918, 3753268822, 905882560, 1638884713,
                1259563753, 1063300422, 1502884288, 2285369399, 1874551590, 2040785043, 1775679918,
                1144757520, 3854262168, 3821097323, 282903083, 197139966, 976017372, 3684024526,
                3746169537, 108937132, 2444167905, 3366454633, 1002555971, 3961863482, 1693512346,
                4219424106, 2731825813, 2173055658, 3589347522, 1180897582, 349307065, 132252171,
                1286185962, 2906205536, 2843606103, 27822898, 2481699072, 2948630201, 1774092707,
                1171123309, 3404061713, 2905420837, 2351973006, 3971568799, 3248015376, 2297549471,
                2624549152, 2864086950, 2757145051, 284981704, 4116824485, 786416861, 455364234,
                810567289, 1304615212, 2127708286, 3066389895, 3906659140, 1621009466, 4060905456,
                2498550541, 2021095657, 189923381, 3015918335, 394513300, 395082750, 1997152191,
                3900214471, 2076041515, 2762331608, 3059576182, 634566583, 2077367009, 239466771,
                3512081528, 3492757347, 1343506243, 144657866, 1186993011, 2942254420, 3813487876,
                640076454, 3107898063, 4057144155, 2951251839, 4059833593, 2265248880, 2051308911,
                3838642653, 1427962716, 1138966813, 1697969541, 3885404282, 2547515947, 2006341172,
                1338884621, 3673075887, 2250647769, 2303605646, 4029999904, 2015620651, 429025216,
                4230380695, 3438741639,
            ],
            &[
                4140022839, 1332918634, 385973856, 729517205, 4200666083, 3186247306, 2216473287,
                3967994940, 3549880551, 2351334526, 2534881763, 2681541703, 2415670560, 1563911606,
                1997982500, 1605736458, 1167308742, 3790043183, 1281410972, 4023693410, 2615885090,
                4061771357, 831983168, 1009160127, 63254496, 1067286614, 3975642271, 3217740495,
                1975825580, 854854016, 1915702280, 3908074524, 285492350, 1679287901, 1104416954,
                3695854744, 3144705003, 390542060, 1273889374, 3084930693, 4021045456, 3870124465,
                1499147739, 3994210128, 3405516906, 3623362998, 3181013060, 1438540318, 4272229535,
                306800092, 1181814571, 3620542147, 3869706343, 2217038651, 3688188000, 3236239747,
                2170551399, 3953686852, 198893646, 182904951, 2546842722, 1735943345, 1114476981,
                405616403, 3534536074, 2023951294, 1480810150, 3151805839, 382753314, 3801503696,
                2647293617, 3687313025, 3690190955, 3611357942, 311999520, 1479537441, 1417453958,
                432157481, 3078614193, 3775508939, 64222726, 3924944108, 2439554192, 3257110815,
                1419675816, 1340749298, 453811150, 1561302035, 1676196487, 1180208338, 3665601239,
                1668250078, 2824874050, 623744389, 2632051421, 2939514497, 2726660986, 3692620466,
                342565691, 900445430, 1837938808, 3156072699, 1435577065, 848877849, 3301087391,
                2965859650, 1031009120, 2161708655, 140555963, 2153100207, 4212548871, 2619127334,
                3918882470, 1432982383, 3390781349, 3716882367, 4184486270, 2277586036, 470252938,
                4112802036, 1170864674, 583933362, 3436794416, 2375532943, 49632807, 3418743752,
                3474436229, 3170120487, 2315065091, 3188088177, 590943243, 3782256578, 1083050403,
                786791806, 967853931, 1985229455, 2650153654, 1329623293, 2081902975, 2953142527,
                1454174427, 956392778, 2653248919, 2825319626, 2568111104, 2273785507, 2681572985,
                2942580495, 1582788144, 774169635, 3400727324, 4131339023, 3522701030, 319714447,
                458707788, 3752893403, 2443453767, 2781969719, 3372652584, 2121224611, 2434396226,
                3653609151, 1787303898, 3116390348, 1921974414, 1712268671, 2949516740, 1622664220,
                161136625, 497442963, 3317256575, 2957603271, 986452621, 3805208504, 2188469415,
                140689727, 1797077961, 2162618915, 3322199776, 3924576551, 944631509, 2240768158,
                2759297442, 1749164955, 3082686335, 3003330954, 1180096875, 2313197002, 1149750323,
                3900540274, 1995494972, 2408692703, 2046549780, 411448793, 255559985, 3477747740,
                3894106684, 4213478926, 3984564898, 2712600956, 3287187119, 816891367, 2106294719,
                1106097934, 2910176802, 2608974151, 3469858998, 2100827559, 1199787244, 3568298,
                591666042, 328113877, 3372271726, 3376926821, 2110192502, 2024579892, 2139201149,
                1247359283, 2768125945, 2549569459, 2612808458, 2318203790, 130370887, 4254847480,
                4001483865, 3878364734, 3541076697, 2506919390, 3651245283, 3792308185, 411720929,
                3304656118, 1031630616, 2882095508, 2575128889, 1941130594, 3620512291, 1584273173,
                298857748, 1816941748, 2999070534, 3251147932, 1387106514, 3520710326, 1393970408,
                2451356112, 159701226, 2454829360, 3908203803, 2096649839, 3785552552, 2810782392,
                3683175936, 2049748560, 2728594433, 3807332520, 3378848389, 879276013, 806429365,
                2062382159, 685759815, 4103606920, 3837126864, 4044942116, 1361913605, 3538745256,
                4260118682, 1468436403, 3266698300, 2298805804, 3550824836, 2931275954, 1201599658,
                3732266565, 3356136327, 3721347742, 1028089391, 470390407, 838305008, 1154116269,
                2955121230, 1969987690, 96777497, 2525384567, 3280604030, 2954089608, 2870616682,
                383452739, 2851853443, 4247435667, 1968078656, 2157562040, 2298288548, 2057507768,
                3694060404, 1371214831, 691452969, 3349919462, 3931314405, 2996280220, 2073252676,
                3500529769, 3308852650, 4013710550, 2128361215, 4120449957, 2644175204, 2771183255,
                3881988169, 4057679961, 3263153248, 1702685317, 317599410, 767790225, 40124243,
                1722383190, 1975688792, 4175872056, 3846629460, 2643060200, 4204702999, 3742204598,
                1998112415, 3570363511, 625953345, 1899666414, 4202545026, 3330022508, 959584356,
                4092102387, 2602888631, 1180144128, 2154538601, 1195848017, 2998497271, 1397107840,
                3412220808, 465149695, 2877827512, 248680930, 4060793970, 127179801, 3479407908,
                1039497650, 1589401135, 1785006420, 4270265648, 3759909234, 433296685, 2364021432,
                2489444512, 829658611, 2658111199, 3782549974, 1011476712, 4211023677, 1914407156,
                3639480936, 1313292962, 72715740, 3746156019, 154708522, 3703285093, 507957038,
                1196454422, 4164637758, 3835084902, 1974263654, 4097488680, 1017286328, 2381514791,
                3008685528, 797211770, 2421604636, 2469811051, 2448855528, 3200879216, 150917686,
                1386549503, 951269912, 884416859, 3270671738, 4173496604, 2352492574, 2312459813,
                1381728090, 2225432681, 2624147380, 1753378914, 3784057767, 1849246765, 2097893023,
                1813860006, 1309569046, 261246408, 1352760534, 655383919, 822735207, 2080963562,
                785386674, 962647863, 3855351034, 163148442, 1638002593, 2361285757, 2942885144,
                3801953893, 2050867773, 3719126889, 611516050, 241996878, 2359976268, 3116112772,
                525763893, 3795367885, 1899100059, 1826668521, 3968490725, 1184477065, 376409549,
                746651808, 2755958490, 690064601, 1335602324, 2315651118, 1798021213, 3057146144,
                361981243, 3683370219, 3495845024, 4229047082, 3665386898, 2448070295, 2103815950,
                2282815628, 2728867302, 1675855376, 4246790452, 3451647092, 2752025505, 3696059121,
                1776536840, 2501328953, 108497888, 1674323829, 524525402, 2031653211, 3739008218,
                842744685, 1787133262, 571129007, 1522748508, 2869008999, 3669532986, 3107783215,
                1087834784, 909862848, 3671334552, 1604234750, 1868039767, 3277936848, 3892010410,
                3604408115, 804539188, 2593245850, 1848873611, 1717694352, 50916242, 2543833083,
                3321591984, 3860808446, 973275623, 1426440356, 878204766, 2518066829, 3609815944,
                1178130909, 3463022868, 1259354393, 660781485, 696960611, 294179566, 2623547513,
                4025779112, 4289956495, 1716509851, 4255486421, 1742423706, 181083582, 1576335154,
                2400595517, 3017395276, 3510949481, 1775378365, 2675541160, 4181947126, 458529395,
                69232536, 67987398, 2855644109, 1641330784, 506233303, 2545017731, 3604602302,
                2316102379, 4021957608, 1362988002, 589652170, 3287129679, 646961616, 2741167343,
                1059694828, 1294695889, 3286103374, 3610609446, 1880809887, 1000550267, 2311288273,
                2150509497, 2387358122, 1755230652, 1623678481, 660120160, 2362168609, 4284517997,
                855059721, 1701363080, 2654809044, 2751921880, 3540973385, 635986452, 4005249717,
                1433280704, 3916647210, 3042341804, 2761453879, 2077007662, 3296723936, 3466880283,
                2491001159, 2109091000, 4073525474, 2496408082, 729984271, 4039357488, 2111341421,
                2499441761, 3659919241, 1137617785, 1194350142, 3319664610, 2841053011, 3485613539,
                3898686580, 2337910268, 529215038, 3933384825, 3048164724, 3392190075, 1198986188,
                201875403, 3776454656, 3574314726, 508211398, 2990122727, 3462663039, 1258115643,
                2862943783, 3952621480, 626721278, 354658674, 266436877, 2279900047, 4140177395,
                3611401140, 720994657, 2619255647, 755150209, 1673688098, 1267362287, 1821789133,
                510222616, 3931771335, 2041130289, 1196341210, 3372955715, 4045256105, 1539159220,
                2187027664, 1289255586, 2507529354, 246384965, 101778058, 1336141232, 2030836804,
                3555070947, 2540732193, 2281068220, 1082424123, 1850093489, 3769741173, 602125081,
                3757503918, 604811852, 1052381749, 189435693, 3642461764, 1573464316, 2296426935,
                2340526263, 1459850834, 2751113293, 4273708006, 3295958131, 3610793060, 2618547711,
                2886178254, 3168984730, 3896008389, 2910684641, 1920019587, 1667878611, 1691252955,
                3994472380, 2977338229, 2576984626, 1351501113, 3282383656, 1895943533, 3499135774,
                1923355202, 960512068, 2164140475, 1409823362, 90738535, 863701612, 2347007954,
                748064492, 191656587, 2411360951, 895287351, 3599283834, 3869423593, 996172278,
                1343958987, 4204232129, 862186651, 4240883199, 3892297078, 3426320726, 3826202456,
                1691966729, 2680477006, 1151773552, 3420034107, 478329790, 2776338319, 85306325,
                301696000, 4020575783, 1047443936, 2434816967, 844360331, 1358522767, 3451833642,
                277400701, 3790214849, 1600773312, 1374401216, 3587961434, 2218115041, 554687844,
                1455373089, 2415557558, 4185944221, 3644298685, 813130403, 1803175896, 2141326869,
                1993778480, 3229151677, 4022953349, 1250408313, 726142251, 4052078854, 1572753212,
                3088327523, 734957233, 4140608595, 799532378, 3130800248, 3179102660, 1290963726,
                3671626909, 2258829788, 1103104173, 2115377976, 2247341092, 1301956403, 1833471854,
                3662831447, 1344786344, 2540851541, 554976441, 3985164853, 1538266468, 2085479071,
                3369085596, 2283036863, 1880236792, 3210743188, 1521915907, 3358852380, 3074581226,
                1752478027, 714306799, 3302922277, 2597012016, 4130751078, 4214555128, 2628587553,
                1531096623, 199872584, 955170151, 669657590, 1894747756, 1734152212, 1353348674,
                2319549030, 3289364904, 648833538, 1850063548, 2741510265, 878914348, 1757164095,
                1912901164, 97276445, 1411832265, 838060298, 1610234873, 2723117095, 2609845475,
                2259244006, 1261890709, 2844142420, 1147885155, 3369135375, 1613476195, 3417049767,
                2537355294, 2053515427, 1399515658, 145763359, 2482971113, 991709643, 2138676150,
                1818872095, 1302171429, 1568090509, 3275531750, 1497380322, 945407229, 1822760862,
                4228040908, 1940517075, 230246089, 3963321737, 1138094364, 3400867993, 2181433825,
                3305102925, 511506388, 3528785436, 2879653029, 1926046085, 4143670679, 1150191731,
                285291427, 2685918049, 312767991, 4231911307, 1880157802, 2096745103, 590684735,
                2432966875, 2116020629, 630495259, 2253830476, 1313727939, 2791912760, 2351981765,
                3251513736, 2599152303, 2660227829, 124307715, 3135200655, 2482790133, 2271101300,
                1989104610, 3073191272, 2152082822, 1971138214, 1045327, 659102103, 2885552100,
                2565948175, 777943450, 2675195962, 348776090, 2995731289, 3758589532, 4025556286,
                257655013, 1730311656, 3698180322, 2241973994, 568561445, 1188334933, 1946887145,
                859125395, 3482471605, 550147837, 2058651912, 405932042, 3893823580, 1614629224,
                3412449577, 651241210, 3061461973, 574810638, 71361216, 4020596156, 2396933510,
                2356436008, 1248054342, 200369296, 3712728011, 4011870981, 4266142254, 2720800691,
                4069057194, 2501639775, 2484471739, 434977093, 797544023, 2570613282, 3886296071,
                1015700927, 4290596355, 859758311, 1174682680, 1562063833, 1324565576, 3332475453,
                4073935411, 2176440226, 53930109, 1686994234, 3678627525, 3373660623, 747493144,
                535648778, 3674317346, 1305675282, 1150814201, 2803793911, 2512646071, 771940597,
                3647355999, 3368179321, 4058511426, 1217012830, 1798535844, 1737906025, 3999269518,
                3424818174, 2089527288, 2639547497, 695593140, 663988481, 2419596334, 3462868145,
                3475802818, 1753477635, 2527218844, 3145557245, 3911980182, 1533706830, 2097434290,
                183240521, 3788929990, 1779682324, 3724458093, 3073497049, 3465759597, 1474943606,
                1573286105, 2475506690, 3461534603, 4152775580, 3631550490, 1699689806, 3829642010,
                1282316060, 2662021448, 472675346, 669363918, 2371875811, 1146052026, 1118224828,
                2861361748, 2015009562, 2878512978, 2442465428, 3219237043, 83434832, 3214067809,
                3404145170, 871844412, 2343292833, 2897770929, 2293007334, 513785118, 1366807188,
                169985021, 1530708725, 463131517, 1546654520, 1088914309, 44472394, 3008593345,
                2694951514, 2232781270, 436583961, 2935635715, 231976418, 741587681, 3448976579,
                236186582, 4252390528, 472879255, 3229739022, 538200076, 1762392842, 1710301339,
                56783367, 1961703833, 1674101533, 3944799467, 1107734217, 426021150, 450787910,
                1135363928, 1422694911, 793598682, 3381976482, 3932766847, 1292864939, 1678995521,
                2190978815, 2431912766, 911135553, 2831351577, 325868757, 802420541, 3983523312,
                2559890678, 3857026632, 1885246049, 3146727643, 2765128037, 1589823584, 3065411923,
                872021375, 3311812203, 881521209, 747137786, 1000063898, 4179502904, 886971834,
                4080397638, 3665528562, 2249307047, 2450795045, 1536473676, 850174262, 3788478504,
                150976104, 200295633, 2153651630, 2249578122, 3985317910, 1064906261, 1022848907,
                4220566724, 3216656807, 870116043, 3758680505, 3705749884, 1139091108, 464338309,
                180190377, 3552869299, 152240175, 3980504246, 4271460058, 3106014727, 2149379356,
                1183751575, 1040186257, 3494088390, 3752192162, 2582668840, 2597589280, 4007048334,
                1778752844, 99620680, 2641234020, 3386178446, 506319377, 3103448882, 1147167957,
                377320373, 2497010457, 1000662354, 2868328072, 922615819, 3970174196, 1461002909,
                3753696352, 593319197, 1532590741, 1875289108, 138731777, 499151617, 4032772524,
                3122220215, 851080138, 262060487, 2672031422, 1097448973, 3189786243, 1797858651,
                4244888125, 3819604663, 4081313171, 1832908389, 2377912868, 1847228618, 3104197710,
                1112047092, 899391336, 25843412, 3238157180, 927329896, 3835265149, 4131266143,
                3837840238, 4065666327, 2386113761, 1064968537, 2141571934, 4050080197, 989947624,
                3228918065, 442069281, 1556500487, 308551397, 4271798672, 1012927931, 1974219749,
                1471451147, 1122581592, 2557944616, 2776424641, 1726474870, 724419567, 2407585803,
                399430939, 3202481237, 853574375, 4169880447, 2035965381, 3159142693, 4087427281,
                4204744473, 2474028992, 3798061448, 3191976206, 3120499674, 3479294815, 1733377752,
                3657201267, 1480888860, 2961598821, 411586368, 865110282, 2341972482, 2344688435,
                2421214281, 1570048415, 2896452877, 1277537301, 2283577309, 751577431, 449046766,
                2378532630, 2595133499, 1063829692, 4188088082, 461333493, 1908087872, 2658523609,
                3569418974, 1070871225, 2357598817, 4292134786, 3476191658, 2805937374, 403338560,
                1212974003, 924302178, 625202418, 1459471363, 655272954, 545977887, 3925403669,
                3905429650, 202344993, 1022243223, 3519555225, 3995996715, 3495955340, 1531262614,
                805883967, 552365643, 824579115, 352329222, 2214775478, 1141873437, 4176338150,
                2431351884, 3821463016, 2241018444, 1830341716, 4281293374, 2632577683, 104553534,
                4228525818, 81311374, 1416321600, 868978934, 1556952824, 2506428984, 1605875665,
                1028001984, 2071100053, 883637341, 3497247423, 2859438818, 2035817804, 1655619706,
                2876228696, 903008988, 45752216, 3179847931, 1654196760, 4191521402, 68775206,
                2067177360, 1755767049, 3568557060, 4239419860, 3514957631, 3471866719, 311987081,
                403749913, 1261293110, 446382351, 1483679335, 2692556303, 146604582, 865795316,
                1833151165, 870688614, 2467816272, 2449912450, 3430026814, 3055553592, 2460877343,
                4117618048, 2400028590, 1902522093, 1090459846, 1037099175, 3719648076, 3190107914,
                2683135016, 1231028497, 4027483771, 924307969, 801053376, 954497527, 3347069242,
                886000463, 453530242, 972468416, 3035618670, 1594272021, 2700569422, 3793393799,
                1518016174, 2625828448, 1984364244, 2136657614, 3775705358, 676668216, 4036059109,
                3871682951, 1295429007, 290889627, 4110067154, 3565163083, 189319471, 2176690992,
                1368068628, 2861883430, 297404302, 1555651386, 4283682929, 2078440612, 1530250824,
                1007971128, 3074660650, 2724633898, 3129535048, 375590183, 3617921628, 3123163094,
                2604938584, 3091482218, 1578248319, 1804580725, 3030194226, 2158090275, 2223882595,
                2836244064, 1162211541, 4144942976, 3721042806, 1647757766, 1447025305, 1118891857,
                1563361770, 2309821167, 2387329512, 855463165, 769472501, 1489521344, 3369561939,
                2274906295, 2125752596, 1787159736, 199924260, 1780938880, 3649141711, 2340757833,
                699166103, 1746203973, 818394345, 1125628807, 2542356884, 4150623740, 1888868286,
                3745774934, 2128521740, 1918735504, 4064631087, 3564585770, 723018111, 207533877,
                1133081391, 3880643558, 3976896917, 1841086146, 2888834682, 1737374656, 1703611383,
                2012913400, 694766250, 3861321783, 2516192867, 3761835775, 3343643163, 590603614,
                1385290112, 2700600120, 207214751, 2371677819, 1210343671, 1728112455, 3720216384,
                3903650715, 3561837883, 3177305787, 2355775836, 3068608053, 1887582056, 4190357576,
                3910654511, 88819933, 2306809855, 1332041550, 1050789271, 3469446146, 2488469708,
                1416544857, 1425028521, 2747872322, 3129490163, 2564654546, 1587932947, 4261106204,
                1620978021, 2257130639, 2819418418, 52714980, 3418522356, 40167526, 4134923373,
                2539755532, 3064981812, 3387538608, 1012034832, 4241330628, 2329203924, 1099862144,
                292732436, 2017940373, 2397577521, 1582076519, 2960516164, 2006032264, 858932757,
                1391187597, 1373080359, 1172877124, 4241912676, 4134947311, 2367655641, 2375764648,
                2393945667, 1825712583, 1906250637, 502204827, 1233539319, 4013594888, 1959712448,
                2552663179, 4227809025, 486479310, 1975104978, 2896563986, 551237600, 1194609747,
                3075900028, 3061335793, 2728762768, 2955419238, 3589869325, 1888973202, 852008308,
                1917501497, 1625287585, 298893075, 2076272664, 1843055430, 263190501, 4148349679,
                905113736, 57762247, 2231089523, 2125301642, 807837564, 2834619161, 3845495969,
                591906810, 1100346851, 699291254, 1715817360, 2427638743, 3840867316, 3932350493,
                3412282614, 3694900426, 2807704524, 1066636475, 3438115659, 3355131770, 3341962062,
                3262708171, 1232960254, 1869251006, 3525364421, 1547705609, 1528968807, 3767707767,
                3237184893, 1556181875, 1960589866, 2668826245, 197638116, 3510004367, 1498061377,
                414050101, 1868279989, 273436188, 2937861546, 225967853, 4178355034, 1653778860,
                302857263, 4291922353, 3060239340, 1653754556, 2992964514, 235006151, 638877560,
                3373103168, 2014692868, 3132811322, 2993012887, 2015301852, 4036277177, 3788322771,
                1042860784, 2268227965, 25586980, 2307365481, 172888216, 4196345828, 579281005,
                618139269, 4217291893, 2306625190, 2693052733, 2154636683, 2948735822, 2120515448,
                1279430119, 726555353, 1213908688, 803633496, 2302786543, 3417413164, 3876465323,
                1796216538, 1069420612, 1,
            ],
            &[
                1988498380, 3050132581, 84001963, 3445692001, 2734783387, 1774219496, 2162032114,
                770345120, 3457703796, 3559428633, 4257360364, 1090466591, 3567817053, 2497380424,
                3534691541, 1279435419, 2742018051, 2205075879, 641106, 1754923528, 58973331,
                1715000559, 1117715270, 2272741525, 2115935795, 1483835360, 1296235, 1796957756,
                3968651424, 152068196, 176938861, 570875261, 3336099773, 1193842175, 3048757774,
                764666488, 3843941623, 1548464729, 1897867882, 2878929765, 448571520, 2406065734,
                3568376411, 108079736, 153179622, 376615879, 462260105, 973865240, 3413391101,
                2811718165, 3572533591, 3909460695, 3134008033, 3897396582, 1040616570, 2998174467,
                4068999806, 2523162074, 948788147, 2600716643, 3959424266, 2966714, 526886335,
                3296693425, 2243375988, 4143935802, 1111766991, 1144066805, 2311007495, 1010976381,
                845073483, 1135483459, 3990880342, 294797346, 2679966602, 2533930988, 1664564718,
                268281267, 2092673357, 469524764, 3945653712, 326073803, 2694037849, 3507600917,
                3290201609, 121045908, 22654279, 1505718612, 551101589, 2556674091, 3163892929,
                1910818775, 3418844366, 3372741206, 130020156, 715267628, 4274925122, 1048026555,
                2835427841, 3505581892, 1602295761, 2414351668, 1553499591, 4229635398, 2519192505,
                2021787900, 2301738189, 2691817702, 5305850, 1565221152, 3538706617, 3057801765,
                2874943612, 3131932103, 2612726193, 1166707551, 2820888127, 3160538692, 3124232750,
                481384322, 2617755783, 3630694751, 1672329146, 3497041986, 441500257, 1563794131,
                666530710, 1149258814, 4274365529, 169180791, 4187510295, 2714548495, 3562799169,
                2904591043, 1774457729, 800521106, 1411048330, 2663300606, 22655328, 3774883767,
                3819965706, 3800295936, 3668492475, 1379825015, 4213938165, 1132023495, 3760304231,
                2917225913, 189390673, 1938798483, 3140766517, 2153396970, 1928404388, 2785977327,
                934591575, 2405323840, 3637359453, 981340132, 242310679, 981811654, 2288564752,
                2987925303, 4031514738, 197635692, 2859303437, 2533609681, 1151769485, 2644644277,
                2635940433, 3366453887, 4277743333, 929550085, 40133408, 1833321431, 2429701519,
                1464545187, 3066929948, 3904082769, 373116082, 2430829492, 2571513045, 3885018135,
                603068030, 1172828581, 4065558289, 1163895893, 2468059427, 1548489900, 1717402470,
                4016751470, 1013738008, 1034029588, 3482329597, 3435207029, 1673410325, 397717038,
                1500823297, 1911172810, 1420629560, 3358784452, 1312197637, 1152173034, 367120884,
                384630941, 3440282377, 2522765605, 1597847376, 2683717257, 2561199311, 639683785,
                3817861808, 463544224, 3991704969, 3376721583, 105154089, 1533594425, 335823085,
                1107739913, 1452695631, 954081147, 1472744072, 109401385, 3210541127, 1847806577,
                327707567, 2422910059, 2867854042, 1286261864, 2777291397, 2491134001, 1866376440,
                1442628329, 1148774257, 327348168, 796722022, 1651402005, 2839518531, 707220227,
                442580375, 614584592, 4054371638, 313021875, 3191805300, 2207878775, 3933190445,
                2035546077, 381129617, 3161098198, 1019615010, 2743759521, 1458405016, 1891243747,
                3502084250, 951344904, 2669441803, 966435550, 1450947158, 2445618755, 2629179958,
                1786188217, 1157343233, 512400759, 3058846955, 1691540553, 3902487730, 53457416,
                827127510, 109080803, 2065162700, 2595989450, 514516885, 3571421189, 1946474067,
                3695201586, 529285628, 2120794437, 1831163308, 1518439076, 3361874260, 3805558145,
                2288973775, 2352901588, 4206307376, 1343461937, 1115914255, 241429811, 2386351727,
                3283851422, 1570726296, 4171557460, 2197857248, 3493510408, 2254067927, 3407035296,
                1925479341, 3186474620, 953208782, 715061374, 1181448968, 1220358590, 1370257748,
                2925654278, 3323438388, 1322650109, 3766704524, 3870430557, 3257441173, 2439781482,
                1554488089, 800150735, 1514175574, 3153400949, 1583649143, 1280421056, 3882604400,
                2181270798, 2782475677, 3148486479, 4071326639, 1764147111, 3505719068, 1862656169,
                1261162987, 2211270974, 3217710591, 2927566184, 4232715549, 3582658271, 1363726747,
                3233373581, 3022128605, 3193686951, 1851291940, 2618042857, 2848579530, 4293396464,
                1928252986, 528145280, 300907511, 3891802439, 1267856769, 1165928777, 4227625628,
                540012700, 469250948, 966533455, 2875072197, 2230103081, 2000106078, 3086794985,
                4244235827, 3081744548, 3713073740, 2925851679, 2315339278, 2558156736, 3723155058,
                3227292432, 2941681952, 4041413976, 2097513703, 3042683335, 3624088138, 3936977773,
                2820887559, 1664662915, 2334141648, 4092839529, 274159708, 4055649255, 3512716978,
                1365039076, 3916570667, 2158939813, 403036637, 942532489, 378445989, 2167306547,
                753402418, 1193358264, 3877024670, 3743152347, 116435136, 1948333248, 569098908,
                2922999784, 917671206, 2718173867, 1010784137, 1804409345, 2242631895, 3989814639,
                2044343096, 723486672, 1841507274, 2333301606, 4260854855, 2763867469, 2805327422,
                2351089720, 1719837442, 4008440919, 16200186, 1228294632, 3833322142, 151876299,
                3340352893, 647820547, 3228338641, 3940895065, 1697980005, 2505263582, 77077868,
                1311758352, 2346165371, 2652028800, 3480066477, 1481299332, 2948248752, 501377681,
                3276784059, 4102724530, 1207318829, 2947644680, 3069480791, 1116349810, 3395241135,
                3570300879, 3836110678, 23881082, 2523984619, 86893874, 2919930037, 3241130876,
                3697730978, 1459589531, 486161579, 3036213671, 2106273230, 391770200, 1135761788,
                3542580424, 2902564186, 4169447111, 1908429065, 498329772, 2010302804, 1930725702,
                1614128757, 1901201146, 2340750074, 2621544559, 1554979341, 2490973900, 3039157328,
                2525878574, 2064002895, 2981842962, 513591182, 48663763, 346106995, 1067873617,
                1664056855, 3497080122, 2640223678, 4006771320, 1595836468, 2008498009, 1036368219,
                238997308, 168075897, 876079826, 2934854956, 1075263443, 3803042525, 2802898866,
                2169905202, 3377165843, 2465797619, 1978983742, 2322310751, 1590628498, 1459551643,
                4156365433, 3054380889, 1819890111, 2928185712, 2553214234, 3066671630, 3394771139,
                1734126526, 247246953, 3320484300, 579355057, 1177404814, 1327413352, 2035170753,
                1052379386, 3339678481, 2430828601, 3360847369, 2961791848, 484983472, 3181472945,
                3105431626, 1283580906, 3703197182, 1961222326, 3649286491, 2664156595, 2335129028,
                230491131, 468504878, 3710487036, 3159611165, 3544126878, 1088644958, 2961497435,
                2785759884, 1537524580, 563225344, 2114093362, 4212602497, 1169631938, 2088081811,
                4006629680, 3089709789, 3749609771, 1969435408, 1786420402, 3870446123, 2169555554,
                1571013574, 506991779, 2174983408, 2376333115, 1813451470, 2875689985, 2056697043,
                2022446139, 828430986, 710475734, 785980495, 505758805, 3139780897, 3708680832,
                3390307357, 2434318195, 330093210, 3019701899, 3546042185, 202048370, 3017694172,
                3813711930, 1950710894, 2336832114, 3123649938, 3799964456, 1278675670, 1776925346,
                23381263, 909581672, 3084101661, 1592521095, 3095643203, 1245783006, 917301336,
                1175072489, 1493603974, 537178477, 3098462691, 848961674, 4083634813, 485866548,
                2460787176, 1957075662, 1653349530, 193311723, 1510554197, 615759127, 3054909658,
                3810118423, 3275067767, 2822189856, 1822027915, 641453111, 3902949794, 1707895715,
                187255999, 1547540130, 3996925138, 3744594623, 279929032, 2815355330, 1197018567,
                334914949, 104288985, 152451615, 2257137946, 495821725, 3891425071, 2698902656,
                4248123041, 3994796663, 2283493355, 1792145295, 771358160, 57983054, 2699162282,
                3252719646, 901108453, 21411013, 1214186627, 3971974103, 4284646962, 505661368,
                2014789373, 709655680, 4019528811, 3456428712, 3896941342, 25228952, 3267679573,
                2554048052, 1140488725, 796840032, 1008803984, 1769445882, 450164846, 183418978,
                1557823191, 2205206958, 2186287277, 4041341207, 2277585274, 2647704834, 3299210809,
                465486816, 81165601, 3688958209, 4134919427, 308497409, 1670228519, 1054621084,
                3997139209, 642331675, 877436795, 3750152836, 2099953927, 2407318768, 4064392686,
                3499776748, 2890558934, 4257002037, 409497686, 1871363314, 3488166608, 368834184,
                683374402, 3315975032, 3919319927, 1636872711, 3746724350, 411713899, 3127168268,
                1541472093, 481068370, 3914726958, 3809187727, 1019234471, 4257529799, 1795024406,
                2169201644, 180192691, 3146544995, 3086567728, 1371853848, 3442647104, 1956649571,
                3221872492, 2599010979, 3825880037, 129532942, 1962882180, 2981643769, 501519665,
                1104150124, 3577388513, 530338682, 2379351921, 476796974, 2079075205, 523122306,
                4175790511, 1769173929, 3684943051, 203952644, 2367960727, 2956929713, 724249999,
                3868724734, 3128867062, 788369620, 183457300, 4030548412, 320471199, 818557389,
                3673114423, 3427092352, 965641427, 4165737446, 546271097, 3179039741, 1968478116,
                233505213, 3523513681, 3185397073, 1639252860, 192368536, 2476919576, 1286359266,
                3468793964, 3927932569, 1554017778, 381977140, 2630912557, 3248408028, 1380148387,
                434027229, 3679247941, 2320186711, 4049616334, 1306803801, 3657216807, 4072237788,
                2409653033, 16652557, 777239076, 3435314631, 953899982, 375200832, 3240441496,
                1403201300, 3463532889, 2152357282, 1492290956, 1756116611, 2979347831, 157726282,
                597994889, 3571510881, 4022595441, 3689069225, 3371053456, 1105664287, 381184864,
                3760869170, 2128986335, 4138730626, 2108903255, 3330167716, 1193420433, 4081108869,
                2371248791, 2008259868, 329286806, 834934063, 1587339743, 3835392552, 3027794970,
                2946227510, 2759445311, 4153403869, 3246082301, 2169502676, 4274409702, 1618245891,
                3538641406, 2440237498, 291928949, 1309678695, 2248858018, 1259269551, 3062553916,
                2375747923, 929738114, 3593316299, 395934754, 1240422334, 403599738, 3596058407,
                4199195184, 708535732, 1045565478, 2985960024, 2935035441, 1902361158, 1360356647,
                655818324, 1464367881, 1402852252, 1605910196, 1553177831, 2270937291, 3867336542,
                1242299751, 4201495317, 1894193944, 2952284338, 2983597634, 3331327699, 2688007694,
                1534358324, 151501193, 874435351, 113820939, 3053243228, 2461547215, 3493411866,
                2931307581, 243458129, 2419713971, 2259098050, 4153522826, 1347753364, 789286836,
                3723853308, 282228699, 31083181, 212832201, 3992535406, 3841973318, 3150180785,
                966530634, 1983757001, 4224102508, 4103842551, 2315916292, 797697662, 915301841,
                727577536, 3413485655, 917582931, 843507358, 1529131982, 1843003612, 3002449886,
                346610535, 991891575, 2565267970, 3912371508, 2710618386, 2330075864, 2735484155,
                2546043717, 3241769509, 2210455214, 4169254026, 1482724431, 674379398, 565771066,
                3142137141, 515638418, 939683105, 1345730468, 2404207571, 249108973, 1883806778,
                2156914196, 1564711040, 3370156804, 1857590348, 1147780810, 3733908955, 2181248732,
                1904993207, 3694175594, 619779923, 3491824168, 3612713452, 1216174279, 663457690,
                4014509322, 2569761593, 14109664, 1828397087, 2936522368, 4158885908, 657033012,
                3173212007, 472151655, 684251460, 4075235611, 4224354174, 1004777987, 505536516,
                1454022092, 824505586, 3067613896, 2235424889, 3665322087, 3481517352, 2363451123,
                2771040650, 3235122422, 1154036889, 969497501, 2563704447, 3797108, 1395020021,
                2762840789, 1908946824, 3014468569, 925225402, 1138335619, 3624023401, 14380823,
                2839985590, 1786726385, 2046596657, 862236402, 214661254, 79111383, 1583211853,
                1641485501, 2710635102, 4088715922, 3860998541, 1323605849, 3597942622, 1491675000,
                1599602967, 3388494990, 3354632479, 2528582795, 215618636, 394082738, 1141528681,
                1784788922, 1221028471, 3234711669, 904205099, 1676230442, 3127792899, 3994795553,
                2452526892, 2165805680, 1335373003, 192721187, 4240993835, 3133423197, 1689272558,
                3673814847, 1422539041, 3736049673, 1833170900, 282944559, 2338828666, 2779222702,
                3327509347, 103394172, 3158363803, 1906876457, 2941521396, 4107834947, 3417951529,
                880661309, 2072508295, 589009441, 1335393037, 4277398556, 2493403024, 3409655003,
                3109850219, 1180552996, 2381399690, 2298638016, 3501746890, 846617313, 2905524779,
                2707401285, 2041915730, 2296396459, 1041902038, 889847207, 1989421094, 1389388870,
                3827587250, 1783862700, 3828138938, 1868614698, 4248902541, 3581264817, 3916285777,
                1776264454, 2214767964, 2937276417, 1736659895, 1395637227, 280854206, 226975266,
                3550562380, 1121092319, 159004679, 3748222278, 1260252989, 1422903228, 3336410666,
                194417341, 2723594163, 2281242077, 1784282179, 1034680840, 1402111826, 335654645,
                294940873, 2853511062, 378984905, 2532157416, 2195182123, 3873081897, 1625154299,
                260395831, 3540310196, 4273320806, 2622305394, 2711543735, 200100618, 3414809217,
                2926348222, 1329786033, 4245332557, 3574371092, 2777917577, 321179615, 3642895588,
                1496048120, 797710555, 3671936109, 2438718323, 45015662, 2137354414, 874208938,
                3450439142, 1916685905, 1662667234, 2856738964, 3829688032, 3404462996, 2848035045,
                2061762938, 1260861712, 3010572066, 3394836279, 2342878342, 1271875691, 4111464444,
                2126598368, 2380694046, 2430271490, 1145499017, 3787409979, 1555528697, 3376084869,
                642452482, 2589187231, 1081315770, 2087941360, 3364823763, 3805619618, 486395332,
                908395706, 2499268457, 2420556587, 474512813, 2481646657, 3492741661, 1968018988,
                1074530387, 2014914730, 2803826225, 3220982875, 1438277839, 2775829138, 1528403642,
                3794191286, 2608342366, 410785526, 2637600256, 3490750019, 1440381245, 814635701,
                2260916755, 2650730282, 415890751, 2524080685, 3474570208, 2446217936, 2397550701,
                231181743, 736834280, 1383997656, 1496783958, 623278112, 1645711091, 2659144562,
                2936379758, 424018844, 1549465529, 2669736270, 1664977313, 1523334854, 193915346,
                917134660, 1861003559, 2211424692, 3594457673, 521847126, 2663400187, 3341032570,
                1640978768, 3374727890, 2984430165, 3295971473, 3727310438, 4148801904, 2931771022,
                3471915299, 3774018978, 243266066, 719450229, 786371556, 1967721517, 3662692002,
                2660462613, 3406551440, 3689369626, 4170908863, 927580754, 1492537107, 1444056133,
                934562830, 964303678, 1533941876, 4122966823, 3705199737, 1112924448, 95199848,
                343531614, 594658489, 808416147, 2905432520, 3584653211, 1387698320, 3110254075,
                179755886, 2585492770, 826193502, 633023598, 1166009098, 1290016012, 672935203,
                442560997, 2496163987, 4194310358, 522918013, 4222433924, 1620670288, 1584642952,
                1110116518, 2050444989, 3738181405, 2449666200, 1322361471, 3346873860, 1704204055,
                2765918523, 1681401174, 1734783149, 2990922980, 2845873797, 2655480068, 1134013632,
                627992748, 2305459149, 890878648, 3702690433, 2308583593, 1647897272, 3079544696,
                2470471677, 4040208261, 2073585273, 1793034905, 1713771355, 2220715251, 2553773388,
                1442482611, 3113497415, 2768408881, 1270025121, 1399831313, 1630862433, 3377364946,
                1442504714, 2789927137, 3191151633, 2578873407, 208337033, 3096561372, 3943415949,
                3118056636, 1664092654, 533371474, 1132049460, 1378502069, 1205939688, 2646775436,
                873517579, 3647947118, 4249353240, 1234899426, 3562671303, 1028908207, 3806236229,
                2688126461, 2379248861, 4273316716, 1028554767, 960050373, 34458263, 2497415615,
                2000699114, 1654490516, 3970420809, 430138864, 2839090700, 2992085491, 2048751357,
                747829112, 2102051019, 2747342438, 3939874657, 204736053, 132477025, 2895769009,
                4049016784, 4006488678, 3010059929, 3869487365, 820665998, 3637576575, 1400083196,
                3176270933, 1580718861, 1862589245, 3687231820, 2811111046, 288642712, 2708675068,
                3659920550, 1043267703, 2675211709, 2471783225, 3908671780, 1796097076, 3884725302,
                2618455344, 2727437605, 3198512809, 77833978, 4002905580, 2475905855, 4285041054,
                1379496519, 2810710199, 3524329171, 2422823286, 3888601537, 1921960588, 4141779429,
                3945205304, 2680621131, 4186120628, 1952951538, 2875169441, 3303243339, 574383361,
                2010030917, 3924461786, 1497240891, 3972138842, 3082719894, 700821923, 1225799274,
                39941891, 1579154501, 2895091775, 2026419054, 3180814760, 1239600240, 3443816247,
                4103641786, 1778116375, 1356356349, 3003002432, 2464906412, 3106084532, 620250446,
                2199567717, 4285388064, 1443224417, 1183702872, 2361871288, 2889920918, 151923059,
                3665604400, 902272748, 3673929087, 777413599, 2880183228, 3116820884, 12649513,
                2151951398, 2517689255, 2603024997, 1540902312, 413276528, 463295145, 1270795006,
                3197387059, 1235198896, 1591251569, 1536841283, 183104831, 1099570929, 4157586543,
                4245916264, 1187513801, 2725120513, 2263045835, 3616676335, 1441932591, 859970322,
                1785738074, 2632201495, 3074325275, 3739260875, 3210655551, 3115242275, 2776972168,
                1857654859, 3388697322, 816121986, 4034608581, 3645370625, 3901309336, 3655082618,
                694485749, 2189293828, 4003306605, 2104718709, 2248125819, 1242466666, 3425122185,
                2526773969, 1997783773, 3366295660, 3638946293, 236310604, 3074020533, 1544508523,
                2720105666, 4275312048, 2125511485, 2928099726, 3115904574, 1659470574, 2302631502,
                2782437446, 3351759933, 3997936888, 2966997408, 3158966556, 2819300721, 1647111112,
                3003598038, 2858959466, 2179510155, 2584211049, 2202151208, 3064305858, 898246753,
                1503685985, 3011437597, 3645693595, 2240988222, 3440343576, 4238868402, 3504605984,
                693969911, 37266154, 53849195, 240646457, 1676768678, 3078948456, 353299888,
                3398599422, 1225876435, 3474721352, 2919885255, 1645273187, 1329251097, 63136291,
                3744051145, 3578975497, 743346836, 2992151082, 2097992510, 2029339826, 1064760489,
                4287623009, 690583934, 2137261889, 2523731672, 2989051237, 3080671706, 891097198,
                705467787, 3974619780, 2507988307, 3580098689, 2900468355, 2065761093, 1093422169,
                3699292714, 3679511724, 1376356943, 190833907, 1757023356, 2392875706, 1341718208,
                3312756053, 1335629721, 3842952633, 1585023162, 3483717351, 1166983906, 3797224124,
                2704194560, 3663191348, 1943345575, 2900370013, 98538425, 2337184175, 665720157,
                3985681094, 1514818198,
            ],
        );
        // bits != 0 and Barrett condition in limbs_div_mod_unbalanced
        test_only_verify(&[10; 19901], &[10; 100], &[123; 20000], &[123; 100]);
        // limbs_div_mod_balanced, q_len >= MU_DIV_QR_THRESHOLD
        test(
            &[10; 2283],
            &[10; 2648],
            &[
                3352941598, 3865259069, 4100372468, 1153884783, 3551739464, 59160376, 542012042,
                2236793144, 552149400, 3785998871, 2245653521, 2409739829, 2573999247, 3383580072,
                3537839900, 1800846733, 3935526498, 361012784, 2531357419, 3553113631, 2410557200,
                583408141, 3768359305, 3429382207, 653740782, 2770578614, 547505820, 3799199419,
                579588554, 2311425149, 389629528, 1207262435, 2369107295, 3706674098, 3539705585,
                1291978910, 48205553, 3769782509, 116475615, 3232605021, 2340006404, 3412987383,
                1384309659, 2215239759, 1942462745, 2588181253, 2684650591, 1257320673, 4277802941,
                958808384, 606057277, 3147308225, 770499239, 1471078323, 1270490723, 1467056681,
                1895212705, 2201929338, 2102169879, 3620413218, 635666763, 569457881, 3894059482,
                2680054308, 3602399856, 4134893864, 4290529946, 2930760993, 4047561930, 2289637023,
                3542709032, 192324913, 2131616688, 1889179343, 2830556125, 2071197973, 2105996730,
                949597522, 897750365, 70094343, 3723815252, 2416305558, 1343266059, 3370097189,
                806498684, 206432944, 3041278862, 1744541256, 224141755, 3110999564, 3362772841,
                2421877055, 1717381634, 348336738, 2637922202, 2392853940, 3292333937, 2201713794,
                2114914809, 1121818844, 1870800821, 3147561780, 3324016521, 1200997507, 1342809995,
                850923048, 3583522625, 2731648896, 2594584541, 3890526868, 2599265209, 2411009154,
                1774254374, 532444790, 2622092896, 3509086892, 2563255478, 3507174912, 3134562215,
                3573536461, 3803846265, 778670720, 2230332276, 1697423243, 85700226, 969711479,
                3505043587, 3297200562, 3609467049, 3662693589, 1818999322, 4028100981, 4171049232,
                2406321492, 2679681856, 857327639, 3423532043, 1257720770, 3090300222, 188156280,
                3651878387, 2836134823, 3082809968, 3017209674, 2994744466, 2209427910, 2161073841,
                2518334235, 2747949904, 1514181761, 2963843535, 270222615, 4096734680, 2099374675,
                1696553128, 1926409097, 3454305722, 1118607235, 2127714518, 4097359941, 1136116769,
                1071932743, 2900390949, 442288212, 3866263192, 717449078, 909539744, 3089568997,
                1780473113, 4109927051, 2885887984, 2499567691, 2657115664, 1600427383, 3916185142,
                1159449752, 3516682650, 2230663677, 3808047887, 3311279083, 1113070132, 2694645626,
                2405191541, 102053937, 1253521286, 4264380542, 395088166, 4244788789, 737121534,
                1533918350, 1421656021, 1823064241, 4285578303, 1145239996, 1373063198, 1447479413,
                3110566560, 2228989155, 2568955150, 3091730457, 2167077931, 1000704813, 1365724058,
                1622364628, 2600037337, 497840569, 1286515240, 1963466706, 3435274784, 1444436503,
                3072121470, 3528252416, 3499581434, 1487555088, 2939147354, 1884571487, 568110034,
                1867883974, 3613945741, 2941248381, 3062867723, 1051501799, 1341244124, 2776237803,
                1573493621, 4261946497, 1174438344, 3969798321, 3102138455, 727003024, 2176697125,
                410088182, 1687162110, 334286567, 476511714, 1268317677, 1366540862, 971968086,
                2138545348, 314951050, 2549414696, 565905760, 752921380, 752912976, 919710852,
                1747578544, 637407331, 895745615, 3928514299, 236178919, 2099477779, 2964313723,
                3735673656, 2936293548, 1281316406, 2181151134, 3376904737, 3557977206, 1928051613,
                2852078038, 1824332746, 512024805, 1603493621, 2435305148, 2144349581, 1331930562,
                3278175766, 1538591372, 351100581, 3662257053, 3132051881, 4014279503, 3747909981,
                829713073, 210609157, 3696228065, 1740580647, 4134052799, 755637464, 795323419,
                2849194170, 821499939, 3879325297, 3763047250, 943359378, 411631726, 4062170203,
                268447990, 41972768, 2368084446, 2195089954, 485925597, 3124084755, 3180106404,
                4183765083, 1541224878, 675908427, 2052803359, 249079602, 3524972440, 2170545402,
                3446583891, 3710920834, 1942843298, 1218812510, 1382515762, 2725872755, 999055630,
                3177157328, 3721528640, 1836334439, 2344692655, 834120671, 3024104186, 1076667078,
                1133950510, 4188852844, 580162168, 1918097294, 1770073085, 590997459, 1210599652,
                1632475170, 3051890039, 42749444, 4269218580, 2222311225, 883198162, 1888411854,
                4183890545, 3246570683, 195442368, 196037051, 974729437, 1342078148, 32826947,
                3572916171, 864015929, 295109535, 2224357476, 1361921758, 298048697, 726601358,
                2826594017, 554358481, 966095240, 1972650035, 2817068489, 1969200190, 2467562829,
                2081888672, 2831836860, 1790053370, 1806900511, 248405477, 4212079279, 2050637813,
                3530389869, 3211759308, 1819585111, 3529543975, 41959328, 1229293924, 2778327079,
                3410107750, 1442913286, 2637085780, 3883716744, 4045095498, 2205587602, 4281963295,
                2631929941, 3285243142, 1613783652, 2182382436, 285809098, 1288018550, 1703517393,
                2680782178, 4260228630, 2930513450, 1616109485, 773198330, 4287295895, 1236258458,
                461840545, 2803605868, 3156784273, 3166478490, 1801557871, 2904634333, 3502927223,
                3070532647, 2198772324, 381276809, 2943658000, 2148911850, 1426315320, 1005257343,
                4276366730, 2202788903, 2161973870, 3609320518, 1461876661, 3668805867, 2080797435,
                1225245034, 3735216484, 870533159, 3529202324, 358216445, 1990249735, 3407662275,
                1313139948, 1381815569, 1818671019, 1762902291, 1548317770, 2642568638, 3157152070,
                962148359, 3249314108, 3285001996, 234560851, 2533219266, 1450736514, 2328971594,
                2147646886, 2911182861, 289496119, 3820875108, 1613803218, 240307579, 428421238,
                1219773262, 1375112614, 268056704, 842341040, 408523626, 847433923, 107050208,
                86686181, 2890182805, 1583672238, 2043054348, 2975392387, 729830685, 2449742790,
                4196893844, 2272991634, 447829360, 904418846, 3769077942, 1428195213, 3927252138,
                4021669144, 2881630524, 323590000, 210792473, 194270793, 3020394847, 765483391,
                349124164, 2615178332, 3314188419, 3822943107, 2988433008, 908388966, 1922979134,
                982324796, 3165493043, 2849765788, 842972206, 3591780767, 1395976813, 3228082170,
                2792837035, 3191784579, 2660042933, 1748797889, 1321422746, 3145111502, 3141814433,
                3652370786, 591050983, 3494741231, 3350752369, 1421763191, 3132442705, 558545178,
                975892805, 341911030, 656356144, 2286165340, 450346669, 637140221, 89072045,
                402213236, 1975885020, 3285218084, 2193991887, 2011954846, 2606898818, 3436080580,
                2926281199, 55934162, 817769705, 287501970, 3676724976, 1175741578, 4073198053,
                2495889009, 3073551599, 3155339747, 3969770190, 299485369, 3168323564, 580294856,
                2875848326, 809536699, 656115601, 2114309196, 1654373062, 3712639373, 3130293194,
                2807928548, 2954498836, 240485275, 3113332823, 3086822109, 1702151749, 3175011934,
                4181496971, 836977696, 3745555232, 2371262786, 2867226506, 720581270, 3045708244,
                1733608256, 3465966605, 3677990793, 2314229597, 698448638, 2489820843, 1526372643,
                2027666288, 1707567327, 2734820117, 771109161, 2417603233, 2694932721, 452911264,
                661420216, 1631366353, 4011280330, 3480917150, 2392724203, 770895055, 605594002,
                3677652265, 1070596605, 1695550370, 1520192671, 3480373122, 3550693150, 1315349952,
                416034556, 3771261849, 4194856143, 2851623790, 2299561959, 1875357982, 3295047991,
                2579162284, 476437292, 2621344047, 1994816148, 3905959610, 71550537, 117252386,
                304043394, 1873648084, 4239350106, 3199297662, 3310636359, 2954431106, 792209675,
                3870777325, 1853576687, 3581538525, 433574806, 2860924556, 3390621376, 2368554871,
                627364129, 1574995609, 1142271456, 1569717699, 4094936125, 2944660699, 43018112,
                2512847729, 2019324938, 3901821844, 3420172849, 151080197, 4016039285, 592588830,
                3906756109, 4224187012, 301712264, 1658594148, 2249329290, 1292403150, 813304860,
                4088931985, 1585941827, 390195485, 969134553, 429346518, 568274453, 3605800519,
                1487806472, 2714928861, 1045313889, 2638728579, 388915952, 270137007, 3010641250,
                4034539301, 2350307082, 265782436, 2132362406, 3998149319, 2667174578, 3076526276,
                1383452424, 3003910302, 3125664737, 3778790933, 4217219395, 1379756451, 3479313901,
                2060882141, 2023484131, 1770391098, 1902931577, 1138972185, 1452977171, 2976115132,
                3054397980, 2628446996, 201510624, 1412377429, 3907225543, 2304879017, 2142288120,
                1086991753, 2232923429, 1479196079, 3572928742, 3543916016, 386405050, 719851631,
                1870310482, 2962941579, 1883689338, 2676428384, 325734318, 285783456, 733481369,
                2288445534, 2693091674, 2379843793, 205284521, 1884435247, 852671716, 2325353908,
                4124913230, 392937477, 327089835, 3062247560, 916672747, 4156917521, 3082343686,
                2693674622, 3446490976, 3436686617, 247823536, 1859601916, 1162033593, 1057243325,
                744353288, 3435250176, 1935338485, 3028907291, 3961675510, 303110937, 4007030239,
                3605372969, 103872478, 3052027611, 1081381736, 3561624671, 2918477489, 3971020070,
                363648285, 3183344665, 31806155, 232323427, 4017720528, 1954445749, 2050700022,
                4205157578, 512705308, 381960300, 1731331282, 83759392, 2828421050, 2274470436,
                494185741, 3400884913, 3811076252, 123814107, 2965005277, 1477118286, 3339701951,
                1091278307, 1116337920, 1418768144, 1581978167, 2613621202, 1223672049, 181842720,
                2767416127, 875394740, 1142663941, 1729589357, 3090510457, 2184462714, 2428219712,
                4214716589, 4247769652, 611414190, 1045261582, 3393575974, 171426311, 3441038236,
                3066029567, 1498812939, 1839959393, 2321762739, 3099316323, 67890600, 3996080557,
                3993720333, 62433539, 1468624962, 1788898782, 1972996857, 4174341914, 3280590419,
                2244731930, 3556666805, 691033915, 3208212556, 830813083, 1560342479, 1134321379,
                2813257340, 2482755860, 2646521539, 3584723926, 3446624641, 3625856671, 673792232,
                2939933598, 1991301800, 1276891074, 3316991229, 3394991590, 2609715024, 1018617151,
                1031310709, 1932593857, 4237137128, 901129393, 3082376671, 1433662587, 400269957,
                3727171113, 330909419, 736956423, 4168039731, 808990789, 3150079653, 239610305,
                1359468908, 3231418820, 1068230593, 1979002685, 2592886371, 640867886, 3044611728,
                3787517458, 1024767066, 3213575946, 2698388841, 347657989, 4221105184, 1779863053,
                1046341482, 1812302311, 3656596638, 1724800455, 3703046924, 751974902, 4122226429,
                3738981746, 3671275895, 502862348, 417110769, 1973326978, 3615811973, 638559911,
                1155883350, 2422515487, 2718728830, 1481097457, 1479175209, 824381311, 1858110581,
                2364677028, 2080382672, 1505406194, 3993956365, 2715420718, 271231652, 2941588080,
                1950700302, 3846220322, 1419598607, 62770719, 2939727949, 1569073417, 602595177,
                1245626305, 3359798055, 1703355349, 3690743168, 178363954, 2908127350, 3466799309,
                4163361670, 787973888, 4008520220, 774913405, 2342214829, 746086478, 3001029718,
                1878022140, 2782622440, 3392054168, 1257667320, 565538943, 94004702, 2025355884,
                2968981941, 4000193667, 4168608420, 1155851325, 4224702393, 556865462, 1461683187,
                3158342266, 1166073416, 1273699263, 2554565259, 2702271939, 492522911, 579919413,
                3885103462, 556735539, 3432964532, 698421864, 2225260692, 2545013724, 691191564,
                1289731157, 1780213562, 2296279347, 460468173, 3952053879, 1920067027, 3167597200,
                3699004523, 2153401532, 3210453855, 1125886564, 4225393243, 512562002, 2855351059,
                3052922695, 3345993204, 3607746483, 3548799028, 2875625551, 1900275389, 3331125610,
                224989674, 3527083381, 256805087, 2060275194, 3926180491, 2519363257, 3651109823,
                3366742327, 1975034105, 1369971546, 4291565104, 2283529341, 2975378004, 194061946,
                2811908685, 195122659, 30698277, 3264261714, 3143157243, 288763231, 2440056066,
                2038814389, 444224631, 2238280221, 1503289660, 1334078583, 3724601449, 3300355959,
                430546443, 4089192701, 57041070, 4196017516, 1508165596, 2889497246, 3745130267,
                2182795017, 3574952253, 2808300879, 1111081240, 2553888706, 2673754047, 2591543351,
                90021410, 2953439372, 3797444432, 556661921, 4131718258, 3617100594, 3934689382,
                332330933, 3005860472, 1591919565, 2055730929, 635280917, 4111376974, 1023831659,
                435448232, 2726078206, 77158690, 2153293015, 3369430400, 3630029124, 1133297771,
                4267564846, 263729482, 3205345537, 1981047493, 2365111109, 2389382724, 3463942123,
                1252789836, 1631188759, 3931403155, 1089070145, 343485369, 2482907957, 39564190,
                3278898721, 363035113, 1536288420, 170308081, 3629240119, 9963, 3045711510,
                2913470241, 4291636337, 1529754056, 262759009, 817271712, 1607080688, 737593827,
                786413904, 3615013534, 487306804, 531158814, 3769512541, 1916818391, 4225331905,
                2263017901, 3640159446, 3910329829, 3054168261, 781668891, 185410657, 1131242667,
                2313538067, 16617931, 3088923134, 2285596567, 97320018, 2296939715, 3108674784,
                3300398814, 3751582111, 881235571, 2889009763, 3491919944, 3263323399, 3347337487,
                2427854010, 2812041675, 3539673368, 198495814, 1164322846, 4048000025, 3739084371,
                3734085769, 3235510699, 926485538, 957553562, 3176108272, 622844963, 3094460156,
                4074719719, 2870619664, 1930018982, 3808075326, 666404853, 2705852762, 619691053,
                4221033144, 217503338, 2498645430, 1957980210, 2710477511, 1441331060, 1453965392,
                1218329146, 3234626249, 2734978851, 420187145, 3875048836, 4109064695, 2023449386,
                3705316294, 3734226228, 1678173088, 2355852399, 2545273442, 1660679545, 1047346445,
                2851483434, 2385495686, 1845313467, 1434170548, 1876684260, 2864173169, 2858434057,
                1606312665, 1404069374, 1409272983, 1501865176, 2629801523, 1156531379, 1966173113,
                982374943, 2780186025, 51018911, 1670745883, 3433098563, 2796786690, 2521705837,
                2349895698, 3414672511, 1189601967, 2691663763, 2003563011, 3170083221, 446706685,
                2905548069, 2473452500, 2672119163, 1938341073, 1963072058, 3308540972, 2512499996,
                3890193954, 3190271472, 1294547060, 154292633, 1145441043, 951556529, 1982588182,
                2644881742, 1346657469, 1639969796, 3344053522, 1134687904, 603093703, 936617365,
                2509419533, 680100671, 3656867476, 844884523, 1426442225, 1247488423, 1442787747,
                4038072298, 560676042, 3167315140, 1367214747, 3536486947, 2853294519, 1136378567,
                4026892739, 3443804471, 3243823117, 3189117970, 3844359512, 3716938307, 540784417,
                2981956124, 1720572142, 3834798996, 3204329258, 3524043696, 891709759, 2358715990,
                2249911045, 3497271760, 1870817405, 1453778751, 179255677, 2275729572, 1720686084,
                2198280122, 587446621, 3277712905, 2994960400, 2828218934, 2978053083, 1152064605,
                1863664141, 3416092329, 3147585282, 2404365896, 2520923621, 4144562663, 3306225086,
                2030220496, 3587351850, 4122478346, 2659218421, 708542702, 2920393449, 2724650275,
                75837497, 2495363342, 323083023, 4113859057, 1224677188, 3523705698, 181614693,
                1464538763, 2447172354, 14093408, 325546099, 675680947, 3772468734, 345460982,
                3224933462, 354558048, 449647873, 3016480523, 999347881, 2244728783, 3607973886,
                1243947858, 2867395630, 1677541562, 4148542415, 862425012, 1470826913, 1052156219,
                1728527766, 3578908356, 613335170, 2846084569, 1561352258, 291274331, 3704626207,
                2762818579, 3245081919, 1343250043, 1615662229, 2531097670, 219127971, 2938579671,
                3018648863, 3648602704, 721153328, 3110227800, 174697874, 643678501, 2670530392,
                3158908975, 2804952646, 2356598803, 2050807595, 107662147, 1685361536, 1308533998,
                1201813904, 2765954423, 1339748516, 3870256564, 2218776576, 854059437, 3907628986,
                3886388047, 1688308435, 201296086, 3766085655, 2036555838, 3481613745, 948797408,
                623304414, 1696856886, 1141726531, 3305871632, 2059599793, 908357061, 831275983,
                849593710, 534797383, 793513545, 2370402315, 2777618690, 2628626407, 1757921480,
                1691753018, 1285901466, 3426285239, 1331079772, 4146654863, 4024544110, 2979788510,
                368467125, 24345681, 3073350707, 2969826896, 3884548140, 1799669248, 303853872,
                207913625, 2141350731, 4138734403, 2939418084, 2306193173, 1408426023, 53245159,
                225958934, 3592303602, 2276071422, 3558775671, 3798844796, 2812825104, 1149309307,
                1671473834, 3741733619, 3464120030, 816392559, 2544850933, 3324452198, 2766215433,
                2754927401, 136530698, 1546386029, 1670932675, 658949286, 170713198, 1210990734,
                3743021444, 535276301, 1626462684, 1738421569, 2230576599, 3137963179, 1069299320,
                455706470, 2580258203, 1360344399, 2862263047, 1370723388, 2792952777, 3846954515,
                4209499685, 2927081264, 1204584971, 2379333741, 558569530, 1853212826, 3391360408,
                1040513901, 1559770267, 876307615, 2824088, 1726280519, 644171358, 2706107769,
                1680502933, 3489334226, 3424452901, 1495977214, 2224502270, 3728096365, 544320834,
                4204260145, 2679681016, 820042458, 2850750985, 309319576, 1824964053, 1698100227,
                3367290062, 361573975, 92583228, 2004326206, 493109001, 19484891, 3513638673,
                2024772169, 4182578488, 3969090556, 88306186, 2631515405, 541817465, 3963902259,
                994021943, 2974115977, 2296327675, 586210092, 1897225015, 4176474579, 2151973839,
                2337213554, 2187117024, 2420055192, 3210640273, 2324839717, 1368233728, 288508901,
                4085658026, 2082314040, 3764593412, 3125476362, 1600660512, 2149788730, 2427665180,
                2997014598, 2154927292, 3917694996, 1539578838, 2368889526, 2995386165, 3409788340,
                2886433974, 305855824, 3257718445, 261611974, 4227264599, 989750356, 1040361259,
                4210137765, 2025815163, 2075444018, 583224675, 1301409366, 952488236, 864737326,
                778670543, 8355060, 2923623421, 570431183, 2146789689, 1321011113, 247566633,
                3943346875, 3696321262, 3176959573, 116528996, 13668972, 3406819072, 1902636191,
                3113341004, 983724362, 3272488923, 4030017163, 835027824, 2238285483, 2548203205,
                853361272, 3602065527, 1893771807, 3292565667, 340846533, 1750230819, 42266476,
                718060706, 1584722703, 2580995200, 3686307554, 42260378, 1141531492, 791080198,
                274869305, 4239725097, 3419290367, 634711851, 997215417, 1544807754, 2078245666,
                4238725987, 1172084063, 573057941, 3811717672, 1862508866, 2392223776, 2246649095,
                1911826635, 3716573075, 4256209707, 3522457949, 1340206478, 2517529807, 2221194466,
                798990140, 759140438, 2674366145, 1344189665, 72595386, 723597581, 3593659419,
                335376232, 2753787811, 4017574301, 2990058171, 3225943710, 1953159124, 3613021838,
                1905719752, 1955073033, 2340717037, 2676910034, 3772473222, 3296466198, 3389933517,
                2434303156, 1827448545, 1094002802, 3686776366, 3309239944, 1401087443, 260302646,
                3203194394, 2134171894, 719448679, 1930627162, 3244219325, 3378404381, 3812681251,
                2441318219, 2554633492, 1638940565, 3656938790, 3303253879, 828306443, 3638677120,
                1326652936, 338801470, 2089611888, 2182150992, 3959668269, 3276592769, 3232487203,
                2699698479, 3711459231, 1260821803, 1941766867, 4251289643, 2593320982, 4208132401,
                3268186492, 1107538016, 2560397818, 1455893406, 772798556, 2010059348, 1412329555,
                2751622179, 3345879875, 981350120, 4220854172, 2570887849, 2604765825, 4152631207,
                1280682784, 3587177396, 3678567847, 710852020, 4067970368, 852353955, 3615534147,
                2639984158, 4167767411, 2761837378, 1513673525, 694793254, 1894362672, 3263805017,
                2976737806, 2775946012, 1564642610, 550950721, 3276449658, 1159035543, 2521734550,
                2336608068, 2877139214, 2245730435, 3068431322, 4272866276, 274664347, 3097556962,
                3342326698, 3870423352, 1062641621, 3999456880, 1663122741, 2137008455, 1150577129,
                278182406, 584570470, 413288288, 953893357, 1619838786, 954237462, 2030868600,
                3341078837, 1505588254, 996685690, 3838869263, 1899435389, 2717743049, 3274864849,
                3237346116, 2342164642, 139415908, 543879245, 281171972, 2551065661, 2525750051,
                104753154, 3488693617, 2239811298, 3907183760, 1861147359, 2237652376, 821384415,
                2556443506, 923807176, 1114497964, 1688435037, 418913733, 3780821965, 855870812,
                382500784, 3672042270, 3987791218, 240406871, 3177312849, 2339645894, 3663387343,
                1718477391, 609427853, 47138600, 1392173474, 3322084900, 165330900, 191665056,
                3375525145, 1887282863, 3045589263, 340365534, 3681803191, 3761997474, 3100098094,
                3217118214, 1203379379, 1450361464, 457167927, 1523878470, 682498098, 877912245,
                3964961947, 3161518987, 1518633749, 3120873652, 2576970448, 3300695214, 2791936052,
                2714172087, 2724523327, 2456178494, 3245773223, 3724143762, 1011922455, 2468133615,
                1328520608, 4243852002, 3530232048, 3958621534, 2186530782, 3190800545, 421915440,
                3732105573, 894766418, 3912473160, 1873602277, 3818847891, 2911857216, 4022363100,
                2455241114, 2315909413, 4188396625, 1322637246, 2354013201, 3533097733, 3150407740,
                3447711566, 4171141781, 3043204910, 3805211328, 3849054297, 1738944382, 960458108,
                4100056853, 1452230905, 3671771463, 793342064, 2052502384, 126345260, 4266351554,
                2739791171, 2564099162, 2054176940, 4104860610, 2880824279, 1824609945, 2290885592,
                2080132465, 3293516142, 3225255226, 1903846973, 249770957, 3607270679, 2039840265,
                1484740747, 2799626769, 232574972, 3198581021, 3408176098, 2283476893, 1378712722,
                2267853117, 3801697208, 4042881095, 214208749, 61544914, 723875937, 2544717728,
                3107244281, 1942406924, 2204315142, 194788263, 2081604187, 1429321846, 3818022117,
                2227370780, 35034435, 3300785703, 1916258515, 3792740919, 341949768, 1510985228,
                935888111, 2831355401, 1172367405, 2779293526, 381002684, 1203468318, 791299579,
                3228453447, 2164274465, 1578115502, 2644529284, 340751106, 116209844, 2355694636,
                2729630500, 3450921193, 4212016059, 804469812, 2549255576, 1849673577, 2728107038,
                299357951, 297926966, 1885179687, 1460468723, 1061492634, 2653222691, 2880953738,
                394617822, 2279747967, 3993584895, 3177779497, 3847988196, 1617034158, 561325326,
                3691960099, 655631397, 3717838062, 783893013, 2851649543, 2631344086, 3916534255,
                4239514467, 1949848383, 3484594726, 1770224734, 3906314793, 4005839418, 4207121646,
                2201510217, 528220266, 614751096, 351840326, 1436422606, 3907682814, 3423937400,
                4097091480, 132496980, 1854199064, 378621641, 58135356, 768061170, 261902503,
                3235989531, 3944366822, 2897288002, 76638955, 1608646444, 888012857, 2965667012,
                1070852076, 2826174185, 826355269, 461939309, 2089015901, 913565948, 297310628,
                1453100438, 351883424, 3277154215, 232696739, 373302545, 254462392, 1382840549,
                2396260914, 395629689, 3690272782, 347837558, 3442928069, 565974422, 3199867881,
                1394223081, 1414226204, 411776212, 366110497, 2215785507, 3336617752, 1389191042,
                3230116820, 2286308091, 1103652934, 3278839516, 3987773259, 2751916818, 3426671738,
                52390424, 3788159002, 336944991, 2490094935, 852597407, 806843902, 1247443822,
                2022880264, 2704535770, 4119940159, 3352245584, 614580992, 22768085, 3281732273,
                3360660161, 3184765773, 2103780889, 1975453788, 1520016309, 3642758446, 2329500419,
                301513139, 818876954, 4020148877, 783951920, 2289116618, 2759423270, 3546488753,
                3471283776, 1350688833, 3882816801, 110527762, 731506281, 3875805926, 361558987,
                2733293446, 4149112272, 2738842435, 3457365282, 1911203461, 3791694111, 1986738012,
                1121816344, 332259749, 2539780233, 1500659471, 1583130056, 712133978, 1118188024,
                1648568355, 1769554028, 3303786687, 2270603708, 822978229, 3963942206, 3944801693,
                950968052, 1427806001, 1761238700, 927940075, 3972749169, 207889573, 3360276654,
                3703034669, 2752232151, 1355645600, 3309499666, 2234034742, 3333706992, 3679565790,
                77914175, 330403612, 3453596334, 3459410678, 175508592, 3753692883, 373965805,
                3840567680, 1424343310, 1202542810, 3690575999, 3214807968, 918808778, 709316579,
                1472859715, 2605553991, 1502769065, 2626246324, 826592139, 1164837467, 2821720060,
                2611020842, 4187248140, 3363390475, 2799120749, 3670536960, 2795389205, 707717410,
                2060782639, 1982852844, 4060378888, 1138561015, 3906784820, 2931775722, 908740949,
                2432273836, 498592088, 1637289171, 2159879590, 4047017466, 3660792958, 2115652508,
                1209950895, 2345077512, 2128606337, 3052623652, 2014505870, 2055498585, 4179829578,
                3728976993, 275050537, 2552939213, 620323796, 3714857310, 62090404, 2682354799,
                181021002, 3494582794, 600379307, 3560414895, 1350459482, 3565826612, 524507499,
                1413687814, 1405059824, 2383744607, 3387756791, 2559380951, 3351617500, 3677287602,
                348058713, 3224158492, 3746961259, 3757007545, 316694990, 1967943132, 1845094737,
                2029405643, 4226275584, 994479209, 1270994116, 1958491610, 4132050946, 3967659388,
                3029819959, 2977591836, 151469162, 2398127247, 1593561927, 3507232654, 241564748,
                1740951350, 386885364, 2933913818, 1720957320, 87561347, 1723480837, 3552803561,
                3556853653, 2031086874, 491826579, 2079567355, 2169699209, 3044943289, 4056924672,
                2307645608, 3537713376, 2908104019, 3177159128, 929013201, 433566853, 1352264950,
                2480483252, 776517141, 1309218572, 1434953184, 3391313612, 2741185955, 3363829478,
                1675086390, 972223600, 2744479033, 3266794923, 35658808, 1579045646, 873399878,
                389478288, 1382367939, 3653633542, 3233170189, 620600047, 984251838, 3024949168,
                2365493295, 3895194616, 4057529727, 1430697808, 596632735, 515576435, 3485088618,
                1561260468, 2326132425, 1441097513, 2650789119, 2657744738, 2044628817, 420984447,
                1799231880, 2547017352, 2745434926, 1298092765, 485912325, 4050696110, 2449075835,
                492836822, 3202477568, 1240801219, 3646284028, 1647715380, 3149177250, 2943417567,
                1413539007, 980840595, 1125336194, 3751306352, 2855978526, 494149037, 2867775588,
                4113812967, 1263704367, 2910496580, 1593721994, 1085528744, 2264130185, 83269382,
                1115238432, 2604100592, 2577869874, 4196698412, 2704878249, 3617944011, 1349932536,
                978828117, 99862233, 449450281, 2396577116, 3678387947, 4259742516, 1322631672,
                1915561686, 1264795767, 2769207380, 804413524, 1232505337, 1220009724, 1294287873,
                2855456734, 3927255440, 2712197443, 2491275022, 2240407480, 2761036179, 1837202003,
                1106888468, 1417477688, 915296319, 2039342274, 2733613182, 462637863, 2840649864,
                3100484828, 2719672892, 151906935, 2261319585, 2656759829, 1519948884, 719129572,
                1682072090, 2781457991, 1350068632, 3274154190, 2109173442, 1908724382, 2419052419,
                2028679234, 3203173989, 2590495456, 1989273280, 531511733, 3566448108, 3462338174,
                4277911603, 22298737, 1524273119, 2709336519, 938092901, 295799642, 902385642,
                2137236380, 2789233877, 3682007324, 3625684954, 3614857056, 202468198, 1226661917,
                3159277477, 3560648153, 3819621278, 540332999, 2944854747, 2409193978, 374804764,
                1336405091, 3018475595, 213078133, 3384614741, 3290633661, 3332242057, 3224858586,
                3203591826, 1245392207, 2580283994, 2701486219, 2384381770, 3098276020, 3123910700,
                4085709500, 4128158718, 603139521, 1135525058, 3857642684, 1410378644, 78359003,
                3406390922, 4092337337, 3213773240, 4197894447, 1942316430, 1258637305, 4239250867,
                3475475336, 2655363530, 3739419561, 3143231964, 3957503737, 4047803818, 434992995,
                2450348156, 2837933497, 51567125, 3207610947, 3292696078, 3101011969, 3766828611,
                3055435588, 2877370050, 226359606, 3392837464, 193077577, 3311782725, 3894789730,
                3316160046, 951206256, 555159409, 3162879474, 472431400, 570576174, 753157825,
                4105008110, 1211132986, 318543594, 3685357622, 773996108, 3754567744, 1249414550,
                275208091, 721342432, 3031780362, 3383028662, 2217171095, 3427901388, 3933669498,
                109992127, 1145753994, 1494149615, 3600238607, 3201504597, 580777735, 618124048,
                242104221, 129496845, 410772906, 2537408883, 2754275686, 2639107980, 725841242,
                2443820926, 1893265753, 3447797702, 2933959901, 3214099889, 934279127, 65128819,
                3272362684, 2552082822, 2090528760, 2559891538, 118281105, 2672518703, 2096202720,
                3273414364, 2037459504, 3370827896, 1699701315, 1606070586, 2904479552, 3315003695,
                2820748303, 1793140491, 2962952508, 2710637011, 2678335574, 3590547790, 882661210,
                277613712, 1784245098, 2779933225, 2310988284, 1408095043, 1622616915, 1839606749,
                2605774208, 2254855010, 2957400503, 4242380003, 2773759547, 972422801, 967128554,
                2340551928, 1861158625, 2404129215, 3647330257, 1574228621, 3419433492, 2124217412,
                240959784, 1320622909, 1747700367, 2755288827, 1824869076, 407182857, 336533520,
                736075625, 1196548381, 3239474159, 3048296225, 483742895, 2994857359, 3209699333,
                1469442024, 923109824, 1382969239, 3174660371, 3212452354, 1807036900, 3961861384,
                571414940, 3034500868, 2064945562, 1884621518, 4273342775, 3337870380, 772881427,
                487872381, 1460921875, 167725087, 1193045309, 3438378745, 206582715, 733951678,
                3780148814, 2296573340, 2888500099, 793860351, 985954389, 2244404490, 1686378278,
                1286463227, 504058677, 2940924721, 3628549544, 2298279082, 4074139272, 3318550839,
                2078691953, 3904311006, 2751358613, 3134421831, 3689866939, 471611259, 3585450053,
                53341630, 1433114211, 4137751343, 3233461668, 3138867815, 1669897675, 301150150,
                73141700, 1222677780, 1821445642, 2626124657, 3869544082, 2466140961, 1867437858,
                2283701970, 2364920272, 3852084637, 2567337268, 3683422908, 2747924360, 3880780234,
                1860180562, 3714959304, 4123133298, 2021423060, 2077485881, 225646782, 2336847691,
                1461822489, 130273718, 2894035181, 1084935869, 3834746928, 2778596117, 1594764681,
                700265718, 1902646838, 1363673254, 4114066892, 1859912045, 435194699, 2491267954,
                1053346475, 2418313825, 184677741, 2294122112, 4244326950, 1517107134, 3572119836,
                2968484987, 3666330450, 3979403703, 2036049749, 2719225873, 3938641674, 617427440,
                815463497, 575728460, 3291828497, 1043374761, 604294591, 3619555499, 194736919,
                2546021062, 1050882061, 3837091824, 555004663, 1668443581, 1907761109, 1777339140,
                154502652, 1192574008, 2967586359, 1956114947, 1059598381, 1680712924, 2611921118,
                1170015973, 1798997495, 362951246, 3172658646, 3632419746, 1334773961, 3976403025,
                1604507134, 4057780710, 2463567881, 621884418, 434643179, 2303536415, 1378521501,
                182935114, 4226457937, 1861600714, 3698888173, 710367560, 2290293929, 1660299298,
                1003266145, 1614223266, 3903798180, 1421639545, 3329173822, 1980085434, 2610822457,
                2296634936, 3837413666, 152461017, 4072600229, 3860162625, 1102141974, 1707290459,
                3416778051, 2826572991, 224792111, 620251130, 4001879930, 3041187018, 2257061408,
                2953988237, 1050117564, 1566680723, 3569348398, 3895084389, 2279563192, 4145303386,
                3865963395, 917194771, 1529108810, 1483738511, 1364174636, 2884583785, 1890244693,
                958296239, 3472389716, 1186326098, 2140878101, 3783117706, 991645649, 3444958227,
                1241410709, 2300684342, 585778329, 2121441728, 200352242, 3554821900, 3515050051,
                1013367459, 4150105309, 3592078139, 4074451175, 587413402, 3265599719, 2529856805,
                4244056558, 4072403842, 3104615316, 2805257814, 390680494, 1879691966, 2588945355,
                935618168, 3813809475, 3315398574, 3636679403, 29389301, 956420692, 2461914496,
                4107004684, 2723760888, 3936011913, 2024331212, 2450012726, 302988290, 2741245539,
                489985017, 168854395, 4145632475, 3348641173, 3483375137, 2267242998, 3821788835,
                1500990181, 1102216180, 2522627710, 3739104751, 3968030494, 4150934004, 489690835,
                260506722, 1113595250, 825720166, 4271989921, 1692626437, 756162517, 3018843962,
                1009961164, 776249663, 1457130315, 2499776103, 388172068, 1401931394, 627698688,
                287314572, 269662701, 3149013861, 1642206188, 1180957409, 371610907, 2393570134,
                2964591267, 2480333347, 3025831710, 3717481964, 231048978, 194179706, 587444409,
                2010083858, 980770207, 1026370399, 1179743068, 2792643637, 4132609170, 49332703,
                1412722994, 3016115316, 529076589, 1972709189, 128813830, 1532167613, 646111429,
                2038237049, 2552100089, 1852245650, 2121119349, 4050924288, 1001258012, 3002257343,
                1006242596, 4197333726, 3785607155, 1899057351, 209150997, 2943164961, 271141033,
                308133959, 1598574082, 946544384, 3049246031, 3136618323, 2964435656, 2378700241,
                2878579386, 2797948570, 575272375, 3675742452, 4044544470, 3518398596, 340879154,
                1751409701, 2003106873, 2680471427, 3034973115, 404982343, 1648254750, 3438446325,
                326496853, 414296402, 2298977583, 2033290810, 1517186933, 696398609, 434702008,
                1636984193, 3182749650, 3067231181, 821004408, 491225538, 2694332105, 3634010658,
                523231120, 1261908927, 1630854003, 1338318556, 2787957072, 1884258157, 4003603151,
                3068923237, 3204155879, 1508622908, 1215621040, 4259301989, 3430911876, 4080344501,
                2599578809, 1912454190, 767417636, 4012455246, 2151245570, 974420560, 2719564908,
                3280911801, 4241226322, 3777914170, 536905698, 835045394, 1911481927, 3620312534,
                2942899656, 3760905009, 2074926029, 4176746017, 2469508557, 1929255162, 1657639950,
                2716801832, 22336494, 1195357815, 1422585254, 1874307911, 3198517022, 223354754,
                3323948180, 3209547520, 1190171800, 394784888, 1640980643, 630307724, 2036676005,
                287039132, 3251918809, 1030982007, 4246784801, 1244050735, 3074276551, 1250819685,
                3809668227, 104238959, 2670846655, 1533972167, 3067023947, 2415515608, 917603302,
                592440565, 611377455, 1299190767, 1939156996, 1788934393, 3186649882, 3681837145,
                2083672672, 1196126620, 1806064279, 1806838116, 4240579640, 739999337, 1098091142,
                1664190189, 2991224025, 1923902267, 3945259600, 2658937590, 3726575401, 1230419543,
                764707230, 3549313932, 3642424943, 1172885982, 1789374295, 2360482756, 2780394134,
                2473472446, 3209657800, 2099441302, 343054463, 1459528931, 1021394506, 1816423506,
                1601401383, 3064233088, 3259222355, 823671598, 3534219776, 3057131487, 4112592391,
                2783467128, 3868566268, 702854391, 265064015, 344847057, 588017928, 2234898225,
                1072515401, 3858512687, 3172259969, 2790437958, 2812769030, 2651544961, 2859171487,
                4071197034, 3260715658, 3653780825, 960634056, 1279190064, 3663377179, 1328571309,
                237244914, 663195520, 1121502200, 1386985313, 2964079428, 990137762, 3677208200,
                562536179, 522373400, 2577496881, 2954694441, 2901335475, 1678665494, 3580889300,
                137429613, 583855456, 2768859992, 1684983888, 887775211, 3667114619, 4013712371,
                466790664, 3399994087, 1172332809, 2809459941, 623322023, 1753469431, 1675051448,
                498176279, 2207442562, 4016251328, 3185194281, 2600040851, 4270582732, 1723627381,
                1631498182, 3960806710, 2190355785, 2137601052, 2278263342, 2066183413, 3859845987,
                2932413281, 4138343518, 4135936067, 1789261648, 3051029009, 40477262, 325390641,
                3536676044, 1511190721, 2002391507, 2334607786, 3872900627, 2558273463, 2249944299,
                306737834, 3077116541, 3436927049, 2837294326, 3939848585, 1817825412, 3689962232,
                3874263331, 2528990281, 4020542608, 87030143, 2888357544, 2386482209, 2430768040,
                208306461, 10322350, 1326860706, 3769524590, 2648363096, 4288581473, 714713903,
                1505322989, 2287854817, 1900232455, 717665487, 2206697255, 3320079515, 238263521,
                3779932000, 4291033226, 1135011350, 1549279832, 3468014233, 3779721960, 3664469845,
                665493332, 765366809, 1006405486, 3594166055, 561989023, 882671877, 2264533342,
                3140063933, 406699684, 4246323920, 2339167001, 1783144553, 2086830194, 792259729,
                2055752400, 1503053078, 3772837246, 4206234055, 1820416778, 109615414, 4101436885,
                1735287569, 754370562, 262726395, 1566536381, 2291152860, 656632823, 3795882518,
                3102217658, 665395103, 1608144010, 1445439113, 900539898, 3853476929, 2401562096,
                1380339985, 2652722097, 514817454, 2508510877, 2242620781, 3092675696, 2176715756,
                751784508, 3829100853, 929922339, 3976876619, 428408992, 3103972711, 3091047489,
                3499654318, 730418292, 3976731332, 720471960, 3321231524, 3822050235, 3006219256,
                4128715548, 1901210946, 1904321687, 2347804532, 2441708401, 644662079, 2642956374,
                1202342572, 487559801, 2541351849, 3506127277, 3748411961, 1020813277, 2204234834,
                2668314131, 3540550786, 3156593674, 689247699, 183287391, 3623291437, 3096141502,
                1122829497, 2830342673, 1277696873, 523256736, 3580548409, 412193661, 3390072822,
                1910577718, 4000272642, 3157003401, 3120575397, 3347285717, 1105801291, 3526168444,
                2277601066, 4126289064, 3603202161, 3714461246, 637329241, 1506073901, 140763919,
                159059625, 570372100, 310655276, 4274054126, 652820072, 2665232536, 3249851629,
                1215359787, 2325162303, 2513932058, 3352242508, 2859049505, 1484882680, 4235526646,
                2025797853, 164609077, 1438493508, 3761009218, 3665206095, 1595187746, 1062512728,
                956546028, 3846483422, 3574864413, 2743831638, 1475164144, 2011784204, 2110784939,
                2358003518, 3759373203, 4256674738, 1436800746, 1411553200, 2774888497, 425035555,
                1915114919, 448640415, 4163842478, 1189142075, 2598603359, 2150021519, 475551616,
                4043651335, 2879473669, 2633187236, 2307941991, 168392305, 2351213187, 7536760,
                1570396346, 3287927468, 2942827206, 4208388387, 3851127056, 1750219284, 3767183313,
                3893440254, 928449456, 472638248, 50253946, 1304140612, 2794306168, 308727834,
                2870656027, 189076424, 1746584410, 3959695155, 3279489516, 3039347640, 3096646029,
                2748502756, 3324587967, 3261840469, 3057046585, 2727997697, 1104035019, 1280696830,
                3477204367, 1297971334, 750607414, 2433365552, 2601518004, 11258684, 1040704941,
                3715818873, 2158787114, 7016446, 2925548686, 622135942, 1619542473, 286908419,
                718362729, 121666472, 3119289134, 3087945776, 861582939, 425296970, 1263438729,
                4065557937, 3959986517, 4134693254, 1925794123, 193437418, 3476905956, 1511712377,
                3238874232, 3312526937, 1773669437, 1585186417, 627240956, 1936130968, 1481159394,
                4283758747, 2641584867, 2666928986, 3452821649, 4178531521, 1822700059, 3415376573,
                3881394922, 1692296803, 382840841, 4000638979, 1899699449, 3696396074, 2530736870,
                1339745766, 1620430034, 2696251887, 907474405, 122959529, 2311046870, 2707913370,
                2068155025, 871578813, 3199933316, 4109893644, 3364535059, 2689483583, 2733315419,
                2816581989, 493597647, 4233326794, 2707337061, 2466491155, 461645590, 3394920046,
                2364034700, 2927025934, 3561869025, 1766019166, 1087480153, 3423282059, 2131323526,
                443966965, 1322332697, 1188782069, 2328104863, 101502730, 559580730, 292683787,
                4260616850, 106658508, 2316309568, 2434308741, 2540198387, 3872202391, 1683466445,
                361864473, 1073947479, 92799404, 1093412917, 1797622721, 2090746539, 2283241835,
                2132221790, 683313217, 2605586840, 272071431, 778910196, 1178669312, 3122370980,
                2530336330, 3970158473, 2490258456, 2190693705, 596284947, 1765600807, 3350342078,
                2794589150, 2635443956, 807439784, 3903077782, 3945796325, 942763420, 2713046382,
                1698713811, 1317857903, 1110525719, 3495131608, 3223505065, 946629392, 2972584044,
                506707999, 94736771, 3765880923, 652903571, 1540406962, 749211644, 3014228203,
                3518499041, 3422675143, 570554490, 376540369, 3468500338, 2654381732, 1082043102,
                547740010, 1376776268, 2368736622, 2340164956, 3274206213, 1585675606, 2526948269,
                3685826888, 1303281228, 4233726619, 3077043885, 946095382, 1772054857, 3629314636,
                3668407285, 1679245410, 3015824845, 3419133504, 1772118397, 3869309009, 3116086793,
                2476315498, 2727156416, 2073358304, 2493520250, 3184598335, 3426023846, 2535765177,
                1350497350, 3842761924, 193088781, 3549291691, 2898323987, 528541515, 3931652212,
                2628035505, 3220688025, 1327873644, 2630505529, 2645555986, 683371565, 94682890,
                3088159400, 666832937, 1170664070, 2982432118, 1240862344, 1541705759, 3848566925,
                470074324, 3299004854, 2806142952, 739137245, 2220277210, 3177719291, 2655324779,
                123152485, 811519781, 201013561, 3301124472, 1329382140, 41951119, 620138375,
                2546585592, 625899600, 3326495333, 4213033328, 3082520072, 2891613782, 459582846,
                2097858672, 717773013, 361515587, 2355289195, 1151755260, 1300970819, 1575593593,
                252818119, 1942833848, 3291967541, 664516403, 1757721427, 617231947, 3341602112,
                2134171110, 2655152316, 4171063368, 2266853692, 2249705420, 4229017828, 3808551569,
                1022164534, 2764922040, 1186169196, 480930826, 3626411618, 191179196, 3084727732,
                2279466761, 4262348380, 3415268683, 2678080982, 4222640244, 3707472424, 397923840,
                475207557, 1315511880, 1883992100, 898749016, 1879798163, 2017024751, 4062544133,
                806475517, 3051502018, 3708841910, 2096099031, 2472482157, 1257669380, 4098373733,
                3753948004, 1449830867, 1906256745, 545503177, 1730793521, 1951534912, 1016204794,
                3644912944, 2756593845, 1084912829, 2782536566, 3940309671, 4041993642, 3625686158,
                3342172669, 3350618388, 1432134919, 3394172396, 452736283, 3746356467, 1206978644,
                1071262458, 3418727601, 3753580695, 1155910123, 3621981229, 974633491, 4270218948,
                139365450, 1903294135, 4213872458, 2609351473, 1806785011, 4061492016, 1658876611,
                1725649895, 4238767421, 992865751, 2011385765, 111748306, 2649459396, 221192812,
                4156176160, 536764228, 2796826913, 1239184361, 2672911755, 3006728942, 2027502333,
                163000014, 829865457, 2838930988, 1890078144, 464268512, 2194804859, 3938455874,
                1014614635, 1776352812, 4242636730, 250288235, 399096520, 591848475, 3913262575,
                3472268179, 4154557375, 3758335140, 1187320829, 1385358369, 2785309889, 3598306971,
                2407716186, 3628617916, 4288509869, 3267216806, 1856454511, 2928214947, 83101206,
                3202050500, 965501838, 1912359870, 632876507, 1208660227, 778560438, 2876747643,
                3513939362, 3961376920, 4110658869, 3126278195, 364426099, 3234695768, 2990525857,
                796682824, 1791220715, 405843908, 124880551, 1855027244, 3746450180, 191162010,
                4082012263, 1581699691, 2764243440, 277355349, 963430298, 3566230933, 38625380,
                768212651, 1512496904, 1874854932, 2450757328, 2786594782, 1412558861, 1395849717,
                2747218492, 3495543061, 1846920941, 1898677827, 2422832755, 3921580192, 107001262,
                2741893884, 2313862769, 1259354486, 1588034006, 2331911183, 3195037905, 2648622432,
                2978006124, 2561556210, 343248328, 4270266947, 3123864518, 228539497, 2407750681,
                883695218, 2745594856, 2247519066, 4231094, 3581492796, 1675476648, 3620672884,
                705741717, 21140076, 3982005817, 2694829480, 279149408, 4168326852, 316910772,
                3383945497, 107689253, 1930173490, 896093152, 2913961684, 3725633499, 3050991063,
                1315775057, 2197755799, 1142448087, 3961882716, 2593319623, 3492417047, 2019475096,
                3414459666, 748384462, 499802845, 3126485939, 2047865095, 2560586698, 365444713,
                2028626826, 3873328802, 74720391, 1993493319, 3232526894, 3721087504, 1967755320,
                668632378, 1664543524, 1468291947, 2952440865, 1254499682, 704856107, 3454907905,
                1964686149, 2452514339, 2293075687, 2004179645, 4015953950, 2947022984, 1173640303,
                3314346410, 4272848163, 1425734659, 189190656, 786794043, 3946370116, 3085382345,
                195301679, 4033242297, 1514196051, 3136636993, 4124105667, 1194214926, 489226345,
                4080514545, 137488511, 4103330635, 1341258892, 1995718006, 202036240, 2939663429,
                2187110372, 1576986644, 2100184388, 257157287, 1505449570, 3072904390, 523897480,
                3619460547, 380563300, 669924233, 3918009837, 3169238035, 4209189486, 1240386377,
                3643960492, 4267039098, 1045161394, 619826520, 3227734068, 425851327, 1814371668,
                2114793343, 851360717, 1089263423, 1146150256, 3569229004, 2947755440, 326298952,
                2159409889, 1578326684, 1453272682, 2251621847, 448102574, 623114003, 2807384207,
                4212076107, 932326520, 2090364258, 3399577451, 4004091583, 952313228, 2574159231,
                1854395394, 2705398428, 28644137, 302699461, 2929946845, 2052869589, 1470767307,
                1144233294, 3039104974, 1656359271, 3353995119, 1755814610, 374073025, 1415373730,
                1263008081, 276443594, 2844698199, 936296608, 52983486, 1213318387, 3037986992,
                1150786479, 2177266424, 4187211253, 667257572, 100299652, 1701434678, 2229094793,
                2589354623, 3277721085, 2778825478, 3059387080, 2015082842, 4084788098, 2105734286,
                4117727535, 1077417510, 1280959967, 3207427510, 3001681767, 2287516411, 807245294,
                943791596, 3567936516, 1175510623, 970953875, 1603914526, 3736436896, 3132876687,
                1911058141, 1902151321, 2882818778, 2129022628, 4147170175, 1665613532, 1339380240,
                1295409124, 2519006226, 1589066702, 3555085149, 2567876837, 4073965037, 1105941413,
                3390819744, 184772468, 2876844310, 3055730007, 1867650446, 2066626685, 2382337144,
                3731581159, 694748949, 4037311148, 3311787740, 2400074253, 2611534780, 3949492046,
                3768082359, 3715389991, 1821116255, 619535405, 3526020385, 981623321, 451820079,
                4037309001, 318196631, 2851710377, 2693083957, 510705188, 3309245549, 2952849981,
                1195988301, 408775548, 3399824599, 2652897529, 3888595751, 249737658, 2553914719,
                3085382480, 3761350827, 275315172, 3214461141, 2902235262, 519532287, 297992837,
                3160553840, 335649192, 1512852903, 1903834058, 799630905, 2367526032, 441909661,
                840254872, 2131794245, 1764935775, 1927169311, 3463226678, 1472402236, 1767217158,
                3205167853, 3927785614, 3573286096, 3753099950, 2228929210, 1659221107, 2746211993,
                810190361, 949046192, 3192506604, 4088392527, 2847106980, 2936788348, 4156916135,
                795573075, 3496252351, 3678494, 1220639620, 1190792577, 2327376947, 238604068,
                1443497716, 1284955950, 2598236634, 2746974481, 1397718164, 4007286832, 1962880570,
                501731990, 1536158589, 2703567548, 4033741310, 1043951332, 2178030208, 502382330,
                397014065, 3437941627, 2102353911, 3105472874, 133677020, 2501316468, 3498041685,
                1233221581, 598304446, 1256058298, 856556625, 1668346687, 1834508098, 414982247,
                968825298, 728571643, 3066334051, 205267651, 642009878, 2938411293, 3400735822,
                1111934622, 304392877, 2678708182, 177181264, 1984975730, 1969199060, 1244467610,
                1654243204, 3654035062, 3366916456, 3737272025, 2650746504, 2185763245, 1889212024,
                4246389927, 3390547957, 1332135365, 296506871, 4177217258, 2700794658, 2242564412,
                836397977, 1676121129, 422154043, 216339390, 3750079775, 2310419665, 511516103,
                1739906592, 799210035, 3712311464, 1455592792, 3349937262, 1598562662, 2486265409,
                519166017, 1297435763, 1392763799, 2022600061, 510735474, 2478097195, 506759619,
                796379426, 399080223, 666623180, 1124185019, 892437879, 485826853, 1656496716,
                2938611183, 4178286512, 2439599863, 1598034092, 3269993250, 3450031166, 475866618,
                1806759119, 2393680802, 1970747471, 2099713240, 3875517845, 1207984196, 2516007974,
                3965473493, 3948490816, 2119377154, 1839612738, 879208677, 246542905, 2630201999,
                2928517000, 1097588026, 2965830207, 498130572, 1798823308, 1795905178, 187806215,
                1287988379, 2031912144, 646835032, 2767499591, 1124794926, 2577129465, 3037704214,
                2639841971, 919973961, 2033290775, 2885700032, 3520462836, 765528422, 446633427,
                3123360363, 2298081977, 1390131662, 4230413914, 1902215370, 3616013845, 2260513001,
                3747377440, 2817779138, 3264575558, 826783367, 1292120871, 1208887850, 265679868,
                3872810982, 2675698014, 4061565567, 4152710054, 110655396, 780958816, 2763524359,
                3633986695, 2010942553, 160739946, 3619904389, 2947803112, 179114010, 3738984586,
                4013670177, 1088797110, 1276754564, 2440296283, 2399071424, 434487060, 1560826919,
                4157071910, 2976509345, 2893695026, 768343063, 3824495669, 2655391168, 1167184615,
                1621514532, 3975881006, 836459681, 3885571349, 508166775, 214823162, 2276274638,
                4195487102, 1195690824, 188782154, 29205793, 4136541674, 3381782951, 3561011302,
                2915898541, 581308861, 2514950412, 2711252254, 3661076924, 1554606681, 1729955597,
                2723146055, 200346906, 1552082335, 410639853, 1691198816, 1384831443, 877670880,
                1170630543, 982426045, 1450261819, 3227495855, 666934888, 2420401338, 2087666752,
                1563061416, 1657331301, 3553602125, 3056899951, 869589327, 139857133, 3767113610,
                1303974605, 1723201762, 263844574, 2503243858, 358826296, 4173491333, 3687643809,
                1625871493, 4198946919, 624894510, 3700331886, 3329004524, 799770921, 2298483872,
                2335302132, 252126903, 2666987340, 2847670745, 2812544104, 512934167, 4280220084,
                3224849468, 2219609098, 3179622399, 1764701927, 378248121, 4261315889, 1025924236,
                1196055308, 946511871, 1660111110, 4193689984, 3547572682, 1714485709, 3208296103,
                1879031614, 3993387879, 74759326, 2535726908, 20781750, 3772441705, 3140626384,
                4022054925, 3132004834, 4128133333, 555857086, 219631928, 4066401226, 2364736568,
                2372067565, 3238914984, 1096667213, 689491983, 2785309740, 1587072461, 3410938009,
                2847008597, 3514882839, 1910022341, 1653248734, 1499301492, 384557449, 2844135017,
                3322424352, 2468876483, 1801577798, 396633331, 2182190443, 1629994414, 2959059506,
                3964895515, 1761306860, 1805894432, 3922729773, 2411151815, 889157855, 1026886856,
                4026036674, 193965600, 1570181022, 633532461, 177300986, 3371224064, 1748120023,
                1761340469, 401130679, 2744459475, 2720260552, 1908778372, 286268774, 1859399551,
                2795691203, 649400262, 3721810747, 1895622116, 1270653455, 2482668703, 1928217432,
                3870565217, 3195815102, 1002226446, 2319234940, 1849617444, 241443443, 1960134849,
                3257532571, 2122442138, 3357237384, 1091603714, 1400399574, 2764930769, 3639652992,
                1075992067, 3354008606, 3674434180, 1269912324, 3480210695, 2694195272, 3120019549,
                4204414893, 3115582945, 62860, 3100959926, 869419887, 1501173206, 989959599,
                4194175791, 1874919226, 4132268124, 941227636, 1117180576, 2798307927, 674257397,
                867344324, 747456843, 2751244875, 2885134775, 3838427931, 1873728410, 611603176,
                2959150253, 2181196683, 1710737373, 3705891697, 3034486028, 725440065, 1923636551,
                4151354804, 2346141321, 2707306865, 74049846, 1541018327, 1790958807, 3077570591,
                1139993470, 2417568601, 4004865519, 1041577893, 3235167060, 3254089701, 2570838319,
                2475603200, 3859647482, 2993708386, 143247127, 3734661089, 826230775, 4116635923,
                199135364, 588292673, 824443751, 568341079, 1016456619, 1604002702, 1772195110,
                3964951887, 1493560899, 2866906460, 2936090282, 946222747, 525981003, 2325353316,
                2886265911, 4179416306, 3370849462, 1893142846, 2681054547, 3735197589, 3776524206,
                1296370394, 4238698717, 2003830728, 3887946826, 2829434435, 1875801233, 3277229923,
                4123505719, 774917414, 3564778974, 1353262063, 1276224511, 1774196274, 2512537568,
                208846945, 483611843, 1566083971, 2070150886, 738949232, 4244252079, 1367631629,
                4274810101, 4148053121, 2262045233, 1323571644, 3874729248, 20229007, 1930672366,
                2535449036, 2724644158, 2337868550, 1980878450, 3084405876, 351999056, 2331600327,
                803554490, 3414519030, 3508616719, 1312233895, 1276476199, 741671465, 2052571533,
                784575034, 3477049444, 1778569772, 4002036361, 1117181350, 2042796171, 1211457669,
                4052197160, 185043729, 2924935303, 3596780754, 3912420895, 3627811273, 1985659887,
                3753611409, 2047663715, 3318805362, 149285966, 3179895001, 1237672670, 1985820626,
                1298372520, 4284591011, 341224454, 454999791, 3750564549, 4107533271, 213131740,
                4012841780, 603326064, 3017166441, 279885978, 1915229757, 1348159257, 1548745560,
                2981789576, 4749968, 3020261054, 2037208068, 117001672, 815291934, 317905993,
                465148647, 3623981244, 190010148, 1709761935, 2835947327, 3517022470, 2178243690,
                2497438014, 1876568825, 641590597, 288338736, 1164573506, 2218432212, 3072549385,
                2808266324, 4204926341, 3781762011, 3181513185, 4246729183, 3028889447, 3479420370,
                1293238383, 3671370466, 357540249, 544681902, 1619466883, 2095482859, 2351601097,
                1294354403, 3924412452, 3509201400, 394596275, 2000769208, 936155928, 2980604496,
                903974142, 2430419875, 4100610868, 1228760002, 3303634223, 2793866830, 751125932,
                951956482, 280266344, 2891935450, 1873629086, 5570516, 3354888472, 149771485,
                338307762, 2822577121, 1237324803, 3342007852, 3441674541, 3974115083, 2186803670,
                3504599397, 3344339108, 3913996367, 2303206643, 2511334168, 3254784413, 1378993575,
                2422186725, 2959643285, 4212948275, 788681136, 4207545241, 2851838191, 2114800129,
                933612608, 2319524742, 1877560809, 4206760104, 1731687165, 171699922, 3463277658,
                2795199671, 3866480958, 622763825, 3094649971, 1423332786, 2717336129, 558587665,
                2491633038, 2364130945, 3360297817, 716787448, 2782951458, 1575189363, 226384805,
                1089938862, 2914472892, 2706981436, 3863385624, 2637979099, 3616845051, 2684045904,
                1905176309, 2846718196, 3558902951, 3891946352, 1254905803, 269913489, 1082165285,
                1833207584, 4115780246, 434319330, 1742079497, 647885839, 2863394952, 3038238702,
                413347594, 1719976258, 4034848482, 2328176830, 1613364718, 3940789192, 3739394322,
                2362355131, 115437714, 3583561637, 3840825890, 2914519890, 1212102726, 3481009106,
                736166974, 718171257, 2199668000, 357589147, 1280278871, 1491363454, 955868050,
                789879528, 2698794649, 1915436774, 1686943875, 1758449247, 1150886369, 2922900881,
                208227464, 1143826808, 4191332816, 2696921387, 3692310240, 76470987, 3289165344,
                623567006, 4188640667, 2864843705, 796242042, 1597539994, 34970604, 962193696,
                2654314888, 2896643079, 972723042, 1891747952, 1034976782, 2949023272, 2341526400,
                1742458173, 2052910327, 2072192599, 2793782047, 3358992152, 3911277496, 1831587768,
                1243577120, 4249315708, 2013672927, 2547035442, 941512412, 360581387, 185821450,
                1761992495, 1628978782, 3866270262, 1939713190, 2410442029, 1842360003, 100022960,
                3489472548, 2137169704, 3508042620, 717338936, 1716080536, 4174165314, 1779870772,
                4188693983, 2720756617, 4132300777, 3257213784, 782058413, 1875126093, 1095563746,
                1715694327, 2066141725, 1846928857, 3429251073, 2122502370, 2298283254, 3089071457,
                4031218271, 1134630355, 2385033542, 456362630, 1957570996, 1042213984, 703226120,
                265051185, 4023801258, 3225097623, 831815050, 2355101173, 3982484216, 3634887390,
                2443592608, 1362657087, 3987480592, 1452761837, 1326430527, 25981182, 2573055937,
                1095878064, 3985298805, 3302487006, 1202505595, 390727865, 1826073018, 1989386218,
                1898055969, 3392648337, 727907640, 1593813478, 3211587452, 3210864466, 3762668884,
                2902234025, 1292462085, 1742646865, 1549756508, 675034357, 3053829169, 1471227718,
                3124180515, 1807018783, 2453567817, 3992883600, 2268519457, 2035724962, 1436456489,
                4264737023, 708223934, 3028559606, 501587643, 2707807431, 325077208, 2416334023,
                3694645865, 1685743923, 604273842, 2649984654, 2845588843, 2933252684, 2730336951,
                3580925423, 814225121, 3366268425, 1770717149, 1486401167, 3804277507, 1456752174,
                6337974, 2409833340, 1617313876, 225498760, 1983179608, 3402609150, 744149761,
                9987060, 3366937625, 3438474150, 4063360667, 3385409664, 3769624981, 4072601314,
                3280258332, 298354566, 4056036825, 1561486207, 3007704270, 1662043103, 3892618780,
                1804001291, 562253753, 4067841977, 2995255243, 80526741, 3057512084, 475203264,
                2986752586, 3957883503, 1802853615, 311819332, 2837767349, 2388888673, 3277341280,
                966408880, 2072943634, 539516418, 79462313, 2004099787, 2453102486, 603261020,
                207424431, 2855582760, 2902494889, 741106176, 2468329430, 861181190, 282067858,
                3684697365, 2623982006, 3801013044, 1168619526, 3894563665, 1944151972, 484249400,
                2065256884, 1354519084, 3787011034, 1665285189, 2185133696, 633574470, 1522160849,
                3190731137, 3963083576, 1769923208, 2261196778, 1079503357, 1414231568, 2141083825,
                3772913971, 2048406301, 1513088102, 3812670713, 3248749895, 674551953, 3112555045,
                3285597033, 189516445, 917663541, 1185071584, 2241980593, 2147308254, 3090205461,
                3246618291, 290677042, 2461014414, 208431436, 290062660, 1228872528, 1963818101,
                2419660283, 957129217, 135746754, 1315404499, 2924407396, 2700594564, 4124385669,
                1690270299, 1360970740, 3034185919, 1285708700, 3277837412, 2891370147, 2083671223,
                1244859227, 3629315723, 3331276912, 3100624908, 1692720362, 4162739079, 1171668716,
                1019917260, 2960968382, 4239429154, 330832212, 2492679465, 3914351164, 2808889733,
                3618854112, 3006959176, 883348238, 1728184215, 749952887, 2053405316, 207244847,
                667629088, 3103931639, 3209824599, 4184808738, 117315862, 2026537671, 1562413553,
                51345937, 3030421576, 813196369, 1177468730, 1399926526, 3101004500, 718483271,
                1666840428, 1341570325, 2878342532, 358644994, 1438403479, 1036501667, 2791104898,
                3825098773, 1174900477, 1564073696, 1006841031, 1226328839, 3800714361, 955435755,
                1441308303, 2803693950, 3007187706, 3856940286, 1018239338, 1888688014, 1004758210,
                332259430, 2579813580, 190823703, 295727938, 3560564104, 4073975972, 1195227660,
                2044024465, 1483690487, 1910935996, 2323731591, 744962529, 2081905760, 1333818677,
                1904243684, 1957392189, 812731343, 3589031064, 1160013846, 420235851, 3194898584,
                3216802636, 3774331753, 3140756417, 1101314431, 3839920531, 3137953037, 542091325,
                585982585, 67002391, 574032484, 1082814026, 982927169, 3343037305, 2499327969,
                1014383634, 2128207535, 3143311258, 811145884, 1733742038, 1401919609, 2347405339,
                1688793501, 130901125, 1385522776, 1610371130, 1332586336, 1524228264, 564391738,
                981401281, 196991208, 3182621051, 3793780661, 4081937694, 1011590214, 1557984820,
                1386727610, 1596730208, 44173985, 1294188761, 2868988806, 694733848, 1105838051,
                1058473773, 345764388, 3923435382, 413963178, 2348630075, 384455613, 1557846890,
                3572852130, 227635462, 1553781408, 3368144363, 3190344882, 2500047004, 389502182,
                1951032182, 1025162499, 2375933612, 822062590, 375772173, 466764721, 2209593473,
                513776010, 1807603230, 1905631247, 2102145812, 1878880833, 261887521, 728430148,
                3553454410, 3877709566, 2747867557, 2339647168, 3102826569, 3883347586, 390581341,
                2881151029, 1633488411, 2816794805, 2192621063, 543414115, 3832288603, 332599431,
                2623361470, 212358006, 4240266170, 684331595, 3519558920, 2607974922, 4281769784,
                1880377186, 3258299025, 780109431, 2460011815, 3306081571, 3682519163, 690153507,
                2663605533, 1316874873, 435432769, 1844774748, 3579784610, 3192012120, 3816514493,
                1486578621, 1711039154, 3024371827, 3961681035, 1833846744, 502498483, 4197209668,
                1250998235, 2332362239, 273574790, 3414542188, 3757096517, 21687122, 4149375708,
                2775774025, 3885486699, 3764828482, 3169684879, 1117267736, 563210996, 3358060713,
                184906203, 260230243, 1407818763, 2566183894, 1022937550, 1704423600, 3768409750,
                1675234354, 3205910089, 3849094279, 2775898525, 4171610541, 3027555101, 1995615707,
                2875301755, 3119844309, 454813608, 2090164325, 1635654480, 3286845309, 838176838,
                700409389, 1759207814, 3708137884, 1734213966, 2458469923, 1120465439, 2280792603,
                251883086, 3307893883, 1147090770, 2478925252, 1571333237, 2110931086, 3071393123,
                3639019776, 1527571161, 116756486, 4154212295, 4071193782, 160866177, 3822684608,
                2812877367, 1187661933, 813375893, 4274355110, 3563648184, 95719798, 2321509863,
                1705316827, 2624456109, 3729011434, 1980377637, 81244603, 3643221080, 2327782863,
                2796726383, 1095348620, 694915451, 3869647965, 2102740931, 478028556, 4176353850,
                1624886689, 1810087026, 3469284847, 279474143, 2654551468, 1650083553, 3786269063,
                3975583314, 2715946934, 2176813425, 3911871341, 3162842812, 2484168385, 3039170731,
                218808232, 2431971182, 1440889340, 259578859, 2693612833, 3234083238, 2456743001,
                4251021668, 3086139771, 2655006781, 2585623969, 1517231877, 2905797824, 2564746181,
                3228165387, 3837985644, 1990176697, 1156148007, 2314574003, 2513356051, 3161514242,
                395936304, 85293272, 2959851853, 2699879800, 3388798371, 971502522, 25055937,
                3578505718, 2265183946, 195596295, 314183619, 325141022, 2254229711, 3167471176,
                991640389, 124907210, 1027834766, 306444940, 1237553404, 2020281085, 3652504468,
                4166735853, 1579142390, 989985405, 1127757650, 3729807159, 2928562908, 474945706,
                2481405227, 2572235402, 1318027793, 2375964164, 2182156758, 1147762477, 312894346,
                722913909, 2048214621, 2526350014, 3878110937, 3763322101, 3802543443, 1971787277,
                3836674074, 1019754041, 1229366887, 2095273765, 3240112698, 893657076, 1649975247,
                1961083610, 4128219362, 3651979629, 560387431, 2272018206, 3455417001, 3591835175,
                2202299987, 3219733860, 511772453, 932647786, 2934565812, 2620296847, 1412673738,
                432452030, 2699068520, 3290349229, 1260200576, 2387873837, 1020650889, 2896929722,
                46043276, 3175381592, 3640150750, 3359402253, 36379711, 2766622628, 1554648268,
                423799075, 762803372, 1518772429, 3767916634, 2349860008, 3999813858, 4146982465,
                3598588618, 42286784, 2318972122, 158301187, 1413340234, 2569385797, 2986790265,
                1601097767, 3186903402, 1492083499, 2186589123, 3007389491, 3890657249, 526248321,
                4163624347, 442866336, 1628632908, 3473974029, 3187528117, 785940226, 578554732,
                3156675263, 385881021, 4069927986, 2627409796, 2493786632, 1220112150, 2494935162,
                3940544959,
            ],
            &[
                3863301396, 4107573608, 769303631, 3610738414, 830788656, 4093448067, 3961045012,
                32998969, 2051223797, 3423229921, 1904051975, 3173276200, 1228524945, 3991474867,
                2558817552, 2412845289, 2693892487, 2807867297, 2840990073, 3357897643, 4077724130,
                4256256142, 3215370719, 961574649, 2783373145, 2888444892, 2290228211, 2438375496,
                2172850779, 1371470591, 2145309256, 1373633064, 4127606380, 3237788058, 4161678101,
                3117205711, 3367678015, 1835932588, 103170075, 2086719399, 3635268234, 1075092783,
                2322705303, 1181088871, 2119517037, 1941053194, 2426223899, 1223640157, 2806178916,
                1837938782, 3474314935, 1094340946, 1519955632, 2393278998, 2573377932, 1478044003,
                1551179941, 1707547400, 836897832, 1100557452, 4127181141, 883244422, 1924787802,
                4265368319, 1084411345, 416214779, 3210503977, 270111460, 570730254, 2856794581,
                2308577544, 1601765064, 1555967971, 922066792, 2413427606, 2872234780, 2604193566,
                3388171005, 1570309289, 2294854396, 2658009782, 2591918480, 3522202025, 231757146,
                4204857543, 3547860361, 1464338574, 3046135352, 2156639880, 4202540070, 2025826159,
                3098079937, 1936927235, 2324543615, 4118634899, 2173483850, 2792340068, 1873251935,
                1329676397, 4043896491, 2309336419, 980209872, 2777302910, 3606217402, 3661029657,
                3300621321, 1682483184, 1403461142, 1223784743, 989364098, 4013393779, 3101723344,
                3920771322, 3654398113, 659304100, 2541187212, 866322486, 3272793365, 539079315,
                691963245, 1257923717, 2386692694, 2687779700, 4058653147, 3991344999, 897061149,
                2324025121, 2967160685, 786657051, 2252177489, 980079755, 3131679746, 3324117860,
                4055735401, 3845118353, 2451175052, 184232145, 624678568, 2101388835, 4142018772,
                2748564864, 2176101753, 290591054, 2465352612, 1359620450, 3705457053, 1692771801,
                3882450774, 3055204792, 888363043, 574687565, 1207688631, 2763529019, 568213190,
                3846386580, 547028270, 695643805, 3592508514, 3670105804, 2822171601, 869109705,
                1004643975, 2589161100, 1630131925, 3278288666, 2691788554, 2121899712, 2397877521,
                1435285741, 2269606420, 4256438690, 753043674, 3171716037, 41205438, 3121289912,
                1323558351, 1361648638, 851327672, 3104712715, 4004974077, 1301613261, 2833338776,
                3359514548, 1454336368, 2759103629, 1960046482, 1092082457, 1499734131, 811024496,
                3572058602, 680905751, 300633989, 2424260077, 3501914344, 563961991, 1037919651,
                3916889833, 1787252091, 2894072139, 1402432736, 1292040125, 682437315, 2969913946,
                314458596, 1751517864, 3350980225, 1439799227, 1636821554, 3406541220, 1219732804,
                3202430109, 1914037453, 563664320, 3367122241, 2515249318, 4047342823, 2606550211,
                2167198989, 1523186563, 452794059, 1346414345, 3332356711, 1383558530, 2011404918,
                2878045272, 3235959584, 2338004003, 3703022278, 976253964, 3367441096, 1031350937,
                3245197722, 1599344278, 3041157247, 2825168448, 256034927, 3591345113, 3217325239,
                3017793609, 848837066, 2474357857, 1438488646, 3582043621, 3167628029, 3875878184,
                750243293, 2350679755, 3998775646, 638861873, 2526770107, 2769525670, 738597950,
                1994625812, 3723039945, 2937249595, 3756565658, 3171285120, 1791315722, 62587833,
                1395408127, 3693836917, 2738507457, 2306644854, 1474880765, 1160674040, 2845323575,
                420810975, 1899118535, 1598631145, 1287542219, 208660872, 2670540827, 4285356488,
                3940367467, 2553544428, 3288950243, 2385345193, 1834621976, 2731668575, 826787064,
                4129914940, 3098181877, 1647015619, 487963810, 3621584170, 2941528453, 1404599035,
                4123744367, 3242445801, 639956074, 1576331544, 3989605601, 262974392, 149652296,
                771649267, 2863404594, 212076261, 430647394, 2620118033, 134762381, 3200455716,
                1300726789, 2837061400, 630227810, 876215174, 4066609908, 1702081865, 2811686994,
                3651804679, 4104022340, 3509034466, 505886247, 2823492341, 3718178477, 2350711654,
                1091894884, 991761658, 2416007280, 3262724307, 2788106539, 213178296, 96331913,
                2488727943, 318433030, 1284078995, 599654997, 3374493799, 2383380175, 1921627781,
                2006909313, 3722858815, 1216826854, 2917401357, 1676843856, 389470213, 334298917,
                1965856677, 749841577, 3683568719, 708694228, 337850258, 3111094818, 2782798319,
                4005027416, 581456353, 611481801, 1294462617, 29883974, 492092705, 1519669277,
                3859693035, 1889037872, 1031737207, 2578726208, 1972815393, 188943053, 1485570324,
                526754497, 2470561029, 1220023327, 4210753221, 3493817654, 133559404, 3002705638,
                2498655424, 3860497340, 3331608996, 1405034307, 2629878850, 476987772, 3610433569,
                1023762843, 658844517, 3090909301, 907135177, 1408007749, 3914369905, 508522333,
                3316282642, 1050991069, 4208430570, 3612474296, 3203199646, 3816629579, 2319236875,
                479063253, 1512092787, 929610795, 2715987221, 1270125585, 1011146594, 2342272581,
                130885952, 3412056503, 4187759189, 882073708, 4183872848, 172107317, 2957726207,
                3280137581, 336758918, 1225340863, 2980372021, 727900139, 83467744, 3112049220,
                3022765871, 3092091329, 3429841070, 2481778911, 1228662170, 796434253, 3799895828,
                4245142305, 4060814107, 32186386, 2762465842, 3106581250, 1879981484, 1044873406,
                4245445901, 515382924, 2067565497, 889935212, 1897047746, 1837757206, 101552593,
                2684290698, 137909205, 879061337, 1558061909, 2653072754, 4247712148, 951006500,
                1219781407, 1073570653, 2696083564, 621148580, 176025161, 3955431920, 2229129171,
                3584030730, 1983508788, 3708181991, 2786434403, 1254465085, 846041455, 1592631656,
                1522495938, 1934663236, 3068611723, 320091931, 2587695487, 3191009209, 29787986,
                468991587, 1595518822, 3373815179, 2308734497, 1843368977, 942275147, 1148248505,
                4234927039, 2416737763, 433582485, 1730443177, 15151120, 1912575096, 1589875286,
                3467980504, 2102706272, 4064622680, 3321081735, 1278382005, 3743042633, 4094549164,
                2003156479, 878239104, 788871490, 3911621039, 2585364529, 3842385316, 3707497759,
                4257004160, 108649445, 3177789050, 1363721622, 2898922735, 1467428903, 2019157527,
                4024265210, 163512519, 124230527, 2015871258, 4147623411, 1276959372, 3521852578,
                3832954702, 223998324, 3663355248, 1866084068, 1034709049, 1357099318, 3064263741,
                2772852849, 1112354774, 229271352, 375671972, 3577874614, 1456769098, 2514337878,
                2958441448, 2521768862, 2332946402, 1306522363, 2051612216, 1798549572, 2328587715,
                250374248, 1181282837, 2401502703, 2561171171, 167987730, 4291774408, 1297255113,
                377921436, 896506850, 2666513068, 2215986608, 2417034530, 4103536478, 2650538608,
                153287877, 2013466969, 4283997596, 3235129347, 1597613202, 3775501616, 940975219,
                3651296726, 3935519507, 1711331252, 1382619450, 98804289, 2828250792, 1113234481,
                879722963, 4181357652, 335298543, 298230884, 2842345357, 2897108219, 2131811279,
                1610217235, 2935752175, 1980703969, 96565072, 2285804804, 3441818431, 4027097405,
                1453644439, 1404165497, 2137407333, 4133788414, 2012339193, 2914917166, 1212496804,
                863513903, 3641661674, 2344878371, 1624332397, 3193401691, 3589187922, 3492743685,
                1074343035, 3549688503, 1235879378, 272458456, 1530905055, 633600272, 952169022,
                694842255, 2924520177, 3733576543, 3412038548, 3355971570, 3319754603, 35156185,
                2711361786, 1908801108, 2007786947, 1471019471, 682257175, 3452454141, 4086992517,
                619063037, 3527436755, 873637727, 2540048683, 4216590989, 2517973204, 856413582,
                3410373161, 3976252825, 1076697656, 4084517409, 3558844395, 1708431648, 4121221409,
                500433207, 69169381, 3518331925, 1903010337, 2945573052, 1916961424, 2296550276,
                1473104968, 570605625, 2970669612, 2930435606, 1407290785, 1362262639, 1643553808,
                1379331415, 814987507, 3738591405, 868048552, 609381189, 3044266817, 1073709216,
                2273520370, 4174096914, 3211778166, 1775963388, 4195045652, 3903545039, 27421359,
                2831518698, 2264275203, 3825390392, 991249490, 2033327389, 3437683812, 3589994222,
                2095797327, 2693270490, 2446965435, 3532382189, 4225020538, 2438827018, 3599722660,
                2059526307, 916675930, 4032044649, 3832545177, 4265752161, 2025270161, 1700180813,
                2724405129, 894375853, 2158154452, 1992158364, 1104234105, 4095063140, 549680132,
                295278223, 3399425354, 502455385, 925070896, 25265139, 3138056117, 2485080362,
                3122750407, 2110469673, 2519059530, 2245336963, 386180475, 103198797, 189274207,
                3711966958, 1497301749, 2091705140, 2998746394, 3197222872, 1586189053, 2434615335,
                865658181, 410299428, 283623349, 2593258180, 3319619642, 111650022, 3054665890,
                3379592188, 362888191, 1774728950, 698157433, 1196199247, 231783178, 3854883494,
                944662656, 2849527466, 18761251, 757793978, 3575863519, 1522566520, 935676887,
                2205620771, 848824700, 487422055, 3045852915, 2821647442, 942847641, 2420057003,
                4122422133, 3221662523, 3948174115, 1511012575, 2712620547, 154277939, 1260340613,
                764036546, 1258666603, 2736493060, 2398218922, 332369172, 3321255431, 3735363230,
                3130335168, 1471863620, 2350818699, 1666699401, 263809178, 225879205, 3475801107,
                41747506, 1281025890, 2613054861, 1941686229, 2161424264, 998469013, 1567825824,
                2708371812, 4234191147, 1416171194, 893931380, 965714073, 595159859, 2094181000,
                1274027425, 3400425068, 960344775, 2934909672, 552371896, 3250358914, 2867135600,
                714318092, 3437291998, 1218637856, 2592190957, 3215592510, 1154397448, 92253472,
                729368671, 1238758682, 876266136, 2532748595, 3277383450, 2002640396, 1096082385,
                3097263866, 3774645444, 143160707, 820702860, 2963502810, 2295329126, 1738773598,
                1662291270, 2109612228, 2254641499, 82516534, 3161744187, 3679464233, 1358033344,
                2995955069, 3624029481, 2392653637, 163541126, 103712334, 304309084, 84468238,
                2162950986, 4246306060, 262053879, 894859385, 1440182788, 3032139842, 3204874529,
                900031376, 4267138270, 1841498413, 3989603237, 381201084, 52369466, 3293766866,
                3539091133, 2826516997, 451466955, 1474183607, 1650264638, 55944005, 922622657,
                1648352125, 2905899264, 2376709984, 494615258, 2094380542, 1818828149, 633848924,
                217595087, 2514129298, 2686868725, 1334881256, 945657314, 3287435007, 2934095457,
                3252504849, 2198733907, 3325659469, 3651948905, 2792934808, 3967802298, 2660224790,
                2498216702, 2191920241, 1388358405, 1762131463, 3930963570, 2634828966, 157650978,
                3583842536, 3242164879, 3088432937, 1681039203, 3521823186, 2711390389, 537666406,
                376858519, 3748935340, 4140298933, 3491468466, 712574481, 2722290823, 3829138812,
                4159064276, 2077023449, 927927769, 2794552777, 478084560, 3993993319, 2103681826,
                1287040024, 3438112843, 946795562, 3787267183, 1066818694, 3032121002, 2604020549,
                768054703, 2506165286, 1915485245, 3059742383, 2693940456, 1983217549, 2556130441,
                3043340405, 2402731290, 1100667933, 804329802, 442779347, 559541894, 1528504026,
                2430094040, 380854895, 1924878482, 1122304788, 72444675, 3969057890, 714896496,
                1494340534, 597259814, 3447834580, 2159188321, 1818909926, 3314125974, 4200637638,
                2442370766, 343066112, 2918772200, 1301372507, 1469386163, 2329124057, 1063769022,
                1976395812, 1172302345, 3034217238, 2565781187, 1333195768, 1802803443, 3542179279,
                2595530300, 1298867338, 2131992457, 4008141933, 3551156725, 1910959429, 926841893,
                722213632, 3001255255, 2877951087, 951003498, 1850325282, 961774018, 2564886523,
                3851438777, 894949398, 256796330, 1959581786, 2633182213, 347574201, 1192307709,
                3562336091, 4219631762, 3241567097, 2990515345, 2420064232, 2970262593, 1461569831,
                959873136, 339106858, 1193176040, 958105449, 73335412, 414655367, 2703505850,
                3523782649, 1836045931, 2238239231, 622571598, 2306296237, 2739009399, 2235729403,
                4049021645, 1139357889, 3707063481, 3027045705, 2536246044, 3463101979, 164310463,
                3068187810, 3712847292, 1194203136, 315781630, 3635235621, 3210331632, 3843708250,
                1994373266, 1594553425, 774598913, 4048276724, 789636282, 3215162174, 2262339544,
                1305015749, 4007832380, 599420190, 2326564224, 2581496076, 1490199678, 2345840465,
                2587986101, 2223352107, 899040275, 2032648532, 492046170, 2775769948, 4025191184,
                2066154698, 3282686682, 1947023303, 877230065, 2379757900, 1421079241, 1472867997,
                1256546466, 2015075685, 564334856, 1596942756, 2067271158, 1525094696, 933563085,
                2736916537, 1289719444, 2825124575, 538020056, 1948821945, 3347107101, 2079729373,
                1572505804, 3433209293, 1344499437, 3949051563, 3232199037, 3082371535, 1331266164,
                107382829, 600011905, 2444019204, 588880467, 3129757140, 464629376, 849856979,
                423898800, 88832098, 1081264490, 984244991, 2741490369, 302293134, 264947875,
                3559707631, 3163924576, 3570999744, 3669081938, 2295906825, 2650299087, 1113300657,
                905751103, 500693370, 2100014668, 3986098399, 1812213805, 2493587511, 950742301,
                3760594111, 1988198331, 1873596690, 2635981672, 869076633, 2899275440, 909196488,
                426688577, 1424894512, 2514329532, 1429386171, 1601662235, 698006110, 3413993105,
                2770364726, 2118460870, 2739235711, 985371284, 1878394461, 2601294175, 682033607,
                3495222984, 3705210174, 363192243, 2726571167, 128884760, 1240146787, 3016436128,
                3416184840, 3975805871, 1867343818, 367917036, 2840825415, 3109229134, 86399602,
                29168346, 643436421, 855684886, 2698919498, 2573030045, 1310289643, 2632411665,
                3280803400, 3031393328, 2706966620, 757184666, 1870090363, 1089529774, 405908185,
                3185354428, 2211285265, 3069886124, 1833781576, 4109099359, 2041763376, 1412307932,
                1108344823, 2934287361, 3748982678, 997317374, 4034047498, 1589982531, 4000312659,
                961015296, 3096991478, 1531557499, 3851171859, 3915206184, 3845090477, 360397185,
                3650820078, 2671471668, 3582096970, 98103656, 293910129, 688011927, 2301307999,
                891574533, 1096467904, 1772826405, 2251911696, 257754158, 3595310014, 3071881112,
                330145073, 2003841156, 3503655584, 2500095275, 2581430324, 3750572141, 2399342110,
                793019159, 2908904187, 3048524529, 3121098597, 2426325849, 3141829183, 730031729,
                631358017, 2816312406, 2140259643, 2705520489, 249478212, 3810678698, 112873024,
                1316257435, 3829349326, 512530284, 1791055446, 977334578, 2132878588, 885903211,
                1036930474, 3730775044, 1701720120, 2244244496, 1471396055, 4218527872, 2282408914,
                2863265592, 2524710962, 3681247194, 1021315023, 1936348533, 763047529, 1864565264,
                4056081562, 1341771220, 3280140661, 470866172, 491650059, 833461558, 3663381328,
                3131958008, 3888395947, 190302498, 3369220408, 3194531411, 4268320815, 641711829,
                4145336402, 3637433757, 3916511879, 2178833411, 3528637090, 921304408, 848707877,
                74460658, 4156338096, 3758212244, 4041754743, 3783679569, 2464912581, 389100529,
                2749390487, 1272451842, 1982831993, 3205451183, 3611482027, 2856507974, 3045919911,
                787026444, 3326213299, 3742042988, 1179040305, 1079935839, 1099752002, 2208759695,
                3321518120, 625037743, 1196410750, 2539925852, 3637757870, 4076045265, 2521116350,
                257980137, 1792560058, 4080511201, 2295460214, 3430291767, 2341109458, 2373054528,
                2964565865, 448201628, 2789539343, 3122329385, 1041274565, 1354785628, 1790951895,
                3835101816, 2927123449, 1699998449, 822436141, 442731999, 253622870, 2051004295,
                2119605933, 788752772, 3859931127, 3342223111, 1766122016, 2442973203, 684168317,
                1723020245, 154195179, 3840290724, 197981657, 3225996975, 1370627218, 1351642439,
                3678888257, 2134899360, 1190824919, 2672793161, 2594374637, 4003067381, 3768518618,
                983310739, 756053185, 740998700, 170333885, 353078645, 3235856060, 1175961245,
                3465368919, 2715457241, 25728426, 1205273122, 1007876083, 2046909066, 3387646551,
                300617592, 2304621094, 1783616228, 4108300103, 586016796, 3730618599, 3601593992,
                1497117442, 1382687044, 856047991, 3446843207, 2718610562, 1648426450, 316212126,
                3770040316, 4085290555, 3839828266, 1824200161, 1558151259, 2451017528, 4144269623,
                1926063180, 3430941798, 3283263584, 3623728522, 1321248896, 2213285073, 1427594731,
                2251376848, 3156851965, 3184709111, 3145527411, 3930726181, 3730945673, 846201422,
                731360758, 4265684973, 1939059752, 2176908121, 4194865292, 4067633000, 2038583049,
                3475282686, 1326107151, 498945469, 3441081476, 2360019237, 1877755648, 2980984493,
                937159856, 1765157866, 3158122715, 2419599545, 686694843, 3369792550, 1593995909,
                3205417509, 972506778, 1749567615, 2334033091, 3965294821, 510805665, 1753849516,
                249859705, 2412460463, 2378513928, 2986924333, 2985311978, 1103056985, 1321159371,
                3294519955, 929620231, 4106207278, 4270651331, 3587554722, 2548230974, 1382890621,
                3583771152, 3542820493, 1248566046, 1451098024, 2031079077, 2958317520, 408683181,
                1322401171, 739053183, 2763421668, 2050043200, 2027533054, 3479908048, 1846767499,
                937808196, 4080393047, 618895890, 345507295, 3836887679, 3486959977, 673180241,
                2986760251, 609039359, 3790679251, 2816013571, 3674501891, 2510023654, 2140217074,
                1918529247, 1295289994, 2852923944, 2968882596, 2374994285, 2339464893, 3530889069,
                2047732915, 1888856899, 2303610, 1266797804, 2451766648, 2651393253, 4200986449,
                1305014630, 2017208592, 1878532929, 2601631173, 3905586154, 3600492846, 3185555607,
                3685032847, 2313651900, 2203112200, 2821359262, 3290447334, 2051909399, 2681200978,
                2681643754, 2030516748, 2198940390, 560748330, 3035412164, 2222960210, 928429057,
                1269561797, 1103973285, 3614653856, 2885465202, 2451268620, 3178535744, 3816260981,
                2989224422, 1462753367, 2867544236, 3638993558, 2857844328, 871331601, 3290183874,
                3357526835, 258572105, 74152014, 712442772, 1849061379, 2049304441, 1088152569,
                2456861437, 4193739116, 903105013, 991152330, 3610977022, 3586484046, 2744021039,
                2290293141, 265948355, 3393021731, 3823630150, 3404747914, 1260993824, 1021536000,
                1793676912, 1445707769, 548650645, 2471023129, 1722482397, 1598031653, 1594850289,
                3998091782, 2583735047, 4112635463, 4234758004, 61638741, 3499059311, 4255669520,
                15597809, 4087916888, 3362090556, 613317221, 3135646367, 3745275152, 4183259686,
                3005121894, 507799850, 718271315, 1030377735, 2148053708, 2062123531, 3453548255,
                4131065481, 3413716172, 1106611811, 2253913656, 1217267302, 3521325090, 3202345697,
                121303188, 2221607947, 200493459, 1536064549, 3701264585, 902459672, 2821419562,
                3071361031, 1740183748, 2204817065, 2794368953, 2538416643, 1337013619, 1616927622,
                3369284587, 306231805, 2471779547, 3343914379, 611812604, 3026990327, 1335972784,
                2378840193, 139258552, 3711256482, 1887306531, 1842343803, 490997472, 1573143855,
                2397027602, 114182794, 4008507325, 383983854, 3474881466, 1166904981, 1175073889,
                1110485910, 3196990699, 4043619493, 805814251, 3373120547, 3788327425, 1533909416,
                122434679, 3233582914, 295171787, 3657217515, 1578609722, 1948311121, 3999105875,
                926524223, 1716729206, 2647249755, 1295295684, 1398742476, 1293649163, 3301318792,
                1249107492, 3524708489, 900623614, 370317173, 3023227877, 2970370655, 438972951,
                1453396240, 1074644125, 3045346916, 3937515917, 3535500112, 15511707, 21092320,
                1808975979, 1836053162, 1131843404, 3321948476, 3302484273, 1327089406, 1414697348,
                3320224015, 3616020523, 2344106677, 3914949717, 1612099005, 3159929782, 3472685206,
                822813935, 1667292129, 976813491, 524378253, 1423919370, 1608169807, 273400699,
                4009308334, 2421399647, 2280736582, 2766712283, 880839455, 2987899032, 2225630634,
                2180172035, 2543875929, 2519364125, 3173433087, 1374125784, 3773143786, 874684944,
                2053073738, 2343241744, 1895902701, 2366578082, 3825280261, 3757786236, 487512505,
                1439635617, 1938815713, 2765729372, 3899164654, 3939832878, 4093082626, 1667022796,
                3717556594, 3576843936, 499863677, 309936726, 3673342852, 1506381090, 3981017018,
                133430156, 2132647863, 3475909759, 3665468568, 1623556555, 1085940983, 1366059584,
                3025235319, 2970652374, 918600524, 2658744166, 2146092500, 2559792540, 3027296124,
                3707023583, 739669772, 2930461897, 4224273847, 662889673, 1789566189, 2115222049,
                2306045628, 1477918479, 3477961272, 2200326274, 2369335807, 2494565418, 1530641215,
                1856911599, 1275429767, 866170004, 2745000546, 472242075, 1148993577, 798297321,
                55095409, 2748938057, 929342181, 3387367510, 2828846404, 3637875254, 3732596202,
                1557186170, 3381990740, 3426821093, 2834907694, 3939509161, 256757454, 3493347492,
                1430037675, 724227592, 3233425142, 4193858302, 3143893061, 1935755610, 3752077517,
                371021776, 1488573226, 3656803611, 1397487558, 114178560, 4143176526, 2827786662,
                699057361, 3618652178, 3599020362, 883404904, 4076765018, 2869084935, 3430236310,
                1142749989, 858868390, 2586327245, 3689072619, 3252574271, 3363933552, 3954232405,
                2841098694, 1982066393, 2919650679, 972054529, 4263034065, 4202926574, 368921376,
                2413687507, 1964998417, 1988513324, 1398922010, 672186161, 2525728596, 823408642,
                350612408, 535241906, 4193747053, 3792454954, 4256440194, 946622562, 2670085778,
                1489269745, 1957616797, 4145373127, 1921334332, 1154509428, 655312838, 338018742,
                1492255818, 2530469964, 1474144450, 2544683314, 3920946287, 2107625122, 3071888029,
                1093629422, 3957291155, 730207247, 687256411, 3258444139, 3382358863, 3665785701,
                2294231690, 2744545482, 318434024, 1834441139, 3028059443, 1871862592, 1485031020,
                2593743370, 697263431, 2210865421, 886961312, 2439951771, 898199987, 3761197168,
                124724274, 2825616292, 2116702434, 1827284511, 1436381597, 1143344478, 2186418061,
                2883101965, 378396187, 202806650, 3493016233, 3939805873, 3409895940, 3163956514,
                3373046225, 2392603855, 2395190604, 3887042662, 966537920, 1465769860, 3846762642,
                1449184266, 3361962069, 1673370925, 2958808530, 2121780302, 1683265706, 3285605311,
                3961408003, 1543405091, 3037678236, 2408131699, 1787522757, 532868180, 3660710907,
                737195751, 2579810447, 96617884, 2062138541, 2841404191, 1126197758, 772281033,
                2192259642, 4125174714, 1587858335, 2227253460, 3228097564, 3808342348, 1930401381,
                1718652876, 2762016003, 1896072752, 346749331, 3331590536, 2680437094, 1358381816,
                1219099791, 2113769757, 514300773, 1510306590, 2620476138, 4192783798, 1375258173,
                1517398070, 930184940, 3398516162, 2751947685, 1774049194, 3212098936, 1853827081,
                1551809481, 4006909361, 4078910330, 1093611256, 3546035934, 3855068033, 858010820,
                2321366198, 258458600, 3514203269, 1963201552, 1421264067, 1283367171, 441633157,
                1845368475, 3362267277, 1133521382, 3051588901, 3331080283, 226988630, 2950015695,
                1136423795, 27821883, 3776906112, 1472027322, 3101124287, 680641770, 1610005117,
                4267303048, 2779573177, 145212881, 787862669, 2540284848, 2542323265, 3107232433,
                2803967209, 1022688977, 2623452425, 3494748854, 111839415, 3449508061, 2614845097,
                4279526745, 449560047, 382457375, 3060479998, 2948798581, 3774205704, 293384035,
                1606331620, 4042994563, 565887987, 1141791257, 2033992531, 824325187, 3271632932,
                3344669331, 205920938, 517437389, 3974257596, 1307157514, 3477428627, 2698403329,
                3240285673, 1192057106, 1071891060, 3673531594, 923453309, 3687423291, 2724369809,
                2003024538, 3800279676, 2094946084, 497354294, 1824040717, 2958898075, 2581987757,
                4122751267, 1424305065, 1354551820, 4236177572, 1793895565, 4030145142, 3660321673,
                2018007866, 4213196204, 1668717301, 2070438973, 3539891506, 3346804175, 1928891907,
                530432338, 1978654608, 55791536, 3348858146, 154895971, 292221119, 2987688682,
                1164399118, 2430342431, 2428527198, 2496113248, 454730991, 1971063328, 1258681134,
                1813932199, 210407227, 3340111973, 1084627479, 1064216514, 4064722485, 2215309052,
                2993288075, 3146502847, 1831511244, 2280232151, 1590405456, 2200667755, 1628965450,
                2761404145, 3717575260, 3798572094, 493632921, 255074552, 2384177829, 2778689435,
                659238302, 2327047407, 832728694, 3100546768, 81046048, 2887377108, 578242373,
                2799531209, 1295083006, 3419337072, 1345094121, 3216919515, 2343387385, 4153152162,
                2161067647, 1022049107, 119048368, 3916106008, 565831742, 2794988440, 800430879,
                2447084785, 453855289, 4132400296, 2669036842, 296861197, 2202167592, 661965250,
                909220018, 1527898574, 2667058573, 588621789, 1998764042, 372858612, 1477125875,
                2647615554, 1983954649, 2388809988, 2016597037, 1089073774, 3433137953, 815616715,
                551673059, 894250325, 1559189236, 18389714, 4228703818, 517820013, 2111620514,
                2544469443, 389336009, 4175846461, 1243110116, 4108914066, 1211738389, 793931364,
                1801248621, 472881962, 2841706465, 1274000666, 2209746053, 2475239540, 275807348,
                3274559590, 278907706, 215711806, 461479011, 35786016, 2256077091, 3898546316,
                2586194294, 2834624674, 3854613059, 349247533, 3330821143, 2484986035, 1118490626,
                109596634, 1102082878, 3639363802, 4123644328, 583993094, 950048702, 3739148555,
                989914794, 1878111588, 1705085869, 1515179520, 71552189, 2889476532, 289469054,
                3359213779, 998546497, 1617722977, 4210818802, 2212383714, 42057675, 1064166190,
                3128172126, 2743461504, 2779205797, 3839262319, 2645572700, 4040270163, 1638247754,
                4271726795, 470879176, 3889433544, 3751756626, 2995468452, 2585565812, 999116819,
                3508547190, 2161381426, 1016925093, 1000171248, 1494314082, 4022087643, 1102083259,
                4009453582, 4186192569, 3212042270, 2178496725, 1460473606, 4018333955, 2005109618,
                4283613923, 2169746853, 2524549630, 3509522975, 720025572, 3624177652, 1590493281,
                56530035, 1056103439, 3171190085, 2733026440, 2459096713, 2043383257, 3089026843,
                159409060, 1417617528, 680269607, 3936036271, 3533484516, 436828291, 1110616994,
                1409703119, 3293167841, 3330632855, 1806501600, 665466700, 2138584065, 1134927945,
                2636023322, 902992604, 1467516266, 3163905998, 2748534143, 3338909086, 2773650360,
                2351882854, 2618618051, 1307786697, 1329236348, 2960590099, 2274451740, 2016354728,
                2239789753, 3033989968, 1384792327, 922785320, 92821760, 438784782, 3757769042,
                567367146, 1003466644, 1726035240, 2262967263, 2726288557, 4095316988, 4477560,
                4043153559, 3917834466, 2042703909, 3964168936, 2533496967, 565827498, 3044782857,
                1426618089, 50646973, 2813326961, 3628087749, 2907344581, 2537993920, 3598160970,
                1028651184, 1717080965, 3269360889, 570217843, 4186276351, 1082213825, 926440426,
                2070827707, 3294185079, 2449173840, 86727007, 1435055586, 3065557879, 2351425539,
                1286878886, 3818639923, 4286969439, 3271121683, 2981208936, 471223863, 1362601479,
                3999136827, 2947233786, 2942179272, 4165102641, 1585257917, 3601973938, 3372610933,
                4045268939, 3936571497, 2375540043, 1711605304, 2745105944, 60319076, 846801314,
                3244316989, 3280757716, 3106180603, 1876680557, 2199367803, 2589208677, 721055873,
                922630059, 1548218484, 2646172490, 2856162971, 861677714, 2013479067, 4125064047,
                3135259174, 1987391034, 1612240980, 3901607644, 1989084918, 4064704523, 1617603086,
                3624548836, 4228236160, 951778179, 2258253293, 2844302721, 221571638, 45481005,
                4115699132, 1497796421, 4267752533, 891937890, 1035077096, 2209048878, 2922535041,
                3098592820, 4042474064, 1697703755, 2399789403, 424377247, 2260587022, 2193368797,
                600282097, 2742041813, 1336804874, 2650658716, 2970310817, 4045380756, 2688502007,
                3926497235, 1096372043, 1338172683, 1237644267, 2798132618, 4214417948, 350223564,
                2294825555, 4042231686, 257708548, 677230641, 1925625022, 4241883500, 2695106980,
                3028571259, 2887580741, 1180867256, 954435786, 1057867101, 1558741430, 3348329056,
                866764562, 3344476407, 1111689088, 187045741, 2391307551, 2959008045, 3948691948,
                1319187960, 675359019, 2984386771, 1840667056, 488976976, 2325589449, 3007129454,
                408435318, 3694608179, 2542389000, 3687602293, 1123412948, 1374633563, 2112015185,
                2546930077, 2404921048, 1414947884, 404979651, 3135158757, 1510573459, 1710196771,
                2713693744, 1070462689, 1213959292, 2534266780, 661012500, 1874896877, 3271767429,
                3275230980, 4264750161, 3572375081, 1579194793, 1742321855, 1961359715, 1488092333,
                2831928507, 2798998762, 3843198441, 3176393593, 3214277128, 2393328325, 3566395385,
                2774611529, 1428232834, 2110323330, 791378925, 216120541, 3861236968, 231370989,
                2639794499, 624599731, 1219997589, 3787521330, 604314725, 3461276607, 4050374542,
                3642233765, 194872120, 189897179, 3261758346, 469130126, 3340624526, 968498604,
                355999757, 3837862051, 3904146415, 2873860611, 869804381, 299440640, 3520424116,
                467765288, 1174495386, 3568117911, 3678085175, 1146375992, 2008699612, 2353114304,
                1071351122, 2303361684, 862351484, 1648692826, 1224344365, 4272397711, 4083818503,
                513078016, 4124881085, 1496441405, 4009634631, 2028357190, 2064925965, 130259652,
                4158281641, 3339267074, 2346473402, 3040620475, 302567288, 2098529576, 2557666596,
                3815840311, 683165531, 2914308335, 4044834414, 4252332010, 3278908623, 769564314,
                3697741763, 2167955348, 3203861471, 2126706587, 2456367636, 3772712294, 2092879871,
                863396039, 508902802, 2793550452, 2693435437, 1391736628, 1157153689, 1409894468,
                807646877, 271880092, 2088023280, 827665392, 1435968155, 529346767, 3332013609,
                1707352770, 1166889197, 3084999870, 2984300978, 2396541821, 780406104, 4069234239,
                1386380802, 3372735777, 3654121391, 2926997272, 3418571197, 481723726, 156396805,
                3225545154, 136794862, 1845380077, 1434076416, 2469706378, 1818524696, 1020300445,
                3961599464, 1347758807, 1580244193, 3105582525, 4224693377, 85103854, 221740682,
                583809331, 1876617658, 190405249, 434449658, 1905985766, 1004630479, 534307076,
                3645762882, 1516085517, 1235003680, 1311064464, 892154476, 3004766628, 1015993206,
                249377204, 3871066261, 2893118754, 2466150031, 2139448418, 4269228198, 512105997,
                2790471018, 3932220953, 1659370949, 81403428, 356737648, 4153182358, 3806788782,
                2102548424, 3227939175, 3000515829, 1141241618, 856180425, 1217257095, 291825148,
                29808179, 946834904, 2727274069, 2659003572, 2778333831, 170117914, 2900631470,
                1650666906, 3004242406, 3422959408, 4060912839, 114575898, 1842399219, 962270342,
                3676883280, 2930727789, 3839654913, 2161690357, 680073756, 1898043108, 3687931421,
                3644299988, 2354196541, 2450591233, 3155696561, 2851736135, 200426970, 3098061401,
                1143058922, 2859561130, 191439515, 2380738368, 3453524409, 243865967, 4204885436,
                1854308264, 2651192364, 215699541, 3667750969, 92453718, 2870815953, 2350285294,
                2860516750, 180810177, 3523383186, 132903803, 2874303329, 1836934344, 1769424123,
                2074849407, 2436859811, 796104248, 3837530147, 2693412114, 865664534, 274559048,
                3156205156, 3318629936, 725125344, 927243554, 3507933982, 2771564181, 511265012,
                2360434429, 790740438, 67312079, 2232773510, 4159603181, 2666116581, 911742448,
                2773650983, 1537336504, 1123767928, 1245244759, 755395243, 2230363192, 2311150865,
                1310905897, 3635633537, 915322772, 3309277755, 4102148078, 2737064941, 116557272,
                3395885355, 3492962591, 2154943050, 4283933288, 1187022256, 2337945824, 2140138623,
                1243490701, 1664618771, 2723135057, 477750234, 519210867, 990489192, 2010998441,
                2405731553, 2328924508, 1027928316, 1471509675, 448099363, 2464256239, 3912226872,
                2086652210, 3206856094, 7300210, 1998193697, 943722522, 254166499, 2111943630,
                1127624858, 4001349711, 3044456286, 1531676981, 3763383233, 523495565, 625810415,
                4285822939, 1882476395, 295164493, 3251126307, 264629432, 3058573006, 4222655455,
                4193922449, 1947989063, 1625940097, 965463176, 1540545082, 4269802379, 3096278327,
                1917287030, 811928072, 2021954213, 3352534952, 2069143641, 1011142292, 2013199459,
                1983584044, 3378795515, 1073003188, 3542525645, 4256818813, 2893719471, 3997051418,
                2019353119, 3254985548, 3031865, 313156230, 1875615965, 3520020372, 2398543168,
                269701833, 3585027713, 2172521845, 2365672940, 1148380788, 1918167676, 4244569795,
                2283551383, 727538472, 1530708679, 2512271941, 2142650333, 4236443712, 2249548500,
                66575576, 3430978190, 4160214541, 2373906807, 4038023459, 3358632548, 3594956519,
                1035453391, 4145796024, 1156514907, 1246913527, 2241586732, 3979448944, 4224967589,
                92230190, 3201011336, 786008427, 909198170, 2192884584, 1418258734, 2169216084,
                3388716292, 3273421687, 2807726209, 3178922474, 1243431685, 1921275148, 2464361452,
                1596390320, 776990882, 1812414638, 437620977, 12213113, 4179461440, 498724925,
                1371593337, 2419938007, 3418848663, 3084795577, 2099025380, 450764221, 3933062083,
                2894530307,
            ],
            &[
                169261212, 97019657, 2010098423, 3060596318, 2200430153, 2869077638, 3698742283,
                630687593, 1344435198, 14077903, 384687684, 536665320, 33712500, 1110160663,
                1132275258, 755052985, 3538444513, 2168204486, 1431872026, 2944859263, 151411172,
                2055104382, 2850392235, 3204051758, 432306835, 811337238, 2814548049, 2643221792,
                4046346365, 3018313224, 1385088585, 2725111255, 3634261412, 2210377846, 1304209844,
                3231053663, 931121572, 3651371093, 2734237688, 1736817020, 1266539929, 2040761720,
                580656351, 672494919, 1095514416, 1562672852, 4036170315, 2378771331, 3846827522,
                752910893, 130805753, 1015401095, 2737607490, 4133741161, 410356140, 2533339641,
                2271585092, 2961265479, 2637760446, 2158261474, 680899708, 163993353, 2997711760,
                4215808749, 3723292800, 2192481625, 2556236735, 3085843169, 3092082759, 2465630516,
                3247488074, 1705364646, 814558461, 3702622021, 241980441, 4140873510, 3885766880,
                4012271283, 3999222517, 148661894, 1282933302, 1770982817, 3186160246, 1901652026,
                4066201988, 2160372795, 3268508049, 1795046973, 866721742, 2075628922, 2807956783,
                3295312433, 1999667844, 1333068683, 1149723459, 72589844, 1092560851, 4282555118,
                3510140080, 522259828, 3385050651, 1937511732, 761458722, 1293935175, 2214664794,
                10242119, 3063498224, 4222607771, 642844662, 1351241302, 1536474598, 4122373319,
                3737795066, 2617562249, 2974564444, 3058044388, 2028712828, 1829321567, 2548853558,
                2574521694, 3312702962, 1865006140, 1501367075, 456299067, 2942841642, 4196219184,
                3498196346, 2569794425, 3802868405, 356077732, 3430096358, 1630488232, 1667012225,
                1212294536, 538718198, 1407896138, 3172899401, 4248307113, 2864880507, 2852924732,
                1281650298, 3789759257, 2435025122, 2392372329, 1516476552, 3800421041, 4033823692,
                1936348564, 1434124331, 3273281793, 3592180633, 3962067590, 4287698149, 1519025535,
                3563650753, 481915643, 196362100, 1760975324, 387341865, 4218232910, 223829427,
                3264588279, 2066845936, 1898648367, 1048579696, 2407743538, 688452394, 1749433021,
                1355601447, 820585203, 1020713467, 4173935621, 3483593644, 487816899, 93580477,
                2944973103, 2300781257, 3103447323, 2951726120, 1970055032, 3830054424, 2489896194,
                1046031109, 2245455797, 1867332719, 3150097735, 487517766, 2966736739, 4061236172,
                2438285500, 1032477139, 364267316, 2952150398, 858946610, 1472690045, 920469949,
                2209121191, 864450987, 3106150723, 2969726486, 2845130450, 1849358041, 3005036358,
                4235423404, 97347937, 175921091, 1348170234, 770199516, 365087161, 991425113,
                1533529912, 3818277147, 709418670, 4199014005, 1109879416, 3319928498, 757645463,
                258144610, 2336236633, 650087839, 147117363, 812176287, 3720773532, 36900249,
                2987629201, 720304279, 2467854235, 3815514608, 1066410164, 2802842865, 2173716894,
                1982188941, 1128651664, 3558904900, 4058483597, 3270204162, 1330681110, 758186224,
                2172595164, 1448125003, 2173830084, 3215033023, 1851182505, 2713002256, 3835030966,
                2229814851, 2233929591, 2244641624, 1171786638, 1378913849, 1556728648, 2949947972,
                4074487734, 1505921507, 748234195, 3600080354, 2028262296, 1470704954, 3470426878,
                3122530841, 2410213039, 3408701679, 2501278564, 2084471422, 4258561313, 69281285,
                77000318, 2036112677, 3928311555, 4243023562, 4014794170, 2383505475, 3292068789,
                2907501855, 3311234451, 1145983385, 3319882794, 3653205285, 3725028918, 3729871024,
                1390021708, 4222789914, 218974342, 3821348650, 1368295153, 1279495709, 4278066442,
                3297583909, 1821526324, 2973731013, 1041979214, 489278942, 2124166216, 3405155013,
                2219346020, 1318848327, 1829360017, 4134292239, 1354535698, 3077327835, 3264258673,
                2012426550, 4177109126, 601960462, 3163195869, 1445745889, 898171740, 827204772,
                2258489433, 2062776641, 1021468635, 2390809492, 534241200, 1797102980, 1845684576,
                2118715856, 72319402, 413085624, 4008263605, 632503759, 1686868824, 1754787516,
                4294687573, 2013002089, 803099033, 1273543325, 4245916534, 3037861929, 2991538180,
                1799210280, 3000981395, 499844317, 2877414269, 2329779164, 4220434292, 562828242,
                2741213468, 1944223012, 1861372602, 819033522, 2681839553, 828991290, 928793250,
                2344560370, 673594463, 3751423502, 3807439725, 3979850161, 3547495108, 3707143288,
                1858125101, 4142196157, 2373721462, 1518142446, 1548054547, 442881448, 1738298750,
                453949092, 1970124231, 3424857338, 1820967071, 1736209613, 1091836295, 2809423605,
                3481631497, 133425586, 4015083333, 1984612975, 923514530, 655227462, 2775293769,
                2712696699, 828247566, 3829922109, 3871571738, 675598020, 555032496, 923212291,
                639720389, 2919964342, 4004944983, 2217510339, 1925954172, 2418913014, 589615454,
                435489824, 2245278741, 3491912204, 3342199322, 4013531036, 3426342754, 678591516,
                4258986026, 1682355128, 788886889, 2218536681, 1317056760, 750073663, 1793777336,
                518564031, 3108963423, 1523426771, 1198654802, 2719985938, 521075618, 745829783,
                2389591028, 3716963027, 2238978453, 403983408, 3781517404, 1836423104, 2198030139,
                2302949603, 4173024897, 392102066, 930721646, 1094357046, 3808728794, 2852832081,
                2314321478, 150826424, 711452896, 647663402, 3016271507, 213728995, 4127389886,
                3720742331, 874266103, 712172019, 1315187042, 729949129, 2284688094, 1817849857,
                2709846568, 3092049463, 1161688426, 56968775, 2489474475, 1404650164, 263784267,
                908154757, 4290307608, 1375864071, 2725649740, 1247176526, 3679406490, 4236673427,
                413662550, 3792331497, 479205991, 2852263799, 1042720125, 3950417785, 1001301598,
                4015555465, 334867024, 4253731418, 764002502, 1119482483, 980052531, 1558968415,
                116027612, 3045193528, 216886097, 3377362470, 452394673, 2745755946, 3996292608,
                2672041571, 1369242942, 3549593046, 217715905, 1091134633, 1780559106, 2338755733,
                811628867, 314006903, 655439900, 1803434434, 2061142553, 1119728935, 3070087224,
                2533572837, 1408968356, 2424595522, 2737313431, 1127783352, 2637282584, 641318539,
                2988938943, 1101438454, 354997500, 1532790146, 1946117468, 1260866996, 3198198219,
                10975301, 3918093929, 2825812082, 538313674, 1768430706, 3738638001, 2667074884,
                3358956925, 2410322745, 1076744040, 375884360, 3751703965, 3161863052, 1457146467,
                3832520550, 3233502144, 3669902726, 245281689, 980364295, 3800611124, 3491342490,
                579797343, 4250558994, 4153483609, 4258531200, 572001069, 453700369, 579285386,
                1726550780, 677036467, 864962793, 4131217567, 2169450313, 3795432981, 3369719591,
                1347751707, 2987508248, 589435126, 849216358, 80245949, 3523392244, 1329490478,
                2846195592, 1283476607, 3988324775, 1226554934, 2524758910, 4115217052, 264772855,
                846505996, 1974293917, 3071402363, 171606341, 80617760, 1218055661, 4202796081,
                1431247412, 1205540953, 1035047106, 1562320516, 3549999782, 1724161454, 1280483311,
                2462179501, 604829659, 768655290, 1447536294, 144890904, 1718444137, 253182878,
                2781922595, 2107474328, 3912782422, 2132300849, 252022782, 4071842247, 536916710,
                2410520005, 865716811, 4217017985, 3405855693, 489680629, 4018805509, 1851896495,
                3292625358, 864499941, 3240462025, 2075476643, 938753688, 3665130887, 4050325243,
                2454104972, 1298917629, 1343787954, 4100160453, 1768484371, 1266082612, 238720905,
                3180785770, 867009796, 2035104678, 3520470624, 559830721, 1459820613, 1707305731,
                2269616662, 1576379671, 3903748424, 1436765334, 3048417647, 2253458581, 3416118525,
                1271698793, 3601159380, 3271921040, 2369386936, 1192728003, 1122107959, 706191870,
                3978806926, 2539808936, 2998649492, 2864374813, 668066219, 2640264057, 1281805203,
                598078394, 1301198855, 2947966501, 2555954897, 1999895199, 3567728711, 2965019228,
                2511728126, 2956114261, 2995201734, 4123471616, 457926115, 2385329272, 4012223776,
                3469911190, 3267267247, 432918904, 2419068123, 3755513135, 2791185744, 758833690,
                3119576271, 112374229, 3625202266, 315354366, 1568978273, 1708623705, 2064937453,
                1124067903, 513216095, 3600324289, 1796860007, 1650966402, 2904683505, 1536173911,
                1194264833, 513210391, 3723175142, 735565798, 1834230448, 2261021807, 3908447305,
                1057830830, 2776652319, 856596767, 2408743106, 3248755512, 3799111617, 1459677314,
                3511723346, 499123179, 2708042922, 3492700205, 305184657, 1157916233, 3495088020,
                2259888881, 1084374759, 500610066, 564964925, 4131273965, 4039883025, 3168377277,
                254683919, 72093362, 1633531730, 1268664506, 1996711604, 3890322048, 3880828363,
                3683271754, 2649717281, 658488513, 3017375859, 3323992513, 1910609388, 2895184148,
                2111754597, 4005561580, 3122346347, 2993430208, 1199752820, 3108668091, 4218258049,
                2822905539, 691305232, 2961667717, 1592996194, 2452161541, 50809045, 3557234166,
                4011426161, 4041745783, 3204617417, 647976586, 1613272265, 891115055, 879063893,
                3810802553, 3324904075, 988210689, 3334787768, 3235291491, 1406547399, 1509369724,
                2678898670, 996757247, 621865039, 1415546535, 1635533836, 785967648, 3519780499,
                2306303512, 2608109709, 359246803, 794297329, 1984469432, 860434555, 4188210328,
                3560452183, 3324289086, 1341545766, 3210361014, 1550450120, 1999237534, 3419330139,
                2052886381, 1713799546, 3838907316, 1300491982, 2376293684, 4058197568, 3717833550,
                917200668, 237670602, 3700755001, 1177316153, 1660105335, 260378933, 3544708874,
                2760016197, 174001204, 3662445679, 236165327, 2352314383, 3876396412, 2842836038,
                680492466, 2660856178, 1251120958, 2853698773, 456537263, 898086106, 2998300997,
                377764496, 1543994003, 2189371744, 1255653737, 4002649460, 2687989728, 2526120649,
                2771515626, 603147406, 1301287096, 2424823104, 4141553409, 2594874275, 2043054687,
                169776785, 4218374604, 3662370269, 2905747555, 1746018134, 357240197, 502016893,
                1474347041, 219646155, 483088078, 3514453507, 3217126533, 2412744587, 1413706460,
                3659693851, 2763885745, 3512330896, 3369579836, 987519219, 1511534086, 2988205816,
                2061616536, 3145760504, 1795367921, 1255779803, 2379607545, 410665900, 1407996847,
                3494698253, 2200535289, 615174944, 275789962, 2965302786, 747758065, 399661,
                664465050, 967613913, 125247217, 2794499891, 2702820795, 125088830, 2440619784,
                291501124, 1302832003, 4097601407, 3942447907, 4190666347, 238558373, 2615163708,
                650543751, 583615336, 274528855, 1116046575, 1191854544, 500294666, 178065110,
                1136050609, 847527472, 2214527390, 1376266014, 536073983, 1549513725, 49053874,
                3854314141, 665952982, 3072097827, 3377813806, 2214813699, 3972044240, 706712408,
                1694621635, 1547391041, 508243162, 1582084361, 3109229183, 2354675221, 2691073826,
                247654849, 3300964107, 920809617, 355328468, 1689727187, 2482106376, 3398454675,
                4214185480, 1920179926, 3602682077, 2103634868, 465683507, 1949801248, 3203673832,
                3614462347, 2628322849, 3412024211, 3058963268, 739635165, 168941792, 1084170381,
                3020427408, 3027788526, 2767887509, 2350507515, 3794342601, 2701457973, 756909326,
                2148742735, 4276521984, 372610377, 3595171701, 1430047080, 778291005, 4051284928,
                3770991142, 4020832961, 876293685, 4204224949, 3328204949, 97989228, 1597721355,
                1310541270, 1187240092, 362259278, 1473083151, 3673028806, 2288833254, 818795041,
                2550563052, 11964728, 329354443, 269689053, 2202758728, 640290438, 2319494670,
                2820841677, 1991707137, 4003582526, 1987274151, 685337695, 3389490388, 47364191,
                2019974308, 1796560073, 2242052145, 132168074, 3664740900, 361328363, 312012382,
                3787517201, 2134021202, 4221983070, 3092531591, 4015482354, 2383783835, 2935132128,
                1073105385, 1051702314, 188642192, 1840755701, 2194015262, 2970833720, 3418173712,
                2252291293, 896755811, 651041213, 2225339647, 3799501024, 3424383062, 418261680,
                219007048, 686407479, 336359847, 815174575, 2476150653, 395070317, 112893476,
                3236677850, 3043491435, 4141851912, 1741291050, 1447570359, 4060099803, 2025408789,
                730965869, 421345011, 1940000014, 3939429382, 955964946, 771910038, 423132332,
                3928015638, 3828592830, 3062230638, 299535389, 2287150162, 2665328140, 1340823063,
                1797607489, 441789856, 921536914, 1038801198, 3684047183, 1436606597, 3683958696,
                2132905377, 2812354533, 710326258, 2053698821, 4157794269, 3865258382, 3434923942,
                352173601, 3698116441, 61131962, 1831719345, 4924961, 1843981357, 700878228,
                3450757256, 2056793283, 999928739, 4282817569, 842381781, 3597643631, 1773109621,
                3736994722, 1006105110, 1984548595, 1549955286, 2252538952, 2134791896, 816830151,
                2573239801, 1318436425, 1215534200, 584845949, 1503621472, 2135150542, 1205539732,
                3946745009, 3379992771, 2693969248, 3372345019, 2830977120, 1615941834, 1665464385,
                3189732495, 2091398892, 1420883664, 3478609997, 3624116279, 2008982698, 3436952257,
                3091084695, 2110787732, 773082120, 3133624299, 2225398192, 4086665432, 2754332922,
                498589840, 1032159204, 3615509977, 483862860, 413051959, 3147549436, 203215668,
                864863242, 2260028710, 1792523541, 1886034938, 4117866346, 3907544391, 1792457196,
                2413537412, 1123222281, 1881205239, 338064304, 1854384474, 3567492850, 1936538538,
                4003096252, 1552683498, 4245128768, 439398918, 4170165755, 4159254873, 2096750598,
                2291173747, 402334911, 2054654988, 2484919497, 3081708303, 3279239445, 108764284,
                1057932939, 3308339365, 2207596480, 1449496569, 1696511884, 1834486206, 3308019401,
                322787272, 294989059, 3308250023, 2710211918, 935435567, 74574252, 3918706572,
                995180801, 2743621566, 2564939789, 2233249899, 3800182678, 3356656333, 3735865703,
                119633377, 2083925509, 2463491366, 3923690669, 1079463335, 3057356162, 967864883,
                3852737202, 1231024601, 1966227476, 1364301520, 3559098941, 2224735562, 2140723583,
                2954206392, 2792110922, 1612283936, 4116236064, 3975950903, 1906705634, 3397946250,
                3425584528, 933399048, 2654489483, 2465523840, 265969028, 3944317432, 726011247,
                4165272642, 3707806595, 1980231873, 3916598482, 2208019315, 1055848462, 1396382428,
                3565198447, 2259626619, 1629781689, 641856706, 1567056255, 4157261705, 3272229411,
                2887326518, 4112471500, 3407005857, 2165760760, 2245192644, 2387432860, 2948884081,
                1894578563, 4051596444, 4264496837, 1037225999, 406391535, 3697484571, 987529602,
                828660915, 3322759290, 3336752646, 232274025, 1425642089, 790855420, 559144975,
                531066167, 4111730690, 3535290287, 2382110606, 4012402298, 1708817394, 3887552584,
                256426575, 3468310594, 1318238511, 410028308, 3076830889, 3142568555, 617939456,
                268991245, 2600800869, 3068613261, 4159995171, 1629469694, 3607924061, 1126466101,
                2409909797, 2602008720, 1676826993, 101555029, 1543891625, 1425841171, 1381575655,
                3157322434, 1502237687, 1765553298, 2196226984, 2144309744, 1920733185, 2417117835,
                7914446, 824040601, 3658371011, 3764653611, 3882418008, 3131863018, 3734042302,
                3886679853, 2046795709, 2102441413, 774651843, 3153107599, 3441128733, 1816520377,
                1550198216, 296013733, 4204605434, 1702162229, 4225881387, 836166567, 2965646145,
                166521501, 271613715, 1191068489, 3073239720, 2533295935, 305967434, 2025841195,
                578863608, 1347597556, 790549374, 836951743, 1016821465, 2546000514, 3963969693,
                3758198764, 3154272861, 3997249588, 3488724105, 2694683883, 1672107026, 846981198,
                3208072415, 592509645, 2825113079, 929097667, 4017105126, 721112884, 529877910,
                1957406684, 3590512653, 2256381674, 1326953526, 4145690793, 299038714, 312037364,
                929796369, 4076045375, 232059136, 48191462, 2609783390, 2793032740, 570795792,
                2196568883, 2379554324, 53898640, 2778733606, 1650134377, 1356622380, 1413120072,
                1497564725, 3121339218, 2339710583, 729121036, 1226260959, 310416282, 1068015305,
                2988960158, 1087871955, 3901334475, 382701389, 3419394711, 1197193940, 1145893534,
                4213285962, 2358861326, 3998800674, 2393159007, 3284066750, 3802242851, 1313120318,
                1363843377, 1864600319, 63244244, 4008207492, 25997534, 1096534622, 2512363231,
                2822756078, 1502763806, 4160151918, 1229692802, 2027837957, 2682155120, 3622762160,
                2350798073, 3364105528, 2242135190, 2198683774, 3004743957, 341703900, 2063637675,
                1872726597, 369384611, 1228961924, 1174849959, 3429920072, 388013006, 3711844897,
                3458411733, 558446990, 881810677, 1612852481, 2341850382, 2615440366, 2756996485,
                69608033, 2051792699, 879427566, 860445240, 2799693963, 1529796847, 2693841749,
                2241425469, 3509318038, 2310074766, 3970361365, 4137984377, 2640268429, 1179754608,
                987219549, 4018070677, 997817346, 639088040, 1490544586, 4291233088, 3379985752,
                934787373, 2545981495, 1791682456, 1831741597, 674344163, 3222780829, 807041479,
                3982102682, 4194907534, 2382110434, 1305255837, 602454212, 1959169268, 3491589095,
                4274490818, 1407854427, 4285073354, 3181358931, 1413064917, 1136150007, 1567762961,
                2613870921, 1915481443, 39052775, 1638846611, 1514008892, 3881142793, 1681639953,
                851015338, 2913922957, 3768834738, 2690174502, 3822191500, 2710964289, 2884125750,
                953870770, 81197866, 877172811, 2824832010, 879150580, 1996758685, 32277063,
                3986128633, 3479151959, 4227758436, 1856386632, 1937580142, 2006837739, 1272263848,
                58649929, 364183573, 2651849529, 514447392, 2336954024, 700118423, 3608261942,
                530454875, 4232722227, 3245016835, 3107778289, 1294145943, 2322823463, 3200734771,
                3997000237, 1394603080, 1521731730, 2099402018, 4076865358, 2952642380, 1998818851,
                1113503600, 1304568624, 156004729, 2524292645, 2196657034, 838089549, 852921142,
                318774773, 535471800, 3303288655, 11720307, 3920050060, 1828240211, 524002979,
                3048477395, 3534464096, 3963965163, 965647042, 1254821357, 1076701084, 2092634935,
                2227885879, 2211769441, 4149106576, 108232835, 1044586194, 907173178, 33459410,
                1802126318, 2254795011, 2504657317, 2646373524, 1874357148, 3605965029, 1140229111,
                683774180, 1809530666, 1065795157, 1426067459, 579103711, 2163604958, 508216473,
                1358516833, 1857560558, 2375569242, 2924422020, 2493986279, 729547351, 54833281,
                3560718296, 2168295149, 2812939376, 3488876993, 4293921905, 106256919, 3235972461,
                571493829, 2879800589, 3939771200, 3173435794, 1528411227, 2644147095, 3099154467,
                3780711788, 3974962776, 3038048098, 3815481320, 856676641, 2816739527, 2163011160,
                2429846008, 2574499461, 119664881, 199459917, 3413283247, 768994425, 2761139109,
                287075146, 2513460954, 3946445315, 3896813683, 341660798, 3771058010, 1948705192,
                1023508457, 2862084803, 1760749154, 1666275298, 1181277511, 2612599583, 3323548077,
                1187252244, 775332124, 3631948959, 1634443470, 2542063810, 4141442087, 3558732104,
                2216948373, 2165466142, 409718746, 4038251685, 2652525312, 3147566726, 939782543,
                634685444, 4171370098, 1242056880, 1509271389, 447023005, 63439402, 753908776,
                4007669178, 3612271563, 2941872224, 2339268139, 3167669951, 3980741106, 3989254815,
                1392085272, 2825617612, 956934399, 693542348, 388806851, 2961997752, 3537162743,
                165236021, 3568156596, 2285015214, 1348352477, 265706007, 2902421909, 3911380709,
                456741743, 2843416287, 381948901, 1723053624, 3637546635, 488437141, 2056924346,
                3245456457, 3348178830, 907978865, 3949328523, 3105952503, 2583910709, 1005480091,
                2592364506, 4212210190, 1616794263, 3063505007, 592323106, 1258310856, 3641811727,
                3350224634, 309905898, 4040991440, 980414012, 177467055, 217549578, 2392128580,
                296868908, 1084522467, 2436484542, 1317628251, 898381082, 1111060884, 3948408286,
                2371873032, 2226259852, 4058234570, 2076955067, 2121848190, 3826134000, 1986232314,
                3499478289, 1151387495, 787568209, 1612098354, 726090716, 3069387528, 3976962630,
                11690122, 1514834375, 2808050579, 1071588017, 2715771085, 437010571, 2212330428,
                1453821701, 3145667973, 1767906839, 3146700047, 4258425268, 3254514728, 3407434515,
                4223362441, 2099546808, 830143900, 697083215, 2751907755, 1322473957, 900523897,
                2264299413, 1819302867, 806605230, 2799217353, 4141245107, 2305511413, 2796286940,
                1505198926, 4225291875, 3419813095, 371941609, 894282352, 3479699537, 2884117847,
                248087943, 1920569071, 2946559495, 712099571, 322392405, 3179639943, 1574300690,
                2867358013, 2572247714, 2563009176, 2358102551, 3259794641, 3054031241, 565630085,
                599078879, 862629306, 1222169625, 2841254325, 2978934915, 1803471284, 622464338,
                1354864342, 1901488888, 3205841023, 2319170073, 2904669324, 726542457, 1875424943,
                4281642921, 2733515426, 3395862316, 3074062952, 4007451622, 3514683310, 1293909285,
                1564336286, 2757910036, 3740249853, 2635743866, 1699257190, 855262188, 2797562313,
                2308409571, 2253291408, 3845709526, 3154706518, 1770564626, 2996626195, 1879190681,
                2386507312, 1705385750, 1368311878, 3107016242, 3053769309, 1152662782, 3526989793,
                1902149904, 1902713811, 1304553510, 2290942581, 994180644, 56936189, 599820797,
                628353940, 2338146967, 2227276356, 3246471204, 2978741305, 321966222, 734612620,
                904416002, 1929536581, 1325321823, 2240235157, 3921782780, 2377955413, 1963840910,
                1390622328, 2216413136, 1687027811, 569207696, 652619399, 4260710017, 2551934365,
                128469616, 3999651830, 1649824406, 2553389567, 3992265912, 867004062, 3467311621,
                3883161582, 3171530997, 4135113186, 2525098373, 4127647431, 1239629070, 1752753702,
                2554081705, 478672844, 1252671738, 401028269, 981568864, 1532744660, 2664413649,
                3073701514, 328844958, 2280704902, 2820551746, 554581755, 2039689489, 3587864476,
                3575114490, 886087913, 231160170, 1237051234, 1485907068, 3678959111, 772097566,
                1428405353, 4048938898, 3109482280, 1435032640, 1835231833, 232340095, 1426343085,
                3667550549, 3131273021, 595482068, 2141954646, 1432221631, 1746392369, 3843312686,
                34950246, 2816690285, 1045968443, 38087956, 1588670084, 234385795, 1180629994,
                373759660, 3873059192, 3277260485, 1750965294, 2851237408, 2070340801, 1298152607,
                1791737110, 3240276593, 2371282968, 295305820, 3105367956, 1030783254, 2361722325,
                1010613854, 1695440553, 2311171792, 2219950094, 2774978735, 2694247550, 110928242,
                2747578028, 255588253, 890925956, 251245116, 2392813905, 2414578306, 900686275,
                648109093, 3359108729, 9572800, 3154921879, 2936477949, 2806878192, 1570137434,
                1047231293, 2966514714, 1969235114, 3821617637, 535808314, 97656562, 4198277832,
                1089921216, 3395530343, 1137276020, 1830819579, 758187601, 773887976, 3831934509,
                1923796236, 1341680867, 913019441, 3965990038, 3759247519, 3440863001, 529202042,
                3075812116, 1166356691, 4278485955, 1794714579, 1193119096, 3961305347, 2229650504,
                2297510904, 270375426, 2793019230, 304714534, 1585992009, 445066303, 884042704,
                91232658, 1662385806, 4264570167, 3095721922, 978954050, 3444729637, 3666872358,
                1511495455, 4122290371, 2375985997, 2310836319, 1572001398, 1452824364, 815272928,
                360989272, 1472815262, 1183233980, 2693925021, 3070992885, 428567726, 1923132646,
                870680902, 61334733, 4271169929, 1202450261, 3874156717, 3615524040, 445431985,
                3669093913, 1422476991, 311965702, 1417684717, 1234301513, 1340738181, 2539564284,
                1741389949, 532861019, 397460158, 1025691229, 348704568, 757498655, 1082072963,
                2211584104, 4248378436, 581118102, 280058941, 2711609473, 1283305525, 1157715406,
                4231811513, 2418383425, 1647805755, 3089074013, 4043454068, 2851114191, 3362588837,
                48533473, 1297952280, 2283341403, 3894166150, 2375381028, 3154331156, 3834699351,
                2961474424, 3395077458, 2479986544, 4021481315, 1360350208, 4027622151, 1889459682,
                822951371, 2773824837, 2622968707, 1216338372, 1436799036, 228980341, 260550308,
                3290695384, 1179830564, 713457843, 1961397091, 3022066718, 60400459, 710482200,
                1326388333, 866098456, 988957043, 594546317, 112224322, 1686309163, 2673427515,
                1480561387, 3719778253, 189373921, 740479302, 753019699, 2546788894, 1928428757,
                3753951145, 1111306054, 1674018696, 1374154164, 66028805, 1169871060, 2942556110,
                3383298011, 3948130716, 520357725, 3601036029, 2809274873, 1404107262, 2239311886,
                2205203007, 1747688431, 1305067003, 2495767700, 3435341083, 744065202, 2893661505,
                3631471766, 1348058193, 3290931841, 1783052691, 3545333754, 2885010405, 3015101869,
                1816466873, 445215974, 55469969, 708427338, 2670076660, 2749713334, 600727729,
                1015194815, 7563398, 3314338860, 626668465, 463724106, 843782950, 1440417991,
                2606259873, 1072028034, 2814019719, 1373997202, 2666900010, 4176313376, 1576887401,
                1887901460, 618965715, 3928901268, 2756253242, 908674445, 2783555991, 3145253475,
                671884197, 2798251670, 610439611, 2479534986, 3193743292, 3016810470, 4116360208,
                330168713, 1143619883, 2702848180, 3323979924, 251520862, 3080153930, 2721102100,
                3645026600, 574398990, 2681106313, 2664633763, 3589752630, 1589507214, 4031662545,
                1422801893, 677504516, 4032699133, 2580409667, 689884803, 4207215400, 2242741325,
                1700880086, 18943211, 1186581791, 900206253, 2336736788, 79204608, 539780241,
                636226674, 375779182, 4069215835, 1908716833, 379009447, 3605914215, 1522568903,
                4040671234, 2120018121, 2114864129, 1357210322, 2711209295, 2241517755, 2299541072,
                1003731941, 1285293545, 2895160814, 3448925696, 3014223150, 1986102505, 918021216,
                1895559974, 2968756830, 1782617764, 3842402057, 506957063, 2794128870, 2723929084,
                1790694617, 3819994108, 1796867407, 2348433259, 1855143178, 3340341657, 639892717,
                2673209190, 1411690552, 79209238, 3485688689, 411330608, 1097436549, 3022819216,
                3328590415, 2498382669, 2688145691, 2333608262, 2206781451, 1615021580, 3535503209,
                188493173, 851224538, 2629538998, 3538694915, 3195915323, 2470454372, 2836404795,
                3037684755, 2029634947, 2480471703, 4256103912, 1677074447, 3285177667, 2202069462,
                3664482806, 133405527, 1619292952, 1179718513, 2810618561, 4147162567, 1990145900,
                1418108687, 2801415083, 2141121066, 3043945114, 3424083024, 1845146157, 4014278960,
                2690703066, 505360624, 1732127460, 562124320, 3526601753, 955179947, 3591457224,
                679719161, 297241111, 4108320331, 864134418, 1333562459, 70858138, 2853172817,
                1219721500, 1025014572, 3300750566, 2211754460, 991410483, 938799966, 2410403222,
                442916956, 3350691005, 808760, 4130790737, 2746612085, 3276621096, 2647227164,
                681856395, 1257288473, 1413712379, 1522258369, 3118343404, 2489706870, 1471908966,
                2844043282, 1124423147, 3066981623, 594250653, 67819044, 526822929, 777003105,
                50825748, 75903841, 1594424835, 793251734, 2458067235, 491807081, 3381117014,
                1465584653, 2882491124, 3410605180, 827689385, 2357158234, 3863254832, 1910156500,
                478425738, 434763393, 3130649408, 1557159391, 3192315391, 3648822439, 3820808146,
                1252113848, 1395689995, 4291373887, 1333204702, 1522583226, 3077867787, 2132184325,
                26511430, 2845341536, 2936737873, 1963433591, 584753689, 237431516, 1522453220,
                86696668, 2754619137, 795919532, 2240162667, 2266874211, 597113619, 387562260,
                2495984678, 3176140312, 3613000869, 3002833403, 2881801810, 1354059370, 472516870,
                299801435, 1094226210, 3036033414, 3597911882, 1663838219, 4174262658, 3860098876,
                177331920, 2980423231, 2241317010, 2236131872, 4009575873, 205213156, 2801357992,
                1761279322, 291587360, 2857705814, 3265468724, 1333694034, 3153113696, 1981765837,
                4180801648, 3177874603, 3419835662, 1422518551, 234578164, 3035560631, 2977642177,
                2826017116, 693022312, 4002892189, 1984270335, 3966818281, 1449559836, 1580743741,
                1221247885, 49265144, 237645723, 3688431518, 2644307901, 4247118948, 3711144286,
                747817992, 608833440, 1520829247, 3824111021, 678228162, 810382036, 3825158806,
                3989772169, 1237886049, 3067089131, 932255296, 3253516486, 3066949529, 2358323679,
                1883424307, 3579121260, 326865116, 1470953433, 2483136260, 4202451688, 3199596490,
                2860013262, 749139668, 3240279399, 3174098421, 1172311557, 2001947608, 3298861893,
                3498198144, 2132465324, 1381243268, 72984231, 2119259388, 853533695, 1552099388, 1,
            ],
            &[
                1048607726, 142412324, 3250800312, 1077166691, 3553793686, 4228441628, 3203079399,
                1202791260, 799001727, 1030363239, 1081996306, 2584161993, 3105539669, 2513998685,
                4130331711, 3550728490, 1554513655, 4178882888, 781786346, 2080285035, 2740757392,
                539616476, 1486958112, 3986698615, 1921400669, 1147589945, 2901977179, 3882011895,
                3184378754, 2895226410, 690455662, 1190546349, 2220742959, 2051575810, 540146951,
                539062650, 2310850033, 1556710312, 2279375644, 3357053280, 1676861190, 131504401,
                2967730434, 82164296, 3149325066, 3482489407, 817143551, 2015288431, 3228437308,
                905767502, 3933983825, 2027435163, 1570365157, 3561664566, 3300012446, 3405843634,
                2537652810, 1460717190, 1544462148, 529475468, 484660801, 2529788802, 4294022942,
                2334555233, 872784994, 3455279604, 1035665898, 2101483995, 2171449070, 246721522,
                2400142253, 4238880814, 819242783, 2258413710, 705995468, 271390846, 402766610,
                3816209662, 2234701477, 2452466394, 4213942774, 3278770703, 3998052049, 439764839,
                309852143, 3929931316, 1550731629, 2868770243, 2431523761, 488401131, 1370587819,
                2557822445, 716319861, 2599351696, 2796412436, 3147432724, 2520879833, 144393128,
                698522794, 2546333916, 627318794, 4246242694, 1220884539, 3346273775, 1071300069,
                1601718155, 3760578403, 1426969773, 1627940230, 3747385244, 962484480, 1164046906,
                2606826923, 1240876116, 1623862569, 2100011929, 1743793088, 995602808, 2769415714,
                1252942287, 714554977, 2031164465, 2276588141, 3728901018, 122946257, 1858841224,
                770012953, 1293680777, 1650616396, 788795923, 2897629253, 398117719, 1274119920,
                2903266721, 1229746351, 1962723219, 3497182756, 2689318549, 1514884124, 428587693,
                2594122257, 2255868181, 1213534981, 473438460, 3259926899, 784898828, 1740586706,
                2493427182, 604737398, 2545731397, 661514446, 152703462, 4226882176, 2763904320,
                3169889376, 3526208587, 3107915060, 3226820443, 4186456471, 3018794099, 523425582,
                447127557, 3315536887, 2638060561, 4253140999, 2778958816, 136563180, 889096332,
                2156297749, 2633584027, 1709332969, 3628824594, 2213804574, 1109051684, 3946712344,
                1562010546, 732978546, 1769212829, 541807011, 2330452140, 1259982384, 4244981534,
                1446677613, 1494947962, 1886609176, 1890798392, 1278248805, 2089372606, 1464145854,
                243399923, 4211737502, 1818727317, 2988620475, 967898340, 1580663464, 2153157677,
                1925889642, 3632162291, 141271097, 386524308, 2500718963, 482731158, 2062686924,
                219086577, 3285135277, 629410216, 897503263, 3908515354, 1620444287, 2430031229,
                934361166, 1796358719, 4124248671, 638890537, 1432980354, 3148696701, 67367302,
                2623937754, 2612868021, 80761026, 1141232637, 3269660781, 1889586531, 3256841450,
                2670581455, 3744999014, 2431354450, 2059640453, 1149532609, 3217977165, 4063910813,
                2038505080, 477944338, 3867820883, 2041535667, 149604452, 2179375611, 153526327,
                131491024, 280454069, 2548076235, 406520943, 2273013398, 1610586692, 136533182,
                2579763983, 3505264999, 649562207, 2152208510, 4109589512, 913916439, 2770616731,
                1104198273, 1202831344, 1255751355, 3447468228, 665264080, 477725270, 2692532968,
                1870693866, 3851762774, 997405540, 2042036508, 3726396028, 1379580311, 2439697975,
                345704789, 242944825, 1137146938, 988466318, 3882464952, 3107721748, 17414629,
                1662467057, 1280533760, 812371865, 1883212013, 2434696745, 1223107282, 3596170173,
                565858852, 536542408, 2433577281, 3132259324, 927119620, 1882095984, 2261424849,
                2564496532, 806455696, 2635858001, 1840281829, 1429686119, 3246338601, 836772651,
                1360857075, 2774016575, 4122295000, 1246981145, 3699426177, 4097010166, 2362501646,
                3279563, 2709151847, 671939434, 2540411298, 1237267379, 1533499075, 1029636334,
                3329917063, 3015797724, 241909419, 2435929696, 2196157828, 376150999, 2758243214,
                609760865, 3449122098, 1743972313, 4091850250, 671738770, 2364789363, 1916675262,
                304618359, 4119966810, 2850975933, 165283783, 686409432, 719782946, 3511536373,
                3395113947, 3984649666, 1785678028, 265739219, 887986970, 2855120100, 3564162829,
                268532078, 4139618232, 2400629035, 3035579533, 1697435623, 255084169, 1464704590,
                1969412123, 1474218865, 1068169710, 1486590349, 3981484600, 574030985, 2187701187,
                1896404752, 4221469159, 3433453595, 1136439656, 328113653, 2084810857, 509246959,
                3940661151, 3802993380, 2825285631, 3972592023, 193253710, 1105971629, 1023278470,
                2506284183, 705358340, 3886603586, 1357318457, 1425410849, 2872776361, 255660592,
                1313207097, 3156112223, 2830882366, 694005909, 2906618499, 2520527692, 1449611271,
                1849318233, 725033292, 2446520944, 2915986673, 2763045905, 2877683241, 1026458781,
                615272660, 187420409, 943610851, 1812634652, 2273048325, 98138901, 2725026118,
                2967557799, 3270136886, 2059346281, 322818454, 2229832363, 1421907280, 1790203450,
                3309886466, 2218371394, 1723058643, 141062552, 2848609617, 3178614253, 3697309878,
                2621643540, 3453793862, 4098981072, 1509842023, 669644032, 1780348545, 1347261194,
                1942473489, 3177185986, 2974907342, 2498656520, 863579786, 534304671, 658990181,
                3867449603, 2592395109, 2899904485, 24363917, 2582826966, 3202040405, 4276755802,
                333639144, 1055214722, 2593914648, 4006021860, 1862629360, 1984390962, 941140443,
                1975514676, 1444701897, 2077986133, 1321299657, 240670064, 1907831864, 3548899199,
                3417333093, 93616467, 4042521537, 669172764, 1509883566, 1410028566, 2465323811,
                1548825994, 3883910619, 3234661467, 3105117973, 4114740676, 3200175759, 2178246178,
                633150960, 3955508938, 3460166584, 2110457566, 3753290715, 2770574241, 2049063426,
                573027729, 4156077678, 1407126170, 216038396, 2102970600, 3194950401, 4017319979,
                1291946975, 2300933104, 2099048635, 894312712, 1934513279, 2557556618, 3248883960,
                260082879, 3059635004, 3069327264, 1714535246, 1831216556, 414921881, 3289293516,
                944181322, 3925790739, 3359968475, 1846968300, 2609486679, 1850019504, 1944960161,
                3750774956, 2296180799, 2486016936, 2570802263, 3691641463, 3848645994, 2487460912,
                3997753905, 3027763387, 3960275222, 840918160, 743404502, 1575447943, 1886521982,
                882571777, 3530937658, 2589305705, 2678878307, 1307010984, 1256181931, 55466926,
                2188902026, 2395613978, 2514869503, 2982962505, 2054026528, 2157945040, 39790067,
                2647728191, 570680119, 3483166779, 3446354771, 1333593377, 2251539900, 3433452892,
                2268781405, 1187783236, 3432951380, 1296750451, 1842142891, 911250979, 2905313019,
                247454604, 4158769786, 1283681216, 1339246742, 2404495800, 1902364864, 3144630274,
                2371884247, 1665809985, 3444104202, 385659994, 657155685, 2255995967, 1905981216,
                2736009248, 1428368476, 2624996710, 1145643837, 2786210682, 3485069535, 2999714050,
                1002675335, 4174976414, 1248658090, 880109681, 3070247226, 66466048, 3111549103,
                292579238, 339279340, 2344203213, 2176303622, 3906973220, 2905978660, 2190987192,
                2594302473, 3664921655, 2097010421, 3960926873, 2179851435, 36046787, 3494331530,
                1138328290, 100401628, 2319700689, 2151407026, 3811406180, 3438415433, 2827821485,
                3243639281, 3556903243, 636198560, 4273411963, 3842446478, 4050639786, 2854770013,
                1403448237, 1556407557, 3221360095, 1567961792, 37915355, 3857273364, 759462610,
                1596782015, 3997591545, 2208738987, 3029977760, 248859738, 1283529230, 1415005957,
                1972668381, 1136025839, 165926394, 427559678, 2587400498, 2049663228, 567766412,
                3161812322, 2435932699, 2668793445, 1531281830, 3565406590, 3664348935, 2265420009,
                3929560982, 142270226, 3509595350, 2352645495, 2905368949, 1049755192, 888023262,
                2438967112, 4254921568, 3319930823, 3984992816, 2765963407, 2806247137, 178106618,
                3411420675, 1286002529, 2982691785, 2873859269, 3369594395, 4167720102, 4143525238,
                3717603632, 3191223634, 28203420, 775269803, 412179788, 1962047866, 1813776568,
                733160490, 1545749793, 4068549595, 2389240832, 378753614, 4104045591, 3657852010,
                874025036, 4056508979, 2951515898, 1124709994, 3783222963, 1012308188, 2229271510,
                2219096628, 2458020702, 3621530574, 1080427507, 1517056900, 301884898, 1290494301,
                4123182810, 4189508696, 3988834325, 3689801913, 513395950, 1744594764, 3290355805,
                2403507478, 482652462, 2821811425, 993426434, 1014456377, 904787565, 440111472,
                3902930297, 4142551056, 1591497191, 286221577, 2152371786, 996720255, 3895520923,
                3985861127, 3251025271, 2700743537, 3239439576, 2969935613, 1691240642, 1493465575,
                1053359537, 2355791459, 3910993255, 2403970629, 1187413316, 4240222384, 1371714172,
                3965808637, 746046851, 1242409855, 1595856627, 3182235189, 2115649167, 3417666039,
                2827475911, 3419665752, 2224557620, 1207076402, 2188810252, 2013649922, 1578650227,
                3675331676, 1746814009, 994279655, 979461807, 2150039433, 1488417808, 410096171,
                3115127198, 4205833441, 3149429906, 2331868780, 3732482276, 1317599654, 708995455,
                3471263525, 2203689020, 3813526622, 57733901, 3221347386, 1875131483, 1871230123,
                3503204429, 279302990, 1008515956, 2958288963, 3997438534, 2218418435, 3325971377,
                1036477492, 1667373986, 2935447535, 3272214732, 1916937801, 3411973075, 190188148,
                3259518452, 2744957335, 987959381, 2926241446, 4028119966, 2659487306, 2364177521,
                1707356830, 924143357, 3495026759, 3224492066, 820998238, 521377600, 409920327,
                3022575390, 3408451909, 2446120177, 253505828, 3013593681, 751866448, 459847293,
                4151089466, 2734658906, 3628614093, 1204026156, 3836104854, 133921563, 1906374634,
                13937476, 493403406, 900335320, 26546070, 1285100637, 854607887, 4109641695,
                1398374294, 227160874, 799394835, 1021062743, 1106469748, 17498306, 1228416509,
                941032865, 682571704, 2464984044, 2082388629, 1494996330, 3394857640, 244442806,
                1377332949, 1391098255, 49637159, 571188827, 3707911702, 1723324451, 1643372792,
                1140473043, 866463091, 653154991, 1297445690, 573376538, 3981781235, 3696912668,
                565267791, 4185635602, 3480070858, 4050228235, 893269043, 2925165903, 3337269632,
                1840579081, 2457286075, 744856935, 287770719, 2668837353, 991298351, 1967208622,
                2418132114, 908335335, 890083308, 23221927, 2853213933, 807614974, 218855713,
                1501222052, 2494434864, 3153286947, 2002393426, 1937810340, 2196991305, 1201314450,
                3995545220, 2109262516, 2587798229, 1522992967, 3290897323, 2844799547, 2362679901,
                2499652853, 236409787, 1821770534, 1385634971, 780550390, 1992356749, 361422561,
                1911938329, 985103802, 2446932867, 1781316431, 2862433888, 1710440644, 1630007296,
                3895088584, 2584069445, 4109526636, 1215052693, 1879156818, 2454307146, 2104746099,
                4224392284, 286611992, 1778618995, 2141695259, 2711187183, 4257553041, 647228281,
                1295156827, 1552913077, 213807527, 2252596158, 2051124395, 1241226424, 1140277576,
                131906315, 1277450464, 3948826599, 1266865951, 2478887003, 2605897720, 1991636367,
                2192624302, 1280448240, 194619382, 2005700446, 2926770241, 753480478, 603647115,
                3213709892, 882887847, 1895753586, 1815651065, 2481200593, 2083558189, 3700353603,
                3991937366, 619042791, 2825773803, 1041174867, 3851789531, 3214460859, 1140471650,
                3196668456, 322856926, 1460664681, 2638812276, 3663403397, 398669302, 1037797389,
                552494379, 2219226623, 1705521916, 27946460, 280394090, 3773459630, 1253024509,
                2879489206, 1767188167, 916184538, 1199740381, 4263858782, 3986775882, 3044707269,
                611283348, 1526180610, 195582791, 1730668165, 3073839585, 907890001, 2481144221,
                3782885147, 217960406, 3054908023, 1837860495, 3848079760, 2917706776, 3944231881,
                3086946659, 1791437342, 3605338932, 1949911356, 3711518847, 3125234193, 1241545832,
                333629901, 1042934573, 2394347103, 2851879566, 1778541946, 2808769668, 3248943939,
                2073787511, 247734098, 3837843645, 2171779606, 2141888351, 2575430218, 2166342642,
                3714912603, 3024488117, 2290054554, 3394256909, 3083054909, 584692472, 4063088234,
                2746953830, 3850784297, 3335013306, 3364320672, 1128684862, 4001742473, 1536088780,
                4198240687, 1581849589, 2423268362, 3246412217, 1454863643, 1108610164, 3878934470,
                38892282, 245169604, 1274726846, 3803493626, 1744937663, 103002740, 502054946,
                1892247461, 2623709034, 3995377274, 3044743413, 3996081168, 772081511, 2286981943,
                3068018767, 3983416027, 3641407152, 2757340837, 1836414225, 3244876917, 3573033415,
                4138495962, 3311045110, 295783324, 173431332, 3611538103, 2361066151, 3015722298,
                1343609822, 1282836993, 588785015, 1551804562, 120847676, 2210229385, 575857299,
                4149396254, 885356301, 597576777, 3931353525, 1785590947, 1472332500, 2741133655,
                3562427458, 2362380834, 2479477684, 4236191078, 1767966538, 4178971734, 2932483246,
                2958030392, 4101226876, 3921481958, 633626263, 1769237825, 3533263201, 2143256898,
                2215605389, 2895081471, 1728913742, 1805410928, 2970038245, 2463197162, 4200176957,
                1564826577, 3267987851, 614250648, 3900292330, 1769065434, 4232208574, 3592015556,
                144180881, 2509343022, 2439166937, 852496649, 826798105, 3564967947, 2918197096,
                4059790058, 2255368011, 3523829294, 3319959687, 4156223144, 1133583449, 3454229874,
                1557011911, 3458427548, 4230055622, 4190826337, 17883382, 124954346, 40987641,
                3563510070, 1941316727, 1359068976, 2550479444, 627239665, 3063146127, 3351478702,
                2504515151, 1068440347, 916246986, 720364258, 3947921413, 1150872866, 1875253368,
                3832839852, 2778439355, 3289279511, 2889088515, 1856943409, 2903940647, 184310325,
                3217001628, 319129082, 749624857, 1832240983, 2640398028, 860496046, 3522090122,
                323134571, 3153179517, 3065488900, 1184373041, 3532771604, 2401547734, 3152768461,
                1782533689, 234187710, 424333209, 722591632, 3763004948, 4153495192, 1728824235,
                348843722, 308766489, 2093510996, 850299604, 4217675914, 2195899127, 256544001,
                3226528914, 2962551672, 1328234458, 2986580052, 3233545816, 180971160, 419014901,
                3912253012, 637008115, 1205945402, 1503804357, 4012660565, 4156469030, 2582083821,
                199488563, 458440108, 2849662824, 2704948215, 795518706, 1000777821, 2004820266,
                2822441063, 3764807805, 2681140792, 1491528833, 400635370, 3401974306, 1862815705,
                2561957438, 2983350168, 3904191142, 146855111, 3927193381, 2731433733, 673747148,
                3253050213, 4239533938, 4046300384, 63718730, 394253960, 28039621, 1200917690,
                3116360994, 2676755349, 4241904784, 3959007578, 4031049777, 3202945405, 4122030991,
                137424116, 1142687397, 338198709, 1594649019, 2508774575, 3211820212, 3002454781,
                1566031505, 1916162942, 681747305, 200923992, 3809405102, 3721492621, 1786753592,
                3227675559, 1213303313, 2346133839, 4242483508, 1977660151, 3145905223, 3492890380,
                2021133693, 181054296, 4282292922, 1199764816, 2333541081, 4259709876, 769347186,
                2399481048, 2778284357, 3762399931, 2234414972, 1839810677, 102290666, 4240663622,
                2902993370, 2184365004, 3243124072, 3955281908, 2765439260, 2135672711, 2989999631,
                3787014518, 614587906, 933777560, 3348884554, 3804856256, 2711182813, 1170529113,
                368238835, 1773069460, 4229876441, 2594105862, 1075367781, 2216618737, 3125174865,
                318524823, 1020662435, 2523775978, 3750101384, 3948363519, 3304724022, 664366799,
                84875872, 4137905023, 4216040944, 771707291, 3135286886, 1079340376, 141842777,
                1111481799, 1532734553, 1980818988, 3722270308, 1566396676, 1019009, 717064453,
                3372969819, 506661632, 2063798179, 2423583087, 2656391525, 1630100941, 2479950284,
                3657991172, 2371699826, 4199252741, 2521889397, 3324104671, 443020662, 2271816278,
                3749381900, 554658420, 2887078027, 1375538749, 2337582266, 756385786, 1104904157,
                628107957, 3929401682, 2450090419, 157294829, 1993439139, 220713980, 3472905742,
                3113447906, 467991303, 3249685152, 1191502788, 1643194722, 66946652, 3325985891,
                3655086037, 589852547, 4114108739, 3474857286, 2212167498, 518108528, 1061202903,
                1834419839, 3515790230, 432023349, 1792804209, 1376908486, 2799134354, 407169155,
                3760230799, 31952730, 4237093098, 559932983, 338621103, 2777797418, 1176552774,
                1043376225, 40393076, 1543484797, 2835954021, 4280169740, 2726285215, 678780856,
                2234240248, 4106921813, 3468591277, 2347844488, 1286704498, 693550934, 636005574,
                562601422, 3806801557, 518760153, 805523449, 1807233646, 2340277386, 1764245323,
                3893899160, 732166191, 1519923334, 2287823447, 1847983638, 2757449629, 1627605149,
                3249509794, 1248043307, 16594694, 680804929, 4087351011, 1788938681, 3636487025,
                801119410, 3000953659, 191016393, 564779703, 2567794023, 4235935246, 130144285,
                1612660013, 400272330, 1080646757, 3775916055, 960046260, 1380362532, 3441542350,
                3252871445, 2045998548, 1475566564, 1155903948, 1551712446, 3407113964, 1992638852,
                1950218946, 1565489847, 2819274347, 1167904963, 4156357668, 3889678881, 861634597,
                1177972497, 3769153896, 1764256941, 2735480696, 3045090663, 506102454, 2207236307,
                4179160848, 736180119, 1105109838, 1816897482, 3650337200, 3399862146, 3877657330,
                807392854, 1903312622, 876336464, 60413064, 2629999006, 4052780402, 3804059563,
                3805986115, 2325037255, 236398700, 2898403681, 193636779, 2977069801, 666013355,
                47616353, 749954976, 4048172198, 2782182603, 366812230, 1865894290, 2548867210,
                3803685394, 4266343191, 805883814, 3771810872, 2276556842, 2489193099, 1813625903,
                2150529688, 1552801160, 2887420624, 1604048554, 2450479040, 3827176094, 1896156795,
                2478871586, 118817859, 1361329827, 2990876811, 505801955, 2238407528, 2761195506,
                750435627, 2441696264, 4186437002, 672360518, 3949971889, 3634836549, 777538567,
                2152384322, 1347995475, 966537071, 2192031274, 454113577, 1831918275, 72945292,
                2134532522, 806000481, 3391255587, 2601288989, 2375000414, 1984718442, 2766094083,
                2871392044, 2908879884, 3206209067, 2495491120, 695154173, 2275211574, 2648325390,
                2042875058, 4184470059, 205717683, 2549735036, 4142739910, 3226096901, 784305247,
                2643409298, 3940551169, 799181258, 2278468111, 1262890692, 1810968035, 4230881612,
                4010863801, 1310173617, 1877791166, 3392974657, 3310629609, 1294111179, 1691717910,
                2243195728, 201100405, 1860817865, 3992517629, 2110903561, 1072241403, 2490794850,
                2657190577, 491600738, 2738950799, 721276717, 4115495505, 1249753963, 733586712,
                3785610108, 3531709114, 1092285370, 2483693547, 2377719792, 2530971004, 654112433,
                1370215652, 3194499974, 971522642, 4288355310, 4153013974, 1073702593, 1588497013,
                3931168881, 2297644577, 1971171469, 3526077049, 653418467, 1184518933, 3903410468,
                1431385791, 2135588004, 3746548756, 1300360760, 2983521883, 3680677366, 1114764921,
                2067504244, 4037354341, 1328353836, 3681470518, 1296904099, 897792099, 3889325469,
                1620581231, 1057101059, 2623957214, 1416465790, 2321249288, 600221944, 745706052,
                2884744632, 725459359, 2151136086, 1022690555, 2101534544, 4235991561, 2526289534,
                4090433148, 3414669915, 994816426, 3364509792, 1685851067, 916262427, 2653730670,
                4107563285, 492616131, 4213854692, 2383881706, 4072301786, 2768754227, 268515465,
                315313193, 836553593, 2730985350, 2073139965, 2398076251, 558256342, 1788344547,
                2984051379, 4109409395, 3614988625, 1956541383, 1880479368, 3202603508, 1425106476,
                2480560240, 304989404, 4139136237, 307799893, 2298991754, 114036851, 1259328780,
                4262189101, 2653754063, 1502449452, 3375251268, 2192199048, 3791883037, 2668934777,
                1425476067, 4049800425, 1668283262, 2667327420, 2933151991, 4019716343, 2330828453,
                3498211009, 3769685326, 3264444082, 2991844381, 2321900855, 117851441, 842442946,
                2118410931, 3143493727, 2344874932, 3816911655, 4211335525, 3674661885, 1221645719,
                4096136746, 3067959751, 3886517668, 474527889, 13436509, 556504311, 2037544501,
                768123789, 3109215060, 2111841029, 4066422103, 2509393756, 2613607688, 1934939639,
                804143648, 979630044, 3032976830, 1789262393, 3800185863, 1684588922, 2856996817,
                3980253276, 3747721886, 2040009573, 3786938617, 4184189589, 2909473305, 4005326975,
                169151147, 3555459784, 1680052614, 357068529, 3902867798, 4134705630, 2460264703,
                3446281088, 2506686175, 2140253907, 2524031008, 3748672241, 2637079427, 596462645,
                1756428494, 4079242605, 2154048804, 583321194, 3323589816, 435553745, 985041064,
                2207815591, 1541521937, 3977646346, 1466656860, 1701122017, 370668095, 856054136,
                983678454, 1869763666, 2906502004, 3590037337, 3674457348, 4190173453, 840012341,
                3173978322, 2071940589, 3907580805, 1066268792, 624296315, 1619840813, 4184498156,
                2417585810, 313712078, 2648134631, 3458957331, 25928886, 1616655447, 1597586003,
                2422906806, 3753518055, 1382145270, 2264934263, 693781264, 1245009193, 208844628,
                1626364957, 1570465417, 2904762226, 2704404565, 2698439442, 838859405, 681405606,
                3270592794, 114323964, 463704433, 3008664129, 112133631, 2466737566, 99913252,
                3107521111, 2967401892, 3610987977, 2746833516, 278618614, 24782692, 4186221509,
                184204380, 1132823616, 2205467018, 1963448884, 1793230230, 3245502016, 2062710723,
                3289617322, 2424440484, 2687983608, 3112733899, 3238195835, 2191413483, 2942981831,
                2468923457, 109598858, 1921003506, 1867451786, 2069725403, 1789618297, 1332853677,
                1255099134, 1845389783, 1380514769, 221106554, 1417110717, 4271433429, 2613671844,
                4283741954, 1039802998, 3530487181, 2813442650, 2933398011, 4213197108, 4038929941,
                146649145, 1889293476, 2479307454, 2210098336, 3439692794, 1655802607, 4247139691,
                1694322066, 1779056134, 34699089, 3358014766, 3795933745, 1652860608, 1013413276,
                3660600634, 554286455, 377171445, 3694311441, 1362736640, 2317624482, 2105488535,
                3907800383, 2739752543, 659143664, 1266278408, 14379155, 2842357425, 3578153666,
                1210028003, 2292709595, 2461065183, 1060627985, 1916482582, 2047777944, 374805563,
                2855466869, 2243765299, 88602660, 1309015120, 1794831005, 3217210436, 575982793,
                146096222, 4183228001, 50568213, 1080395281, 3719456079, 4174019042, 2836192500,
                1028264017, 1563161897, 3153715814, 20965921, 1786764091, 2068658040, 334984384,
                672639999, 1795028197, 3479475131, 2410760560, 717812557, 2347632908, 1700901001,
                3001721233, 3310592578, 16086271, 3774008122, 3689378213, 1885471476, 2901220836,
                1715551356, 1893280548, 3286583788, 553079801, 2351975790, 490104937, 4090146754,
                634172285, 256165689, 2147466137, 2413755525, 4149288700, 1840031596, 588585345,
                933371499, 151941262, 2291598029, 1558175109, 2205961485, 3279743313, 662618489,
                928026255, 2315088032, 2393177614, 1975851571, 251169825, 2844282749, 1577745923,
                3717002386, 1306224863, 3095824220, 100258507, 1043298283, 762332010, 3662156511,
                324729017, 3173025242, 3018005111, 226292042, 3693510184, 1551950805, 4270336845,
                414941324, 59765929, 1409167125, 628242312, 504567837, 2654788266, 1503480310,
                3757851583, 3647297321, 618810458, 298766937, 145543352, 972529625, 4006011378,
                3902655343, 1704213062, 4277457734, 584553954, 369288135, 2377121631, 1596097246,
                3974978658, 216680729, 3946882169, 3632432957, 202232795, 3398084585, 3713222132,
                1288467794, 1142439074, 2360536800, 4151455478, 1088521481, 1195327196, 1602839012,
                2953796466, 1815602329, 3514635026, 1774774321, 2374040735, 1925157728, 2332391415,
                1234977504, 1381581253, 903985422, 971877975, 1392602998, 454395919, 2045134551,
                316284213, 2190742535, 2783640915, 3239126304, 3543417906, 149651663, 2439212212,
                476510431, 106147908, 1640247147, 3589889334, 1703804993, 4113626973, 1918936481,
                1562421946, 1146941118, 3775194923, 418383335, 3871173886, 4179550043, 405447285,
                1012425284, 2303549182, 2892019780, 2729667706, 4078173312, 2470025705, 1324397742,
                2828838965, 2935720150, 2238693574, 867355806, 2193601218, 3280892195, 2247553430,
                3448996084, 1655942402, 3680936068, 67725183, 3204263936, 3043409732, 3955540766,
                415375390, 1755128377, 2528734418, 1792464404, 3184424158, 643865569, 1862465812,
                2090335917, 2707692972, 1217649324, 3993780143, 3619942265, 3501265789, 2221019617,
                56988249, 3012876501, 392522600, 2001797432, 1047913195, 1537292461, 2680755293,
                428657196, 3198027984, 4204053927, 2454206119, 2689406141, 4005981783, 2006813447,
                324015368, 1364194912, 2619685538, 2444093870, 3849270705, 1627584507, 816114131,
                1219945742, 2158042708, 1023080013, 3749899796, 217196112, 2556865648, 1040004967,
                3669140364, 2162023748, 2793508972, 685969446, 3839946268, 4095529400, 1044010880,
                236277423, 2028710759, 3540673645, 1266224279, 395323073, 3682742496, 1996225489,
                426996724, 500059552, 3026743941, 1686345089, 1811167335, 4133545193, 577693922,
                1681085597, 2863808567, 1972726650, 791532555, 3060621312, 1042840997, 4186315276,
                2615862938, 3318562748, 3816578039, 3857359734, 3632212033, 2247534109, 2184530934,
                2472630317, 1558485216, 859102614, 2048162191, 825356872, 359544751, 3403239469,
                674674212, 1957563770, 1296318164, 1266552461, 2160687728, 3335753693, 3432986702,
                1230729674, 4159438343, 2912873721, 3848793786, 991531769, 3058585677, 52710525,
                697741785, 785232610, 3294858478, 3011485669, 3475026752, 2238609462, 577017207,
                1478684897, 629526962, 3367047382, 408605384, 3419371293, 3731500720, 2411014418,
                1074468417, 2147325269, 387968308, 1878764768, 2912609159, 3000669691, 2205894515,
                1726031277, 3862581587, 654428449, 1435491333, 1982567117, 883646517, 1213287163,
                422593417, 3148866580, 440528113, 2604566415, 960194632, 1054708709, 2281968814,
                2178014147, 119455690, 2805298477, 2276632809, 3157907488, 3604132410, 1300852807,
                964851233, 483630605, 634097080, 3815600057, 359410053, 1801332993, 3396608815,
                2035465575, 3693605339, 2260082808, 3768318407, 456831610, 1784896347, 1993961602,
                3367680195, 2925998416, 1692304064, 4017997519, 988139663, 1172195776, 677056045,
                2996742609, 1817105632, 2206587093, 1339440427, 3115619024, 2137452547, 2583411781,
                531984158, 2972052723, 1119548166, 2552741930, 1740178731, 3414605445, 2304800008,
                843429176, 1687215212, 2348034820, 3585915064, 2116619858, 2939781180, 12638302,
                2015346190, 3310257159, 3812182659, 1929038994, 392010725, 2816962432, 365845012,
                1966332800, 2331495590, 3282664549, 1565343709, 720795201, 274820494, 2573327352,
                834206249, 2120328806, 2122466443, 3552259992, 319200107, 1887946580, 3275565177,
                2214525605, 738814547, 928993058, 3139215937, 89284281, 3595637762, 1784520615,
                1659233101, 1538260873, 2962979310, 3313688954, 2626898666, 3733084731, 770537802,
                533232722, 2624520459, 2254466625, 2000199242, 2850289393, 3581680978, 1306543443,
                2731694315, 4214864861, 987449903, 1337556927, 971618652, 562554112, 933714896,
                3365336106, 3022295433, 2393633675, 426316712, 1945028387, 1347027978, 2736909937,
                2134829411, 73979674, 55019955, 2012450470, 2348886159, 3424147355, 2447440437,
                3161600497, 3157707664, 4219238506, 2297279601, 2411947365, 1714194929, 2466112961,
                1223895820, 1852439360, 2900645877, 2372468244, 2993491906, 4140450304, 3289653733,
                78074619, 1860352651, 2471757345, 1742864175, 2860681391, 283215926, 2730553569,
                3695205783, 2508794543, 2898776688, 2440433292, 369374088, 2520129209, 1297447417,
                4085044427, 454499846, 3776430362, 4048231919, 2078269113, 447150081, 502285383,
                1290765738, 666955917, 1496143525, 3095658311, 1004015786, 3902083656, 608537333,
                2570742756, 894957982, 2920024516, 2030269977, 4168722532, 2901933123, 2799872620,
                2444444753, 3445465651, 826603018, 446153324, 3203157537, 2506406304, 223810067,
                759136959, 2868603029, 4122642584, 715786506, 339816921, 3558811374, 246428935,
                655313389, 1964431859, 3727543494, 4131082215, 3514937976, 389882274, 2108836808,
                686658518, 247041449, 1580425893, 3619334465, 38297597, 2623967825, 256196002,
                950708889, 1604756990, 2284090906, 2764905572, 3243572005, 91323796, 2372081166,
                971118391, 3223082462, 3657959176, 3916088510, 876198567, 532411151, 1245822880,
                2967282993, 3683945008, 2604865059, 1312816639, 1526063192, 3709858508, 541160516,
                887438549, 1605566680, 316061163, 2717518136, 3202624914, 4286142265, 37932352,
                2280000189, 3574083833, 616660103, 186007304, 3579480040, 4172855165, 3061121219,
                2664433865, 582225734, 1498440115, 954466500, 1740424462, 3094153782, 1187633960,
                2178324759, 3721660768, 1980280304, 3918075453, 2854136894, 3035212071, 369889928,
                3318180449, 3880555344, 1741811985, 3111529874, 4063756931, 3492254213, 1485092366,
                3763735860, 2363926030, 2981956449, 2849831138, 2025730596, 3905485701, 470980499,
                962666217, 3549434234, 2940438956, 1300471200, 335327941, 130508638, 3084917853,
                3243225177, 4225033895, 1685117220, 1103258167, 310727863, 3731698514, 110353031,
                2677159441, 262645976, 69502397, 4142500369, 44273624, 2561626371, 4055984328,
                2458564605, 1160926149, 2336828638, 3658545338, 2209496238, 2501847046, 4149648788,
                1804898244, 3203259142, 995640966, 4111713010, 4256965601, 889096426, 2046359378,
                2387978410, 4130716718, 2095157696, 1961147811, 1960183532, 164838879, 3444405849,
                626148875, 2952415260, 1533519138, 4277482566, 1223727646, 1200427663, 4017440522,
                2188055283, 1634298257, 3459215521, 492491429, 596752184, 3072588207, 3843332436,
                773938296, 2593034010, 1097064791, 1915293085, 2209596761, 4254557865, 1433887599,
                2099572369, 3884213536, 2359656999, 3115513575, 3851397787, 1765911954, 3275173333,
                1722769015, 3454767171, 3918573616, 216313730, 3949302453, 3200254389, 229916177,
                1121204461, 1330735176, 1717289746, 3668412925, 1644023445, 2283088904, 3557171827,
                3056900036, 1778244577, 3595924212, 872667586, 1197158642, 3234491598, 172146091,
                2014705894, 33279590, 571001578, 1948965857, 3009595051, 1556760510, 453148385,
                1675972822, 366761520, 798807211, 1232401108, 3040172477, 2170351532, 3569675569,
                2417102923, 1019261436, 2683810943, 2344308389, 3194319863, 2577226907, 3703945667,
                3111376847, 1317654146, 2148638525, 996159628, 844072733, 307958944, 105943548,
                2007781657, 1588114, 2750589103, 1746465119, 4239391159, 129209852, 4127384176,
                3908370239, 3051559082, 300427753, 1527209534, 441877589, 3777172921, 3682277937,
                2578951337, 952723401, 1638973752, 657222197, 950982327, 765295671, 3922241689,
                3339076687, 1140001630, 1375537922, 1377470415, 400397279, 2079788604, 2709952526,
                2379097212, 896580422, 3779262114, 1279325572, 4266133362, 879053306, 2465184182,
                3704483987, 4247230526, 2678554635, 1492996125, 3718393868, 1621062588, 2593729831,
                3561472420, 3167586565, 4199345398, 2367889564, 2725438277, 4029056280, 57956979,
                2113392763, 1834941097, 725273836, 3435290245, 1221495376, 3829652832, 3742636942,
                357848024, 3791413177, 3966631496, 2287469375, 3008002390, 1748658003, 3237163429,
                1159572541, 4048446324, 508643870, 2672687864, 1607401925, 1147147667, 2055873100,
                2662684175, 114519117, 2740281092, 1088299689, 3656675431, 3317348295, 2239055466,
                2786446378, 2177806798, 4081920224, 4036375509, 1379076356, 475411811, 3480425274,
                3096540510, 1246069411, 2552543737, 3691125098, 3708761388, 647070382, 3654474345,
                895508246, 3821094606, 685711293, 3433236794, 280551223, 2253092286, 465155427,
                51156263, 3598662025, 779787368, 4008704214, 1285583345, 4024712339, 3656160558,
                1874433302, 1646839208, 844610019, 1878842109, 3645139659, 946453509, 1461659014,
                91586562, 3498886254, 3283439756, 3971699775, 2305270524, 4201973861, 2289308009,
                1198674110, 1918349466, 195525652, 2140360410, 1721981151, 2408926798, 1425931703,
                1217754763, 1219341160, 781018523, 692209302, 1091974787, 496031969, 3730567525,
                2722454404, 2962379865, 3238697411, 380426314, 198771613, 3672237099, 1881647940,
                400688324, 3086010163, 3001448434, 85789128, 3786848369, 1282699876, 3111531037,
                1466042151, 404041098, 2846201024, 265539915, 3126668874, 3510276810, 594380959,
                2471268617, 3517102299, 3207314782, 1103070659, 1412524949, 100266650, 331188293,
                1432143322, 3556739414, 1568633613, 2607329227, 2205653840, 1127637801, 2157182903,
                1977783564, 2579631731, 1807013737, 362289356, 4245038233, 2412483343, 2562775465,
                1025258397, 1322639906, 4078999618, 2646473383, 3694773355, 1504919321, 2785506462,
                2052914740, 2141266707, 878037524, 3969401813, 3566092309, 3888635284, 2553979069,
                4209191456, 2295889100, 666961337, 4037948352, 4250228512, 1973928677, 826541289,
                2635094545, 10,
            ],
        )
    }
    #[cfg(not(feature = "32_bit_limbs"))]
    {
        // d_len > 2
        // adjusted_n_len >= 2 * d_len
        // bits == 0 in limbs_div_mod_unbalanced
        // Schoolbook condition in limbs_div_mod_unbalanced
        // bits == 0 and Schoolbook condition in limbs_div_mod_unbalanced
        test(
            &[10; 17],
            &[10; 17],
            &[
                9995257893114397114,
                9401504468144459131,
                558615837638945228,
                10733662027974786928,
                18295107704289976677,
                1814706268673753787,
                12474943759854623335,
                8814778832826774208,
                9159057654048965906,
                4451260977376821357,
                18241701617364042056,
                6169989192350218482,
                15071965537117101028,
                13509168527678537782,
                12224278653171635329,
                16077066393714953826,
                1433938684868066489,
                13014970036232570373,
                899282336249563956,
                3089487642230339536,
                3787737519477527148,
                16667686214395942740,
                8787122953224574943,
                7841835218775877827,
                9693303502025838409,
                16122224776459879427,
                144327425397945219,
            ],
            &[
                2350654041004706911,
                7834348511584604247,
                12756796070221345724,
                3842923787777653903,
                12373799197090248752,
                9712029403347085570,
                1426676505264168302,
                10586232903332693517,
                8387833601131974459,
                6290888746273553243,
                9503969704425173615,
            ],
            &[
                89235393247566392,
                5198286616477507104,
                15671556528191444298,
                6642842185819876016,
                1703950202232719208,
                6620591674460885314,
                9897211438557358662,
                12382449603707212210,
                13586842887558233290,
                11884313943008627054,
                3205830138969300059,
                4257812936318957065,
                11084100237971796628,
                13937343901544333624,
                11743372027422931451,
                280132530083052382,
                0,
            ],
            &[
                12688955427180652274,
                7641660693922643933,
                8789985477567049482,
                5698832637416200787,
                14684840547760545685,
                2822100467869581421,
                3557573565928866957,
                4409631974409684922,
                16994214656621423610,
                4513108841166793667,
                9009005527785483287,
                10,
                10,
                10,
                10,
                10,
                10,
            ],
        );
        test(
            &[10; 3],
            &[10; 23],
            &[
                748159237152854524,
                14199895651244313572,
                9044210482484213648,
                3880401870711113518,
                1694971440240542063,
                13547801197479934494,
                5244069077418598572,
                17329479401291658084,
                12613311850003558282,
                5618071535926791206,
                16954511293879569524,
                8600749590433482901,
                11708546551548237376,
                10879843710159659952,
                9101678715417935644,
                12126242459863584426,
                17259866272884195621,
                4418382641453775715,
                542305129955142216,
                6563442437678466173,
                12794875758080454756,
                7461769876910639905,
                17925257245127463276,
                5137728719899113924,
                12905981752247605071,
            ],
            &[
                2654882163556630563,
                2047318842992691178,
                17944530594807555614,
                17278864523505748498,
                1160166728089482341,
                18368953657130322418,
                3937719995815345698,
                12007028340444721520,
                1496744539933999053,
                1476923054783110845,
                6551619938265612084,
                16801911333947266527,
                13986495313155597995,
                6571595571877061463,
                10140569634762389822,
                16210530410764331582,
                15172903143228403872,
                5831780706385794192,
                12288937301416472500,
                16224579586702000460,
                14545605105156691376,
                8614987803254853144,
                16629891239728134900,
            ],
            &[17831022488782895576, 14315989140983049585, 0],
            &[
                18140975738986113396,
                16765596268029991308,
                14497740378349400824,
                8834432760455669008,
                2081502095596466916,
                16785570606386467383,
                5299348241512211807,
                17503170383548190207,
                16775442261989831354,
                8131705923782084593,
                266320274487676679,
                6602256474512308593,
                2102043233085822823,
                11614561527212258722,
                17915538208051341722,
                5710195504177465517,
                2094480568485157388,
                14339014023087152780,
                6947889352398323832,
                10985139413433625547,
                12373170520775701923,
                9198039438688117621,
                15475638737141339650,
            ],
        );
        test(
            &[10; 60],
            &[10; 56],
            &[
                14660214196707223375,
                14265972253040120215,
                15506320303100465818,
                17085621003033826581,
                11203337550022453944,
                15493204961705835371,
                5803021083410871755,
                8112917457002746745,
                12663484193891261040,
                1721048899893287199,
                8062187621610464306,
                13431761655884620090,
                7331427712144411262,
                3626934647030185267,
                13231383914073320042,
                11637171044660683638,
                15189928975258171045,
                941827519265124224,
                2992792486091076914,
                2044203374633195985,
                8310380355675814732,
                1677894573715118386,
                1863631713396879617,
                13750903464355877990,
                13561054993991137710,
                6643134394212488277,
                9782189322903525535,
                7987880548748269544,
                17396502810230452231,
                9355336424066456608,
                6974435047841500624,
                4695995454788932008,
                9790410161672155866,
                7324176676989916049,
                14873447357313289350,
                17933513319573948354,
                16221633809094225356,
                1119296061370324791,
                13659405622992751643,
                10536448431317839371,
                15771892335411705715,
                6450515195565208913,
                12583173873673842188,
                8943105588740166659,
                16781237121411387206,
                7355272525679995848,
                8924936502454129260,
                9464007023044637842,
                2392086820925613645,
                6952992660961663836,
                15709161892606831425,
                15961199354349516091,
                8170938350051511007,
                10106337242460916657,
                4519632767875399815,
                13966478644099829332,
                18146666299243951179,
                18001892575388798951,
                17442461326088111501,
                12996149925790510613,
                15125238000270787220,
                13458137050174539117,
                7565676737178758148,
                7820895745333505106,
                18391820881894926862,
                17227107494212736312,
                16170524482788524562,
                18292226432698054709,
                16409124153431213414,
                2622798522164114141,
                2030148142272451724,
                12631034221630749586,
                12521714531249855181,
                4869764655816857917,
                18312880399388298885,
                1881841240505020002,
                16686085102712131293,
                1638984612454565124,
                5980766772519196081,
                14473546029553426533,
                2610255570241349719,
                4121823778233332328,
                15196027812344512481,
                17634932614139407184,
                14566629132274047837,
                6629067916649366603,
                39453246491293667,
                4118307938296638515,
                176389639877922730,
                2385844666265721927,
                14424300909552701177,
                2596064544694255252,
                9262830285738421829,
                8366979142044016136,
                12451088247268499723,
                16456341544263224076,
                405434591376297036,
                5989071471671786526,
                17922319711997177283,
                12402685985480014221,
                11440567647536028583,
                17109382986734751589,
                1165111999013207871,
                9042409351611763515,
                335396288523389342,
                6889397323074150916,
                13998858741906849976,
                15927944587197048898,
                10995067153735213576,
                13255077995174337515,
                11985913648073551062,
                16606199253171990948,
                16615211378568935152,
                13000672060735124358,
            ],
            &[
                6726150808576237754,
                9590776370558469124,
                4613857594775205869,
                5605914158178321857,
                12627075307783464761,
                456502911636413728,
                6201419543988208076,
                12457367465345491402,
                9194484469177303126,
                14469237774454463326,
                8872571916644400618,
                10371861714649740250,
                9551882050917532587,
                1418647961867356190,
                11742587182398063873,
                11015016132415914044,
                8777839015232205587,
                11080046461630228193,
                13740325869131645472,
                17716201322003396844,
                2184375889136968144,
                2744007897878529583,
                10107840174031679018,
                6807210551800087042,
                3927845063936277496,
                4657264236265855475,
                18202437017170404187,
                5332422779150911238,
                15515262280249200267,
                248667350560422394,
                3473467338029486524,
                5450666559053310869,
                9114347711968955703,
                1001965327187909086,
                9391480248060184246,
                9069754537718985217,
                6108113375902101471,
                615335597740998377,
                7341924484422171664,
                7557688311245960406,
                10629369615492290302,
                6551022068682485711,
                13009629572214277263,
                9801266711191462998,
                12475469715378400041,
                16817728089246511388,
                5318131496704799888,
                14034696640350324685,
                173195053797772988,
                9465580662794117123,
                9395502290798332505,
                172507413604644051,
                13462235362634225088,
                9267822876689174860,
                12978933587961252639,
            ],
            &[
                12372756710207599663,
                9737052986771636298,
                16735862446672978006,
                1139195382411501599,
                4025384807176208306,
                10128156782936698507,
                7100085357301525578,
                10639782880668134749,
                3972383448210895518,
                16316091826865092258,
                14638110565144662169,
                17027377005940147919,
                1984424298563015784,
                10943215534705396352,
                4761407742818533080,
                536799158643182373,
                3577912885973196462,
                8426618872156874849,
                13718975316423099691,
                9890119685862829437,
                1661366149680121631,
                18221664832966866708,
                1501909944594354041,
                15664453277583965124,
                3204453056814894230,
                11234664797845870989,
                865170089562739167,
                15036893469165510103,
                9555056751383235767,
                10793253279766963078,
                10975966662822330260,
                6344197561810800775,
                10052816891387114632,
                5489737378772055553,
                3577007843046523907,
                5025363426761413084,
                11669827237042875622,
                15298941946562692234,
                5287362685718508737,
                14167437013528222514,
                108442285706035530,
                12321077902001896155,
                4987860952577552150,
                4822344167562733502,
                5046873607058225743,
                15023457088946801127,
                10073890866526654379,
                9395914048369797781,
                12331509678230261831,
                4207910636930067124,
                13640015182632895728,
                16512336849198622133,
                750194286339711619,
                3343827571253159031,
                1179021970615059386,
                9309853498190567264,
                8323638524074867625,
                2319424490723820181,
                30896532530597901,
                1,
            ],
            &[
                16979197013852036393,
                4534519222829727882,
                5127955051936920534,
                5669732551578654322,
                13787946500638697314,
                2666880029397285003,
                18286001525339884787,
                3747928243980886079,
                5670276194023029484,
                15201258611907138387,
                6046915833599742673,
                13282924752646783062,
                18026143804639821221,
                10186643213552896189,
                17209309200088910354,
                13215180252119768256,
                1246399679408038126,
                4186715523775575401,
                16756959752065842207,
                6600048850655585015,
                4543693866439677976,
                15594233518271892275,
                15247811862837572166,
                6322126320582019533,
                649809830609098083,
                5229876751712742127,
                17719948521867410031,
                10737539927122287433,
                12476905306147178753,
                1539850235988803702,
                13572545877865905325,
                11163694899331373883,
                7882148214994127637,
                8164419266634080608,
                5782587821804107698,
                12155391719814216620,
                8020222143449740150,
                8489927257914490530,
                15688922762526028920,
                207673185831465902,
                13825819490340731785,
                14207999229863934400,
                10163751595898713958,
                17777080404153962435,
                17016927136773389232,
                3820023214020965653,
                1892439588667561762,
                16909683715900311832,
                11919385779232783009,
                11201007117990222527,
                8700983269916503928,
                5034192113764375450,
                12790439085134048151,
                17790018876931315900,
                5953092655978688336,
                10,
            ],
        );
        test(
            &[0; 2672],
            &[0; 1031],
            &[
                18285600144381611747,
                2607658718107379546,
                9747604544742966856,
                2960103437306950033,
                11333576199308712527,
                14238003202284088532,
                16265332193148604979,
                1379942304307770309,
                16938783330207677640,
                2745252988447228002,
                6791234087903673829,
                12518174636027607009,
                15674280970395865818,
                13974288954585950791,
                14841204964098561443,
                8748517132169388864,
                17525897240098709564,
                16349048229068678114,
                17968982428715890523,
                9358013674764648602,
                5199229606169954727,
                422943872008603371,
                9250194632016078797,
                10021555560097390790,
                2684614891063859627,
                7440654004485895845,
                15497536988658560429,
                16091759101488274182,
                7624403524401510649,
                10159556756468762769,
                2567573898157529790,
                15609657766585643253,
                16236943306986434793,
                5890548198293774422,
                17362921261219419202,
                2808858681174890249,
                6640440299319480962,
                4326748503634915406,
                11456055721778818238,
                10707187402450482341,
                10505948868316563545,
                18366980076276187881,
                15068095720303300745,
                4952650647951470154,
                15911634980226720120,
                10740745397838202379,
                3200127162032008025,
                3763543940730164508,
                3723483274937556495,
                17871783614248259146,
                8786059543177366813,
                13050056601003380055,
                5623281846050325544,
                8511114651096961385,
                10891975825673952044,
                16080052858418260073,
                7171941023859325850,
                2503165103241590389,
                11967819128596062687,
                17746426492658731021,
                1524291256148953421,
                2076038155471824980,
                5880985691677435840,
                4713693495653829540,
                8577899432290161344,
                11976146392187565938,
                2529575305527670284,
                3765314673643814808,
                7234028569335439232,
                12375682646064399341,
                7101569992574162906,
                11098657045492285566,
                1153652218824818047,
                1210454437960036069,
                2694638310421669121,
                7870059579873173861,
                3508868899875540240,
                13609981818610730741,
                10703439073683625892,
                13071420953159015459,
                13716502475013538938,
                10634244764110852465,
                16403497596959564382,
                15306415780193612609,
                17601327182445704540,
                18298349615021078405,
                18111916165749794999,
                7537294468737253688,
                7386987937618099419,
                10775482015504178918,
                8525379645714838775,
                8788609183023289620,
                895207535126054757,
                17118106622782691546,
                16749800484842219686,
                10933310771357651927,
                17045784651422893806,
                10055875188754575183,
                9519498699655590213,
                17322601174638910336,
                12118730165352641482,
                5930728976613565641,
                17159697904528121051,
                15309680603600886131,
                2354852814839706361,
                1866864355164982520,
                14799678913936204761,
                114516480202556771,
                13374320542339641716,
                17948849241297689882,
                11937303202723535389,
                8708253685264852524,
                14784022410383824926,
                15741150074911773529,
                4751508515383369506,
                6753819133127024063,
                7615256392835158829,
                14330334546462075477,
                5916715905113385520,
                16699087896061936717,
                2161501163497237132,
                7657705954734728178,
                13842299391403386537,
                6172027960597539813,
                5307601271781038790,
                4555363624168980660,
                8897561972602250232,
                492135721000809790,
                196374542645899516,
                14990889098212601995,
                6381940097804056460,
                7088456247368733765,
                174918913838309902,
                14001140535865588809,
                16643163063827173806,
                1238954875765713073,
                13202778059857945377,
                13892311264186089515,
                13771970066908683469,
                14995846051430041367,
                17421145547571170005,
                10821698378431695436,
                5316647583697276386,
                14051654090444941132,
                18388943018780729150,
                11259779711269878259,
                8742581111664031470,
                8889827116461862655,
                17319531559654594882,
                6500455467003400955,
                3959184730122082747,
                4054561166041887982,
                17316966724931034861,
                1607293446195331113,
                1556357414629043861,
                11011377910730701009,
                13217502480646592162,
                5556764467305459566,
                12021589498137324260,
                531690648537094954,
                1038223775874752655,
                10112707642670009067,
                16909364180557997068,
                13549292338140530580,
                14089674983696767092,
                14960833416043686252,
                3361732906192010803,
                15411952217752187419,
                475547270098839964,
                8227352829235176532,
                4333410121135356569,
                16974375358381043398,
                7462799035629267008,
                3961814110661375506,
                3191195952723002366,
                15267463856820101363,
                2682345599906528119,
                9202835087842166762,
                5753494002443879006,
                13496926465554347490,
                15537050413782275199,
                4005699994847427717,
                13011783168070790177,
                16932430119108925312,
                10469912374234875027,
                5996081763274312546,
                13299322992254047535,
                13566444816251120959,
                13441242515242491906,
                6531470165275421029,
                6998803913624387519,
                5190923639408924125,
                1301326112306077751,
                2724835656803633652,
                14868270067404848561,
                16428689823791581153,
                6363562758622431773,
                5795421246045082577,
                13738077193279334339,
                17818084837848061577,
                7409215264364848571,
                2893214122000373991,
                4066741278513513286,
                6208913273098798518,
                5323770029909018782,
                5551337708190405618,
                10281953507639521630,
                7674048265312145606,
                13913805095945202464,
                11645578449852204207,
                5216827728522108969,
                18149089235876418482,
                4193193659542496963,
                4384037638695340997,
                6264405355262516799,
                5923041840648053673,
                18445416708501282570,
                1449616427668184913,
                17814282379016188485,
                11394546105942760801,
                514272123860845956,
                5487867953647208460,
                9765982880054791980,
                15269612196572547812,
                6933672683776753268,
                10897766962490536850,
                7963503740124897799,
                1249067770622312125,
                8521634516253063564,
                15047118858576393194,
                3052485574284313450,
                15762145598668916146,
                18313105704770544279,
                6541634279146063106,
                3775400747866844137,
                16496810669859720010,
                8379319521731425820,
                10800415684660017782,
                6142541123129235279,
                8861768666560539302,
                15721050291326133652,
                11134786092605171040,
                13017548541999335364,
                16909509841464459084,
                8484654924270783553,
                15005512331960977142,
                4074672441814183738,
                4078543398182843194,
                6773998236248908357,
                631977413504183184,
                9491750397437496755,
                3377999220825657249,
                3346615552296940898,
                17604589720878522247,
                5769086022977878966,
                17347842858220401404,
                11931418629108149400,
                14490915772427782374,
                11545152969051431084,
                18194530049847403452,
                14802318193842666424,
                16217304261948074309,
                1412773250833563909,
                7479345161017490691,
                14305628603682480019,
                14047111540339531390,
                2202019933845371318,
                213291111871207451,
                9537101822050445095,
                360483935799398585,
                15821799940301882413,
                13587044781648265473,
                11158232757574497759,
                12493764616797894572,
                12454593638118113923,
                16175783796857016626,
                11972175061436709392,
                14628387199635430458,
                5253379621963585234,
                6809274079261887574,
                1124840670828961539,
                5990829238947221675,
                16084193379498378212,
                6869638953004510310,
                17906409028525617365,
                2739791577758847487,
                480131078003075884,
                16023370915391221306,
                15817682603522356534,
                12423449398808644199,
                14130320721960901031,
                7934273914237433979,
                786249691033407308,
                318299827682676802,
                17097143809787660310,
                17521193394806881361,
                8643211685837497345,
                1204030043754228035,
                2676537878172957478,
                1780844249865247048,
                1857038044392024228,
                15537174113724189402,
                15216184620024948614,
                18295257315773355758,
                5049495368122551869,
                511689711728309335,
                16940513174832634299,
                12104504465679211266,
                15914220570778735059,
                6279446781938212962,
                601029894044123455,
                17804281207827746870,
                433540216199633732,
                7944481812184613751,
                3853777775611712418,
                12126936213601232312,
                7065913778676807607,
                43238211455364752,
                8192260579196809431,
                8266744677261407642,
                4334793912650253838,
                12956232517663155469,
                5369404211871099568,
                3235414488456415006,
                12567595135095181283,
                13364037675200086203,
                2815554933029326376,
                6185051196142844265,
                16989212187178652008,
                3878956585408701458,
                708958585074504373,
                16920922562467588927,
                18249699025766906652,
                18027337540317897651,
                2618966708286475266,
                1113776870378384593,
                5988471205905783011,
                11449408349082147321,
                6427498821108845882,
                8757628250113942992,
                3713195263318788838,
                601232850676293890,
                9498794059653193118,
                6534298968814526870,
                12486527138072517297,
                15783607638066166551,
                17817123635789116996,
                1248377855370621035,
                11141540237607695650,
                11310946791190236066,
                12846390650128150341,
                15186900836698527641,
                3867690890119912186,
                4589172752928224161,
                18406516299291763072,
                11413251654981660385,
                16024801440525265600,
                4278405775100889986,
                8755603474239908996,
                3160069975842943114,
                9906744402561181341,
                9965035381218832722,
                6752543667701180453,
                9346639648731189767,
                10661232594877011901,
                14936909082854570803,
                1969452932415658459,
                1696145335740060250,
                18164995195644723626,
                5001142711409868759,
                502680569449519136,
                3022117952710893422,
                10177903082752941255,
                15652975217635236869,
                2966845407346038740,
                475611270044318476,
                16066077773226714888,
                15255919358962415817,
                11732084421089027684,
                4677384405854396649,
                4610350216539332701,
                10328878907789481841,
                6555568935797623159,
                3017832515483377819,
                14707077320201566872,
                12590581217649731730,
                3161603588075729925,
                2563665003397527163,
                5979170469664323613,
                5626012705821413010,
                14527466196441398570,
                9288633927607394750,
                14475257195709120279,
                11865264300717431518,
                17136126069177251144,
                1473429666850111981,
                7510246272136643144,
                18310164183004169194,
                3593138027022744772,
                6350576143506118040,
                12773591294872180021,
                4700465661075210908,
                18143542497507479548,
                7719757932210686713,
                4338121025681527358,
                15571485830471842974,
                16406722845577898376,
                5721314859539898709,
                6589287198671761501,
                9745964795756887415,
                10659452091068591333,
                6690465060747950210,
                728586915321808599,
                8500603684008829799,
                6301121250492508617,
                1984503548524816268,
                18268190305907234300,
                7454276134026583117,
                8547492859943863047,
                9499474055416732782,
                300834181303701699,
                6423420221300563233,
                10906772834067949181,
                12139236772746843296,
                15479617127388528892,
                7255634393137870745,
                422813312578980582,
                1148428423488055078,
                2405372466822606988,
                18202859592780650711,
                15123472874738759666,
                2160560009262204586,
                1220679802754985663,
                8755041458565252857,
                10511683773218681884,
                3102123453859609904,
                2170460789136594842,
                10540612896965819281,
                11507452270722296921,
                3888033478974547053,
                2913172211662715309,
                5819754293645132724,
                5417423241393498910,
                1121133064615112577,
                8899735394209007976,
                17939515994389118968,
                3057735335191827376,
                6167592388365551096,
                7859032161115089000,
                16392857948131842701,
                9672772119042623246,
                6861392074297507574,
                10079830057029967718,
                1610021695530123734,
                11499290474395739628,
                18357287834621605730,
                7842767805813604560,
                17595414094496571456,
                7727166516961623663,
                5489874195960679366,
                16978517381214022058,
                11807176188692933608,
                15778362166265505627,
                12826269652469979971,
                7799517220815997172,
                6941343467007860979,
                14716681029145080878,
                5685272761645196256,
                13841850638623453280,
                18117357664247936176,
                11360524534267913074,
                18408319184374782489,
                7834872787814949745,
                16527576874764684677,
                16576008924894848236,
                12304125447826256834,
                18301056937365686021,
                4783517752793787963,
                2014695633627143026,
                8288284640512774782,
                14976342552024779031,
                2436344641520555003,
                13990286257760881060,
                18118120610252892651,
                8432102189510702685,
                9013208900764457155,
                15956895100219663594,
                11965405775699735022,
                11479704069694999185,
                1315304162999565265,
                7619720903122481473,
                10798255112249544769,
                9067939483463584201,
                8242338589636256000,
                11595456341434427053,
                14057071507676286987,
                13492895734414905617,
                8167664880787891961,
                13065353170057145433,
                1390434145929843432,
                15097573448811012551,
                10002618775785350116,
                13037941058513405166,
                10812662834979031696,
                7926490047107184245,
                5399553758270644040,
                15603376937288512903,
                3817798784005377844,
                12622533130989118638,
                12217900933744511855,
                11495811053435066455,
                17088770095627295990,
                6282760152901843934,
                11339571359698956951,
                10010250182369906159,
                11956984034096448616,
                230656938835165573,
                155123462325204273,
                16323688331673735090,
                12405389233556129322,
                16866268093283320126,
                8076215192615100819,
                17788391733691877517,
                13738263070347903116,
                17514698963264490076,
                14361153193344045623,
                10697613194968260318,
                398797896589607036,
                11354436663860273814,
                3988804407101251650,
                11718246560466989132,
                10607955713165345856,
                12293428353299936422,
                2774193885283164233,
                12111880818145942696,
                5269109320979566091,
                17700804638146972952,
                13483325589659749714,
                7018249448187819229,
                16605502462498173206,
                14334331196281817568,
                17997264741331536966,
                16942067749941194095,
                18326105716816079857,
                2873713554755956975,
                89972251875212547,
                11011206003344840167,
                16263607631557095555,
                3956845690962774124,
                15843733851407790844,
                4532327333478987933,
                14523922448792187179,
                671512032483507444,
                9051952980308527779,
                5771887136664598504,
                7318486125138347367,
                2056863287621362849,
                5319340499967729915,
                6771692072764865726,
                4993497900077789612,
                14846578576184294087,
                8749976795074478239,
                13944161778625889141,
                13939659589211557709,
                8674498121103871446,
                13858955528517010167,
                6854968788299690525,
                9785571842093558996,
                6616581398547260916,
                11173134838307567854,
                15020736287331849950,
                213678875278769463,
                8136043007787109258,
                963815884865140222,
                14383997603758711218,
                2441395136452256841,
                2285295004115032555,
                14143394511135418137,
                15622142144369079201,
                16493347221813991820,
                17474381401274268608,
                936058552355041089,
                12942246561895670820,
                10317584384347004208,
                11782536454405046773,
                12350945172113506786,
                7391214981076111463,
                7073023377646396731,
                4011509139909188128,
                2257833537102580311,
                7274600296374037369,
                2769150843750451970,
                9102426399850639067,
                8214223108585585549,
                11637757222275081002,
                9169116734789273638,
                13195915003973211388,
                5475411329499291917,
                5086118280372242975,
                17718728186337638844,
                16105088227769019766,
                6209815346219807551,
                2881314910093736440,
                12490322405428340882,
                12004395323760866113,
                9968698365927837252,
                17316938449682856319,
                15625883316417529399,
                12226632472013770838,
                14161693092908388449,
                17778030898846793856,
                13976693691407275877,
                3477953777282076567,
                13740936608896808297,
                17180555612721269478,
                13416907629329031924,
                5869124347540464645,
                13384341358033251916,
                14313718444333031397,
                3376219002404246289,
                339811206717616611,
                2616093060711965335,
                8204344482414301835,
                9186789611379643507,
                14338727533336579685,
                12784860191396059227,
                10489777731949698480,
                14621154301243573986,
                13692422118348399108,
                3784610479458294357,
                7735714461152647872,
                12931998015666009092,
                12887123618479150667,
                4005389619579094200,
                12949896351841026182,
                4274952326880371758,
                2252542616091249178,
                11223191016227664360,
                12276921256190460942,
                9311103011248164424,
                14618190821987444804,
                16794211813689377361,
                17066759525543500866,
                7695930135720339816,
                15636206560014700744,
                7080595571863441999,
                16002741097850788650,
                7266069110373243930,
                18266417640341330095,
                12863061635472560818,
                2804143153090216476,
                5360410260257436881,
                10259005860191386447,
                3129239898744374569,
                5704118451966324874,
                2617683975038617110,
                1419008983250810424,
                18176995508939903574,
                3428325565738056333,
                15807295691769067887,
                17098475885649833094,
                435386771621069983,
                3749240361804507548,
                3484935049619675621,
                14151734623085313892,
                7107401439542109862,
                9140252282652202082,
                17139755393802157327,
                1840890360164731160,
                13945742659422648167,
                2993927710006218010,
                5123393630446195909,
                12126601606897174993,
                3757237441333108331,
                13430475145736272456,
                141286591810884028,
                13716994059020442018,
                16256272733681835404,
                13021661888272553737,
                10938682475722641190,
                16670594791610413108,
                7581768967654565510,
                7258449528404661741,
                16972464178815325271,
                13103916238623071625,
                14383222643604888683,
                9134614536502072501,
                4484749605592970811,
                7617523826265603571,
                286970167644433897,
                17350844883213337166,
                9372418001867268906,
                11036524012081184976,
                14599471605351296864,
                14353873970303354160,
                13804851709719425521,
                12542207662034387249,
                5455404902951618435,
                18208534021141654431,
                10760289922882806669,
                10594303509090562894,
                10523612649331418075,
                10175165805141093468,
                3845925331470243881,
                9968712325133293994,
                12632170237051093440,
                14407500129795275129,
                7039838041956792694,
                8486437057635491253,
                12990896208114377714,
                2169038646525679305,
                17731701498975515823,
                12645000352324144895,
                6940383608615873690,
                17112601588170442293,
                9898015000882658910,
                14088035355956248952,
                507013420654526970,
                16055894587901325067,
                17646639921892423762,
                9750921155184562446,
                854792204257329267,
                1907596925043325411,
                13186585073232938657,
                17324756184357468589,
                13215141704644982246,
                9990033614756242368,
                10703741257062175210,
                17316690423805264994,
                10087888281338300084,
                1089239266776577821,
                12176439490507890322,
                12695856964012192215,
                11884436036930363286,
                16729977556989227363,
                10923433806234038450,
                12992592892604117864,
                1268144030942582108,
                10300209358150898566,
                7832544414491392865,
                6657397193574515418,
                17331856360490769436,
                6685863352121534775,
                4872607912521754323,
                13925034245904306548,
                15794800294630432773,
                4150702655832044776,
                1922931668614047821,
                12163445688451808604,
                6814128619400384333,
                1631984743731389500,
                3778862171994919347,
                15454466802087055901,
                9264991358295251267,
                9936918682375797148,
                18157798989566244240,
                5581635369737696387,
                4479378944085838523,
                1634001250673190201,
                9492710507275012642,
                9234172590874940829,
                8783494515876021547,
                10628896245581316049,
                9175567334027325902,
                18216027702703135409,
                11634672812751315604,
                5707660447334077643,
                10202156378293455124,
                13892983828551272913,
                9908193203293924452,
                17571530454157193212,
                15072879288037447844,
                127116006100922087,
                11771185510908260613,
                2445074823174851909,
                10670868476525820983,
                7425728342067716996,
                2985971528087667631,
                7395252277468977294,
                2997333798387301672,
                17435969755936090886,
                2284549800776567351,
                1549552636061955968,
                2562232096971944509,
                18175473291905577073,
                2694680735549112623,
                1791226765063856042,
                6639691018975209776,
                14450608736185529781,
                776581885259523327,
                481545710834071552,
                17904221072369375896,
                7658678246624118033,
                14858939803632465766,
                16638621759785444057,
                7852705140401778814,
                15504288742303235325,
                16123480377693163548,
                17580674642691781753,
                2060059788952429927,
                8044488423463356775,
                12159915697800522747,
                9979462535316088472,
                11464540989399692426,
                9723421225194612320,
                6449580914984939699,
                9406550367550615810,
                5311403373873226147,
                3066770575413693918,
                633416401733094941,
                11712977725629062725,
                4883265930195070560,
                16189146570612520152,
                1698905934763835706,
                950927367170890858,
                8829376333788190736,
                7907286046365739950,
                3164878452294289455,
                10511755255842705560,
                2924155429164172446,
                16124299828159551950,
                6010099555943764977,
                12724759932455911822,
                8127212736140639283,
                10128696763620279450,
                18035084640302368027,
                8781918799260800755,
                14441294204200284647,
                1927193541320801341,
                17060847707989835700,
                8195209044950545498,
                4420757359342589946,
                3727277256040667922,
                385534260624886499,
                3266025280223616765,
                8307518494652840749,
                10628505726158916146,
                12481632216062021685,
                8443059664409740255,
                17083655987996225144,
                730490563149619104,
                16115455384269067104,
                2382469211629823819,
                15299473012699513736,
                2545726390341274697,
                9566636451267734313,
                17404798143522728759,
                12853265630229752228,
                2172148070178466503,
                11003520300346660378,
                1134402141777052949,
                11771658227786580781,
                12088790715698048033,
                17088312113295353834,
                9858438140481896937,
                4732279313243969474,
                9302577460868509370,
                10413475674288905591,
                13021872760990946904,
                9638439145954399186,
                2342341335564065825,
                18026701375952328694,
                5788988813536004381,
                6112690485750689530,
                12277817288452946380,
                7006316162927315897,
                12091459534025657274,
                2152473017451714429,
                7117646493299604201,
                1591263581497951670,
                12905706257967317715,
                9739330975167177950,
                14245120246238342654,
                5445126088677322792,
                8475451974915724213,
                16532703318231814798,
                11346158079313546034,
                2587775018559680831,
                16042335036595321112,
                2783584919636232962,
                9477074304137314302,
                6679970828349102077,
                14914134423793746235,
                8835496380779847657,
                13649036745393349622,
                11800533244055495841,
                10329924636422821002,
                12857463828194064326,
                376873602561854006,
                13991526512239117933,
                4244930150917248420,
                9377193637737929560,
                13470983451570137106,
                13709193869228195237,
                873834737899882109,
                17298475531540644799,
                5157431525573101837,
                15694890039292357223,
                7263973093257735703,
                12810611197004081294,
                17159179774131359627,
                16320123751204284184,
                6659167957772819702,
                3559977382115542403,
                12297726256906381994,
                10545494770323931829,
                14423760345131502963,
                11951650428815262297,
                3552160721881779344,
                3921553500551057972,
                8827773853996085356,
                13035185276040540279,
                2431229196115555640,
                8867095302754162942,
                5824531700307273486,
                17795693614810306555,
                5327408766240893952,
                16204495625665346776,
                4520750388436708886,
                16011790401268552431,
                13186223796877430470,
                5894651091707364204,
                7349710328825984565,
                12990495590567591633,
                15789659485048909512,
                8110395238510363562,
                7157879492847706094,
                1855521204456327951,
                9387090323123631218,
                6983791028671987424,
                17264360937175821593,
                8964335962673307125,
                4438686713691513133,
                4609268036048721815,
                13573223706586323329,
                4370839728814507274,
                7190667190262397984,
                10585250032143309718,
                5262324401338557970,
                18436298550586124762,
                615281048933821162,
                7892081066718287534,
                4153026337684348988,
                1998277297931299322,
                9570951836837442866,
                4214601792245837204,
                12544321637650748092,
                9861635514343412559,
                5163007832201827055,
                8357508302373244198,
                14941521234529596324,
                3025149840692592346,
                1565659965409485275,
                8113415648323406877,
                18047137088865383715,
                4761751436090139639,
                410742697284005702,
                8123281234742203725,
                2300465198396824513,
                7573276443955885792,
                18354607580020177721,
                13826724636992006395,
                8759796250561912860,
                15446866439938431144,
                6466830870344794620,
                7248618897690538684,
                10968843377874574640,
                4538534083565844065,
                10463149345079834509,
                7862094636026465434,
                9363380870281847317,
                17750231516234915849,
                10605066658889662478,
                8651524573226517322,
                18099624785064356749,
                9012260115980472797,
                5112736631921184699,
                16433387801586396924,
                11364983784749187252,
                4592720300056375272,
                17400478621152089229,
                9960304372235946193,
                6810543488590694603,
                9421463587360187007,
                11110051932845796606,
                15820198248392525417,
                17370225890188484838,
                5511348958827419764,
                2047354351196049067,
                8842128025677787612,
                2546794526658883557,
                9990966093285021784,
                10968573027006701235,
                8153649946073344163,
                3435896373516278367,
                8854351008479838087,
                15172945879518770400,
                16101272223167010392,
                6080119325930559085,
                18336117387797080742,
                11495477657407490192,
                13799378353686928991,
                814519040394412554,
                4055424121543431351,
                17971320561372651,
                3045424347018335501,
                9144749175919467258,
                17693139582687085722,
                15549618811805620741,
                10042978303090035766,
                11250820672049577391,
                14650606162160854310,
                681053092156505443,
                1467784211081816986,
                14292070206822113207,
                3356550259250142987,
                8897529911380186072,
                15774124171111764637,
                3608035896189707114,
                14945841364780812283,
                13638982384303383036,
                5615554819198447325,
                6604755778043315386,
                13154764512915240378,
                15781224930202608619,
                5254282127938948208,
                15314350610960881010,
                127785624547347482,
                553562291991422824,
                2665385793464509946,
                11960374868185251273,
                11044390920977985650,
                4524189753866435423,
                11922516208188195244,
                7322728958220573958,
                4566122595518047958,
                9257927878541886507,
                11778087706650674305,
                12675707724087743775,
                14040780876086782366,
                10310608200410344735,
                14747492163773576994,
                14763717547881637874,
                4519119406094329744,
                5416745750548195790,
                8698677371585009606,
                10540691781438295688,
                7621321253979898000,
                12870309033904607776,
                8766530226422390333,
                14410571192410377800,
                5017391940288233504,
                8156621488957733235,
                5701635921482105032,
                8697544584237000467,
                14463840701596743299,
                1132393248669674482,
                17783802461705335925,
                3379973927717106230,
                170233915427480249,
                7721198001501959996,
                5984888435057942981,
                11741252369856674270,
                2667584213579254971,
                12391311788904160680,
                6403858222659082204,
                1706835705335237525,
                6951651160442697621,
                3395001754770416725,
                16336009550495654242,
                1588611969581977597,
                3369833199693136814,
                16679631221398536370,
                17143410383401198876,
                10718378066292328788,
                5098802788047763943,
                5003995899412543356,
                7797753734199884695,
                9804992578690571817,
                852561252664521182,
                676543942240459737,
                12047623372899199507,
                12688884395525848756,
                2909502726897081899,
                6031120528123066491,
                10187664230696218588,
                1634984456433807424,
                13461263282968829173,
                562535253767547543,
                3262317265760851658,
                10159933570831396212,
                9610081805557490182,
                10645180788472548796,
                3825134762043109512,
                11454131642474959474,
                9401675919629678678,
                14450914272139752267,
                7874801920832590192,
                18054728540681521894,
                15303403280502540543,
                15467520708986418749,
                7705766485597949742,
                204013254901132813,
                13967733294005655167,
                4001477583895779972,
                5972807400755250985,
                1217989087590450380,
                10862887725324735466,
                1706534929358469389,
                13264418588578493513,
                10626892394654962607,
                2832066031146486501,
                6506140673085843042,
                14326905332890415966,
                4447185119806812807,
                10289677945299645724,
                4459612687423833871,
                10867968914888905042,
                6485974059834599556,
                14142727197114410913,
                8587964753565667799,
                8972765350531032618,
                2292328948393940314,
                935062418987300570,
                6736600688398044784,
                7931198222933701097,
                12299736294122528410,
                14482610418638535345,
                14434918807907278467,
                2439305975663118437,
                4480608229958318339,
                3952066067287563861,
                14258451016047506475,
                1231074371015334625,
                10331248234059926878,
                748201218435577445,
                17462982229802307244,
                15686869687340151573,
                17053063210448785862,
                3599854718778131864,
                9301737618251045483,
                7627446349617553731,
                12835054936982245416,
                6336754664191040283,
                5870029311999289016,
                6027766907695007223,
                4082089270941640253,
                10932978191544782698,
                858542788191451824,
                18173438258887704458,
                15950175591359254382,
                10496438189070905854,
                3761196574957125185,
                8070795822731288097,
                14333885717356195593,
                12907535393235068762,
                1300746091836895017,
                16095775835363872226,
                5221409894943186677,
                10801943559441670680,
                2226518879270450694,
                14144518871296969095,
                8329328663632421754,
                14151247548153947290,
                7005388744793033852,
                3731783672032466610,
                5642923046890143070,
                2243566518435928649,
                17827722312011386647,
                3288494091174335807,
                12802408479052688767,
                3941775622555625432,
                13974527790491109973,
                7184506709498460272,
                11905130726430415767,
                12898188848602614942,
                3336329541205892765,
                16740350675338109671,
                335449286526469870,
                16670399530115701446,
                3370759555155341636,
                13153054802454960430,
                17020347152181004363,
                16005180766456295251,
                16035747705790056677,
                1904525470716808389,
                1362939978621142721,
                14268989953945718594,
                3131759537359596393,
                12623877369046640758,
                16034480904634718634,
                7205849095551422163,
                18352760423874563428,
                9294184574071126998,
                4855176006968938932,
                13740659884417148386,
                9678792914697707031,
                17346691148499799327,
                3661296281536466662,
                1858171995289042067,
                18199380542019467146,
                18435270579529426778,
                8792805062170870691,
                2216926146372155391,
                3336698928747087340,
                15361162057883195491,
                2230334966886787987,
                6790919905652555693,
                9523654540872868833,
                2373039885555601800,
                4493652711092482273,
                4848735304745253118,
                4615650132005261688,
                7011332091469251441,
                15051588471309214410,
                16436499359483898767,
                5534529923924019676,
                8031782014972324826,
                9587715117105518067,
                5201232572863714631,
                6949484852216655045,
                11242297859309211887,
                5445327566402416511,
                11759527029723480062,
                7401655792007047741,
                12981437329323060492,
                16627917972301844941,
                16086064209851186236,
                18317605428363897776,
                5479987106722795675,
                470044962552825995,
                3263508437049006276,
                8532199872517472836,
                179963713893634086,
                14750710828805195780,
                8566890372208465530,
                457434420254160615,
                9026428119711082888,
                5051697286542220522,
                4066845298260571291,
                15266943848838025449,
                7790231715639606132,
                18047039423184779192,
                7097787949459808218,
                12326346119319424869,
                14895758855340221400,
                270818421368673258,
                10953991395430365501,
                10722834322274726220,
                7175276538034253286,
                12293270138776886211,
                10868230614957475384,
                15568806031450505970,
                2173332627995000239,
                14888402241228040414,
                18405500854031799916,
                9396217995786697609,
                8638079772902395024,
                8700301862255582170,
                16669714149683986916,
                11791960995856983997,
                6941956874526614041,
                471913500417437253,
                12645657659237731696,
                7344954555441957686,
                8576764504255171238,
                17045229481365431866,
                10710908163870404781,
                11301570355963434173,
                5971177578976838887,
                115032958122130333,
                16996195561179864691,
                5303610406571283411,
                1557215249726500571,
                429079935597742432,
                6007572072647948719,
                8793841786368287656,
                209772504980789061,
                12514491936429933001,
                7014555801251009174,
                5854792368971550756,
                867919854085761466,
                11854155159921686895,
                13142074624110571417,
                7907850875814485970,
                16861742288872511551,
                1208590626489658408,
                8601279929820923503,
                2258924690462246171,
                9585184984627008623,
                5315828210383196353,
                1297805663260559339,
                7398320505542428444,
                17073967214624996598,
                17704120650146094638,
                1299385581680024947,
                1443489762904405882,
                13518221354231615324,
                9070126881206870042,
                993730884724745294,
                14081041013869681380,
                8359943552596347499,
                6866696380166200245,
                3837542845849508667,
                14602652064433499913,
                14314340020057352466,
                8839559535694012406,
                14227230979046046062,
                10298228782846904508,
                13298718693240900028,
                13909155817605919274,
                8780642200132615642,
                9412091595152829592,
                6822145839018577251,
                8785978531052338151,
                4948528066049804851,
                1172628369060862431,
                5666685907911162463,
                14153629140204265152,
                10500845530057771412,
                14608765724027887761,
                5087095504941752721,
                8701919577673940506,
                17137520717957261114,
                9199637801040704714,
                7095886304415555902,
                15925336741311965253,
                13077337771490692636,
                145710441006655783,
                13157185292334340173,
                13407008567503772150,
                14215960022966892561,
                11985156240556559472,
                17945288516894513884,
                14097688271959790972,
                15505832877271523166,
                5843174730859038007,
                16205337090179264073,
                17606308108912062454,
                669419080191010051,
                15851467430769620452,
                4936909049694472990,
                9426661750545745060,
                15134074240235574428,
                7927257239677744604,
                13865931916371651548,
                9055694221969554578,
                18105938911030359772,
                17344312477772739728,
                7984780979580024449,
                17946659128143746086,
                3659014353178730517,
                10881946920507249755,
                9643240829875041416,
                9979006042478131099,
                3624673912637648606,
                10183097162206305022,
                14705929380474025749,
                8560872261129163553,
                8542571307034562924,
                2849336599501641328,
                1427173016960915063,
                10561422500956348533,
                13953646915815013961,
                14711009426065697276,
                17629582482698947067,
                5068672373293663589,
                10328236305608973133,
                11390625625852214740,
                16171676010227409920,
                12007752012156277746,
                8787339600696104751,
                17147558071877953304,
                6243146155416198819,
                16781815705425825152,
                9276534213532622927,
                5681999116735330218,
                16852010554258505062,
                1705868855435043353,
                14818213196970587370,
                9256091199810743680,
                10438037318676504268,
                16794099631419865392,
                9815261792343983998,
                8286783569926236889,
                337573434858179240,
                16820096306284770618,
                15966431763494632363,
                6481208570789422743,
                8429344246220730373,
                27262454150324780,
                9516508385964067765,
                12876008564654096078,
                4071754764426708210,
                11593726207040321843,
                10464906996437266409,
                17795281436982488931,
                7949644313068982658,
                7004988298640898067,
                12037768710549869791,
                16790409316897618369,
                7084103797769437957,
                2419445775321185382,
                8074279743518467644,
                8069323749479463736,
                17160974715554385442,
                6446198417065372686,
                909199233418090118,
                17988046405451941411,
                15619199660230837101,
                8540771809211736979,
                15004059727603767665,
                9970067037279458294,
                18037810830226270966,
                7395784361237814976,
                441608911830412969,
                15193617525949907726,
                8329750585903900376,
                9232838481221040709,
                13862722871242295122,
                2651785001097390772,
                13513885689469842635,
                2916635381190975954,
                14673366675350976320,
                16796162449704211211,
                15311238965453782301,
                17048079530325153354,
                6357896971279650981,
                6912501188214061635,
                15767706566209693421,
                4950547784710662682,
                6818275469676220067,
                6311416403137682772,
                14192827820659451230,
                5519753761822532883,
                6327790738344616319,
                1571492847028444517,
                519836968001291628,
                8880684714326015791,
                4414274058554177288,
                6693694082558848552,
                9180328506312734588,
                11851754793034588133,
                17892308745832908148,
                12122989628255788470,
                9813496966285232956,
                10955347908495147392,
                7570827623140202413,
                12207236341183232786,
                4777412212063025006,
                12385252236023114447,
                9508166476039999651,
                114906234504385867,
                9207258060511755437,
                9210800729712345963,
                5771423404639548192,
                15194614200877751860,
                4338352328776016735,
                2610599495858282641,
                16733979028371628176,
                1929910361255473211,
                14137591116693762330,
                11276030669834631098,
                8384908437274376663,
                9932945040858512861,
                6671057894832572720,
                15600691762738444868,
                1090424207156031951,
                7633234269493162481,
                1452672955493924651,
                8042177265524791320,
                5918487395429243286,
                6071477929355428400,
                8446553879294519239,
                17238305490194970122,
                8987047329207310489,
                12398791106166157316,
                15174911221193868718,
                16946345338721827201,
                10949948458544444544,
                17318691300002579588,
                3998415180681624527,
                12750967780890975278,
                288347833998723232,
                16095212211245790724,
                7822321122528030405,
                1109063169170634828,
                4652215944166612902,
                16803163450585461189,
                2776655336762420387,
                15642000619067002463,
                2018031858324511467,
                11237756472829950832,
                17565143038179107620,
                16281738469740252935,
                17600775725533342946,
                14750124410220606835,
                12883103971220877489,
                15936542280450981255,
                9714323865324229767,
                1469778854158587075,
                9593652974682074282,
                11762461414294133530,
                1404229929827068795,
                16503900992928085410,
                14684251465993475323,
                17706137844161464268,
                3909560365123413776,
                9861484314350641439,
                12009083324415037686,
                18169123171153377641,
                2393555352820887974,
                12841835092045423984,
                5564097118032313065,
                12777929502410633133,
                5078336225337553091,
                8694020844593690446,
                11388328638584884970,
                13970084235020262491,
                829772823417380360,
                8286179729255644084,
                957139202750627952,
                3221879212666198953,
                7645002751366998370,
                16715354970243034507,
                18304845819423800855,
                9447343833119941047,
                15163436489241423867,
                2479924668890227186,
                7818020209349584296,
                10580682200967646169,
                13911404593504958709,
                8718275660345998055,
                10124290490841409455,
                7651303722187917624,
                8976889705380896709,
                11163660337280624646,
                10388784795451265724,
                3541771203499561964,
                6075152751154669243,
                2218667547472367527,
                3995516111323252367,
                11180655997089000245,
                5073383660790586917,
                13458152992621454755,
                11676714551890338118,
                1494799466123513971,
                7327872328474238339,
                2389581909384645325,
                16687753253842922782,
                11699615151482669193,
                14774804959571915475,
                947896829667145566,
                10573954710522391072,
                7072571908216975157,
                1921454675444217366,
                11232731567954977537,
                14840397076140631292,
                5060980672779376677,
                12975040048834693618,
                10752224255692434704,
                1306885046650589222,
                1930876755170305305,
                8739276995254053408,
                17062175909187112484,
                13994219820475631601,
                15241051299228638903,
                13189674117437271785,
                3224946313788614445,
                2946953495584212148,
                12515092889993340415,
                8549243107224308830,
                6555967774604787675,
                17074340742411084655,
                15860252206376208136,
                2452901849982359121,
                1217176756850333549,
                15260442969744536089,
                15266619117940483626,
                3092040621234773226,
                8592622982489602359,
                17268283100249965729,
                9118863795573669565,
                5004589504450812591,
                6062182260926951061,
                17997691517876082652,
                4684918577412859882,
                15422706458772273904,
                10373853167444581181,
                9008368442714488639,
                3624691764843327336,
                1028359463583846893,
                859230892908817598,
                4558109131236939269,
                9197636145007824268,
                3397702897203024845,
                17645318682095346025,
                297912191657103235,
                16707811002284900618,
                9544713268645707384,
                18174588433767285273,
                14115044574398526220,
                9550382630286578375,
                5669098498675234593,
                1419240760313025600,
                2624357144105750680,
                1883325833631791743,
                12465653732071455581,
                14016850785680848114,
                10853862374929837476,
                9213307118918963573,
                17446748283231651532,
                6944359057113621208,
                4376214699313790455,
                4272171302826636053,
                1361571807732899930,
                15928311517924806859,
                10979193193168197302,
                14315748858106823250,
                11415251230794226377,
                14341688199410222112,
                13372316746789815573,
                12205797915700991132,
                12054245058919264469,
                7420566807537884143,
                5432588773028217373,
                6350587654471565537,
                6531829368743229731,
                2207976572300046135,
                12703622166413274712,
                18356491416550058865,
                11743861089192075323,
                9975481076082250423,
                5270519543247843824,
                16596875614345327407,
                264970638689993857,
                12731851329939038802,
                4100374548344342900,
                11696626303514932259,
                5795347109604371486,
                4018536166291403802,
                11605839014492166891,
                4046122976220313619,
                7173051512574373511,
                10760222355399775007,
                2397452537849365173,
                7000689557970901078,
                3508218483424754056,
                11249130935335670874,
                15485017380487364008,
                14838383309738250533,
                1654265944033471910,
                6550408986795246586,
                11574017534658799615,
                4938545842279886871,
                6987608227293293739,
                8490763818451756454,
                15553940026252549950,
                6498239556873819401,
                8894315085699368208,
                1767452481216158212,
                17391068041642225358,
                12099770647562592260,
                3232275359468560052,
                9875417733360604587,
                7344425724555447442,
                18431729052975636742,
                2951164042491135904,
                15903903429564563858,
                17834292681718510486,
                4198460729209826867,
                18283343945753908147,
                13114879247072451198,
                6308546439134988873,
                8448793227573510403,
                12883523838880467178,
                12608354838733343984,
                12284418193790956340,
                3099459343498815410,
                3160460005758859474,
                17209423043124247155,
                10299954565801063517,
                17312198705527288316,
                1159079074290265282,
                13803764368072178660,
                12357928111570535493,
                9319226950413258817,
                7861389264222959398,
                4208357822974886032,
                4724453996000826506,
                9219506857747054473,
                16650755835313196333,
                4602357483273387357,
                8421668150799174361,
                12464268335381289971,
                16842331782835636444,
                2164847798539863920,
                11848181286892607238,
                8483204622866252940,
                5177013341061819166,
                6794893916803855304,
                830729528874930746,
                10838023688403983614,
                2936119661394195602,
                16749442537019148931,
                6282125361565649956,
                12522652324110588825,
                706946363036865451,
                287377191870510960,
                4079038197618045672,
                65600267963984525,
                15852196146124192732,
                7791496333170096323,
                1197307315361468886,
                12564376588501612052,
                18287064409980818748,
                16513413097113895910,
                13772586176619885924,
                17412579692431697526,
                9943582674770693553,
                18017460763820483721,
                12774668415999817484,
                17419661422487800791,
                8542296650831811427,
                11030794367359113173,
                3091992835617551759,
                6647390664467556203,
                4760797422569339325,
                15821430759187595540,
                15905919720868415262,
                6964495470980486330,
                11481098497210815485,
                13606157196874073055,
                2545548939497776096,
                17492549168216383449,
                976625893298873591,
                3307888858281262315,
                4406331424039826265,
                7251492960589745703,
                1462803411594068207,
                14615947077492017745,
                14477853980032711958,
                6580067844089943084,
                8164600499091902269,
                4672103301095852237,
                355042099720565535,
                11026766258596173656,
                9849960052517135155,
                16725670149953992537,
                15683028676578831515,
                10104782290810509683,
                4905343590849641899,
                17726532108833531580,
                13910286230069122723,
                9139857611408342006,
                4873918044036171351,
                5211230260928194081,
                4862798578450111352,
                8040863435679951765,
                9157211979753234216,
                5969001182224545740,
                14666007377730777715,
                746412171062253704,
                5788296420214704699,
                16052313287704740168,
                15016980204491105152,
                128634126176999080,
                12474550947728802418,
                17798334047543705551,
                16546317352521543345,
                5935130659172645630,
                9017751516052971809,
                8734332868677069231,
                4489180421214586024,
                10852153455030219222,
                9452853792027507,
                7518566350390737179,
                226398539584556263,
                11348207575144575782,
                11286381051277848898,
                2699324198517442237,
                5176288375717881953,
                7814733078102607208,
                2870574509136744908,
                13870395192961519685,
                16224938596653908092,
                1164830155402073602,
                6289706313355675934,
                10093838410108560175,
                2551691589709651401,
                15882696485463451559,
                3395731646324122865,
                12473003610421288231,
                7149619960361615882,
                9872807622306918213,
                6663012576266477470,
                17016549792515115205,
                7914178572800158023,
                17014701567637435932,
                14346020259284370257,
                5074365976986728463,
                4760168726990175515,
                9895948792206852207,
                18273255159788978236,
                15744547484672365588,
                16864050091650583468,
                7152138044891906219,
                3133231435713995056,
                14654289506261133725,
                14216037513719362689,
                6883938067921952514,
                13637751749205284541,
                3930907102025842836,
                7818503413066881742,
                16512268473175446131,
                13618638131220285482,
                3526560852689406895,
                16317348279030286281,
                5781706287563855208,
                16877706843053345782,
                9787389520151320440,
                1672625892740702444,
                17775094144895143457,
                7284734471708236532,
                6265912061217026214,
                16428427284586036469,
                7239300285490611080,
                12257099262814629130,
                1443098110450745157,
                7111333716613874437,
                10912463389630114261,
                16046472632120791101,
                11071308475967108461,
                15827031925467657247,
                8451701545861351835,
                2032718007638091987,
                9275305708809424137,
                10133532607349132521,
                62031173551766505,
                1069668934694816298,
                10021315903394494037,
                18062320514241791111,
                16614273374620642998,
                3874528406029009574,
                11609554407744278526,
                6664429329059042685,
                2466789265733227250,
                13791862987730476433,
                3100076428479694646,
                1940573727807547478,
                1717992312877296193,
                3858278897688455120,
                2708391244967786582,
                5897077897033357390,
                13903090124093303714,
                5210172753029188249,
                7461814148277300830,
                9825991953137124992,
                8749849231144845954,
                15733619176610014569,
                2536045915051793710,
                2795322555877650589,
                15164137179922407098,
                11311210084140344802,
                10571285191092929225,
                4809833504711226607,
                15053596169163492600,
                12405664553095020547,
                16471715640263755395,
                3828351876877550724,
                8499888452131579133,
                5279727535149011805,
                788643833745941437,
                11012285726544455006,
                15140257364221864448,
                1834285009459528474,
                6667182475201903438,
                15294024395589453460,
                10526482467856757788,
                11877982762793807927,
                16230316864465358123,
                15723393603594181628,
                18424513935220466565,
                2247141586434891619,
                9561372576131838874,
                8725104655684175177,
                4143398848385382705,
                15142179196637056843,
                17330386941741492571,
                8185673125837710067,
                14939737481973173962,
                10478395787666924945,
                2774689508274990026,
                12451742284278860222,
                10819437460867617255,
                13731567691766219490,
                2010973683387239919,
                9908150371329956596,
                5142510757399393995,
                8739166923706997151,
                16903649040425907246,
                6887419514989237100,
                1875697363324020800,
                16410802797521308346,
                135862499096678312,
                1002710565280860416,
                5506348106905501784,
                11368287034717703998,
                12947266586015982813,
                5318254909926585664,
                9296468205284792595,
                8004814724160061752,
                366393468717204226,
                10790734687437783398,
                4968864942084278227,
                15798662312565535644,
                1358717464422009379,
                12888686466434430386,
                370520483338984073,
                9184642588343372758,
                9427179068402613262,
                10546786545869440465,
                12655417731444306355,
                9241957630409402290,
                821497951821470195,
                3197970711092278947,
                2184424336239199737,
                5106022623290447939,
                16287048031456496603,
                14037056338746814782,
                7474000199931218562,
                12188148167023924203,
                4192028392289466906,
                7847291769851591899,
                3599561900723047299,
                851922034760320751,
                13587138821847499752,
                15960408996225570897,
                3252001517847791314,
                794174927197992513,
                13500786923616416327,
                10492520307372562282,
                17778963725733766896,
                9940193524688369200,
                7839429243680619309,
                11152685327758330011,
                4793514629906514769,
                12571317405831554973,
                14236764890442489777,
                14285226682975878252,
                4752465601541667238,
                7069073862761309134,
                18297621617638524964,
                16921089529724869008,
                15310629395363439387,
                13959904965987734388,
                5530325767118220975,
                955257971161171732,
                9249687876412175486,
                6437014646360143974,
                1355675591008680076,
                14363814817404705228,
                11444699168208672882,
                16890344077647521215,
                13663194688247169944,
                9311758702620596945,
                9111333905244008262,
                3739308534752587737,
                10082399017494306243,
                14502104680453962352,
                3240447658814963588,
                1945616413338215240,
                12702436196323839746,
                15056103164643567233,
                14232906369316952845,
                8850081479512611348,
                78742167026295742,
                10346207199790592003,
                8330318603106182342,
                7555172829812303483,
                9135554534047252825,
                2213978715965424041,
                14487841485121669529,
                14201073224315526620,
                12002576656710628646,
                9216161229854384642,
                15287364979646883311,
                4707577895128497224,
                14025232799632084648,
                5317706395334588893,
                1489525665074354154,
                9157439364142092486,
                7033808256892914411,
                2856904746309353752,
                11315255790030198921,
                12167475608624586287,
                14898366696798509538,
                9918128939648387398,
                15155651994814693417,
                7300960472494546400,
                2127526231515960912,
                8923406206829661118,
                16210393114988425815,
                6582813395371196199,
                15621762854392338472,
                3789550044424910854,
                16988798023618902953,
                16490593537106458722,
                14139545158028230044,
                9923635478455782946,
                8897217280317716469,
                8453814653444266828,
                7491325054712040563,
                12316700761490127631,
                3768457975900229126,
                3000037930881673503,
                16933057766750635435,
                15031174928418481583,
                3019987484089942716,
                18385609936539305759,
                17538768527945166806,
                5447221007766299602,
                4022798439534764827,
                17074805847175217989,
                9477194110020170032,
                10200259846152838876,
                6455055232471034376,
                5679758327656142352,
                7374147007380920949,
                10200477410022066193,
                2678287199491553725,
                5011120062607229052,
                7214257460239674372,
                9631753064650306646,
                1151983673963114572,
                2455508156322019163,
                13344796472161923955,
                17003695385004214505,
                11166307372098954131,
                2221946328882472137,
                7061489614039858629,
                3790971501091116413,
                7833733804721228481,
                193935756315502298,
                10256338066976304411,
                6065749049589877362,
                10736472690437134411,
                10155365416269683464,
                8189737882773858983,
                13671211115390707327,
                9578025336797949473,
                4003423028251739147,
                4500512304316856151,
                16693811644887033093,
                7707767344560596984,
                5599541458797859603,
                11592325835943024402,
                13355669588132489385,
                15932001697488084536,
                9870357379952328535,
                18310499762741838752,
                16196774945614723862,
                15790487345250753382,
                11990590655367464148,
                6718674416650039299,
                14857329469228715563,
                15423479737409206383,
                17779878703537243863,
                2210183662909405344,
                2815540909030329829,
                5940765014986549489,
                16884893974961992656,
                4351638805125702042,
                17084353252120736247,
                5724252085645496824,
                17794301429798973952,
                7949129492433028333,
                17290229503720706399,
                12839841549866653659,
                14863383260888850679,
                15788917858243172461,
                12477975711782044218,
                12362210923589911101,
                12864920132785914749,
                10860162458674426789,
                15634366676531407135,
                6076026769874036504,
                12186624835981223643,
                477838969646790588,
                10209086843687255723,
                4453597694185557465,
                9792638779490749472,
                8664773568287178159,
                18322711946104316656,
                5061590004040013161,
                11611936838758532137,
                3299611430381151917,
                3978890638406515286,
                5081581149863744934,
                6181936955807580784,
                3372188069238850634,
                17854265102071578827,
                1268076978660794505,
                4722477313014336378,
                5471980643922086499,
                16788648796682094709,
                13328529160256523927,
                17816434316065398701,
                4038311782651024619,
                8255869964978262613,
                8890037824421975027,
                7319879894513022697,
                15914698902244750946,
                8857389029776818687,
                441863541258666465,
                3208037884158506723,
                6113734693574039276,
                264986606662698668,
                1166237501799711319,
                1823307447602740420,
                5025672756710206999,
                18278689422657324853,
                4594507497487291210,
                1280886041213346013,
                11896598892872950706,
                5576693076164380614,
                10907097907235031727,
                317196941106545936,
                10598515286008372146,
                10232665246931238263,
                16641631582624438065,
                1996845757059763068,
                8450189738658666487,
                16874433980334624325,
                11462456373743157203,
                17922058749640783486,
                10312126789368172997,
                13340565145612845891,
                2211332034685909397,
                6280821632118062402,
                11495261020831147497,
                7525751008510944548,
                16481618138878161375,
                17687291635686050126,
                4726039693402439590,
                6224312974372200845,
                177270674822437819,
                12844674102136119940,
                2765095317735756740,
                6375785787962152345,
                4765877337254522185,
                5699318866607950771,
                7726266014961936643,
                10439969907866586583,
                11215604933445164846,
                11144874084048847665,
                16677507722859793772,
                14926605406115980653,
                11021418173114133993,
                18143508384673173911,
                17869384978881128193,
                539841771736061948,
                813906843235746774,
                2120916504386756315,
                17563694758070096975,
                5807011249822640473,
                12074412278826937750,
                10494691749052118094,
                4034710777981084065,
                12945928140391853828,
                13460531663356368909,
                9805968628270501084,
                8389235258735557083,
                4653641631812286778,
                8961436573446073348,
                6695344158613046716,
                16832827001219019801,
                5227374831316662089,
                5088308882683339576,
                3279167959625059741,
                10436103497832123501,
                2797296687506317311,
                18305760283738580632,
                3531912382829235411,
                8745021258521548248,
                2062796519113317445,
                7005506890190360164,
                15260828944473012523,
                11736618288708934540,
                15523033936060000556,
                9071328583193116055,
                2949954518191771020,
                9219149478710608069,
                1788704922178497999,
                3917123331723493156,
                8283987826876682192,
                3926515941902592230,
                4576777655155350003,
                2895291773949819710,
                5409491793062473762,
                7827016058731337158,
                2360244091777092634,
                17765210336693396066,
                15413391993237156529,
                9542656815625824892,
                9430563399204843121,
                11559365450247449510,
                15796909749180552904,
                62820771556683371,
                17275496805851130274,
                6527142162623953967,
                4324187305635963626,
                8775772925418898915,
                4283973075245351015,
                8846184539722500106,
                2860502690824226817,
                1240652940592194,
                15064048316358894661,
                15864254034666279286,
                4098943802367114793,
                2956682521101031793,
                1877556925464957894,
                9589792900125026809,
                12161426439049578986,
                6435540582736037161,
                10575856639119978060,
                14751225739652781433,
                3642975302329400055,
                10213336036038833464,
                7137807512192531866,
                15715238576819145647,
                17891816262406767004,
                2885759842806217828,
                10001842985502100171,
                16889965688337087910,
                7192241521508241891,
                12459052609846245573,
                16045056395445218777,
                14263408894637697194,
                6319194484923808205,
                6887168986137924562,
                4723017923445345268,
                8785445940747788332,
                2221153194351157100,
                4112058037714640844,
                16624774310058492682,
                18155682498135649179,
                4932684590312312624,
                6466580926084050461,
                13095557293811313234,
                5629819270691955218,
                6705036397567572049,
                15096504303120814344,
                17813708390329054153,
                2867801270346878637,
                4428369643259246081,
                14356128800268363075,
                2105538175211522946,
                8157169805154179676,
                13281934124532911335,
                721993975496515367,
                9731311970803693633,
                17408383560695508306,
                3661032291356469843,
                17118601234529144108,
                14173384340046827967,
                13956269658151533336,
                14193288209519401944,
                10854924829501094491,
                9362722838007437994,
                13139075107441548779,
                53888779219483732,
                9991228977857148506,
                11866192603390104699,
                1903043806364214756,
                14664090553522048890,
                94655028324146279,
                5944941626254245313,
                3067815658183085252,
                10088835779690593635,
                12586879497500128294,
                17338285387265829132,
                13546679410630118150,
                4684155179104389445,
                17373141188216408963,
                10683275227724384825,
                11727464505463619204,
                16890013009763926299,
                12256558554118856945,
                1692369148468240661,
                14260594858617396870,
                8079067481737035693,
                17302479952759473929,
                3465288033646104738,
                7033532051975356541,
                5750806504528053243,
                16142598027708695045,
                3763071556050151375,
                747332911728793689,
                7125512446937882000,
                1711762381076986594,
                15200743445044769163,
                567070148436076824,
                11150986733649743405,
                1751542514779667937,
                14904426643112052682,
                16243812463903474525,
                4313436371286419450,
                18281797249258270726,
                13863976627696030069,
                12604750965802575212,
                10295616727116267978,
                7795942372543067322,
                6713137871239810667,
                13830865828728404463,
                11139257890131452244,
                2759969414377994154,
                151123411588221984,
                1548247161690787301,
                16234894685549118874,
                13392592243844300663,
                4341718471344294648,
                7137644906875460827,
                5416631993939117377,
                11693386548832817142,
                11851058952064231493,
                9690204938813699131,
                68528268163302809,
                13565043622050152230,
                7983220844142817842,
                6794808910151851013,
                2118666482985725107,
                7247597207626321306,
                16937693375274789158,
                10616884815388828659,
                11696015248644704721,
                3352478958667054947,
                3225871086863590754,
                180230908445925268,
                6654741577584823985,
                11710009687907650028,
                628457965752902770,
                1735690146666342885,
                16556237906505825388,
                12440271636242780312,
                8713058872068144699,
                8975441040195700002,
                10850963832660773043,
                86339822673122508,
                4000323666157343936,
                12142567722725546249,
                3374710818178624781,
                6392232680788016964,
                12790199390015157427,
                4671003891873822839,
                4452182512321524727,
                3905095889403963026,
                16726139916064776463,
                3453332349452466770,
                16221710379420353742,
                4632551944540970365,
                8387501246722919769,
                9326344266173346561,
                14810846036626389828,
                7283658938651037849,
                5813262143148998917,
                11727805907650385268,
                9857096480403873519,
                6356324418997451940,
                4218579215729792881,
                10470999063206203293,
                622196070040738252,
                17021144211023071215,
                272053703337182123,
                1450758744433386057,
                8397337301039096971,
                1756739264090010567,
                14804942979114893233,
                12762190712783408010,
                4486114271404551982,
                13538690353341899530,
                6182493449368831960,
                2768435790455158079,
                8491588540734758297,
                5001428683933385935,
                16861055012236061995,
                10578636081126268849,
                14449779720168257980,
                9370646703732609468,
                476896208068404545,
                11604128769892258429,
                3178840918267575500,
                3407583825966649895,
                17913378662961900390,
                1138652617523020638,
                4702124733398535376,
                16197108716716127538,
                16852598869081929632,
                5020614776073585872,
                1188708373797737364,
                13456434315549496452,
                3798071449732352219,
                6593816705053129140,
                8463318160472344568,
                10114730768365942765,
                2093191144313711189,
                12720945689550243678,
                17481264965133664645,
                17640221870440170657,
                3490097599238691289,
                3624992904734580452,
                5383687377060455481,
                10776924742527744182,
                15746021472289883888,
                17925392760128571522,
                12689005861958409137,
                5231100489367895272,
                14007286820825332338,
                2397858260918981403,
                3320067181759583430,
                18227252228223404573,
                18011328143837002368,
                4798104660333169602,
                10865877383638846865,
                3767167656736085179,
                13252620599128939387,
                6636747284560413010,
                13514887050922862847,
                422456370340431886,
                9612933469182009435,
                8572209183721381907,
                8056048067037472186,
                16714990476240297166,
                3520645146861432874,
                4395550491627332110,
                9462218612700999094,
                6214250154185857186,
                7628194292741759764,
                3556878717144745691,
                18413027616459454704,
                10160691680912469038,
                13717170760433051685,
                15180833335295580609,
                1819382907555618141,
                13320476638466170165,
                10422294181974936444,
                7164181547072169074,
                4206492057553506325,
                12633015044784588629,
                379171732810097117,
                10351100759422011738,
                3673330411049649463,
                15927757725693044281,
                13690250449236882125,
                15900551197649269941,
                18329662994600175312,
                2110669219011944740,
                2226752393294287183,
                1014550150137152480,
                9887871066385753226,
                4568683160401484222,
                10951431797661196524,
                2312645127290056695,
                16937439673591720324,
                6396609076318661377,
                8389300110486808887,
                1923677274274786580,
                3549825163974227141,
                8566399761898493308,
                639620030714191084,
                768228320555967661,
                8108418530085400912,
                10272182341228792152,
                16750158829727849854,
                4444117530817286053,
                586462195320680600,
                4278069062735193163,
                4273315131401359275,
                11611787428091079232,
                11835985289253260719,
                3096230712379885797,
                5322239580881209060,
                11938666223318366819,
                5060592382016062327,
                109409443906808448,
                2380457102117134635,
                15857731461784222805,
                6584665638956888535,
                5947254465908568523,
                9420786545084124002,
                4503761263873856534,
                6641486141146012370,
                9121700908113990684,
                9720958769231915561,
                7003782806520614311,
                16920307773004245532,
                12763580883987437513,
                13231043349317133789,
                16203109836791501802,
                698049430375939280,
                3030494131166195541,
                10815604140749178453,
                13804995432448225904,
                2055424018541357006,
                17073648888173819706,
                15463924428711597599,
                13403700103090470402,
                16763806955533746160,
                10509071477142331263,
                7405199613665848444,
                1289961083639614668,
                13019156453931533504,
                511380020193300140,
                15833618630547184883,
                16532434650886462678,
                7779349734049489490,
                6380411322746302134,
                9492908436973173105,
                7167088077189974813,
                17396059932024334263,
                16483611260630861934,
                9669468321319436238,
                12712646425834594093,
                9288405016973860570,
                11325843021373113165,
                11258335193384041947,
                1997545595799365359,
                17390606419645620788,
                5130387948734042681,
                3121742342628196576,
                6099609462914905352,
                6524840389448497409,
                3251588966299685263,
                12515453442966781968,
                4351131781828315306,
                7915089733711494046,
                8605641240710406093,
                11102717433954517200,
                8816805538627940082,
                17227753413606850602,
                10263075023716628113,
                7686631682618468388,
                10330530590800536028,
                2587341603576202527,
                11500396296312301825,
                13531587115648414633,
                15808917747546864365,
                14333112763098420691,
                14761783111500015307,
                53964954401492398,
                16533467491022296104,
                3096485428305684908,
                6318844018415466634,
                7132560604178571060,
                16428604738409136626,
                4375929108222206025,
                10112133284375140971,
                3256631261503314080,
                16136845689782815155,
                15928971771356595498,
                14645130502697393764,
                14481748170304871772,
                1698922547070724229,
                9468607121868930261,
                11617214057068823437,
                1382928294652688250,
                12680084220201263431,
                15926122141331194025,
                7979147799621842755,
                9803599832824191350,
                11150566171126503035,
                11946016594155356252,
                8452284422264862510,
                8621047342992105610,
                8991106617593209637,
                4607652189428377711,
                312850746210123282,
                13020253158865282886,
                9665527964173507749,
                18176337504665053651,
                10689513521305445515,
                1839607582702602917,
                13793618456770339778,
                12156395506174115903,
                15230345865671590927,
                4715973552531673115,
                14606516029379763286,
                17293771405588962821,
                16175698567845501145,
                3789965395433901756,
                7250432289837425960,
                2507460993020556336,
                16416011798948565038,
                6033312224978543324,
                14568892906298810894,
                9207153067892339499,
                14537938431481818790,
                16550516704016530385,
                9907670198667127499,
                11918889385815695319,
                5981318855234384164,
                6303359496211585544,
                897784439258088201,
                7533487805017595619,
                5938457201719040924,
                10019150195260257017,
                12026554931880038202,
                9224513724236448133,
                18208973061276109233,
                14240550756243930801,
                15387974810151313549,
                193781859214087276,
                11713954174101604255,
                1341093990140003013,
                6012491122871297010,
                13892530467037865965,
                1368649256526022373,
                7020819021722718671,
                15787587617733723291,
                7785870968748246057,
                1947448600658942561,
                16530328214840567615,
                6317941331086952570,
                7139842027589405175,
                10933153414206777090,
                9672586073744099620,
                17228494407277874159,
                11578033579087247602,
                15459493510831207600,
                8222705886823487604,
                578413881840029844,
                2972330100500591542,
                7515621234174823899,
                6704318956697481184,
                7539293268516643247,
                1580608997901534862,
                1201050878740265829,
                10170365701874480907,
                9870363666224664306,
                17305296184407747996,
                4224805619364289032,
                15085837243579345311,
                2443632602903912157,
                13046843267919167284,
                12116351035376725179,
                263232896451917215,
                7772071638110042980,
                16549817644785034122,
                15257628965480096285,
                13004189693733577363,
                3864285740392230962,
                3468607145721577697,
                354566527372793754,
                12925883576993237617,
                12693175375557728813,
                622461988842871628,
                11397527121006480165,
                12911631110359477732,
                13101149248297235307,
                3443924800339223639,
                11021054325079132422,
                5789359016899607332,
                15670032899436160802,
                17231336489372520758,
                15011195019101462587,
                17697169511730379360,
                6214385185627447169,
                10180011765464756731,
                11047248145840743090,
                2742832730133990272,
                14029491892088421031,
                7977004417662816272,
                14199429721808423163,
                18279997024327708476,
                13359704350594785266,
                18410294947752215697,
                4900459096393373794,
                17759944268317835227,
                7514273237508120753,
                5036409225635108741,
                18108376710275555530,
                2676982762515162946,
                510220139774948017,
                9208245069742717667,
                10376186455595199891,
                421637325546718875,
                16791119924695165602,
                5075099022211468458,
                12517850612529158688,
                14010730112031892170,
                9181830456575508952,
                8562092376348428853,
                13106552497603917850,
                14302339172367595976,
                3354417171377350434,
                11375931064094009915,
                7367612779037974062,
                17960646160089319914,
                7765039110674214207,
                11258859351125514864,
                6790503465712539668,
                15367600556170700044,
                6616796092052086761,
                12472062233228758417,
                6844102383328993237,
                12811249515443122455,
                5102740036611216259,
                15944761788498002902,
                14694830622589958200,
                2106296585469395117,
                12001390986454100522,
                3886258101634881021,
                7626447484564536615,
                12121778508662936673,
                4637632611996699763,
                284639519767470911,
                6111767225293430109,
                14899978058938638435,
                9492490138059005865,
                3457376194893217608,
                6384991674167924954,
                16479663265444998572,
                2182180597909020672,
                15349832040611960272,
                6995769868581799282,
                7434433066635564427,
                7330931577518389882,
                11026383041313003706,
                12870325652218422628,
                1151311929447712791,
                9598200806509616050,
                17161065747263888006,
                6901765437989220429,
                17524807833762947972,
                7424089904607803796,
                10169273845585922571,
                427683750176118191,
                16198716196396797311,
                4234469982734082109,
                10433113399561032205,
                8455659057075573351,
                5339947829324400827,
                8994757262942082927,
                16110373093388044843,
                8165219755821135739,
                11079951015921397003,
                17913162205445436558,
                18307573113704258140,
                5184334744599569992,
                8209592006521651537,
                15233048304519008983,
                3893904742760952245,
                12843184579518607189,
                16317789833580002355,
                3932965922048250109,
                39643566078340112,
                14454778211007988105,
                11325761588512978910,
                7326308723838667358,
                918638912645150633,
                11749550850384896237,
                11656774623671896072,
                4102579533296639675,
                1131200342214858221,
                17002635763021940679,
                12699501461265202766,
                18366533628748257986,
                4211496006430696197,
                15592383694738584641,
                12132073284414780422,
                14112124548036073660,
                640983069936058034,
                12843837916043035998,
                12619927090786907296,
                14878814042191779303,
                26802691526432636,
                13542740387876579301,
                3027951464265029786,
                16531319427892075667,
                7433366770688989904,
                17675108936726475823,
                12991848794171434707,
                11308307557943773008,
                8441361375349434971,
                16048668185725998079,
                6848195560782317706,
                15732631277486546880,
                8796031012662685103,
                471880524013342791,
                2847727284878021151,
                8909402802655050731,
                9155393982976367055,
                5339419398360353054,
                12394943475850749453,
                1082481852253596422,
                2475925758143360234,
                16780844326338173281,
                9955442783741736414,
                16398521725460554238,
                11754389093333746016,
                9510081579192799387,
                10740614081401142716,
                6751836211534532930,
                3310216743613517077,
                4711354618706526528,
                11761966320912417805,
                36323519866736684,
                2431075662700945654,
                15771975356730131291,
                14504980176985527547,
                5551404397884447150,
                7328632262405216781,
                6659335151951442348,
                12904376258123706403,
                14766024566003307212,
                2729153030346049029,
                9776447889426450664,
                8565088926995480737,
                12733048698734167426,
                16140690590167093278,
                11999311158468044755,
                13598288633972733571,
                13732432400180070386,
                15194135950298716633,
                13160554968820068964,
                10539080943199862762,
                15115912129273478029,
                17652613656477189074,
                7952212396658049573,
                16131569825649579263,
                14739342068703048684,
                2756008787672952449,
                17980612557340090024,
                4505357043573157185,
                5886347178459794981,
                13467166348185532762,
                7542340141940109840,
                8604473128836312462,
                14161530301987102049,
                7768636854450163149,
                14487815318986749283,
                6851630924543230233,
                15816812718841829697,
                13309960537373415159,
                13533823018337269511,
                4066246092121693604,
                9157035362257855573,
                412214665099375028,
                14477789736289307578,
                8471884807077804890,
                5401116457851954216,
                448871182302722508,
                11307725734317055468,
                10916897930231800956,
                12320324583264666269,
                9855253221365914708,
                10341139850853598251,
                473763070798790310,
                2738091302514798630,
                5726660080813664052,
                4685085520987362,
                142836371012422078,
                12594070839012993809,
                10074822048682622819,
                12827059438505836814,
                16625605990012653363,
                5223703331085192665,
                9833285584664723263,
                8290425612857589870,
                6306954960404098112,
                9412474111491552241,
                3143257994045884457,
                16371722385530408059,
                155878147658248091,
                14824551048836933161,
                6944511999081736143,
                12540758531163865907,
                11983135069038529053,
                4545712278933588398,
                15077557719097293644,
                8824726955621677512,
                9467059989026717476,
                1832994947759543686,
                9395963500530779164,
                10187513723496037742,
                9614996490866381781,
                4074827755791565698,
                12833908036330960194,
                16292730478901857762,
                17035820163674794684,
                989273775053529110,
                10590449105705689408,
                2922575348536557726,
                9097036857789013295,
                12287791133096088844,
                11574082336078807433,
                16687006015927882120,
                8596744673168310178,
                8970905056348840750,
                5517972678784462826,
                881430805465529877,
                3412610955059774968,
                7028178389869167183,
                5170343795610265286,
                11012307439076817531,
                12613254778376420629,
                4047156878552340678,
                14789560647177930279,
                4218958252980142613,
                6013379809704688444,
                10780282427110087598,
                3110875217681031780,
                1760113645124538802,
                4510301077917148010,
                11245657134256982381,
                3975465112728195039,
                10147869619910151776,
                9521542758217967325,
                9796643369778561059,
                18438740993593422996,
                5755122647194246655,
                13089871854524075038,
                6020811568278170849,
                2905460035802413789,
                5770692989150859960,
                9121733696504177003,
                9054740045617104954,
                6651061222026801570,
                6979411400071458744,
                3760933926638598638,
                16334302020381288285,
                2057660950359678276,
                11293316249797872974,
                11604535997697431331,
                11921660539545426320,
                9756548788646446777,
                7269421896006778050,
                3975439838039732758,
                4483475473549910496,
                11780853832789946501,
                8179840661787229204,
                2659883347338825753,
                11257903019053621162,
                9583945287877466892,
                16363933527036814071,
                1290785704105238692,
                8655198258069320180,
                12518299182873150764,
                7361462000368712194,
                9733702303272955573,
                2362863984326388251,
                14125653338074659438,
                8452977297932581636,
                12482787099763665262,
                14889071888466818806,
                13718685624353930921,
                5045136353562987858,
                5296643588295054890,
                13213371806126402767,
                3277278393660323717,
                5669363365118437907,
                15016463550423536857,
                16936344489863263921,
                2565955327304029560,
                4796734652908453706,
                1378655232854232950,
                9591923038316868621,
                16194271618909991898,
                8523814065658657216,
                968783876319889044,
                11876875087504947472,
                15343430958924511022,
                4726016088940609325,
                15814602580682745621,
                17553495950903097582,
                3845404925865098583,
                18216981879371013309,
                4102006890010720614,
                15988113496959934091,
                6019266456198657999,
                11837451541533231967,
                1877408958200970989,
                11155878481768284249,
                16966216363889316426,
                16449662703095636488,
                11722657415321325203,
                8151686270422518591,
                6829105588528021796,
                5605072424730907975,
                9610630778445319623,
                12490688233524207364,
                15924383595417258143,
                6293909456050977691,
                1520031459958370315,
                16878056482786965582,
                1567491557266512441,
                11553059083075601436,
                16588286805077499576,
                2831700015193252058,
                9291679435178297105,
                16696183961702972685,
                6110717331497256774,
                3508641981673281301,
                2888222167255453397,
                6382434826249612462,
                1615495003744037219,
                3450690972855989121,
                7373699525385823603,
                1487214282399378665,
                5054239246312770486,
                6325543252810070667,
                604916284274232643,
                5705249803789781860,
                1347389337137481378,
                17341491803371701023,
                7562092053824458983,
                11528860291431916871,
                10058885809804159773,
                12028682695619691748,
                2072309850975849144,
                17510902039090560383,
                10964691654809950146,
                8557150693328114885,
                10018287661176094357,
                12067793619240607034,
                12258652923874874737,
                14315661805556678059,
                1532344907755129707,
                11548306890701017011,
                9836569326549702085,
                13196528743664879413,
                16910466377189639446,
                305247665277886260,
                10234652344969601959,
                6426209661333831948,
                13316514153882647236,
                320668129269757278,
                9513807142666087825,
                12132502292274229629,
                7907062113630478532,
                6769256578404078947,
                11077216337588272062,
                11192173094112274045,
                8665424743913923338,
                17273052641666860613,
                8242738008086379196,
                13851918804734763571,
                7049674271488004214,
                1410604294587433641,
                13544384176158464923,
                12468330754572317265,
                1317196613823108318,
                406832464837758362,
                6039154084839734004,
                1995025881371264773,
                15399759218648596543,
                7323767619167721842,
                14228968351368149001,
                14556483677198851362,
                10822573411785744110,
                13457687797488671733,
                15113597365244568644,
                5830040833200595947,
                10782120448577939853,
                5923233368326767564,
                13565433709591402733,
                7409835447323460538,
                4942580795960776301,
                8068857330020361381,
                11063008871093537743,
                6583328726807166886,
                2194893842926463044,
                9586490095482756942,
                11811119386143060256,
                3644614927094824958,
                4762559862573353606,
                7054841812193239255,
                104169344287246978,
                13956225391862408166,
                4507288715283113798,
                11772996098884686986,
                12792586168475881829,
                15798457727837504001,
                16896795677207949298,
                10265172010623416483,
                14814049521182301273,
                14251567652536773005,
                11041033214099412656,
                6589290323087713529,
                17080306026857684487,
                8536449894500168140,
                13538904949191682258,
                998478434926587432,
                14670273496850215516,
                15311327973305354729,
                12644104051633342488,
                12970733262467631495,
                4625272733914046269,
                4694472538276404068,
                3167371560249938056,
                12856489429820568743,
                15490218655488023802,
                16928081564771690940,
                8200145788070169286,
                3346452930233714534,
                12795482436352374291,
                3314315705851242852,
                3285152211139935017,
                11224563416094698786,
                9705270177443534531,
                17644295182363680941,
                13520301373099144288,
                3541351715009433425,
                16020276637771846482,
                6027464490277968416,
                4251343941648935652,
                17763014962498696031,
                720132515041512177,
                5173394266280593900,
                15204667210087004583,
                17335914961708883300,
                13218634015062319702,
                128827822406486046,
                13559392235200971420,
                17252636495073021415,
                750007296061102031,
                18254099543935170871,
                7509241234704231102,
                8157193578702246807,
                10298529352072110821,
                5298418177375924856,
                4741852588831255524,
                14527267204533561544,
                9095259534397569417,
                344527310846137539,
                13247449783957233078,
                2586644247732041192,
                3100790169250176954,
                16510173867908259851,
                11333281937378448547,
                10849352377567806999,
                18082377466933472402,
                13561723472079052715,
                14547157815982897407,
                9391369342410485871,
                2348830231178979433,
                16863733530713957956,
                18119733445408743443,
                13725121556809406883,
                9229975878895702895,
                7401016155946807916,
                4811692959864213177,
                6237359194264984939,
                1904440073749912075,
                6353600963009324869,
                4984137724622228146,
                1196090958128593834,
                5119707990981594180,
                3310978073014066771,
                12983216966379762511,
                6612762118768660390,
                4003198331951059920,
                6385796970903716569,
                17680686381236190132,
                7090591178254990847,
                13123476457069922276,
                11991645307762636710,
                5129610078187868363,
                5604361132348700067,
                11043762682351635495,
                6391120985682487625,
                4455513730428273542,
                3762654197950669235,
                9310420262887992163,
                11993439152830872164,
                15439986350739535069,
                1488229606606016585,
                8189570287966130481,
                16920767496097942040,
                7797006069350129228,
                17531953262576833935,
                17024439366185018969,
                8083356010952666614,
                6837066330579419154,
                6443183984423798969,
                4776996086855661713,
                9156255850041051387,
                6083831993070398816,
                14543764421371224439,
                11977571598909514982,
                10188060030334373973,
                9449009160086154971,
                1300044225109284268,
                8825712025626564634,
                5510762923192959602,
                7324962531338046625,
                11942013042939202021,
                13598796371758253088,
                3794998887633576199,
                5084084225782194038,
                15889660289095533051,
                15428522601238467679,
                13696067867927948600,
                1072542240072425197,
                9785760286300726328,
                17624535067298229622,
                3938570677885383673,
                3705077412606219929,
                5340068085943913770,
                4210056340846145048,
                1976665594829638831,
                13311220586145473347,
                6943938959824844891,
                7268540691149845607,
                4375885954089016506,
                14963703931344653483,
                2580585000938123597,
                1068177107148635952,
                2341910556569696351,
                9142288039937977251,
                8517576956327184753,
                3376248516190748921,
                13301443214809490744,
                13173593921898127720,
                17359893842944679338,
                7047222128454518811,
                5947406210583265494,
                7833766002049023813,
                18234948673625328162,
                16320032712674678534,
                12642441645902018157,
                16283613144322847005,
                7863579138098504089,
                6035051266438089663,
                5453172248583632847,
                13775470103081167926,
                1182333285767268205,
                10495826772905540632,
                3056962127861644896,
                3638669906264037789,
                11198631986907530450,
                13541149168510941603,
                3250675262588623536,
                1880073565717482485,
                11936216765079705804,
                7530067836231811508,
                16311420158606635425,
                14900155531445760709,
                9999132967166761272,
                1476154866153451041,
                7195014637072196640,
                7248062023586150152,
                12914546489578466976,
                16344645330454865081,
                13063707322424725098,
                15370611307815629185,
                2118132721549701162,
                14789791523379164567,
                13011177800824348207,
                18047963884795850285,
                13689837669785098672,
                5906277653382226335,
                2699555162272597747,
                14303717239113776133,
                3323572003892592160,
                2809044788581830880,
                12842135035209068787,
                12962493426638468571,
                7435779585695058098,
                677266868482172083,
                10678064418979058702,
                10945593620822631517,
                8023058850263770330,
                13198960821944542699,
                11380271889111358356,
                8834711603621437912,
                4878802483786297049,
                13441769216931046849,
                2621489868509896160,
                2739596448875968624,
                18316605028815878992,
                6393166579696267066,
                16501151485480928243,
                5164267149115550765,
                2594692795895679355,
                14280335185447698254,
                4970220064329069703,
                12700511247281457031,
                9357661341818532747,
                5976227213729484842,
                2603370613961010712,
                12878876453986011658,
                12614332416265768442,
                11711218014924643648,
                10655032017324143953,
                17992359291438428544,
                2028340169188763801,
                11337597956814839013,
                3790580704158447112,
                15661080312640132051,
                5990952720662828532,
                2238062688033035456,
                7214374085319154262,
                6225683889287881657,
                14352811622893565131,
                14441940256427869428,
                11264789359569297809,
                13541671887968904175,
                8127321364325418809,
                1617127834649530192,
                11585884571784117082,
                3211445923374162685,
                17806365145235708527,
                14310538800447604307,
                6443392190904066779,
                12304012177210398685,
                9644770647148205176,
                10349883319707014538,
                13335242320392313944,
                11550748494455916510,
                14451727464612357396,
                12354315710763337118,
                5654383747200879937,
                12534212795765636178,
                5562388391253840440,
                18294236533364599656,
                1155120808307866205,
                7354961778452510694,
                18411509148244472731,
                16833067451811570610,
                11664219918607046336,
                1931829024033366436,
                9466235535733377083,
                16125981341055192255,
                13123158579309508422,
                2811914968022899296,
                13666576380287885316,
                12073873146611787542,
                13976563976935754757,
                16819184991876208483,
                7126372516019046104,
                3771351679962818186,
                14749464410272499350,
                1158403298912255932,
                2704550233949493414,
                2361919431011664920,
                5147560855044821678,
                316960590350675551,
                8956506393667806523,
                14816316691312040724,
                5483483435418414420,
                16492702091910529628,
                11531197856172089811,
                9119688446381120307,
                9148465870444231525,
                11348956949863877257,
                16515747438741224650,
                14748627773020492829,
                6792333258618815286,
                12745044341734710216,
                9118601693019210121,
                3426576167844415246,
                4516979855142897567,
                18383203113196616305,
                6037335393642080610,
                5178029553332071284,
                120594988188384758,
                16911068593865363851,
                5611330513352860577,
                3672922004740508910,
                9348962843954154258,
                13167081398063848866,
                8662579917294749869,
                7714235959241362618,
                1992168626444259154,
                2892890698408203389,
                4458208962709454498,
                16006038729069481615,
                9254965750786898182,
                9178915422232682008,
                7329871300650615008,
                3409678840041114839,
                8437730364512235388,
                12654053093050306243,
                17603379767897285990,
                11140578823362012333,
                18400373855086378549,
                13179220706346381456,
                9393189516096637793,
                7962379756613380226,
                3887762359860195719,
                4702005148801552936,
                13554138609046523902,
                16949160381904484821,
                11391648750970778464,
                3884921049575088732,
                2209098818625079997,
                17799308759029324494,
                8498222108115834352,
                5958053849320451390,
                2912489977852727908,
                9002784252893780496,
                9103973893872873428,
                8800570704285521553,
                8871184059044310741,
                16063400495158915832,
                4031307968282193036,
                8573254083908951390,
                16828584717166299815,
                6494527269040260826,
                7249207279315565170,
                13665554008066255134,
                16839236341242902217,
                4123411447375871691,
                10234357340093040168,
                3518390908608069874,
                1349715014789845667,
                4808798653471270523,
                10095338955926329757,
                12695489128540790910,
                16406780457966718375,
                9629301538534411032,
                15498997222980997073,
                14953211317262356769,
                13024285896073029281,
                14612862358802352485,
                13035854789120349150,
                7106552057026833281,
                14174041880363702304,
                10636381469539675255,
                7187203466667480841,
                17084717625060872520,
                14126252750523939037,
                15698822748718907462,
                7397904980198721162,
                3690934666532247692,
                15065052457896220534,
                18426160025856536769,
                8825186243264577791,
                1029026778404309644,
                6950954458719738495,
                8771914568967577350,
                9728022865849579333,
                17765239852650572501,
                8343956648157842199,
                6334778100080475126,
                14664915370166297479,
                12941375852754193937,
                6405436436050091550,
                9909891363532277572,
                17675467189601777836,
                12324897459248787941,
                13981335142409795938,
                17744674612593350856,
                2757587566489447009,
                8956578028983169012,
                17018240562727015214,
                16391639968111798359,
                10795774151465209457,
                2093281970351304070,
                4858229909673020125,
                9933967343419708401,
                6016509820559456727,
                8502253989054157587,
                1829270427581251166,
                15709494579608995279,
                8568909950760020667,
                10892820698227375197,
                14181785622385373392,
                1741244869916907800,
                5584342639358924336,
                10920058455798795209,
                8773147161499562392,
                17372651285045475439,
                4317270331835178992,
                12072221230432227872,
                5409998193192839065,
                5774604676764375748,
                6270673186535390929,
                11593578005123149455,
                1350291030727318811,
                1734041789149423611,
                17594245397221493182,
                10230281830065256754,
                17395251244463936984,
                6363273717700984685,
                6898868518537597264,
                5078809256797027276,
                16014780232233692324,
                12698021273486013402,
                10034628326465398981,
                803921083181133037,
                15053987885932962839,
                2543409146477711493,
                1443575144201918042,
                15527634810280511429,
                4846659158470140918,
                12183993101313012462,
                12953651110928456969,
                15038003468538497849,
                16252394591537250522,
                4193562522090296620,
                12800591763579590396,
                15408603400942806170,
                17682640208554596681,
                12409260763379977486,
                9315397818726387830,
                14193643034683668324,
                16508104272720261755,
                13905815394730317134,
                3679293709974358468,
                5907121386159753765,
                5304769534414875015,
                18444287322445993596,
                16494909212649576365,
                1411980536871151577,
                16554121151776992767,
                10463210072047518059,
                18023249470213998238,
                12383793606215823679,
                800485989566329537,
                15071139529581604306,
                1895628018455249296,
                1105126069974836026,
                663584933815778847,
                3312928249076628720,
                16646825576352631842,
                12151072254529924642,
                8642785126263747138,
                15111584853907028239,
                2776308895820674677,
                10812673714292641746,
                15054903323219264732,
                2933094921150563585,
                17830062919092998452,
                10432330036767081552,
                1033494976738144353,
                9761049718456631119,
                2978550270506139328,
                2266577450295768406,
                1214959603409486419,
                4338607014040436,
                4115159162283844446,
                16888561205519247430,
                4412890126763454080,
                85232547048588047,
                9970948529228850752,
                3713393126801217778,
                10760802738778841380,
                4895931449000106045,
                7255762665740428559,
                335936537100116164,
                17662778773720603199,
                12685690660905184006,
                14808811012699062151,
                10663380197090780332,
                7067049757688041329,
                5878922448066220307,
                14490189620281922843,
                14473260627169887886,
                14832232348370447833,
                5951438093661647765,
                4872796166881199876,
                10429350570401478982,
                15251172935852223950,
                7325621106097392986,
                11834629549993290294,
                11569303197879748368,
                977753391334101798,
                6969686311950446853,
                7366200137172124620,
                14212998724743560415,
                8081354270400804456,
                880037272912518632,
                380852277882293501,
                8947498467697222234,
                12757931014561147509,
                667810441349799809,
                2059689120439565076,
                4750342010666522618,
                12492546560830555305,
                10465223395020225996,
                9585389043436680319,
                16512031046174235646,
                9200703296926083957,
                2032951915453711444,
                8002381174072382487,
                2389280604724196215,
                5721524692632905547,
                7647110976590069211,
                12059178411864741586,
                11975912934455308497,
                17753420811972470476,
                9192795740173474360,
                12105166740957629248,
                1250032644270746132,
                4765787287696278663,
                13422669569705597563,
                11373393845567526876,
                9153761787497611672,
                12030450058080806969,
                16537144145501712177,
                5983397454957073922,
                2683673672010015032,
                3861849825629132671,
                12629475949497494729,
                9966234113604834798,
                8466461060632654110,
                3335857898642241962,
                10682117780482341111,
                39787149161941136,
                5109208035333406420,
                15684027554962652735,
                11748970404336820351,
                4095159288133322954,
                11402790565133565981,
                7401785106763668233,
                6248303083190138658,
                8738855753439299071,
                15339296752899687482,
                3182643107247815384,
                9378566535341755855,
                14162009846460499887,
                4109114270719890973,
                1511416153435046138,
                9020508522805341634,
                7477142615652523025,
                18385803953807265839,
                2546195602154738889,
                7405815335061777589,
                669094957884330982,
                6056073383962448124,
                7353716808540962518,
                4360012167404246482,
                9748894070631625514,
                533481526701689863,
                10374030482918918166,
                8591056344610511021,
                5753611323076772742,
                17682325790000893453,
                17410739240868104811,
                5651721564405833200,
                6771155463622294161,
                16102506172900055409,
                3922155114242412611,
                8047195046803908182,
                10181935025035061310,
                7790459581343029499,
                12616035204180788696,
                11350000801651108812,
                9664257517083996508,
                6877290837507516646,
                2900668296021062883,
                5478674374212655343,
                6296162153147759087,
                16234745308754151636,
                7633277882818614712,
                12843201503731712898,
                14050083812260020416,
                95836250787434633,
                8997148048216279615,
                5687865929885690952,
                7684029056960298539,
                17362423790832901707,
                15489463223618769754,
                489477444088932230,
                17185715982289417959,
                11823522798262762160,
                16827938740128105724,
                13257410922007807743,
                4679309639860400639,
                10164917239224603264,
                7304922446473936277,
                5597481581945817575,
                3820424595621388213,
                6884972150866725771,
                2694324376629657414,
                16833520400918984369,
                10912563532735352632,
                7352008235482304863,
                15885791964406330114,
                11790453162438620892,
                7239285021069261812,
                10125071555494474444,
                3796211625840968848,
                193266766691985397,
                14792644085266904226,
                12987152514130686235,
                9436744123646480376,
                8251406129814681521,
                6271920831800751835,
                12738844182063426283,
                15330691163818996222,
                1166041665727565335,
                13315209544138143871,
                2216677316767409466,
                12690036582164080137,
                3031307738126062683,
                11944440105997765289,
                2026188631449062025,
                9212773879860499293,
                3341981308024472580,
            ],
            &[
                13169652012768583147,
                11662749290968821290,
                15540028649212863382,
                15222191772599122928,
                15852211273603082347,
                2960464712590969339,
                9805532347048503730,
                11483156842014743008,
                12223751000089978338,
                2069577308821362462,
                448020966454441311,
                3493610387626232963,
                5182130948708681868,
                4456536535034921689,
                14139535083059739910,
                16341604127053129275,
                8476750032358968964,
                10942274856214572646,
                4426573651999058804,
                17958371714565221264,
                4238987860855800392,
                14450925264923938948,
                4364481289454625563,
                13074790925168694865,
                17725186031491616550,
                3252385755044260850,
                2489691844698347065,
                12584453984545921259,
                16484939371755776909,
                17591699265602016514,
                387926126025483991,
                2463760292646247776,
                1563580628888369628,
                12118979090065897855,
                7930230430393343357,
                8834023487181578700,
                3705061516543521950,
                4053176902619603587,
                6269266280509284877,
                5236641881717368169,
                6899670106034156441,
                12840225294220778634,
                3029440279850048735,
                9595166473221718273,
                14550471357175468027,
                1255830945916836371,
                5122133954630663971,
                1502740582962090101,
                9086275497101221342,
                5421916064800438697,
                2179464833779544632,
                8247585817871008274,
                10322070671895980987,
                10962237209348590213,
                1167315820290398061,
                4563405457798620948,
                5324869835018392710,
                3941515430275954463,
                1740094742017128848,
                6138471019874045522,
                9176213051434147108,
                12501904812453849864,
                11388325168842467058,
                17687408972570957542,
                4497137255970523312,
                11770269946165024215,
                10156397926378383551,
                2019377424484113393,
                3590983554593693717,
                15657928449196312716,
                14894403732533901822,
                14625564293418317463,
                17710716015671252818,
                638852277383858770,
                13800670797826096071,
                5519007738268375392,
                1013914690263468265,
                13249504241724137521,
                12893315643913486917,
                2437939332985629386,
                9866735673756110580,
                7894145839618709904,
                7802203558085957599,
                2394814001366981818,
                7648858197866754106,
                45932857419714984,
                9659675215715090679,
                12803466849037463477,
                10717587339591792614,
                15131328571226415781,
                17805628124155724278,
                13655343682572989974,
                17362327502804463995,
                1075287460052064029,
                2626850396158965217,
                6885136253881452991,
                18424853270962528365,
                17198461501972637926,
                6379806426022159044,
                8783653573177405838,
                11457364326293914599,
                4889546163609369345,
                8345334679410921999,
                8128212263869118047,
                5243835377297724594,
                13077589216209892913,
                14947690960428829294,
                7468326754846892750,
                8665069680383178636,
                17267364262089018920,
                14794644088627434581,
                5781944628494317535,
                13467037542503882140,
                5504287258083448304,
                3101706185952735851,
                16528687565738693574,
                6853101285149030710,
                958150364135525317,
                13159192403688468400,
                9000130047394330226,
                12454106782612240528,
                10410037892467703265,
                2755063393447593674,
                16909229563067880679,
                14030067308250726680,
                304063827283258286,
                18020451823918033658,
                4591035690657100956,
                13162350837887011458,
                7701399978207767086,
                15815279200816529309,
                15597387052720630170,
                4740390593486726162,
                2909712595092459460,
                15729877265226222100,
                12096570103612063938,
                13702753332858235272,
                1411835182384377603,
                17487917594195511154,
                996305544975114980,
                12929066524383774152,
                16956610067055251962,
                13012122099231548957,
                14395689158572846177,
                7935429077563080059,
                17542764935243101497,
                18413828249925519615,
                17271321257298840331,
                406766324155888956,
                14818331828215117974,
                8187386216945380849,
                16792638575276899182,
                6540004189057298818,
                465689003663102769,
                11974785539062893556,
                11523099967255714584,
                14591636912283935445,
                4871757987380755363,
                9308130069290886865,
                10612219179153523310,
                5420071244571425562,
                12724302122592532888,
                5173545157589181140,
                1429324130148847596,
                18414282026575416657,
                1721766939064217260,
                185288146264311331,
                8027581238524003859,
                12629121378225318691,
                5422022678890177669,
                6300007666394297907,
                13771277516427401556,
                4461063943424152501,
                5814271695863693557,
                9833762282568603070,
                5534898830643720899,
                11414581203473717153,
                13252208296859650317,
                6070377927034194834,
                468982118171070321,
                15569817073538385644,
                8515954578625472255,
                17703147536676285546,
                2713926565223832109,
                16501613896332875878,
                12360649233716580846,
                6951122318765494287,
                1255018572838364315,
                5022530899188934293,
                14471021290055621346,
                3965972119993826976,
                10914640319991729939,
                4671893019190076511,
                8132288757883741990,
                7379730619550447967,
                7082846353163966035,
                7749284037330602929,
                17090786448482076935,
                3623093583024522445,
                6775174256836032571,
                5932859643874401763,
                9263718069255818484,
                11941172789559596258,
                7505495305758940713,
                8374557854631657796,
                5030384219708396008,
                3609081759463861677,
                2444176790044307758,
                12883357531875110193,
                2545675590276006076,
                1091049428613676247,
                3001645527995991696,
                9613284625002680960,
                13486970893816936976,
                11564610387350917328,
                7838720830134816136,
                3368189672511472263,
                16407993343222005051,
                3965440550685537978,
                4708478243468404768,
                1875742626798710446,
                109477476572266497,
                9185060711428219960,
                2062557879153655855,
                15504010890019002364,
                1436468774610332740,
                470895386030379118,
                11192666441535176072,
                7094623340817246353,
                16041820192281853667,
                5048179711756437977,
                1908765243120848557,
                10810219542319634593,
                15971282719319513661,
                8395180060853137311,
                17415231760777435363,
                10489441496511966940,
                3213813993411776195,
                13309643264471443871,
                14152370013037392509,
                9805694808649718454,
                2991106746654603900,
                2279780759950444362,
                13989789024965052794,
                11942900996372546394,
                15051646099368945987,
                7583267444740224154,
                5192555551306992142,
                13216959612015226558,
                14397593124921798192,
                4374707725758052604,
                15529039788482882168,
                16475619415913302762,
                2649655538625316107,
                11899566009797061232,
                16892018353302708322,
                12364166218684092426,
                10372683350152669575,
                5328477050361662527,
                10949313792626687170,
                11924230090558408019,
                636095257275314085,
                10210914536395617961,
                6515368615710817299,
                17001040330117317563,
                4519581466335837391,
                12514298524110577503,
                1744739741016504912,
                9689951195577973993,
                2774540351629210180,
                7646006525601223889,
                7530479442266342421,
                10538917317906671989,
                6031253606146099659,
                4606167752034374890,
                17763804757970320617,
                6871166461842469695,
                3069238346134678776,
                6898492556629873366,
                18330913680324098797,
                11469514731644700404,
                541525751461369940,
                18096353837092553451,
                16390355202675291281,
                11980660197830118439,
                15349236833293249382,
                1901608480726107605,
                10754477505423276549,
                1780265741680781169,
                6204486525934807168,
                2675596223932028138,
                1082656654749778403,
                15313246555910578407,
                16597928615331243076,
                9259667019969423039,
                13966308744186245944,
                3711817850123753976,
                10380302371138242940,
                1102076039759449071,
                1796134829015781040,
                8320143967311972799,
                12603759772660781109,
                9343508021191710450,
                11833581848018650785,
                5036078561764059265,
                14477046704375156568,
                17958581882146395247,
                6312863763728381603,
                5890775652924120757,
                3024100139720533291,
                15594980805126031556,
                9929023026443104564,
                6003618257535256748,
                10584762467178432077,
                8070692469310128137,
                3448506857138757663,
                12067250229870443464,
                8289617863280099780,
                7705347156484755083,
                8239333463449775936,
                12953560490361273923,
                7863343728067574413,
                15499170354027597711,
                16789849673988523596,
                193554686279189480,
                9324166766841362509,
                17865442848307712220,
                4017570072096420828,
                359910874540192895,
                14283136222667718022,
                15545842610688758167,
                9161703351540143861,
                10856046010222875891,
                270665191423043189,
                15816860058997167317,
                10604344774996324885,
                3421439666836669232,
                15362489920565158049,
                901986887674190509,
                8102011985696643347,
                9831189590417175739,
                7694208525827500802,
                17761503253302918415,
                16843825659097088549,
                15968418888658984723,
                13213298841864639514,
                10768746828601368994,
                15843374988242905966,
                10372481985078119452,
                7145529267057724453,
                588445411774656377,
                6907651744680403237,
                13729433346623178186,
                7466282812151723072,
                2397976897839660773,
                3595288154116844222,
                3771046205661211665,
                18292138992930644589,
                5076094080207419189,
                16955129624357257007,
                3929215337030354093,
                11057894513779502294,
                11863471976993485758,
                9408615240131003867,
                2448439901554368107,
                7669176413900589628,
                13955883899642443946,
                3559761514651432863,
                5999853120304570098,
                2807928142993089395,
                6880972979489023884,
                8540438276045396759,
                13336393887543928327,
                14948024915319356336,
                754486632845103448,
                16252590658474672770,
                11838852632524903679,
                16841746824793599992,
                4866584459095974245,
                13046184814853980498,
                8710985684981006226,
                2355658489901240093,
                17682251256218590491,
                12738885399031396318,
                3641463259326479601,
                11573802402437143897,
                4785854649163125380,
                17654700608592820265,
                7689738254866306083,
                3911334929659733907,
                3805687817679677472,
                3372180752527728873,
                12516023017017683246,
                6541569134387572029,
                14932792460356112158,
                274079842264421275,
                14741476297422044947,
                7640237864595124592,
                7990415001403780690,
                14485175485850127358,
                15701126719940798119,
                7497786401585040464,
                2046586308065249596,
                4234230752844127257,
                3490034085431124756,
                7410205974894450493,
                13594277608316567296,
                13163068385450899386,
                6911330603633557461,
                4165273348787835236,
                13196815825235476993,
                15409229411685315073,
                4238586327560550200,
                4274172509763128574,
                8233070080684386642,
                1152981557203525396,
                2258263369774438742,
                16860590243592954334,
                10642146327347114407,
                16394076595581895042,
                3547145813374894294,
                7303429257652622247,
                4599869911214805642,
                1470127264048118954,
                6553553520469198052,
                624221776008514758,
                16024993613079197687,
                12072685851575104500,
                4289561477780298769,
                14522030035108027997,
                10025959010474970695,
                4338629041423254482,
                12668451231751642706,
                7041673834301289685,
                1101300709714299914,
                15830324192849592102,
                6361267392222383309,
                12743724653827284764,
                13913765213720067888,
                12472686594479717483,
                17041667280903689118,
                12612588174971368395,
                4625038945277105759,
                4288983616264520473,
                13257170061268337928,
                15378358854815534796,
                1307879339751355693,
                9045256242044980161,
                13066137780318064542,
                17483698129188252816,
                5537781126683250458,
                15814088167067959984,
                17124111106622331645,
                2228813159198082553,
                12771677329276373795,
                7473600359686104579,
                10172401847101693206,
                8817322474066906889,
                10002046533039894942,
                18350636570159627372,
                2608194133937884904,
                16496103406635747044,
                3203166370447920771,
                1416097169966651887,
                860034031549905008,
                15435212006888252138,
                4982756044520683355,
                14527835149012332766,
                15648655845991912781,
                15220061209366144565,
                10713592116389348982,
                11856331444132914701,
                13011883287657858557,
                18375660967945668491,
                7611177834315648116,
                11475292136381607303,
                12142625427672665818,
                1644376245508948388,
                14986147846200059747,
                10358191212479538383,
                2124663276626493099,
                15025396046176607689,
                7566356641233415240,
                3834259550197202335,
                7422439917941038432,
                14335746041650957139,
                11010643115481291768,
                16639917992723217687,
                3400935192914355446,
                6526469202356090658,
                2911450085827434145,
                2592450403666061908,
                6573976403851247795,
                4285219873414520276,
                15329532146725863869,
                6799347789229688901,
                6639341479260471078,
                5137054100466749121,
                5102420602612942914,
                12454937665202983967,
                12962650067948965377,
                17483657740097839287,
                12223498331603994543,
                14079145217780475833,
                3310333423646124225,
                8148231670879135605,
                9541038636961784750,
                11089617618703446533,
                3560209342825276058,
                2574634823119268479,
                2588311243176990131,
                15013509191556503430,
                15455072885984268053,
                13986137485131324765,
                5720067926322634989,
                320358790111393789,
                15410939285136639329,
                15697272961739331244,
                1355846111750777085,
                2546959351276906905,
                14534695021313396715,
                12100942362109396400,
                1909839808518887758,
                15057164163203198957,
                10816292376571145141,
                17932667027515587541,
                8894763284691124395,
                17376767493810914651,
                1054656077023869452,
                8186894411081110112,
                4918609723063820894,
                10472223930221187526,
                8210872174259857628,
                8260857529094096436,
                11707883934354468821,
                7798711246011152830,
                12313898141945763999,
                4092899057830195664,
                12768752632246510730,
                7011904089799177666,
                18269846218072729005,
                4472126139715717850,
                7263280326862818361,
                4617033187864299345,
                16062484525314928005,
                7764862313171817272,
                5507098054488704246,
                15417948890339509732,
                3199184308759380889,
                12873647785813929264,
                15851634423390314715,
                3379562369756927370,
                2914796073219663247,
                9453518290639493724,
                10389507097848983202,
                6987583823829734148,
                5644521590882572085,
                16385036288302112854,
                14202037992186130818,
                1662729350231436066,
                16086866498209553899,
                11668110277201388817,
                2581723866463834707,
                14466562150912612524,
                18444381539786477861,
                11792751584642451686,
                644172128540161319,
                15714856399314491326,
                6336413224068482580,
                15648040294508822482,
                3581892413107868745,
                2087860646799841458,
                12928312782299116049,
                4630539989871908829,
                6915603518697601787,
                14918733616941773093,
                15087665207194981362,
                613969264471068110,
                3544544803540968193,
                5220360717428049381,
                3375260723217895506,
                16778447987047186697,
                11894812810172861433,
                14542979312432827779,
                13561316753657099179,
                1968473618327458185,
                5456934299993876358,
                7469735400543018284,
                7068657239043349097,
                9254040800524479410,
                5214107275553666760,
                5001330682797736624,
                17026132790954295091,
                10969354337912897232,
                869351389198733586,
                9574587810937905907,
                6923373747285449001,
                12719903474522918771,
                12250857818862900982,
                2153256573644871951,
                13709729097688338391,
                2899377834668376960,
                6841869401787596550,
                10339715141881541659,
                718655127116157511,
                13741406681906111321,
                15392288868670671619,
                17545786767738322758,
                11089794771839702758,
                219094231550242583,
                9674358307241496741,
                4002620491443309348,
                8012290324302967070,
                8714326673970415123,
                12380264119087982419,
                11108551912665576265,
                3708955946231240253,
                11607264285750874901,
                4216424611300123940,
                8256067698160491644,
                7506994298913059376,
                11501100133000306066,
                7549037119651533111,
                5112970978157051505,
                13518442004335850902,
                7350008695599366666,
                9542638447580599221,
                2158188779042279647,
                1604170908932337076,
                6391929341437538244,
                10779746559124306734,
                12656450449103176181,
                10121044395803332310,
                11651522650180060700,
                16328514328541821784,
                10523761782294701174,
                1822303728984452144,
                7260452386953933551,
                12204494523152059466,
                17100382786462731446,
                12548225060484474439,
                11326872465335361323,
                5596285187831113760,
                5909751003547848587,
                992306619579834385,
                2228664329259510492,
                15196270917670055982,
                2131889695890586742,
                9819776790840463517,
                1473593931814601068,
                14939513955417919643,
                7685117665289355354,
                6724244559482510387,
                101460542568704969,
                7352190705745517803,
                2150669404455836808,
                455126870518119052,
                11553577781469330615,
                10384536636375637150,
                14364597940339752635,
                2495319672618636831,
                8180783418013670444,
                3773765470722916252,
                10227754258298095569,
                4811293038656815364,
                2304664986814074602,
                2418992918773594204,
                6388448639180737685,
                6893696275605311774,
                13851958766811817366,
                4793074330182947851,
                4813793152033309122,
                1098414269347239038,
                11751908186279088029,
                15167430159498163699,
                10528686090760108130,
                17120804521852235295,
                5538072916971524268,
                18284870874128074659,
                224523015148941267,
                14496093443691170173,
                5490655299006793623,
                11584315652765207551,
                3229579698633170375,
                5527375504543907996,
                6239324650299686862,
                2232148196848710005,
                9031256656667465794,
                40023723987633148,
                14627741678268078967,
                11950626749898431344,
                14785414395108523186,
                870832948163923646,
                13004928204786500706,
                11732704426571300600,
                907514934656616373,
                11587740830029349245,
                7583505136677874861,
                2623787766244261370,
                10256163025245964672,
                7257287909572091733,
                4812915812660879618,
                3468364439026649335,
                6604147596013682093,
                16816894664989923710,
                3964120271755066308,
                6086548275463043980,
                10447117175471304144,
                12856607441078849807,
                10592398111690221432,
                14269275707379118835,
                4396127772639422927,
                10489721798852691549,
                6681412646421684356,
                12490106130106455109,
                3624408102113036819,
                17246634770535451304,
                73750230380742720,
                3858795004528971618,
                18037249274864620640,
                9013680198221453825,
                11909298583725721915,
                7512555591920604211,
                17449244834240874515,
                7793591661081767445,
                16652407448095073621,
                11804971167281860328,
                16410605854679152138,
                1713343542446776550,
                16483548344281970818,
                4628627981197409087,
                9083762764219706193,
                17065951854876058290,
                11490185594933330698,
                9891012968004512035,
                368256788081374064,
                470621950908252,
                17956316299265730194,
                8221822257224301188,
                6380872247545425488,
                9031471961851140451,
                17956391258409007260,
                13017604911584754606,
                9245778199486992293,
                8056793204522970093,
                2531655295742236851,
                16039488662052065607,
                4695551407385442957,
                16581782264738209135,
                9457268466305801158,
                2502271077174158302,
                836797013558343943,
                1224523470498102285,
                374165187087964522,
                10212314508075547184,
                7669093970332858967,
                9176723313583927295,
                8839526249801396044,
                9460240515540152245,
                526138750665184089,
                6908994573320912372,
                12176043050383940227,
                8431292525679019707,
                7800865258551716648,
                2930208417676545581,
                12001139080437682925,
                2848294057310329443,
                3495763019164815081,
                13998099468531902475,
                2334207795701343601,
                1265352082029868252,
                5352951968929077427,
                11045950825318827473,
                17705541510574119706,
                10388016860076689091,
                6188336841660552180,
                3874842388902329486,
                3586889024655840994,
                7577730940669490050,
                3828324032996703471,
                7382564057518691083,
                18020764642442034007,
                3255848346667024023,
                913981917700616307,
                6544220161742236189,
                628453794376152858,
                5273139986123145851,
                12804359385937816703,
                15490118777013724970,
                5004956137979193113,
                11537600208633214816,
                6041778305931749161,
                18021165191120757752,
                4439552721639804321,
                9445924893904633163,
                6333608419766441318,
                6265966168082228187,
                5090746176805509189,
                12079779788101746835,
                3405057163683809716,
                18176431495575685240,
                5416316679824315388,
                5666993498240944478,
                9396996717121195736,
                15077940112899068312,
                15769845674133811095,
                4172092555141541227,
                10535661541737621064,
                10760049649331328984,
                9044328015087752668,
                4208484814661836163,
                4524519455413453106,
                8416163180819044235,
                76133776812564214,
                8938397440798861336,
                7699462000599225384,
                9542247023407697767,
                1397476485288102889,
                12838783590422826565,
                11111769246893411506,
                17719085637529819037,
                18350048131892648764,
                647133208572620551,
                3545832683987398107,
                17392149180006432089,
                4645454948531556636,
                4638633830898005179,
                15832113029610700219,
                12312766094616504216,
                11054531676785061901,
                12882000175930708962,
                17065292675540451547,
                7348135285662513163,
                10368855461513742486,
                17213692472848349009,
                5448237816391429929,
                17475251701204191843,
                12352004908893419844,
                4421019229248084817,
                5233890583141520327,
                15415498665325430242,
                8699482400205838797,
                11081065321342975843,
                13692414560354688711,
                2057100631763259620,
                1768191442150902149,
                12463118341434320148,
                14697940362261450576,
                7225350934202123472,
                9180626944525820669,
                14817691250517499688,
                9524098384486815580,
                4894140555324164954,
                2309262794362375113,
                8645740617004046828,
                16829903653299752341,
                4278553392732422821,
                16174995535301769275,
                7274361875865992211,
                5483861345936568593,
                16555617280692737205,
                2106788877369503099,
                6355572984153420404,
                15413046204382700864,
                15184587830187202860,
                17638950466015943646,
                10142359495639047596,
                2852278080143788489,
                14902051473257283997,
                12684082230048932446,
                5127878269602498356,
                1458833335160283623,
                18343902965575788886,
                15956410439937236477,
                10143815431586875695,
                8519328419973108156,
                9379288137799805556,
                11116700304696206296,
                3269635235146511468,
                7446145908658980471,
                8423421258962502269,
                2960959498368537205,
                8029834119982365442,
                12951331847284209016,
                13335373530776006943,
                2051038411438343086,
                14988843915712852160,
                11070472159205332532,
                2405233098821133668,
                12872299485466251244,
                4146849588411590424,
                8652997027024585292,
                9417874732592565535,
                2771366489480367357,
                16381568131097774387,
                1160190173665475303,
                12142110843989704382,
                17157977103678150822,
                12240974252728213375,
                8005232037362794911,
                62748564819661432,
                15562900352067429326,
                13819933941831285726,
                8700733640462543781,
                17417693392111317966,
                11195518897113567806,
                8656545261572504126,
                2665140739762930045,
                2523114891549547532,
                15947075740878853027,
                16617762624958355772,
                9189411410511795645,
                9417682881040880723,
                1220008371097876826,
                4473435335583972063,
                12416336276688398745,
                9439155074539900208,
                17599514971068491442,
                1382978212068751289,
                12012964446858847311,
                13059411911626363940,
                9000605160655962560,
                18444429515577739106,
                1678358883660355393,
                5074103451266196440,
                1108189786283239561,
                10612698979413855931,
                4989895863474068758,
                653620819971957060,
                12060263383072344947,
                15076531277958824549,
                10597595939754188762,
                15724450558403473627,
                16382650125476798913,
                8738893762787150302,
                9733212779214420390,
                5558001311635500417,
                2720376062751869999,
                2936217033743496825,
                3059230718610361194,
                5589670835881847684,
                12297086381101763222,
                12830838307506907529,
                7727866232017902927,
                16978583538503170044,
                5646531489086592542,
                5696883024644775459,
                1778382958859079024,
                9219341275099378906,
                17593963150311257769,
                198176573650528594,
                10425519151629874209,
                13457055667833759545,
                17213583299444020650,
                14862117423842849302,
                16906392281688863338,
                4290302946266596427,
                13505570400341984024,
                2056510386911305907,
                11571082458161054292,
                7566281435617775832,
                10210241606684674096,
                10697498687651578080,
                4947318501826974509,
                5861434792576988890,
                9869040491958929661,
                5532013052186573089,
                12416594018569715230,
                10820734898252214278,
                8537468997207455166,
                439343392893541672,
                14734630723072977466,
                9898041261033982210,
                17393034157801306127,
                13758525217758656857,
                2713096067589327874,
                12442874178280670969,
                14498768890161377807,
                161967360889456606,
                11930601082339405958,
                11362787206913160786,
                12545070484550723467,
                14815095129086834610,
                8605787829002095856,
                12923597973881209899,
                10587151577465292584,
                14183134664818382968,
                5172374334040473114,
                9364926097792520560,
                6171919845492918332,
                4386231931762251578,
                2155663571428617218,
                7765511219465701910,
                12061535530010910259,
                16100330205655290696,
                9974384126080194942,
                9674175848724908032,
                1687977953933677553,
                2052842863240418404,
                18296704913226861337,
                4023434438910601547,
                9899743965354682742,
                5310198234766113901,
                5162456985274720081,
                8646509974119784542,
                6113717383160009894,
                6014191554047499022,
                8484348411248636487,
                2876047496375093909,
                6660788054730924011,
                1664197372146636482,
                2820993293910648101,
                11665512417100144808,
                6502457677692154814,
                2170150732610996776,
                15522116097990839236,
                15440086643427998964,
                3675113412536301313,
                8316358419658521853,
                189389437052919038,
                6981753429704993440,
                12802645856607643857,
                7243825699014665843,
                12796799374814419834,
                8068467907492367066,
                16310382387876189712,
                1486061732225930791,
                382533986053029739,
                16359148449656380800,
                17246074348224240328,
                11700746273206874174,
            ],
            &[
                3594586856237428958,
                5997824235581423095,
                18106945694572591425,
                5369777421009534827,
                9691872015485910029,
                8277223356613193320,
                8300414822670435844,
                5725520566058443298,
                12306974089982798958,
                18060317567863429618,
                7394823371293544803,
                5138546813912625630,
                11381762187063629918,
                13795891775219840404,
                16941170847361878780,
                3114101041076250480,
                1627441821796544575,
                14373434374909899003,
                15751823974120672095,
                7114844122374964294,
                12348870676901510257,
                3151173383417682310,
                776184657901342694,
                7622972041378828791,
                5661139589349233199,
                18444306068281950084,
                16717471472783576773,
                2453181864182798762,
                13878855636164163574,
                2697911612949310053,
                11500180712127697310,
                623643852696618616,
                13977789271289438007,
                16089002372294802889,
                5700728318869652447,
                6942655181316110482,
                9295484069162391794,
                12555799549023063196,
                12437824612510230228,
                4067237838638331527,
                4042260540157790426,
                15358031372213218981,
                7375293741308867395,
                15371448718880351190,
                8424391863249382116,
                18197512030851004638,
                4697565561992305539,
                13311590212527810876,
                17503569525573518831,
                2367367325069191744,
                1326471798779182816,
                2280875067412000116,
                14549571747015679842,
                8045789489671491841,
                4497686055416253635,
                4010202321388359450,
                11363219040443956347,
                9612974469743198684,
                7690596049793655898,
                11690906809673142565,
                1370450637740102802,
                11687342070217262803,
                16093412299942800414,
                9997008751721738184,
                11754987271691383075,
                13819834885151063188,
                16845077938435135186,
                8911914559373522274,
                343887892671262909,
                4494892451719462524,
                12103980406521808959,
                6488834388353468959,
                4152486077751296306,
                16639967652404039047,
                5858398271090603523,
                14257817111576896046,
                10213327217611696698,
                2387098889564047316,
                17081070436212715347,
                1911079021927109060,
                15803126456028273645,
                1310809663301800181,
                17222305861889876939,
                10573069897260961823,
                9412558929525252792,
                9682369889898408635,
                11962049311090563982,
                5965079569584605350,
                14865733614651514205,
                2447981910438979972,
                17328967927265824822,
                15648469744389136728,
                18262394773605934263,
                14636605825851807882,
                9083797794473945893,
                9025739053249539298,
                11188290513227823984,
                10587217410587380579,
                13580707444446986131,
                12415686714142468705,
                1356990184364231130,
                14994095845793627286,
                6171876359780280353,
                17884842314222278490,
                4436207453841323338,
                17723367308109227012,
                15941907207802500160,
                3078577564444952378,
                11409457214199360500,
                9887901919260789486,
                4175383141916761814,
                1254666319327392127,
                1282221168759331968,
                11987113675417120377,
                5027561805712958447,
                3579051369716154108,
                12829602108415654749,
                5394026478388836602,
                16667874914598892310,
                3330196459483415008,
                16737702178681428488,
                1445510889972879885,
                17548042718866769585,
                3222268498568736762,
                17503995634561733238,
                2772145265286633159,
                9575234631002014001,
                6346834313174322240,
                327191781114223341,
                4183895557314694544,
                16857140696266627351,
                18436460138829666667,
                7798020615570072016,
                12122516145084219004,
                12341788428980295562,
                10542442298029530954,
                8783455073968960735,
                14365264653978832010,
                9696668385411924921,
                1353441155706063556,
                12228488114599325384,
                3203876433604606847,
                16806676632896446483,
                8463840989872033198,
                15588927437296468624,
                4451301342299362366,
                18319945996946207766,
                13389929674620308820,
                13104054207717801481,
                10315091670901042550,
                16344473241124585953,
                10552683838679802859,
                5880207654879155934,
                18375988906573500273,
                10832453134957582131,
                4636353071690443111,
                4654121661690917078,
                3577146264251561815,
                12797832477719435241,
                10740671490864269215,
                15040149558523329308,
                7796816016238387863,
                9542353300619344166,
                11390258959435632952,
                2087457610716219502,
                10422615268763127393,
                13112339405809012053,
                8723535168958386014,
                10239921146965340278,
                6513282921669469325,
                3450908699159768885,
                18047494649011673198,
                10298878480552871924,
                4031517553125024915,
                14129880200307273385,
                13245341565180251740,
                142293936665696849,
                15100564023304297719,
                12129521945437763262,
                17006618776295397352,
                2359253016977701921,
                15372275938288271263,
                7030508790783967633,
                5981151788826319564,
                8623897852847710240,
                1290827653422197869,
                8990203960900044825,
                10962966372027430885,
                1990016349334739667,
                17697377957496422880,
                11049784557063177783,
                15397557779693153825,
                7163175851305743276,
                17977382692150907540,
                7938361598612816465,
                18312648915972269634,
                39898235407970467,
                17237577292102821383,
                14768770315845268220,
                12163275050128474188,
                3281298543083649154,
                16919047222554278693,
                4475656313290072462,
                18253843931892737611,
                1866825044100640454,
                9098280484278986844,
                10905592904227149672,
                9996855374063860018,
                16867360352959165488,
                11231826979343065358,
                14975578212243777674,
                1816159648349497108,
                15754341121195873006,
                14232605178836670191,
                12612606094775533127,
                16751615573455906924,
                6508871566239411316,
                14264419405559865222,
                1232093328837969021,
                4170583985227962960,
                2303330123802005356,
                11644297178221861888,
                8692410420922916348,
                2712993562192444989,
                8026831745141520189,
                8802307139389858344,
                1941809897174066559,
                17322010029079648390,
                342656065441322286,
                9672113720462539930,
                10910866529513431242,
                4289492423082900396,
                11058177478258586748,
                1364514196857691678,
                7032285894941128959,
                12066375748474424358,
                15365104738538072299,
                11816829927945134731,
                397729498625998286,
                3741077467460124252,
                3877765007757413560,
                5477217126381252416,
                17665551840782024512,
                14957739222760165933,
                13737131533183627675,
                273054997495525283,
                1697327593809047125,
                3590262663858049582,
                4204421060558050693,
                12726801568577723109,
                15145359045822981311,
                7480634943476006094,
                9921671236717343483,
                11511245887474917062,
                15623196281189992157,
                8475118117184247401,
                5999059679518067111,
                9214567244340364868,
                13198873116939014797,
                6655215016500908787,
                1625660385265393064,
                12228308354030327384,
                12626179472567594306,
                12736031813304319055,
                8242816500290963115,
                12956122689020642237,
                10284362726459938859,
                3927314022795636984,
                12541703238882675397,
                1331111124071806660,
                12167414537228645643,
                7836312689846302768,
                17868735452323208457,
                3031578802060773881,
                14199956931959656115,
                12687814210556209068,
                5894567003184644132,
                8572760900561098617,
                3633198830157294391,
                796332493389832666,
                2041313463324032959,
                8724710971529329269,
                955634893021271295,
                1684853491026057131,
                5435036667387015735,
                2295851767890888248,
                17797894669834829008,
                12146236866491126001,
                3437637227298033850,
                16766898487486492541,
                9367430061730288336,
                9028668269324087410,
                14500356941199773752,
                10638204516750195784,
                10052294793853632619,
                6140242340805688971,
                14340939633164106180,
                7596475908553648821,
                5804277951065053377,
                8985885780654311003,
                9702056522849965220,
                1110953655051664758,
                18084119329270648632,
                9692529734296553135,
                13741246141721263549,
                9860293090921242304,
                15262709059312175738,
                15050881295633264500,
                15102394376219894586,
                1187517286918163909,
                4600494490457780813,
                9949997737543033222,
                12548051273588091575,
                1251294250005854372,
                12514674967656354350,
                8209795734416267670,
                5621953688199880086,
                2625216234966125794,
                1816441518826280116,
                14745883011138909066,
                11529564033952170224,
                7915149464909709510,
                11092522205731322220,
                14000262827040453262,
                11500588741410946006,
                5464182528201394183,
                1347089631519193755,
                9394782847346205171,
                8301709505992105074,
                789343227810667683,
                16184737414317269551,
                3952607262504811823,
                5889460465432404143,
                5965100411548663972,
                4496487369263481883,
                10867267336114414339,
                7012299638735890009,
                6226091031016319999,
                11275972049928859942,
                7202533585953054701,
                17863262545987604213,
                829102422123668526,
                9423125806946321138,
                3195060302966047690,
                209948536736776432,
                11345127486138365640,
                18062559394584387629,
                2142702288780102565,
                9848954741666431469,
                9785773656402403362,
                9317384270775958187,
                2617653067849148931,
                14133946690353986680,
                5772105535189370283,
                10595418510466854473,
                2906482636756668487,
                3018817677365523798,
                7447507351909056786,
                13526968716904621523,
                17092790697122522100,
                8641236682859520051,
                16502034166142995058,
                14955857037584629856,
                1007758504466420460,
                5851324741621223589,
                16596211145178902745,
                18186625241699221408,
                1267103353578998461,
                243071599922609707,
                14517210614638912070,
                15057372306565561130,
                9979838156624188051,
                7975133518909054568,
                13545925822097273499,
                12867658143516063524,
                17533881262462511358,
                16356670253522979342,
                6092369572598992581,
                4573028473421447357,
                13938304275335513178,
                1315263866482735308,
                380057684148231406,
                3835456480460755042,
                1828600490288690572,
                11524648692118700936,
                7668575675477254961,
                4927847007606585681,
                7642968749404523824,
                7681851777026821870,
                4005760681469873112,
                8422795643629558920,
                5036390889567087433,
                1380690399737709501,
                7361251140747803201,
                9250287313903956089,
                9740587600198812657,
                14906555012214851177,
                12881827769629431561,
                17572244782122473499,
                18370454099654336853,
                17860629679055514004,
                3546134039020957530,
                7931381106272112944,
                11706419130620665789,
                3740185226392899084,
                12262698676041212700,
                17026388295780548288,
                13694778344125167325,
                3072926588523932274,
                3756372223493163520,
                2335619280215352683,
                17531438597287171576,
                4552132324090931463,
                3286011129278460598,
                807082643964194568,
                4666185161440732584,
                14542335508110047022,
                4748593087952186957,
                4012889075062716273,
                521589536973278552,
                17896788016392525340,
                17039689444406542056,
                6553554992456494849,
                1512896227367613872,
                12822921313714807925,
                4111454639616903489,
                14251706422354285056,
                13139747483840995717,
                1273069312535292496,
                2162114314684424541,
                4163850841149348549,
                3664043121154853083,
                14729191601853260054,
                15284744750744306898,
                12510768474336929255,
                11145273181903059662,
                5085653485125305352,
                6747370505378000381,
                15479121662679221243,
                9596872513868588029,
                5806144004708237943,
                17661913749716657482,
                12335340174016639322,
                8468074092315538150,
                13291538602635559911,
                2821204544422246680,
                17783435143556609123,
                12993990360954000430,
                3773276397662491809,
                17525402731899178090,
                17168762357406194265,
                10542489918853487246,
                15811159675024564336,
                15488196215489418830,
                8818235696498333905,
                3126553358413855458,
                8375860131343651072,
                2687150660280108423,
                11622270767066056142,
                17328049472948882340,
                11220911893655381529,
                224986233278212797,
                6604366207763258982,
                10303213229226473460,
                6150391194307548313,
                1532769822993189093,
                15441342515854434751,
                8341588131988799593,
                8558135921887321205,
                17208924441221496201,
                7858767700070844969,
                16471624916022463650,
                7717459047018176330,
                10599641480680231262,
                15994255185665328355,
                12696756615582176715,
                14863453143000367171,
                13847952559705482124,
                13784944020159703430,
                11340906950214356755,
                11292879710786126405,
                16143496660810886411,
                16724520942083796554,
                8368982799465903051,
                2150857094949894324,
                8955935246122327128,
                18438158648606397729,
                12835653824919990872,
                11957883793292221645,
                6052451328426769733,
                1746957330104831742,
                2757224925857577697,
                17661658240813358336,
                3709266717503365759,
                14389949788790643304,
                11675670476414905296,
                15500498798366693199,
                8258104249313492616,
                764096997356311949,
                589951004095337118,
                12485552986090158378,
                1068031484948243915,
                16605740691516699028,
                10473029485340063167,
                3049351104913923232,
                15845731788695586589,
                14287046325879279879,
                6320073903366051707,
                16066709192467332521,
                15231205866572467189,
                16108188309301277950,
                10035490566382353246,
                18186672753013695389,
                2876707137968900193,
                13756992643025211507,
                11733973078940380621,
                1043890832441880486,
                8496204537482976481,
                6246303435819606060,
                6751199421379153121,
                4947488112166675894,
                4821550422447014784,
                13874443557443817072,
                15491151791617785605,
                8890963329181817287,
                3458374110836980981,
                8848682385288002461,
                14591433581421428549,
                14306147895001110991,
                17935563696896336143,
                8676844021218567810,
                11881349447079652233,
                4497976175675682165,
                10693808496201580095,
                13391168868254925122,
                15629435612796015718,
                15922689757186949286,
                3412029294328545342,
                701052949043722294,
                2423314665570871346,
                4353513413515515775,
                18166762391978185574,
                9186156162309331881,
                1268279649890100625,
                4308217856415291067,
                12173857132780712488,
                18144886979589922015,
                16243378756945549068,
                13507249524703516854,
                16831330011876503831,
                1994671814775470066,
                12796942923946388445,
                4529951020994856861,
                1714548922942971735,
                12371202587820946720,
                705076235612627678,
                18205142645136588080,
                13596626625484305353,
                9972137708933558834,
                16743495633512909,
                1997864468110042410,
                3645819153758869891,
                1635150662123830519,
                18255329060805359785,
                9623833873270912396,
                6707206270726414923,
                115178768724123514,
                9107180622069529336,
                5779697096131347405,
                6562577309923052469,
                16399518123999752109,
                12767521663616393182,
                3437327565019673630,
                636692249439777277,
                5913139906815072528,
                7033361214831924363,
                3734621293407093089,
                10070285767840610976,
                643318167867702369,
                16179749096376018639,
                17943149477486904936,
                4337354385379270895,
                9324323254182908698,
                9430256495080031743,
                6610492419629128562,
                14310625820190029921,
                17178454846869464054,
                9747133334416100079,
                13896799715381654411,
                5925123084043322916,
                17541914329530815758,
                7522533365357126514,
                8783646848572998744,
                14124286620728075053,
                11584012692380832279,
                12964323900711387940,
                9014571252110133244,
                4291912469528547260,
                6995910770375595064,
                15225286416316441630,
                11856347119730041734,
                18352892908708908239,
                8986410291078412150,
                16224902571115364893,
                4995793911920860524,
                10582495465487609975,
                7219473912244254743,
                6105825861348916268,
                3031788142624263331,
                2405120948753921386,
                3388158164171415180,
                15569752261469238728,
                11865711447329483913,
                17596961426365956296,
                15751473638139106576,
                11834338523813355103,
                13955575815298784847,
                16300180716626739956,
                10129809968419608061,
                14618424154534525058,
                5865323586443341580,
                9536853263477083912,
                17331617928467723487,
                2507541630984584427,
                11810566947361745765,
                4088556367114834748,
                14927557845434061919,
                3531659285508871954,
                990032578264635138,
                3080790007096957728,
                16774711611413763702,
                17277430241980248523,
                18159548027432263984,
                4006322693443146518,
                7180053478882046712,
                4240829398198232701,
                16769511613034925015,
                15868464444235003264,
                10658884407927468064,
                9589753730320791995,
                13702671134001044499,
                12013501078802924056,
                14238660455565587789,
                2508715080067956581,
                5780940886051583044,
                5443409745788847011,
                7087326994450046144,
                6502079163893407796,
                8465058330099867354,
                12329363930722540361,
                2269752097155035673,
                2473179708552781752,
                17813411053932910307,
                16718849503997955009,
                10311907893650909603,
                11711060061729778846,
                6202000401339614885,
                3175344880215722164,
                17102839007824360668,
                6084952160688038415,
                17055890059971299514,
                11459717661872795857,
                15376852828128412609,
                13588795185785649570,
                10811729059202241157,
                2519756038449154050,
                11772434372968017926,
                17918830988326226715,
                13640825138017500589,
                3616123121466473500,
                9468167612990666976,
                4316969512187481955,
                1290629479158951458,
                16455502329838682258,
                1393000865873261712,
                11125215634614933537,
                5192310971032689984,
                13233724647142845976,
                12952476789215665369,
                15899648440834464417,
                4269253090160480011,
                6973988417787048080,
                12333953403131658858,
                10726127211359008958,
                14591247367332788547,
                380641304012439491,
                7498776422064942305,
                13885928008449988518,
                1467814545179490761,
                1860370982665971777,
                470045086002328260,
                6181958881837577979,
                15419457425464630845,
                14798662432051819245,
                11251583330874690989,
                22384040680022034,
                10150888362324542926,
                3760439535169014583,
                1602991507463397082,
                7459085908332152360,
                10605327307673329635,
                15917898735677308173,
                8343322342584750559,
                5393553119991558102,
                1290398580225413157,
                2838851791633617924,
                6337842314760282180,
                13081835650479907029,
                18255270689222102761,
                5678712167855221687,
                12541328464692110959,
                14559909979575628692,
                5734353279371918564,
                12436917190356078564,
                10579543055668860017,
                17337964340272444620,
                17657301701865541311,
                7908664268390946834,
                8862641381140028009,
                4974749065227820364,
                4337141413352332575,
                8199120275579213476,
                12891202443273262660,
                2231773361773555021,
                13035819132778862135,
                2254546336903660762,
                15884370260923032144,
                12247481155770539743,
                14424361930230669374,
                13563593156228061299,
                8781543351600786157,
                393240631721848409,
                16796624926836825378,
                16477666032336065319,
                14883422530366228333,
                1915530027608907935,
                5868846719035039746,
                12587791606048318066,
                8723399038462045079,
                346740222600932583,
                14828068206708180956,
                10977283960077369593,
                12847694693977292546,
                16056726334641439095,
                15594259272644602416,
                10118349040635649900,
                12741230853182662390,
                778622439867435462,
                17514270972681376560,
                16971854740961521018,
                14118650456693216183,
                5046965006942474027,
                16614897108688462037,
                7340138226120218912,
                14527773120548425866,
                15646352228941852973,
                4302426896604984169,
                16784052455801005321,
                15921844867285253784,
                2381478634388948068,
                4470300649945796067,
                5479197665701535286,
                12776981959611628366,
                2319879365110208663,
                17856444665198974031,
                10746217064232488945,
                4315227157765058572,
                9898070875314793964,
                15229043488147304556,
                10381942274045522381,
                13512202749827418899,
                3763587155861562300,
                7620809723570809390,
                2526243279162956104,
                1465872318491853187,
                163352369311588190,
                5468294321100649081,
                7104806806817952024,
                14063132590628866011,
                1707301373088073668,
                15246878701953806777,
                5159707047607769848,
                11769340238034172709,
                1430874020413856642,
                7388615858502655185,
                9923975911358924921,
                13315267657543568416,
                10792641201388628130,
                14048832996048194815,
                14474171538894906602,
                9267693476225801285,
                2166605442077617520,
                9678297978343640745,
                6961373802827361366,
                16194647787487880440,
                1992823145284553818,
                13555598311149681377,
                5055968556909288675,
                3965798133217150763,
                6133510486411807656,
                6314071801668480472,
                16826390388722280257,
                9925190747598025431,
                16711420950523223090,
                6226330251492191145,
                4109937645127578403,
                12444630715323326673,
                6847234274170061977,
                16186450916082564829,
                10654826735664227808,
                11534265071422990323,
                17734451515035863233,
                6451694540470755002,
                7404688784264462072,
                1844661270910640233,
                4876341683982415291,
                4621995404496263504,
                15852427353416125199,
                14340224393479650811,
                863610120069989202,
                4751334033539172809,
                2980159108692947478,
                15411410315907827734,
                173168597281837854,
                16032690352854550631,
                16378768553918775022,
                13737092227419742025,
                11762934705688982692,
                7938503345444696565,
                8435418179073387725,
                11712985912566689058,
                16004386961795471387,
                2962358855338280974,
                13259543794369478103,
                6353427702673058383,
                7085772493310959859,
                3588364186986115552,
                17915845125226305763,
                9808251701390486828,
                2158142165912850942,
                4691348075235986465,
                8053891876321060263,
                1701595525057119500,
                8245755748230064557,
                8613492467772362763,
                13675149462262611397,
                10509064953231417547,
                9646349997577567853,
                14545533711220311875,
                13021446960830862200,
                794927318570186488,
                542833742837941003,
                5063693132805983501,
                14684878417631512070,
                5114822238580567625,
                8273364330389654264,
                3571857504693143628,
                799239708861260901,
                6273313022460270078,
                9518525634488459248,
                13571489290801311273,
                15752141778029048657,
                7291402494164012460,
                4290469266006480900,
                6554507066785644516,
                2959997759427662836,
                10541592608900391159,
                4293139875450935136,
                5525397732806767970,
                7898908356659466050,
                12509781753727155943,
                3405800083118177733,
                17728371249128642252,
                3947127960407548200,
                10092113439899026978,
                9328040765672854917,
                1248332462096323315,
                10603315719765713608,
                8205950523916923730,
                2296370110105587862,
                18038211446840649899,
                2071027033926644952,
                2611716943963267584,
                565426880963215684,
                12082798431989647818,
                1262807306541300883,
                15357984945904141115,
                13582028649501060893,
                18161107447184229572,
                14454134435524387052,
                5552991415567030103,
                3123389384775661664,
                16206147663947982662,
                3947731318667216443,
                11593347455162248920,
                18415263555421379096,
                6340683777373226440,
                10266965750546344944,
                11542931066524989244,
                13352235220023597245,
                13043895623791507632,
                14986530571343407676,
                11639651500495701895,
                6444695200791802651,
                12640532142813710882,
                7911807904924532124,
                10719275786098695360,
                12483421480373657656,
                3778288462364007034,
                5651386731486987155,
                4477484045499644604,
                14045624179073493961,
                16656727073144501697,
                4169610857150766018,
                4456317538389096551,
                16209680505815783326,
                10063139284800726283,
                11765236618067514557,
                11803908282525267169,
                6938903930594536075,
                10810073822459096647,
                302871153039929433,
                18326501470477070216,
                11817798423225837847,
                17502172116387562424,
                4133457004641928583,
                4148986140630370278,
                10188415158928654989,
                17379180441624469170,
                7259204778614767039,
                16646751529258875918,
                11647482332259019910,
                8619186828439261930,
                8490981817732827712,
                10369422717234637195,
                2892527542280695470,
                17425318346121195814,
                10828145750999096351,
                7078995839941276570,
                213352343672063316,
                15094639946644127831,
                12607985439395566916,
                5955916733332521986,
                8579933433192887946,
                7871442941120869085,
                11554632074995494135,
                11652936450602906436,
                11007984151853848873,
                1041761267322399780,
                6144819907763081643,
                149612314949206299,
                7474008064792379770,
                5334042690241861180,
                9085572098291138687,
                16106658597496927280,
                10622412062145819612,
                15221216499725086492,
                6713674554418687336,
                8919398431941295272,
                1259305198131407767,
                4125305034269587099,
                11292723729687104587,
                17550520272904869926,
                14300285663118054122,
                17651649700385538325,
                6515515389639875255,
                5998975387477999392,
                4979569443689280403,
                720170541160814491,
                14252726231900434814,
                151009130836684142,
                5985542076789010191,
                5480528376021282440,
                16074646089168847472,
                8744642307435880660,
                14992623685451277867,
                7322978655333382474,
                9459133969841668298,
                11616558612523121938,
                15237288627981848441,
                12340283711300227220,
                4307385426083957835,
                5060287555018892180,
                10025087470765614277,
                14171329543463245476,
                7492526979752985447,
                6346616424925159985,
                6141223327769225159,
                17247946171138841556,
                6261404185163537151,
                5023163377322105313,
                16254767204788026306,
                2828324189558285147,
                13506099055854015775,
                5346000241174155935,
                15287345424248447504,
                810002714789219825,
                2135544417484474120,
                16141045060472012127,
                15566657453202917165,
                6838050207450986724,
                13707280726755471796,
                12825372709716849409,
                1151801150079586709,
                11706356117928581631,
                17737810825329609628,
                5892064243059884309,
                5994591573500892658,
                240598676092243371,
                14621152024470867517,
                7638751021408304543,
                3188469996351498175,
                15093187474130017739,
                8102143523845853067,
                7226177729464461341,
                8765920226853376093,
                17241792527728310878,
                11089343816812804469,
                13289800619211752263,
                9577227935668680360,
                9196502297120503559,
                11910897679656003185,
                12482528177605398384,
                11727271477018247784,
                12907509334852191408,
                8117063924304605269,
                17988853154120124135,
                412009925290001119,
                17562369799410911811,
                18077585798078666358,
                5187081341925388214,
                10050438195489331613,
                15887294460579717822,
                13146778271460113079,
                10954434742696832355,
                15714296124420481265,
                4919364231403856909,
                8799773700844205148,
                8772661678971369936,
                1511002248336701195,
                8677060651418759379,
                12053102151285350380,
                4291428539944984036,
                16248193550878652744,
                3824637663415011217,
                18225446007255047962,
                13248770985631889130,
                1762023222033963816,
                3596805537342084941,
                3815595957794072272,
                14221867433187923369,
                5047749264671185377,
                18318162823063931218,
                18043061991589279569,
                13988989248662657339,
                6282390326345347911,
                17920705910930099359,
                2847517881043829272,
                18414344723509685565,
                8464555818524253131,
                4696858676453751023,
                1984951604633238437,
                17261635602989789255,
                5596537801149349046,
                4616202707945507437,
                10212991105412466196,
                17007993587029315970,
                5827974697795686227,
                6175870734113731440,
                3567413808879435622,
                14988330267451940337,
                13736819085881144174,
                6544430186937532784,
                1333896442106016567,
                17651538382929345912,
                7645895762930408229,
                16335539228424437965,
                14762126228238041817,
                17638681736142153574,
                4801147597457504427,
                2593572506126770503,
                10777851773729995812,
                7597035761959927357,
                2894959229604383104,
                17813862374126875493,
                1667537312990079705,
                2111094049852968706,
                5512916913740522055,
                2313024390417876380,
                10374076149445622481,
                1070924077269143897,
                14272486039721259695,
                4852057081224622449,
                15871762249192081445,
                515235442010765235,
                16114206216424388585,
                8245890551024474044,
                16257218411161590232,
                13950049707316054488,
                18086082736991085709,
                11521768039421816004,
                16278766730067268905,
                445021635202226342,
                16534369824738425273,
                853000201976490163,
                3341635576142727743,
                7507169208341537913,
                11735547653623757373,
                1187806331431749552,
                4421038865123494484,
                11056722462547624612,
                13754650479612351630,
                326222490866134332,
                9188864979197147317,
                2271946967571040075,
                11674821381118154464,
                1202775853353787798,
                1799855237671823946,
                11759565113802254057,
                14891253643598468643,
                5798627104869023436,
                5422824534737725532,
                2338362469987961961,
                1765062885694374272,
                5541710212221099404,
                2421202716764084844,
                8798140732950326206,
                8077790960191128699,
                3130257835322872201,
                18095796129387652899,
                10567043499984600112,
                10565948662089842632,
                4081434024917174309,
                5620143047638028243,
                8287199545790302891,
                4590832326473224620,
                1377872673376488959,
                4616051169850979198,
                11918102346407772457,
                13797555928826955336,
                5629375614052972666,
                793764946850555548,
                298593192495296597,
                13643998402531755926,
                4612390137906915583,
                11473709230976143742,
                11340806663028478976,
                15979335277407525286,
                3382976563275445295,
                2992061340144632629,
                3005044936437934847,
                11499151483727989417,
                15253336153928196413,
                6291119148276832279,
                13516340268274482521,
                867708850716575053,
                3398142748022933862,
                6641053332830210386,
                10401620377568476448,
                15151139781527318024,
                14109502641600673815,
                15920595307494001474,
                17321718006665648826,
                10716082197892102029,
                12054728641069632745,
                16853165359732652897,
                518996277787655763,
                18102063294376743672,
                3205036357911683862,
                9432302472718874342,
                13940253316796739130,
                15902396957939556327,
                12804434055641637086,
                10900852703214093959,
                6214839016355089314,
                3421088351131279364,
                13618608303059802359,
                8587843003643177485,
                13521718276206728450,
                18263060908440747350,
                5800331361655879155,
                7530113700895940506,
                13202874917918172882,
                14616800240220645356,
                5937559843823118902,
                12091459054144934373,
                10953801563518715863,
                16849143362645073351,
                6348588031927972798,
                12184557995395680386,
                17164648569628470093,
                173236179981584650,
                7739020618507749879,
                2407025576603197656,
                13619101571430203391,
                17179931218690131705,
                9285980237565185530,
                442047070740903416,
                8962603603234817570,
                16584548588877119739,
                4705022601549530771,
                14016313032441334336,
                7361079649571850282,
                6069184397159611582,
                7597198683333267789,
                10136712733185102462,
                12822423667571059281,
                17125882173994320255,
                15561492369338179806,
                14928805692743950120,
                9544191551141455841,
                17809625259400830487,
                9055445008280062840,
                8020117400928630492,
                17227722487996339155,
                14601418607249783001,
                10119058804993586012,
                2013497430499002421,
                5870521083008018311,
                12872127376995267701,
                14779433437438001136,
                4257318763082705976,
                9800931713728889471,
                15672805070193657710,
                9824998734373167483,
                6515096257980305885,
                3114082402068450018,
                10432755919204823459,
                11161904653460844874,
                12367548341480903432,
                312804941917152200,
                10283873964481346287,
                1595588969824113471,
                6338911369456871430,
                3907406277527440756,
                9470219563379708408,
                15503137061970659225,
                7861636390602048222,
                16963596896930915939,
                7155843803996585638,
                515206483478520636,
                4620661362482811196,
                17984676933167854430,
                11746565393808560013,
                3663079656320759032,
                8459316298636378799,
                15380228333692207982,
                15674029362437449957,
                3058615386053614424,
                13272588032975448845,
                9253010992972022192,
                8648821998170886822,
                8496039742746984095,
                14262429223710979566,
                7358593643192027253,
                12029817394250979484,
                15060112505401150146,
                9540213806836470710,
                10737868983367426066,
                5354054353160215187,
                12167002774907503613,
                17269779296322432918,
                10488023097382373776,
                2076518077268332220,
                14627512845597448866,
                8547196352174154905,
                16202146535871021890,
                16199548520701244171,
                12672232170111243275,
                16024981077313047843,
                18425865771930531631,
                2129910576502695957,
                4520831484431084718,
                17698215720270168730,
                13625145001218408941,
                3060708793266990343,
                6902137911719822574,
                4036189651081679589,
                1364700933898836504,
                18317596547376101706,
                4465819716720437370,
                15502144794460842367,
                15678849676752815172,
                12626175056053132903,
                2236526388064628635,
                5773951157772200518,
                10433367551848091278,
                6345511203913780563,
                10016115949949912390,
                14489566045759218180,
                13632999912860513697,
                9400120846257243757,
                13879574790471142703,
                12729185044957070959,
                14837732057410367180,
                13707039717518502222,
                1478840900618127135,
                10022739110683499841,
                1085300049627456467,
                18374180922241278710,
                11113263379188399234,
                8323091712777379724,
                13303287070971157187,
                5881333120165044446,
                17289168019467058259,
                4352346315266652995,
                17048693622617070380,
                5375643740896152681,
                9463410116162395728,
                14011802387533450941,
                10506922322301476703,
                736147119424806357,
                14651443393187204200,
                1789716011004515699,
                8674068176625995831,
                3772548884634554298,
                6066809733699760288,
                11996643895572412701,
                3016035580260393227,
                10359734755057395853,
                3231360485259740561,
                17058419130624653472,
                12054301342150639560,
                13557887442572034462,
                6676378795274656629,
                2991764245307954263,
                14422737049355291769,
                6507074200071143464,
                9304450117720665205,
                12937792283375351751,
                4775291188892116651,
                1657417881602428230,
                14592588804217603885,
                198641122402313775,
                3245497468996556524,
                2063807586650747380,
                17774289269818686966,
                15890942843939161311,
                17896677076611253034,
                7061659020774534947,
                7052051283994487161,
                8522986888590503052,
                16164950784047439642,
                15722471590245455645,
                16476792238440758290,
                7845398727452302385,
                4606767613531400490,
                3218993439303046183,
                5981268411278581823,
                2528820699401079272,
                9096015514839751191,
                6703189116584251534,
                10440925736738406514,
                7471586021720190903,
                17294475123240260528,
                1924391209889224849,
                15188568825067354262,
                8621275628870940189,
                14644155652527688733,
                3951408744713347457,
                17770124769997486609,
                13868539020022671551,
                15638629279267568113,
                11477921878735325863,
                9472653318249633758,
                14202532955164809363,
                16535370727896415875,
                7445288758268536500,
                7068987396572544597,
                8418420489883878791,
                13154621189702387861,
                15107007450863487474,
                16134034636689135373,
                12145189861174644341,
                2763729420009574112,
                2342224067876049929,
                1574861857553854847,
                5112464449359771791,
                10220900379209507413,
                6662200590815208051,
                8683215886726112491,
                17021644651395693066,
                1703318512048449293,
                4792432496729301234,
                10822433316732821935,
                16857401887549809525,
                1302676010472583420,
                15469088288489132609,
                6987791491465850850,
                8020922250916291337,
                8723383673396825916,
                209618812168005306,
                863147691780840243,
                2261258140547481604,
                4523264281944194003,
                6617004151646627262,
                16180601329864141854,
                6966082563709973037,
                10421816014728281630,
                101123035978874833,
                17063499646415794027,
                10816933943603385680,
                14311803210157127664,
                16808963640231641404,
                16429284467284647587,
                10745599117685253791,
                13995686705297457818,
                13836110408967038001,
                7060054210253257697,
                6186854614027150736,
                10893888996790358870,
                4329193319031075500,
                832514682419239753,
                2762200648842524701,
                14810831243892005398,
                110871285919222530,
                14550177899034441091,
                2185578722876905899,
                5537084333607722134,
                4078093767296457414,
                6103925737887687077,
                8325329972961379893,
                16271339898152868935,
                1138347867297980412,
                114138619972231576,
                5740428581193693489,
                693613775886515198,
                8029436153456249652,
                3344308355696312922,
                4541242366340473938,
                7528482809825011820,
                4152133086009434785,
                9315015619955905031,
                15104363855493496419,
                2594468929320270321,
                5109083866657386901,
                16374897994774124344,
                16083959732406743242,
                5090837124606889332,
                3258608291626164581,
                1629588549235601846,
                1616635562542911906,
                9231707360684534688,
                10952413647773186158,
                17868542504461850613,
                9925468414044638566,
                13854424759141049298,
                17034570371808369993,
                12297537197377405600,
                13939041732952801729,
                3380964897248364951,
                14563077242064122168,
                10657389386018033192,
                2886754279183664086,
                16642890180982646692,
                861273068365160052,
                1758020898997212990,
                15613846049063666752,
                18308267712772765967,
                17739201502006020362,
                1784151606563307696,
                7300607175097014470,
                16341738772418413744,
                15971459354868364456,
                11165614502213695374,
                6587728139169672539,
                1786277632003808713,
                13171307029307411510,
                327546644505871659,
                7614925720580811111,
                6326435263563299482,
                15953442436210332366,
                8456480261206292733,
                8590510172717967165,
                838937024086432351,
                1856061773879855233,
                4069964491639101834,
                327493480584993142,
                7520829108532062641,
                1614967126926521014,
                11307463881054155232,
                17864587100878517255,
                15763537575896112956,
                4578262687539382027,
                8502225719669465976,
                16179696620016923315,
                9758472315944533714,
                16779725203968381226,
                6183875480666892950,
                2608493615086467,
                17180723153980641883,
                3456686138572211050,
                7884527685732508700,
                14241925547686939705,
                13058647316908264970,
                6875784030440641084,
                8933325337294393084,
                12422630052702391657,
                10079614668510617802,
                10573331982193065383,
                7650262932518899908,
                17128707710941830916,
                10870510854800752099,
                17773491963246260474,
                806524961307578658,
                6842764457708128243,
                3445079159386238232,
                16483764513234069067,
                10653084184989938490,
                5903700814029759409,
                6828901479408398563,
                11912063888633218185,
                10913388972688885642,
                11885744739002746708,
                9257195893081201223,
                5930681678077971137,
                11806521592186912965,
                2630575534018589484,
                18026378680378255914,
                17084784948241081538,
                17326896384453274331,
                1866099945567656014,
                9550282146391637756,
                2463074436852589087,
                11585733093552042453,
                13174738554743021931,
                15035950777112630117,
                5558081283202249541,
                11689273974223163681,
                14741840413427477553,
                3416816424414858607,
                6766458899003324603,
                12410952811502392413,
                16409582904445478163,
                12759024403161588303,
                5846506096916040331,
                6071852583112909104,
                820557947487718625,
                741480266405970307,
                12417187439190974741,
                13229163230117065775,
                4530194262024109565,
                8008555870618085417,
                17877305109343366799,
                13815905787026003389,
                7324640884761711445,
                349028049855052879,
                16353193971302918640,
                22560372595432518,
                195820086483372832,
                18344647481464459551,
                737255555262795096,
                12070614125814171566,
                8614765570997215695,
                17372555543859256439,
                6743171019085030464,
                8139326738322408600,
                4165908420227580373,
                18442514040545838968,
                16630844454588561050,
                9571416190602912452,
                4657012508686090594,
                3686778704845805223,
                15973638309180986685,
                11656159185708435932,
                13322431680068273959,
                1751564542162438659,
                3348182923206453013,
                13874845053138703302,
                13876308253542917552,
                17285310216133973117,
                4000034777188849113,
                8256124542460267806,
                16590833794204607204,
                7704458184954868301,
                12492177596185537078,
                6001301052100279356,
                11072159473051203657,
                6151252917038612200,
                7836035158533234234,
                11335306549737820717,
                19315177086761227,
                6171461384626983181,
                1822458354600202855,
                13099374198983726273,
                13408159522301905657,
                13851767528819394957,
                10181771579192114476,
                9415015639283483660,
                4263806536662962495,
                324848264924658129,
                14503209993079817531,
                14000340004327513046,
                11818582924568900321,
                8109110686397620337,
                2042190457766210642,
                8828110432697935381,
                5820418605711370666,
                9919829550970909666,
                12052488162210869057,
                15934869979999273254,
                7215348901248890832,
                3159330338015572597,
                742740348898429240,
                5571998578872474833,
                16341933651780730964,
                8273383098225845565,
                3326034376020872344,
                7274584357797518106,
                14773843215521859474,
                16698106264937405391,
                14040455717338582024,
                16448479196576319861,
                17266605361670295779,
                2205080422456791959,
                9583005632984852594,
                10250070524499117272,
                6651451781199685657,
                6176632022465435688,
                8122087199625247517,
                4510616174816472548,
                8182983669598271561,
                118122593711296597,
                9934905917233313395,
                3039393435969291444,
                8120493050432758690,
                4058819847716511440,
                4599342760755215154,
                1480973302998690238,
                17828904850143881097,
                10593342770857406535,
                4478070465435761692,
                4682095412797127843,
                16898667833473266754,
                8748764197976097462,
                3185375635683792611,
                13120281814172681751,
                17914614591764258837,
                9484169199088431905,
                4807650520903510792,
                17575569597016375886,
                4712387700771102151,
                12219631271326131718,
                1624416933083818800,
                9746390230010361259,
                12061121252780758123,
                13191062388618927691,
                15449059962369037347,
                12895355194704606432,
                11847552441436471571,
                11344827248575736226,
                7292490505767840,
                1008341823945074655,
                4127364818131211815,
                4270946748779871651,
                12027658246374555578,
                12990486587941873323,
                11841755495420779485,
                14047350735395451602,
                8959489495395244296,
                4420034934416652173,
                12624150215794407836,
                6573790355548719031,
                13861586779706223977,
                11297305894055413472,
                9038105502288863696,
                11783474356604103336,
                1551845953634669763,
                17537406743655251318,
                13836420862857190675,
                8773267827726588192,
                18124754071337566386,
                11768358750377725767,
                17755389318101260579,
                3274283977014019260,
                1778416556501527345,
                5382190231425722642,
                13133414606279361249,
                7734093784869764550,
                215957712867719475,
                2984414766272767856,
                8131723947477567286,
                4398666896366893320,
                206703154206980441,
                12326076546363934220,
                8160942357092498215,
                15924256117279207120,
                12939783368798075,
                5395310234100182365,
                607679949225746410,
                5666550719038113256,
                17675108580067826210,
                15502816799164713523,
                7841099702038392534,
                15882497369954745148,
                9402399706745145695,
                953583398505708528,
                18445717741487620584,
                764024304101902997,
                14868487130868498451,
                1635358341560953539,
                4039563583787687147,
                16550238810277498954,
                16537486469106960712,
                3336346802567132577,
                11082627603539096034,
                4986362159313854530,
                15835824893860140029,
                2031897620572139540,
                15230511233628159373,
                14516214625788235622,
                222036853239298635,
                8073718635044114045,
                8911051883637240099,
                8827781801920171670,
                12310426504065367326,
                14816948656941007537,
                2827084462190879353,
                13161685568663608198,
                10249625892127978099,
                3296264739939232247,
                7033509689079490421,
                9525086171579835607,
                6473169618871652018,
                5392360298796775732,
                14776423049723888629,
                13597358828152620725,
                16833100318324887296,
                11971166522475145732,
                11872097206066985694,
                8256886017230123355,
                10314412535333389753,
                16835045724519439495,
                4706039712196379299,
                5870726373620303435,
                14198515533136338940,
                2470636378569326935,
                11369690958187205818,
                11254490024722864067,
                15445609396452113187,
                12551994365532706504,
                7340653992159982335,
                8648473678223506625,
                4626489449677435768,
                7626866618263441143,
                5977361104488869811,
                11325231017650670468,
                24021926143410559,
                10518928419015543169,
                3128581167201575566,
                10845247038876435111,
                15367170626696526581,
                15590613878930469966,
                17686020409985847800,
                9351869023028888665,
                2223400353718632810,
                8445700103445407057,
                5743254019080062425,
                9641427191996032782,
                2880617337710745321,
                98705364498162062,
                6212426535960692329,
                18096049861029213399,
                8169816906599295342,
                9000616375508345603,
                6726042380097823076,
                17315167572538836920,
                13646571690813788783,
                2919528228383142104,
                10223074182558417965,
                3697230257399535848,
                10728558488011771506,
                12436437847366171572,
                18362374704789353589,
                190724538241540940,
                14997455344563417220,
                731172890970164138,
                4964378684833634132,
                18060859650136590217,
                18045696668597737456,
                17653418903394015975,
                15544323640715880530,
                16994229219390286256,
                18205591550040615103,
                17734493044884548797,
                6296908060462462265,
                7283087819126840178,
                7426061537866959644,
                3191966234323480855,
                14129783695999936076,
                3360711429774065684,
                17866164958845125536,
                9861298124909413210,
                10580599508841918494,
                8282189157119747191,
                9197770707447859186,
                11694374178492840076,
                18368802017288109020,
                16394403946675230099,
                2141375654291981867,
                18161140844771142338,
                15126603772139881848,
                15048331495212797822,
                3995638033918575250,
                13169773405085893541,
                6025934495808462918,
                4572080001196751852,
                2783436619758877302,
                9024267503032915850,
                8025963435130321847,
                3640916310708301788,
                6840661953417469238,
                2749986769734168735,
                8348551153246843562,
                6913211236889562838,
                5360496605723998569,
                13618712664935776158,
                17575162850298585815,
                12169990262268572131,
                14119680116784171735,
                1796931188281174155,
                10578372750642831964,
                12810071554500166106,
                5459429092645213854,
                18226416005848684767,
                12263214363209816529,
                6391897541120811759,
                13788023593478687878,
                15185370313399382407,
                7852752634323735614,
                10680723342128514587,
                495733052464175715,
                12912465070347673754,
                18250665729393432770,
                8577020260491948036,
                9680999401313764336,
                4055511702466531936,
                13922829230551608093,
                17044580456782760928,
                1461920314690075938,
                9935774488507853328,
                4310590961865401313,
                17768854053466349121,
                8972728810615767879,
                10807101176895750865,
                14259912900082333579,
                17455570158393905272,
                9400361617644197827,
                3222585990549980881,
                10934919781824967404,
                4994963365508091459,
                97387422948156243,
                2281022370495958783,
                14043000925252669887,
                1950770421033313531,
                14292039006175938578,
                17228036599323652443,
                16418594962299649300,
                9220515969405166671,
                13807068206103427496,
                5762654027968454005,
                9482191002376611836,
                3077925584740242035,
                8071711316681168024,
                2883691495308653922,
                13301661594185617316,
                9766117548540486903,
                8893678796058966564,
                1477610205544057259,
                9796020550269402643,
                10463846413771564798,
                3399627051454484744,
                7300449297128631354,
                6200293739440149096,
                17316815833695165145,
                279212299313192572,
                3190098250649783077,
                3555664269010983807,
                15309533678245941225,
                3261793309629691333,
                13037226838231936140,
                8453766822110843744,
                14669528518699125877,
                5825134144024227911,
                12297418399180362780,
                7770269489755807915,
                17888986363036981664,
                2931111415852485201,
                14639292244087297189,
                6847208753088773757,
                12089103539757219324,
                10126240302424868138,
                1796081446544571499,
                8199277808225787921,
                1594480600886668204,
                10641848027714533213,
                11484122555645255402,
                16973005969540728518,
                17196319920931889668,
                2709835346052075661,
                18084755852456247033,
                2132028799062933816,
                11248099656748788651,
                3078026107054490219,
                1287642267969602293,
                7327615983552677470,
                1900974316027471940,
                2465104796974688011,
                440465215621247360,
                3494821416222993400,
                17898838494846832483,
                10628897889977925683,
                14309314836127630966,
                13505109427062926685,
                6386142816860188269,
                2901784813617829333,
                15551975240312695477,
                9435122587613303018,
                4226649603223681280,
                331997962735647934,
                10485568742856225265,
                14917030094729116730,
                2073637171424798316,
                915835583737744089,
                17383229556085295687,
                1461250216293218529,
                7068239943500340146,
                10288334490641399525,
                15208234780964400514,
                8475559502294427792,
                2926092195198358430,
                12656704633781670277,
                17070487838667522168,
                4403502814416839647,
                2376050098451057091,
                13199999628005904480,
                14120263009554684577,
                2468181014903045196,
                4273221404238097090,
                5154057720219142551,
                5027721477518319942,
                12609684452417053274,
                1922522277320945218,
                6436521746874764418,
                4093773539251325000,
                8706855626187686051,
                9846278305273128275,
                17417037056110132459,
                12263059830781470664,
                427676242647324801,
                3468283337511895036,
                4275816585741453581,
                192897459204823952,
                13550372326052910187,
                133570839986679541,
                540585874453202119,
                11780659758049122569,
                12360323334925415470,
                13534100053419999325,
                2652713032439489910,
                2795629568052283960,
                1336633232954655365,
                9929395103342768040,
                10647541508025671068,
                13921459546315253196,
                12181239385729053155,
                9244592432264107366,
                14917953490315439053,
                8292023989071301332,
                17207435505444165616,
                10343948035647838279,
                16305270801891202880,
                10567341749348113023,
                14902153447723505143,
                11356931487252822795,
                1535255066112284835,
                15930640229535365568,
                15573560888823279647,
                15076975392882629685,
                10960578593980276783,
                17370096640931089566,
                3501405511953164372,
                14633610166889715568,
                1524313386292624933,
                11407257912918611941,
                16740555220240538654,
                16871144196023049970,
                2018800046134001582,
                8348490438648921871,
                4982085025316319837,
                11415043705393855624,
                222784703639654682,
                3466558331671746969,
                12326013777821768371,
                3025583346757120511,
                5724955292043245917,
                18294065676811894744,
                2085076369095100979,
                4972732150574468481,
                1584581915654164553,
                15440097755359411249,
                6279260627318411655,
                10980381824523944119,
                14840228887064362306,
                166495909003667136,
                15457192490388086685,
                17222407220359250689,
                12843576496752906544,
                7560072307906075608,
                16259381729801863869,
                12189888379620317078,
                5782443157660099818,
                1736348385658973348,
                8546351327576605005,
                10456802501541553424,
                3192223036731401522,
                13106139199515235143,
                15411306387434042331,
                9970219405739610742,
                11520445287416838825,
                177854206445398423,
                11107078321275218413,
                239654546708824773,
                1768902774088704837,
                5254588776066635495,
                5979463581485074905,
                5347777749022576815,
                6937683941497626074,
                10711461148089050119,
                8144687895487491189,
                3276439454308985400,
                9934358778921844165,
                9422385106116957775,
                15095456547064717516,
                5070800636017351412,
                6521931756812739700,
                3932156166666605130,
                6050699959511074652,
                17344541664528753954,
                2988889255669683201,
                9353782714615053491,
                5589156711002183436,
                6682213996533276248,
                15943170238383197905,
                14899562877580150641,
                6764298931472895517,
                16276682584602387751,
                12125732792481305307,
                17741795378783264776,
                15129593569550778017,
                6986829961662604333,
                9964948114247450317,
                8616960908998657824,
                384856055964112635,
                7974572227450703998,
                1092885432563198587,
                545805536762933819,
                17706486245067983795,
                1263973849644445141,
                12021885634205650976,
                4608166390735539641,
                2734796012081282351,
                6200604703378756159,
                5974505481761285766,
                9850928205854570116,
                9239207633120526870,
                3193081802420914840,
                7886722472854682054,
                2670751422274014085,
                8331709031964299441,
                8556867030324218740,
                5864602765164463878,
                9702767835252903283,
                2818119218455916326,
                11051813316976151726,
                2798361718784864539,
                12803891989808651361,
                6525684565274580238,
                14390328213500260195,
                1185542698331478180,
                2771467110443644732,
                1812331778743510053,
                16478172183640173140,
                2162862050541547690,
                3823461949825666589,
                17911219118740261734,
                3056316107218167659,
                14036209218452819052,
                14745942794335524299,
                5518564424136376571,
                2935575073419114001,
                1483009244754615051,
                16104489200811397531,
                1730333865076822590,
                8965484080196217492,
                9061681468831583021,
                16959687546205760251,
                10739598289468131077,
                12535622924924225066,
                7363619354002287057,
                14293421377654448317,
                5060439359147843578,
                12129527773941979550,
                2112230986391195828,
                4769804105653663352,
                10070457010640222959,
                15957265372702119122,
                13474265233601984371,
                6223229738974064148,
                1310635690812010762,
                911270365813712259,
                15875629933427367379,
                17125468695201492944,
                4284280976538402366,
                3746830346804474068,
                12276499488868328766,
                8321930370653221471,
                9942135371805312885,
                10489617323540613662,
                18366063404217450865,
                10893390470035335263,
                10458487667984072095,
                16596433155292684319,
                8360603581927746599,
                6971939394626558508,
                4060283887681078391,
                15351723438016065412,
                11680267245463551920,
                5790802096533806773,
                10713087820458206775,
                11332424792139478655,
                17912160512036322815,
                5732788143095160128,
                194157036885958663,
                3706729391433574290,
                18104188640582475340,
                2780227969681270554,
                1601397086848874520,
                12428065507807642469,
                13780772997162403588,
                17069706121483733548,
                1665870987398124497,
                307096882476461439,
                13456064556530600971,
                14733632907318555004,
                4923387323367659585,
                9154104095651762498,
                9800443787974033655,
                15459794479644588197,
                451426040309413854,
                2788798329416281365,
                12293463599613327106,
                17830121799669654935,
                10759079676082513720,
                65630473606081049,
                5096392528063815709,
                5346856252299867951,
                80155407479215991,
                1196433294196930514,
                16533172301373380653,
                10731233255622272875,
                10178436775016758536,
                9988031047616269623,
                12514938561427851997,
                15073963212371245955,
                2453302056249682923,
                12178237101317908190,
                11696016410691479119,
                5364207712435662739,
                13799039328758617062,
                7635951899542908293,
                15581988062504838154,
                12199296096057685395,
                9571716157701330260,
                12770833407230845374,
                7046359335328802215,
                6682409275392804966,
                17514350522256500453,
                2172379224582021646,
                13091288462267965772,
                5260878034136529591,
                5445248199264341584,
                10781829337947177278,
                11497567710589338478,
                5003880921543975167,
                17626281977932980526,
                16887485374890873816,
                962245908798511322,
                5108152989985995665,
                3799396524860156187,
                18162096808895379340,
                11529283547909399639,
                6390455738944982802,
                9936405535146220224,
                18410905191303666268,
                15806049958088998276,
                6686540065405205814,
                14871651081256051438,
                1965464759731195941,
                12452727450091289729,
                2722304580139295067,
                7449771214146795823,
                11184908118487828423,
                14059936441587749863,
                4087442731977108274,
                6305864056451738754,
                10570807037282543326,
                319866202550247123,
                15676864417883625396,
                257981265506291104,
                1262875953150419606,
                7028205644086142472,
                115549004372063886,
                13349068651466391379,
                3871401499320965508,
                8851966218204065575,
                5085214474391233098,
                17945732365705154249,
                15777212209105057513,
                5140440907304885371,
                18438678204170428777,
                16248096869816190655,
                3367864749909816871,
                3722916700775577873,
                9992809420040804866,
                8403577374360399236,
                17679170457988008390,
                13194410331607642562,
                16187509812940048427,
                5026298175140220386,
                4876974840029834684,
                12871788850461667764,
                7104759827829094479,
                9436288244563973239,
                3159281221018851642,
                9752883085161300217,
                16232691476973353350,
                6189216786307783578,
                6640532398843609593,
                14448033262042085168,
                3940382498318820890,
                10262048882525860904,
                10061274065512561499,
                18423790370453874819,
                18050205654249499458,
                6839499987405858276,
                9642878486148661075,
                14327871474315862149,
                13544992232424681908,
                11373787680316347001,
                14533412760069469807,
                441032119858968952,
                16002383214623845047,
                14218288608791285257,
                11106928674889946673,
                8570586512119540188,
                11634529846030850802,
                4995459497476047290,
                9490295984153672908,
                15468267065499713211,
                2989892364601413290,
                2581156939788249728,
                13724611105556739546,
                2102140712261013213,
                18120444433685527592,
                12940831520428557209,
                7164672115808745211,
                12966905792848817589,
                11773978195497059476,
                890352368276286044,
                13026135521433759140,
                12478244758302866463,
                6413389638484948810,
                3885955303549003020,
                11545296721384143264,
                4229509895730985110,
                16895351180647205028,
                5433434349823096592,
                8863810222360116552,
                7098452189641277834,
                16333877257727727689,
                15013037256819216230,
                4302560698506558603,
                16202520488073319843,
                12907881483678831600,
                16621305076726276091,
                10355314267211608878,
                7452413003135799377,
                14400166494062685646,
                1844590774059759861,
                4021099544936514680,
                9876925569360801137,
                13518909505947029222,
                6973061477093797453,
                12727661908508644209,
                18408844351147807641,
                7377726373507399562,
                6066950890380320527,
                7608982295434371124,
                7179905088110251795,
                17152549488149335071,
                8233463606996434952,
                5206624787865188169,
                11008399855237240239,
                1404478959738544072,
                10222437285137279198,
                13764842761476361167,
                267526775623218909,
                14074888593090104209,
                11079629091416144703,
                9971542278925476006,
                8892245231600747204,
                11294258223088575084,
                2098993585796801554,
                2071313165222807226,
                2133768860233001961,
                14915133693464879855,
                1581952331538464319,
                9639175840198850752,
                4603279036103545771,
                397124688914837400,
                15508222727364896635,
                11625935495747427151,
                2747623392460771576,
                7890205116581168115,
                15886026517658120311,
                12212687251218189134,
                4479673077377102803,
                12554927112669616051,
                5630714043829684681,
                9034914377094571344,
                6438149969690220481,
                6244960371398694214,
                1052896917557446974,
                10567823414630738347,
                2892355401008719855,
                17414574580084103225,
                3893733317450926092,
                4731799036816590152,
                11430162725623505378,
                5515277686190787105,
                11234159093341446162,
                5305935514397952757,
                9493854744231574883,
                15824659478003978852,
                13748377356768536535,
                15270190824826719622,
                13911471579150742952,
                941469693484857457,
                8543583469838768654,
                9570355218602367528,
                15908271030011892500,
                15775504622577685589,
                15502440155453094152,
                13472074873501854186,
                7786488156274856633,
                325184390931240459,
                391006079612096881,
                6488611888067900595,
                17119716183319735070,
                5722239810452364688,
                15570270881885807205,
                1187208346653885920,
                6495212251536365385,
                8885994153346273911,
                9244631118417101083,
                13319829010425196781,
                17498600102170453483,
                2606308062729035588,
                12140631681722133972,
                7423666497758255197,
                4909403267534121212,
                17291602738067558307,
                13883694141147284443,
                15775430310693654790,
                1365705943610219466,
                17555638125582494966,
                12523045031729295704,
                2392330575426183349,
                14112467861828070587,
                1030880217600210745,
                4385374903004324357,
                7395532527566274798,
                4295926697583681461,
                15824788647062302529,
                12658431479636413054,
                7298062229900514919,
                16762658064265907647,
                3614060328089930704,
                1965221455109127938,
                4537598493017046373,
                11871860809507888384,
                4907011922598075617,
                4907239727404512330,
                11737261078675068763,
                6960397578813780713,
                3287532194305208859,
                16242004798434108216,
                5355636867689031522,
                198206763030220413,
                12314787670525495844,
                2597610581767828313,
                912155910938669031,
                5621874863922518809,
                17621042986327515098,
                6509935032915649610,
                12034984039300936360,
                2432672903988649889,
                16938359086817358514,
                13683276641443682344,
                9789874815574933787,
                5073084314220813473,
                1320947981283979966,
                17394333226431571790,
                9065574734268429766,
                7547029374160057813,
                15702678031816921355,
                17830114942365551555,
                17586226390965307450,
                8689045925427717290,
                13674100805654651310,
                14947272468697895793,
                1536415037143716596,
                900913689058556593,
                3760203057221746680,
                15534161016973117105,
                1882158767141436539,
                9962312604984275976,
                8663719069302836304,
                14448629851288213661,
                11178083838591395463,
                5074408974555005944,
                10002377000305244941,
                2950452703859403170,
                8778821961607207068,
                9599108141368609734,
                13727328471806688988,
                8463951250490880363,
                4985262606975468843,
                14509435574055577477,
                2251537913677065242,
                10838249382772174175,
                1886092796840457263,
                17613611691827851266,
                8675160855459284527,
                14495552730962688498,
                981068889151431304,
                14833582687603804101,
                16034396285021871754,
                3289585821311065992,
                229916794190431942,
                6158096718005366984,
                15892365411025682258,
                16012104260833699937,
                7229050832450090139,
                2375455030577448526,
                18332502145755936854,
                8113592353194015904,
                12102179397583890885,
                6146882145645781232,
                12871796063368466806,
                9689896919156456048,
                14832308820056147126,
                14224603261131126315,
                10728994166622935095,
                15844504707021590914,
                3148463731124076169,
                2191614241121958650,
                3930394497432164211,
                14975570445035451094,
                6175957568623475979,
                13457827038927582204,
                6569550482770305651,
                7910721054828235868,
                5396757648809577484,
                12425946269835609615,
                13080000545390338873,
                2228497309022463045,
                1000793072110534276,
                339755678733494105,
                7675452834746366033,
                13597453887369667370,
                4743316555026734805,
                8000798391810099453,
                4236658960114346261,
                4314995954098326729,
                3378109784202067494,
                738889711516394796,
                18249502043229708967,
                13638135114617560728,
                7407906194322093125,
                9677124450328656632,
                5239160397780299008,
                4951998289937269566,
                5582475260866563152,
                4943398101196515933,
                14092315760820484720,
                13498356481480779062,
                2477405837259253676,
                2982053805267631149,
                5613277799593112895,
                3872536722336143530,
                14313275147580522478,
                14098081093274007449,
                9245627422179538192,
                12713948618824123036,
                3663098222106707616,
                16833593522902690993,
                9200636416412258830,
                2943605946405441891,
                531743763255619302,
                17390753300460096085,
                2824093762754005683,
                9353749113650326235,
                17521094940135854001,
                9905656590497951128,
                320439950481807664,
                8408113336526795788,
                17685823149692305464,
                12450049056842881140,
                17390416669425632857,
                1504913544165201790,
                10449491162901619745,
                8772252083370989187,
                14728900004814406794,
                16291675511356570691,
                16619460908565992108,
                13188318675119868117,
                3193278148390763985,
                10499359052762173622,
                14791030350259837161,
                13388837175628846034,
                2481027855558432974,
                5101481046077782932,
                14962852444038402778,
                13800116268058936257,
                4209800634572843335,
                10873765289322019141,
                1283737927472492064,
                6693974210682179363,
                3926941883152776947,
                14425372513689620175,
                5059676940855286392,
                18024474835648567947,
                6651263573794035122,
                13938725133484148737,
                17549714769345186933,
                5447384381239220446,
                10651750950824041822,
                305544616118117333,
                14065593823540675662,
                14976453164111946509,
                4540050816321398688,
                5451505567317419192,
                2316208300786426665,
                8310776038629040900,
                16208971995495558244,
                13551785652790880950,
                1449640464272106217,
                12544857006610783141,
                10144884639080693658,
                10059099142245117548,
                10523915445981994172,
                10876835489035635204,
                2968860783309380797,
                5016151962821162573,
                17935393084803559776,
                11158849805035424490,
                9018915535973487771,
                4357127364458044907,
                10097519122235494012,
                17863724194881168069,
                8249387391663480731,
                17194137921140035540,
                4565175158332004125,
                14196633677254426720,
                12711637975982192334,
                1808846428077990103,
                7220474391737006935,
                6984910202113287757,
                8668719005115949313,
                15689332789493403404,
                11256157016049092832,
                16752089932600169557,
                2976791285708292128,
                8709736126011521271,
                11904675423100207085,
                16364980313730775588,
                10856165918087528208,
                4982665602671848433,
                6941618699135128169,
                12852532311018706484,
                14764579611477773304,
                2680106450342504094,
                2638046584561806901,
                2594041699562272096,
                2830485688608983066,
                12140745904697927112,
                14457013334763286122,
                14405891806907201412,
                16737034769744161242,
                6600192696191266517,
                8700425283962262097,
                18346405359930526606,
                8491388585134861252,
                17484443895627327293,
                6437654615718885147,
                15991528328390185419,
                578665836842411959,
                12826411398220057302,
                16935304019869439869,
                161325410229363246,
                15656104915507544477,
                5195403881958848260,
                8066669430631501373,
                3422823046399351289,
                9842336929164283364,
                14025201114079171450,
                6383160327527294474,
                9304888540999769418,
                14823032853534026080,
                16142342107979604987,
                8684662129668287901,
                17237002878422481510,
                1268377522566088747,
                2727385801453676653,
                458981449659087882,
                15555517854587152653,
                11733606025323073847,
                14555600935550669653,
                14737823349360352373,
                6059539353329428657,
                11478286028886927504,
                3886949283607812930,
                345824557705046004,
                2158851091870555662,
                11495933931583933350,
                8794457607221170216,
                5458340265128732576,
                2872964225108859294,
                3279822755074032388,
                2257159391808810540,
                11307352514621811375,
                8781774397128929722,
                8461654994159402867,
                13470239546503549381,
                12451839385253051360,
                13649919205807350692,
                12307759654667195662,
                6121462529213153103,
                3178361975991080567,
                14969619058896452804,
                6543743675636390116,
                2570068118140327141,
                13782677705633311464,
                15539361910618929218,
                815767500851296252,
                16343440944270931513,
                13869851574220153798,
                7979967566517823577,
                1079617792028207654,
                17059495379547625159,
                3394944722544524901,
                146658049450392036,
                920710892733750179,
                18267466400597724081,
                12840104746512458153,
                308895484061420208,
                3973848977921678681,
                2682725058127533019,
                5268781362212396412,
                0,
            ],
            &[
                12622393184452988185,
                6576838566809301648,
                5775205735049728716,
                8287278668518156534,
                12192798229753293112,
                13075940713888694545,
                12454048030060066070,
                811912065849436865,
                14514498508890956207,
                3718975340013031462,
                5748599663081118833,
                7103827618714489700,
                1300608812711622052,
                6273491418082608362,
                10602503410062294488,
                3181236738912952810,
                11220558709822910991,
                1757050625501318151,
                13622421981172568598,
                12832273400791276781,
                5855047466166966026,
                8265514107974512007,
                4674109636920327418,
                15064411300962651052,
                10245194862302150019,
                14697255588820327266,
                15300902461722524376,
                4133685444341227543,
                10059303764976223858,
                12025228906916712453,
                3342699448606724702,
                4043427178402639607,
                8354440664524965265,
                14685529799335576021,
                1998565942493742826,
                424458568212209524,
                17175147416410219809,
                8429313419702361615,
                13100329766043560847,
                16630087004934016029,
                1975643079807205422,
                14257249811747812832,
                16201214544277583293,
                10834834555324096005,
                12974966771898232184,
                10175033989408956356,
                13198699716510876245,
                12667628170354632487,
                13500517333069730437,
                16670408922706885903,
                16358625308423139600,
                3004604642549199974,
                15303830789363557104,
                8922231358023374966,
                5889284410855917356,
                14457653243881523958,
                1394588608017240060,
                15159743360841977286,
                16367826019458727864,
                13291054711118709892,
                5739609590986339029,
                16727185121517285485,
                5857477526908140920,
                7564539623883188584,
                15028512432506130151,
                9451165299139733038,
                7720569164934553601,
                12250119607377112932,
                13838627703516838495,
                4013168924318862931,
                15619946084866502269,
                4850331740702252734,
                4489013954543776517,
                10588792414395604443,
                3902488335149478186,
                5227683403359005885,
                7076009259772820031,
                8343084757976224303,
                5177402640814818565,
                2803445024434417300,
                4085994593957453089,
                17829839529352422672,
                3578735210913423849,
                2792806554222369562,
                15534236200548977629,
                3124727634409390443,
                1084234245147417462,
                1598571627717804884,
                752329673301761003,
                12688955135473243162,
                3217100306345888294,
                14566509229614296336,
                11270786911681876633,
                6662721337309084196,
                12158803014774283480,
                8518459513237421390,
                5910661800660978266,
                744628824726848011,
                5469395445007916291,
                17702754906843708743,
                7968296670638284359,
                7510310566936008628,
                1793306228498108099,
                6353661129197447108,
                3126760188195263395,
                18414397606186055674,
                17486033377523869654,
                12070987014285382902,
                9991875370105670503,
                16129470720148507308,
                1039596679504335478,
                12158960746785703045,
                14081886766117011421,
                8985649855006063812,
                16817043795641114882,
                3052278422002310841,
                11364643265564647695,
                5842131153676887611,
                17671187237412914007,
                8666277097534907268,
                1983817527033510933,
                3541460822071490249,
                6007905868789893806,
                652610536509913563,
                11037032573713184751,
                11009156643744878354,
                17591018917017615621,
                11710867183921879437,
                12251167927128949787,
                8974964125845019147,
                16969705468711169632,
                677161721939989175,
                1648428070692386013,
                17084411431327447982,
                16079687398141624486,
                2070436743667033809,
                2763689681570019260,
                5133447300857161972,
                15255425835157483742,
                5966697992253286903,
                361687726752744332,
                422697286210467434,
                7041898431113518823,
                13795043150550399420,
                583755960417947241,
                2875531821527607804,
                4394534528084370577,
                12535851821369757920,
                7213044591651422167,
                1000544905146371455,
                4653559762494073142,
                7779502532203369012,
                16702927718605692181,
                12982197318021037408,
                11786209078045506353,
                15564445991051693791,
                168023569501370168,
                14266568007896652015,
                5832135998445910960,
                5245116375679737807,
                13311176288056325459,
                3321928379396402727,
                2233377424088736972,
                16828319963915513015,
                9909739734979137218,
                9397081158643758651,
                16237610644843443174,
                12049861989729092874,
                963173337050875289,
                1393288980328672002,
                8369734762526854678,
                10087190917060030061,
                16611332898402499111,
                17383970934682687319,
                1806005829620081904,
                2572338165105796552,
                12096685872124824149,
                10625877836202904943,
                3565777311969108583,
                2012783419915002762,
                9017825065020723376,
                16320469478354954310,
                11806049513756650829,
                7727243155747891778,
                15158785566684134320,
                2456938594466970469,
                7873271366166028790,
                7686875950801483839,
                5617367656140550179,
                13464612212949386527,
                14757590544232715739,
                11128260848489879698,
                17626653494839808091,
                4716501168031180893,
                564851231412074685,
                8132887702611477369,
                17552681344611428819,
                3132957846371517857,
                11213590168035816092,
                5431508051609838979,
                4515078710323627036,
                13543555744861125477,
                309309746143903518,
                16853539194117891693,
                12430835367581296760,
                9255793325320254163,
                6591016556383892120,
                17100720673447110167,
                6061633534359930907,
                2424801126737847877,
                143356278625650878,
                13554246058973057,
                2522638740117423042,
                17137049738161235473,
                13176139598975768388,
                1166120501092890058,
                13609465226914230670,
                1875448353263386203,
                11743691709994844759,
                11061975822835649567,
                3910967390258776729,
                13577511757143681922,
                13827967505806592907,
                2051032579834721288,
                13464396192578309450,
                12800325352123601126,
                5662172040792660351,
                4668403599689432265,
                13491732430526501935,
                14157448317801936638,
                9727633765236455195,
                9719667367393442680,
                65474725188749034,
                541181075058713986,
                1362959920153019155,
                909082441655242031,
                10411762570666372898,
                11947296633429547042,
                2358875224077331054,
                18328103363666444110,
                9866396237081281387,
                8956667376401863125,
                3553975952663161681,
                14635072569697080107,
                15544243098851103691,
                1716867379502200816,
                8776276410599591217,
                15666047021340369577,
                18147839669015605124,
                5572968214423121059,
                3098271794032834805,
                9673511458079712674,
                16010905689567823114,
                16267201338365627673,
                3382936832397700934,
                14957330839370249294,
                2642620075223240608,
                1037193656622159510,
                9012211029341477206,
                11431820793941846484,
                8851179188286979417,
                1398798117665992200,
                10789412881967821793,
                9415310270308545401,
                3878698623022480586,
                5863277386811827416,
                7839335917417032151,
                2682939031547768972,
                13397811690933306272,
                6260148512861761963,
                250324816893616712,
                9085404939459661953,
                9291403781568194640,
                4943156069611799558,
                4012150457352746082,
                6743913241329187121,
                12017429880940425975,
                12929043722801309882,
                10207563294594880008,
                11011363281303738187,
                15710481255331302269,
                16065095211995167995,
                7729419910130307261,
                14687299092290139624,
                14212774840097619295,
                2696933303282739820,
                18380487173546723450,
                16340353901250449060,
                16974439742831865800,
                950395719691498193,
                14294722598295985858,
                9819629466618736444,
                5134213478899186274,
                15000357065088523575,
                10866834082882265182,
                5562209566130970606,
                11574047289359876875,
                14220066737185616618,
                7779431549476206578,
                6164322776781074672,
                12698699879532635460,
                9775735470622210670,
                3418783774094779723,
                11711261272918394032,
                130965081793297038,
                17951168177437733692,
                10982891057320326220,
                15446335221541982820,
                3245348832258032003,
                16936841548783354130,
                17845797372140897632,
                15738639878561184724,
                8036219019342274839,
                1452217306593250967,
                6524640126112677080,
                9487637664603922399,
                9816896718276865827,
                6660361176840108508,
                7155686979915548241,
                5363459444036855846,
                14211791847250927632,
                3758021753984352623,
                14892848306282510880,
                5622159652308652067,
                3013224027720379126,
                6593658810977588348,
                8737392006680055212,
                13098306207053606600,
                10321069935686406569,
                7922126603433897812,
                16345323120534317859,
                2051345375893155420,
                2642889174797452752,
                15490895676079176387,
                3421728094884350553,
                1403789733153795522,
                18095248776246397645,
                1141680856759996549,
                18100437303596844925,
                10084704427684498223,
                6594067795036706889,
                6973150786346631215,
                18179961484385983667,
                13461945752721759987,
                11607193624374158079,
                15870559753884484047,
                5909010369355025391,
                6576523373028484144,
                16932784188428621626,
                4532369146195665092,
                8439234310823545929,
                1340079530194594172,
                14887691618471650731,
                12957273899514368091,
                12528827801491392116,
                13543620352724873404,
                15027641031340635112,
                3497080345802388600,
                12532486649114668085,
                6567958427571461048,
                15524967599943619324,
                9687676309746098775,
                17837290175131112775,
                6562577965471546738,
                15069045445640377298,
                15845870183628003510,
                4882896822391168376,
                299291354580119732,
                1253349370757830450,
                4019946893924061554,
                4835687088435778153,
                560543554021366834,
                9073367421711646017,
                7210725233620419378,
                1298874732344651234,
                1572176424217571034,
                13459119860690231055,
                14894361022235972365,
                12479129811186551951,
                14014563421012570478,
                5045150035901968604,
                8669967307441751567,
                1905648106987249698,
                15427548300560765880,
                16929690218389356941,
                2257784955568148289,
                16671033335294376858,
                17747845134586030566,
                1166533040996500790,
                15593722083313803843,
                9396109408892612308,
                11499981530721896824,
                16970499445754392592,
                8812544874418820841,
                8398666252211387757,
                2704923715823740363,
                5314497299504523542,
                5160833323750080202,
                4489614019342255168,
                16950479847425158028,
                6792145380267486390,
                14740232145636169668,
                621507344077794685,
                3751460578157408141,
                8129084486654095901,
                10001447130583054783,
                12074020860950174718,
                4077799248444467034,
                6822188364356126108,
                600699026381065222,
                4751815635139776884,
                15367619962178612777,
                5104893889903277375,
                4661242055023047595,
                2154923710109688891,
                17429472085810639176,
                15724063920670689806,
                15216015843686884607,
                12102731527843294992,
                5923322163550614145,
                578844978773347240,
                10464767667513753088,
                4422886088759698238,
                16103295972923438952,
                11952617258811913803,
                6497649448616698694,
                7393337205916981343,
                18096118845330092692,
                9417521917459925024,
                10361801380161480586,
                12227883220061157093,
                12402861272457739535,
                16959542957232270118,
                3100109669354124792,
                8252021294756255295,
                6601544514524806222,
                2299228880186395084,
                17206687535661702962,
                11126365220307664227,
                14027475381759030281,
                13930713973102273385,
                15470781455897247423,
                11132792425729103210,
                12743536155285333682,
                18404252734721007574,
                4471349713039799575,
                1097648964215121725,
                3481722566194833071,
                17004865376724342545,
                4412003432895082804,
                7207210335443122075,
                11185557399280223037,
                17791545657588716507,
                15001384756479157715,
                7068904123591490511,
                15342280096772936670,
                2962241209356984664,
                11085614675955826760,
                17304628576563637894,
                13276820937207248747,
                8496585032541849567,
                16867719644448479323,
                3556128556368553119,
                4135507236401264417,
                8300362706308478874,
                12391805295598536754,
                212746375693666561,
                17668657797254926684,
                11472227395456264735,
                3346261809041337938,
                10494844376481252742,
                1039434633412734920,
                3537248641106173003,
                15722028107965146028,
                3957344489070663630,
                171520814732107885,
                15701539439111209401,
                16266903088897196785,
                8162180034652464302,
                751396451910146673,
                6284978536639446110,
                9475038153254288249,
                3366181839966720435,
                38511352552288459,
                5091650762875915484,
                15684434521130749089,
                3313175693887858849,
                3512862245616351559,
                5836672242124333533,
                7050189281309530509,
                6693570573437863470,
                1180929186779755232,
                13670569646431885520,
                12219171873489819591,
                4177796076111463096,
                12523988008299904003,
                2573301004696669683,
                14000913768617402515,
                1901514323758988374,
                15680204389035820646,
                4057543360329026133,
                10484558774556926484,
                16880563214620981386,
                9806529946108790649,
                64858070620446021,
                13058265791054866751,
                14208780393297513060,
                132444534110050230,
                18171930401783150790,
                3788701567251119654,
                8068556048675251486,
                7698349927972499523,
                4200940425301802259,
                5859679210997281495,
                1196917998587841402,
                293846739593611503,
                742395111532740587,
                7299921458271130779,
                4013584019577681930,
                13051907051578937053,
                15460522300561557538,
                11739346111540426460,
                6000392060961693921,
                2093513337710768996,
                2971782196230136142,
                14650675906567946197,
                13044422653436935289,
                5393154276677237552,
                9414604975305044529,
                14383902696216976975,
                3526706571033049996,
                10453515348838320881,
                1300027919459661427,
                18220108229306772305,
                6736376168692276304,
                14279821335279300725,
                1137238529965897445,
                10675553998207815811,
                10380811037741532194,
                8166481736795163463,
                1781828658320585086,
                12391009694347491828,
                917764047682931238,
                5513578507525454078,
                17200064132172477743,
                17870911035870211136,
                14336835701074601920,
                11250050928475332766,
                11433063323885652386,
                7083842474651714165,
                2491363132897582954,
                6822759191074732531,
                1975703285786766592,
                4664247346348091399,
                6200670517431733578,
                7625423344374743344,
                12752241152270105853,
                1792181265050143868,
                9684341866777183803,
                2519544645709853691,
                10916780105681637442,
                10344955420168669639,
                9942180203006299987,
                12084291513489188332,
                3948266540776100311,
                9154092837114088215,
                5346858599403446633,
                16526650534031004365,
                1000379885777408481,
                9962324609830950859,
                17358968356608808633,
                16077501442923026330,
                16373391819852480638,
                7285769258546345039,
                9258849101785002591,
                5742154400061770227,
                6000603993323989058,
                14647716329474708008,
                9759234782041772304,
                10140774772642173806,
                12417308406161902675,
                787743125041003665,
                16505409716496421861,
                13496346584666506754,
                6161155548184037990,
                6052945594671650378,
                3943721555742518361,
                1724411800658421894,
                5539278770081464366,
                15345354647968324153,
                11115348357173195281,
                14941897866359059705,
                13232123053046857932,
                10293530598380524712,
                6785485284866633954,
                2274573151581626897,
                7914418682634630883,
                9050484888129037258,
                5596144246310386066,
                16947403501604289983,
                4629498933991963153,
                12809658963208366731,
                15794201530500048648,
                13688081233074642819,
                13734318539544366298,
                17338613223770563244,
                8949201706050038962,
                7457293230715991355,
                3392962986871707645,
                2665311774547334828,
                14769130061609548831,
                14798608201523559143,
                4248204495368930031,
                2118780687916441347,
                7587741700881576871,
                14435287502544940055,
                5661100765027979237,
                16339955561566207846,
                8140260981243250155,
                8056431096984667176,
                7147782631749791333,
                2489306669890900889,
                4475802923302768991,
                16154685423804744738,
                7934898789690822040,
                6879516481280076285,
                9089400825108258886,
                17930990199515864021,
                14768387486978797965,
                18129863777024625000,
                10818394317143489199,
                15491447326600259816,
                16981166881989734434,
                16302476576745273904,
                6518490351683715742,
                8412288793616962739,
                6351653340417195445,
                13150568765377194334,
                13805040795477806115,
                5934147261272121494,
                1994383077577350943,
                16635675973993021427,
                12605935823956703560,
                17476993101523741670,
                6478809187431271696,
                2732525537481875395,
                9879991725842211511,
                6807932982002010721,
                7352337837011779903,
                2817471936912129199,
                13262278618157850043,
                10769791684153169602,
                16373519399949306992,
                2899723188139359765,
                10536102085057036916,
                6542494148698745845,
                8208357062363683807,
                7135654628053388596,
                9239547683832094589,
                5857943902095897523,
                2988676895399293972,
                10864744325417622458,
                5315919323785706256,
                17726255358609389283,
                548416274855739353,
                14341121194849694922,
                7541833390688838500,
                12990342594130240843,
                18010249397570629115,
                12270534655132211820,
                11089591099925577121,
                8904086294203345138,
                360354335597452271,
                15390384602644239058,
                9646385913080766351,
                7807991425432087787,
                9178671661816533936,
                14127492076118037414,
                2392162322212242991,
                14036941142798507711,
                6502240351436565564,
                7893899872624843337,
                14288594129943657110,
                14040928483141897687,
                1592502089611546139,
                16817286687244219231,
                1288452307437286948,
                14067519453346137912,
                10075887672168075195,
                16769912598561257346,
                15456884559283078393,
                8711311950138380878,
                17440519414852901585,
                4031578079792007763,
                17459032506776526507,
                6047439267180308295,
                13036838382774047407,
                5995888809898483332,
                5666540365944124863,
                9669239227306108902,
                13524757761279567441,
                9100467949589737947,
                10630607884662362720,
                7656432890734400844,
                14587775638685276238,
                13512825387557617884,
                7244019832094584382,
                14996712660826603119,
                15920594541485478011,
                18302888448007121275,
                2860853013354641768,
                16346890198034118818,
                3995008638584894259,
                15431133287252532218,
                12007621448583591973,
                12654616832949992670,
                17218932927375784084,
                5108339176271521031,
                1475805094516082093,
                12897404584908775312,
                12902004423289195678,
                632420305961082974,
                3939829721363017782,
                8159027656096857323,
                5289724432039220494,
                8105874082275331898,
                7058967362148243623,
                7084554565361601863,
                10713529750643129586,
                16053444010682289763,
                16789097964014031314,
                2561050582281530128,
                5001739943623024256,
                5563376828383980501,
                7029523460044084584,
                3734303822831180195,
                17604507458906309331,
                15410396100097854167,
                12072617536058855445,
                9343913967197010858,
                17464576053666161449,
                14222234943442423138,
                3029903299346511292,
                2439504202412922232,
                17909602716813870812,
                7163148054936239235,
                1203376532559407808,
                13308342071396905822,
                9659238717159340331,
                9298790467854663751,
                13879727520175998029,
                3540668590936352635,
                9319928603109010852,
                7135941863720734900,
                4755935102616669000,
                16186952942091333092,
                868417045309212144,
                4614771873250033976,
                12695043568719791838,
                11555375308916964213,
                7608623603624110550,
                2657517781272739364,
                16275540663546067547,
                13686833504204824152,
                12138906647042213779,
                10867610696309111099,
                14724502273153125344,
                16861685577613202946,
                8743302596210517799,
                14587474243501868159,
                2572487334058012273,
                603248717087965084,
                5059320325228404990,
                16238530369175832077,
                4519037757700474392,
                12378671739975925965,
                12407484273586632994,
                15313162588758450641,
                7715370120812724109,
                16244624049595468844,
                16509798106801620258,
                8670816985658531869,
                17161563202276681629,
                6760859082822229695,
                6807294103798050445,
                12102809409961330094,
                15733867019982720404,
                4500829814752383546,
                276727174991039753,
                7166981968731078898,
                6839153022681710561,
                9052935609363333850,
                180023864532346968,
                15036321241551927313,
                8004861917338601611,
                10433381600254688194,
                58897018650060884,
                12176800300096084156,
                1677464574753824642,
                9033479160050603494,
                15102533506708978663,
                14084179961157892415,
                15862200228768947299,
                13406816340465864482,
                4480435244557703388,
                9328135622344307924,
                8569086569674090389,
                117119659942779713,
                53818961148559993,
                17499848839935720391,
                9136357190515762310,
                9027105858395986940,
                17989890318601901443,
                18097540417946691193,
                14525610539500917353,
                2154941454922905428,
                5904339583092243168,
                13443891604996267,
                17266860992297653711,
                8744756382159865790,
                18024305737878696983,
                2546630949169889692,
                14096991573794098342,
                6037463192406505117,
                16222309559186427347,
                17465566247484999322,
                12659653001889101916,
                17145147704704336749,
                270028953681259627,
                10687721792402042274,
                7909714047373529261,
                1516466812193933964,
                18277293846935305743,
                16998707418464340047,
                10456180009273456482,
                10894339053818039134,
                7931553102963941505,
                5469019641482786787,
                15559448848625861221,
                13379845259726008039,
                15222258432394099771,
                9220502339943331578,
                11041492625928826773,
                13723142119880743788,
                13406366780219048563,
                16242021890137344914,
                3242681820103600264,
                7433022400269598514,
                13800053899816348927,
                10971582708599334044,
                16780079125754812721,
                7499355964098143157,
                6683080229097120149,
                4643838630497962703,
                2452976410357582431,
                13628797043976089046,
                12208582264105438774,
                10972823060808439197,
                5834946779865455467,
                7061987228048265540,
                1207502404391064867,
                4999557813060557947,
                6110696626660879360,
                16155026384042239167,
                14271653985173561903,
                15409968780617538981,
                12583134000526518362,
                14425350186270986364,
                4240634153006170791,
                15186331103475807077,
                3441220359690995595,
                7730377008237943835,
                4028688972105728738,
                2120709666343944557,
                15275844229510750384,
                18298631304947594122,
                13289696428719138891,
                12902251465979698800,
                17784642778353395327,
                8932078122697958597,
                2343784433129198521,
                2625325561581989570,
                6226848264428179755,
                9341106183231718139,
                9098935814035218596,
                7352506358300392706,
                2344104557164367420,
                12260380423821950355,
                5334772679936050516,
                4625031027053042238,
                16182107767362335138,
                16366374610370031102,
                4836384899789893883,
                7955273434480297668,
                6911864392544134089,
                16417538807637628387,
                7095497393911852501,
                13038578327075160812,
                3237033976078933963,
                12153345193878928470,
                8529208509214849086,
                3557796804144548743,
                4802066316596054332,
                15433632645238893171,
                7546572980385595878,
                11926731397057053166,
                12459060237931625488,
                14141685648156683211,
                7288151748928762022,
                4432041251568429780,
                15563480646640553472,
                16053290806405898796,
                15137506699232809093,
                8005443786172873610,
                2583037632942587270,
                17849394642972838924,
                14162302110936479805,
                2509458716192360405,
                5356417310559321341,
                13186254752172487693,
                11386136498514963040,
                17709391199907333437,
                10287520916427793726,
                16609632513291109233,
                2167580474521363269,
                12093450528168333086,
                7863381164011802024,
                3333719694645745323,
                11940256871115614834,
                15608703623597862105,
                12353758136546081384,
                6684006108125243153,
                12729735272407622593,
                5729918571797570178,
                836259910264806143,
                14839853436536328663,
                3503216322132876395,
                12081845346843956683,
                11452606043277089033,
                3278971557269095943,
                14460255683089324678,
                26212371609850095,
                5791996297577934908,
                11791872952518605557,
                4303537542168010174,
                16090584062354399534,
                4908264648595320164,
                7751540775663330461,
                6257171389619325857,
                10426410760581414335,
                17538696865214967217,
                7467505509612490667,
                9596349531846363101,
                10432645685361251072,
                4554200269336177591,
                14164090620513306305,
                12703411361203184202,
                10381679821480302262,
                17407993808772229676,
                13447212664492178323,
                6368763612994722491,
                6985317877139191413,
                3304210073159911148,
                11815333377693368073,
                5807352926666783905,
                15497939312564010706,
                6997355376158126843,
                8894976899204659904,
                6062763749482474444,
                12366982438149692528,
                5811941270446802002,
                1365585056061256612,
                13475218612693439913,
                3101226957898170052,
                7483152820787337316,
                11966132556998778392,
                15847594708317668544,
                8536570052230898519,
                17755327099574675677,
                4573875060013426627,
                10571694422987443237,
                13886938922370949941,
                13243541345182765869,
                2407150453734919381,
                3504658143291885737,
                7031357511394950972,
                10000971933511773390,
                13912116329153795479,
                15031415497603451939,
                4599320279014918550,
                11777085389799050565,
                10789465428143426974,
                13380525436974205384,
                481819144611018854,
                5450316677878014202,
                15246244400696673845,
                2539248742679727539,
                13402910818618694139,
                17131842085718107785,
                1254150638176089903,
                4995981122218138624,
                7087931693181888823,
                15049301175005363928,
                108059457248600792,
                6415264753538529207,
                8176266644263202488,
                9913473944910878449,
                1695436935634773000,
                17297145186449223950,
                12551494433741244515,
                9893572477404506151,
                5018441835213902689,
                2942536196417517781,
                16905131659211501459,
                6905710711318770295,
                7616899203962297179,
                14893845862286767619,
                9802013654239316989,
                17646160800663090718,
                688334719842856096,
                2007794688466179654,
                654395123253282904,
                8101085388166846547,
                129085352126721490,
                5656513500529597182,
                5068380157352571940,
                16823659606299635586,
                18201953606184755353,
                14292322613095109457,
                16683857805140576716,
                2453074754987128823,
            ],
        );
    }
}

#[test]
#[should_panic]
fn limbs_div_mod_fail_1() {
    limbs_div_mod(&[1, 2, 3], &[4]);
}

#[test]
#[should_panic]
fn limbs_div_mod_fail_2() {
    limbs_div_mod(&[1], &[4, 5]);
}

#[test]
#[should_panic]
fn limbs_div_mod_fail_3() {
    limbs_div_mod(&[1, 2, 3], &[4, 0]);
}

#[test]
#[should_panic]
fn limbs_div_mod_to_out_fail_1() {
    limbs_div_mod_to_out(&mut [10; 4], &mut [10; 4], &[1, 2, 3], &[4]);
}

#[test]
#[should_panic]
fn limbs_div_mod_to_out_fail_2() {
    limbs_div_mod_to_out(&mut [10; 4], &mut [10; 4], &[1], &[4, 5]);
}

#[test]
#[should_panic]
fn limbs_div_mod_to_out_fail_3() {
    limbs_div_mod_to_out(&mut [10], &mut [10; 4], &[1, 2, 3, 4], &[4, 5]);
}

#[test]
#[should_panic]
fn limbs_div_mod_to_out_fail_4() {
    limbs_div_mod_to_out(&mut [10; 4], &mut [10; 4], &[1, 2, 3], &[4, 0]);
}

#[test]
fn test_div_mod() {
    let test = |s, t, quotient, remainder| {
        let u = Natural::from_str(s).unwrap();
        let v = Natural::from_str(t).unwrap();

        let mut x = u.clone();
        let r = x.div_assign_mod(v.clone());
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);
        assert!(x.is_valid());
        assert_eq!(x.to_string(), quotient);

        let mut x = u.clone();
        let r = x.div_assign_mod(&v);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);
        assert!(x.is_valid());
        assert_eq!(x.to_string(), quotient);

        let (q, r) = u.clone().div_mod(v.clone());
        assert!(q.is_valid());
        assert_eq!(q.to_string(), quotient);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);

        let (q, r) = u.clone().div_mod(&v);
        assert!(q.is_valid());
        assert_eq!(q.to_string(), quotient);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);

        let (q, r) = (&u).div_mod(v.clone());
        assert!(q.is_valid());
        assert_eq!(q.to_string(), quotient);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);

        let (q, r) = (&u).div_mod(&v);
        assert!(q.is_valid());
        assert_eq!(q.to_string(), quotient);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);

        let mut x = u.clone();
        let r = x.div_assign_rem(v.clone());
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);
        assert!(x.is_valid());
        assert_eq!(x.to_string(), quotient);

        let mut x = u.clone();
        let r = x.div_assign_rem(&v);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);
        assert!(x.is_valid());
        assert_eq!(x.to_string(), quotient);

        let (q, r) = u.clone().div_rem(v.clone());
        assert!(q.is_valid());
        assert_eq!(q.to_string(), quotient);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);

        let (q, r) = u.clone().div_rem(&v);
        assert!(q.is_valid());
        assert_eq!(q.to_string(), quotient);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);

        let (q, r) = (&u).div_rem(v.clone());
        assert!(q.is_valid());
        assert_eq!(q.to_string(), quotient);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);

        let (q, r) = (&u).div_rem(&v);
        assert!(q.is_valid());
        assert_eq!(q.to_string(), quotient);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);

        let num_u = BigUint::from_str(s).unwrap();
        let num_v = BigUint::from_str(t).unwrap();
        let (q, r) = num_u.div_mod_floor(&num_v);
        assert_eq!(q.to_string(), quotient);
        assert_eq!(r.to_string(), remainder);

        let (q, r) = num_u.div_rem(&num_v);
        assert_eq!(q.to_string(), quotient);
        assert_eq!(r.to_string(), remainder);

        let rug_u = rug::Integer::from_str(s).unwrap();
        let rug_v = rug::Integer::from_str(t).unwrap();
        let (q, r) = rug_u.clone().div_rem_floor(rug_v.clone());
        assert_eq!(q.to_string(), quotient);
        assert_eq!(r.to_string(), remainder);

        let (q, r) = rug_u.div_rem(rug_v);
        assert_eq!(q.to_string(), quotient);
        assert_eq!(r.to_string(), remainder);

        let (q, r) = (&u / &v, u % v);
        assert_eq!(q.to_string(), quotient);
        assert_eq!(r.to_string(), remainder);
    };
    test("0", "1", "0", "0");
    test("0", "123", "0", "0");
    test("1", "1", "1", "0");
    test("123", "1", "123", "0");
    test("123", "123", "1", "0");
    test("123", "456", "0", "123");
    test("456", "123", "3", "87");
    test("4294967295", "1", "4294967295", "0");
    test("4294967295", "4294967295", "1", "0");
    test("1000000000000", "1", "1000000000000", "0");
    test("1000000000000", "3", "333333333333", "1");
    test("1000000000000", "123", "8130081300", "100");
    test("1000000000000", "4294967295", "232", "3567587560");
    test(
        "1000000000000000000000000",
        "1",
        "1000000000000000000000000",
        "0",
    );
    test(
        "1000000000000000000000000",
        "3",
        "333333333333333333333333",
        "1",
    );
    test(
        "1000000000000000000000000",
        "123",
        "8130081300813008130081",
        "37",
    );
    test(
        "1000000000000000000000000",
        "4294967295",
        "232830643708079",
        "3167723695",
    );
    test(
        "1000000000000000000000000",
        "1234567890987",
        "810000006723",
        "530068894399",
    );
    test(
        "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
        0",
        "1234567890987654321234567890987654321",
        "810000006723000055638900467181273922269593923137018654",
        "779655053998040854338961591319296066",
    );
    test(
        "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
        0",
        "316049380092839506236049380092839506176",
        "3164062526261718967339454949926851258865601262253979",
        "37816691783627670491375998320948925696",
    );
    test(
        "253640751230376270397812803167",
        "2669936877441",
        "94998781946290113",
        "1520301762334",
    );
    test(
        "3768477692975601",
        "11447376614057827956",
        "0",
        "3768477692975601",
    );
    test(
        "3356605361737854",
        "3081095617839357",
        "1",
        "275509743898497",
    );
    test(
        "1098730198198174614195",
        "953382298040157850476",
        "1",
        "145347900158016763719",
    );
    test(
        "69738658860594537152875081748",
        "69738658860594537152875081748",
        "1",
        "0",
    );
    test(
        "1000000000000000000000000",
        "1000000000000000000000000",
        "1",
        "0",
    );
    test("0", "1000000000000000000000000", "0", "0");
    test("123", "1000000000000000000000000", "0", "123");
}

#[test]
#[should_panic]
fn div_assign_mod_fail() {
    Natural::from(10u32).div_assign_mod(Natural::ZERO);
}

#[test]
#[should_panic]
fn div_assign_mod_ref_fail() {
    Natural::from(10u32).div_assign_mod(&Natural::ZERO);
}

#[test]
#[should_panic]
fn div_mod_fail() {
    Natural::from(10u32).div_mod(Natural::ZERO);
}

#[test]
#[should_panic]
fn div_mod_val_ref_fail() {
    Natural::from(10u32).div_mod(&Natural::ZERO);
}

#[test]
#[should_panic]
fn div_mod_ref_val_fail() {
    (&Natural::from(10u32)).div_mod(Natural::ZERO);
}

#[test]
#[should_panic]
fn div_mod_ref_ref_fail() {
    (&Natural::from(10u32)).div_mod(&Natural::ZERO);
}

#[test]
#[should_panic]
fn div_assign_rem_fail() {
    Natural::from(10u32).div_assign_rem(Natural::ZERO);
}

#[test]
#[should_panic]
fn div_assign_rem_ref_fail() {
    Natural::from(10u32).div_assign_rem(&Natural::ZERO);
}

#[test]
#[should_panic]
fn div_rem_fail() {
    Natural::from(10u32).div_rem(Natural::ZERO);
}

#[test]
#[should_panic]
fn div_rem_val_ref_fail() {
    Natural::from(10u32).div_rem(&Natural::ZERO);
}

#[test]
#[should_panic]
fn div_rem_ref_val_fail() {
    (&Natural::from(10u32)).div_rem(Natural::ZERO);
}

#[test]
#[should_panic]
fn div_rem_ref_ref_fail() {
    (&Natural::from(10u32)).div_rem(&Natural::ZERO);
}

#[test]
fn test_ceiling_div_neg_mod() {
    let test = |s, t, quotient, remainder| {
        let u = Natural::from_str(s).unwrap();
        let v = Natural::from_str(t).unwrap();

        let mut x = u.clone();
        let r = x.ceiling_div_assign_neg_mod(v.clone());
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);
        assert!(x.is_valid());
        assert_eq!(x.to_string(), quotient);

        let mut x = u.clone();
        let r = x.ceiling_div_assign_neg_mod(&v);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);
        assert!(x.is_valid());
        assert_eq!(x.to_string(), quotient);

        let (q, r) = u.clone().ceiling_div_neg_mod(v.clone());
        assert!(q.is_valid());
        assert_eq!(q.to_string(), quotient);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);

        let (q, r) = u.clone().ceiling_div_neg_mod(&v);
        assert!(q.is_valid());
        assert_eq!(q.to_string(), quotient);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);

        let (q, r) = (&u).ceiling_div_neg_mod(v.clone());
        assert!(q.is_valid());
        assert_eq!(q.to_string(), quotient);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);

        let (q, r) = (&u).ceiling_div_neg_mod(&v);
        assert!(q.is_valid());
        assert_eq!(q.to_string(), quotient);
        assert!(r.is_valid());
        assert_eq!(r.to_string(), remainder);

        let (q, r) = rug_ceiling_div_neg_mod(
            rug::Integer::from_str(s).unwrap(),
            rug::Integer::from_str(t).unwrap(),
        );
        assert_eq!(q.to_string(), quotient);
        assert_eq!(r.to_string(), remainder);

        let (q, r) = (
            u.clone().div_round(v.clone(), RoundingMode::Ceiling),
            u.neg_mod(v),
        );
        assert_eq!(q.to_string(), quotient);
        assert_eq!(r.to_string(), remainder);
    };
    test("0", "1", "0", "0");
    test("0", "123", "0", "0");
    test("1", "1", "1", "0");
    test("123", "1", "123", "0");
    test("123", "123", "1", "0");
    test("123", "456", "1", "333");
    test("456", "123", "4", "36");
    test("4294967295", "1", "4294967295", "0");
    test("4294967295", "4294967295", "1", "0");
    test("1000000000000", "1", "1000000000000", "0");
    test("1000000000000", "3", "333333333334", "2");
    test("1000000000000", "123", "8130081301", "23");
    test("1000000000000", "4294967295", "233", "727379735");
    test(
        "1000000000000000000000000",
        "1",
        "1000000000000000000000000",
        "0",
    );
    test(
        "1000000000000000000000000",
        "3",
        "333333333333333333333334",
        "2",
    );
    test(
        "1000000000000000000000000",
        "123",
        "8130081300813008130082",
        "86",
    );
    test(
        "1000000000000000000000000",
        "4294967295",
        "232830643708080",
        "1127243600",
    );
    test(
        "1000000000000000000000000",
        "1234567890987",
        "810000006724",
        "704498996588",
    );
    test(
        "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
         0",
        "1234567890987654321234567890987654321",
        "810000006723000055638900467181273922269593923137018655",
        "454912836989613466895606299668358255",
    );
    test(
        "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\
         0",
        "316049380092839506236049380092839506176",
        "3164062526261718967339454949926851258865601262253980",
        "278232688309211835744673381771890580480",
    );
    test(
        "253640751230376270397812803167",
        "2669936877441",
        "94998781946290114",
        "1149635115107",
    );
    test(
        "3768477692975601",
        "11447376614057827956",
        "1",
        "11443608136364852355",
    );
    test(
        "3356605361737854",
        "3081095617839357",
        "2",
        "2805585873940860",
    );
    test(
        "1098730198198174614195",
        "953382298040157850476",
        "2",
        "808034397882141086757",
    );
    test(
        "69738658860594537152875081748",
        "69738658860594537152875081748",
        "1",
        "0",
    );
    test(
        "1000000000000000000000000",
        "1000000000000000000000000",
        "1",
        "0",
    );
    test("0", "1000000000000000000000000", "0", "0");
    test(
        "123",
        "1000000000000000000000000",
        "1",
        "999999999999999999999877",
    );
}

#[test]
#[should_panic]
fn ceiling_div_assign_neg_mod_fail() {
    Natural::from(10u32).ceiling_div_assign_neg_mod(Natural::ZERO);
}

#[test]
#[should_panic]
fn ceiling_div_assign_neg_mod_ref_fail() {
    Natural::from(10u32).ceiling_div_assign_neg_mod(&Natural::ZERO);
}

#[test]
#[should_panic]
fn ceiling_div_neg_mod_fail() {
    Natural::from(10u32).ceiling_div_neg_mod(Natural::ZERO);
}

#[test]
#[should_panic]
fn ceiling_div_neg_mod_val_ref_fail() {
    Natural::from(10u32).ceiling_div_neg_mod(&Natural::ZERO);
}

#[test]
#[should_panic]
fn ceiling_div_neg_mod_ref_val_fail() {
    (&Natural::from(10u32)).ceiling_div_neg_mod(Natural::ZERO);
}

#[test]
#[should_panic]
fn ceiling_div_neg_mod_ref_ref_fail() {
    (&Natural::from(10u32)).ceiling_div_neg_mod(&Natural::ZERO);
}

#[test]
fn limbs_invert_limb_properties() {
    unsigned_gen_var_12().test_properties(|x| {
        limbs_invert_limb(x);
    });
}

#[test]
fn limbs_div_limb_mod_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 32);
    config.insert("mean_stripe_n", 16 << Limb::LOG_WIDTH);
    unsigned_vec_unsigned_pair_gen_var_22().test_properties_with_config(&config, |(xs, y)| {
        let (qs, r) = limbs_div_limb_mod(&xs, y);
        let (q, r_alt) = Natural::from_owned_limbs_asc(xs).div_mod(Natural::from(y));
        assert_eq!(Natural::from_owned_limbs_asc(qs), q);
        assert_eq!(r, r_alt);
    });
}

#[test]
fn limbs_div_limb_to_out_mod_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 32);
    config.insert("mean_stripe_n", 16 << Limb::LOG_WIDTH);
    unsigned_vec_unsigned_vec_unsigned_triple_gen_var_13().test_properties_with_config(
        &config,
        |(mut out, xs, y)| {
            let old_out = out.clone();
            let r = limbs_div_limb_to_out_mod(&mut out, &xs, y);
            let (q, r_alt) = Natural::from_limbs_asc(&xs).div_mod(Natural::from(y));
            assert_eq!(r, r_alt);
            let len = xs.len();
            assert_eq!(Natural::from_limbs_asc(&out[..len]), q);
            assert_eq!(&out[len..], &old_out[len..]);
            let final_out = out.clone();

            let mut out = old_out.to_vec();
            assert_eq!(limbs_div_limb_to_out_mod_alt(&mut out, &xs, y), r);
            assert_eq!(out, final_out);

            let mut out = old_out.to_vec();
            assert_eq!(limbs_div_limb_to_out_mod_naive(&mut out, &xs, y), r);
            assert_eq!(out, final_out);
        },
    );
}

#[test]
fn limbs_div_limb_in_place_mod_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 32);
    config.insert("mean_stripe_n", 16 << Limb::LOG_WIDTH);
    unsigned_vec_unsigned_pair_gen_var_22().test_properties_with_config(&config, |(mut xs, y)| {
        let old_xs = xs.clone();
        let r = limbs_div_limb_in_place_mod(&mut xs, y);
        let (q, r_alt) = Natural::from_limbs_asc(&old_xs).div_mod(Natural::from(y));
        assert_eq!(Natural::from_owned_limbs_asc(xs), q);
        assert_eq!(r, r_alt);

        let mut xs = old_xs.clone();
        let r_alt = limbs_div_limb_in_place_mod_alt(&mut xs, y);
        let q_alt = Natural::from_owned_limbs_asc(xs);
        assert_eq!(q, q_alt);
        assert_eq!(r, r_alt);

        let mut xs = old_xs;
        let r_alt = limbs_div_limb_in_place_mod_naive(&mut xs, y);
        let q_alt = Natural::from_owned_limbs_asc(xs);
        assert_eq!(q, q_alt);
        assert_eq!(r, r_alt);
    });
}

#[test]
fn limbs_div_mod_extra_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 32);
    config.insert("mean_stripe_n", 16 << Limb::LOG_WIDTH);
    large_type_gen_var_19().test_properties_with_config(
        &config,
        |(mut out, fraction_len, ns, d, d_inv, shift)| {
            let old_out = out.clone();
            let r = limbs_div_mod_extra(&mut out, fraction_len, &ns, d, d_inv, shift);
            verify_limbs_div_mod_extra(&old_out, fraction_len, &ns, d, &out, r);
        },
    );
}

#[test]
fn limbs_div_mod_extra_in_place_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 32);
    config.insert("mean_stripe_n", 16 << Limb::LOG_WIDTH);
    large_type_gen_var_18().test_properties_with_config(
        &config,
        |(mut ns, fraction_len, d, d_inv, shift)| {
            let old_ns = ns.clone();
            let r = limbs_div_mod_extra_in_place(&mut ns, fraction_len, d, d_inv, shift);
            verify_limbs_div_mod_extra_in_place(&old_ns, fraction_len, d, &ns, r);
        },
    );
}

#[test]
fn limbs_two_limb_inverse_helper_properties() {
    unsigned_pair_gen_var_35().test_properties(|(hi, lo)| {
        let result = limbs_two_limb_inverse_helper(hi, lo);
        verify_limbs_two_limb_inverse_helper(hi, lo, result);
    });
}

#[test]
fn limbs_div_mod_three_limb_by_two_limb_properties() {
    unsigned_sextuple_gen_var_2().test_properties(|(n_2, n_1, n_0, d_1, d_0, inverse)| {
        let (q, r) = limbs_div_mod_three_limb_by_two_limb(n_2, n_1, n_0, d_1, d_0, inverse);
        verify_limbs_div_mod_three_limb_by_two_limb(n_2, n_1, n_0, d_1, d_0, q, r);
    });
}

#[test]
fn limbs_div_mod_by_two_limb_normalized_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 32);
    config.insert("mean_stripe_n", 16 << Limb::LOG_WIDTH);
    unsigned_vec_triple_gen_var_53().test_properties_with_config(&config, |(qs_in, ns_in, ds)| {
        let mut qs = qs_in.clone();
        let mut ns = ns_in.clone();
        let q_highest = limbs_div_mod_by_two_limb_normalized(&mut qs, &mut ns, &ds);
        verify_limbs_div_mod_by_two_limb_normalized(&qs_in, &ns_in, &ds, q_highest, &qs, &ns);
    });
}

#[test]
fn limbs_div_mod_schoolbook_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 32);
    config.insert("mean_stripe_n", 16 << Limb::LOG_WIDTH);
    large_type_gen_var_11().test_properties_with_config(&config, |(qs_in, ns_in, ds, inverse)| {
        let mut qs = qs_in.clone();
        let mut ns = ns_in.clone();
        let q_highest = limbs_div_mod_schoolbook(&mut qs, &mut ns, &ds, inverse);
        verify_limbs_div_mod_1(&qs_in, &ns_in, &ds, q_highest, &qs, &ns);
    });
}

#[test]
fn limbs_div_mod_divide_and_conquer_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 128);
    config.insert("mean_stripe_n", 64 << Limb::LOG_WIDTH);
    large_type_gen_var_12().test_properties_with_config(&config, |(qs_in, ns_in, ds, inverse)| {
        let mut qs = qs_in.clone();
        let mut ns = ns_in.clone();
        let q_highest = limbs_div_mod_divide_and_conquer(&mut qs, &mut ns, &ds, inverse);
        verify_limbs_div_mod_1(&qs_in, &ns_in, &ds, q_highest, &qs, &ns);
    });
}

#[test]
fn limbs_invert_basecase_approx_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 128);
    config.insert("mean_stripe_n", 64 << Limb::LOG_WIDTH);
    unsigned_vec_triple_gen_var_50().test_properties_with_config(
        &config,
        |(mut is, ds, mut scratch)| {
            let is_old = is.clone();
            let result_definitely_exact = limbs_invert_basecase_approx(&mut is, &ds, &mut scratch);
            verify_limbs_invert_approx(&is_old, &ds, result_definitely_exact, &is);
        },
    );
}

#[test]
fn limbs_invert_newton_approx_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 512);
    config.insert("mean_stripe_n", 64 << Limb::LOG_WIDTH);
    unsigned_vec_triple_gen_var_51().test_properties_with_config(
        &config,
        |(mut is, ds, mut scratch)| {
            let is_old = is.clone();
            let result_definitely_exact = limbs_invert_newton_approx(&mut is, &ds, &mut scratch);
            verify_limbs_invert_approx(&is_old, &ds, result_definitely_exact, &is);
        },
    );
}

#[test]
fn limbs_invert_approx_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 512);
    config.insert("mean_stripe_n", 64 << Limb::LOG_WIDTH);
    unsigned_vec_triple_gen_var_50().test_properties_with_config(
        &config,
        |(mut is, ds, mut scratch)| {
            let is_old = is.clone();
            let result_definitely_exact = limbs_invert_approx(&mut is, &ds, &mut scratch);
            verify_limbs_invert_approx(&is_old, &ds, result_definitely_exact, &is);
        },
    );
}

#[test]
fn limbs_div_mod_barrett_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 512);
    config.insert("mean_stripe_n", 64 << Limb::LOG_WIDTH);
    unsigned_vec_quadruple_gen_var_5().test_properties_with_config(
        &config,
        |(mut qs, mut rs, ns, ds)| {
            let qs_old = qs.clone();
            let rs_old = rs.clone();
            let mut scratch = vec![0; limbs_div_mod_barrett_scratch_len(ns.len(), ds.len())];
            let q_highest = limbs_div_mod_barrett(&mut qs, &mut rs, &ns, &ds, &mut scratch);
            verify_limbs_div_mod_2(&qs_old, &rs_old, &ns, &ds, q_highest, &qs, &rs);
        },
    );
}

fn verify_limbs_div_mod_4(ns: &[Limb], ds: &[Limb], qs: &[Limb], rs: &[Limb]) {
    let n = Natural::from_limbs_asc(ns);
    let d = Natural::from_limbs_asc(ds);
    let (expected_q, expected_r) = (&n).div_mod(&d);
    let q = Natural::from_limbs_asc(qs);
    let r = Natural::from_limbs_asc(rs);
    assert_eq!(q, expected_q);
    assert_eq!(r, expected_r);
    assert!(r < d);
    assert_eq!(q * d + r, n);
    let d_len = ds.len();
    assert_eq!(qs.len(), ns.len() - d_len + 1);
    assert_eq!(rs.len(), d_len);
}

#[test]
fn limbs_div_mod_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 512);
    config.insert("mean_stripe_n", 64 << Limb::LOG_WIDTH);
    unsigned_vec_pair_gen_var_11().test_properties_with_config(&config, |(ns, ds)| {
        let (qs, rs) = limbs_div_mod(&ns, &ds);
        verify_limbs_div_mod_4(&ns, &ds, &qs, &rs);
    });
}

#[test]
fn limbs_div_mod_to_out_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_length_n", 512);
    config.insert("mean_stripe_n", 64 << Limb::LOG_WIDTH);
    unsigned_vec_quadruple_gen_var_1().test_properties_with_config(
        &config,
        |(mut qs, mut rs, ns, ds)| {
            let qs_old = qs.clone();
            let rs_old = rs.clone();
            limbs_div_mod_to_out(&mut qs, &mut rs, &ns, &ds);
            verify_limbs_div_mod_3(&qs_old, &rs_old, &ns, &ds, &qs, &rs);
        },
    );
}

// It would be a little confusing to only pass y by value
#[allow(clippy::needless_pass_by_value)]
fn div_mod_and_div_rem_properties_helper(x: Natural, y: Natural) {
    let mut mut_x = x.clone();
    let r = mut_x.div_assign_mod(&y);
    assert!(mut_x.is_valid());
    assert!(r.is_valid());
    let q = mut_x;

    let mut mut_x = x.clone();
    let r_alt = mut_x.div_assign_mod(y.clone());
    let q_alt = mut_x;
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = (&x).div_mod(&y);
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = (&x).div_mod(y.clone());
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = x.clone().div_mod(&y);
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = x.clone().div_mod(y.clone());
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let mut q_alt = x.clone();
    let r_alt = q_alt.div_assign_rem(&y);
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let mut q_alt = x.clone();
    let r_alt = q_alt.div_assign_rem(y.clone());
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = (&x).div_rem(&y);
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = (&x).div_rem(y.clone());
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = x.clone().div_rem(&y);
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = x.clone().div_rem(y.clone());
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = (&x / &y, &x % &y);
    assert_eq!(q_alt, q);
    assert_eq!(r_alt, r);

    let (num_q, num_r) = BigUint::from(&x).div_mod_floor(&BigUint::from(&y));
    assert_eq!(Natural::from(&num_q), q);
    assert_eq!(Natural::from(&num_r), r);

    let (num_q, num_r) = BigUint::from(&x).div_rem(&BigUint::from(&y));
    assert_eq!(Natural::from(&num_q), q);
    assert_eq!(Natural::from(&num_r), r);

    let (rug_q, rug_r) = rug::Integer::from(&x).div_rem_floor(rug::Integer::from(&y));
    assert_eq!(Natural::exact_from(&rug_q), q);
    assert_eq!(Natural::exact_from(&rug_r), r);

    let (rug_q, rug_r) = rug::Integer::from(&x).div_rem(rug::Integer::from(&y));
    assert_eq!(Natural::exact_from(&rug_q), q);
    assert_eq!(Natural::exact_from(&rug_r), r);

    assert!(r < y);
    assert_eq!(q * y + r, x);
}

#[test]
fn div_mod_and_div_rem_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_bits_n", 2048);
    config.insert("mean_stripe_n", 256 << Limb::LOG_WIDTH);
    natural_pair_gen_var_5().test_properties_with_config(&config, |(x, y)| {
        div_mod_and_div_rem_properties_helper(x, y);
    });

    natural_pair_gen_var_6().test_properties_with_config(&config, |(x, y)| {
        div_mod_and_div_rem_properties_helper(x, y);
    });

    natural_gen().test_properties(|x| {
        assert_eq!((&x).div_mod(Natural::ONE), (x.clone(), Natural::ZERO));
    });

    natural_gen_var_2().test_properties(|x| {
        assert_eq!((&x).div_mod(&x), (Natural::ONE, Natural::ZERO));
        assert_eq!(Natural::ZERO.div_mod(&x), (Natural::ZERO, Natural::ZERO));
        if x > 1 {
            assert_eq!(Natural::ONE.div_mod(x), (Natural::ZERO, Natural::ONE));
        }
    });

    unsigned_pair_gen_var_12::<Limb, Limb>().test_properties(|(x, y)| {
        let (q, r) = x.div_mod(y);
        assert_eq!(
            Natural::from(x).div_mod(Natural::from(y)),
            (Natural::from(q), Natural::from(r))
        );
    });
}

// It would be a little confusing to only pass y by value
#[allow(clippy::needless_pass_by_value)]
fn ceiling_div_neg_mod_properties_helper(x: Natural, y: Natural) {
    let mut mut_x = x.clone();
    let r = mut_x.ceiling_div_assign_neg_mod(&y);
    assert!(mut_x.is_valid());
    assert!(r.is_valid());
    let q = mut_x;

    let mut mut_x = x.clone();
    let r_alt = mut_x.ceiling_div_assign_neg_mod(y.clone());
    let q_alt = mut_x;
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = (&x).ceiling_div_neg_mod(&y);
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = (&x).ceiling_div_neg_mod(y.clone());
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = x.clone().ceiling_div_neg_mod(&y);
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = x.clone().ceiling_div_neg_mod(y.clone());
    assert!(q_alt.is_valid());
    assert_eq!(q_alt, q);
    assert!(r_alt.is_valid());
    assert_eq!(r_alt, r);

    let (q_alt, r_alt) = ((&x).div_round(&y, RoundingMode::Ceiling), (&x).neg_mod(&y));
    assert_eq!(q_alt, q);
    assert_eq!(r_alt, r);

    let (rug_q, rug_r) = rug_ceiling_div_neg_mod(rug::Integer::from(&x), rug::Integer::from(&y));
    assert_eq!(Natural::exact_from(&rug_q), q);
    assert_eq!(Natural::exact_from(&rug_r), r);

    assert!(r < y);
    assert_eq!(q * y - r, x);
}

#[test]
fn ceiling_div_neg_mod_properties() {
    let mut config = GenConfig::new();
    config.insert("mean_bits_n", 2048);
    config.insert("mean_stripe_n", 256 << Limb::LOG_WIDTH);
    natural_pair_gen_var_5().test_properties_with_config(&config, |(x, y)| {
        ceiling_div_neg_mod_properties_helper(x, y);
    });

    natural_pair_gen_var_6().test_properties_with_config(&config, |(x, y)| {
        ceiling_div_neg_mod_properties_helper(x, y);
    });

    natural_gen().test_properties(|x| {
        assert_eq!(
            (&x).ceiling_div_neg_mod(Natural::ONE),
            (x.clone(), Natural::ZERO)
        );
    });

    natural_gen_var_2().test_properties(|x| {
        assert_eq!((&x).ceiling_div_neg_mod(&x), (Natural::ONE, Natural::ZERO));
        assert_eq!(
            Natural::ZERO.ceiling_div_neg_mod(&x),
            (Natural::ZERO, Natural::ZERO)
        );
        if x > 1 {
            assert_eq!(
                Natural::ONE.ceiling_div_neg_mod(&x),
                (Natural::ONE, x - Natural::ONE)
            );
        }
    });

    unsigned_pair_gen_var_12::<Limb, Limb>().test_properties(|(x, y)| {
        let (q, r) = x.ceiling_div_neg_mod(y);
        assert_eq!(
            Natural::from(x).ceiling_div_neg_mod(Natural::from(y)),
            (Natural::from(q), Natural::from(r))
        );
    });
}