fn main() { let n: usize = { let mut buf = String::new(); std::io::stdin().read_line(&mut buf).unwrap(); buf.trim_end().parse().unwrap() }; let (s, t): (usize, usize) = { let mut buf = String::new(); std::io::stdin().read_line(&mut buf).unwrap(); let mut iter = buf.split_whitespace(); ( iter.next().unwrap().parse::().unwrap() - 1, iter.next().unwrap().parse::().unwrap() - 1, ) }; let a: Vec = { let mut buf = String::new(); std::io::stdin().read_line(&mut buf).unwrap(); let iter = buf.split_whitespace(); iter.map(|x| x.parse().unwrap()).collect() }; let mut ans: i64 = a[s] - a[t]; let l = (n + s - t) % n - 1; { let (mut x, mut y) = (s, t); for _ in 0..(l / 2) { x = (n + x - 1) % n; y = (y + 1) % n; ans += a[x] - a[y]; } } let r = n - 2 - l; { let (mut x, mut y) = (s, t); for _ in 0..(r / 2) { x = (x + 1) % n; y = (n + y - 1) % n; ans += a[x] - a[y]; } } if l % 2 == 1 && r % 2 == 1 { ans += (a[(n + s - (l + 1) / 2) % n] - a[(s + (r + 1) / 2) % n]).abs(); } else if l % 2 == 1 { ans += a[(n + s - (l + 1) / 2) % n]; } else if r % 2 == 1 { ans += a[(s + (r + 1) / 2) % n]; } println!("{}", ans); }