// Slower C++ solution:


/**

    And in the end, the love you take is equal to the love you make.



        I LOVE YOU LAURA.

**/



#include <bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp>

#include <ext/pb_ds/tree_policy.hpp>

#include <ext/rope>



#define _CRT_SECURE_NO_DEPRECATE

#define _CRT_DISABLE_PERFCRIT_LOCKS



#define findOrder find_by_order

#define orderKey order_of_key



#define isOn(mask, i) (mask & (1 << i))

#define turn(mask, i) (mask |= (1 << i))

#define switch(mask, i) (mask &= ~(1 << i))

#define change(mask, i) (mask ^= (1 << i))

#define lowbit(mask) (mask & (-mask))

#define turnAll(mask, n) (mask = (1 << n) - 1)

#define switchLastBit(mask) (mask & (mask - 1))

#define turnLastZero(mask) (mask | (mask + 1))

#define modulo(x, mod) ((x) & (mod - 1))

#define log2(x) (31 - __builtin_clz(x))



#define mkp make_pair

#define pb push_back

#define pf push_front

#define eb emplace_back

#define ef emplace_front

#define ins insert

#define rsz resize

#define f first

#define s second

#define lb lower_bound

#define ub upper_bound



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

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

#define rall(x) rbegin(x), rend(x)



#define debug(x) (cerr << x << " ")



using namespace std;

using namespace __gnu_pbds;

using namespace __gnu_cxx;



typedef double db;

typedef long long ll;

typedef long double ld;

typedef unsigned long long ull;



typedef pair<int, int> ii;

typedef pair<ll,ll> pll;

typedef pair<ld,ld> pdb;

typedef pair<int, ii> tri;

typedef complex<ld> cd;



typedef vector<int> vi;

typedef vector<ii> vii;

typedef vector<ld> vdb;

typedef vector<cd> vcd;

typedef vector<ll> vll;

typedef vector<string> vs;

typedef vector<vll> matrix;



typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> indexed_tree;



const ll mod = 1e9+7;

const int maxn = 2e5+2;

const int pi = 2 * acos(0.0);

const db eps = 1e-9;



ll arr[maxn], dp[maxn];



int main()

{

    ios_base::sync_with_stdio(0);

    cin.tie(0); cout.tie(0);



    int n; cin >> n;



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

        cin >> arr[i];

    }



    memset(dp, 63, sizeof dp);



    dp[1] = 0;

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

        if (i <= 2){

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

        }

        else{

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

            dp[i] = min(dp[i], dp[i - 2] + abs(arr[i] - arr[i - 2]));

        }

    }



    cout << dp[n] << "\n";



    return 0;

}


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

}