#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10;
long long x[MAXN], y[MAXN], z[MAXN];
long long dis[MAXN][MAXN];
long long pp(long long x) { return x * x; }
bool judge() {
  for (int i = 1; i <= 8; i++)
    for (int j = 1; j <= 8; j++)
      dis[i][j] = pp(x[i] - x[j]) + pp(y[i] - y[j]) + pp(z[i] - z[j]);
  bool res = true;
  long long v1 = 0, v2 = (long long)(1e17);
  for (int i = 1; i <= 8; i++) {
    int cnt1 = 0, cnt2 = 0, cnt3 = 0;
    for (int j = 1; j <= 8; j++)
      if (i != j)
        if (v2 > dis[i][j]) v2 = dis[i][j];
    for (int j = 1; j <= 8; j++) {
      if (v2 == dis[i][j]) cnt1++;
      if (2 * v2 == dis[i][j]) cnt2++;
      if (3 * v2 == dis[i][j]) cnt3++;
    }
    if (cnt1 == 3 && cnt2 == 3 && cnt3 == 1)
      continue;
    else
      return false;
  }
  return true;
}
bool f;
void em(int i) {
  if (f) return;
  if (i > 8) {
    if (judge()) {
      f = true;
      printf("YES\n");
      for (int i = 1; i <= 8; i++)
        printf("%I64d %I64d %I64d\n", x[i], y[i], z[i]);
    }
    return;
  }
  em(i + 1);
  swap(y[i], z[i]);
  em(i + 1);
  swap(y[i], z[i]);
  swap(x[i], y[i]);
  em(i + 1);
  swap(y[i], z[i]);
  em(i + 1);
  swap(y[i], z[i]);
  swap(x[i], z[i]);
  em(i + 1);
  swap(y[i], z[i]);
  em(i + 1);
}
int main() {
  while (scanf("%I64d%I64d%I64d", &x[1], &y[1], &z[1]) != EOF) {
    for (int i = 2; i <= 8; i++) scanf("%I64d%I64d%I64d", &x[i], &y[i], &z[i]);
    f = false;
    em(1);
    if (!f) printf("NO\n");
  }
  return 0;
}
