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: Runtime Error)

#include <stdio.h>
#include <math.h>
void merge(unsigned long long*A,int p,int q){
  if(p!=q){
    merge(A,p,(p+q)/2);
    merge(A,(p+q)/2+1,q);
  }
  int l=p,r=(p+q)/2+1,i,c=p,B[q];
  for(i=p;i<=q;i++){
    if(l>(p+q)/2){
      B[c]=A[r];
      c++;
      r++;
    }
    else if(r>q){
      B[c]=A[l];
      c++;
      l++;
    }
    else if(A[r]<A[l]){
      B[c]=A[r];
      c++;
      r++;
    }else{
      B[c]=A[l];
      c++;
      l++;
    }
  }
  for(i=p;i<=q;i++){
    A[i]=B[i];
  }
}
unsigned long long int main(){
  int n,i;
  unsigned long long int sum=0,A[n];
  scanf("%d",&n);
  for(i=0;i<n;i++){
    scanf("%d",&A[i]);
  }
  /*for(i=0;i<n;i++){
    printf("%d",A[i]);
  }*/
  merge(A, 0, n-1);
  /*for(i=0;i<n;i++){
    printf("%d ",A[i]);
  }*/
  /*for(i=0;i<n/2;i++){
    sum+=A[n-1-i*2];
    printf("%lld ",sum);
  }*/
  printf("%lld",sum);
  return 0;
}