source_code: 
  import java.io.ByteArrayInputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.PrintWriter;
  import java.util.Arrays;
  import java.util.InputMismatchException;
  import java.util.Stack;
  
  public class C {
  	private static PrintWriter out = new PrintWriter(System.out);
  
  	public static void solve() {
  		In in = new In();
  		int tests = in.ni();
  		while (tests-- > 0) {
  			int n = in.ni();
  			int[] a = in.nia(n);
  			Stack<Integer> st = new Stack<>();
  			StringBuilder sb = new StringBuilder();
  			for (int num : a) {
  //				System.out.println("Checking " + num);
  				if (st.isEmpty()) {
  					st.push(num);
  					sb.append(num);
  				} else {
  					// increment current level
  					if (num == st.peek() + 1) {
  						st.pop();
  						st.push(num);
  
  						while (sb.length() > 0 && sb.charAt(sb.length() - 1) != '.') {
  							sb.deleteCharAt(sb.length() - 1);
  						}
  						sb.append(num);
  					} 
  					// expand current level by 1
  					else if (num == 1) {
  						st.push(num);
  						sb.append(".");
  						sb.append(num);
  					} 
  					// increment higher level
  					else {
  						// search which higher level is the previous of the current number
  						while (!st.isEmpty() && st.peek() + 1 != num) {
  							st.pop();
  							while (sb.length() > 0 && sb.charAt(sb.length() - 1) != '.') {
  								sb.deleteCharAt(sb.length() - 1);
  							}
  							if (sb.length() > 0)
  								sb.deleteCharAt(sb.length() - 1);
  						}
  						
  //						System.out.println(" " + st.toString() + " " + sb.toString());
  						if (!st.isEmpty() && st.peek() + 1 == num) {
  							st.pop();
  							st.add(num);
  							while (sb.length() > 0 && sb.charAt(sb.length() - 1) != '.') {
  								sb.deleteCharAt(sb.length() - 1);
  							}
  							sb.append(num);
  						}
  					}
  				}
  //				System.out.println(">>" + st.toString());
  				out.println(sb);
  			}
  		}
  	}
  
  	public static void main(String[] args) throws IOException {
  		// long start = System.nanoTime();
  		solve();
  		// System.out.println("Elapsed: " + (System.nanoTime() - start) / 1000000 +
  		// "ns");
  		out.flush();
  	}
  
  	@SuppressWarnings("unused")
  	private static class In {
  		final private static int BUFFER_SIZE = 1024;
  		private byte[] buf;
  		private InputStream is;
  		private int buflen;
  		private int bufptr;
  
  		public In() {
  			is = System.in;
  			buf = new byte[BUFFER_SIZE];
  			buflen = bufptr = 0;
  		}
  
  		public In(String input) {
  			is = new ByteArrayInputStream(input.getBytes());
  			buf = new byte[BUFFER_SIZE];
  			buflen = bufptr = 0;
  		}
  
  		public int readByte() {
  			if (bufptr >= buflen) {
  				try {
  					buflen = is.read(buf);
  				} catch (IOException ioe) {
  					throw new InputMismatchException();
  				}
  				bufptr = 0;
  			}
  			if (buflen <= 0)
  				return -1;
  			return buf[bufptr++];
  		}
  
  		public boolean isSpaceChar(int c) {
  			return !(c >= 33 && c <= 126);
  		}
  
  		public int skip() {
  			int b;
  			while ((b = readByte()) != -1 && isSpaceChar(b))
  				;
  			return b;
  		}
  
  		/* Next character */
  		public char nc() {
  			return (char) skip();
  		}
  
  		/* Next double */
  		public double nd() {
  			return Double.parseDouble(ns());
  		}
  
  		/* Next string */
  		public String ns() {
  			final StringBuilder sb = new StringBuilder();
  			int b = skip();
  			while (!isSpaceChar(b)) {
  				sb.appendCodePoint(b);
  				b = readByte();
  			}
  			return sb.toString();
  		}
  
  		/* Next integer */
  		public int ni() {
  			boolean minus = false;
  			int num = 0;
  			int b;
  			while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'))
  				;
  			if (b == '-') {
  				minus = true;
  				b = readByte();
  			}
  			while (b >= '0' && b <= '9') {
  				num = num * 10 + (b - '0');
  				b = readByte();
  			}
  			return minus ? -num : num;
  		}
  
  		/* Next long */
  		public long nl() {
  			boolean minus = false;
  			long num = 0;
  			int b;
  			while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'))
  				;
  			if (b == '-') {
  				minus = true;
  				b = readByte();
  			}
  			while (b >= '0' && b <= '9') {
  				num = num * 10 + (b - '0');
  				b = readByte();
  			}
  			return minus ? -num : num;
  		}
  
  		/* Next integer 1D array */
  		public int[] nia(int n) {
  			final int[] arr = new int[n];
  			for (int i = 0; i < n; i++)
  				arr[i] = ni();
  			return arr;
  		}
  
  		/* Next long 1D array */
  		public long[] nla(int n) {
  			final long[] arr = new long[n];
  			for (int i = 0; i < n; i++)
  				arr[i] = nl();
  			return arr;
  		}
  
  		/* Next string 1D array */
  		public String[] nsa(int n) {
  			final String[] arr = new String[n];
  			for (int i = 0; i < n; i++)
  				arr[i] = ns();
  			return arr;
  		}
  
  		/* Next char 1D array */
  		public char[] nca(int n) {
  			final char[] arr = new char[n];
  			for (int i = 0; i < n; i++)
  				arr[i] = nc();
  			return arr;
  		}
  
  		/* Next double 1D array */
  		public double[] nda(int n) {
  			final double[] arr = new double[n];
  			for (int i = 0; i < n; i++)
  				arr[i] = nc();
  			return arr;
  		}
  
  		/* Next integer matrix */
  		public int[][] nim(int n, int m) {
  			final int[][] arr = new int[n][m];
  			for (int i = 0; i < n; i++)
  				for (int j = 0; j < m; j++)
  					arr[i][j] = ni();
  			return arr;
  		}
  
  		/* Next long matrix */
  		public long[][] nlm(int n, int m) {
  			final long[][] arr = new long[n][m];
  			for (int i = 0; i < n; i++)
  				for (int j = 0; j < m; j++)
  					arr[i][j] = nl();
  			return arr;
  		}
  
  		/* Next string matrix */
  		public String[][] nsm(int n, int m) {
  			final String[][] arr = new String[n][m];
  			for (int i = 0; i < n; i++)
  				for (int j = 0; j < m; j++)
  					arr[i][j] = ns();
  			return arr;
  		}
  
  		/* Next char matrix */
  		public char[][] ncm(int n, int m) {
  			final char[][] arr = new char[n][m];
  			for (int i = 0; i < n; i++)
  				for (int j = 0; j < m; j++)
  					arr[i][j] = nc();
  			return arr;
  		}
  
  		/* Next double matrix */
  		public double[][] ndm(int n, int m) {
  			final double[][] arr = new double[n][m];
  			for (int i = 0; i < n; i++)
  				for (int j = 0; j < m; j++)
  					arr[i][j] = nd();
  			return arr;
  		}
  
  		public static void log(Object... o) {
  			System.out.println(Arrays.deepToString(o));
  		}
  	}
  
  }
  