// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;



#define ll             long long

#define LL             long long

#define gcd(a,b)       __gcd(a, b)

#define lcm(a,b)       a * (b / gcd(a, b))

#define pii            pair<int, int>

#define pll            pair<ll, ll>

#define pil            pair<int, ll>

#define pli            pair<ll, int>

#define vi             vector<int>

#define vl             vector<ll>

#define vii            vector<pii>

#define vll            vector<pll>

#define vil            vector<pil>

#define vli            vector<pli>

#define pb             push_back

#define ppb            pop_back

#define mp             make_pair

#define ff             first

#define ss             second

#define all(v)         v.begin(), v.end()

#define fill(a, b)     memset(a, b, sizeof a)

#define smax(a, b)     a = max(a, b)

#define smin(a, b)     a = min(a, b)

#define sqr(x)         x * x

#define cube(x)        x * x * x

#define endl           '\n'



int in() {

	int n;

	scanf("%d", &n);

	return n;

}



ll Lin() {

	ll n;

	scanf("%lld", &n);

	return n;

}



double Din() {

	double n;

	scanf("%lf", &n);

	return n;

}



const ll inf = (ll)1e17;

const ll mod = (ll)1e9 + 7;

const int N = 1e5 + 5;



ll h[N];

ll dp[N];



ll call(int pos) {

	if (pos < 1) return 2e9;

	if (pos == 1) return 0;

	if (dp[pos] != -1) return dp[pos];

	return dp[pos] = min(call(pos - 1) + abs(h[pos] - h[pos - 1]), call(pos - 2) + abs(h[pos] - h[pos - 2]));

}





int solve() {

	int n = in();

	fill(dp, -1);

	for (int i = 1; i <= n; i++) {

		h[i] = Lin();

	}

	printf("%lld\n", call(n));

	return 0;

}



int main() {

	int test = 1, tc = 0;

	while (test--) {

		//printf("Case %d: ", ++tc);

		solve();

	}

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.7675975953089489x):
#include<bits/stdc++.h>

using namespace std;



#define ll             long long

#define LL             long long

#define pii            pair<int, int>

#define pll            pair<ll, ll>

#define pil            pair<int, ll>

#define pli            pair<ll, int>

#define vi             vector<int>

#define vl             vector<ll>

#define vii            vector<pii>

#define vll            vector<pll>

#define vil            vector<pil>

#define vli            vector<pli>

#define pb             push_back

#define ppb            pop_back

#define mp             make_pair

#define ff             first

#define ss             second

#define sz(x)          (int)x.size()

#define TN             typename

#define all(v)         v.begin(), v.end()

#define fill(a, b)     memset(a, b, sizeof(a))

#define endl           '\n'



template <TN T> T gcd(T a, T b) {return !b ? a : gcd(b, a % b);}

template <TN T> T lcm(T a, T b) {return a * (b / gcd(a, b));}

template <TN T> T sqr(T a) {return a * a;}

template <TN T> T cube(T a) {return a * a * a;}

template <TN T> inline void smin(T &a, T b) {a = a < b ? a : b;}

template <TN T> inline void smax(T &a, T b) {a = a > b ? a : b;}



template <TN T> inline void Int(T &n) {

	n = 0; int f = 1; register int ch = getchar();

	for (; !isdigit(ch); ch = getchar()) if (ch == '-') f = -1;

	for (; isdigit(ch); ch = getchar()) n = (n << 3) + (n << 1) + ch - '0';

	n = n * f;

}



#define error(args...) {vector <string> _v = split(#args, ','); err(_v.begin(), args); cout << endl;}

vector <string> split(const string &s, char c) {

	vector <string> v;

	stringstream ss(s); string x;

	while (getline(ss, x, c)) v.emplace_back(x);

	return move(v);

}

void err(vector <string> :: iterator it) {}

template <typename T, typename... Args>

void err(vector <string> :: iterator it, T a, Args... args) {

	cout << it -> substr((*it)[0] == ' ', it -> length()) << " = " << a << ", ";

	err(++it, args...);

}



inline int in() {int n; scanf("%d", &n); return n;}

inline ll Lin() {ll n; scanf("%lld", &n); return n;}

inline double Din() {double n; scanf("%lf", &n); return n;}



inline int add(int a, int b, int mod) {a += b; return a >= mod ? a - mod : a;}

inline int sub(int a, int b, int mod) {a -= b; return a < 0 ? a + mod : a;}

inline int mul(int a, int b, int mod) {return (ll)a * b % mod;}



const int N          = 2e5 + 5;

const ll  Mod        = (ll)1e9 + 7;

const int inf        = (int)2e9;

const ll  Inf        = (ll)1e18;

const int mod        = (int)1e9 + 7;







int solve() {

	int n = in();

	vi h(n + 1);

    for (int i = 1; i <= n; i++) {

        h[i] = in();	

    }

    vi dp(n + 1, inf);

    dp[1] = 0;

    for (int i = 1; i <= n; i++) {

        for(int j = i + 1; j <= i + 2; j++) {

        	if(j <= n) smin(dp[j], dp[i] + abs(h[i] - h[j]));

        }

    }

    printf("%d\n", dp[n]);

	return 0;

}



int main() {

	int test = 1, tc = 0;

	//scanf("%d", &test);

	while (test--) {

		//printf("Case %d: ", ++tc);

		solve();

	}

	return 0;

}