#include <bits/stdc++.h>
using namespace std;
int cuad(int x) { return x * x; }
int n, r;
int valido[100][100];
vector<pair<int, int> > border;
int border2;
int sol = -1;
int xsol[8], ysol[8];
int x[8], y[8];
int casos = 0;
void genera(int ipunt, int iborder, int acum, int sx, int sx2, int sy,
            int sy2) {
  if (ipunt == n) {
    if (acum > sol) {
      sol = acum;
      for (int i = 0; i < n; i++) {
        xsol[i] = x[i];
        ysol[i] = y[i];
      }
    }
    return;
  }
  if (iborder == int(border.size())) return;
  if (n == 7 and ipunt <= 3 and iborder > border2) return;
  genera(ipunt, iborder + 1, acum, sx, sx2, sy, sy2);
  x[ipunt] = border[iborder].first;
  y[ipunt] = border[iborder].second;
  genera(ipunt + 1, iborder,
         acum + sx2 + ipunt * cuad(x[ipunt]) - 2 * x[ipunt] * sx + sy2 +
             ipunt * cuad(y[ipunt]) - 2 * y[ipunt] * sy,
         sx + x[ipunt], sx2 + cuad(x[ipunt]), sy + y[ipunt],
         sy2 + cuad(y[ipunt]));
}
int main() {
  cin >> n >> r;
  if (n % 2 == 0) {
    sol = 0;
    for (int i = 0; i < n; i++) {
      if (i % 2)
        xsol[i] = r;
      else
        xsol[i] = -r;
      for (int j = 0; j < i; j++)
        sol += cuad(xsol[j] - xsol[i]) + cuad(ysol[j] - ysol[i]);
    }
  } else {
    for (int i = 0; i < 100; i++)
      for (int j = 0; j < 100; j++)
        valido[i][j] = cuad(i - 50) + cuad(j - 50) <= r * r;
    for (int i = 1; i < 99; i++)
      for (int j = 1; j < 99; j++)
        if (valido[i][j] and valido[i - 1][j] + valido[i + 1][j] <= 1 and
            valido[i][j + 1] + valido[i][j - 1] <= 1 and
            valido[i - 1][j - 1] + valido[i + 1][j + 1] <= 1 and
            valido[i - 1][j + 1] + valido[i + 1][j - 1] <= 1)
          border.push_back(pair<int, int>(i - 50, j - 50));
    border2 = int(border.size()) / 2;
    genera(0, 0, 0, 0, 0, 0, 0);
  }
  cout << sol << endl;
  for (int i = 0; i < n; i++) cout << xsol[i] << " " << ysol[i] << endl;
}
