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

typedef long long int       lli;
typedef long double         ld;
typedef vector<lli>         vi;
typedef vector<vi>          vvi;
typedef pair<lli, lli>      pii;
typedef map<lli, lli>       mii;

#define endl                "\n"
#define pb                  push_back
#define mp                  make_pair
#define fastio              ios_base::sync_with_stdio(0);    cin.tie(0);     cout.tie(0);
#define test(t)             lli t; cin>>t; while(t--)
#define gtest(t)            lli T;cin>>T;for(lli t=1;t<=T;t++)
#define gout                cout<<"Case #"<<t<<": "
#define mod                 1000000007
#define mod2                998244353
#define F                   first
#define S                   second
#define pi                  acos(-1)

void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}

template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}

#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif

vector<bool> prime;
vi inv;

void primes(lli n){
    prime.resize(n+1);
    prime.assign(n+1,true);
    prime[0]=0;
    prime[1]=0;
    for(lli i=2 ; (i*i) <=n ; i++){
        if(prime[i]){
            for( lli j = (i*i) ; j<n ; j+=i){
                prime[j]=false;
            }
        }
    }
}

lli powm(lli a, lli n, lli m=mod){
    a%=m;
    if(n==0)    return 1;
    if(n==1)    return a;
    lli u=powm(a,n/2,m);
    u= (u*u)%m;
    if(n%2) u=(u*a)%m;
    return u;
}

lli pown(lli a, lli n){
    if(n==0)    return 1;
    if(n==1)    return a;
    lli u=pown(a,n/2);
    u=(u*u);
    if(n%2) u=u*a;
    return u;
}

lli gcd(lli a, lli b, lli &x, lli &y){
    lli g=0;
    if(a && b){
        g = gcd(b%a, a, x, y);
        lli t1=x, t2=y;
        x=t2-(b/a)*t1;
        y=t1;
    }
    else if(b){
        g=b;    x=0;    y=1;
    }
    else{
        g=a;    x=0;    y=1;
    }
    return g;
}

lli gcd(lli a, lli b){
    if(a && b)   return gcd(b, a%b);
    if(a)   return a;
    return b;
}

lli gcd(vi a){
    lli g=a[0];
    for(lli i=1;i<a.size();i++){
        g=gcd(g,a[i]);
    }
    return g;
}

lli modinv(lli a, lli m=mod){
    lli x, y, g;
    g=gcd(a, m, x, y);
    return ((x%m)+m)%m;
}

lli lcm(lli a, lli b){
    return a*b/gcd(a,b);
}

lli ncr(lli n, lli r, lli m=mod){
    if(n<r) return 0;
    if(n==r || r==0)    return 1;
    if(r==1)    return n;
    if(n-r<r)   return ncr(n,n-r,m);
    lli a=1;
    for(lli i=0;i<r;i++){
        a*=(n-i);
        a/=(i+1);
    }
    return a;
}

/****************/
int main(){
    fastio;
    test(t){
        lli n;
        cin>>n;
        vi a(n);
        for(lli i=0;i<n;i++){
            cin>>a[i];
        }
        vi lvl(1e3, 0);
        lli lno=-1;
        for(lli i=0;i<n;i++){
            if(a[i]==1){
                lno++;
                lvl[lno]=1;
            }
            else{
                while(a[i]!=lvl[lno]+1){
                    lno--;
                }
                lvl[lno]++;
            }
            cout<<lvl[0];
            for(lli j=1;j<=lno;j++){
                cout<<"."<<lvl[j];
            }
            cout<<endl;
        }
    }
}