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

#include <ext/pb_ds/assoc_container.hpp>

#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;

using namespace std;



#define ll long long

#define ld long double

typedef vector <ll> vi;                 // Vector of long long

typedef vector <vi> vvi;                // Vector of vi

typedef vector <pair<ll,ll>> ii;        // Vector of pairs

#define ff first                        // For pairs

#define ss second                       // For pairs

#define sz(a) int((a).size())           // Function to determine size of any container

#define pb push_back                    // Pushback to vector

#define mp make_pair                    // Makes pairs to be stored as pair

#define all(c) (c).begin(), (c).end()   // Mainly used by me in sorting

// ordered_set adds two new functions to set - (set).find_by_order([kth element based on zero indexing]) and order_of_key()

// order_of_key returns number of elements less that parameter. If element exists, that order is its index

#define ordered_set tree < ll ,  null_type ,  less<ll> ,  rb_tree_tag ,  tree_order_statistics_node_update >

#define INF (ll)(1e10)

#define MAX (ll)(1e5 + 5)



ll dp[MAX];

ll n;

vi h;



ll solve(ll i)

{

    if (i < 0)

        return INF;



    if (dp[i] == -1)

        dp[i] = min(solve(i - 1) + llabs(h[i] - h[i - 1]), solve(i - 2) + llabs(h[i] - h[i - 2]));

    return dp[i];

}



int main(void)

{

    ios_base::sync_with_stdio(false);

    cin.tie(NULL);



    cin >> n;

    h.resize(n);



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

        cin >> h[i];



    memset(dp, -1, sizeof(dp));



    dp[0] = 0;

    dp[1] = llabs(h[1] - h[0]);



    cout << solve(n - 1) << "\n";

}


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

#include <ext/pb_ds/assoc_container.hpp>

#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;

using namespace std;



#define ll long long

#define ld long double

typedef vector <ll> vi;                 // Vector of long long

typedef vector <vi> vvi;                // Vector of vi

typedef vector <pair<ll,ll>> ii;        // Vector of pairs

#define ff first                        // For pairs

#define ss second                       // For pairs

#define sz(a) int((a).size())           // Function to determine size of any container

#define pb push_back                    // Pushback to vector

#define mp make_pair                    // Makes pairs to be stored as pair

#define all(c) (c).begin(), (c).end()   // Mainly used by me in sorting

// ordered_set adds two new functions to set - (set).find_by_order([kth element based on zero indexing]) and order_of_key()

// order_of_key returns number of elements less that parameter. If element exists, that order is its index

#define ordered_set tree < ll ,  null_type ,  less<ll> ,  rb_tree_tag ,  tree_order_statistics_node_update >

#define MAX (ll)(1e5 + 5)

ll dp[MAX];



int main(void)

{

    ios_base::sync_with_stdio(false);

    cin.tie(NULL);



    ll n;

    cin >> n;

    ll h[n];

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

        cin >> h[i];



    dp[0] = 0;

    dp[1] = llabs(h[1] - h[0]);

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

        dp[i] = min(dp[i - 2] + llabs(h[i] - h[i - 2]), dp[i - 1] + llabs(h[i] - h[i - 1]));

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

}