/*
	Drzavno takmicenje 2008
	Zadatak: poruka
	Autor: Slobodan Mitrovic, Deronje

	Zadatak se resava obilaskom svih stanja u sirinu, odnosno primenom BFSa.
	Svako stanje mozemo oznaciti sa (r, c, l) gde je (r, c) pozicija
	kursora, a l vrednost promenljive poslPoz
*/


#include <iostream>
#include <cstdio>
#include <queue>
#include <fstream>

using namespace std;
int dp[100][101][101];

int main(){
	ifstream fin("poruka.in");
	ofstream fout("poruka.out");
	int n;
	fin >> n;
	int a[n];
	for (int i = 0; i < n; i++)
		fin >> a[i];
	int sr, sc, fr, fc;
	fin >> sr >> sc >> fr >> fc;
	sr--;
	fr--;
	queue <int> qr, qc, ql;
	while (!qr.empty())
		qr.pop();
	while (!qc.empty())
		qc.pop();
	while (!ql.empty())
		ql.pop();
	memset(dp, 255, sizeof(dp));
	dp[sr][sc][sc] = 0;
	qr.push(sr); qc.push(sc); ql.push(sc);
	int v[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
	int ret = 1 << 30;
	while (!qr.empty()){
		int r = qr.front(), c = qc.front(), l = ql.front();
		if (r == fr && c == fc)
			ret = min(ret, dp[r][c][l]);
		qr.pop(); qc.pop(); ql.pop();
		for (int i = 0; i < 4; i++){
			int rr, cc, ll;
			if (v[i][1] == 0){// idemo gore ili dole
				rr = (r + v[i][0] + n) % n;
				cc = ll = l;
				cc = min(cc, a[rr]);
			}
			else{ // idemo levo ili desno
				cc = ll = c + v[i][1];
				rr = r;
				if (cc > a[rr]){
					rr = (rr + 1) % n;
					cc = ll = 0;
				}
				else if (cc < 0){
					rr = (rr - 1 + n) % n;
					cc = ll = a[rr];
				}
			}
			if (dp[rr][cc][ll] != -1)
				continue;
			dp[rr][cc][ll] = dp[r][c][l] + 1;
			qr.push(rr); qc.push(cc); ql.push(ll);
		}
	}
	fout << ret << endl;
	fin.close();
	fout.close();
	return 0;
}
