#include <bits/stdc++.h>
using namespace std;
inline int max(int a, int b) { return a > b ? a : b; }
inline int min(int a, int b) { return a < b ? a : b; }
inline int gcd(int a, int b) {
  if (a % b)
    return gcd(b, a % b);
  else
    return b;
}
inline int lcm(int a, int b) { return (a * (b / gcd(a, b))); }
inline int And(int mask, int bit) { return mask & (1 << bit); }
inline int Or(int mask, int bit) { return mask | (1 << bit); }
inline int Xor(int mask, int bit) { return mask & (~(1 << bit)); }
int n, l, r;
vector<int> ans[100100];
int main() {
  scanf("%d", &n);
  l = 1;
  r = n * n;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n / 2; j++) {
      ans[i].push_back(l);
      ans[i].push_back(r);
      l++;
      r--;
    }
  }
  for (int i = 1; i <= n; i++) sort(ans[i].begin(), ans[i].end());
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < (int)ans[i].size(); j++) {
      if (j) printf(" ");
      printf("%d", ans[i][j]);
    }
    puts("");
  }
  return 0;
}
