description: You are given a sequence a_1, a_2, ..., a_n consisting of n pairwise distinct positive integers.
  
  Find \left⌊ \frac n 2 \right⌋ different pairs of integers x and y such that: 
  
    * x ≠ y; 
    * x and y appear in a; 
    * x~mod~y doesn't appear in a. 
  
  
  
  Note that some x or y can belong to multiple pairs.
  
  ⌊ x ⌋ denotes the floor function — the largest integer less than or equal to x. x~mod~y denotes the remainder from dividing x by y.
  
  If there are multiple solutions, print any of them. It can be shown that at least one solution always exists.
  
  Input
  
  The first line contains a single integer t (1 ≤ t ≤ 10^4) — the number of testcases.
  
  The first line of each testcase contains a single integer n (2 ≤ n ≤ 2 ⋅ 10^5) — the length of the sequence.
  
  The second line of each testcase contains n integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ 10^6).
  
  All numbers in the sequence are pairwise distinct. The sum of n over all testcases doesn't exceed 2 ⋅ 10^5.
  
  Output
  
  The answer for each testcase should contain \left⌊ \frac n 2 \right⌋ different pairs of integers x and y such that x ≠ y, x and y appear in a and x~mod~y doesn't appear in a. Print the pairs one after another.
  
  You can print the pairs in any order. However, the order of numbers in the pair should be exactly such that the first number is x and the second number is y. All pairs should be pairwise distinct.
  
  If there are multiple solutions, print any of them.
  
  Example
  
  Input
  
  
  4
  2
  1 4
  4
  2 8 3 4
  5
  3 8 5 9 7
  6
  2 7 5 3 4 8
  
  
  Output
  
  
  4 1
  8 2
  8 4
  9 5
  7 5
  8 7
  4 3
  5 2
  
  Note
  
  In the first testcase there are only two pairs: (1, 4) and (4, 1). \left⌊ \frac 2 2 \right⌋=1, so we have to find one pair. 1~mod~4=1, and 1 appears in a, so that pair is invalid. Thus, the only possible answer is a pair (4, 1).
  
  In the second testcase, we chose pairs 8~mod~2=0 and 8~mod~4=0. 0 doesn't appear in a, so that answer is valid. There are multiple possible answers for that testcase.
  
  In the third testcase, the chosen pairs are 9~mod~5=4 and 7~mod~5=2. Neither 4, nor 2, appears in a, so that answer is valid.
