const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function () {
//只有0 1 2 3四种结果
let n = parseInt(await readline());
let result = 0;
let line = await readline();
let nums = line.trim().split(' ').map(item => parseInt(item));
let max = Math.max(...nums), min = Math.min(...nums);
if(max == nums[n-1] && min == nums[0]) {
for(let i = 1; i < n; i++) { //如果最大值和最小值都在结果位置
if(nums[i] < nums[i-1]) { //如果本来就是升序 则不用操作 即 0 否则就要操作一次 即 1
console.log(1)
return;
}
}
console(0)
return;
} else if( max !== nums[n-1] && min !== nums[0]) { //如果最大值和最小值都不在结果位置
if(max == nums[0] && min == nums[n-1]) { //如果位置更好相反 则三次
console.log(3)
return;
}else {
console.log(2) //否则操作三次
return;
}
} else {
console.log(1) //如果最大值或者最小值恰好有一个在结果位置 则只需要操作一次
return
}
}()