description: Alice and Bob are playing a game on a matrix, consisting of 2 rows and m columns. The cell in the i-th row in the j-th column contains a_{i, j} coins in it.
  
  Initially, both Alice and Bob are standing in a cell (1, 1). They are going to perform a sequence of moves to reach a cell (2, m).
  
  The possible moves are: 
  
    * Move right — from some cell (x, y) to (x, y + 1); 
    * Move down — from some cell (x, y) to (x + 1, y). 
  
  
  
  First, Alice makes all her moves until she reaches (2, m). She collects the coins in all cells she visit (including the starting cell).
  
  When Alice finishes, Bob starts his journey. He also performs the moves to reach (2, m) and collects the coins in all cells that he visited, but Alice didn't.
  
  The score of the game is the total number of coins Bob collects.
  
  Alice wants to minimize the score. Bob wants to maximize the score. What will the score of the game be if both players play optimally?
  
  Input
  
  The first line contains a single integer t (1 ≤ t ≤ 10^4) — the number of testcases.
  
  Then the descriptions of t testcases follow.
  
  The first line of the testcase contains a single integer m (1 ≤ m ≤ 10^5) — the number of columns of the matrix.
  
  The i-th of the next 2 lines contain m integers a_{i,1}, a_{i,2}, ..., a_{i,m} (1 ≤ a_{i,j} ≤ 10^4) — the number of coins in the cell in the i-th row in the j-th column of the matrix.
  
  The sum of m over all testcases doesn't exceed 10^5.
  
  Output
  
  For each testcase print a single integer — the score of the game if both players play optimally.
  
  Example
  
  Input
  
  
  3
  3
  1 3 7
  3 5 1
  3
  1 3 9
  3 5 1
  1
  4
  7
  
  
  Output
  
  
  7
  8
  0
  
  Note
  
  The paths for the testcases are shown on the following pictures. Alice's path is depicted in red and Bob's path is depicted in blue.
  
  <image>
