//对递归还是不熟悉啊,搞了很久,有点受不了自己了
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#include<math.h>
int n,vis[100];
char ss[100],tt[100];
void link(int x,int y,int c)
{
int i;
for(i=c;i>=x;i--)
tt[i+1]=tt[i];
tt[x]=ss[y];
}
void home(int x,int y,int c)
{
int i;
for(i=x;i<c;i++)
tt[i]=tt[i+1];
}
void dfs(int x,int y)//x用来标志已经添加元素的最大坐标,输出y个前导空格
{
int i,j,ok=1;
if(x==n-1)//输出排序后的序列
{
for(i=0;i<x+4;i++)
printf(" ");
printf("writeln(");
for(i=0;i<n;i++)
{
printf("%c",tt[i]);
if(i!=n-1) printf(",");
}
printf(")\n");
return ;
}
for(i=x;i>=0;i--)
{
if(ok)//输出了else时if不输出前导空格
for(j=0;j<y;j++)
printf(" ");
ok=1;
printf("if %c < %c then\n",tt[i],ss[x+1]);
link(i+1,x+1,x+1);//插入元素
dfs(x+1,y+2);
home(i+1,x+1,x+1);//移除元素
for(j=0;j<y;j++)
printf(" ");
if(i!=0) printf("else ");
else if(i==0)//最后的else列外,要换行
{
printf("else\n");
link(i,x+1,x+1);
dfs(x+1,y+2);
home(i,x+1,x+1);
}
ok=0;
}
}
main()
{
int i,j,k,t,num,count;
char s[100];
scanf("%d",&t);
while(t--)
{
count=num=0;
printf("program sort(input,output);\nvar\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
s[num++]=i+'a';
ss[count++]=i+'a';
if(i!=n-1)s[num++]=',';
}
ss[count]=s[num]='\0';
printf("%s",s);
printf(" : integer;\nbegin\n readln(%s);\n",s);
tt[0]=ss[0];
dfs(0,2);
printf("end.\n");
if(t!=0)printf("\n");
}
return 0;
}