using System;
using System.Numerics;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace debug
{
    class main
    {
        static void Main(string[] args)
        {
            //問題クラスを展開
            ProgramD a = new ProgramD();
            a.main();//実行する

        }

    }

    class ProgramA
    {
        public void main()
        {
            //入力
            string[] s = Console.ReadLine().Split(' ');
            int a = int.Parse(s[0]);
            int b = int.Parse(s[1]);
            int t = int.Parse(s[2]);


            //b*(t/a)が答え
            Console.WriteLine(b * (t/a));

        }
    }

    class ProgramB
    {
        public void main()
        {

            //入力
            int n = int.Parse(Console.ReadLine());
            string[] v = Console.ReadLine().Split(' ');
            string[] c = Console.ReadLine().Split(' ');
            int sum = 0;


            //v-cをしてマイナスでなければ足す
            for (int i = 0; i < n; i++)
            {
                if (int.Parse(v[i]) - int.Parse(c[i]) > 0)
                    sum += int.Parse(v[i]) - int.Parse(c[i]);
            }

            //答え出力
            Console.WriteLine(sum);
            

        }
    }

    class ProgramC
    {
        public void main()
        {

            //入力
            int n = int.Parse(Console.ReadLine());
            long[] R = new long[n];
            long[] L = new long[n];

           

            string[] a = Console.ReadLine().Split(' ');
            L[0] = long.Parse(a[0]);
            R[0] = long.Parse(a[n - 1]);

            //左からのgcdと右からのgcdを求める
            for (int i = 1; i < n; i++)
            {
                L[i] = gcd(L[i - 1], long.Parse(a[i]));
                R[i] = gcd(R[i - 1], long.Parse(a[n - 1 - i]));
            }

            long max = 0;

            for (int i = 0; i < n; i++)
            {
                //それぞれの位置で引き出す
                long temp = 0;
                if (i == 0)//一番左は右n-1個分のみで考える
                    temp = R[n - 2];
                else if(i == n- 1)//一番右は左n-1個分のみで考える
                    temp = L[n - 2];
                else
                    temp = gcd(L[i - 1], R[n - 2 - i]);

                //最大を求める
                max = Math.Max(max, temp);
            }

            //答えを出力
            Console.WriteLine(max);

        }

        /*最大公約数を求める関数*/
        static long gcd(long p, long q)
        {
            if (p < q)
            {
                long temp = p;
                p = q;
                q = temp;
            }

            long r = 1;

            while (r != 0)
            {
                r = p % q;
                p = q;
                q = r;
            }

            return p;
        }

    }


    class ProgramD
    {
        public void main()
        {

            //入力
            int n = int.Parse(Console.ReadLine());
            string[] a = Console.ReadLine().Split(' ');

            long[] dp_u = new long[n];
            long[] dp_d = new long[n];

            dp_u[1] = -(long.Parse(a[0]) + long.Parse(a[1])); 
            dp_d[1] = long.Parse(a[0]) + long.Parse(a[1]);

            for (int i = 2; i < n; i++)
            {
                dp_u[i] = Math.Max(dp_u[i - 1] - long.Parse(a[i]) + 2 * long.Parse(a[i - 1]), dp_d[i - 1] - long.Parse(a[i]) - 2 *long.Parse(a[i - 1]));
                dp_d[i] = Math.Max(dp_u[i - 1] + long.Parse(a[i]), dp_d[i - 1] + long.Parse(a[i]));

            }


            //答を出す
            Console.WriteLine(Math.Max(dp_u[n -1], dp_d[n -1]));

        }

    }

    

}




    

Measured memory_bytes: 30556