import java.util.*;
import java.util.concurrent.SynchronousQueue;
import java.io.*;


public class given_len_sum_of_dig {

	

       public static void main(String[] args) throws IOException {
			Scanner scn = new Scanner(System.in);
		
			int t=scn.nextInt();
			while(t-->0){
				int n=scn.nextInt();
				long arr[]=new long[n];
				for(int i=0;i<n;i++){
					arr[i]=scn.nextLong();
				}
			
					
				int i=1;
				long sum=0;
				ArrayList<Long> al=new ArrayList<>();
				long max=Integer.MIN_VALUE;
				long min=Integer.MIN_VALUE;
				boolean f=(arr[0]>0)?true:false;
				if(f)
					max=arr[0];
				else 
					min=arr[0];
				while(i<arr.length){
					if(f){
						if(arr[i]>0){
							max=Math.max(max, arr[i]);
						}else{
							f=!f;
							al.add(max);
							sum+=max;
							min=Math.max(min, arr[i]);
							max=Integer.MIN_VALUE;
						}
					}else{
						if(arr[i]<0){
							min=Math.max(min, arr[i]);									
						}else{
							f=!f;
							al.add(min);
							sum+=min;
							max=Math.max(max, arr[i]);
							min=Integer.MIN_VALUE;
						}
						
					}
					i++;
				}
				if(al.size()==0){
					if(!f && min!=Integer.MIN_VALUE){
						al.add(min);
						sum+=min;
					}
					if(f && max!=Integer.MIN_VALUE){
						al.add(max);
						sum+=max;
					}
				}else{
				if(al.size()>0 && f&& al.get(al.size()-1)!=max && max!=Integer.MIN_VALUE){
					al.add(max);
					sum+=max;
				}
				if(al.size()>0 && !f &&al.get(al.size()-1)!=min && min!=Integer.MIN_VALUE){
					al.add(min);
					sum+=min;
				}
				}
//				System.out.println(al);
				if(al.size()>1 && al.get(0)>0 && al.get(al.size()-1)>0){
					System.out.println(Math.max(sum-al.get(al.size()-1), sum-al.get(0)));
				}else if(al.size()>1 && al.get(0)<0 && al.get(al.size()-1)<0)
				{
					System.out.println(Math.max(sum-al.get(al.size()-1), sum-al.get(0)));
				}else{
					System.out.println(sum);
				}
			}
		}

}