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

#define FIN         ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)

#define ii          pair<int,int>

#define F           first

#define S           second

#define pb          push_back

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

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

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

#define forr(i,a)   for(int i = a; i >= 0; i--)

#define fori(i,m)   for(auto i = m.begin(); i != m.end(); i++) 

#define w(t)        while(t--)

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

#define cls(a,car)  memset(a,car,sizeof (a))

#define db(x)       cerr << #x << " is " << x << '\n'

#define FL          freopen("input.txt", "r", stdin),freopen("output.txt", "w", stdout);

#define EjecuteTime cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n"

#define angle(x)    double(x * acos(-1) / 180.0)

using namespace std;

typedef long long   ll;

typedef vector<int> vi;

typedef vector<ii>  vii;

const int N = 1 * 1e5 + 5;

const ll mod = 1e9 + 7;

const double E = 1e-9;

//int dx[] = {1, 0}, dy[] = {0, 1};

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

//int dx[] = {2, 1, -1, -2, -2, -1, 1, 2}, dy[] = {1, 2, 2, 1, -1, -2, -2, -1};

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

// fflush(stdout)

// cout << flush

// a + b = a ^ b + 2 * (a & b)

int v[N];

int dp[N];

int n, k = 2;

int f(int i){

    if(i == n - 1)return 0;

    int &ans = dp[i];

    if(ans == -1){

        ans = 1e9;

        for(int j = 1; j <= k; j++)

            if(i + j < n)

                ans = min(ans, f(i + j) + abs(v[i] - v[i + j]));

            else

                break;

    }

    return ans;

}

int main(){

    //FL;

    FIN;

    cin >> n;

    fore(i, 0, n)cin >> v[i];

    cls(dp, -1);

    cout << f(0) << '\n';

    

    EjecuteTime;

    return 0;

}       

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

}