#include<iostream>
#include<cstring>
#include <iomanip>

using namespace std;
void init(int  matrix[11][11])
{
	int i,j;
	for(i = 0; i < 11;i ++)
	{
		for(j = 0; j < 11; j ++)
		{
			matrix[i][j] = 0;
		}
	}
}

bool OnBoundary(int i,int j,int caseNum)
{
	//if(i == 0 || i == caseNum - 1 || j == 0 || j == caseNum - 1)
	if((i == 0 && j >= 0 && j <= caseNum - 1) || (i == caseNum - 1 && j >= 0 && j <= caseNum - 1)
		|| (j == 0 && i >= 0 && i <= caseNum - 1) || (j == caseNum - 1 && i >= 0 && i <= caseNum - 1))
	{
		return true;
	}
	else
	{
		return false;
	}
}
bool OutBoundary(int i,int j,int caseNum)
{
	if(i <  0 || i > caseNum - 1 || j < 0 || j > caseNum - 1)
	{
		return true;
	}
	else
	{
		return false;
	}
}


int main()
{	
	int caseNum;
	int n = 0;
	while(cin>>caseNum)
	{
		if(caseNum == 0) break;
		
		else
		{	n ++;
			int i;
			int j;
			int matrix[11][11];

			init(matrix);

			int lit = (caseNum - 1) + (caseNum - 1);

			int seed = 1;
			bool up = true;
		
			for(i = 0,j =0;i + j <= lit; )
			{
				matrix[i][j] = seed;
			
				seed ++;
				// find next
				if(up == true )
				{
					if(OutBoundary(i - 1,j + 1,caseNum) == true)
					{
						if(OnBoundary(i,j + 1,caseNum) == true)
						{
							i = i ;
							j = j + 1;
						}
						else
						{
							i = i + 1;
							j = j;
						}
						up = false;
					}
					else
					{
						i = i - 1;
						j = j + 1;
					}
				}
				else if(up == false  )
				{
					if(OutBoundary(i + 1,j - 1,caseNum) == true)
					{
						if(OnBoundary(i + 1,j ,caseNum) == true)
						{
							i = i + 1 ;
							j = j ;
						}
						else
						{
							i = i ;
							j = j + 1;
						}
						up = true;
					}
					else
					{
						i = i + 1;
						j = j - 1;
					}
				}
			}
			// output
			cout<<"Case "<<n<<":"<<endl;
			for(i = 0; i < caseNum ; i ++)
			{
				for(j = 0; j < caseNum; j ++)
				{
					cout.setf(ios::right);
					cout<<setw(3)<<matrix[i][j]<<" ";
				}
				cout<<endl;
			}
			
			// output
		}

	}
	return 0;


}