#include <bits/stdc++.h>
using namespace std;
inline void __CIN__() {
  ios::sync_with_stdio(false);
  cin.tie(0);
}
char buf;
inline int xint() {
  while (buf = getchar(), buf < '0' || buf > '9')
    ;
  int x = buf - '0';
  for (; buf = getchar(), buf >= '0' && buf <= '9'; x = x * 10 + buf - '0')
    ;
  return x;
}
inline long long xll() {
  while (buf = getchar(), buf < '0' || buf > '9')
    ;
  long long x = buf - '0';
  for (; buf = getchar(), buf >= '0' && buf <= '9'; x = x * 10 + buf - '0')
    ;
  return x;
}
inline string xstring() {
  while (buf = getchar(), buf == ' ' || buf == '\n')
    ;
  string x = "";
  for (x += buf; buf = getchar(), buf != ' ' && buf != '\n'; x += buf)
    ;
  return x;
}
int st, N, M;
struct Poninter {
  int p[2];
} ans[4];
int main() {
  st = 0;
  memset(ans, 0, sizeof(ans));
  N = xint(), M = xint();
  if (N > M) {
    st = 1;
    int Q = N;
    N = M;
    M = Q;
  }
  if (N == 0) {
    ans[0].p[1] = 1;
    ans[1].p[1] = M;
    ans[3].p[1] = M - 1;
  } else {
    ans[1].p[0] = N;
    ans[1].p[1] = M;
    if (M + sqrt((double)(M * M) + N * N) >
        2 * (sqrt((double)(M * M) + (N - 1) * (N - 1)))) {
      ans[2].p[0] = N;
      ans[3].p[1] = M;
    } else {
      ans[0].p[0] = 1;
      ans[3].p[0] = N - 1;
      ans[3].p[1] = M;
    }
  }
  for (int i = 0; i < 4; ++i) {
    printf("%d %d\n", ans[i].p[st], ans[i].p[st ^ 1]);
  }
  return 0;
}
