fn main() { let mut n = String::new(); std::io::stdin().read_line(&mut n).ok(); let n: usize = n.trim().parse().unwrap(); let mut not_used: Vec> = vec![vec![true; n]; n]; for i in 1..n { let a: Vec<_> = (1..=n).map(|j| { let ret = if j == i { i } else if (n+j-i) % n == i { n } else { (n+j-i) % n } ; not_used[j-1][ret-1] = false; return ret; }) .map(|j| j.to_string()) .collect(); println!("{}", a.join(" ")); } println!( "{}", not_used.iter().map(|row| row.iter().enumerate().find(|pair| *pair.1).unwrap().0 + 1usize ) .map(|i| i.to_string()) .collect::>() .join(" ") ); }