#include <bits/stdc++.h>
using namespace std;
struct dfgjdfgkl {
  int x, y;
} p[12];
double dist(int a, int b, int c, int d) {
  return sqrt((p[b].x - p[a].x) * (p[b].x - p[a].x) +
              (p[b].y - p[a].y) * (p[b].y - p[a].y)) +
         sqrt((p[c].x - p[b].x) * (p[c].x - p[b].x) +
              (p[c].y - p[b].y) * (p[c].y - p[b].y)) +
         sqrt((p[d].x - p[c].x) * (p[d].x - p[c].x) +
              (p[d].y - p[c].y) * (p[d].y - p[c].y));
}
bool eq(int a, int b) { return p[a].x == p[b].x && p[a].y == p[b].y; }
int main() {
  int m, n, L = 0;
  scanf("%d%d", &n, &m);
  p[L].x = 0;
  p[L].y = 0;
  L++;
  if (n > 0) {
    p[L].x = 1;
    p[L].y = 0;
    L++;
  }
  if (m > 0) {
    p[L].x = 0;
    p[L].y = 1;
    L++;
  }
  if (m > 0) {
    p[L].x = 0;
    p[L].y = m - 1;
    L++;
  }
  p[L].x = 0;
  p[L].y = m;
  L++;
  if (n > 0) {
    p[L].x = 1;
    p[L].y = m;
    L++;
  }
  if (n > 0) {
    p[L].x = n - 1;
    p[L].y = m;
    L++;
  }
  p[L].x = n;
  p[L].y = m;
  L++;
  if (m > 0) {
    p[L].x = n;
    p[L].y = m - 1;
    L++;
  }
  if (m > 0) {
    p[L].x = n;
    p[L].y = 1;
    L++;
  }
  p[L].x = n;
  p[L].y = 0;
  L++;
  if (n > 0) {
    p[L].x = n - 1;
    p[L].y = 0;
    L++;
  }
  int best[4] = {0, 1, 2, 3};
  double best_ans = 0;
  for (int a = 0; a < L; a++) {
    for (int b = 0; b < L; b++) {
      for (int c = 0; c < L; c++) {
        for (int d = 0; d < L; d++) {
          if (eq(a, b) || eq(a, c) || eq(a, d) || eq(b, c) || eq(b, d) ||
              eq(c, d)) {
            continue;
          }
          double res = dist(a, b, c, d);
          if (res > best_ans) {
            best_ans = res;
            best[0] = a;
            best[1] = b;
            best[2] = c;
            best[3] = d;
          }
        }
      }
    }
  }
  for (int i = 0; i < 4; i++) {
    printf("%d %d\n", p[best[i]].x, p[best[i]].y);
  }
  return 0;
}
