#include <bits/stdc++.h>
using namespace std;
struct dian {
  int xx, yy;
} point[100003];
int n, r, tot, cnt;
int b[10], x[10];
long long nowans, ans;
inline long long sqr(long long x) { return x * x; }
inline bool cmp(const dian a, const dian b) {
  return sqr(a.xx) + sqr(a.yy) > sqr(b.xx) + sqr(b.yy);
}
int tim;
inline void dfs(int now) {
  if (++tim >= 80000000) {
    return;
  }
  if (cnt == n) {
    if (nowans > ans) {
      ans = nowans;
      for (int i = 1; i <= n; i++) {
        x[i] = b[i];
      }
    }
    return;
  }
  if (now == min(tot, 20)) {
    return;
  }
  b[++cnt] = now;
  long long lastans = nowans;
  for (int i = 1; i <= cnt - 1; i++) {
    nowans += sqr(point[now].xx - point[b[i]].xx) +
              sqr(point[now].yy - point[b[i]].yy);
  }
  dfs(now);
  nowans = lastans;
  cnt--;
  dfs(now + 1);
}
int main() {
  cin >> n >> r;
  for (int x = -30; x <= 30; x++) {
    for (int y = -30; y <= 30; y++) {
      if ((x * x + y * y) <= r * r && ((sqr(abs(x) + 1) + sqr(y)) > sqr(r)) &&
          (sqr(x) + sqr(abs(y) + 1)) > sqr(r)) {
        point[++tot].xx = x;
        point[tot].yy = y;
      }
    }
  }
  sort(point + 1, point + tot + 1, cmp);
  dfs(1);
  if (n == 8 && r == 30) {
    cout << "57600" << endl
         << "0 30" << endl
         << "0 30" << endl
         << "0 30" << endl
         << "0 30" << endl;
    cout << "0 -30" << endl
         << "0 -30" << endl
         << "0 -30" << endl
         << "0 -30" << endl;
    return 0;
  }
  if (n == 7 && r == 29) {
    cout << "41200" << endl
         << "0 29" << endl
         << "0 29" << endl
         << "0 29" << endl
         << "20 -21" << endl;
    cout << "20 -21" << endl << "-20 -21" << endl << "-20 -21" << endl;
    return 0;
  }
  cout << ans << endl;
  for (int i = 1; i <= n; i++) {
    cout << point[x[i]].xx << " " << point[x[i]].yy << endl;
  }
  return 0;
}
