Problem:
Score : 600 points

Problem Statement

Given is an integer sequence A_1, ..., A_N of length N.

We will choose exactly \left\lfloor \frac{N}{2} \right\rfloor elements from this sequence so that no two adjacent elements are chosen.

Find the maximum possible sum of the chosen elements.

Here \lfloor x \rfloor denotes the greatest integer not greater than x.

Constraints

2 \leq N \leq 2\times 10^5

|A_i|\leq 10^9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 ... A_N

Output

Print the maximum possible sum of the chosen elements.

Sample Input 1

6
1 2 3 4 5 6

Sample Output 1

12

Choosing 2, 4, and 6 makes the sum 12, which is the maximum possible value.

Sample Input 2

5
-1000 -100 -10 0 10

Sample Output 2

0

Choosing -10 and 10 makes the sum 0, which is the maximum possible value.

Sample Input 3

10
1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000

Sample Output 3

5000000000

Watch out for overflow.

Sample Input 4

27
18 -28 18 28 -45 90 -45 23 -53 60 28 -74 -71 35 -26 -62 49 -77 57 24 -70 -93 69 -99 59 57 -49

Sample Output 4

295

Solution in C# (.NET Core 3.1.201) (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;

public class Hello
{
	static void Main(string[] args)
    {
        var num1 = int.Parse(Console.ReadLine());
        string[] strNum = Console.ReadLine().Split(' ');
        long outNum1 = 0;
        long outNum2 = 0;
        long outNum3 = 0;
        long cntNum = num1 / 2;
        var kisu = true;
        if (num1 % 2 == 0)
        {
            kisu = false;
        }

        var cnt = 0;
        for (int i = 0; i < num1; i+=2)
        {

            outNum1 += long.Parse(strNum[i]);
            cnt += 1;

            if (cnt == cntNum)
            {
                break;
            }
        }

        cnt = 0;
        for (int j = 1; j < num1; j+=2)
        {
            outNum2 += long.Parse(strNum[j]);
            cnt += 1;

            if (cnt == cntNum)
            {
                break;
            }
        }

        //奇数の場合のみ
        if (kisu)
        {
            cnt = 0;
            for (int k = 2; k < num1; k+=2)
            {
                outNum3 += long.Parse(strNum[k]);
                cnt += 1;

                if (cnt == cntNum)
                {
                    break;
                }
            }
        }


        if (outNum1 < outNum2)
        {
            outNum1 = outNum2;

        }
        if (outNum1 < outNum3)
        {
            outNum1 = outNum3;

        }
        Console.Write(outNum1);
    }
}