/*
7-9 冒泡法排序之过程
分数 10
作者 颜晖
单位 浙大城市学院
本题要求使用冒泡法排序，将给定的n个整数从小到大排序后输出，并输出排序过程中每一步的中间结果。

冒泡排序的算法步骤描述如下：

第1步：在未排序的n个数（a[0]〜 a[n−1]）中，从a[0]起，依次比较相邻的两个数，若邻接元素不符合次序要求，则对它们进行交换。本次操作后，数组中的最大元素“冒泡”到a[n−1]；

第2步：在剩下未排序的n−1个数（a[0] 〜 a[n−2]）中，从a[0]起，依次比较相邻的两个数，若邻接元素不符合次序要求，则对它们进行交换。本次操作后，a[0] 〜 a[n−2]中的最大元素“冒泡”到a[n−2]；

……

第i步：在剩下未排序的n−k个数（a[0]〜a[n−i]）中，从a[0]起，依次比较相邻的两个数，若邻接元素不符合次序要求，则对它们进行交换。本次操作后，a[0] 〜 a[n−i]中的最大元素“冒泡”到a[n−i]；

……

第n−1步：在剩下未排序的2个数（a[0] 〜a[1]）中，比较这两个数，若不符合次序要求，则对它们进行交换。本次操作后，a[0] 〜 a[1]中的最大元素“冒泡”到a[1]。

输入格式：
输入第一行给出一个不超过10的正整数n。第二行给出n个整数，其间以空格分隔。

输出格式：
在每一行中输出排序过程中对应步骤的中间结果，即每一步后a[0]〜 a[n−1]的值，相邻数字间有一个空格，行末不得有多余空格。

输入样例：
5
8 7 6 0 1
输出样例：
7 6 0 1 8
6 0 1 7 8
0 1 6 7 8
0 1 6 7 8
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
*/

#include <stdio.h>
int main()
{
	int n, i, j, k;
	scanf("%d", &n);
	int a[n];
	for (i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	}
	if (n == 1)
		printf("%d", a[0]);
	for (i = 0; i < n - 1; i++)
	{
		for (j = 0; j < n - i - 1; j++)
		{
			if (a[j] > a[j + 1])
			{
				int t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}
		printf("%d", a[0]);
		for (k = 1; k < n; k++)
		{
			printf(" %d", a[k]);
		}
		printf("\n");
	}
	return 0;
}