#include <bits/stdc++.h>
using namespace std;
long long s[8][3];
void init() {
  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 3; j++) {
      scanf("%I64d", &s[i][j]);
    }
  }
}
bool find_ans;
long long dis(long long x[], long long y[]) {
  return (x[0] - y[0]) * (x[0] - y[0]) + (x[1] - y[1]) * (x[1] - y[1]) +
         (x[2] - y[2]) * (x[2] - y[2]);
}
long long d[8][8];
bool check() {
  long long mn = (1000000000000000LL);
  for (int i = 0; i < 8; i++) {
    for (int j = i + 1; j < 8; j++) {
      d[i][j] = d[j][i] = dis(s[i], s[j]);
      mn = min(mn, d[i][j]);
    }
  }
  for (int i = 0; i < 8; i++) {
    int a = 0, b = 0, c = 0;
    for (int j = 0; j < 8; j++)
      if (i != j) {
        if (d[i][j] == mn)
          a++;
        else if (d[i][j] == mn * 2)
          b++;
        else if (d[i][j] == mn * 3)
          c++;
      }
    if (a != 3 || b != 3 || c != 1) return false;
  }
  return true;
}
void DFS(int now) {
  if (find_ans) return;
  if (now == 8) {
    if (check()) {
      find_ans = true;
      puts("YES");
      for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 3; j++) {
          printf("%I64d ", s[i][j]);
        }
        puts("");
      }
    }
    return;
  }
  DFS(now + 1);
  swap(s[now][1], s[now][2]);
  DFS(now + 1);
  swap(s[now][0], s[now][2]);
  DFS(now + 1);
  swap(s[now][1], s[now][2]);
  DFS(now + 1);
  swap(s[now][0], s[now][2]);
  DFS(now + 1);
  swap(s[now][1], s[now][2]);
  DFS(now + 1);
}
void process() {
  find_ans = false;
  DFS(1);
  if (!find_ans) puts("NO");
}
int main() {
  init();
  process();
  return 0;
}
