// Slower C++ solution:
#include<set>

#include<map>

#include<cmath>

#include<ctime>

#include<queue>

#include<stack>

#include<cstdio>

#include<string>

#include<vector>

#include<random>

#include<cstdlib>

#include<cstring>

#include<iomanip>

#include<iostream>

#include<algorithm>

#include<unordered_map>

#define endl "\n"

#define fi first

#define se second

#define db double

#define gcd __gcd

#define pb push_back

#define mp make_pair

#define lowbit(x) (x & (-x))

#define PII  pair<int, int> 

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

#define debug(x) cout << #x << " = " << x << endl

#define rep(i, a, b) for(__typeof(b) i = a; i <= (b); i++)

#define Rep(i, a, b) for(__typeof(a) i = a; i >= (b); i--)

#define FAST ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)

template<class T> inline T qmin(T a, T b) { return a < b ? a : b; }

template<class T> inline T qmax(T a, T b) { return a > b ? a : b; }

typedef long long ll;

typedef unsigned long long ull;

const db eps = 1e-9;

const db PI = acos(-1);

const int inf = 0x3f3f3f3f;

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

const int maxn = (int)1e5 + 5;//remember to modify it, No RE or MLE

const ll INF = 0x3f3f3f3f3f3f3f3f;

using namespace std;

ll qpow(ll x, ll y) { ll ret = 1; for( ; y; y >>= 1, x = (x * x) % mod) if(y & 1) ret = (ret * x) % mod; return ret; }



inline int read(){

	char ch = getchar();

	int x = 0, f = 1;

	while(ch < '0' || ch > '9'){

		if(ch == '-') f = -1;

		ch = getchar();

	}

	while('0' <= ch && ch <= '9'){

		x = x * 10 + ch - '0';

		ch = getchar();

	}

	return x * f;

}



int n;

int h[maxn], dp[maxn];



int main()

{

	n = read();

	rep(i, 1, n) h[i] = read();

	memset(dp, 0x3f, sizeof dp);

	dp[1] = 0;

	rep(i, 1, n){

		dp[i+1] = qmin(dp[i+1], dp[i] + abs(h[i] - h[i+1]));

		dp[i+2] = qmin(dp[i+2], dp[i] + abs(h[i] - h[i+2]));

	}

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

	return 0;

}

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

//#pragma GCC optimize ("O3")

 

#define pb push_back

#define mp make_pair

#define fi first

#define se second

#define ll long long

#define pii pair<int,int>

#define point pair<double,double>

#define segment pair<point,point>

#define circle pair<point,double> //titik pusat, radius

#define line pair<double,double> //m,c

#define ins insert

#define er erase

 

#define FORU(a,b,c) for(int a=b; a<=c; a++)

#define FORD(a,b,c) for(int a=b; a>=c; a--)

#define FOR(a,b) for(int a=1; a<=b; a++)

#define FORA(a,b) for(auto (a) : (b))

 

const double EPS = 1e-9;

const double PI = acos(-1);

const int MOD = 1e9+7;

 

#define yu using

#define don namespace

#define sei std

 

yu don sei;

 

typedef vector<int> vi;

typedef vector<vi> vvi;

typedef vector<vector<pii>> vvii;

 

//const int nPrime=100000;

//bool isprime[nPrime];

//vector<int>prime;

//

//void pre()

//{

//  memset(isprime,1,sizeof(isprime));

//  isprime[1]=0;

//  for(int i=2;i*i<=nPrime;i++)

//  {

//      for(int j=i*i;j<nPrime;j+=i)

//      {

//          isprime[j]=0;

//      }

//  }

//  for(int i=2;i<nPrime;i++)

//  {

//      if(isprime[i])prime.pb(i);

//  }

//}

 

// ll pwr(ll b,ll e)

// {

//  if(e==0)return 1;

//  if(e==1)return b;

//  ll temp=pwr(b,e/2);

//  if(e%2==0)

//  {

//      return (temp*temp);

//  }

//  else

//  {

//      return (temp*temp*b);

//  }

// }

 

// ll modpow(ll b,ll e)

// {

//  b%=MOD;

