#include <bits/stdc++.h>
using namespace std;
int p[8][3];
bool f = 0;
double GetDis(int i, int j) {
  double dx = fabs(p[i][0] - p[j][0]);
  double dy = fabs(p[i][1] - p[j][1]);
  double dz = fabs(p[i][2] - p[j][2]);
  dx *= dx;
  dy *= dy;
  dz *= dz;
  dx += dy;
  dx += dz;
  return sqrt(dx);
}
void go(int lev) {
  if (lev == 8) {
    double DD[10];
    for (int i = 1; i < 8; i++) DD[i - 1] = GetDis(0, i);
    sort(DD, DD + 7);
    double k1 = DD[0];
    double k2 = DD[3];
    double k3 = DD[6];
    for (int i = 0; i < 3; i++)
      if (!(fabs(DD[i] - k1) < 1e-7)) return;
    for (int i = 3; i < 6; i++)
      if (!(fabs(DD[i] - k2) < 1e-7)) return;
    if ((fabs(k1 - k2) < 1e-7) || (fabs(k1 - k3) < 1e-7) ||
        (fabs(k2 - k3) < 1e-7))
      return;
    for (int i = 1; i < 8; i++) {
      double DD2[10];
      int o = 0;
      for (int j = 0; j < 8; j++) {
        if (j == i) continue;
        DD2[o++] = GetDis(i, j);
      }
      sort(DD2, DD2 + o);
      for (int j = 0; j < o; j++)
        if (!(fabs(DD2[j] - DD[j]) < 1e-7)) return;
    }
    puts("YES");
    for (int i = 0; i < 8; i++) printf("%d %d %d\n", p[i][0], p[i][1], p[i][2]);
    f = 1;
    return;
  }
  do {
    go(lev + 1);
    if (f) break;
  } while (next_permutation(p[lev], p[lev] + 3));
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  for (int i = 0; i < 8; i++) cin >> p[i][0] >> p[i][1] >> p[i][2];
  for (int i = 0; i < 8; i++) sort(p[i], p[i] + 3);
  go(0);
  if (!f) puts("NO");
  return 0;
}
