#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int n;
  long long t[25][25];
  cin >> n;
  long long aux = 1;
  for (int i = (0); i < (n); i++) {
    long long val;
    if (i % 2 == 0)
      val = 0;
    else
      val = aux / 2;
    for (int j = (0); j < (n - i); j++) {
      t[i][j] = val;
      val *= 2;
    }
    for (int dr = (1); dr < (n - i); dr++) {
      t[i + dr][n - i - 1] = val;
      val *= 2;
    }
    aux *= 2;
  }
  for (int i = (0); i < (n); i++) {
    for (int j = (0); j < (n); j++) cout << t[i][j] << ' ';
    cout << '\n';
  }
  cout << endl;
  int q;
  cin >> q;
  for (int _ = (0); _ < (q); _++) {
    long long k;
    cin >> k;
    int r = n - 1, c = n - 1;
    vector<pair<int, int> > ans;
    while (r != 0 || c != 0) {
      ans.push_back(make_pair(r, c));
      if (r == 0 || c == 0) {
        r = max(0, r - 1);
        c = max(0, c - 1);
      } else {
        if (t[r - 1][c] != 0) {
          if (k & t[r - 1][c])
            r--;
          else
            c--;
        } else {
          assert(t[r][c - 1]);
          if (k & t[r][c - 1])
            c--;
          else
            r--;
        }
      }
    }
    ans.push_back(make_pair(0, 0));
    assert(((int)ans.size()) == 2 * n - 1);
    reverse(ans.begin(), ans.end());
    for (auto it = ans.begin(); it != ans.end(); it++)
      cout << it->first + 1 << ' ' << it->second + 1 << '\n';
    cout << endl;
  }
  return 0;
}
