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 Julia (1.4.0) (judge verdict: Wrong Answer)

parseInt(x)=parse(Int, x)
parseMap(x::Array{SubString{String},1})=map(parseInt, x)

function ftAdd(ft::Array{Int,1},k::Int,x::Int)
	t = k
	n = length(ft)
	while t<=n
		ft[t] = max(ft[t],x)
		t += t&(-t)
	end
	ft
end

function ftSum(ft::Array{Int,1},rr::Int)
	r = rr
	s = 0
	while r>0
		s = max(s,ft[r])
		r -= r&(-r)
	end
	s
end

function main()
	n = readline() |> parseInt
	a = readline() |> split |> parseMap
	x = zeros(Int,n+1)
	y = zeros(Int,n+1)
	for i in 1:n
		x[i+1]=x[i]
		y[i+1]=y[i]
		if i%2==1
			x[i+1]+=a[i]
		else
			y[i+1]+=a[i]
		end
	end
	if n%2==0
		m = -10^18
		for i in 1:n
			if i%2==1
				m = max(m,x[i+1]+y[n+1]-y[i+2], y[i+1]-x[n+1]-x[i+1])
			else
				if i==n
					m = max(m,y[i+1])
				else
					m = max(m,x[i+1]+y[n+1]-y[i+1], y[i+1]-x[n+1]-x[i+2])
				end
			end
		end
		println(m)
	else
		m = y[n+1]
		for i in 1:2:n
			m = max(m,x[n+1]-a[i])
		end
		for i in 1:n-1
			if i%2==1
				m = max(m,x[i+1]+y[n+1]-y[i+3],y[i+1]+x[n+1]-x[i+3])

			else
				m = max(m,x[i+1]+y[n+1]-y[i+2],x[i+1]+y[n+1]-y[i+2])
			end
		end
		ft = zeros(Int,n)
		for i in 1:n-2
			if i%2==1
				ftAdd(ft,i,y[i]+x[n+1]-x[i+2])
			else
				ftAdd(ft,i,y[i]+x[n+1]-x[i+3])
			end
			for i in 1:n-5
				m = max(m,ftSum(ft,i)-y[i+4]+x[i+1])
			end
		end
		println(m)
	end
end

main()