solution: import java.util.*;
  import java.io.*;
  import java.math.*;
  
  public class Main {
      private static boolean arr[] = sieve(1000001);
      private static ArrayList<Long> primes = new ArrayList<>();
      private static int freq[] = new int[200005];
      private static int mod = (int) (1e9 + 7);
      private static final int IMAX = 2147483647;
      private static final int IMIN = -2147483648;
      private static final long LMAX = 9223372036854775807L;
      private static final long LMIN = -9223372036854775808L;
      private static FastScanner c;
      private static PrintWriter pw;
  
      private static class FastScanner {
          BufferedReader br;
          StringTokenizer st;
  
          public FastScanner() throws FileNotFoundException {
  
              if (System.getProperty("os.name").equals("Mac OS X")) {
                  // Input is a file
                  br = new BufferedReader(new FileReader("input.txt"));
  
                  // PrintWriter class prints formatted representations
                  // of objects to a text-output stream.
                  PrintStream pw = new PrintStream(new FileOutputStream("output.txt"));
                  System.setOut(pw);
              } else {
                  // Input is System.in
                  br = new BufferedReader(new InputStreamReader(System.in), 32768);
                  st = null;
              }
  
          }
  
          String next() {
              while (st == null || !st.hasMoreElements()) {
                  try {
                      st = new StringTokenizer(br.readLine());
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
              return st.nextToken();
          }
  
          int i() {
              return Integer.parseInt(next());
          }
  
          int[] intArray(int n) {
              int[] ret = new int[n];
              for (int i = 0; i < n; i++)
                  ret[i] = i();
              return ret;
          }
  
          ArrayList<Integer> intList(int n) {
              ArrayList<Integer> al = new ArrayList<>();
              for (int i = 0; i < n; i++)
                  al.add(i());
              return al;
          }
  
          long l() {
              return Long.parseLong(next());
          }
  
          long[] longArray(int n) {
              long[] ret = new long[n];
              for (int i = 0; i < n; i++)
                  ret[i] = l();
              return ret;
          }
  
          ArrayList<Long> longList(int n) {
              ArrayList<Long> al = new ArrayList<>();
              for (int i = 0; i < n; i++)
                  al.add(l());
              return al;
          }
  
          double d() {
              return Double.parseDouble(next());
          }
  
          String nextLine() {
              String str = "";
              try {
                  str = br.readLine();
              } catch (IOException e) {
                  e.printStackTrace();
              }
              return str;
          }
      }
  
      // **********************************Code Begins From
      // Here***************************************
      public static void solve() {
          int n = c.i(), a[] = c.intArray(n), min = IMAX, k = n / 2;
          for (int e : a)
              min = min(min, e);
          for (int i = 0; k > 0; i++)
              if (a[n - 1 - i] != min) {
                  pn(a[n - 1 - i] + " " + min);
                  k--;
              }
      }
  
      public static void main(String[] args) throws FileNotFoundException {
          // Scanner sc = new Scanner(System.in);
          c = new FastScanner();
          pw = new PrintWriter(System.out);
  
          int tc = 1;
          tc = c.i();
          long start = System.currentTimeMillis();
          for (int t = 0; t < tc; t++) {
              // p("Case #" + (t + 1) + ": ");
              solve();
          }
          long end = System.currentTimeMillis();
          if (System.getProperty("os.name").equals("Mac OS X")) {
              pn("The Program takes " + (end - start) + "ms");
          }
          // for (long i = 0; i < arr.length; i++) {
          // if (arr[(int) i]) {
          // primes.add(i);
          // }
          // }
          pw.close();
      }
  
      // ArrayList<Integer> al = new ArrayList<>();
      // Set<Integer> set = new TreeSet<>();
      // Pair<Integer, Integer> pair;
      // Map<Integer, Integer> map = new HashMap<>();
      // for(Map.Entry<Integer,Integer> e:map.entrySet())pn(e.getKey()+"
      // "+e.getValue());
      // map.put(key,map.getOrDefault(key,0)+1);
      // LinkedList<Integer> ll = new LinkedList<>();
  
      // math util
      private static int cei(double d) {
          return (int) Math.ceil(d);
      }
  
      private static int gcd(int a, int b) {
          return b == 0 ? a : gcd(b, a % b);
      }
  
      private static long gcd(long a, long b) {
          return b == 0 ? a : gcd(b, a % b);
      }
  
      private static int abs(int a, int b) {
          return (int) Math.abs(a - b);
      }
  
      private static int abs(int a) {
          return (int) Math.abs(a);
      }
  
      private static long abs(long a) {
          return (long) Math.abs(a);
      }
  
      private static long abs(long a, long b) {
          return (long) Math.abs(a - b);
      }
  
      private static int max(int a, int b) {
          if (a > b) {
              return a;
          } else {
              return b;
          }
      }
  
      private static int min(int a, int b) {
          if (a > b) {
              return b;
          } else {
              return a;
          }
      }
  
      private static long max(long a, long b) {
          if (a > b) {
              return a;
          } else {
              return b;
          }
      }
  
      private static long min(long a, long b) {
          if (a > b) {
              return b;
          } else {
              return a;
          }
      }
  
      private static int pow(int base, int exp) {
          int result = 1;
          while (exp != 0) {
              if ((exp & 1) == 1)
                  result *= base;
              exp >>= 1;
              base *= base;
          }
          return result;
      }
  
      // array util
      private static void sortList(ArrayList<Integer> al) {
          Collections.sort(al);
      }
  
      private static void sort(int[] a) {
          Arrays.parallelSort(a);
      }
  
      private static void sort(long[] a) {
          Arrays.parallelSort(a);
      }
  
      private static int[] copy(int[] a) {
          int[] ans = new int[a.length];
          for (int i = 0; i < a.length; ++i)
              ans[i] = a[i];
          return ans;
      }
  
      private static char[] copy(char[] a) {
          char[] ans = new char[a.length];
          for (int i = 0; i < a.length; ++i)
              ans[i] = a[i];
          return ans;
      }
  
      private static long[] copy(long[] a) {
          long[] ans = new long[a.length];
          for (int i = 0; i < a.length; ++i)
              ans[i] = a[i];
          return ans;
      }
      // output
  
      private static void pn(Object o) {
          pw.println(o);
      }
  
      private static void p(Object o) {
          pw.print(o);
      }
  
      private static void pry() {
          pn("Yes");
      }
  
      private static void pY() {
          pn("YES");
      }
  
      private static void prn() {
          pn("No");
      }
  
      private static void pN() {
          pn("NO");
      }
  
      private static void flush() {
          pw.flush();
      }
  
      private static void watch(int[] a) {
          for (int e : a)
              p(e + " ");
          pn("");
      }
  
      private static void watch(long[] a) {
          for (long e : a)
              p(e + " ");
          pn("");
      }
  
      private static void watchList(ArrayList<Integer> al) {
          for (int e : al)
              p(e + " ");
          pn("");
      }
  
      private static Set<Integer> putSet(int[] a) {
          Set<Integer> set = new TreeSet<>();
          for (int e : a)
              set.add(e);
          return set;
      }
  
      private static boolean[] sieve(int n) {
          boolean[] isPrime = new boolean[n + 1];
          Arrays.fill(isPrime, true);
          isPrime[0] = false;
          isPrime[1] = false;
          for (int i = 2; i * i <= n; i++) {
              for (int j = i * i; j <= n; j += i) {
                  isPrime[j] = false;
              }
          }
          return isPrime;
      }
  
      private static class Pair<U, V> implements Comparable<Pair<U, V>> {
          public final U first;
          public V second;
  
          public <U, V> Pair<U, V> makePair(U first, V second) {
              return new Pair<U, V>(first, second);
          }
  
          public Pair(U first, V second) {
              this.first = first;
              this.second = second;
          }
  
          @Override
          public boolean equals(Object o) {
              if (this == o) {
                  return true;
              }
              if (o == null || getClass() != o.getClass()) {
                  return false;
              }
  
              Pair pair = (Pair) o;
  
              return !(first != null ? !first.equals(pair.first) : pair.first != null)
                      && !(second != null ? !second.equals(pair.second) : pair.second != null);
          }
  
          @Override
          public int hashCode() {
              int result = first != null ? first.hashCode() : 0;
              result = 31 * result + (second != null ? second.hashCode() : 0);
              return result;
          }
  
          public Pair<V, U> swap() {
              return makePair(second, first);
          }
  
          @Override
          public String toString() {
              return "(" + first + "," + second + ")";
          }
  
          @SuppressWarnings({ "unchecked" })
          public int compareTo(Pair<U, V> o) {
              int value = ((Comparable<U>) first).compareTo(o.first);
              if (value != 0) {
                  return value;
              }
              return ((Comparable<V>) second).compareTo(o.second);
          }
      }
  
  }