#include <bits/stdc++.h>
using namespace std;
struct node {
  int x, y;
} W[4], fucknode, ans[10010];
int cnt = 0;
int mp[1010][1010];
bool vis[1010][1010];
void link(node a, node b) {
  if (a.x > b.x) swap(a, b);
  for (register int i = min(a.x, b.x); i <= max(a.x, b.x); i++) {
    vis[i][a.y] = true;
  }
  for (register int i = min(a.y, b.y); i <= max(a.y, b.y); i++) {
    vis[b.x][i] = true;
  }
}
bool operator!=(node x, node y) { return x.x != y.x || x.y != y.y; }
int main() {
  scanf("%d%d%d%d%d%d", &W[1].x, &W[1].y, &W[2].x, &W[2].y, &W[3].x, &W[3].y);
  for (register int i = 1; i <= 3; i++) {
    for (register int j = i + 1; j <= 3; j++) {
      for (register int k = min(W[i].x, W[j].x); k <= max(W[i].x, W[j].x);
           k++) {
        for (register int l = min(W[i].y, W[j].y); l <= max(W[i].y, W[j].y);
             l++) {
          mp[k][l]++;
        }
      }
    }
  }
  for (register int i = 0; i <= 1000; i++) {
    for (register int j = 0; j <= 1000; j++) {
      if (mp[i][j] == 3) {
        fucknode.x = i;
        fucknode.y = j;
        vis[i][j] = true;
        goto end;
      }
    }
  }
end:;
  for (register int i = 1; i <= 3; i++) {
    link(fucknode, W[i]);
    vis[W[i].x][W[i].y] = true;
  }
  for (register int i = 0; i <= 1000; i++) {
    for (register int j = 0; j <= 1000; j++) {
      if (vis[i][j]) {
        cnt++;
      }
    }
  }
  printf("%d\n", cnt);
  for (register int i = 0; i <= 1000; i++) {
    for (register int j = 0; j <= 1000; j++) {
      if (vis[i][j]) {
        printf("%d %d\n", i, j);
      }
    }
  }
  return 0;
}
