You are given an array a consisting of n integers. Indices of the array start from zero (i. e. the first element is a_0, the second one is a_1, and so on).

You can reverse at most one subarray (continuous subsegment) of this array. Recall that the subarray of a with borders l and r is a[l; r] = a_l, a_{l + 1}, ..., a_{r}.

Your task is to reverse such a subarray that the sum of elements on even positions of the resulting array is maximized (i. e. the sum of elements a_0, a_2, ..., a_{2k} for integer k = ⌊(n-1)/(2)⌋ should be maximum possible).

You have to answer t independent test cases.

Input

The first line of the input contains one integer t (1 ≤ t ≤ 2 ⋅ 10^4) — the number of test cases. Then t test cases follow.

The first line of the test case contains one integer n (1 ≤ n ≤ 2 ⋅ 10^5) — the length of a. The second line of the test case contains n integers a_0, a_1, ..., a_{n-1} (1 ≤ a_i ≤ 10^9), where a_i is the i-th element of a.

It is guaranteed that the sum of n does not exceed 2 ⋅ 10^5 (∑ n ≤ 2 ⋅ 10^5).

Output

For each test case, print the answer on the separate line — the maximum possible sum of elements on even positions after reversing at most one subarray (continuous subsegment) of a.

Example

Input


4
8
1 7 3 4 7 6 2 9
5
1 2 1 2 1
10
7 8 4 5 7 6 8 9 7 3
4
3 1 2 1


Output


26
5
37
5
import java.util.*;
import java.io.*;
import java.math.BigInteger;

public class D1373{
    static int gcd(int a, int b) 
    { 
        if (a == 0) 
            return b; 
        if (b == 0) 
            return a; 
        int k; 
        for (k = 0; ((a | b) & 1) == 0; ++k)  
        { 
            a >>= 1; 
            b >>= 1; 
        } 
        while ((a & 1) == 0) 
            a >>= 1; 

        do { 
            while ((b & 1) == 0) 
                b >>= 1; 
            if (a > b)  
            { 
                int temp = a; 
                a = b; 
                b = temp; 
            } 

            b = (b - a); 
        } while (b != 0); 
        return a << k; 
    }   
    static int lcm(int a,int b){
        return a*b/gcd(a,b);
    }
	public static int binary(int arr[],int n, int a,int beg,int end){
		while(beg<=end){
			int mid=beg+(end-beg)/2;
			if(arr[mid]==a)
				return mid;
			if(arr[mid]<a)
				end=mid-1;
			else
				beg=mid+1;
		}
		return -1;
	}
    
    public static int binaryless(int arr[],int n, int a,int beg,int end){
        while(beg<=end){
            int mid=beg+(end-beg)/2;
            if(arr[mid]>=a){
                if(mid==1||arr[mid-1]<a)
                    return mid;
                end=mid-1;
            }
            else{
                beg=mid+1;
            }
        }
        return -1;
    }
	public static void sieve(int t){
		boolean srr[]=new boolean[t+1];
        
        for(int i=2;i*i<=t;i++)
        {
            if(!srr[i])
            {
                for(int k=i*i;k<=t;k+=i)
                    srr[k]=true;
            }
        }
        for(int i=2;i<t+1;i++){
        	if(!srr[i])
            	System.out.println(i);
        }
	}
    static int power(int x, int y, int p) 
    { 
        int res = 1;      
        x = x % p;  
        while (y > 0) 
        { 
            if((y & 1)==1) 
                res = (res * x) % p; 
            y = y >> 1;  
            x = (x * x) % p;  
        } 
        return res; 
    } 
    
    static class Custom implements Comparable<Custom>{
        int d;
        int f;
        public Custom(int d,int f){
            this.d=d;
            this.f=f;
        }
        public int compareTo(Custom t){
            return this.d-t.d;
        }
    }
    void solve() throws IOException {
        int t=nextInt();
        while(t--!=0){
            int n=nextInt();
            int arr[]=new int[n];
            long brr[]=new long[n];
            arr[0]=nextInt();
            brr[0]-=arr[0];
            long sum=arr[0];
            for(int i=1;i<n;i++){
                arr[i]=nextInt();
                if(i%2==0){
                    brr[i]=brr[i-1]-arr[i];
                    sum+=arr[i];
                }
                else
                    brr[i]=brr[i-1]+arr[i];
            }
            long ans=0;
            long min=0;
            for(int i=1;i<n;i+=2){
                min=Math.min(brr[i],min);
                ans=Math.max(ans,brr[i]-min);
            }
            // disp(sum);
            long sum2=sum+ans;
            ans=0;
            min=brr[0];
            for(int i=2;i<n;i+=2){
               min=Math.min(brr[i],min);
                ans=Math.max(ans,brr[i]-min);
            }
            // disp(sum);
            sum=Math.max(sum,sum+ans);
            sum=Math.max(sum,sum2);
            pw.println(sum);
        }
    }
    void disp(Object a){
        System.out.println(a);
    }
	String next() throws IOException {
        while (st == null || !st.hasMoreTokens()) {
            st = new StringTokenizer(br.readLine());
        }
        return st.nextToken();
    }
    String nextLine()throws IOException{
        return br.readLine();
    }
    int nextInt() throws IOException {
        return Integer.parseInt(next());
    }
    long nextLong() throws IOException {
        return Long.parseLong(next());
    }
 
    StringTokenizer st;
    BufferedReader br;
    PrintWriter pw;
    Scanner sc;
    void run() throws IOException {
        sc=new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        br = new BufferedReader(new InputStreamReader(System.in));
        pw = new PrintWriter(System.out);
        long time = System.currentTimeMillis();
        solve();
        System.err.println("time = " + (System.currentTimeMillis() - time));
        pw.close();
    }
 
    public static void main(String[] args) throws IOException {
        new D1373().run();
    }
 
}