#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define endl "\n"
#define mod 1000000007
#define vec vector <ll>
#define vecp vector <pair<ll,ll>>
#define mp make_pair
#define A first
#define B second
#define PattSee ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define all(v) v.begin(),v.end()
#define mpl map<ll,ll>
#define umpl unordered_map<ll,ll>
#define fo(i,a,b) for(i=a; i<b; i++)
using namespace std;

// void merge(ll a[], ll l, ll mid, ll r)
//   {
//       ll i,n1 = mid-l+1;
//       ll n2 = r-mid;
//       sort(a+l,mid),sort(a+mid+1,r);
//       // ll t1[n1],  t2[n2];
//       // for(i=0; i<n1; i++)
//       // {
//       //     t1[i]=a[l+i];
//       // }
//       // for(i=0; i<n2; i++)
//       // {
//       //     t2[i]=a[mid+1+i];
//       // }
//       i = l;
//       ll k = l, j = mid;
//       while(i<=mid && j<=r)
//       {
//           if(a[i]<=a[j])
//           {
//               a[k]=a[i];
//               k++,i++;
//           }
//           else{
//             //   c++;
//               a[k]=a[j];
//               k++,j++;
//               c+=(n1-i);
//           }
//     }
//     while(i<n1)
//     {
//         a[k]=t1[i];
//         i++,k++;
//     }
//     while(j<n2)
//     {
//         //   c++;
//         a[k]=t2[j];
//         j++,k++;
//     }
// }

// ll pow(ll x, ll n)
// {
//     ll res = 1;
//     while(n)
//     {
//         if(n%2==1)
//             res*=x;
//         x*=x;
//         n/=2;
//     }
//     return res;
// }

void printString(stack<ll> st)
{
    vec v;
    while(st.size())
    {
        v.pb(st.top());
        st.pop();
    }
    for(ll i =v.size()-1; i>=0; i--)
    {
        if(i==0)
            cout<<v[i]<<endl;
        else
            cout<<v[i]<<".";
    }
}

void solve()
{
    ll i,j,flag = 0; 
    // Write your code here
    ll n;
    cin>>n;
    ll a[n];
    fo(i,0,n)
    cin>>a[i];
    stack <ll> st;
    string s;
    fo(i,0,n)
    {
        if(st.size()==0){
            st.push(a[i]);
            cout<<a[i]<<endl;
            continue;
        }
        if(a[i]==1){
            st.push(a[i]);
            s+="1";
            printString(st);
        }
        else
        {
            while(st.top()!=a[i]-1 && st.size())
            {
                st.pop();
            }
            if(st.size()>0){
                st.pop();
            }
            st.push(a[i]);
            printString(st);
        }
    }
}

int main()  
{
    PattSee
    ll t=1;
    cin>>t;
    for(int i= 1; i<=t; i++)
    {
        solve();
    }
    return 0;
}

/*
1
4
1
1
2
3

9
1 1 1 2 2 1 2 1 2
1
1.1
1.1.1
1.1.2
2
2.1
2.2
2.2.1
2.2.2

*/ 
