use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let parts:Vec<u32> = input.trim().split_whitespace().map(|x| x.parse::<u32>().expect("Failed to parse")).collect();
let n = parts[0];
let i = parts[1];
let j = parts[2];
// 计算i,j在第几层
let layer = clac_layer(&n,&i,&j);
// 计算第layer层的元素
let layer_ele = layer_element(&n,&layer);
// 计算第layer层的第i,j个元素的索引
let element = calc_index(&n,&layer,&i,&j);
// 计算第layer层的第i,j个元素的值
let result = layer_ele[element as usize-1];
// 输出结果
println!("{}",result);
}
// 算出i,j在第几层
fn clac_layer(n:&u32,i:&u32,j:&u32)->u32{
let layer:f64 = (*n) as f64 * 0.5;
let layer:u32 = layer.ceil() as u32;
let mut il = *i;
let mut jl= *j;
if *n%2 == 0{
if *i > layer {
il = layer - (*i -layer)+1;
};
if *j > layer {
jl = layer - (*j -layer)+1;
};
}else{
if *i > layer {
il = layer - (*i -layer);
};
if *j > layer {
jl = layer - (*j -layer);
};
}
il.min(jl)
}
// 计算第layer层的元素
fn layer_element(n:&u32,layer:&u32) -> Vec<u32>{
let mut sum = 0;
fn layer_element(layer:&u32,n:&u32) -> u32{
let rect_len = *n-(*layer-1)*2;
if rect_len == 1{
return 1
}else{
return rect_len*4-4
}
}
for i in 0..(*n as f64 * 0.5).ceil() as u32 {
if i+1 == *layer{
break
}
sum += layer_element(&(i+1),&n);
}
((sum+1)..(sum+1+layer_element(&layer,&n))).collect()
}
// 计算第layer层的第i,j个元素的索引
fn calc_index(n:&u32,layer:&u32,i:&u32,j:&u32) -> u32{
let rect_len = *n-(*layer-1)*2;
let il = *i-*layer+1;
let jl = *j-*layer+1;
if il == 1{
return jl;
}else if jl == rect_len{
return rect_len+il-1;
}else if il ==rect_len{
return rect_len*2-1+(rect_len-jl);
}else if jl == 1{
return rect_len*3-2+(rect_len-il);
}else{
return 1
}
}