#include <bits/stdc++.h>
struct VERTEX {
  long long x, y, z, sx, sy, sz;
  void swap(int d) {
    long long tx = x, ty = y, tz = z;
    sx = x, sy = y, sz = z;
    switch (d) {
      case 0:
        x = tx, y = ty, z = tz;
        break;
      case 1:
        x = tx, z = ty, y = tz;
        break;
      case 2:
        y = tx, x = ty, z = tz;
        break;
      case 3:
        y = tx, z = ty, x = tz;
        break;
      case 4:
        z = tx, x = ty, y = tz;
        break;
      case 5:
        z = tx, y = ty, x = tz;
        break;
    }
  }
  void ret() { x = sx, y = sy, z = sz; }
  bool same(VERTEX a) { return x == a.x && y == a.y && z == a.z; }
} A[8];
long long dist(VERTEX a, VERTEX b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y) +
         (a.z - b.z) * (a.z - b.z);
}
bool judge() {
  long long d[10];
  for (int i = 1; i < 8; i++) d[i - 1] = dist(A[i], A[0]);
  std::sort(d, d + 7);
  for (int i = 0; i < 7; i++)
    for (int j = i + 1; j < 8; j++)
      if (A[i].same(A[j])) return false;
  return (d[0] == d[1] && d[1] == d[2]) && (d[3] == d[4] && d[4] == d[5]) &&
         (d[0] * 2 == d[3]) && (d[0] * 3 == d[6]);
}
void prt() {
  puts("YES");
  for (int i = 0; i < 8; i++)
    printf("%lld %lld %lld\n", A[i].x, A[i].y, A[i].z);
}
int main() {
  for (int i = 0; i < 8; i++) scanf("%lld%lld%lld", &A[i].x, &A[i].y, &A[i].z);
  for (int i = 0; i < 6; i++) {
    A[0].swap(i);
    for (int j = 0; j < 6; j++) {
      A[1].swap(j);
      for (int k = 0; k < 6; k++) {
        A[2].swap(k);
        for (int l = 0; l < 6; l++) {
          A[3].swap(l);
          for (int m = 0; m < 6; m++) {
            A[4].swap(m);
            for (int n = 0; n < 6; n++) {
              A[5].swap(n);
              for (int o = 0; o < 6; o++) {
                A[6].swap(o);
                for (int p = 0; p < 6; p++) {
                  A[7].swap(p);
                  if (judge()) {
                    prt();
                    return 0;
                  }
                  A[7].ret();
                }
                A[6].ret();
              }
              A[5].ret();
            }
            A[4].ret();
          }
          A[3].ret();
        }
        A[2].ret();
      }
      A[1].ret();
    }
    A[0].ret();
  }
  puts("NO");
}
