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++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>

using namespace std;
#define inf 1000000000
#define unvisited -1
#define visited 1
#define eps 1e-9
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define uint64 unsigned long long
#define FastSlowInput ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define debug if(true)
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> ii;
typedef vector<ii> vii;

ll a[200001];
ll dp[200001][4];

int n;

ll maks;

ll solve(int idx, int rem) {
	if(idx >= n){return 0;}
	if(idx == (n-1) && rem >= 1){return 0;}
	if(rem == 0){return a[idx] + solve(idx+2, rem);}
	if(dp[idx][rem] != -maks){return dp[idx][rem];}
	return dp[idx][rem] = max(a[idx] + solve(idx+2, rem), solve(idx+1, rem-1));
}

int main(){
	int i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%lld",&a[i]);
	}

	if(n % 2 == 0){
		ll sum1 = 0;
		for(i=0;i<n;i+=2){
			sum1 += a[i];
		}
		ll sum2 = 0;
		for(i=1;i<n;i+=2){
			sum2 += a[i];
		}
		printf("%lld\n",max(sum1, sum2));
		return 0;
	}
	maks = (ll)inf*(ll)inf;
	for(i=0;i<=200000;i++){
		for(j=0;j<=3;j++){
			dp[i][j] = -maks;
		}
	}
	// memset(dp, -1, sizeof dp);

	ll ans = solve(0, 2);
	printf("%lld\n",ans);

	return 0;
};