#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;

struct node
{
	int l,r;
	int x,y;
	int v;
};
int cc;
int num[400];
node a[400];
vector <char> map[500];

void insert(int x,int v)
{
	if(v>a[x].v)
	{
		if(a[x].r!=-1)
		{
			insert(a[x].r,v);
			return;
		}
		a[x].r=cc;
		a[cc].v=v;
		a[cc].x=a[cc].y=0;
		cc++;
		return;
	}
	if(v<a[x].v)
	{
		if(a[x].l!=-1)
		{
			insert(a[x].l,v);
			return;
		}
		a[x].l=cc;
		a[cc].v=v;
		a[cc].x=a[cc].y=0;
		cc++;
		return;
	}
}


bool mark[400];


node gao(int x)
{
	if(mark[x])
		return a[x];
	mark[x]=true;
	if(a[x].l!=-1)
		a[x].x+=gao(a[x].l).x+gao(a[x].l).y+1;
	if(a[x].r!=-1)
		a[x].y+=gao(a[x].r).x+gao(a[x].r).y+1;
	return a[x];
}

void print(int x,int i,int father)
{
	cout<<x<<" "<<i<<" "<<father<<endl;
	
	int k,R,L;
	if(father!=x)
	{
		for(k=0;k<map[father].size()-a[x].y-map[x].size()-a[x].x;k++)
			map[x].push_back(' ');

	}
	if(a[x].l==-1&&a[x].r==-1)
	{
		map[i].push_back('o');
		return;
	}

	if(a[x].l!=-1)
	{
		L=a[x].x-a[a[x].l].x;
		for(k=0;k<a[a[x].l].x;k++)
		{
			map[i].push_back(' ');
			map[i+1].push_back(' ');
		}
		map[i].push_back('+');
		map[i+1].push_back('|');
		for(k=0-L+1;k<0;k++)
		{
			map[i].push_back('-');
			map[i+1].push_back(' ');
		}
		print(a[x].l,i+2,x);
	}

	map[i].push_back('o');
	map[i+1].push_back(' ');

	if(a[x].r!=-1)
	{
		R=a[x].y-a[a[x].r].y;
		
		for(k=0+R-1;k>0;k--)
		{
			map[i].push_back('-');
			map[i+1].push_back(' ');
		}
		map[i].push_back('+');
		map[i+1].push_back('|');

		print(a[x].r,i+2,x);
	}

}

int main()
{

	int repeat,i,j,n,S,T,N;
	int cases=1;
	cin>>repeat;
	while(repeat--)
	{
		for(i=0;i<500;i++)
			map[i].clear();
		cin>>n;
		for(i=0;i<n;i++)
		{
			cin>>num[i];
		}

		for(i=0;i<400;i++)
		{
			a[i].v=a[i].x=a[i].y=-1;
			a[i].l=a[i].r=-1;
		}
		a[0].v=num[0];
		a[0].x=0;
		a[0].y=0;
		cc=1;
		for(i=1;i<n;i++)
			insert(0,num[i]);

		memset(mark,0,sizeof(mark));
		gao(0);


		

	//	for(i=0;i<n;i++)
//			cout<<a[i].v<<" "<<a[i].l<<" "<<a[i].r<<" "<<a[i].x<<" "<<a[i].y<<endl;
		print(0,0,0);


		printf("Case #%d:\n",cases++);
		for(i=0;i<500;i++)
		{
			if(map[i].size()==0)
				break;
			for(j=0;j<map[i].size();j++)
				putchar(map[i][j]);
			putchar('\n');
		}



	

		
	}
	return 0;
}
