description: Vupsen and Pupsen were gifted an integer array. Since Vupsen doesn't like the number 0, he threw away all numbers equal to 0 from the array. As a result, he got an array a of length n.
  
  Pupsen, on the contrary, likes the number 0 and he got upset when he saw the array without zeroes. To cheer Pupsen up, Vupsen decided to come up with another array b of length n such that ∑_{i=1}^{n}a_i ⋅ b_i=0. Since Vupsen doesn't like number 0, the array b must not contain numbers equal to 0. Also, the numbers in that array must not be huge, so the sum of their absolute values cannot exceed 10^9. Please help Vupsen to find any such array b!
  
  Input
  
  The first line contains a single integer t (1 ≤ t ≤ 100) — the number of test cases. The next 2 ⋅ t lines contain the description 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 (2 ≤ n ≤ 10^5) — the length of the array.
  
  The second line contains n integers a_1, a_2, …, a_n (-10^4 ≤ a_i ≤ 10^4, a_i ≠ 0) — the elements of the array a.
  
  It is guaranteed that the sum of n over all test cases does not exceed 2 ⋅ 10^5.
  
  Output
  
  For each test case print n integers b_1, b_2, …, b_n — elements of the array b (|b_1|+|b_2|+… +|b_n| ≤ 10^9, b_i ≠ 0, ∑_{i=1}^{n}a_i ⋅ b_i=0).
  
  It can be shown that the answer always exists.
  
  Example
  
  Input
  
  
  3
  2
  5 5
  5
  5 -2 10 -9 4
  7
  1 2 3 4 5 6 7
  
  
  Output
  
  
  1 -1
  -1 5 1 -1 -1
  -10 2 2 -3 5 -1 -1
  
  Note
  
  In the first test case, 5 ⋅ 1 + 5 ⋅ (-1)=5-5=0. You could also print 3 -3, for example, since 5 ⋅ 3 + 5 ⋅ (-3)=15-15=0
  
  In the second test case, 5 ⋅ (-1) + (-2) ⋅ 5 + 10 ⋅ 1 + (-9) ⋅ (-1) + 4 ⋅ (-1)=-5-10+10+9-4=0.
