#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void amin(T& a, const T& b) {
  if (a > b) a = b;
}
template <class T>
inline void amax(T& a, const T& b) {
  if (a < b) a = b;
}
template <class T>
inline void rv(vector<T>& v, int n) {
  vector<T>(n).swap(v);
  for (int i = 0; i < (n); i++) cin >> v[i];
}
inline void rv(int* v, int n) {
  for (int i = 0; i < (n); i++) scanf("%d", &v[i]);
}
inline void rv(long long* v, int n) {
  for (int i = 0; i < (n); i++) scanf("%lld", &v[i]);
}
inline vector<int> rvi(int n) {
  vector<int> v(n);
  for (int i = 0; i < (n); i++) scanf("%d", &v[i]);
  return v;
}
inline vector<long long> rvl(int n) {
  vector<long long> v(n);
  for (int i = 0; i < (n); i++) scanf("%lld", &v[i]);
  return v;
}
inline vector<string> rvs(int n) {
  vector<string> v(n);
  for (int i = 0; i < (n); i++) scanf("%s", &v[i]);
  return v;
}
template <class T>
inline void readvv(vector<vector<T>>& v, int m, int n) {
  vector<vector<T>>(m).swap(v);
  for (int i = 0; i < (m); i++) readv(v[i], n);
}
inline void pvi(vector<int>& v) {
  for (int i = 0; i < (v.size()); i++) printf("%d ", v[i]);
  printf("\n");
}
inline void pvl(vector<long long>& v) {
  for (int i = 0; i < (v.size()); i++) {
    printf("%lld ", v[i]);
  }
  printf("\n");
}
inline void pvs(vector<string>& v) {
  for (int i = 0; i < (v.size()); i++) {
    printf("%s\n", v[i].c_str());
  }
}
struct pt {
  long long x, y;
  pt() : x(0), y(0) {}
  pt(long long x, long long y) : x(x), y(y) {}
};
bool bet(long long x, long long a, long long b) {
  if (a > b) swap(a, b);
  return x >= a && x <= b;
}
vector<vector<long long>> go(long long x, long long y, long long xx,
                             long long yy) {
  long long xd = xx - x > 0 ? 1 : -1;
  long long yd = yy - y > 0 ? 1 : -1;
  vector<vector<long long>> v;
  long long i = x, j = y;
  while (i != xx) {
    v.push_back(vector<long long>{i, j});
    i += xd;
  }
  while (j != yy) {
    v.push_back(vector<long long>{i, j});
    j += yd;
  }
  return v;
}
int main() {
  vector<pt> v(3);
  cin >> v[0].x >> v[0].y >> v[1].x >> v[1].y >> v[2].x >> v[2].y;
  auto cmp = [](const pt& a, const pt& b) {
    if (a.x == b.x) return a.y < b.y;
    return a.x < b.x;
  };
  sort((v).begin(), (v).end(), cmp);
  long long ans = abs(v[0].x - v[2].x) - 1 + abs(v[0].y - v[2].y) - 1;
  vector<vector<long long>> va;
  if (bet(v[1].x, v[0].x, v[2].x) && bet(v[1].y, v[0].y, v[2].y)) {
    auto mv = go(v[0].x, v[0].y, v[1].x, v[1].y),
         mv1 = go(v[1].x, v[1].y, v[2].x, v[2].y);
    va.insert(va.end(), (mv).begin(), (mv).end());
    va.insert(va.end(), (mv1).begin(), (mv1).end());
    va.push_back({v[2].x, v[2].y});
  } else {
    if (v[1].y > v[0].y && v[0].y > v[2].y ||
        v[1].y < v[0].y && v[0].y < v[2].y) {
      auto mv = go(v[0].x, v[0].y, v[2].x, v[0].y),
           mv1 = go(v[2].x, v[0].y, v[2].x, v[2].y),
           mv2 = go(v[1].x, v[1].y, v[1].x, v[0].y);
      va.insert(va.end(), (mv).begin(), (mv).end());
      va.insert(va.end(), (mv1).begin(), (mv1).end());
      va.insert(va.end(), (mv2).begin(), (mv2).end());
      va.push_back({v[2].x, v[2].y});
    } else {
      auto mv = go(v[2].x, v[2].y, v[0].x, v[2].y),
           mv1 = go(v[0].x, v[2].y, v[0].x, v[0].y),
           mv2 = go(v[1].x, v[1].y, v[1].x, v[2].y);
      va.insert(va.end(), (mv).begin(), (mv).end());
      va.insert(va.end(), (mv1).begin(), (mv1).end());
      va.insert(va.end(), (mv2).begin(), (mv2).end());
      va.push_back({v[0].x, v[0].y});
    }
  }
  cout << va.size() << endl;
  for (auto x : va) {
    cout << x[0] << " " << x[1] << endl;
  }
  return 0;
}
