#include <bits/stdc++.h>
using namespace std;
const double eps(1e-8);
int x[8][3], ans[8][3], y[8], p[8][3];
int d[6][3];
bool v[10];
int flag;
vector<long long> vec;
long long dis(long long a1, long long a2, long long a3, long long b1,
              long long b2, long long b3) {
  return (a1 - b1) * (a1 - b1) + (a2 - b2) * (a2 - b2) + (a3 - b3) * (a3 - b3);
}
bool check() {
  for (int i = 0; i < 8; i++)
    for (int j = 0; j < 3; j++) p[i][j] = x[i][d[y[i]][j]];
  long long tmp;
  for (int i = 0; i < 8; i++) {
    vec.clear();
    for (int j = 0; j < 8; j++)
      if (i != j) {
        vec.push_back(
            dis(p[i][0], p[i][1], p[i][2], p[j][0], p[j][1], p[j][2]));
      }
    sort(vec.begin(), vec.end());
    for (int j = 0; j < 3; j++)
      if (vec[j] != vec[0]) return 0;
    for (int j = 3; j < 6; j++)
      if (vec[j] != vec[0] * 2LL) return 0;
    if (vec[6] != vec[0] * 3LL) return 0;
    if (i) {
      if (tmp != vec[0]) return 0;
    } else {
      if (!vec[0]) return 0;
      tmp = vec[0];
    }
  }
  return true;
}
void dfs(int p) {
  if (p == 8) {
    if (check()) {
      flag = true;
    }
    return;
  }
  for (int i = 0; i < 6; i++) {
    y[p] = i;
    dfs(p + 1);
    if (flag) return;
  }
}
int main() {
  d[0][0] = 0, d[0][1] = 1, d[0][2] = 2;
  d[1][0] = 0, d[1][1] = 2, d[1][2] = 1;
  d[2][0] = 1, d[2][1] = 0, d[2][2] = 2;
  d[3][0] = 1, d[3][1] = 2, d[3][2] = 0;
  d[4][0] = 2, d[4][1] = 0, d[4][2] = 1;
  d[5][0] = 2, d[5][1] = 1, d[5][2] = 0;
  for (int i = 0; i < 8; i++)
    for (int j = 0; j < 3; j++) scanf("%d", &x[i][j]);
  flag = 0;
  dfs(0);
  if (flag) {
    puts("YES");
    for (int i = 0; i < 8; i++) {
      for (int j = 0; j < 3; j++) printf("%d ", p[i][j]);
      printf("\n");
    }
  } else {
    puts("NO");
  }
  return 0;
}
