use proconio::{fastout, input}; #[fastout] fn main() { input! { a: [[i32]], } println!("{}", output(solve(a))); } fn solve(a: Vec>) -> Vec { let mut ans = Vec::with_capacity(a.len()); for a in a { let mut minus_max = None; let mut minus_min = None; let mut plus_max = None; let mut plus_min = None; let mut zero_flag = false; for a in a { match a.signum() { -1 => { if minus_min == None || minus_min.unwrap() > a { minus_min = Some(a); } if minus_max == None || minus_max.unwrap() < a { minus_max = Some(a); } } 1 => { if plus_min == None || plus_min.unwrap() > a { plus_min = Some(a); } if plus_max == None || plus_max.unwrap() < a { plus_max = Some(a); } } 0 => zero_flag = true, _ => (), } } if zero_flag { ans.push(0); } else if (minus_max == None) && (plus_min != None) { ans.push(plus_min.unwrap() as i64 * plus_max.unwrap() as i64); } else if (minus_max != None) && (plus_min == None) { ans.push(minus_min.unwrap() as i64 * minus_max.unwrap() as i64); } else { ans.push(minus_max.unwrap() as i64 * plus_min.unwrap() as i64); } } ans } fn output(ans: Vec) -> String { ans.into_iter() .map(|x| x.to_string()) .collect::>() .join("\n") }