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

#include <vector>

#include <cstdlib>

using namespace std;

template<class T> inline bool chmin(T& a, T b) {

    if (a > b) {

        a = b;

        return true;

    }

    return false;

}

template<class T> inline bool chmax(T& a, T b) {

    if (a < b) {

        a = b;

        return true;

    }

    return false;

}

const long long INF = 1LL << 60;

long long dp[200000];

int main(void){

	

    int N;cin>>N;

	  

	for(int i=0;i<200000;i++)dp[i]=INF;

	long long h[N];

    for(int i=0;i<N;i++)cin>>h[i];

    dp[0]=0;

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

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

        if(i>1){

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

        }

    }

    cout<<dp[N-1]<<endl;

    return 0;

}

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

#define ll long long

#define ull unsigned long long

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

#define REP(a,b) for(int a=0;a<(b);++a)

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

#define debug(x) cerr<<#x<<": "<<x<<'\n'

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

#define YES() printf("YES\n")

#define NO() printf("NO\n")

#define isYES(x) printf("%s\n",(x) ? "YES" : "NO")

#define Yes() printf("Yes\n")

#define No() printf("No\n")

#define isYes(x) printf("%s\n",(x) ? "Yes" : "No")

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

#define pb push_back

#define mp make_pair

#define INF (1<<29)

#define Sp(p) cout<<setprecision(25)<< fixed<<p<<endl

#define vi vector<int>

#define vl vector<ll>

#define vii vector< vector<int> >

#define vll vector< vector<ll> >

#define vs vector<string>

#define pii pair<int,int>

#define pis pair<int,string>

#define psi pair<string,int>

#define pll pair<ll,ll>

#define X first

#define Y second

using namespace std;

typedef pair<int, int> P;

typedef pair<ll, ll> LP;

typedef pair<int, P> PP;

typedef pair<ll, LP> LPP;



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

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



template<class T=int>

T in(){T x;cin>>x;return (x);}

template<class T>

void print(T& x){cout<<x<<'\n';}



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

const int MAX =510000;

ll fac[MAX],finv[MAX],inv[MAX];

void COMint(){

    fac[0]=fac[1]=1;

    finv[0]=finv[1]=1;

    inv[1]=1;

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

        fac[i]=fac[i-1]*i%MOD;

        inv[i]=MOD-inv[MOD%i]*(MOD/i)%MOD;

        finv[i]=finv[i-1]*inv[i]%MOD;

    }

}

ll COM(int n,int k){

    if(n<k) return 0;

    if(n<0||k<0)return 0;

    return fac[n]*(finv[k]*finv[n-k]%MOD)%MOD;

}

ll gcd(ll a,ll b){

    if(b==0)return a;

    if(a>b){

        swap(a,b);

    }

    return gcd(a,b%a);

}

ll lcm(ll a,ll b){

    ll g;g=gcd(a,b);

    return a*b/g;

}

bool compare_by_b(pair<int, int> a, pair<int, int> b) {

    if(a.second != b.second){

        return a.second < b.second;

    }else{

        return a.first < b.first;

    }

}



bool compare_by_a(pair<int, int> a, pair<int, int> b) {

    if(a.first != b.first){

        return a.first < b.first;

    }else{

        return a.second < b.second;

    }

}

template<class T> inline bool chmin(T& a, T b) {

    if (a > b) {

        a = b;

        return true;

    }

    return false;

}

template<class T> inline bool chmax(T& a, T b) {

    if (a < b) {

        a = b;

        return true;

    }

    return false;

}



ll RS(ll N,ll P,ll M){

    if(P==0){

        return 1;

    }else{

        if(P%2==0){

            ll t=RS(N,P/2,M);

            return t*t%M;

        }else{

            return N*RS(N,P-1,M)%M;

        }

    }

}



struct UnionFind{

    vi d;

    UnionFind(int n):d(n,-1){};

    int deb(int x){

        return d[x];

    }

    int root(int x){

        if(d[x]<0)return x;

        return d[x]=root(d[x]);

    }

    int unite(int x,int y){

        x=root(x);y=root(y);

        if(x==y)return false;

        if(d[x]>d[y])swap(x,y);

        d[x]+=d[y];

        d[y]=x;

        return true;

    }

    bool same(int x,int y){return root(x)==root(y);}

    int size(int x){return -d[root(x)];}

};



struct mint {

  ll x; // typedef long long ll;

  mint(ll x=0):x((x%MOD+MOD)%MOD){}

  mint operator-() const { return mint(-x);}

  mint& operator+=(const mint a) {

    if ((x += a.x) >= MOD) x -= MOD;

    return *this;

  }

  mint& operator-=(const mint a) {

    if ((x += MOD-a.x) >= MOD) x -= MOD;

    return *this;

  }

  mint& operator*=(const mint a) {

    (x *= a.x) %= MOD;

    return *this;

  }

  mint operator+(const mint a) const {

    mint res(*this);

    return res+=a;

  }

  mint operator-(const mint a) const {

    mint res(*this);

    return res-=a;

  }

  mint operator*(const mint a) const {

    mint res(*this);

    return res*=a;

  }

  mint pow(ll t) const {

    if (!t) return 1;

    mint a = pow(t>>1);

    a *= a;

    if (t&1) a *= *this;

    return a;

  }  

  // for prime mod

  mint inv() const {

    return pow(MOD-2);

  }

  mint& operator/=(const mint a) {

    return (*this) *= a.inv();

  }

  mint operator/(const mint a) const {

    mint res(*this);

    return res/=a;

  }

};

ll daichi(ll a,ll b,ll n){

    return a*n+b*to_string(n).size();

}

int ans=1e9+7;

int N;

ll dp[100010];

ll h[100010];

int main() {

    ios::sync_with_stdio(false);

    cin.tie(0);

    cin>>N;

    REP(i,N){

        cin>>h[i];

    }

    REP1(i,N){

        dp[i]=INF;

    }

    dp[0]=0;

    REP1(i,N-1){

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

        if(i>1)chmin(dp[i],dp[i-2]+abs(h[i]-h[i-2]));

        debug(dp[i]);

    }

    cout<<dp[N-1]<<endl;

    return 0;

}