#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000")
using namespace std;
const long double pi = acos(-1.0);
int n, m;
vector<pair<int, int> > tmp;
long double sqr(long double x) { return x * x; }
long double dist(pair<int, int> p1, pair<int, int> p2) {
  return sqrtl(sqr(p1.first - p2.first) + sqr(p1.second - p2.second));
}
bool good(int x, int y) {
  return ((x >= 0) && (x <= n) && (y >= 0) && (y <= m));
}
int main() {
  scanf("%d%d", &n, &m);
  for (int cx = 0; cx < 2; ++cx)
    for (int cy = 0; cy < 2; ++cy)
      for (int dx = -3; dx <= 3; ++dx)
        for (int dy = -3; dy <= 3; ++dy)
          if (good(cx * n + dx, cy * m + dy))
            tmp.push_back(make_pair(cx * n + dx, cy * m + dy));
  sort(tmp.begin(), tmp.end());
  tmp.resize(unique(tmp.begin(), tmp.end()) - tmp.begin());
  long double best = -1;
  vector<pair<int, int> > res;
  for (int i = 0; i < ((int)(tmp).size()); ++i)
    for (int j = 0; j < ((int)(tmp).size()); ++j)
      if (i != j)
        for (int k = 0; k < ((int)(tmp).size()); ++k)
          if ((i != k) && (j != k))
            for (int l = 0; l < ((int)(tmp).size()); ++l)
              if ((i != l) && (j != l) && (k != l)) {
                long double tmpres = dist(tmp[i], tmp[j]) +
                                     dist(tmp[j], tmp[k]) +
                                     dist(tmp[k], tmp[l]);
                if (tmpres > best) {
                  best = tmpres;
                  res = {tmp[i], tmp[j], tmp[k], tmp[l]};
                }
              }
  for (int i = 0; i < ((int)(res).size()); ++i)
    printf("%d %d\n", res[i].first, res[i].second);
  return 0;
}
