#include <bits/stdc++.h>
using namespace std;
int n, m;
set<pair<int, int> > set_points;
void add_points(int x, int y) {
  if (x < 0 || x > n) return;
  if (y < 0 || y > m) return;
  set_points.insert(make_pair(x, y));
}
double dist(pair<int, int> a, pair<int, int> b) {
  double dx = a.first - b.first;
  double dy = a.second - b.second;
  return sqrt(dx * dx + dy * dy);
}
double len4(pair<int, int> a, pair<int, int> b, pair<int, int> c,
            pair<int, int> d) {
  return dist(a, b) + dist(b, c) + dist(c, d);
}
vector<pair<int, int> > solve(set<pair<int, int> > set_points) {
  vector<pair<int, int> > ans;
  vector<pair<int, int> > points((set_points).begin(), (set_points).end());
  double ma = 0;
  for (int i = 0; i < (int)(points).size(); i++)
    for (int j = 0; j < (int)(points).size(); j++) {
      if (i == j) continue;
      for (int k = 0; k < (int)(points).size(); k++) {
        if (i == k || j == k) continue;
        for (int l = 0; l < (int)(points).size(); l++) {
          if (i == l || j == l || k == l) continue;
          double d = len4(points[i], points[j], points[k], points[l]);
          if (d > ma) {
            ma = d;
            ans.clear();
            ans.push_back(points[i]);
            ans.push_back(points[j]);
            ans.push_back(points[k]);
            ans.push_back(points[l]);
          }
        }
      }
    }
  return ans;
}
int main() {
  scanf("%d%d", &n, &m);
  add_points(0, 0);
  add_points(1, 0);
  add_points(0, 1);
  add_points(0, m);
  add_points(1, m);
  add_points(0, m - 1);
  add_points(n, 0);
  add_points(n - 1, 0);
  add_points(n, 1);
  add_points(n, m);
  add_points(n - 1, m);
  add_points(n, m - 1);
  vector<pair<int, int> > ans = solve(set_points);
  for (int i = 0; i < (int)(ans).size(); i++) {
    printf("%d %d\n", ans[i].first, ans[i].second);
  }
  return 0;
}
