#include <vector>
#include <cstdlib>
#include <iostream>
using namespace std;
class matrix
{
public:
  matrix(int);
  void add();
  void push();
  void index(int, int &, int &);
  void next(int, int, int &, int &);
  friend ostream & operator<<(ostream &, matrix &);
private:
  int n,p,q,id;
  vector<vector<int> > array;
};
int main(int argc, char * argv[])
{
   int t;
   if ( argc < 2 )
        t=10;
   else
        t=atoi(argv[1]);
   matrix rectangle(t);
   rectangle.add();
   rectangle.push();
   cout<<rectangle;
   return 0;
}
matrix::matrix(int k):p(0),q(-1),id(0),n(k){}
void matrix::index(int line, int & row, int & col)
{
   if ( line%2 )
        ++row;
   else
        ++col;
}
void matrix::next(int num, int line, int & row, int & col)
{
   if ( num+1 != line )
   {
        ++row;
        --col;
   }
}
void matrix::add()
{
   vector<int> v;
   for(int i=0; i!=n; ++i)
   {
       array.push_back(v);
       array[i].assign(n,0);
   }
}
void matrix::push()
{
   for(int i=1; i!=2*n; ++i)
   {
       if ( i <= n )
            index(i,q,p);
       else
            index(i,p,q);
       int j=(i > n)?2*n-i:i;
       for(int k=0; k!=j; ++k)
       {
          array[p][q]=++id;
          if ( i%2 )
               next(k,j,p,q);
          else
               next(k,j,q,p);
       }
   }
}
      
ostream & operator<<(ostream & os, matrix & m)
{
   for(int i=0; i!=m.n; ++i)
   {
       for(int j=0; j!=m.n; ++j)
       {
           os<<m.array[i][j]<<"\t";
           if ( (j+1)%m.n == 0 )
                os<<endl;
       }
   }
   return os;
}