#include<bits/stdc++.h>
using namespace std;

#define int long long
#define f(i,b) for(int (i)=0;(i)<(b);(i)++)
#define fx(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define fr(i,a,b) for(int (i)=(a);(i)>=(b);(i)--)
#define ft(i,s) for(auto i = s.begin(); i != s.end(); i++)
#define IOS ios::sync_with_stdio(0); cin.tie(0);
#define ff first
#define ss second
#define inp(a) f(i,a.size()){cin >> a[i];}
#define pb push_back
#define mp make_pair
#define MAX 1e9
#define endl '\n'
#define setb(x) __builtin_popcountll(x)
#define msb(x) (64 - __builtin_clzll(x))
#define rb(n) (n&(-n))
#define rbm(n) (n&(n-1))
#define vi vector<int>
#define all(x) x.begin(),x.end()
#define sortd(x) sort(all(x),greater<int>());
#define sorta(x) sort(all(x));
#define mid (l+(r-l)/2)

void yn(bool truth){
    if(truth) cout << "YES" << endl;
    else cout << "NO" << endl;
}
int cl(int x, int y){
    if(x%y == 0) return x/y;
    else return x/y+1;
}
void pri(vi& x){
    f(i,x.size()){
        if(i < x.size()-1)
            cout << x[i] << ".";
        else
            cout << x[i];
    }
    cout << endl;
}
//cout.precision(17);

void solve(){
    //write code here
    // 1
    // 1.1
    // 1.2
    // 1.3
    // 1.3.1
    // 1.3.2
    // 2
    int n;
    cin >> n;
    vi a(n), ans;
    f(i,n){
        cin >> a[i];
        if(a[i] == 1){
            ans.pb(a[i]);
        }
        else{
            int u = a[i-1];
            if(a[i-1] == a[i] - 1){
                ans.pop_back();
                ans.pb(a[i]);
            }
            else{
                fr(j, ans.size()-1, 0){
                    if(ans[j] != a[i] - 1){
                        ans.pop_back();
                        continue;
                    }
                    ans[j] = a[i];
                    break;
                }
            }
        }
        pri(ans);
    }
}

signed main() {
    IOS
    int t;
    cin >> t;
    //spff();
    //sieve();
    //cntprimN();
    while(t--)
        solve();
	return 0;
}