solution: //This code is written by प्रविण शंखपाळ 
  
  //package wizard;
  
  import java.io.*;
  import java.math.*;
  import java.util.*;
  import java.text.*;
  
  public class Luna_Lovegood {
  
  	public static void main(String[] args) {
  
  //		try {
  
  		FastReader fr = new FastReader();
  		PrintWriter pt = new PrintWriter(System.out);
  
  		int t = fr.nextInt();
  
  		while (t > 0) {
  
  			int n = fr.nextInt();
  			long A[] = new long[n];
  			long B[] = new long[n];
  			long prefix[] = new long[n + 1];
  			long suffix[] = new long[n + 1];
  
  			for (int i = 0; i < n; i++) {
  				A[i] = fr.nextLong();
  
  			}
  
  			for (int i = 0; i < n; i++) {
  				B[i] = fr.nextLong();
  			}
  			prefix[0] = 0;
  			for (int i = 1; i < n; i++) {
  				prefix[i] = prefix[i - 1] + B[i - 1];
  			}
  			suffix[n - 1] = 0;
  			for (int i = n - 2; i >= 0; i--) {
  				suffix[i] = suffix[i + 1] + A[i + 1];
  			}
  
  			long ans = Long.MAX_VALUE;
  			for (int i = 0; i < n; i++) {
  				ans = Math.min(Math.max(prefix[i], suffix[i]), ans);
  			}
  			pt.println(ans);
  
  			t--;
  
  		}
  
  		pt.close();
  
  //		} catch (
  //
  //		Exception e) {
  //			return;
  //		}
  	}
  
  	static int lower_bound(long[] arr, int begin, int end, long tar) {
  		while (begin < end) {
  			int mid = begin + (end - begin) / 2;
  			if (arr[mid] < tar)
  				begin = mid + 1;
  			else if (arr[mid] >= tar)
  				end = mid;
  		}
  		return begin;
  //		lower bound gives largest index of a number smaller than (if target is not present) or equal to target(if target is present) 
  //      for complete array use begin = 0 and end = n
  	}
  
  	static int upper_bound(long[] arr, int begin, int end, long tar) {
  		while (begin < end) {
  			int mid = begin + (end - begin) / 2;
  			if (arr[mid] <= tar)
  				begin = mid + 1;
  			else if (arr[mid] > tar)
  				end = mid;
  		}
  
  		return begin;
  //		upper bound gives smallest index of a number strictly greater than target
  //	    for complete array use begin = 0 and end = n
  	}
  
  	public static void mergeSort(String[] nameGo) {
  		if (nameGo.length > 1) {
  			String[] leftGo = new String[nameGo.length / 2];
  			String[] rightGo = new String[nameGo.length - nameGo.length / 2];
  			for (int so = 0; so < leftGo.length; so++) {
  				leftGo[so] = nameGo[so];
  			}
  			for (int ki = 0; ki < rightGo.length; ki++) {
  				rightGo[ki] = nameGo[ki + nameGo.length / 2];
  			}
  			mergeSort(leftGo);
  			mergeSort(rightGo);
  			merges(nameGo, leftGo, rightGo);
  		}
  	}
  
  	public static void merges(String[] nameH, String[] leftH, String[] rightH) {
  		int as = 0;
  		int bs = 0;
  		for (int i = 0; i < nameH.length; i++) {
  			if (bs >= rightH.length || (as < leftH.length && leftH[as].compareToIgnoreCase(rightH[bs]) < 0)) {
  				nameH[i] = leftH[as];
  				as++;
  			} else {
  				nameH[i] = rightH[bs];
  				bs++;
  			}
  		}
  	}
  
  	static void merge(long arr[], int l, int m, int r) {
  
  		int n1 = m - l + 1;
  		int n2 = r - m;
  
  		long L[] = new long[n1];
  		long R[] = new long[n2];
  
  		for (int i = 0; i < n1; ++i)
  			L[i] = arr[l + i];
  		for (int j = 0; j < n2; ++j)
  			R[j] = arr[m + 1 + j];
  
  		int i = 0, j = 0;
  
  		int k = l;
  		while (i < n1 && j < n2) {
  			if (L[i] <= R[j]) {
  				arr[k] = L[i];
  				i++;
  			} else {
  				arr[k] = R[j];
  				j++;
  			}
  			k++;
  		}
  
  		while (i < n1) {
  			arr[k] = L[i];
  			i++;
  			k++;
  		}
  
  		while (j < n2) {
  			arr[k] = R[j];
  			j++;
  			k++;
  		}
  	}
  
  	static void sort(long arr[], int l, int r) {
  		if (l < r) {
  
  			int m = l + (r - l) / 2;
  
  			sort(arr, l, m);
  			sort(arr, m + 1, r);
  
  			merge(arr, l, m, r);
  		}
  	}
  
  	static class Pair implements Comparable<Pair> {
  		int a, b;
  
  		Pair(int a, int b) {
  			this.a = a;
  			this.b = b;
  		}
  
  		public int compareTo(Pair o) {
  			// TODO Auto-generated method stub
  			if (this.a != o.a)
  				return Integer.compare(this.a, o.a);
  			else
  				return Integer.compare(this.b, o.b);
  			// return 0;
  		}
  
  		public boolean equals(Object o) {
  			if (o instanceof Pair) {
  				Pair p = (Pair) o;
  				return p.a == a && p.b == b;
  			}
  			return false;
  		}
  
  	}
  
  	static int binarySearch(int arr[], int first, int last, int key) {
  		int mid = (first + last) / 2;
  		while (first <= last) {
  			if (arr[mid] < key) {
  				first = mid + 1;
  			} else if (arr[mid] == key) {
  				return mid;
  			} else {
  				last = mid - 1;
  			}
  			mid = (first + last) / 2;
  		}
  		return -1;
  	}
  
  	static class FastReader {
  		BufferedReader br;
  		StringTokenizer st;
  
  		public FastReader() {
  			br = new BufferedReader(new InputStreamReader(System.in));
  		}
  
  		String next() {
  			while (st == null || !st.hasMoreElements()) {
  				try {
  					st = new StringTokenizer(br.readLine());
  				} catch (IOException e) {
  					e.printStackTrace();
  				}
  			}
  			return st.nextToken();
  		}
  
  		int nextInt() {
  			return Integer.parseInt(next());
  		}
  
  		long nextLong() {
  			return Long.parseLong(next());
  		}
  
  		double nextDouble() {
  			return Double.parseDouble(next());
  		}
  
  		String nextLine() {
  			String str = "";
  			try {
  				str = br.readLine();
  			} catch (IOException e) {
  				e.printStackTrace();
  			}
  			return str;
  		}
  	}
  }
  