#include <bits/stdc++.h>
using namespace std;
int no[8][3];
int res[8][3];
inline long long sqr(int a) { return (long long)a * a; }
inline long long calc(int a, int b) {
  return sqr(res[a][0] - res[b][0]) + sqr(res[a][1] - res[b][1]) +
         sqr(res[a][2] - res[b][2]);
}
inline bool check() {
  long long dist(1000000000000000LL);
  for (int i = 1; i < 8; i++) {
    dist = min(dist, calc(i, 0));
  }
  if (dist == 0) return false;
  for (int i = 0; i < 8; i++) {
    int cnt1(0), cnt2(0), cnt3(0);
    for (int j = 0; j < 8; j++) {
      if (i == j) continue;
      long long distance = calc(i, j);
      if (distance == dist)
        cnt1++;
      else if (distance == dist * 2)
        cnt2++;
      else if (distance == dist * 3)
        cnt3++;
      else
        return false;
    }
    if (cnt1 != 3 || cnt2 != 3 || cnt3 != 1) return false;
  }
  return true;
}
inline void Add(int x, int a, int b, int c) {
  res[x][0] = no[x][a];
  res[x][1] = no[x][b];
  res[x][2] = no[x][c];
}
inline bool Dfs(int x) {
  if (x == 8) {
    if (check()) {
      cout << "YES" << endl;
      for (int i = 0; i < 8; i++) {
        cout << res[i][0] << ' ' << res[i][1] << ' ' << res[i][2] << endl;
      }
      return true;
    }
    return false;
  }
  Add(x, 0, 1, 2);
  if (Dfs(x + 1)) return true;
  Add(x, 0, 2, 1);
  if (Dfs(x + 1)) return true;
  Add(x, 1, 0, 2);
  if (Dfs(x + 1)) return true;
  Add(x, 1, 2, 0);
  if (Dfs(x + 1)) return true;
  Add(x, 2, 0, 1);
  if (Dfs(x + 1)) return true;
  Add(x, 2, 1, 0);
  if (Dfs(x + 1)) return true;
  return false;
}
int main() {
  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 3; j++) {
      cin >> no[i][j];
    }
  }
  if (!Dfs(0)) cout << "NO" << endl;
  return 0;
}
