#[allow(dead_code)] fn get_line() -> Vec { let stdin = std::io::stdin(); let mut s = String::new(); loop { stdin.read_line(&mut s).ok(); let s = s.trim(); if s.len() != 0 { return s.split_whitespace().map(|s| s.into()).collect(); } } } #[allow(dead_code)] fn read_array() -> Vec where T: std::str::FromStr + std::marker::Copy, ::Err: std::fmt::Debug { get_line().iter().map(|s| s.parse().unwrap()).collect() } #[allow(dead_code)] fn read2() -> (T, U) where T: std::str::FromStr + std::marker::Copy, ::Err: std::fmt::Debug, U: std::str::FromStr + std::marker::Copy, ::Err: std::fmt::Debug { let ary = get_line(); (ary[0].parse().unwrap(), ary[1].parse().unwrap()) } #[allow(dead_code)] fn read3() -> (T, U, W) where T: std::str::FromStr + std::marker::Copy, ::Err: std::fmt::Debug, U: std::str::FromStr + std::marker::Copy, ::Err: std::fmt::Debug, W: std::str::FromStr + std::marker::Copy, ::Err: std::fmt::Debug { let ary = get_line(); (ary[0].parse().unwrap(), ary[1].parse().unwrap(), ary[2].parse().unwrap()) } #[allow(dead_code)] fn read1() -> T where T: std::str::FromStr + std::marker::Copy, ::Err: std::fmt::Debug { read_array()[0] } fn main() { let n = read1(); assert!(n >= 2 && n <= 5000); let mut a: Vec = read_array(); assert_eq!(n, a.len()); for i in 1..(2*n-3) { // println!("{}", i); for j in 0..n { if i < j { break; } if i-j < j && a[i-j] > a[j] { let x = a[j]; a[j] = a[i-j]; a[i-j] = x; // std::mem::swap(&mut a[j], &mut a[i-j]); } } } for i in 0..n { print!("{}", a[i]); if i == n-1 { println!(""); } else { print!(" "); } } }