#include <bits/stdc++.h>
using namespace std;
const int N = 4;
struct pt {
  int x, y;
  pt() {}
  pt(int _x, int _y) : x(_x), y(_y) {}
  bool operator==(const pt p) const { return x == p.x && y == p.y; }
  bool operator!=(const pt p) const { return !(*this == p); }
  pt operator-(const pt p) const { return pt(x - p.x, y - p.y); }
  bool inside(int w, int h) { return 0 <= x && x <= w && 0 <= y && y <= h; }
  double d() { return sqrt(x * x + y * y); }
};
pt cs[N], as[N], pps[2], qps[2];
int ps[N];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  cs[0] = pt(0, 0), cs[1] = pt(n, m);
  pps[0] = pt(1, 0), pps[1] = pt(0, 1);
  qps[0] = pt(n - 1, m), qps[1] = pt(n, m - 1);
  double maxd = 0.0;
  for (int i = 0; i < 2; i++)
    if (pps[i].inside(n, m))
      for (int j = 0; j < 2; j++)
        if (qps[j].inside(n, m) && qps[j] != pps[i]) {
          cs[2] = pps[i], cs[3] = qps[j];
          for (int k = 0; k < N; k++) ps[k] = k;
          do {
            double d = 0.0;
            for (int k = 1; k < N; k++) d += (cs[ps[k]] - cs[ps[k - 1]]).d();
            if (maxd < d) {
              maxd = d;
              for (int k = 0; k < N; k++) as[k] = cs[ps[k]];
            }
          } while (next_permutation(ps, ps + N));
        }
  if (n > 0 && m > 0) {
    if (n >= m)
      cs[0] = pt(0, 0), cs[1] = pt(n, m), cs[2] = pt(0, m), cs[3] = pt(n, 0);
    else
      cs[0] = pt(0, 0), cs[1] = pt(n, m), cs[2] = pt(n, 0), cs[3] = pt(0, m);
    double d = 0.0;
    for (int k = 1; k < N; k++) d += (cs[k] - cs[k - 1]).d();
    if (maxd < d) {
      maxd = d;
      memcpy(as, cs, sizeof(cs));
    }
  }
  for (int i = 0; i < 4; i++) printf("%d %d\n", as[i].x, as[i].y);
  return 0;
}
