#include <bits/stdc++.h>
using namespace std;
int perm[6][3] = {{0, 1, 2}, {0, 2, 1}, {1, 0, 2},
                  {1, 2, 0}, {2, 0, 1}, {2, 1, 0}};
int coord[8][3];
int cur[8][3];
int pow(int x, int p) { return (p == 0 ? 1 : x * pow(x, p - 1)); }
bool test(int state) {
  int mid[3] = {};
  for (int i = 0; i < 8; ++i) {
    int p = state % 6;
    state /= 6;
    for (int j = 0; j < 3; ++j) {
      cur[i][j] = coord[i][perm[p][j]] * 8;
      mid[j] += cur[i][j] / 8;
    }
  }
  for (int i = 0; i < 8; ++i)
    for (int j = 0; j < i; ++j)
      if (cur[i][0] == cur[j][0] && cur[i][1] == cur[j][1] &&
          cur[i][2] == cur[j][2])
        return false;
  vector<int> dist;
  for (int i = 0; i < 8; ++i) {
    int d = 0;
    for (int j = 0; j < 3; ++j) {
      d += pow(cur[i][j] - mid[j], 2);
    }
    dist.push_back(d);
  }
  sort(dist.begin(), dist.end());
  return dist[0] == dist[7];
}
int main() {
  for (int i = 0; i < 8; ++i)
    for (int j = 0; j < 3; ++j) cin >> coord[i][j];
  for (int i = 0; i < pow(6, 7); ++i) {
    if (test(i)) {
      cout << "YES\n";
      for (int j = 0; j < 8; ++j)
        cout << cur[j][0] / 8 << ' ' << cur[j][1] / 8 << ' ' << cur[j][2] / 8
             << '\n';
      return 0;
    }
  }
  cout << "NO\n";
}
