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



#define forn(i, n) for (int i = 0; i < int(n); ++i)

#define for1(i, n) for (int i = 1; i <= int(n); ++i)

#define fore(i, l, r) for (int i = int(l); i <= int(r); ++i)

#define ford(i, n) for (int i = int(n)-1; i >= 0; --i)

#define pb push_back

#define eb emplace_back

#define ms(a, x) memset(a, x, sizeof(a))

#define F first

#define S second

#define endl '\n'

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

#define de2(x,y) cout<<#x<<" = "<<(x) <<' '<< #y<<" = "<<y<<endl;



using namespace std;



typedef long long ll;

typedef pair<int, int> pii;

const int INF = 0x3f3f3f3f;

mt19937 gen(chrono::high_resolution_clock::now().time_since_epoch().count());



const int N=1e5+5;

int dp[N];

int main() {

    ios::sync_with_stdio(false);

    cin.tie(nullptr);

	int n;

	cin>>n;

	vector<int> a(n);

	for(auto& it:a) cin>>it;

	ms(dp,INF);

	dp[0]=0;

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

		dp[i]=min(dp[i],dp[i-1]+abs(a[i]-a[i-1]));

		if(i>1) dp[i]=min(dp[i],dp[i-2]+abs(a[i]-a[i-2]));

	}

	cout<<dp[n-1];

    return 0;

}




// Faster C++ solution for the same problem (measured speedup: 1.4298312211547874x):
#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;

}