description: Luntik came out for a morning stroll and found an array a of length n. He calculated the sum s of the elements of the array (s= ∑_{i=1}^{n} a_i). Luntik calls a subsequence of the array a nearly full if the sum of the numbers in that subsequence is equal to s-1.
  
  Luntik really wants to know the number of nearly full subsequences of the array a. But he needs to come home so he asks you to solve that problem!
  
  A sequence x is a subsequence of a sequence y if x can be obtained from y by deletion of several (possibly, zero or all) elements.
  
  Input
  
  The first line contains a single integer t (1 ≤ t ≤ 1000) — the number of test cases. The next 2 ⋅ t lines contain descriptions of test cases. The description of each test case consists of two lines.
  
  The first line of each test case contains a single integer n (1 ≤ n ≤ 60) — the length of the array.
  
  The second line contains n integers a_1, a_2, …, a_n (0 ≤ a_i ≤ 10^9) — the elements of the array a.
  
  Output
  
  For each test case print the number of nearly full subsequences of the array.
  
  Example
  
  Input
  
  
  5
  5
  1 2 3 4 5
  2
  1000 1000
  2
  1 0
  5
  3 0 2 1 1
  5
  2 1 0 3 0
  
  
  Output
  
  
  1
  0
  2
  4
  4
  
  Note
  
  In the first test case, s=1+2+3+4+5=15, only (2,3,4,5) is a nearly full subsequence among all subsequences, the sum in it is equal to 2+3+4+5=14=15-1.
  
  In the second test case, there are no nearly full subsequences.
  
  In the third test case, s=1+0=1, the nearly full subsequences are (0) and () (the sum of an empty subsequence is 0).
solution: import java.util.*;
  import java.lang.*;
  import java.io.*;
  
  public class Main {
      static FastReader in;
      static PrintWriter out;
      static int bit(long n) {
          return (n == 0) ? 0 : (1 + bit(n & (n - 1)));
      }
  
      static void p(Object o) {
          out.print(o);
      }
  
      static void pn(Object o) {
          out.println(o);
      }
  
      static void pni(Object o) {
          out.println(o);
          out.flush();
      }
  
      static String n() throws Exception {
          return in.next();
      }
  
      static String nln() throws Exception {
          return in.nextLine();
      }
  
      static int ni() throws Exception {
          return Integer.parseInt(in.next());
      }
  
      static long nl() throws Exception {
          return Long.parseLong(in.next());
      }
  
      static double nd() throws Exception {
          return Double.parseDouble(in.next());
      }
  
      static class FastReader {
          static BufferedReader br;
          static StringTokenizer st;
  
          public FastReader() {
              br = new BufferedReader(new InputStreamReader(System.in));
          }
  
          public FastReader(String s) throws Exception {
              br = new BufferedReader(new FileReader(s));
          }
  
          String next() throws Exception {
              while (st == null || !st.hasMoreElements()) {
                  try {
                      st = new StringTokenizer(br.readLine());
                  } catch (IOException e) {
                      throw new Exception(e.toString());
                  }
              }
              return st.nextToken();
          }
  
          String nextLine() throws Exception {
              String str = "";
              try {
                  str = br.readLine();
              } catch (IOException e) {
                  throw new Exception(e.toString());
              }
              return str;
          }
      }
      static long power(long a,long b){
          if(b==0)return 1;
          long val=power(a,b/2);
          val=val*val;
          if((b%2)!=0)val=val*a;
          return val;
      }
      static ArrayList<Long> prime_factors(long n){
          ArrayList<Long> ans=new ArrayList<Long>();
          while(n%2==0){
              ans.add(2L);
              n/=2;
          }
          for(long i=3;i<=Math.sqrt(n);i++){
              while(n%i==0){
                  ans.add(i);
                  n/=i;
              }
          }
          if(n>2)ans.add(n);
          return ans;
      }
      static void sort(long[] a){
          Arrays.sort(a);
      }
      static void reverse_sort(long[] a){
          Arrays.sort(a);
          for(int i=0;i<a.length;i++){
              long temp=a[i];
              a[i]=a[a.length-i-1];
              a[a.length-i-1]=temp;
          }
      }
      static void sort(ArrayList<Long> a){
          Collections.sort(a);
      }
      static void reverse_sort(ArrayList<Long> a){
          Collections.sort(a,Collections.reverseOrder());
      }
      static void temp(long[] a,int i,int j){
          long temp=a[i];
          a[i]=a[j];
          a[j]=temp;
      }
      static void temp(List<Long> a,int i,int j){
          long temp=a.get(i);
          a.set(j,a.get(i));
          a.set(j,temp);
      }
      static void sieve(boolean[] prime){
          int n=prime.length-1;
          Arrays.fill(prime,true);
          for(int i=2;i*i<=n;i++){
              if(prime[i]){
                  for(int j=2*i;j<=n;j+=i){
                      prime[j]=false;
                  }
              }
          }
      }
      static long gcd(long a,long b){
          if(b==0)return a;
          return gcd(b,a%b);
      }
      static long mod=1000000007;
      public static void main(String[] args) throws Exception {
          in = new FastReader();
          out = new PrintWriter(System.out);
          int t=ni();
          while(t-->0){
              int n=ni();
              long[] a=new long[n];
              long one=0;
              long zero=0;
              for(int i=0;i<n;i++){
                  a[i]=nl();
                  if(a[i]==1)one++;
                  if(a[i]==0)zero++;
              }
              pn(one*power(2,zero));
              
  
          }
          out.flush();
          out.close();
      }
  }
  