#include <bits/stdc++.h>
const long long MOD = 1e9 + 7;
const long long INF = 1011111111;
const long long LLINF = 1000111000111000111LL;
const long double EPS = 1e-10;
const long double PI = 3.14159265358979323;
using namespace std;
long long powm(long long base, long long exp, long long mod = MOD) {
  long long ans = 1;
  while (exp) {
    if (exp & 1) ans = (ans * base) % mod;
    exp >>= 1, base = (base * base) % mod;
  }
  return ans;
}
const long long N = 1000005;
long long points[8][3], check[8][3];
vector<vector<long long>> permute;
void go(long long idx) {
  if (idx == 8) {
    for (long long i = 0; i < 8; i++)
      for (long long j = i + 1; j < 8; j++) {
        long long cnt = 0;
        cnt += check[i][0] == check[j][0];
        cnt += check[i][1] == check[j][1];
        cnt += check[i][2] == check[j][2];
        if (cnt == 3) return;
      }
    for (long long i = 0; i < 8; i++) {
      long long dis1 = LLINF, dis2 = LLINF, dis3 = LLINF;
      long long cnt1 = 0, cnt2 = 0, cnt3 = 0;
      for (long long j = 0; j < 8; j++)
        if (i != j) {
          long long curr =
              (check[i][0] - check[j][0]) * (check[i][0] - check[j][0]) +
              (check[i][1] - check[j][1]) * (check[i][1] - check[j][1]) +
              (check[i][2] - check[j][2]) * (check[i][2] - check[j][2]);
          if (curr == dis1)
            cnt1++;
          else if (curr == dis2)
            cnt2++;
          else if (curr == dis3)
            cnt3++;
          else if (dis1 == LLINF)
            dis1 = curr, cnt1++;
          else if (dis2 == LLINF)
            dis2 = curr, cnt2++;
          else if (dis3 == LLINF)
            dis3 = curr, cnt3++;
          else
            return;
        }
      vector<long long> dis = {dis1, dis2, dis3}, cnt = {cnt1, cnt2, cnt3};
      sort((dis).begin(), (dis).end());
      sort((cnt).begin(), (cnt).end());
      if (cnt[0] == 1 and cnt[1] == 3 and cnt[2] == 3 and
          2 * dis[0] == dis[1] and 3 * dis[0] == dis[2]) {
        cout << "YES" << '\n';
        for (long long i = 0; i < 8; i++)
          for (long long j = 0; j < 3; j++)
            cout << check[i][j] << " \n"[j == 2];
        exit(0);
      }
      return;
    }
  }
  for (long long i = 0; i < 6; i++) {
    for (long long j = 0; j < 3; j++)
      check[idx][j] = points[idx][permute[i][j]];
    go(idx + 1);
  }
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  for (long long i = 0; i < 8; i++)
    for (long long j = 0; j < 3; j++) cin >> points[i][j];
  vector<long long> v;
  for (long long i = 0; i < 3; i++) v.push_back(i);
  do {
    permute.push_back(v);
  } while (next_permutation((v).begin(), (v).end()));
  go(0);
  cout << "NO";
  return 0;
}
