import java.util.Scanner;

class MaxSumSubArray {

public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int numOfTestCase = sc.nextInt();
		
		for (int i=0;i<numOfTestCase;i++) {
			int arrSize = sc.nextInt();
			int arr[] = new int[arrSize];
			for (int j=0;j<arrSize;j++) {
				arr[j] = sc.nextInt();
			}
			System.out.print(findMaxContSubArray(arr) + " ");
			System.out.println(maxsumNonContiguous(arr));
		}
		sc.close();
	}
	
	


  public static int findMaxContSubArray(int[] arr){
	  
	  if (checkAllNegative(arr)) {
	    	 int max = findMax(arr);
	    	 return max;
     	}
	  
	  int max_so_far = 0, max_ending_here = 0;

	    for (int i = 0; i < arr.length; i++)
	    {
	        max_ending_here = max_ending_here + arr[i];
	        if (max_ending_here < 0)
	            max_ending_here = 0;
	        if (max_so_far < max_ending_here)
	            max_so_far = max_ending_here;
	    }
	    return max_so_far;
  }

  public static int maxsumNonContiguous(int[] arr){
	     if(arr == null)
	        return 0;
	     
	     if (checkAllNegative(arr)) {
	    	 int max = findMax(arr);
	    	 return max;
	     }
	     
	     int arrayLength = arr.length;
	     int sum1 = arr[0];
	     int sum2 = 0;
	     int sum3 =0;
	     for(int i = 1; i  <  arrayLength; i++){
	         sum3 = Math.max(sum1,sum2);
	         sum2 = sum3;
	         sum1 = sum2 + arr[i];
	     }
	     return Math.max(sum1, sum2);
	 }
  
  public static boolean checkAllNegative(int arr[]) {
	  for (int i=0;i<arr.length;i++) {
		  if (arr[i] >= 0)
			  return false;
	  }
	  return true;
  }
  
  public static int findMax(int arr[]) {
	  int max=Integer.MIN_VALUE;
	  for (int i=0;i<arr.length;i++) {
		  if (arr[i] > max) {
			  max = arr[i];
		  }
	  }
	  return max;
  }
  
}
