fn main() { let mut n = String::new(); std::io::stdin().read_line(&mut n).ok(); let n: usize = n.trim().parse().unwrap(); let mut a: Vec = vec![0; n+1]; let mut b: Vec = vec![0; n+1]; for i in 0..=n { let mut aa = String::new(); std::io::stdin().read_line(&mut aa).ok(); let aa: usize = aa.trim().parse().unwrap(); a[i] = aa; } for i in 0..=n { let mut bb = String::new(); std::io::stdin().read_line(&mut bb).ok(); let bb: usize = bb.trim().parse().unwrap(); b[i] = bb; } const DIVIDER: usize = 1_000_000_007; let mut a_sum: usize = a.iter().sum(); let mut result: usize = 0; for i in 0..=n { result += a_sum % DIVIDER * b[i]; result %= DIVIDER; a_sum -= a[n-i]; } println!("{}", result); }