//  if(e==0)return 1;

//  if(e==1)return b%MOD;

//  ll temp=modpow(b,e/2);

//  if(e%2==0)

//  {

//      return (temp*temp) %MOD;

//  }

//  else

//  {

//      return ((temp*temp %MOD )*b)%MOD;

//  }

// }

 

ll gcd(ll a,ll b)

{

    if(b==0)return a;

    return gcd(b,a%b);

}

 

//int n,m;

 

//bool valid(int x,int y)

//{

//  if(x<0)return 0;

//  if(y<0)return 0;

//  if(x>=n)return 0;

//  if(y>=m)return 0;

//  return 1;

//}

 

//int p[]={-1,0,1,0};

//int q[]={0,1,0,-1};

 

//int p[]={-1,-1,-1,0,0,1,1,1};

//int q[]={-1,0,1,-1,1,-1,0,1};

 

point add(point a,point b)

{

    return {a.fi+b.fi,a.se+b.se};

}

 

point sub(point a,point b)

{

    return {a.fi-b.fi,a.se-b.se};

}

 

//double dist(point a,point b)

//{

//    return ((a.fi-b.fi)*(a.fi-b.fi) + (a.se-b.se)*(a.se-b.se));

//}

 

double dist(point a,point b)

{

    return sqrt((a.fi-b.fi)*(a.fi-b.fi) + (a.se-b.se)*(a.se-b.se));

}

 

//double distPS(point a,segment b)//heron formula, extreemely prone to precison error

//{

//    double AB=rdist(a,b.fi);

//    double AC=rdist(a,b.se);

//    double BC=rdist(b.fi,b.se);

//    double s=AB+AC+BC;

//    s/=2.0;

//    return 2*sqrt(s*(s-AB)*(s-BC)*(s-AC))/BC;

//}

 

double dabs(double a)

{

    if(a+EPS>0)return a;

    return -a;

}

 

double dotProduct(point a,point b)

{

    return a.fi*b.fi + a.se*b.se;

}

 

double crossProduct(point a,point b)

{

    return a.fi*b.se - a.se*b.fi;

}

 

int ccw(point a,point b,point c)// -1 CCW 0 COL 1 CW

{

    double tmp=crossProduct(sub(b,a),sub(c,a));

    if(tmp>EPS)

    {

        return -1;

    }

    else if(tmp<-EPS)

    {

        return 1;

    }

    else

    {

        return 0;

    }

}

 

point intLiLi(point a,point b,point c,point d)

{

    return mp(((a.fi*b.se-b.fi*a.se)*(c.fi-d.fi) - (a.fi-b.fi)*(c.fi*d.se-d.fi*c.se))/((a.fi-b.fi)*(c.se-d.se) - (a.se-b.se)*(c.fi-d.fi) ),

        ((a.fi*b.se-b.fi*a.se)*(c.se-d.se)-(a.se-b.se)*(c.fi*d.se-d.fi*c.se))/((a.fi-b.fi)*(c.se-d.se) - (a.se-b.se)*(c.fi-d.fi) ));

}









int H[100010];

int n;

int memo[100010];



// f(i) = min(f(i+1) + cost, f(i+2) + cost)

int f(int index)

{

    // cout << "lagi di f(" << index << ")" << endl;

    if(index > n-1)return 100000000;

    if(index == n-1)return 0; // base case

    if(memo[index]!=-1) return memo[index]; //memo

    memo[index] = min(f(index+1) + abs(H[index] - H[index+1]), f(index+2) + abs(H[index] - H[index+2])); //rekursi

    return memo[index];

}

// f(0) -> f(2) -> f(4) = INF

//              -> f(3) = 0

//      -> f(1) ...         

int main()

{

    // memset(memo, -1, sizeof(memo)); 

    // // memset(nama_array, val, sizeof(nama_array)) -> nama_array[0,1,2,3,...] = val

    // // val = {-1, 0}

    cin>>n;

    for(int i=0;i<n;i++)memo[i]=-1;

    for(int i=0;i<n;i++)

    {

        cin>>H[i];

    }

    cout << f(0) << endl;

    return 0;

}