#include <bits/stdc++.h>
using namespace std;
long long vs(pair<int, int> p1, pair<int, int> p2, pair<int, int> p3) {
  return p1.first * (p2.second - p3.second) +
         p2.first * (p3.second - p1.second) +
         p3.first * (p1.second - p2.second);
}
vector<pair<int, int> > get_hull(vector<pair<int, int> > pt) {
  sort(pt.begin(), pt.end());
  pair<int, int> mn = pt[0];
  pair<int, int> mx = pt.back();
  vector<pair<int, int> > up = {mn};
  vector<pair<int, int> > down = {mn};
  for (int i = 1; i < pt.size(); ++i) {
    long long s = vs(mx, mn, pt[i]);
    if (s <= 0) {
      while (up.size() >= 2 &&
             vs(up[up.size() - 2], up[up.size() - 1], pt[i]) >= 0)
        up.pop_back();
      up.push_back(pt[i]);
    }
    if (s >= 0) {
      while (down.size() >= 2 &&
             vs(down[down.size() - 2], down[down.size() - 1], pt[i]) <= 0)
        down.pop_back();
      down.push_back(pt[i]);
    }
  }
  vector<pair<int, int> > ans;
  for (auto &a : up) ans.push_back(a);
  for (int i = down.size() - 2; i > 0; --i) ans.push_back(down[i]);
  return ans;
}
int n, r;
vector<pair<int, int> > tower;
vector<pair<int, int> > ans;
long long ans_power = -1;
vector<pair<int, int> > pt;
inline int dist(int i, int j) {
  return (tower[i].first - tower[j].first) * (tower[i].first - tower[j].first) +
         (tower[i].second - tower[j].second) *
             (tower[i].second - tower[j].second);
}
void go(int id, int used, int power) {
  if (id >= (int)pt.size()) {
    if (used < n) return;
    if (power > ans_power) {
      ans_power = power;
      ans = tower;
    }
    return;
  }
  go(id + 1, used, power);
  for (int now = used + 1; now <= n; ++now) {
    tower[now - 1] = pt[id];
    for (int i = 0; i < now - 1; ++i) power += dist(i, now - 1);
    go(id + 1, now, power);
  }
}
bool cmp(const pair<int, int> &a, const pair<int, int> &b) {
  return a.first * a.first + a.second * a.second >
         b.first * b.first + b.second * b.second;
}
void task() {
  ios_base::sync_with_stdio(0);
  cin >> n >> r;
  tower.resize(n, {0, 0});
  for (int i = -30; i <= 30; ++i)
    for (int j = -30; j <= 30; ++j)
      if (i * i + j * j <= r * r) pt.push_back({i, j});
  pt = get_hull(pt);
  (void(1));
  sort(pt.begin(), pt.end(), cmp);
  pt.resize(17, {0, 0});
  go(0, 0, 0);
  cout << ans_power << "\n";
  for (auto a : ans) cout << a.first << ' ' << a.second << "\n";
}
int main() {
  task();
  return 0;
}
