#include <bits/stdc++.h>
using namespace std;
template <class T, typename A = allocator<T>>
class Vector : public vector<T, A> {
 public:
  using vector<T, A>::vector;
  Vector& operator()(size_t dummy_n) { return *this; }
};
typedef Vector<int> vi;
template <typename Int = int>
Int read() {
  Int flag = 1;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-' && c != EOF) c = getchar();
  if (c == '-') flag = -1, c = getchar();
  Int init = c & 15;
  while ((c = getchar()) >= '0' && c <= '9')
    init = (init << 3) + (init << 1) + (c & 15);
  return init * flag;
}
void read(char& a) {
  do scanf("%c", &a);
  while (isspace(a));
}
void write(const char& a) { printf("%c", a); }
char BUF[1234560];
void read(string& a) {
  scanf("%s", BUF);
  a = string(BUF);
}
void write(const string& a) { printf("%s", a.c_str()); }
inline void read(int& a) { a = read(); }
void write(const int& a) { printf("%d", a); }
void read(long long& a) { scanf("%I64d", &a); }
void write(const long long& a) { printf("%I64d", a); }
void read(double& a) { scanf("%lf", &a); }
void write(const double& a) { printf("%lf", a); }
void read(long double& a) { scanf("%Lf", &a); }
void write(const long double& a) { printf("%Lf", a); }
void read(pair<int, int>& a) { scanf("%d%d", &a.first, &a.second); }
void write(const pair<int, int>& a) { printf("%d %d", a.first, a.second); }
template <template <typename T, typename A = allocator<T>> class C, class T>
void read(C<T>& a) {
  for (auto i = a.begin(); i != a.end(); ++i) read(*i);
}
template <template <typename T, typename A = allocator<T>> class C, class T>
void write(const C<T>& a) {
  int sz = a.size();
  if (sz != 0) write(a[0]);
  for (int i = 1; i < sz; ++i) {
    write(' ');
    write(a[i]);
  }
}
template <typename T1, typename T2>
void read(T1& t1, T2& t2) {
  read(t1);
  read(t2);
}
template <typename T1, typename T2>
void write(const T1& t1, const T2& t2) {
  write(t1);
  write(' ');
  write(t2);
}
template <typename T1, typename T2, typename T3>
void read(T1& t1, T2& t2, T3& t3) {
  read(t1);
  read(t2);
  read(t3);
}
template <typename T1, typename T2, typename T3, typename T4>
void read(T1& t1, T2& t2, T3& t3, T4& t4) {
  read(t1);
  read(t2);
  read(t3);
  read(t4);
}
template <typename T1, typename T2, typename T3>
void write(const T1& t1, const T2& t2, const T3& t3) {
  write(t1);
  write(' ');
  write(t2);
  write(' ');
  write(t3);
}
template <template <typename T, typename A = allocator<T>> class C, class T>
void sort(C<T>& a) {
  sort(a.begin(), a.end());
}
template <template <typename T, typename A = allocator<T>> class C, class T>
void rsort(C<T>& a) {
  sort(a.rbegin(), a.rend());
}
template <typename T>
int sz(const T& a) {
  return int(a.size());
}
int main() {
  int n;
  read(n);
  vector<vi> fise(2);
  for (auto i = (1), j = decltype(1)(n * n); i < j; ++i, --j) {
    fise[i & 1].push_back(i);
    fise[i & 1].push_back(j);
  }
  write(fise.front()), write('\n');
  write(fise.back()), write('\n');
}
