#include <bits/stdc++.h>
using namespace std;
const int NO = 1055;
int n, m;
char s[NO];
int ans[9][4];
void PUT() {
  puts("YES");
  for (int i = 1; i <= 8; i++) {
    printf("%d", ans[i][1]);
    for (int j = 2; j <= 3; j++) printf(" %d", ans[i][j]);
    puts("");
  }
}
long long dis(long long x, long long y, long long z) {
  return x * x + y * y + z * z;
}
bool dfs(int k) {
  if (k == 9) {
    int num[4] = {0};
    long long x[9] = {-1};
    for (int i = 2; i <= 8; i++)
      x[i - 1] = dis(ans[i][1] - ans[1][1], ans[i][2] - ans[1][2],
                     ans[i][3] - ans[1][3]);
    sort(x + 1, x + 8);
    if (x[1] == 0) return 0;
    int k = 1;
    for (int i = 2; i <= 7; i++)
      if (x[i] != x[i - 1]) x[++k] = x[i];
    if (k != 3) return 0;
    for (int i = 1; i <= 8; i++) {
      num[1] = num[2] = num[3] = 0;
      for (int j = 1; j <= 8; j++)
        if (i != j) {
          long long k = dis(ans[i][1] - ans[j][1], ans[i][2] - ans[j][2],
                            ans[i][3] - ans[j][3]);
          if (k == 0) return 0;
          if (k == x[1])
            num[1]++;
          else if (k == x[2])
            num[2]++;
          else if (k == x[3])
            num[3]++;
          else
            return 0;
        }
      if (num[1] != 3 || num[2] != 3 || num[3] != 1) return 0;
    }
    PUT();
    return 1;
  }
  do {
    if (dfs(k + 1)) return 1;
  } while (next_permutation(ans[k] + 1, ans[k] + 1 + 3));
  return 0;
}
int main() {
  for (int i = 1; i <= 8; i++) {
    for (int j = 1; j <= 3; j++) scanf("%d", &ans[i][j]);
    sort(ans[i] + 1, ans[i] + 1 + 3);
  }
  if (!dfs(2)) puts("NO");
  return 0;
}