solution: 
  // import java.util.StringTokenizer;
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStreamReader;
  import java.util.ArrayList;
  import java.util.Arrays;
  import java.util.HashMap;
  import java.util.StringTokenizer;
  
  public class Test {
      static BufferedReader br;
      static double pre = 1e-9;
      static long mod = (long) (1e+9 + 7);
      static boolean isPrime[];
  
      public static void main(String[] args) throws IOException {
          // your code goes here
  
          br = new BufferedReader(new InputStreamReader(System.in));
          int t = Integer.parseInt(br.readLine());
  
          // A
          // while (t-- > 0) {
          // // int n = Integer.parseInt(br.readLine());
          // StringTokenizer st;
  
          // st = new StringTokenizer(br.readLine());
          // long a = Long.parseLong(st.nextToken());
          // long b = Long.parseLong(st.nextToken());
          // long c = Long.parseLong(st.nextToken());
  
          // long ans = (a + b * 2 + c * 3) % 2;
          // System.out.println(ans);
          // }
  
          // B
          // while (t-- > 0) {
          // int n = Integer.parseInt(br.readLine());
          // StringTokenizer st;
          // int count1 = 0, count0 = 0;
  
          // st = new StringTokenizer(br.readLine());
          // for (int i = 0; i < n; i++) {
          // int num = Integer.parseInt(st.nextToken());
          // if (num == 0) {
          // count0++;
          // }
          // if (num == 1) {
          // count1++;
          // }
          // }
          // int ans = (int) Math.pow(2, count0) * count1;
  
          // System.out.println(ans);
          // }
  
          // C
          // while (t-- > 0) {
          // int n = Integer.parseInt(br.readLine());
          // String s = br.readLine();
          // String alphabets = "abcdefghijklmnopqrstuvwxyz";
          // int[] alps = new int[26];
          // for (int i = 0; i < 26; i++) {
          // alps[i] = Integer.MAX_VALUE;
          // char check = alphabets.charAt(i);
  
          // int low = 0, high = n - 1;
          // int count = 0;
  
          // while (low <= high) {
          // if (s.charAt(low) == s.charAt(high)) {
          // low++;
          // high--;
          // } else if (s.charAt(low) == check) {
          // low++;
          // count++;
          // } else if (s.charAt(high) == check) {
          // high--;
          // count++;
          // } else {
          // break;
          // }
          // }
          // if (low >= high) {
          // alps[i] = count;
          // }
          // }
          // int ans = Integer.MAX_VALUE;
          // for (int i = 0; i < 26; i++) {
          // ans = Math.min(ans, alps[i]);
          // }
  
          // if (ans == Integer.MAX_VALUE) {
          // ans = -1;
          // }
  
          // System.out.println(ans);
          // }
  
          // D
          while (t-- > 0) {
              int n = Integer.parseInt(br.readLine());
              StringTokenizer st;
              st = new StringTokenizer(br.readLine());
              int a[] = new int[n];
              int ans[] = new int[n];
              for (int i = 0; i < n; i++) {
                  a[i] = Integer.parseInt(st.nextToken());
              }
              int i = 0;
              if (n % 2 != 0) {
                  if (a[0] + a[1] != 0) {
                      ans[0] = a[2];
                      ans[1] = a[2];
                      ans[2] = -1 * (a[0] + a[1]);
                  } else if (a[1] + a[2] != 0) {
                      ans[1] = a[0];
                      ans[2] = a[0];
                      ans[0] = -1 * (a[2] + a[1]);
                  } else if (a[0] + a[2] != 0) {
                      ans[0] = a[1];
                      ans[2] = a[1];
                      ans[1] = -1 * (a[2] + a[0]);
                  }
                  i = 3;
              }
  
              for (; i < n; i = i + 2) {
                  ans[i] = a[i + 1];
                  ans[i + 1] = -1 * a[i];
              }
              for (i = 0; i < n; i++) {
                  System.out.print(ans[i] + " ");
              }
              System.out.println("");
          }
      }
  
      private static long max3(long a, long b, long c) {
          if (a > b) {
              if (a > c) {
                  return a;
              }
              return c;
          }
          if (b > c) {
              return b;
          }
          return c;
      }
  
      private static long binStringToNumMod(String str, long n, long mod) {
          long ans = 0;
          for (int i = 0; i < str.length(); i++) {
              ans = ((ans * n) % mod + (Integer.parseInt(str.substring(i, i + 1))) % mod) % mod;
          }
          return ans;
      }
  
      private static String numToBinString(long num) {
          StringBuffer sb = new StringBuffer("");
          while (num > 0) {
              sb.append(num % 2);
              num /= 2;
          }
          return sb.reverse().toString();
      }
  
      public static boolean[] SieveOfEratosthenes() {
          int n = (int) 1e7 + 7;
          boolean[] ans = new boolean[n];
          Arrays.fill(ans, true);
          ans[0] = false;
          ans[1] = false;
          for (int i = 2; i < n; i++) {
              if (ans[i]) {
                  for (int j = i * i; j < n; j = j + i) {
                      ans[j] = false;
                  }
              }
          }
          return ans;
  
      }
  
      public static long powerMod(long num, long pow, long mod) {
          if (pow == 0 || num == 1)
              return 1;
          if (num == 0 || pow == 1)
              return num;
  
          long ans = powerMod(num, pow / 2, mod) % mod;
  
          ans = (ans * ans) % mod;
  
          if (pow % 2 != 0) {
              ans = (ans * num) % mod;
          }
  
          return ans;
      }
  
      public static long gcd(long a, long b) {
          if (b == 0 || a == b)
              return a;
          if (a == 1 || b == 1)
              return 1;
          return gcd(b, a % b);
  
      }
  
      static class Element implements Comparable<Element> {
          int num;
          int freq;
  
          Element(int num, int freq) {
              this.num = num;
              this.freq = freq;
          }
  
          public int compareTo(Element e) {
              if (this.freq > e.freq) {
                  return 1;
              }
              if (this.freq == e.freq) {
                  return 0;
              }
              return -1;
          }
      }
  
  }
  