#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const int B = 8, M = 1 << B;
int ord[6][3] = {{0, 1, 2}, {0, 2, 1}, {1, 0, 2},
                 {1, 2, 0}, {2, 0, 1}, {2, 1, 0}};
struct P {
  int x, y, z;
  bool operator==(const P &rhs) const {
    return x == rhs.x && y == rhs.y && z == rhs.z;
  }
  P operator-(const P &rhs) { return P{x - rhs.x, y - rhs.y, z - rhs.z}; }
} ps[8], pa[8], p[8];
P perm(const P &p, int id) {
  int c[3] = {p.x, p.y, p.z};
  return {c[ord[id][0]], c[ord[id][1]], c[ord[id][2]]};
}
LL inner_product(const P &p1, const P &p2) {
  return (LL)p1.x * p2.x + (LL)p1.y * p2.y + (LL)p1.z * p2.z;
}
bool found = false;
void solve(int dep) {
  if (found) return;
  if (dep == 8) {
    LL l = 1ll << 60;
    for (int i = 0; i < 8; i++)
      for (int j = 0; j < i; j++)
        l = min(l, inner_product(p[i] - p[j], p[i] - p[j]));
    if (l == 0) return;
    int count[5] = {0};
    for (int i = 0; i < 8; i++)
      for (int j = 0; j < i; j++) {
        LL d = inner_product(p[i] - p[j], p[i] - p[j]);
        if (d % l != 0) break;
        d /= l;
        if (1 <= d && d <= 3) count[d]++;
      }
    if (count[1] == 12 && count[2] == 12 && count[3] == 4) {
      memcpy(pa, p, sizeof(p));
      found = true;
    }
    return;
  }
  for (int i = 0; i < 6; i++) {
    p[dep] = perm(ps[dep], i);
    solve(dep + 1);
  }
}
int main() {
  for (int i = 0; i < B; i++) scanf("%d%d%d", &ps[i].x, &ps[i].y, &ps[i].z);
  p[0] = ps[0];
  solve(1);
  if (!found)
    puts("NO");
  else {
    puts("YES");
    for (int i = 0; i < 8; i++) {
      printf("%d %d %d\n", pa[i].x, pa[i].y, pa[i].z);
    }
  }
}
