
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

public class Main {
    private static Data compare(Data d1, Data d2){
        if(d1.length > d2.length)
            return d1;
        if(d2.length > d1.length)
            return d2;
        if(d1.sum > d2.sum)
            return d1;
        if(d2.sum > d1.sum)
            return d2;
        return d1;
    }
    static Data[][] dp;
    private static Data calculate(int[] arr, int current, int previousSign){
        if(current >= arr.length){
            Data d = new Data();
            d.length = Integer.valueOf(0);
            d.sum = Long.valueOf(0);
            return d;
        }

        if(dp[current][previousSign] != null)
            return dp[current][previousSign];

        if(previousSign == 2){
            Data d1 = null;
            if(arr[current] > 0){
                d1 = Data.coyp(calculate(arr, current+1, 1));
                d1.sum += arr[current];
                d1.length++;
            }else{
                d1 = Data.coyp(calculate(arr, current+1, 0));
                d1.sum += arr[current];
                d1.length++;
            }

            Data d2 = Data.coyp(calculate(arr, current+1, previousSign));

            dp[current][previousSign] = compare(d1, d2);
            return dp[current][previousSign];
        }

        if( (arr[current] > 0 && previousSign == 0) || (arr[current] < 0 && previousSign == 1)){
            if(previousSign == 0){
                Data d1 = Data.coyp(calculate(arr, current+1, 1));
                d1.sum += arr[current];
                d1.length++;
                Data d2 = Data.coyp(calculate(arr, current+1, previousSign));
                dp[current][previousSign] = compare(d1, d2);
                return dp[current][previousSign];
            }else{
                Data d1 = Data.coyp(calculate(arr, current+1, 0));
                d1.sum += arr[current];
                d1.length++;
                Data d2 = Data.coyp(calculate(arr, current+1, previousSign));
                dp[current][previousSign] = compare(d1, d2);
                return dp[current][previousSign];
            }
        }else{
            dp[current][previousSign] = Data.coyp(calculate(arr, current+1, previousSign));
            return dp[current][previousSign];
        }
    }

    public static void main(String[] args) throws IOException {
        Reader sc = new Reader();
        int t = sc.nextInt();
        while (t-- > 0){
            int n = sc.nextInt();
            dp = new Data[n][3];
            int[] arr = new int[n];
            for(int i = 0; i < n; i++){
                arr[i] = sc.nextInt();
            }
            Data ans = calculate(arr, 0, 2);
            System.out.println(ans.sum);
        }
    }

    static class Data{
        Integer length;
        Long sum;

        public static Data coyp(Data data){
            Data data1 = new Data();
            data1.length = data.length;
            data1.sum = data.sum;
            return data1;
        }
    }

    /** Faster input **/
    static class Reader {
        final private int BUFFER_SIZE = 1 << 32;private DataInputStream din;private byte[] buffer;private int bufferPointer, bytesRead;
        public Reader(){din=new DataInputStream(System.in);buffer=new byte[BUFFER_SIZE];bufferPointer=bytesRead=0;}
        public Reader(String file_name)throws IOException {din=new DataInputStream(new FileInputStream(file_name));buffer=new byte[BUFFER_SIZE];bufferPointer=bytesRead=0;}
        public String readLine()throws IOException{byte[] buf=new byte[1024*16];int cnt=0,c;
            while((c=read())!=-1){if(c=='\n')break;buf[cnt++]=(byte)c;}return new String(buf,0,cnt);}
        public int nextInt()throws IOException{int ret=0;byte c=read();while(c<=' ')c=read();boolean neg=(c=='-');
            if(neg)c=read();do{ret=ret*10+c-'0';}while((c=read())>='0'&&c<='9');if(neg)return -ret;return ret;}
        public long nextLong()throws IOException{long ret=0;byte c=read();while(c<=' ')c=read();boolean neg=(c=='-');
            if(neg)c=read();do{ret=ret*10+c-'0';}while((c=read())>='0'&&c<='9');if(neg)return -ret;return ret;}
        public double nextDouble()throws IOException{double ret=0,div=1;byte c=read();while(c<=' ')c=read();boolean neg=(c=='-');if(neg)c = read();do {ret=ret*10+c-'0';}while((c=read())>='0'&&c<='9');
            if(c=='.')while((c=read())>='0'&&c<='9')ret+=(c-'0')/(div*=10);if(neg)return -ret;return ret;}
        private void fillBuffer()throws IOException{bytesRead=din.read(buffer,bufferPointer=0,BUFFER_SIZE);if(bytesRead==-1)buffer[0]=-1;}
        private byte read()throws IOException{if(bufferPointer==bytesRead)fillBuffer();return buffer[bufferPointer++];}
        public void close()throws IOException{if(din==null) return;din.close();}
    }
}
