#include <bits/stdc++.h>
using namespace std;
int dp[10][500][500], mx[50];
pair<int, int> w[10][500][500];
int main() {
  int n, r;
  scanf("%d%d", &n, &r);
  for (int i = 0; i < r + 1; i++) {
    mx[i] = -1;
    for (int j = 0; j < r + 1; j++) {
      if (i * i + j * j <= r * r) mx[i] = max(mx[i], j);
    }
  }
  memset(dp, -1, sizeof(dp));
  int ss, sx, sy, t0, d = 240, ms, x, y;
  for (int i = -r; i < r + 1; i++)
    for (int j = -mx[i]; j < mx[i] + 1; j++) {
      dp[1][i + d][j + d] = 0;
      w[1][i + d][j + d] = make_pair(i, j);
    }
  int cnt = 0;
  for (int i = 1; i < n; i++) {
    ms = r * i;
    for (int j = -ms + d; j < ms + d + 1; j++)
      for (int k = -ms + d; k < ms + d + 1; k++) {
        if (dp[i][j][k] == -1) continue;
        if (i) {
          sx = j - d;
          sy = k - d;
          ss = (dp[i][j][k] + sx * sx + sy * sy) / i;
        } else {
          sx = sy = ss = 0;
        }
        for (int x = -r; x < r + 1; x++)
          for (int y = -mx[abs(x)]; y < mx[abs(x)] + 1; y++) {
            cnt++;
            t0 = dp[i][j][k] + ss - 2 * x * sx - 2 * y * sy +
                 i * (x * x + y * y);
            if (t0 > dp[i + 1][j + x][k + y]) {
              dp[i + 1][j + x][k + y] = t0;
              w[i + 1][j + x][k + y] = make_pair(x, y);
            }
          }
      }
  }
  int ans = 0;
  for (int i = 0; i < 481; i++)
    for (int j = 0; j < 481; j++) {
      if (dp[n][i][j] > ans) {
        ans = dp[n][i][j];
        x = i;
        y = j;
      }
    }
  printf("%d\n", ans);
  pair<int, int> dd;
  for (int i = n; i > 0; i--) {
    printf("%d %d\n", w[i][x][y].first, w[i][x][y].second);
    dd = w[i][x][y];
    x -= dd.first;
    y -= dd.second;
  }
  return 0;
}
