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);
};
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],
);
test(&[10; 3], 0, &[1], 2, 1, &[0, 10, 10]);
test(&[10; 4], 0, &[0, 1], 2, 0, &[0x80000000, 0, 10, 10]);
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);
};
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]);
test(&[1], 0, 2, 1, &[0]);
test(&[0, 1], 0, 2, 0, &[0x80000000, 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);
};
test(0x80000000, 0, u32::MAX);
test(0x80000000, 123, u32::MAX);
test(0x80000123, 1, 0xfffffb74);
test(u32::MAX, 0, 1);
test(u32::MAX, 123, 0);
test(0xfffff123, 1, 0xedd);
test(u32::MAX, u32::MAX, 0);
test(0x80000001, 3, 0xfffffffb);
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);
};
test(1, 2, 3, 0x80000004, 5, 1, 0x7ffffffdfffffffe);
test(2, 0x40000000, 4, 0x80000000, 0, 4, 0x4000000000000004);
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);
};
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],
);
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")]
{
test(
&[10],
&[1, 2, 3],
&[3, 4, 0x80000000],
false,
&[10],
&[1, 2, 3],
);
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],
);
test(
&[10],
&[0, 0, 0, 1],
&[1, 0, 0x80000000],
false,
&[1],
&[u32::MAX, u32::MAX, 0x7fffffff, 1],
);
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,
],
);
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);
};
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],
);
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],
);
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,
],
);
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,
],
);
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,
],
);
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,
],
);
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,
],
);
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],
);
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,
],
);
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],
);
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,
],
);
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);
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);
};
test(&[10; 3], &[0x80000000], true, &[u32::MAX, 10, 10]);
test(&[10; 3], &[0, 0x80000000], true, &[u32::MAX, u32::MAX, 10]);
test(
&[10; 3],
&[1, 2, 0x80000000],
false,
&[0xfffffffb, 0xfffffff7, u32::MAX],
);
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")]
{
test(
&[10; 6],
&[1, 2, 3, 4, 0x80000000],
true,
&[187, 120, 0xfffffff4, 4294967279, u32::MAX, 10],
);
test(
&[10; 5],
&[0, 0, 0, 0, 0x80000000],
false,
&[u32::MAX, u32::MAX, u32::MAX, u32::MAX, u32::MAX],
);
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,
],
);
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,
],
);
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"))]
{
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);
};
test(&[10; 3], &[0x80000000], true, &[u32::MAX, 10, 10]);
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")]
{
test(
&[10, 10],
&[10, 10, 10],
&[1, 2, 3],
&[1, 0x80000000],
false,
&[6, 10],
&[0xfffffffb, 1, 10],
);
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,
],
);
test(
&mut [10, 10],
&mut [10, 10],
&[0, 0, 0, 1],
&[1, 0x80000000],
false,
&[u32::MAX, 1],
&[1, 0x7ffffffe],
);
test(
&mut [10; 3],
&mut [10, 10],
&[0; 5],
&[0, 0x80000000],
false,
&[0, 0, 0],
&[0, 0],
);
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,
],
);
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,
],
);
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,
],
);
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);
};
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],
);
test(
&[10; 4],
&[10; 4],
&[1, 2, 3],
&[4, 0x80000000],
&[6, 0, 10, 10],
&[4294967273, 1, 10, 10],
);
test(&[10], &[10; 3], &[0; 3], &[0, 0, 1], &[0], &[0; 3]);
test(&[10], &[10; 3], &[0, 0, 1], &[0, 0, 1], &[1], &[0; 3]);
test(&[10, 10], &[10; 3], &[0; 4], &[0, 0, 1], &[0, 0], &[0; 3]);
test(&[10], &[10; 3], &[0, 0, 1], &[0, 1, 1], &[0], &[0, 0, 1]);
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,
],
);
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,
],
);
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,
],
);
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],
);
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],
);
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],
);
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,
],
);
test(
&[10, 10],
&[10; 3],
&[3156053040, 2869923590, 2300216426, 1369503],
&[177914576, 1102898054, 1547778],
&[3800268463, 0],
&[0, 0, 0],
);
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,
],
);
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,
],
);
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,
],
);
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,
],
);
test_only_verify(&[10; 19901], &[10; 100], &[123; 20000], &[123; 100]);
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"))]
{
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);
},
);
}
#[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))
);
});
}
#[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))
);
});
}