use iof::{read, show};
fn main() {
let a: usize = read!();
let b: Vec<usize> = read!(a);
let c: Vec<Vec<usize>> = read!(a, b.iter().product());
let x: Vec<Vec<Vec<Vec<usize>>>> = read!(2, 2, 2, 2);
assert_eq!(x.len(), 2);
for (i, x) in x.into_iter().enumerate() {
assert_eq!(x.len(), 2);
for (j, x) in x.into_iter().enumerate() {
assert_eq!(x.len(), 2);
for (k, x) in x.into_iter().enumerate() {
assert_eq!(x.len(), 2);
for (l, x) in x.into_iter().enumerate() {
assert_eq!(x, i + j + k + l);
}
}
}
}
show!(a);
show!(b);
show!(c);
show!((", ", a, " "), sep = [""], end = "\n");
show!(a, end = "\n");
show!(b, sep = [" :: "]);
show!(c, sep = [" :: ", " | "]);
}