#include <bits/stdc++.h>
using namespace std;
const int MAXN = 9;
const int MAXL = 500;
const int MIDL = MAXL / 2 - 1;
const int INF = 1029384756;
int N, R;
int dp[MAXN][MAXL][MAXL], trace[MAXN][MAXL][MAXL];
vector<pair<int, int> > boundary;
int ansval;
vector<pair<int, int> > vans;
int dis2(int x, int y) { return x * x + y * y; }
int& gdp(int i, int j, int k) { return dp[i][MIDL + j][MIDL + k]; }
int& gtr(int i, int j, int k) { return trace[i][MIDL + j][MIDL + k]; }
void init() {
  for (int i = 0; i < MAXN; i++)
    for (int j = 0; j < MAXL; j++)
      for (int k = 0; k < MAXL; k++) dp[i][j][k] = -INF, trace[i][j][k] = -1;
  gdp(0, 0, 0) = 0;
}
void calc_boundary() {
  for (int i = -R; i <= R; i++) {
    for (int j = -R; j <= R; j++) {
      if (dis2(i, j) > R * R) continue;
      if (dis2(i - 1, j) <= R * R && dis2(i + 1, j) <= R * R) continue;
      if (dis2(i, j - 1) <= R * R && dis2(i, j + 1) <= R * R) continue;
      boundary.push_back(make_pair(i, j));
    }
  }
}
void calc() {
  for (int i = 0; i < N; i++) {
    for (int j = -MIDL; j <= MIDL; j++) {
      for (int k = -MIDL; k <= MIDL; k++) {
        if (gdp(i, j, k) == -INF) continue;
        for (int l = 0; l < (int)boundary.size(); l++) {
          pair<int, int> v = boundary[l];
          int x = v.first, y = v.second;
          int d = gdp(i, j, k) + (N - 1) * dis2(x, y) - 2 * (x * j + y * k);
          if (d > gdp(i + 1, j + x, k + y)) {
            gdp(i + 1, j + x, k + y) = d;
            gtr(i + 1, j + x, k + y) = l;
          }
        }
      }
    }
  }
  int cx = 0, cy = 0;
  for (int i = -MIDL; i <= MIDL; i++)
    for (int j = -MIDL; j <= MIDL; j++)
      if (gdp(N, i, j) > gdp(N, cx, cy)) cx = i, cy = j;
  ansval = gdp(N, cx, cy);
  for (int i = N; i > 0; i--) {
    int v = gtr(i, cx, cy);
    pair<int, int> p = boundary[v];
    vans.push_back(p);
    cx -= p.first;
    cy -= p.second;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> N >> R;
  init();
  calc_boundary();
  calc();
  cout << ansval << endl;
  for (auto v : vans) cout << v.first << " " << v.second << endl;
  return 0;
}
