fn g() -> usize { let mut s = String::new(); std::io::stdin().read_line(&mut s).ok(); s.trim().parse::().unwrap() } fn main() { let n = g(); let mut t = n * (n - 1) / 2; let mut a = vec![0; n]; println!("? 1 {}", n - 1); let mut s = g(); a[n - 1] = t - s; for i in 2..n { println!("? {} {n}", i); s = g(); (t, a[i - 2]) = (s, t - s); } a[n - 2] = t - a[n - 1]; println!( "! {}", a.iter() .map(|x| x.to_string()) .collect::>() .join(" ") ) }