#include <bits/stdc++.h>
using namespace std;
const int N = 9;
int n, r, lim, ans, vv;
vector<pair<int, int> > p;
vector<int> x, ansx, y, ansy;
bool cmp(pair<int, int> a, pair<int, int> b) {
  return a.first * a.first + a.second * a.second >
         b.first * b.first + b.second * b.second;
}
void back(int st) {
  if (st == 0) {
    for (int i = vv + 1; i <= n; ++i) {
      x.push_back(x[i - vv]);
      y.push_back(-y[i - vv]);
    }
    int v = 0;
    for (int i = 1; i <= n; ++i)
      for (int j = i + 1; j <= n; ++j)
        if (i != j)
          v += (x[i] - x[j]) * (x[i] - x[j]),
              v += (y[i] - y[j]) * (y[i] - y[j]);
    if (v >= ans) {
      ans = v;
      ansx = x;
      ansy = y;
    }
    for (int i = vv + 1; i <= n; ++i) {
      x.pop_back();
      y.pop_back();
    }
    return;
  }
  for (int i = 0; i < lim; ++i) {
    int xx = p[i].first;
    int yy = p[i].second;
    x.push_back(xx);
    y.push_back(yy);
    back(st - 1);
    x.pop_back();
    y.pop_back();
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> r;
  x.push_back(0);
  y.push_back(0);
  for (int i = -r; i <= r; ++i)
    for (int j = -r; j <= r; ++j)
      if (i * i + j * j <= r * r) p.push_back(make_pair(i, j));
  sort(p.begin(), p.end(), cmp);
  lim = min(30, int(p.size()));
  vv = min(n, 5);
  back(vv);
  cout << ans << '\n';
  for (int i = 1; i <= n; ++i) cout << ansx[i] << ' ' << ansy[i] << '\n';
}
